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


130

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

답변:


114

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

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

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


1
@gili : 단 하나의 결과로 생성되는 dword를 얻기 위해 항상 dor를 함께 xor 할 수 있습니다.
Blindy

2
@Dustin : 당신의 대답은 완전히 정확하지만 "CRC는 계산이 훨씬 효율적입니다"로 "CRC는 계산이 훨씬 쉽습니다"로 변경하는 것을 고려하십시오. MD5 / SHA-1 알고리즘은 복잡하지만 실제로 '비효율적 인'IMO는 아닙니다.
Coxy

1
@coxymla 당신이 맞습니다, 내가 사용해야했던 단어는 "복잡한" "비효율적"이 아닙니다. 감사!
정의

27
긴 해시를 32 비트로 줄이려면 첫 32 비트 만 가져 오십시오.
orip

1
보안이 당신의 목표 인 경우 혹시 사용하지 않을해야한다 MD5, SHA-1또한, 일부 변형 피해야한다 SHA-2권장합니다.
Peter

33

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

이것도 참조 하십시오 .


이 답변의 링크에서 가장 중요한 부분 : "(...) 심지어 2048 비트 CRC조차도 128 비트 MD5보다 암호 적으로 훨씬 덜 안전합니다"
Marc.2377

3
정답은 여전히 ​​정확하지만 오늘날 MD5와 SHA1은 동일한 보안 수준에 있습니다. 즉, 의도하지 않은 오류를 탐지하는 데만 적합합니다.
Piskvor는 건물을

21

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

해시에 대한 CRC 관련 결론 :

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

최신 정보

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


링크가 끊어졌습니다. 설명을 직접 쓸 수 있습니까? 그렇지 않다면 대답은 쓸모가 없습니다.
14

좋아, 나는 결론에 결론을 포함시킬 것이다.
Andre Luus

이상한은 벤치 마크에 따라 여기에 , CRC 실제로 속도와 충돌의 수의 측면에서 꽤 잘한다.
ostrokach

정말 흥미 롭습니다. 다시 연결 한 연구를 살펴 봐야했지만 추측해야한다면 다른 테스트 구현 때문일 것입니다. 결정을 내려야한다면 연구에서 조언을 구할 것이며, 과학적으로 더 건전한 것으로 보입니다.
Andre Luus

수백만 개의 URL을 해시 한 경험에서 CRC64는 8 번 충돌했고 MD5는 5 번 충돌했습니다. 분명히 MD5가 더 좋았지 만 CRC64는 훨씬 빠르고 더 빠르고 간단한 해시였습니다.
J. Dimeo 2016 년

18

이 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"보다 느립니다.

당신은 문자가 아닌 비트를 의미합니다
esskar

실제로는 아닙니다. echo hash ( 'crc32', '빠른 갈색 여우가 게으른 개를 뛰어 넘었습니다.'); 8 자 길이의 문자열 인 "413a86af"를 에코합니다. Btw, HEX 형식으로 저장된 32 비트 숫자입니다. 예를 들어, "sha256"에는 256 비트 해시가 있으며 다시 16 진수로 저장되어 64 자 길이의 문자열을 제공합니다.
Martin

45
이 결과는 매우 기만적입니다. 이러한 해싱 알고리즘을 대규모 데이터 세트 ( 대신에 전쟁과 평화"The quick brown fox jumped over the lazy dog." )에 적용하면 MD5보다 CRC가 얼마나 빠른지 알 수 있습니다.
ubiquibacon

1
MD5 / Sha1이 올바른 솔루션 인 중간 사례 (라이브러리에서 중복 검사)가 있습니다. 소멸 가능성이 거의없는 해시 충돌을 신중하게 조작하는 적의 경우를 처리 할 필요는 없지만 우발적 인 충돌을 처리해야합니다. 비트 오류 및 손상 감지 : CRC32 라이브러리에서 충돌 감지 : MD5 / SHA1 상대 응용 프로그램 : Sha256 이상. 물론 수십억 개의 항목이있는 라이브러리가있는 경우 해시 비트도 늘려야합니다.
Dewi Morgan

PHP? ARM 플랫폼에서 임베디드 코드, 16MHz, 46 바이트의 CRC32, 아마도 12 마이크로 초. 하드웨어 지원이 있습니다. 하드웨어 지원 AES조차도 수백 배 느려질 것입니다. 지원되지 않는 조회 테이블 CRC는 여전히 약 50 마이크로 초 내에 있어야합니다.
ilgitano


9

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

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

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

관련 :


8

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

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

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

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

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


6

CRC32는 더 빠르며 해시는 32 비트 길이입니다.

빠르고 가벼운 체크섬을 원할 때 사용하십시오. CRC는 이더넷에서 사용됩니다.

더 많은 안정성이 필요한 경우 최신 해싱 기능을 사용하는 것이 좋습니다.


5

