사용 가능한 해시
MD2 해시, MD4 해시, MD5 해시, SHA1 해시, SHA224 해시, SHA256 해시, SHA384 해시, SHA512/224 해시, SHA512/256 해시, SHA512 해시, SHA3-224 해시, SHA3-256 해시, SHA3-384 해시, SHA3-512 해시, RIPEMD128 해시, RIPEMD160 해시, RIPEMD256 해시, RIPEMD320 해시, WHIRLPOOL 해시, TIGER128,3 해시, TIGER160,3 해시, TIGER192,3 해시, TIGER128,4 해시, TIGER160,4 해시, TIGER192,4 해시, SNEFRU 해시, SNEFRU256 해시, GOST 해시, GOST-CRYPTO 해시, ADLER32 해시, CRC32 해시, CRC32B 해시, CRC32C 해시, FNV132 해시, FNV1A32 해시, FNV164 해시, FNV1A64 해시, JOAAT 해시, MURMUR3A 해시, MURMUR3C 해시, MURMUR3F 해시, XXH32 해시, XXH64 해시, XXH3 해시, XXH128 해시, HAVAL128,3 해시, HAVAL160,3 해시, HAVAL192,3 해시, HAVAL224,3 해시, HAVAL256,3 해시, HAVAL128,4 해시, HAVAL160,4 해시, HAVAL192,4 해시, HAVAL224,4 해시, HAVAL256,4 해시, HAVAL128,5 해시, HAVAL160,5 해시, HAVAL192,5 해시, HAVAL224,5 해시, HAVAL256,5 해시,
XXH64란 무엇인가?
XXH64는 xxHash 계열의 64비트 버전으로, 64비트 CPU 아키텍처를 최대한 활용하여 고속의 비암호화 해싱을 제공하도록 설계되었습니다. XXH32가 32비트 레지스터에 최적화되어 있는 반면, XXH64는 내부 상태와 혼합 로직을 확장하여 클럭 사이클당 더 큰 데이터 블록을 처리합니다. 이는 처리량이 주요 성능 요구 사항인 최신 64비트 시스템에 가장 적합한 솔루션입니다.
XXH64 해싱은 어떻게 작동하나요?
XXH64는 명령어 간의 의존성을 최소화하는 정교한 파이프라인을 통해 속도를 달성합니다:
- 초기화: 고유한 해시 상태를 보장하기 위해 네 개의 독립적인 64비트 누산기에 특정 소수 시드를 할당하여 초기화합니다.
- 메인 루프: 이 알고리즘은 입력을 32바이트 단위로 처리합니다. 각 블록에 대해 큰 소수(
0x9E3779B1및0x85EBCA77)를 이용한 일련의 곱셈 연산을 수행한 후, 비트 단위 회전을 수행합니다. 64비트 산술을 사용함으로써, 32비트 버전과 비교하여 각 연산에 더 많은 데이터를 담을 수 있습니다. - 스트림 병렬 처리: 네 개의 어큐뮬레이터가 데이터 스트림의 서로 다른 부분을 병렬로 처리하여, CPU 측 계산 뒤에 메모리 지연 시간을 효과적으로 숨깁니다.
- 최종 처리: 루프가 완료된 후, 4개의 누산기는 최종 혼합 시퀀스를 사용하여 병합되며, 이를 통해 전체 64비트 결과물에 엔트로피를 분산시켜 고품질의 해시 분포를 보장합니다.
비교: XXH64 대 XXH32
이 두 버전 중 어느 것을 선택할지는 전적으로 하드웨어 아키텍처와 필요한 출력 크기에 따라 달라집니다:
- 하드웨어 최적화: XXH64는 4바이트(32비트) 단어가 아닌 8바이트(64비트) 단위로 데이터를 처리하므로 64비트 CPU에서 XXH32보다 훨씬 빠릅니다. 64비트 시스템에서 XXH32를 사용하면 CPU 레지스터 폭 용량의 절반을 사실상 활용하지 못하게 됩니다.
- 해시 충돌 확률: XXH64는 64비트 출력을 생성하여 $2^{64}$에 달하는 방대한 키 공간을 제공합니다. 이로 인해 32비트 XXH32보다 충돌 저항성이 훨씬 뛰어나며, 매우 큰 데이터 세트(예: 해시 맵 내 수십억 개의 항목)에 대해 더 안전합니다.
- 이식성 대 효율성: XXH32는 32비트 임베디드 시스템이나 32비트 식별자를 엄격히 요구하는 특정 프로토콜의 경우 여전히 유용합니다. 그러나 최신 데스크톱, 서버 또는 클라우드 환경에서는 뛰어난 속도와 엔트로피를 위해 XXH64가 표준으로 선택됩니다.