답변:
CRC는 네트워크 간섭, 라인 노이즈, 왜곡 등 발생할 수있는 데이터의 임의 오류를 감지하는 데 적합합니다.
CRC는 MD5 나 SHA1보다 계산이 훨씬 덜 복잡합니다. MD5와 같은 해시 함수를 사용하는 것은 임의 오류 감지에 과잉 일 수 있습니다. 그러나 모든 종류의 보안 검사에 CRC를 사용하는 것은 MD5와 같은 더 복잡한 해싱 기능보다 훨씬 안전하지 않습니다.
그리고 그렇습니다. CRC는 임베디드 하드웨어에서 구현하기가 훨씬 쉬우 며 IC에서 다양한 패키지 솔루션을 얻을 수도 있습니다.
MD5
, SHA-1
또한, 일부 변형 피해야한다 SHA-2
권장합니다.
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
내 결론 :
보안 계층을 추가해야 할 경우 "sha256"이상을 사용하십시오.
"md5"또는 "sha1"은 다음과 같은 이유로 사용하지 마십시오.
"The quick brown fox jumped over the lazy dog."
)에 적용하면 MD5보다 CRC가 얼마나 빠른지 알 수 있습니다.
구현, 속도 및 신뢰성에 대한 CRC 정보는 다음을 참조하십시오. CRC 오류 감지 알고리즘에 간단한 안내서를 . CRC에 모든 것이 있습니다.
누군가가 데이터를 악의적으로 수정하려고 시도하지 않는 한 CRC 변경으로 충분하지 않습니다. "좋은"(표준) 정치를 사용하십시오.
그것은 모두 요구 사항과 기대에 달려 있습니다.
다음은 이러한 해시 함수 알고리즘 간의 간단한 차이점입니다 .
암호화 해시 알고리즘입니다.
메시지 요약으로 알려진 160 비트 (20 바이트) 해시 값을 생성합니다.
암호 해시이며 2005 년 이후로 더 이상 안전한 것으로 간주되지 않습니다.
암호화 목적으로 사용될 수 있습니다.
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 표준의 하드웨어 구현이 있습니다.
계산 리소스가 매우 빡빡하거나 (예 : 일부 임베드 환경) 많은 출력 값을 저장 / 전송해야하고 공간 / 대역폭이 꽉 찬 경우에만 CRC를 사용하십시오 (MD5 출력이 128 비트 인 경우 CRC가 일반적으로 32 비트이므로 SHA1 160 비트 및 기타 SHA 변형 (최대 512 비트).
CRC는 "가짜"이기 때문에 보안 검사에 CRC를 사용하지 마십시오.
악의적 인 변경 감지가 아닌 우발적 인 오류 감지의 경우에도 해시가 단순한 CRC보다 낫습니다. 부분적으로 CRC가 계산되는 간단한 방법으로 인해 (그리고 부분적으로 CRC 값이 공통 해시 출력보다 짧기 때문에 가능한 값의 범위가 훨씬 작기 때문에) 둘 이상의 오류가있는 상황에서 훨씬 더 가능성이 높습니다 , 하나의 오류가 다른 오류를 가려서 두 오류에도 불구하고 동일한 CRC로 끝납니다.
간단히 말해서 적절한 해시 알고리즘을 사용 하지 않을 이유가 없다면 간단한 CRC를 피하십시오.
나는 최근 똑똑한 CRC를 사용했습니다. 의 저자 jdupe의 파일 중복 식별 및 제거 도구 (인기 EXIF 도구 jhead 같은 저자) 파일을 통해 첫 번째 패스 동안 그것을 사용합니다. CRC는 각 파일의 처음 32K에서 계산되어 동일한 것으로 보이는 파일을 표시하며 파일의 크기도 같아야합니다. 이러한 파일은 전체 이진 비교를 수행 할 파일 목록에 추가됩니다. 대용량 미디어 파일 확인 속도가 빨라집니다.
기본부터 시작하겠습니다.
암호화에서 해싱 알고리즘은 다이제스트 연산을 통해 많은 비트를 더 적은 비트로 변환합니다. 해시는 메시지와 파일의 무결성을 확인하는 데 사용됩니다.
모든 해싱 알고리즘은 충돌을 생성합니다.여러 비트 조합이 동일한 비트 출력을 생성 할 때 충돌이 발생합니다. 해싱 알고리즘의 암호화 강도는 개인이 주어진 입력에 대한 출력을 결정할 수없는 능력에 의해 정의됩니다. 합법적 인 파일과 일치하는 해시로 파일을 구성하고 가정 된 무결성을 손상시킬 수 있기 때문입니다. 시스템의. 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를 사용하기 시작하더라도 놀라지 마십시오.