계산 리소스가 매우 빡빡하거나 (예 : 일부 임베드 환경) 많은 출력 값을 저장 / 전송해야하고 공간 / 대역폭이 꽉 찬 경우에만 CRC를 사용하십시오 (MD5 출력이 128 비트 인 경우 CRC가 일반적으로 32 비트이므로 SHA1 160 비트 및 기타 SHA 변형 (최대 512 비트).

CRC는 "가짜"이기 때문에 보안 검사에 CRC를 사용하지 마십시오.

악의적 인 변경 감지가 아닌 우발적 인 오류 감지의 경우에도 해시가 단순한 CRC보다 낫습니다. 부분적으로 CRC가 계산되는 간단한 방법으로 인해 (그리고 부분적으로 CRC 값이 공통 해시 출력보다 짧기 때문에 가능한 값의 범위가 훨씬 작기 때문에) 둘 이상의 오류가있는 상황에서 훨씬 더 가능성이 높습니다 , 하나의 오류가 다른 오류를 가려서 두 오류에도 불구하고 동일한 CRC로 끝납니다.

간단히 말해서 적절한 해시 알고리즘을 사용 하지 않을 이유가 없다면 간단한 CRC를 피하십시오.


1
적절한 다항식을 사용하는 경우 CRC는 우발적 인 모든 데이터 변경 사항을 포착합니다. 정확히 여러 비트가 변경되면 1 / 2 ^ 32 변경 사항이 누락됩니다.
Gerhard

그리고 적절한 다항식을 사용하면 버스트 오류와 같은 특정 공통 클래스의 모든 오류도 포착합니다.
erikkallen

임베디드 시스템에 관한 질문은 제외하고 귀하의 답변에 동의합니다. 더 작은 임베디드 시스템에서는 암호화 알고리즘의 성능이 문제가 될 수 있습니다.
Craig McQueen

그것에 동의하지 않을 것입니다. CRC 오류 다항식은 1,2,3,5를 감지 할 수 있고 경우에 따라 11 비트와 같은 오류를 버스트 할 수 있도록 신중하게 선택됩니다. 암호화 해시는 순전히 통계적이므로 큰 다이제스트 값을 사용해야합니다. 8-32 비트는 암호화 해시 다이제스트에는 비현실적이며 CPU 사이클 및 게이트에서 무의미하게 비쌉니다. 임베디드 시스템에서 작업하는 경우 확실히 답이 될 수 없습니다. CRC를 사용하지 않는 유일한 시간은 지능적인 대적 시나리오를 처리해야하는 경우입니다.
ilgitano

5

나는 최근 똑똑한 CRC를 사용했습니다. 의 저자 jdupe의 파일 중복 식별 및 제거 도구 (인기 EXIF 도구 jhead 같은 저자) 파일을 통해 첫 번째 패스 동안 그것을 사용합니다. CRC는 각 파일의 처음 32K에서 계산되어 동일한 것으로 보이는 파일을 표시하며 파일의 크기도 같아야합니다. 이러한 파일은 전체 이진 비교를 수행 할 파일 목록에 추가됩니다. 대용량 미디어 파일 확인 속도가 빨라집니다.


이 접근법의 한 가지 문제점은 포함 된 CRC32가 포함 된 파일에서 실행될 때 결과 CRC가 파일의 데이터와 독립적 일 수 있습니다 (데이터가 변경되면 차이를 없애기 위해 CRC32가 변경됨). ). CRC32를 계산하기 전에 몇 가지 간단한 방법으로 데이터를 변경하면 해당 문제를 피할 수 있습니다.
supercat

1
@ supercat-나는 이것이 실제로 문제라고 생각하지 않습니다. 파일에 나머지 파일의 crc32 인 crc32 헤더가 포함 된 경우, 파일이 업데이트 될 때 crc32 헤더의 각 비트는 대략 50 %의 확률을 갖습니다. 헤더의 변경 사항은 상당히 임의의 분포를 따라야합니다. 이것이 어떻게 CRC32 (헤더 + 데이터)가 항상 동일하거나 파일의 데이터 부분에 의존하지 않는지 알 수 없습니다.
teratorn

@ teratorn : 특정 시드 상수를 사용하여 계산 된 전체 파일의 CRC32가 항상 다른 상수 값이되는 방식으로 계산 된 끝에 CRC32가있는 많은 파일을 보았습니다. 이것은 이진 코드 이미지와 같은 것들에서 일반적입니다. Acme 1000 DVD 플레이어가 펌웨어 업그레이드를 위해 고정 크기 코드 이미지를 사용하고 모든 코드 이미지에 특정 CRC32가있을 것으로 예상하는 경우 다양한 파일의 CRC32를 계산하는 루틴이 Acme 1000의 다른 코드 이미지를 구별 할 수 없습니다.
supercat

이 경우 CRC의 요점은 파일이 다르다는 것을 신속하게 식별하는 것입니다. CRC가 동일하게 돌아 오면 이제 비싼 이진 비교를 수행해야하므로 임베디드 CRC가 알고리즘을 중단하지 않습니다. CRC 첫 번째 패스에서 파일이 같을 수도 있지만 많은 파일이 아닐 수도 있으므로 사용자 정의 다항식을 사용하여 파일을 피할 수 있기 때문에 일부 파일은 이진 파일과 비교 될 수 있습니다.
ilgitano

