한국어

개발자 도구 · SHA 해시 계산기

암호화 해시와 체크섬: CRC32 및 xxHash가 약속할 수 없는 것

· 배경

샤-256 암호화 보안

위험 축의 체크섬 속도와 암호화 해시 강도 비교
원본 ToolAcre 벡터 일러스트레이션

CRC32, FNV 및 xxHash도 해시이지만 적에 대해 어떠한 약속도 하지 않습니다. 이 게시물에서는 암호화 해시와 체크섬을 구분하는 방법과 사용 사례별로 선택하는 방법을 설명합니다.

어떤 작업에 대한 해시는 무엇입니까? — 속도와 적의 안전 사이의 선택

해시 함수는 우발적인 오류 감지를 위한 체크섬, 배포 및 성능을 위한 비암호화 해시, 보안을 위한 암호화 해시의 세 가지 범주로 제공됩니다. 각 카테고리는 속도와 다이제스트 크기에 있어서 서로 다른 보장과 서로 다른 상충관계를 가지고 있습니다. CRC32와 같은 체크섬은 빠르고 짧지만(4바이트, 8 16진수 문자) 의도적인 수정에 대한 보호 기능을 제공하지 않습니다. xxHash 또는 MurmurHash와 같은 비암호화 해시도 빠르고 해시 테이블 및 데이터 배포에 유용하지만 충돌을 일으키려는 적에 대한 보호 기능을 제공하지 않습니다. SHA-256와 같은 암호화 해시는 속도가 느리고 더 긴 다이제스트(32바이트, 64 16진수 문자)를 생성하지만 사전 이미지 저항 및 충돌 저항(적으로부터 보호하는 보안 속성)을 제공합니다.

사용 사례에 맞지 않는 해시 함수를 선택하는 것은 일반적인 보안 실수입니다. CRC32를 사용하여 신뢰할 수 없는 소스로부터의 파일 다운로드를 확인하는 것은 효과적이지 않습니다. 공격자는 쉽게 파일을 수정하고 CRC32를 다시 계산할 수 있습니다. 빈도가 높은 해시 테이블에서 SHA-256을 빠른 해시 함수로 사용하는 것은 낭비입니다. CRC32 또는 빠른 비암호화 해시이면 충분하고 저렴합니다.

우발적인 오류에 대한 체크섬 - 전송 중 비트 플립을 감지하기 위한 CRC 설계

체크섬은 오류가 무작위적이고 우발적인 것으로 가정되는 전송 또는 저장 중 오류 감지를 위해 설계되었습니다. CRC(Cyclic Redundancy Check)는 원래 통신에서 비트 플립을 감지하기 위해 설계되었습니다. CRC32는 32비트 다이제스트를 생성합니다. 전송 중에 임의의 비트 플립으로 인해 프레임이 손상된 경우 CRC32는 거의 확실하게 변경되어 수신자에게 재전송을 요청하도록 경고합니다. CRC는 다항식에 따라 특정 수의 비트 오류까지 감지할 수 있습니다. 가장 일반적인 사용 사례에서는 단일 비트 플립 또는 몇 번의 비트 플립 버스트가 안정적으로 감지됩니다.

CRC는 결정적이지만 암호화되지는 않습니다. 파일과 해당 CRC32가 주어지면 공격자는 파일을 수정하고 예상 값과 일치하도록 CRC32를 다시 계산할 수 있습니다. CRC 다항식에 대한 지식이 있는 상대의 경우 충돌을 생성하는 것은 간단합니다. CRC는 의도적인 수정에 저항할 의도가 전혀 없었습니다. 이는 순전히 우발적인 오류 감지를 위한 것입니다. ZIP 파일 및 JPEG 파일과 같은 과거 시스템은 이러한 목적으로 CRC를 사용합니다. 최신 프로토콜은 독립형 무결성 검사가 아닌 암호화되거나 인증된 채널 내에서 빠른 오류 감지를 위해 CRC를 사용합니다.

배포용 비암호화 해시 — 해시 테이블 및 파티셔닝의 FNV, MurmurHash 및 xxHash

FNV-1a, MurmurHash 및 xxHash와 같은 비암호화 해시는 해시 테이블 및 데이터 분할에서 속도와 균일성을 위해 설계되었습니다. 대기 시간이 매우 짧으며 보안 속성을 고려하지 않고 서버나 버킷 간에 데이터를 분할해야 하는 상황에서 사용됩니다. 캐시를 구축하고 키를 버킷 번호에 매핑해야 하는 경우 빠른 해시가 적합합니다. MurmurHash는 해시 테이블 사용을 위해 명시적으로 설계되었으며 대부분의 하드웨어에서 SHA보다 빠릅니다. xxHash는 최신 버전이며 대규모 캐시 및 벡터화 기능을 갖춘 최신 CPU에 최적화되어 있습니다.

