比特币的哈希算法(比特币的密码学基础-哈希函数)
1.哈希函数
区块链是比特币的核心技术,而区块链事实上是一条哈希链,通过哈希函数串联一块块历史数据。
2.哈希函数的定义
哈希又译为“散列”,哈希函数以任意长度的消息为输入,输出固定长度的消息摘要。例如:哈希函数SHA-256输出的哈希值为256 bit。通常情形下,哈希函数是一类压缩函数,它的值域远小于定义域,即一个消息摘要存在多个原像与之对应。
比特币系统中所应用的哈希函数还需要满足以下3个安全要求:
(1)对任意消息 m ,很容易计算出它的哈希值 y = h(m) ;
(2)由 y 得出 m 在计算上不可行(单向性或原像稳固性);
(3)已知消息 m ,很难找出另一个 消 息 n 使得 h(n)= h(m)(抗碰撞性)。
3.哈希校验
由于哈希函数具有单向性和抗碰撞性,因此可用于检验消息的完整性,即检验消息在传送过程中是否被篡改。该过程被称为哈希校验。效验步骤:假设 B 要发送一条消息 m 给 A,首先计算 m 的消息摘要y = h(m) ,并附在消息后面一起发出。A 收到消息 m′ 后,检验 h(m′)= y 。如果相等,由于哈希函数具有强抗碰撞性,A可在很大程度上相信消息在传送过程中没有被篡改。
4.哈希现金
哈希现金(Hashcash)最早是由ADAM B 提出的 ,其本质是一种PoW系统。用户A要求发给他的邮件的哈希值必须包含某段特定字符串,例如:用户 A 要求邮件的哈希值的前 8 位必须是 0,否则拒绝接收该邮件。那么发给 A 的邮件正文必须添加某些随机字符使得哈希值满足该要求,这个工作是没有捷径的,计算机必须不断循环进行如下步骤:随机选取某些字符,并将其串联到邮件末尾,计算串联后的邮件的哈希值,直到哈希值的前 8 位是 0 为止。当然,计算开销取决于计算机的算力,当要求的难度提升巨大时,想要通过随意转发垃圾邮件的方式完成 A 的要求的可能性几乎为零,从而达到了防止垃圾邮件的目的。