4

CRC32는 더 빠르며 때로는 하드웨어 지원을 제공합니다 (예 : Nehalem 프로세서). 실제로 사용하는 유일한 시간은 하드웨어와 인터페이스하거나 실제로 성능 부족한 경우입니다.


4

기본부터 시작하겠습니다.

암호화에서 해싱 알고리즘은 다이제스트 연산을 통해 많은 비트를 더 적은 비트로 변환합니다. 해시는 메시지와 파일의 무결성을 확인하는 데 사용됩니다.

모든 해싱 알고리즘은 충돌을 생성합니다.여러 비트 조합이 동일한 비트 출력을 생성 할 때 충돌이 발생합니다. 해싱 알고리즘의 암호화 강도는 개인이 주어진 입력에 대한 출력을 결정할 수없는 능력에 의해 정의됩니다. 합법적 인 파일과 일치하는 해시로 파일을 구성하고 가정 된 무결성을 손상시킬 수 있기 때문입니다. 시스템의. CRC32와 MD5의 차이점은 MD5가 예측하기 어려운 더 큰 해시를 생성한다는 것입니다.

메시지 무결성을 구현하려고 할 때 (메시지가 전송 중에 훼손되지 않았 음을 의미 함) 충돌을 예측할 수없는 것이 중요한 속성입니다. 32 비트 해시는 설명 할 수 있습니다 4,000,000,000 다른 메시지를 40 억 서로 다른 고유의 해시를 사용하거나 파일을. 40 억 개의 파일과 1 개의 파일이 있으면 1 개의 충돌이 보장됩니다. 1TB 비트 스페이스는 수십억 개의 충돌 가능성이 있습니다. 공격자이고 32 비트 해시가 무엇인지 예측할 수 있으면 대상 파일과 충돌하는 감염된 파일을 구성 할 수 있습니다. 그것은 같은 해시를 가지고 있습니다.

또한 10mbps 전송을 수행하는 경우 crc32를 우회하여 대상으로 계속 진행하여 패킷이 손상 될 가능성이 매우 낮습니다. 10mbps에서 10 오류 / 초를 얻습니다 . 최대 1gbps까지 올리면 초당 1,000 오류가 발생합니다 . 초당 최대 1 엑사 비트까지 램핑하면 초당 1,000,000,000 개의 오류율이 발생합니다 . 충돌 속도가 1 \ 1,000,000 이라고 가정 해 봅시다.전송 오류, 백만 개의 전송 오류 중 1을 의미하면 손상된 데이터가 감지되지 않습니다. 10mbps에서 100,000 초마다 또는 하루에 한 번 오류 데이터가 전송됩니다. 1gbps에서는 5 분마다 한 번씩 발생합니다. 초당 1 엑사 비트에서 우리는 초당 몇 번 이야기하고 있습니다.

Wireshark를 열면 일반적인 이더넷 헤더에 CRC32가 있고 IP 헤더에 CRC32가 있고 TCP 헤더에 CRC32가 있으며 상위 계층 프로토콜이 수행 할 수있는 작업 외에 예를 들어 IPSEC는 위의 내용 외에도 무결성 검사에 MD5 또는 SHA를 사용할 수 있습니다. 일반적인 네트워크 통신에는 여러 계층의 오류 검사가 있으며, 10mbps 이하의 속도로 계속 반복됩니다.

CRC (Cyclic Redundancy Check)에는 몇 가지 공통 버전이 있으며 몇 가지 공통적이지 않지만 일반적으로 메시지 나 파일이 전송 중 손상되었음을 알리기 위해 설계되었습니다 (다중 비트 뒤집기). CRC32 자체는 충돌 속도로 인해 스칼라 대기업 환경에서 오늘날의 표준에 따라 매우 우수한 오류 검사 프로토콜이 아닙니다. 일반 사용자 하드 드라이브는 100k 개 이상의 파일을 보유 할 수 있으며 회사의 파일 공유는 수천만을 가질 수 있습니다. 해시 공간과 파일 수의 비율이 너무 낮습니다. CRC32는 계산 비용이 저렴하지만 MD5는 그렇지 않습니다.

MD5는 의도적으로 충돌을 사용하여 악성 파일을 양성으로 보이도록 설계되었습니다. 해시 공간이 충분히 공격되어 일부 공격이 발생할 수 있고 일부 충돌이 예측 가능하기 때문에 안전하지 않은 것으로 간주됩니다. SHA1과 SHA2는 블록의 새로운 아이들입니다.

파일 확인을 위해 Md5는 여러 공급 업체에서 사용하기 시작했습니다. 멀티 기가 바이트 파일 또는 멀티 테라 바이트 파일을 빠르게 사용하여 일반 OS의 사용 및 CRC32 지원 위에 쌓을 수 있기 때문입니다. 향후 10 년 안에 파일 시스템이 오류 검사에 MD5를 사용하기 시작하더라도 놀라지 마십시오.


1

CRC 코드는 더 간단하고 빠릅니다.

무엇을 위해 무엇이 필요합니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.