이러한 해시는 사전 이미지 공격(특정 다이제스트를 생성하는 입력 찾기) 또는 충돌 공격(동일한 다이제스트를 생성하는 두 개의 서로 다른 입력 찾기)에 저항하지 않기 때문에 암호화되지 않습니다. 공격자는 해시 알고리즘을 계산하고 충돌하거나 목표 출력을 생성하는 입력을 찾을 수 있습니다. 신뢰할 수 있는 환경(모든 노드가 사용자의 통제하에 있는 클러스터) 내에서는 허용됩니다. 신뢰할 수 없는 사용자가 입력을 제어할 수 있는 경우 비암호화 해시는 성능을 저하하거나(해시 테이블 최악의 경우는 모든 키가 충돌할 때 선형 검색임) 다른 부작용을 일으키는 충돌 공격에 취약합니다.

암호화 해시가 추가하는 것 — 고의적인 공격자에 대한 사전 이미지 및 충돌 저항

SHA-256, SHA-384 및 SHA-512와 같은 암호화 해시는 사전 이미지 저항을 제공합니다. 다이제스트가 주어지면 해당 다이제스트를 생성하는 입력을 찾는 것이 계산상 불가능합니다. 또한 충돌 저항성을 제공합니다. 동일한 다이제스트를 생성하는 두 개의 서로 다른 입력을 찾는 것은 계산상 불가능합니다. 이러한 속성은 다운로드를 위조하거나 가짜 인증서를 생성하거나 메시지를 변조하려는 공격자로부터 보호합니다. 비용은 속도입니다. SHA-256은 대부분의 하드웨어에서 CRC32보다 느리고 xxHash보다 느립니다.

SHA-1은(는) 암호화 방식으로 손상되어(충돌이 가능함) 새로운 보안 목적으로 사용하면 안 되지만 레거시 호환성을 위해 계속 계산됩니다. SHA-256, SHA-384 및 SHA-512은 여전히 ​​강력하며 암호화 해싱을 위한 표준 선택입니다. SHA-2의 "2"는 SHA 알고리즘의 두 번째 계열을 나타냅니다(첫 번째는 원래 SHA-1입니다. SHA-3은 최신 계열이지만 이 목적으로 거의 사용되지 않습니다).

암호화 해시는 적대적인 속성을 추가합니다. 이 기사에서는 지원되지 않는 상대 속도 주장을 방지합니다.

5가지 시나리오를 올바른 해시 계열과 연결: 첫째, AES: CRC32로 암호화된 신뢰할 수 있는 채널을 통해 전송되는 네트워크 프레임이 적합합니다. 암호화는 수정을 방지하고 CRC는 우발적인 손상을 감지합니다. 둘째, 로드 밸런싱을 위한 해시 테이블 또는 일관된 해싱: xxHash와 같은 비암호화 해시가 적합합니다. 속도가 중요하며 환경은 신뢰할 수 있습니다. 셋째, 신뢰할 수 없는 소스: SHA-256에서 다운로드 무결성을 확인해야 합니다. 공격자는 파일과 체크섬을 수정할 수 있지만 SHA-256을 손상시키지 않고는 암호화 해시를 수정할 수 없습니다.

넷째, 디지털 서명 및 인증서: SHA-256이 필요하며 RSA 또는 ECDSA와 같은 비대칭 알고리즘과 결합됩니다. 서명은 서명 후 해시가 수정되지 않았음을 증명합니다. 다섯째, 사용자 업로드 파일 중복 제거: SHA-256은 사용자가 의도적으로 비암호화 해시의 기존 파일과 충돌하도록 설계된 파일을 업로드할 수 있기 때문에 필요합니다. 중복 제거가 xxHash를 기반으로 하는 경우 공격자는 다른 파일과 해시는 동일하지만 콘텐츠가 다른 파일을 업로드할 수 있으며, 이로 인해 시스템이 업로드를 잘못 삭제할 수 있습니다.

실제 사례 — 5가지 시나리오(네트워크 프레임, 해시 맵, 다운로드 확인, 서명, 사용자 업로드 중복 제거)를 올바른 계열과 일치시킵니다.

