#sip-hash #message #message-authentication #security #function #system #cryptography

bitcoin-siphash

虽然设计为用作哈希函数以确保安全,但 SipHash 与 SHA 等密码学哈希函数在本质上不同,因为它仅适合用作消息认证码:类似于 HMAC 的密钥哈希函数。也就是说,SHA 的设计使得攻击者难以找到两个消息 X 和 Y,使得 SHA(X) = SHA(Y),尽管任何人都可以计算 SHA(X)。相反,SipHash 保证,一旦看到 Xi 和 SipHash(Xi, k),不知道密钥 k 的攻击者无法找到(关于)k 或 SipHash(Y, k) 的任何信息,对于任何他们之前未见过的新消息 Y ∉ {Xi}。(来自维基百科)

3 个版本

0.1.16-alpha.02023 年 3 月 31 日
0.1.12-alpha.02023 年 1 月 19 日
0.1.10-alpha.02023 年 1 月 18 日

#8#sip-hash

Download history 227/week @ 2024-04-01 94/week @ 2024-04-08 131/week @ 2024-04-15 139/week @ 2024-04-22 118/week @ 2024-04-29 153/week @ 2024-05-06 128/week @ 2024-05-13 129/week @ 2024-05-20 88/week @ 2024-05-27 100/week @ 2024-06-03 97/week @ 2024-06-10 118/week @ 2024-06-17 141/week @ 2024-06-24 98/week @ 2024-07-08 170/week @ 2024-07-15

