[hash] CRC가 MD5 / SHA1보다 사용하기에 더 적합한시기는 언제입니까?

MD5 또는 SHA1과 같은 최신 해싱 함수와 비교하여 오류 감지에 CRC를 사용하는 것이 언제 적절한가요? 전자는 임베디드 하드웨어에서 구현하기가 더 쉽습니까?



답변

CRC는 네트워크 간섭, 라인 노이즈, 왜곡 등 발생할 수있는 데이터의 임의 오류를 감지하는 데 적합합니다.

CRC는 MD5 나 SHA1보다 계산이 훨씬 덜 복잡합니다. MD5와 같은 해시 함수를 사용하는 것은 임의 오류 감지에 과잉 일 수 있습니다. 그러나 모든 종류의 보안 검사에 CRC를 사용하는 것은 MD5와 같은 더 복잡한 해싱 기능보다 훨씬 안전하지 않습니다.

그리고 그렇습니다. CRC는 임베디드 하드웨어에서 구현하기가 훨씬 쉬우 며 IC에서 다양한 패키지 솔루션을 얻을 수도 있습니다.


답변

CRC는 의도하지 않은 데이터 변경에 대비하여 설계되었습니다. 즉, 의도하지 않은 오류를 감지하는 데는 좋지만 데이터가 악의적으로 처리되지 않도록하는 방법으로는 쓸모가 없습니다.

이것도 참조 하십시오 .


답변

CRC 해시가 해시 테이블에 얼마나 부적절한 지 보여주는 연구 결과가 있습니다 . 또한 알고리즘의 실제 특성에 대해서도 설명합니다. 이 연구 에는 다른 해시 알고리즘에 대한 평가도 포함되며 유지하기에 좋은 참고 자료입니다.

해시에 대한 CRC 관련 결론 :

CRC32는 해시 테이블 사용을위한 것이 아닙니다. 이 목적으로 사용하는 데는 정당한 이유가 없으므로 사용하지 않는 것이 좋습니다. CRC32를 사용하기로 결정한 경우 키 옥텟이 공급되는 것과 반대의 끝에서 해시 비트를 사용하는 것이 중요합니다.이 끝은 특정 CRC32 구현에 따라 다릅니다. CRC32를 “블랙 박스”해시 함수로 취급하지 말고 범용 해시로 사용하지 마십시오. 각 응용 프로그램의 적합성을 테스트하십시오.

최신 정보

사이트가 다운 된 것 같습니다. 인터넷 아카이브 사본이 생각을.


답변

