『区块链』密码学原语如何应用?解析单向哈希的妙用


隐私数据如何验明真伪?区块链数据何以可信?如何快速检验海量数据是否被篡改?单向哈希在其中起到了什么作用?
隐私数据的价值很大程度上源自其真实性 , 如何防止数据被恶意篡改 , 是隐私保护方案设计中不可忽视的关键目标之一 。 为此 , 密码学领域提出了一系列基本组件 , 即密码学原语(Cryptographic Primitive)来实现这一目标 , 其中最常用的便是单向哈希 。
在区块链中 , 单向哈希能够链接多个区块数据 , 形成可信的链式数据结构 , 在弱信任环境下 , 提供防篡改且经过多方共识的可信数据源 。
这一特性对隐私保护方案的设计意义重大 。 隐私数据往往以密文形式表达 , 需要快速检验海量隐私数据的真伪 , 查验是否被恶意篡改 。 此时 , 单向哈希作为一项关键技术 , 大有用武之地 。
为何单向哈希如此神奇?其常见的用法有哪些?又能具体解决哪些问题?以下将据此一一展开 。
单向的哈希算法 哈希算法是信息科学中的基础算法组件 , “快速实现数据比较和效验”是其设计初衷之一 。
现实业务场景中 , 可能会涉及海量隐私数据 , 逐一比对数据原文 , 在很多场景中非常不现实 , 尤其是需要通过网络传输的数据 , 会大大增加网络带宽的负担 。
哈希算法的出现 , 使得高效的数据验证成为了可能 。
哈希算法的核心功能为 , 将任意长度的输入m映射为固定长度的输出H(m) , H(m)常称为哈希值、散列值或消息摘要 。
一个精心设计的哈希算法具有以下特征:

  • 输出确定性:同一种哈希算法 , 相同的输入 , 其输出固定不变 。
  • 输出长度不变性:同一种哈希算法 , 针对任意长度的输入 , 其输出长度不变 。
  • 输入敏感性:同一种哈希算法 , 即便输入数据有微小的改变 , 其输出哈希值也会发生巨大变化 。
因此 , 只要比较数据的哈希值是否与预期的一致 , 就能大概率地判别隐私数据原文是否被篡改 。 其典型的实现有:各大主流编程语言中 , HashMap数据结构所使用的哈希算法 。
【『区块链』密码学原语如何应用?解析单向哈希的妙用】然而 , 只是大概率 , 在密码学协议中是不够的 。 我们需要更强的哈希算法 , 将实际的检验概率提升至接近100% 。
与之对应的一个重要概念是『哈希碰撞』 。 哈希碰撞是指 , 存在两个不同的数据原文m1和m2 , 其哈希值完全相同 , 即H(m1) = H(m2) 。
容易出现哈希碰撞的哈希算法在密码学协议中不安全 , 同时 , 密码学还进一步引入了单向性的要求 。
一个密码学安全的哈希算法 , 在传统哈希算法的基础上 , 还需满足以下特性:
  • 单向性:根据数据原文计算哈希值很容易 , 但要求难以根据哈希值计算数据原文 , 提供计算上的不对称性 , 以此防止攻击者轻易地从哈希值反推出可能的隐私数据原文 , 保护哈希值的机密性 。
  • 抗碰撞性:给定任意两个不同的数据原文 , 要求它们经哈希算法计算后得到相同哈希值的概率极低 , 以此防止攻击者轻易地为篡改之后的隐私数据原文构造出合法的哈希值 , 确保数据检验的有效性 。
以上两个特性 , 赋予了密码学安全的哈希算法对数据内容公开可验证的约束能力 。 这一约束能力使得经过单向性转换获得哈希值 , 在一定程度上可以作为隐私数据原文的等价信息 。
在隐私保护方案设计中 , 哈希算法的单向性是最常用的特性之一 。 相应地 , 密码学安全的哈希算法也常被称之为单向哈希 。
目前主流的单向哈希有如下算法标准: