Siphash는 짧은 메시지의 속도에 최적화 된 의사 란덤 기능 (PRFS)의 제품군입니다. 이것은 siphash의 참조 C 코드입니다 : 휴대용, 간단하며 선명도 및 디버깅에 최적화되었습니다.
Siphash는 2012 년 Jean-Philippe Aumasson과 Daniel J. Bernstein이 해시 홍수 DOS 공격에 대한 방어로 설계했습니다.
siphash는 다음과 같습니다.
Universal Hashing을 기반으로 한 Mac과 같은 이전 암호화 알고리즘보다 짧은 메시지가 더 간단하고 빠릅니다 .
FHHASH와 같은 안전하지 않은 비 결정적 알고리즘으로 성능이 경쟁합니다 .
선도적 암호화 작가의 여러 암호화 프로젝트에도 불구하고 약점의 징후가없는 암호화 적으로 안전합니다 .
전투 테스트 , OSS (Linux Kernel, OpenBSD, FreeBSD, Freertos), 언어 (Perl, Python, Ruby 등), 라이브러리 (OpenSSL Libcrypto, 나트륨 등) 및 응용 프로그램 (Wireguard, Redis 등).
안전한 의사로드 돔 함수 (일명 키 해시 함수)로서 SIPHASH는 보안 메시지 인증 코드 (MAC)로도 사용할 수 있습니다. 그러나 Siphash는 Blake3 또는 SHA-3과 같은 범용 키가없는 해시 함수의 의미에서 해시가 아닙니다 . 따라서 Siphash는 항상 안전하기 위해 비밀 키와 함께 사용해야합니다.
기본 Siphash는 Siphash-2-4 입니다. 128 비트 키가 필요하고, 2 개의 압축 라운드, 4 개의 최종 라운드를 수행하며, 64 비트 태그를 반환합니다.
변형은 다른 수의 라운드를 사용할 수 있습니다. 예를 들어, 우리는 Siphash-4-8을 보수적 인 버전으로 제안했습니다.
다음 버전은 논문에 설명되어 있지 않지만 응용 프로그램의 요구를 충족시키기 위해 설계 및 분석되었습니다.
Siphash-128은 64 비트 대신 128 비트 태그를 반환합니다. 라운드 수가 지정된 버전은 Siphash-2-4-128, Siphash4-8-128 등입니다.
Halfsiphash는 64 비트 대신 32 비트 단어로 작동하며 64 비트 키를 가져와 32 비트 또는 64 비트 태그를 반환합니다. 예를 들어, Halfsiphash-2-4-32에는 2 개의 압축 라운드, 4 개의 최종 라운드가 있으며 32 비트 태그를 반환합니다.
C ≥ 2 및 d ≥ 4 인 Siphash -C -D 는 동일한 키 및 출력 크기의 모든 기능에 대한 최대 PRF 보안을 제공 할 것으로 예상됩니다.
표준 PRF 보안 목표는 공격자가 공격자가 선택한 메시지에 대한 Siphash의 출력에 대한 액세스를 허용합니다.
보안은 키 크기 (Siphash의 경우 128 비트)에 의해 제한되므로 2 S 키를 검색하는 공격자는 Siphash 키를 찾을 수있는 2S -128 의 기회가 있습니다. 보안은 또한 출력 크기에 의해 제한됩니다. 특히, siphash가 Mac으로 사용될 때, 2 S 태그를 맹목적으로 시도하는 공격자는 Tag의 비트 크기 라면 확률 2 s -t 로 성공할 것입니다.
달리기
make테스트를 구축합니다
./ test64 개의 테스트 벡터를 확인합니다
./ debug동일하게 수행하고 중간 값을 인쇄합니다.
이 코드는 컴파일시 cROUNDS 또는 dROUNDS 정의하여 C 압축 라운드 및 D 마무리 라운드를 갖춘 Siphash 버전 인 Siphash -C -D 를 구현하도록 조정할 수 있습니다. 이것은 아래와 같은 많은 컴파일러에 대한 -D 명령 줄 인수로 수행 할 수 있습니다.
gcc -Wall --std=c99 -DcROUNDS=2 -DdROUNDS=4 siphash.c halfsiphash.c test.c -o test makefile 또한 C 및 D 라운드 값을 매개 변수로 사용합니다.
make cROUNDS=2 dROUNDS=4분명히, 라운드 수가 수정되면 테스트 벡터는 확인하지 않습니다.
이 코드는 저작권 (C) 2014-2023 Jean-Philippe Aumasson, Daniel J. Bernstein입니다. 다방 라이센스가 있습니다