이 PHP 코드의 모든 줄을 1.000.000 루프로 실행했습니다. 결과는 주석 (#)으로 표시됩니다.

hash('crc32', 'The quick brown fox jumped over the lazy dog.');#  750ms   8 chars
hash('crc32b','The quick brown fox jumped over the lazy dog.');#  700ms   8 chars
hash('md5',   'The quick brown fox jumped over the lazy dog.');#  770ms  32 chars
hash('sha1',  'The quick brown fox jumped over the lazy dog.');#  880ms  40 chars
hash('sha256','The quick brown fox jumped over the lazy dog.');# 1490ms  64 chars
hash('sha384','The quick brown fox jumped over the lazy dog.');# 1830ms  96 chars
hash('sha512','The quick brown fox jumped over the lazy dog.');# 1870ms 128 chars

내 결론 :

  • http://en.wikipedia.org/wiki/Cyclic_redundancy_check 가 필요 하고 보안에 신경 쓰지 않을 때는 “crc32b”를 사용하십시오 .
  • 보안 계층을 추가해야 할 경우 “sha256″이상을 사용하십시오.

  • “md5″또는 “sha1″은 다음과 같은 이유로 사용하지 마십시오.

    1. 보안에 관한 일부 보안 문제
    2. CRC 만 있으면 해시 문자열이 길고 “crc32b”보다 느립니다.

답변

구현, 속도 및 신뢰성에 대한 CRC 정보는 다음을 참조하십시오. CRC 오류 감지 알고리즘에 간단한 안내서를 . CRC에 모든 것이 있습니다.

누군가가 데이터를 악의적으로 수정하려고 시도하지 않는 한 CRC 변경으로 충분하지 않습니다. “좋은”(표준) 정치를 사용하십시오.


답변

그것은 모두 요구 사항과 기대에 달려 있습니다.

다음은 이러한 해시 함수 알고리즘 간의 간단한 차이점입니다 .

CRC (CRC-8 / 16 / 32 / 64)

  • 암호화 해싱 알고리즘 이 아닙니다 (순환 중복 검사를 기반으로하는 선형 함수를 사용함)
  • 9, 17, 33 또는 65 비트를 생성 할 수 있음
  • 암호화를 보장하지 않으므로 암호화 목적으로 사용되지 않습니다.
  • 2006 년 쉽게 뒤집을 수 있기 때문에 디지털 서명에 사용하기에 부적합합니다 .
  • 암호화 목적으로 사용해서는 안됩니다.
  • 다른 줄이 충돌을 일으킬 수 있습니다.
  • 1961 년에 발명되어 이더넷 및 기타 여러 표준에서 사용됩니다.

MD5

SHA-1

  • 암호화 해시 알고리즘입니다.

  • 메시지 요약으로 알려진 160 비트 (20 바이트) 해시 값을 생성합니다.

  • 암호 해시이며 2005 년 이후로 더 이상 안전한 것으로 간주되지 않습니다.

  • 암호화 목적으로 사용될 수 있습니다.

  • sha1 충돌의 예가 발견되었습니다

  • 1993 년에 처음 출판 (SHA-0), 1995 년에 SHA-1로 출판,

  • 시리즈 : SHA-0, SHA-1, SHA-2, SHA-3,

    요약하자면, SHA-1 사용은 더 이상 자금이 지원되지 않는 상대방에 대해 안전한 것으로 간주되지 않습니다. 2005 년에 암호 분석가는 SHA-1에 대한 공격을 발견하여 진행중인 사용 schneier에 대해 충분히 안전하지 않을 수 있음을 시사했습니다 . 미국 NIST는 연방 기관이 충돌 방지가 필요한 응용 프로그램에 SHA1-1 사용을 중단하고 2010 NIST 이후에 SHA-2를 사용해야한다고 조언합니다 .

따라서 파일의 무결성 (손상에 대한)을 확인하거나 성능 측면에서 간단한 캐싱 목적을위한 간단하고 빠른 솔루션을 찾고 있다면 CRC-32를 고려해 볼 수 있습니다. 그러나 MD5는 안전하고 일관성있는 전문 응용 프로그램을 개발하는 경우 충돌 가능성을 피하기 위해 SHA-2 이상 (예 : SHA-3)을 사용하십시오.

공연

PHP의 간단한 벤치 마크 테스트 :

# Testing static text.

$ time php -r 'for ($i=0;$i<1000000;$i++) crc32("foo");'
real    0m0.845s
user    0m0.830s
sys     0m0.008s

$ time php -r 'for ($i=0;$i<1000000;$i++) md5("foo");'
real    0m1.103s
user    0m1.089s
sys     0m0.009s

$ time php -r 'for ($i=0;$i<1000000;$i++) sha1("foo");'
real    0m1.132s
user    0m1.116s
sys   0m0.010s

# Testing random number.

$ time php -r 'for ($i=0;$i<1000000;$i++) crc32(rand(0,$i));'
real    0m1.754s
user    0m1.735s
sys     0m0.012s\

$ time php -r 'for ($i=0;$i<1000000;$i++) md5(rand(0,$i));'
real    0m2.065s
user    0m2.042s
sys     0m0.015s

$ time php -r 'for ($i=0;$i<1000000;$i++) sha1(rand(0,$i));'
real    0m2.050s
user    0m2.021s
sys     0m0.015s

관련 :


답변

보호하려는 것이 무엇인지 말하지 않습니다.

CRC는 악성 시스템 수정을 방지하는 대신 우발적 인 데이터 손상을 방지하기 위해 임베디드 시스템에서 종종 사용됩니다. CRC가 유용한 장소의 예는 시스템 초기화 중에 펌웨어 손상을 방지하기 위해 EPROM 이미지를 검증하는 것입니다. 시스템 부트 로더는 응용 프로그램 코드에 대한 CRC를 계산하고 코드를 실행하기 전에 저장된 값과 비교합니다. 우발적 인 프로그램 손상 또는 다운로드 실패 가능성을 방지합니다.

FLASH 또는 EEPROM에 저장된 구성 데이터를 보호하기 위해 CRC를 유사한 방식으로 사용할 수도 있습니다. CRC가 올바르지 않으면 데이터가 유효하지 않은 것으로 플래그 될 수 있으며 기본 또는 백업 데이터 세트가 사용됩니다. 장치 오류로 인해 또는 구성 데이터 저장소를 업데이트하는 동안 사용자가 전원을 차단 한 경우 CRC가 유효하지 않을 수 있습니다.

해시는 다중 비트 오류가있는 CRC보다 손상을 감지 할 가능성이 더 높다는 의견이 있습니다. 이것은 사실이며, 16 비트 또는 32 비트 CRC 사용 여부에 대한 결정은 사용중인 손상된 데이터 블록의 안전 결과와 2 ^ 16 또는 2 ^ 32 확률의 1을 정당화 할 수 있는지 여부에 달려 있습니다. 데이터 블록이 잘못 선언 된 것으로 유효합니다.

많은 장치에는 표준 알고리즘을위한 내장 CRC 생성기가 있습니다. Texas의 MSP430F5X 시리즈에는 CRC-CCITT 표준의 하드웨어 구현이 있습니다.