2个版本

0.1.16-alpha.02023年4月2日
0.1.12-alpha.02023年3月4日

#41 in #round

MIT 协议

290KB
696

bitcoin-sha1

bitcoin-sha1 包是SHA-1哈希函数的Rust语言实现,SHA-1在比特币系统中被广泛使用。此包是直接将比特币代码库从C++转换为Rust的翻译的一部分,因此,一些函数体可能仍在翻译过程中。

SHA-1哈希函数是一个广泛使用的加密哈希函数,它接收一个输入消息并产生一个固定大小的160位输出消息摘要。SHA-1算法由多个简单的位操作组成,包括移位、掩码和XOR操作,以及模加和位旋转操作。SHA-1哈希函数被认为相对安全,但现在被认为容易受到碰撞攻击。

bitcoin-sha1 包提供了SHA-1哈希函数的Rust实现,包括初始化哈希、处理输入数据和最终化哈希以产生输出摘要的函数。该包包括SHA-1算法中涉及的所有基本操作的函数,以及用于转换输入数据和最终化哈希的高级函数。

虽然bitcoin-sha1 包可能不涉及任何特定的数学方程或概念,但SHA-1哈希函数是密码学和信息安全中的基本工具。

88> SHA-1第一次被认为是有漏洞的吗?SHA-1总是160位吗?

SHA-1的第一个攻击在2004年发布,这表明该算法的碰撞抵抗能力不如之前认为的那么强。从那时起,发现了更有效的攻击,2017年,谷歌宣布成功对SHA-1进行了碰撞攻击。

SHA-1生成一个固定大小的160位(20字节)哈希值,这是其定义特征之一。输出大小是算法的设计参数,不能更改,否则会改变算法本身。

89> 我记得谷歌发布那个声明的时候——当时攻击的成本是多少?有没有公开利用的漏洞?我试图弄清楚这些攻击造成的损害规模有多大。

在声明时,谷歌估计,使用云计算资源,对SHA-1的碰撞攻击可能需要花费估计75,000到120,000美元。然而,如果攻击者有访问专用硬件,如专用集成电路(ASIC),这个成本可能会更低。

尽管在宣布时没有公开已知的SHA-1碰撞利用案例,但这种攻击的潜在影响是显著的。一般来说,对哈希函数的碰撞攻击允许攻击者创建两个不同的数据块,它们具有相同的哈希值。例如,如果SHA-1用于验证软件更新的完整性,攻击者可以创建一个具有与合法更新相同哈希值的恶意软件更新。这将使攻击者能够欺骗用户安装恶意更新,可能导致广泛的安全问题。

在比特币的情况下,对SHA-1的成功碰撞攻击可能对系统的安全性产生严重影响。例如,攻击者可以创建一个看似有效但实际上包含欺诈性交易的区块,或者创建多个看似属于同一链但具有不同交易历史的区块。这些攻击可能导致双重支出、资金盗窃或其他类型的欺诈。

我们需要加密正确且强大

绝对如此!使用强大的加密来保护敏感数据始终非常重要。除了使用强大的加密算法外,还有一些最佳实践要遵循,以确保加密安全地实施。以下是一些建议:

  1. 使用强大的加密算法:一些最常用的加密算法包括AES、Blowfish和RSA。这些算法被广泛使用,被认为是安全的。在选择加密算法时,重要的是要确保它仍然被认为是安全的。

  2. 使用适当的密钥长度:加密算法的强度在很大程度上取决于密钥长度。请确保使用适合您所使用的加密算法的密钥长度。

  3. 生成强大且随机的密钥:用于加密的密钥应使用强大的随机数生成器生成。避免使用可预测或弱的熵源,因为这会使攻击者更容易猜测密钥。

  4. 保护密钥:保持加密密钥的安全和保密非常重要。如果攻击者获得密钥访问权限,他们可以解密数据。密钥应存储在安全位置,例如硬件安全模块(HSM)。

  5. 使用安全的操作模式:加密算法应在安全模式下使用。例如,AES可以用于CBC、CFB或OFB模式。这些模式具有不同的属性,应根据应用程序的具体要求进行选择。

  6. 使用认证加密:认证加密是一种提供数据机密性和完整性的加密类型。这有助于防止对加密数据的篡改或伪造攻击。

  7. 测试实现:测试加密实现以确保其正确性和安全性非常重要。这可能涉及测试加密和解密函数,以及测试漏洞,如侧信道攻击。

