redis_book/dict/siphash.md
2022-12-26 23:18:49 +08:00

2.3 KiB
Raw Permalink Blame History

siphash算法

SipHash是一个伪随机函数PRF系列为短消息的速度而优化。SipHash算法是由Jean-Philippe Aumasson和Daniel J. Bernstein 在2012年设计的可以对hash的DoS攻击的进行防御。

SipHash算法的特点

  • 与以前的加密算法相比如基于通用散列的MACS在短消息上更简单、更快速。
  • 在性能上与不安全的非加密算法如fhhash具有竞争力。
  • 密码学上是安全的,尽管领先的密码学家进行了多个密码分析项目,没有发现弱点。
  • 经过实战检验在操作系统Linux内核、OpenBSD、FreeBSD、FreeRTOS、语言Perl、Python、Ruby等、 库OpenSSL libcrypto、Sodium等和应用程序Wireguard、Redis等中成功整合。

作为一个安全的伪随机函数又称有密钥的哈希函数SipHash也可以作为一个安全的消息认证码MAC。 但SipHash不是通用的无密钥散列函数如BLAKE3或SHA-3意义上的散列。因此SipHash应始终与秘密密钥一起使用以确保安全。

变体

默认的SipHash是SipHash-2-4它接受一个128位的密钥进行2轮压缩4轮最终确定并返回一个64位的标签。 变体可以使用不同的轮数。例如我们提出SipHash-4-8作为一个保守的版本。

以下版本没有在论文中描述,但为了满足应用的需要而设计和分析的。

  • SipHash-128返回一个128位的标签而不是64位。有指定轮数的版本是SipHash-2-4-128SipHash4-8-128以此类推。
  • HalfSipHash使用32位的字而不是64位接受64位的密钥并返回32位或64位的标签。例如HalfSipHash-2-4-32有2个压缩轮4个终结轮并返回一个32位标签。

安全性

(Half)SipHash-c-dc≥2d≥4有望为任何具有相同密钥和输出大小的函数提供最大的PRF安全性。

标准的PRF安全目标允许攻击者访问由攻击者自适应选择的信息上的SipHash输出。

安全性受到密钥大小的限制SipHash为128位因此搜索2s密钥的攻击者有2s-128的机会找到SipHash密钥。 安全性也受到输出大小的限制。特别是当SipHash被用作MAC时如果t是该标签的字节级别大小盲目尝试2s标签的攻击者将以2s-t的概率成功。