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

  • 国密标准:国密哈希算法SM3 , 是我国制定的单向哈希算法标准 , 由国家密码管理局于2010年12月17日发布 , 其安全性和效率与SHA-2系列的SHA-256相当 。
  • 单向哈希的选型可以参考业务部署的地域性要求 , 建议在SM3和SHA-3之间做出选择 , 如果需要与现有系统进行兼容 , 也可酌情选用SHA-2系列中的SHA-256 。

    『区块链』密码学原语如何应用?解析单向哈希的妙用
    本文插图
    链式哈希结构单向哈希的用途很广泛 , 最直接的应用就是构造链式哈希结构 , 即大家所熟知的区块链 , 提供难以篡改的可信数据源 。
    『区块链』密码学原语如何应用?解析单向哈希的妙用
    本文插图
    由于单向哈希的单向性 , 从结构上可以看出 , 从前一个数据块原文 , 很容易计算下一个数据块所用的哈希值输入 , 但已知一个哈希值输入 , 难以反推出所有可能的数据块原文 。
    区块链技术结合单向哈希和共识算法 , 当某一区块的数据共识确认后 , 下一区块将会记录前一区块数据的哈希值 , 从而实现整条链上所有数据块的难以篡改 。
    在隐私保护方案设计中 , 以区块链为代表的基于链式哈希结构的可信数据源 , 可以起到简化协议设计的作用 , 尤其对于第4论中提到的恶意模型特别有效 。 恶意模型下的密码学协议 , 为了防范内部参与者不遵守协议、随意篡改数据 , 不得不引入复杂的多方交互验证过程 。
    通过链式哈希结构 , 在现实系统中引入一个可信数据源 , 可以对关键的中间流程数据进行存证和溯源 , 一旦有参与方作恶 , 便能在第一时间检测出 , 且定位到对应责任方 , 有效保障隐私保护方案全流程的正确性 。
    哈希树 单向哈希不仅仅能构造简单的链式哈希结构 , 还能根据业务需要扩展为更复杂的数据结构 , 其经典的形态之一便是哈希树 。
    哈希树常称为Merkle Tree , 最早由Ralph Merkle在1979年的专利申请中提出 , 为大数据量的完整性验证提供了高效灵活的解决方案 。
    这里的完整性验证是指 , 核实原始数据在使用和传输的过程中没有被篡改 。
    在真实的隐私保护业务中 , 隐私数据多为高价值数据 , 而且多以密文的形态保存和使用 , 一旦被篡改 , 在不知道明文的前提下 , 难以通过常规技术手段来有效识别真伪 。
    对于涉及多方协作、联合计算的隐私保护业务 , 隐私数据密文交换和共享通常是其中的核心流程 。 所以当这些隐私数据密文跨越系统边界时 , 数据接收方会有两方面数据检验需求:
    • 整体完整:验证隐私数据中任意部分都未被篡改 。
    • 篡改定位:如果存在攻击 , 能够有效定位被篡改的数据位置 , 便于开展应对流程 。
    为了体现哈希树的设计优越性 , 我们以举例的形式展示其效果 。
    为了简化说明 , 以下分析假定:
    • 发送方与接收方之间存在一个带宽有限的可信信道 , 如区块链上经过共识的数据 , 可以将简短的哈希值安全地传递给对方 。
    • 隐私数据相关的原始文件由于数据量过大 , 不得不通过低成本低密级信道传输 , 如公共网络 , 因此可能被攻击者篡改 。
    方案1:整体单次哈希
    本方案中 , 发送方在发送原始文件之前 , 将所有的原始文件数据作为哈希算法的输入 , 计算哈希值 , 然后将哈希值与原始文件均发送给接收方 。
    当接收方收到哈希值和原始文件后 , 重复发送方计算哈希值的操作 , 然后将新计算得到的哈希值与从网络上接收到的哈希值进行比较 , 如果相同 , 就可以判断原始文件在传输过程中未被篡改 。
    方案2:分块多次哈希 + 哈希树
    方案1对于满足整体完整需求十分有效 , 但对于第二条篡改定位需求就无能为力了 。