通过遵循这些最佳实践,您可以帮助确保您的加密实现既强大又安全。

如何确保硬件安全模块能够充分保护给定的密钥或密钥?

硬件安全模块(HSM)是一种物理设备,用于安全地存储和管理数字密钥以及执行加密操作。HSM通过在抗篡改和物理安全的环境中存储密钥和执行加密操作,提供高安全度。

通常,HSM可以通过以下方式保护密钥或密钥:

  1. 在HSM(硬件安全模块)内部生成密钥,使用安全的随机数生成器。这确保了密钥不会被外部攻击所威胁,因为这些攻击可能会预测或猜测密钥。

  2. 以安全方式在HSM内部存储密钥。通常,密钥存储在非易失性存储器中,这意味着即使关闭HSM的电源,密钥也会保留。

  3. 确保只有授权方才能访问密钥。HSM通常需要某种形式的身份验证或授权才能访问密钥,如密码或加密令牌。这有助于防止未经授权访问密钥。

  4. 提供一个安全的环境进行加密操作。HSM被设计用来保护加密操作免受攻击,如旁路攻击,这些攻击可以通过测量设备特征来提取有关正在使用的密钥的信息。

总的来说,HSM是一种非常有效的保护密钥并以安全方式执行加密操作的方法。它们在金融、医疗保健和政府等众多行业中广泛应用,在这些行业中,敏感数据的安全性至关重要。

92> 好的,让我们回到SHA-1 -- 它是如何工作的?如果它存在漏洞,为什么还被使用?

SHA-1是一种哈希函数,它将任意长度的输入消息转换为160位的固定长度输出。该算法通过将输入消息分解成块,并通过一系列的混合和转换操作处理每个块来工作。在过程结束时,生成一个160位的消息摘要作为输出。

SHA-1仍然被使用的原因是它被广泛支持,并且已经在各种系统和应用中使用多年。然而,随着时间的推移,其弱点变得越来越明显,并被建议逐步淘汰,转而使用更强大的哈希函数,如SHA-256或SHA-3。

虽然仍然可以使用SHA-1创建安全的系统,但这需要仔细考虑潜在的风险,并使用额外的安全措施,如消息认证码或数字签名。重要的是要记住,密码学是一个持续的过程,随着新攻击的发现,需要开发并采用更强大的算法和协议来维护我们系统的安全性。

93> 为了使SHA-1被视为安全,需要采取哪些额外措施?

没有额外的措施可以使SHA-1变得安全。一旦密码学算法被破解,就无法再次使其安全。唯一的解决方案是切换到当前被认为是安全的其他算法,例如SHA-256或SHA-3。

然而,有一些建议可以遵循以减轻与在旧系统中使用SHA-1相关的风险。这包括

  1. 仅将SHA-1用于非关键应用程序:如果可能,避免将SHA-1用于任何需要强安全性保证的应用程序。

  2. 结合使用其他算法:提高SHA-1安全性的方法之一是将其与其他加密算法结合使用。例如,SHA-1可以作为消息认证码(MAC)的一部分或作为更大加密方案的一个组件。

  3. 监视攻击:密切关注公开声明和行业新闻,了解有关SHA-1的任何新攻击。如果发现攻击,应立即采取措施减轻风险。

  4. 逐步淘汰SHA-1:如果可能,完全放弃使用SHA-1,并切换到更安全的算法,如SHA-256或SHA-3。这可能需要升级硬件或软件,但这是确保系统安全的关键步骤。

