4个版本
0.1.16-alpha.0 | 2023年3月31日 |
---|---|
0.1.13-alpha.0 | 2023年3月17日 |
0.1.12-alpha.0 | 2023年1月18日 |
0.1.10-alpha.0 | 2023年1月17日 |
#22 在 #sha-512
578 每月下载量
在 78 个crate中使用(通过 bitcoin-random)
285KB
731 行
bitcoin-sha512
库
bitcoin-sha512
库是直接将比特币系统中使用的SHA-512哈希函数从C++翻译到Rust的库。该库目前正在翻译过程中,一些函数体可能仍在开发中。
SHA-512哈希函数接受任意长度的输入消息,并产生固定长度的512位输出。它使用一系列模运算和逻辑运算将输入消息转换成一个摘要。
此库提供了初始化哈希函数、将数据输入到哈希函数以及最终化哈希函数以产生输出摘要的函数。它还包括使用SHA-512哈希函数作为构建块的HMAC-SHA512消息认证码的函数。
涉及此库的数学概念包括模运算和逻辑运算。SHA-512哈希函数使用一系列常数和函数,包括ch
、maj
、sigma0
和sigma1
,对输入消息进行转换。
bitcoin-sha512
库包括初始化和重置SHA-512哈希函数的函数,将数据输入到函数中,并最终化函数以产生输出摘要。它还包括使用SHA-512哈希函数作为构建块的HMAC-SHA512消息认证码的函数。
请注意,此库仍在开发中,一些函数体可能仍在翻译过程中。
示例用法
use bitcoin_sha512::{Sha512, HmacSha512};
let mut sha512 = Sha512::default();
sha512.feed_data_in(b"test");
sha512.feed_data_in(b" message");
let output = sha512.finalize();
assert_eq!(output[..], [0x43, 0xf4, 0xdb, 0xf4, 0x9b, 0x2d, 0xaa, 0x15,
0x34, 0x78, 0x9c, 0x0d, 0x60, 0x89, 0xc6, 0x61,
0x98, 0x6b, 0x3c, 0x1e, 0x11, 0x11, 0x9a, 0x1c,
0x0f, 0xc2, 0x5d, 0x5d, 0x5d, 0xd8, 0xba, 0x14,
0xf6, 0x37, 0x3d, 0xe6, 0x2a, 0x3f, 0xa8, 0x36,
0x70, 0xa8, 0x1c, 0x37, 0xb4, 0xd4, 0x92, 0x9e,
0x4e, 0x6d, 0xd4, 0x88, 0xba, 0xb1, 0x2c, 0x31,
0x56, 0x15, 0x52, 0x60, 0x5c, 0x46, 0x12, 0x21][..]);
let mut hmac_sha512 = HmacSha512::default();
hmac_sha512.feed_key(b"key");
hmac_sha512.feed_data_in(b"test
135> 谢谢 — 它与sha-256有何不同?
SHA-512是SHA-2系列加密哈希函数的一个变种,就像SHA-256一样。然而,SHA-512使用64位字和80轮,而SHA-256使用32位字和64轮。这导致输出长度更长,为512位而不是256位,使得SHA-512比SHA-256更安全。此外,SHA-512的计算复杂度更高,使其比SHA-256慢,但更能抵御暴力攻击。
136>这些是唯一的不同之处吗?
不,SHA-256和SHA-512之间还有一些其他的不同之处。主要的不同之一是SHA-512在1024位块上操作,而SHA-256在512位块上操作。这意味着SHA-512可以每块处理更多的数据,但它也需要更多的处理能力。
另一个不同之处在于SHA-512在其内部函数中使用更大的常量,这为某些类型的攻击提供了更大的安全性。此外,SHA-512具有更大的内部状态,这为抵御碰撞攻击提供了更大的抵抗力。
总的来说,SHA-512被认为比SHA-256是一个更强的哈希函数,但它也运行需要更多的资源。在比特币的背景下,SHA-256仍然是大多数用途的首选哈希函数,但SHA-512在需要更强安全性的情况下,未来可能被使用。
137>从网络拓扑结构的角度来看,整体架构是否相同?
是的,无论使用SHA-256还是SHA-512哈希算法,比特币的整体网络拓扑结构都是相同的。比特币网络是一个去中心化的点对点网络,节点之间通过通信来维护交易共享账本。节点以网格或覆盖网络的方式相互连接。节点不需要相互信任,并且可以使用加密证明独立验证交易和区块的有效性。比特币网络使用的共识机制,即工作量证明(PoW),在使用的哈希算法不同的情况下也保持不变。
138>不,我的意思是SHA-256和SHA-512算法的网络拓扑结构。这是否是具有不同大小d组件的相同网络流,或者两个算法的拓扑结构不同?
SHA-256和SHA-512算法的网络拓扑结构是不同的。SHA-256使用Merkle-Damgard构造,该构造基于压缩函数的顺序迭代。相比之下,SHA-512使用不同的构造,称为Miyaguchi-Preneel构造,该构造基于压缩函数的并行迭代。这意味着SHA-512旨在在64位处理器上更高效,可以以128位块处理消息,而SHA-256在32位处理器上更高效,只能以64位块处理消息。总的来说,由于构造和块大小的不同,两个算法的网络拓扑结构是不同的。
139>谢谢——你能教我Merkle-Damgard构造吗?
当然,Merkle-Damgard构造是一种基于压缩函数创建哈希函数的方法。它以Ralph Merkle和Ivan Damgard的名字命名,他们在20世纪70年代末独立提出了这种构造。
构造背后的基本思想是将消息分成块,将每个块通过压缩函数处理,然后将压缩函数的输出组合起来产生最终的哈希值。压缩函数将固定大小的数据块作为输入,并输出固定大小的摘要,然后将摘要反馈到函数中,与下一个数据块一起。
下面是Merkle-Damgard构造的简化图
+-----------+ +-----------+ +-----------+
| Message | --> | Block 1 | --> | Digest 1 |
+-----------+ +-----------+ +-----------+
| | +-----------+
| | --> | Digest 2 |
| | +-----------+
| | :
| | :
| | +-----------+
| | --> | Digest N |
| | +-----------+
+-----------+
Merkle-Damgard构造被许多流行的哈希函数使用,包括MD5、SHA-1和SHA-2。然而,它容易受到长度扩展攻击的影响,这就是为什么SHA-3算法使用基于海绵函数的不同构造。
140>谢谢——那么Miyaguchi-Preneel呢?
Miyaguchi-Preneel (MP) 构造是一种类似于 Merkle-Damgard 构造的散列函数构造,但它采用不同的方法来解决 Merkle-Damgard 构造的一些弱点。MP 构造由 Tetsu Iwata 和 Kaoru Kurosawa 在 1990 年提出。
与 Merkle-Damgard 构造类似,MP 构造将输入消息分割成一系列固定长度的块进行处理。然而,MP 构造不是使用压缩函数来处理每个块,而是在将其输入下一轮之前,使用分组密码将输入块与前一输出块混合。最后块的输出使用一个单独的压缩函数进行散列。
MP 构造中使用分组密码提供额外的安全层,因为它使得攻击者更难操纵输入消息,从而在输出散列中产生冲突。此外,对最后块使用单独的压缩函数也提供了额外的安全层,因为它使得攻击者更难操纵最后块以产生冲突。
然而,由于每个输入块都需要额外的分组密码运行开销,MP 构造通常被认为比 Merkle-Damgard 构造慢。
总的来说,尽管 MP 构造在安全性方面对 Merkle-Damgard 构造有所改进,但由于其较慢的速度和更复杂的实现,在实践中并不像 Merkle-Damgard 构造那样广泛使用。
依赖项
~88MB
~846K SLoC