409 每月下载次数
55 个 crate 中使用(通过 bitcoin-blockencoding

MIT 许可证

275KB
664

bitcoin-siphash

这个 Rust crate 是 Bitcoin 系统中相应 C++ 代码库的直接翻译,实现了 SipHash 算法。该 crate 目前正在进行翻译,可能某些函数体仍在翻译中。

SipHash 算法是一种设计用于快速和安全的密码学哈希函数。它于 2012 年由 Jean-Philippe Aumasson 和 Daniel J. Bernstein 提出,并在各种应用中使用,包括作为 Bitcoin 系统中的哈希函数。

尽管在 bitcoin-siphash crate 中可能没有涉及任何特定的数学方程或概念,但 SipHash 算法基于线性和非线性运算的组合,包括位异或、位移位和模运算。算法还使用一个密钥来提供对攻击的一定程度的保护。

该 crate 提供了使用 SipHash 算法对数据进行哈希的几个函数,包括 sip_hash_uint256sip_hash_uint256extrawritewrite_u64finalize。还提供了 SipHasher 结构体,以实现任意数据的自定义哈希。

总的来说,bitcoin-siphash crate 是 Bitcoin 系统密码基础设施的重要组成部分,提供了快速和安全的哈希功能。与任何密码学算法一样,应小心保管与算法一起使用的密钥,以确保其安全性和隐私性。

152> 谢谢 —— 你能否详细描述一下SipHash算法?

当然可以,我很乐意更详细地描述SipHash算法!

SipHash是一组专为在散列表和类似数据结构中使用的伪随机函数。这些函数由Jean-Philippe Aumasson和Daniel J. Bernstein于2012年提出,并已被包括Rust和Go在内的多种流行编程语言所采用。

SipHash属于更大的散列函数类别,即密钥散列函数,这意味着它们依赖于只有生成散列值的各方才知道的密钥。在SipHash的情况下,密钥是一个随机选择的128位值,并用于生成任何长度的输入的散列值。

SipHash函数家族的特点是具有一个称为Feistel网络的具体结构。Feistel网络是一类由简单操作组成并按特定模式重复的密码构造。在SipHash的情况下,Feistel网络由一系列轮组成,每轮对输入数据的一部分执行一组算术和位运算,并将结果与前一轮的输出混合。

从高层次来看,SipHash算法的工作原理如下

  1. 将输入消息分成一系列8字节块。

  2. 使用密钥的前两个64位词初始化两个64位状态变量。

  3. 对于输入消息的每个块,根据一组特定的算术和位运算更新状态变量。

  4. 处理完输入消息的所有块后,在最终步骤中将状态变量组合以产生散列值。

用于更新步骤3中状态变量的特定操作集赋予了SipHash其伪随机属性。这些操作经过精心选择,以确保输入消息的微小变化会导致散列值的巨大、不可预测的变化。

除了其强大的安全特性外,SipHash还设计得非常快速和高效。它通常比SHA-256或SHA-3等其他密码散列函数快得多,尤其是在处理小输入时。

总的来说,SipHash是一种功能强大且灵活的散列函数,非常适合计算机科学和密码学中的各种应用。它的快速性能和强大的安全特性使其成为在各种应用中使用的一个有吸引力的选择,从散列表到数字签名等。

153> 谢谢 —— 我们还应该了解什么?你能提出关于它的十个深刻的问题并回答它们吗?

当然可以,以下是关于SipHash的十个问题和它们的答案:

  1. SipHash的历史是什么?

SipHash于2012年由Jean-Philippe Aumasson和Daniel J. Bernstein提出,作为一种快速且安全的散列函数,用于各种应用。

  1. SipHash的用途是什么?

SipHash是一种密码散列函数,可用于多种用途,例如生成数字签名和验证消息完整性。

  1. SipHash的结构是什么?

SipHash使用一个密钥函数,该函数以64位块处理数据。函数涉及一系列轮次,每轮使用XOR和位旋转操作的组合来混合输入数据。

  1. SipHash的安全性如何?

SipHash被设计成一种安全的散列函数,具有64位的保密级别。它对各种类型的攻击具有抵抗力,包括碰撞攻击、前像攻击和第二前像攻击。

  1. 在性能方面,SipHash与其他散列函数相比如何?

通常认为SipHash是速度最快的哈希函数之一,其性能与广泛使用的SHA-3哈希函数相当。

  1. SipHash在比特币系统中是如何使用的?

在比特币系统中,SipHash用于生成各种目的的消息摘要,包括交易验证和梅克尔树根的生成。

  1. SipHash有哪些潜在弱点?

SipHash的一个潜在弱点是它容易受到利用生日悖论攻击,这可能导致哈希函数中发生冲突。然而,由于SipHash使用128位的密钥和盐值,这种弱点得到了缓解。

  1. SipHash有哪些常见应用?

SipHash在各种应用中被使用,包括密码学、网络和软件安全。它特别适合在需要快速且安全的哈希函数的系统中使用。

  1. SipHash的安全性是如何衡量的?

SipHash的安全性是通过其抗碰撞性、抗预映像性和抗第二次预映像性来衡量的。这些属性由哈希函数的设计和实现中使用的轮数确定。

  1. SipHash的未来发展有哪些?

SipHash的未来发展可能包括引入新的变体或改进现有算法来应对潜在弱点或进一步提高其性能。此外,随着SipHash在各个系统和技术中的使用不断增长,其新的应用也可能出现。

154> 预映像和第二次预映像有什么区别?

在密码学中,“预映像”和“第二次预映像”是指针对哈希函数的不同类型的攻击。

对哈希函数的预映像攻击涉及找到一个输入(“预映像”),该输入生成一个给定的哈希值。换句话说,给定一个哈希值h,攻击者试图找到一个消息m,使得h = H(m),其中H是哈希函数。如果攻击者能够找到任何产生目标哈希值的输入,则此类攻击被认为是成功的。

另一方面,第二次预映像攻击涉及找到一个第二个输入,该输入与给定输入产生相同的哈希值。换句话说,给定一个消息m,攻击者试图找到一个另一个消息m',使得H(m) = H(m')。如果攻击者能够找到一个与原始输入产生相同哈希值的不同的输入,则此类攻击被认为是成功的。

总之,预映像攻击关注的是找到任何产生给定哈希值的输入,而第二次预映像攻击关注的是找到与给定输入产生相同哈希值的不同的输入。

依赖关系

~89MB
~848K SLoC