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。它是多许可的