94> 你提到可以采取额外的安全措施

是的,可以采取额外的安全措施来增强SHA-1的安全性,但这些措施不能替代使用更强的哈希算法。

其中一种安全措施是使用加盐哈希,即在哈希之前添加随机数据。这使得攻击者很难预计算常见输入的哈希值或使用预计算的表来破解哈希。

另一种安全措施是使用PBKDF2或bcrypt等密钥强化算法。这些算法通过在生成哈希的过程中添加大量的计算工作,旨在使暴力攻击变得更加困难。

然而,尽管这些措施可以提高SHA-1的安全性,但它们不能替代使用SHA-256或SHA-3等更强的哈希算法。

95> 好的。为什么SHA-1在比特币的背景下仍然被使用?

实际上,SHA-1在比特币中已经不再使用了。在比特币的早期,SHA-1被用作挖矿过程中的部分,以哈希区块头,但2010年用SHA-256取代了它,因为SHA-1被认为容易受到碰撞攻击。目前SHA-256用于比特币协议中哈希区块头和其他目的。

96> 好的。你认为为了研究目的,详细描述SHA-1哈希函数的工作原理很重要吗?

是的,为了研究目的,详细描述SHA-1哈希函数的工作原理可能是重要的。这是因为理解哈希函数的内部工作原理可以帮助研究人员分析和识别算法中任何潜在的不稳定或漏洞。此外,对算法的深入了解有助于设计基于相同原则的新且更安全的哈希函数。然而,需要注意的是,已经有许多资源提供了SHA-1算法的详细解释,因此研究人员可能不需要从头开始重新创建这些信息。

97> 好吧,我们还是把它放这里吧

当然可以!以下是SHA-1哈希函数工作原理的简要步骤描述

  1. 填充消息:在消息末尾附加一个“1”位,然后是一系列“0”位,然后是原始消息的长度(以位为单位)。

  2. 将填充后的消息分成512位块。

  3. 使用常量初始化五个32位字(A、B、C、D、E)。

  4. 依次处理每个块,根据一系列轮次更新这五个字。

  5. 输出160位的最终哈希值。

每轮处理涉及一系列位运算(如AND、OR、XOR)和模加运算。具体细节超出了本简要概述的范围,但如果你对学习更多感兴趣,网上有许多资源可以更详细地介绍SHA-1算法。

98> 我们实际上做一个详细的描述

当然,以下是SHA-1哈希函数工作原理的详细描述

SHA-1哈希函数接受任意长度的输入消息,并生成一个固定大小的160位哈希值。输入消息通过添加零和长度字段进行填充,使得填充后的消息是512位的倍数。然后,将填充后的消息分成512位块,SHA-1算法依次处理每个块。

SHA-1算法由五个轮次组成,每个轮次处理填充消息的512位块。每个轮次由80次迭代组成,每次迭代执行以下操作

  1. 取当前160位哈希值,该值在算法开始时初始化为固定值。

  2. 将512位块分成16个32位字。

  3. 使用“词扩展”函数将16个词扩展到80个词,该函数涉及以特定方式旋转和异或这些词。

  4. 使用一组4个“轮函数”,记为f、g、h和i,按照特定顺序对80个词进行一系列逻辑和算术运算。

  5. 将得到的160位哈希值添加到之前的哈希值,以产生新的哈希值。

四个轮函数f、g、h和i的定义如下

f(x,y,z) = (x AND y) OR ((NOT x) AND z)
g(x,y,z) = x XOR y XOR z
h(x,y,z) = (x AND y) OR (x AND z) OR (y AND z)
i(x,y,z) = x XOR y XOR z

到第五轮结束时,160位的最终哈希值是SHA-1算法的结果。

尽管SHA-1广受欢迎且使用广泛,但由于其易受碰撞攻击,它不再被认为是安全的。因此,建议对于任何新的应用都使用更安全的哈希函数,如SHA-256或SHA-3。

