密码学哈希函数(CHF) 是一种用于验证数据有效性的方程式。密码学哈希函数也用于保护 区块链 上的交易安全。这些数学函数接受一个输入,并生成一个对该输入唯一的固定长度的输出。[1][2]
密码学是保护信息和通信安全,以确保只有信息的目标接收者才能理解和处理信息的一门科学和技术。哈希是将任意长度的明文数据映射到固定长度的唯一密文(称为哈希值)的过程。执行哈希操作的函数称为哈希函数。[1] [9]
哈希函数是一种将给定的数字或字母数字键转换为小的实用整数值的函数。映射的整数值用作哈希表中的索引。简单来说,哈希函数将一个重要的数字或字符串映射到一个小的整数,该整数可以用作哈希表中的索引。该对的形式为(键,值),对于给定的键,可以使用某种“函数”将键映射到值来查找值。可以使用称为哈希函数的函数来计算给定对象的键。[6]
所有密码学哈希函数都是哈希函数,但并非每个哈希函数都是密码学哈希函数。[3][4]
密码学哈希函数(CHF)是一种单向工作,因此很难反向操作以重新创建用于生成它的信息。[1]
区块链上的每个区块都包含前一个区块的哈希值,从而创建了一个几乎不可能修改的链。一个健全的CHF还应该能够承受所有已知的对哈希方程本身的攻击,并且能够承受侧信道攻击,这意味着攻击不是针对方程本身,而是针对这些方程的实现方式。
密码学哈希函数的主要应用是确保数据完整性。通过为一段数据生成唯一的哈希值,可以很容易地检测到对该数据的任何篡改或更改。这在数字签名中尤为重要,在数字签名中,为文档或消息生成哈希值,然后使用发送者的私钥对其进行加密。然后,接收者可以使用发送者的公钥解密签名,并验证消息的真实性。[8]
密码学哈希函数(CHF)大致分为两类。无密钥哈希函数也称为操纵检测码(MDC)或消息认证码(MAC),具有单个参数——输入消息,以及具有两个不同输入的密钥哈希函数——输入消息和一个密钥。通常,术语哈希函数指的是无密钥哈希函数。 以下是密码学哈希算法的示例。
由美国国家标准与技术研究院(NIST)作为美国联邦信息处理标准(FIPS)发布。该系列指定了六种不同的哈希函数:SHA-0、SHA-1、SHA-224、SHA-256、SHA-384和SHA-512。前四个对分为32位字的512位消息块进行操作,后两个对分为64位字的1024位块进行操作。比特币是最初的和最大的加密货币,它使用SHA-256哈希函数。[3][5]
SHA-256是NIST(美国国家标准与技术研究院)推荐并正式批准的标准算法。由于可以在不显示数据内容的情况下验证数据内容,因此它也被包括美国和澳大利亚在内的世界各地的许多政府和公共部门机构使用。[4]
MD包括MD2、MD4、MD5和MD6,由Ronald Rivest为RSA安全编写,并被采纳为互联网标准RFC 1321。[3]
一系列密码学哈希函数,基于MD4中使用的设计原则,由Katholieke Universiteit Leuven的COSIC研究小组的Hans Dobbertin、Antoon Bosselaers和Bart Preneel开发。RIPEMD-160生成一个160位(20字节)的哈希摘要。[3]
由Vincent Rijmen和Paulo S. L. M. Barreto设计,此哈希函数基于高级加密标准(AES)的经过大幅修改的版本。Whirlpool生成一个512位(64字节)的哈希摘要。[3]
由Jean-Philippe Aumasson、Luca Henzen、Willi Meier和Raphael C.-W. Phan提交给NIST哈希函数竞赛的哈希函数。它基于Dan Bernstein的ChaCha流密码,但在每个ChaCha轮之前,都会添加输入块的置换副本,并与轮常量进行异或运算。[3]
以前在IOTA签名方案(ISS)中使用的哈希函数。IOTA是一种加密货币,旨在与物联网(IoT)和汽车生态系统一起使用。ISS基于Winternitz一次性签名,但与传统的Winternitz不同,在IOTA中,用户对消息的哈希值进行签名。因此,ISS的安全性取决于其密码学哈希函数,即Curl-P-27。[3]
当用户输入其密码时,将对其进行哈希处理,并将结果与公司服务器上存储的哈希值列表进行比较。但是,这不是一种万无一失的做法。黑客创建了常见密码及其哈希值的数据库,称为彩虹表,这使他们更容易进入帐户。[7]
验证签名是一种用于验证数字文档或消息的真实性的数学过程。有效的数字签名(前提条件已满足)为其接收者提供了强有力的证据,证明已知发送者创建了该消息,并且该消息在传输过程中未被更改。数字签名方案通常由三种算法组成:密钥生成算法;签名算法,该算法在给定消息和私钥的情况下生成签名;以及签名验证算法。[7]
哈希可以确保从发送者传输到接收者的消息和文件在传输过程中不会被篡改。这种做法建立了一条“信任链”。例如,用户可以发布其数据的哈希版本和密钥,以便接收者可以将他们计算的哈希值与发布的值进行比较,以确保它们对齐。[7]