Siphash是一個偽函數(PRFS)的家族,可在短消息上進行速度。這是Siphash的參考C代碼:便攜式,簡單,優化,以澄清和調試。
Siphash由Jean-Philippe Aumasson和Daniel J. Bernstein於2012年設計,以防止浸透性DOS攻擊。
Siphash是:
與以前的加密算法(例如基於通用哈希的Macs)更簡單,更快。
通過不安全的非晶體算法(例如Fhhash)在性能方面具有競爭力。
儘管有多次加密儀者的多次密碼分析項目,但在密碼學上沒有弱點。
經過戰鬥測試,成功地集成了OSS(Linux內核,OpenBSD,FreeBSD,Freertos),語言(Perl,Python,Ruby等),庫(Openssl libcrypto,Sodium等)和應用程序(Wiredare,Redis等)。
作為安全的pseudorandom函數(又稱鍵入哈希功能),Siphash也可以用作安全的消息身份驗證代碼(MAC)。但是,從通用的無鍵哈希功能(例如blake3或sha-3)的意義上,siphash並不是哈希。因此,應始終將siphash與秘密鑰匙一起使用,以確保安全。
默認的siphash是siphash-2-4 :它需要一個128位鍵,進行2個壓縮回合,4個最終確定回合,並返回一個64位標籤。
變體可以使用不同數量的回合。例如,我們提出了Siphash-4-8作為保守版本。
本文未描述以下版本,而是設計和分析以滿足應用程序的需求:
Siphash-128返回128位標籤而不是64位。具有指定數量的回合的版本是Siphash-2-4-128,Siphash4-8-128等。
HalfSiphash用32位單詞而不是64位工作,拿一個64位鍵,並返回32位或64位標籤。例如,HalfSiphash-2-4-32有2個壓縮回合,4個最終結合回合,並返回32位標籤。
(一半)具有C≥2和D≥4的Siphash -C -D預計將為任何具有相同鍵和輸出尺寸的功能提供最大PRF安全性。
標準的PRF安全目標允許攻擊者訪問攻擊者自適應選擇的消息上Siphash的輸出。
安全性受密鑰尺寸的限制(Siphash的128位),因此搜索2 S鍵的攻擊者有機會2 S -128查找Siphash鍵。安全性也受到輸出尺寸的限制。特別是,當Siphash用作MAC時,如果T是該標籤的位大小,則盲目嘗試2 s標籤的攻擊者將成功使用2 s -t 。
跑步
make將建立測試
./ test驗證64個測試向量,並且
./ debug執行相同並打印中間值。
該代碼可以通過在編譯時定義cROUNDS或dROUNDS來適應Siphashc -d ,這是帶有C壓縮彈和D最終確定回合的Siphash版本。這可以通過-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。它是多許可的