모든 사용 사례에 대해 암호화 해시를 선택하는 데 드는 비용은 성능 오버헤드입니다. SHA-256은 CRC보다 느리고 xxHash보다 느립니다. 초당 수백만 번 실행되는 코드 조각인 핫 루프에서는 이러한 오버헤드가 눈에 띕니다. 설정 단계나 일괄 작업에서는 무시할 수 있습니다. 결정 프레임워크는 다음과 같습니다. 적에게 충돌을 일으킬 동기가 있습니까? 그렇다면 SHA-256을(를) 사용하세요. 아니요이고 속도가 중요하다면 더 빠른 해시를 사용하세요. 속도보다 보안이 더 중요하다면 상관없이 SHA-256를 사용하세요.

일반적인 실수는 지금은 손상되었지만 오래된 암호화 해시인 MD5를 사용하는 것입니다. MD5는 1992에서 설계되었으며 충돌은 2004에서 시연되었습니다. 보안 목적으로 MD5를 사용하는 것은 안전하지 않습니다. 이는 레거시 시스템과 속도가 우선시되는 상황에서 가끔 볼 수 있지만 현재 MD5가 올바른 선택인 시나리오는 없습니다. 속도가 필요한 경우 xxHash를 사용하세요. 보안이 필요한 경우 SHA-256를 사용하세요. MD5를 절대 사용하지 마십시오.

처리량 및 충돌 동작에는 구현별 증거가 필요하므로 시나리오 매핑은 정성적으로 유지됩니다.

비밀번호 해싱은 체크섬 및 범용 암호화 해시와 구별되는 네 번째 범주입니다. 비밀번호를 해시하는 데 SHA-256을 사용하지 마세요. 대신 의도적으로 느리고 솔트를 포함하는 bcrypt, scrypt 또는 Argon2와 같은 비밀번호 해싱 기능을 사용하세요. SHA-256과 같은 빠른 암호화 해시를 사용하면 비밀번호 추측이 저렴해집니다. 공격자는 초당 수백만 번의 추측을 시도할 수 있습니다. 비밀번호 해싱 기능은 각 추측에 CPU와 메모리 비용이 많이 들도록 설계되었으므로 강력한 비밀번호를 추측하는 데는 공격자가 기다릴 수 있는 것보다 더 오랜 시간이 걸립니다. 비밀번호 해싱은 고유한 요구 사항이 있는 특수한 사용 사례입니다.

ToolAcre SHA 해시 계산기는 비밀번호 해싱을 지원하지 않으며 의도적으로 MD5, 사용자 정의 매개변수 및 빠른 해시를 제공하지 않습니다. 인증이나 비밀번호 저장이 아닌 확인 및 무결성 검사를 위해 표준 SHA 다이제스트를 계산하는 도구입니다.

요점: 적이 있든 없든 — 누군가가 데이터를 조작할 수 있을 때 ToolAcre SHA 해시 계산기를 사용하세요.

해시 알고리즘 선택은 시스템 전체의 성능과 보안 모두에 영향을 미치는 근본적인 결정입니다. 다이제스트는 이를 생성한 알고리즘만큼만 신뢰할 수 있습니다. 파일 검증을 위해 CRC32를 선택한 경우 다이제스트는 의도적인 수정에 대한 보호를 제공하지 않습니다. 해시 테이블에 대해 SHA-256을 선택하면 리소스가 낭비됩니다. 각 범주의 속성과 장단점을 알면 올바르게 선택할 수 있습니다.

ToolAcre SHA 해시 계산기는 대부분의 사용 사례에 중요한 암호화 해시를 포함하는 SHA-1부터 SHA-512까지 제공합니다. CRC32, xxHash 또는 MD5는 각각 특정 상황(신뢰할 수 있는 채널의 오류 감지를 위한 CRC, 통제된 환경의 성능을 위한 xxHash, MD5의 경우 없음)에서 올바른 선택이기 때문에 제공하지 않으며, 각 사용 시기를 강조하지 않고 제공하면 실수를 조장할 수 있습니다. 계산기는 표준 암호화 다이제스트를 계산하기 위한 것입니다. 해당 해시가 필요한 경우 `crc32`, `xxh64` 또는 이와 동등한 도구와 함께 명령줄을 사용하세요. 다운로드 확인, 인증서 지문, git 커밋 및 공격자가 데이터를 조작할 수 있는 유사한 사용 사례의 경우 ToolAcre SHA 해시 계산기를 통해 SHA-256에 접근하세요.