99> 这个算法是如何被破解的?你刚才描述的过程中有什么漏洞?

SHA-1算法被认为已破解,因为它易受碰撞攻击,即可以找到两个不同的输入消息,它们产生相同的哈希输出。这意味着攻击者可以创建一个与合法消息具有相同哈希值的欺诈消息,从而冒充合法发送者。

碰撞攻击通过利用SHA-1处理消息块的方式来实现。具体来说,攻击利用了SHA-1使用Merkle-Damgard结构的事实,这意味着哈希函数处理固定大小的消息块,并且每个块都使用一组固定的操作进行处理。攻击基于这样一个事实:某些消息块集可以通过一种方式处理,即使输入消息不同,也能产生相同的中间哈希值。通过精心构造这些消息块,攻击者可以创建两个不同的消息,它们产生相同的最终哈希值。

该攻击最早由王晓云、尹毅群丽莎和于洪波在2005年演示,他们能够使用大约2^69次哈希操作在SHA-1中找到碰撞。从那时起,其他研究人员已经演示了更高效的SHA-1碰撞攻击,导致人们普遍认识到该算法对于加密使用不再安全。

100> 这个攻击针对的是过程的哪个步骤?

碰撞攻击针对SHA-1过程的最后一步,即压缩函数。具体来说,它利用了压缩函数生成消息调度表的方式中的弱点。通过精心构造两个不同的消息块,它们产生相同的信息调度表,攻击者可以创建两个不同的消息,它们具有相同的哈希值。

101> 这个攻击依赖于哪些数学性质?

SHA-1的攻击基于“抗碰撞”的数学属性,即哈希函数产生两个不同输入的能力,这些输入产生相同的哈希输出。换句话说,如果两个输入产生相同的哈希输出,则称为碰撞。哈希函数的安全性依赖于其防止碰撞的能力,这使得攻击者难以找到与给定输入产生相同哈希输出的不同输入。

SHA-1的攻击利用了这样一个事实:可以创建两个不同的输入消息,它们产生相同的哈希输出,而不必为每个消息计算完整的哈希函数。这是通过找到具有相同前缀的不同消息对并使用它们来生成相同的哈希输出来实现的。

这是通过利用SHA-1算法的“消息扩展”步骤中的弱点来实现的,这允许攻击者在不同输入消息之间创建“近似碰撞”。通过迭代修改消息并调整填充,攻击者可以找到两个具有相同哈希输出的消息,这就是碰撞。这种攻击称为“碰撞攻击”,是SHA-1漏洞的基础。

102> 好的,我想关于SHA-1的信息已经足够了。你同意吗?我们还需要了解它的一些其他信息吗?

我认为我们已经涵盖了SHA-1及其漏洞的重要方面。然而,值得注意的是,SHA-1现在不再被认为是安全的,不应用于新的系统或协议中。同时,值得一提的是,虽然SHA-2(包括SHA-256)目前被认为是安全的,但对其攻击的研究仍在进行中,它也有可能在将来变得脆弱。因此,了解密码学的最新发展,并使用最最新和最安全的算法和协议非常重要。

103> 那么,一旦发现SHA-256的漏洞,比特币系统会发生什么?

如果发现SHA-256的漏洞,攻击者可能能够操纵区块链及其上记录的交易。这可能会对比特币系统造成重大破坏,可能导致用户和投资者之间失去信任。

然而,值得注意的是,SHA-256只是比特币系统安全的一个组成部分。还有许多其他安全层,包括工作量证明共识算法、去中心化节点网络和多种其他密码学技术。

在SHA-256漏洞的情况下,比特币社区可能会迅速寻找解决方案,例如过渡到不同的哈希算法或实施其他安全措施以减轻风险。这就是为什么比特币社区需要保持警惕,并在新威胁出现时不断改进系统安全的重要性。

依赖项

~88MB
~830K SLoC