密码学原语如何应用?解析单向哈希的妙用|第9论

2023-11-14

作者:廖飞强
来源:微众银行区块链

​隐私数据如何验明真伪?区块链数据何以可信?如何快速检验海量数据是否被篡改?单向哈希在其中起到了什么作用?

隐私数据的价值很大程度上源自其真实性,如何防止数据被恶意篡改,是隐私保护方案设计中不可忽视的关键目标之一。为此,密码学领域提出了一系列基本组件,即密码学原语(Cryptographic Primitive)来实现这一目标,其中最常用的便是单向哈希

在区块链中,单向哈希能够链接多个区块数据,形成可信的链式数据结构,在弱信任环境下,提供防篡改且经过多方共识的可信数据源。

这一特性对隐私保护方案的设计意义重大。隐私数据往往以密文形式表达,需要快速检验海量隐私数据的真伪,查验是否被恶意篡改。此时,单向哈希作为一项关键技术,大有用武之地。

为何单向哈希如此神奇?其常见的用法有哪些?又能具体解决哪些问题?以下将据此一一展开。

1.单向的哈希算法

哈希算法是信息科学中的基础算法组件,“快速实现数据比较和效验”是其设计初衷之一。

现实业务场景中,可能会涉及海量隐私数据,逐一比对数据原文,在很多场景中非常不现实,尤其是需要通过网络传输的数据,会大大增加网络带宽的负担。

哈希算法的出现,使得高效的数据验证成为了可能。

哈希算法的核心功能为,将任意长度的输入m映射为固定长度的输出H(m),H(m)常称为哈希值、散列值或消息摘要。

一个精心设计的哈希算法具有以下特征:

  • 输出确定性:同一种哈希算法,相同的输入,其输出固定不变。
  • 输出长度不变性:同一种哈希算法,针对任意长度的输入,其输出长度不变。
  • 输入敏感性:同一种哈希算法,即便输入数据有微小的改变,其输出哈希值也会发生巨大变化。

因此,只要比较数据的哈希值是否与预期的一致,就能大概率地判别隐私数据原文是否被篡改。其典型的实现有:各大主流编程语言中,HashMap数据结构所使用的哈希算法。

然而,只是大概率,在密码学协议中是不够的。我们需要更强的哈希算法,将实际的检验概率提升至接近100%。

与之对应的一个重要概念是『哈希碰撞』。哈希碰撞是指,存在两个不同的数据原文m1和m2,其哈希值完全相同,即H(m1) = H(m2)。

容易出现哈希碰撞的哈希算法在密码学协议中不安全,同时,密码学还进一步引入了单向性的要求

一个密码学安全的哈希算法,在传统哈希算法的基础上,还需满足以下特性:

  • 单向性:根据数据原文计算哈希值很容易,但要求难以根据哈希值计算数据原文,提供计算上的不对称性,以此防止攻击者轻易地从哈希值反推出可能的隐私数据原文,保护哈希值的机密性。
  • 抗碰撞性:给定任意两个不同的数据原文,要求它们经哈希算法计算后得到相同哈希值的概率极低,以此防止攻击者轻易地为篡改之后的隐私数据原文构造出合法的哈希值,确保数据检验的有效性。

以上两个特性,赋予了密码学安全的哈希算法对数据内容公开可验证的约束能力。这一约束能力使得经过单向性转换获得哈希值,在一定程度上可以作为隐私数据原文的等价信息

在隐私保护方案设计中,哈希算法的单向性是最常用的特性之一。相应地,密码学安全的哈希算法也常被称之为单向哈希

目前主流的单向哈希有如下算法标准:

  • NIST标准:SHA(Secure Hash Algorithm)系列是由美国国家标准技术研究院(NIST)制定的SHA哈希算法系列,主要包括SHA-1、SHA-2和SHA-3三个系列。SHA-1由于安全问题已不再使用
    SHA-2系列包括SHA-224(表示哈希值长度为224位)、SHA-256、SHA-384、SHA-512等算法,其中SHA-256是目前使用最广泛的单向哈希
    SHA-3是最新算法标准,源自参与SHA-3竞赛的keccak算法。2015年,NIST在完成SHA-3的标准化时,调整了keccak的填充流程,因此,标准的SHA-3算法与原始的keccak算法并不兼容。
  • 国密标准:国密哈希算法SM3,是我国制定的单向哈希算法标准,由国家密码管理局于2010年12月17日发布,其安全性和效率与SHA-2系列的SHA-256相当。

单向哈希的选型可以参考业务部署的地域性要求,建议在SM3和SHA-3之间做出选择,如果需要与现有系统进行兼容,也可酌情选用SHA-2系列中的SHA-256

在这里插入图片描述

2.链式哈希结构

单向哈希的用途很广泛,最直接的应用就是构造链式哈希结构,即大家所熟知的区块链,提供难以篡改的可信数据源。

在这里插入图片描述

由于单向哈希的单向性,从结构上可以看出,从前一个数据块原文,很容易计算下一个数据块所用的哈希值输入,但已知一个哈希值输入,难以反推出所有可能的数据块原文。

区块链技术结合单向哈希和共识算法,当某一区块的数据共识确认后,下一区块将会记录前一区块数据的哈希值,从而实现整条链上所有数据块的难以篡改。

在隐私保护方案设计中,以区块链为代表的基于链式哈希结构的可信数据源,可以起到简化协议设计的作用,尤其对于第4论中提到的恶意模型特别有效。恶意模型下的密码学协议,为了防范内部参与者不遵守协议、随意篡改数据,不得不引入复杂的多方交互验证过程。

通过链式哈希结构,在现实系统中引入一个可信数据源,可以对关键的中间流程数据进行存证和溯源,一旦有参与方作恶,便能在第一时间检测出,且定位到对应责任方,有效保障隐私保护方案全流程的正确性

3.哈希树

单向哈希不仅仅能构造简单的链式哈希结构,还能根据业务需要扩展为更复杂的数据结构,其经典的形态之一便是哈希树。

哈希树常称为Merkle Tree,最早由Ralph Merkle在1979年的专利申请中提出,为大数据量的完整性验证提供了高效灵活的解决方案。

这里的完整性验证是指,核实原始数据在使用和传输的过程中没有被篡改。

在真实的隐私保护业务中,隐私数据多为高价值数据,而且多以密文的形态保存和使用,一旦被篡改,在不知道明文的前提下,难以通过常规技术手段来有效识别真伪

对于涉及多方协作、联合计算的隐私保护业务,隐私数据密文交换和共享通常是其中的核心流程。所以当这些隐私数据密文跨越系统边界时,数据接收方会有两方面数据检验需求:

  • 整体完整:验证隐私数据中任意部分都未被篡改。
  • 篡改定位:如果存在攻击,能够有效定位被篡改的数据位置,便于开展应对流程。

为了体现哈希树的设计优越性,我们以举例的形式展示其效果。

为了简化说明,以下分析假定:

  • 发送方与接收方之间存在一个带宽有限的可信信道,如区块链上经过共识的数据,可以将简短的哈希值安全地传递给对方。
  • 隐私数据相关的原始文件由于数据量过大,不得不通过低成本低密级信道传输,如公共网络,因此可能被攻击者篡改。

方案1:整体单次哈希

本方案中,发送方在发送原始文件之前,将所有的原始文件数据作为哈希算法的输入,计算哈希值,然后将哈希值与原始文件均发送给接收方。

当接收方收到哈希值和原始文件后,重复发送方计算哈希值的操作,然后将新计算得到的哈希值与从网络上接收到的哈希值进行比较,如果相同,就可以判断原始文件在传输过程中未被篡改。

方案2:分块多次哈希 + 哈希树

方案1对于满足整体完整需求十分有效,但对于第二条篡改定位需求就无能为力了。

基于哈希算法的输入敏感性,接收方可以知道至少有一个比特的数据被篡改了,但不知道具体在哪里。发送方不得不对所有数据进行重发,在这种情况下,攻击者很容易对隐私保护方案实施拒绝服务攻击。

为了解决这一点,本改进方案中,将原始文件分成一系列数据块,为每一个数据块分别计算哈希值。接收方验证的过程与方案1相似,区别在于可以对具体的数据块进行验证,一个数据块被篡改,导致的哈希值不匹配不会影响到其他数据块的验证,由此实现了篡改定位需求。

这里中间缺了关键的一步,即如何高效灵活地传输这些哈希值,并在原始文件很大时,灵活支持部分数据的获取和验证?

解决这些问题的要点,在于利用好哈希树的特性。

在这里插入图片描述

哈希树中,最底层的叶子层是各个数据块的哈希值,往树根的方向迭代哈希计算。即把相邻的两个节点的哈希值串连之后,再进行哈希运算,这样每两个哈希值就生成一个新的哈希值,重复以上计算过程,直到仅剩下一个哈希值(根哈希),最终形成一棵倒挂的树。

在哈希值传输方面,接收方只需要通过可信信道下载一个根哈希,其他数据都可以通过低成本低密级信道传输。

在支持部分数据的获取和验证方面,接收方只需要获取所需的部分数据块、根哈希,途经分支节点的哈希值,以O(log(n))的时间复杂度便可完成数据的验证,并实现被篡改数据块的快速定位。

除了哈希树之外,根据业务需求的差异,单向哈希还能用于构造有向无环图等更复杂的数据结构。一般而言,其作用相当于连接各个数据点的锁扣,为相关数据建立公开可验证的密码学约束,使之难以被篡改,以此保障数据的正确性。

在这里插入图片描述

正是:隐私数据真假难分辨,单向哈希守正不轻挠!

单向哈希是密码学中处于核心地位的密码学原语,可用于构建难以篡改的可信数据源、高效灵活的数据完整性验证机制等,以此来保障隐私保护方案中隐私数据的正确性。

本论中,我们介绍了单向哈希的基础应用,在往后的文章中,我们还会进一步介绍单向哈希的高级应用,包括构造密码学承诺、零知识证明等。

同时,作为密码学中久经考验的基本组件,除了单向哈希,密码学原语还包括数据编解码、对称加密、非对称加密、数字签名等,基础密码学原语还能进一步组成更高级的密码学组件。在这一系列中,我们将逐一展开与隐私保护密切相关的密码学原语的分享,欲知详情,敬请关注下文分解。


《隐私保护周三见》

“科技聚焦人性,隐私回归属主”,这是微众银行区块链团队推出《隐私保护周三见》深度栏目的愿景与初衷。每周三晚8点,专家团队将透过栏目和各位一起探寻隐私保护的发展之道。

栏目内容含括以下五大模块:关键概念、法律法规、理论基础、技术剖析和案例分享,如您有好的建议或者想学习的内容,欢迎随时提出。

栏目支持单位:零壹财经、陀螺财经、巴比特、火讯财经、火星财经、价值在线

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

密码学原语如何应用?解析单向哈希的妙用|第9论 的相关文章

  • kotlin编译报错问题和解决方案

    IDEA 编译springboot项目报错 Error Kotlin Module was compiled with an incompatible version of Kotlin The binary version of its
  • 网络同步与异步概念整理

    在网络同步中 有两种同步方式 分别为同步与异步 同步的操作指的是 当所有的操作请求都做完 才将结果返回给用户 用户才能进行下一个操作 这样就会让用户有一种卡顿的感觉 因为需要等待上一步操作的执行结果 异步操作指的是 用户的操作之间不需要进行

随机推荐

  • git相关命令

    git命令 首先在github页面上创建一个自己的分支 new branch 命名branch 1 git clone git 克隆项目 2 git init 生成本地 git 文件 3 git add 添加需要上传的文件 4 git co
  • 什么是Docker容器?一文带你了解,看完直接学会

    一 为什么需要Docker容器 1 引入 1 1麻烦的环境部署 1 在软件开发中 最麻烦的事情之一就是环境配置 在正常情况下 如果要保证程序能运行 我们需要设置好操作系统 以及各种库和组件的安装 2 举例来说 要运行一个Python程序 计
  • 双重求和∑∑的定义及性质

    目录 一 复习求和符号 二 二重求和的定义 三 双重求和 交换求和顺序 一 复习求和符号 自从约瑟夫 傅立叶于1820年引入求和符号 大写的希腊字母sigma 以来 求和 以及双重求和 在数学公式推导 命题证明中被经常使用 掌握它的定义和性
  • Linux笔记——chapter1 从登陆Linux开始

    1 1 X Window与命令行模式 X Window 图形化界面 CentOS默认至少提供GNOME KDE这两种图形界面 命令行模式 纯文本界面 通常我们也称命令行模式为终端界面 terminal或console 登录模式的切换 Lin
  • 【C++】-- 高并发内存池

    高并发内存池 项目介绍 池化技术 内存池 定长内存池的实现 整体框架 threadcache threadcache整体设计 threadcache哈希桶映射对齐规则 TLS无锁访问 centralcache centralcache整体设
  • React ajax

    目录 前置说明 常用的ajax请求库 axios 相关API 配置代理 方法一 配置代理 方法二 案例 github用户搜索 ES6小知识点 解构赋值 重命名 消息订阅与发布机制 fetch发送请求 关注分离的设计思想 list组件 sea
  • 计算机组成原理(一)

    文章目录 常识 第一章 进制转换 1 10与2进制互转 法一 短除法 法二 按权展开法表示十进制 2 10转其他进制 3 2转8进制 4 8转2进制 5 2转16进制 6 16转2进制 第二章 一 数据类型 原码 补码 1 模 2 n 1次
  • MySQL8.0.19修改root密码

    在MySQL 8 04前 执行 SET PASSWORD PASSWORD 新密码 但是MySQL8 0 4开始 这样默认是不行的 因为之前 MySQL的密码认证插件是 mysql native password 而现在使用的是 cachi
  • Python打包成exe文件操作

    脚本一般都会用到一些第三方包 比如开发的脚本或小工具 如果发送别人是不能直接用的 他还需要安装python解释器 甚至还要安装我们用的那些第三方包太麻烦了 我们这边直接打包成exe文件可供于别人使用 会更加方便 具体操作 1 首先就是安装p
  • 分苹果问题

    题目大意 有N个苹果 要把这些苹果粉给2个人 使得这两个人得到的苹果重量差最小 先求得N个苹果的重量总和 分成两堆 差值最小 则有一堆大于或等于SUM 2 有一堆小于等于SUM 2 所以有for j sum 2 j gt w i j 只要d
  • error C1076: compiler limit: internal heap limit reached 【UE4出现C1076错误的解决方法】

    如果编译后出现以下问题 导致这个问题的原因是 预分配 头内存不足 可以通过 Zm114 多分配一些
  • docker下交叉编译环境配置

    为什么在docker中搭建开发环境 Docker 是一个开源的应用容器引擎 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中 然后发布到任何流行的 Linux 机器上 也可以实现虚拟化 容器是完全使用沙箱机制 相互之间不会有任何接口
  • matlab数学实验 课件,MATLAB数学实验课件.PPT

    摘要 第一章 Matlab入门 MATLAB数学实验 第八章 随机模拟和统计分析 第八章 随机模拟和统计分析 8 1 预备知识 概率和统计 8 2 概率和统计的MATLAB指令 8 3 计算实验 随机模拟 Monte Carlo算法 8 4
  • [Koishi] 实现简易QQ机器人

    以前使用的QQ机器人是千寻Bot为基础框架的 配置环境相较于Koishi复杂得多 在此记录一下使用Koishi的踩坑过程 目录 1 软件下载与安装 1 1下载 1 2安装 2 插件 2 1插件安装 2 2插件更新 2 3插件配置 2 3 1
  • python从MySQL数据库中读取数据

    import pymysql 连接数据库 link pymysql connect host 127 0 0 1 连接地址 连接本地默认 127 0 0 1 user root 用户名 passwd 密码 port 3306 端口 默认为3
  • CPU数据预取对软件性能的影响

    一 什么是预取 预取是指将内存中的指令和数据提前存放到cache L1 L2 L3 中 从而加快处理器执行速度 Cache预取可以通过硬件或者软件实现 也就是分为硬件预取和软件预取两类 硬件预取 是通过处理器中专门的硬件来实现的 该硬件监控
  • 除了 :还有哪些空白符实体(转载)

    除了 nbsp 还有哪些空白符实体
  • CentOS7安装OpenLDAP+MySQL+PHPLDAPadmin(本人测试通过)

    转载自 http www cnblogs com bigbrotherer p 7251372 html 安装环境 CentOS 7 1 安装和设置数据库 在CentOS7下 默认安装的数据库为MariaDB 属于MySQL数据库的一个分支
  • jlink烧录,多个jlink同时烧录多个板子

    查看jlink的序列号 S N 如下是59408473 然后使用JFlashSPI exe打开之后 填写进去这个序列号 最后保存为jflash文件
  • 密码学原语如何应用?解析单向哈希的妙用|第9论

    作者 廖飞强 来源 微众银行区块链 隐私数据如何验明真伪 区块链数据何以可信 如何快速检验海量数据是否被篡改 单向哈希在其中起到了什么作用 隐私数据的价值很大程度上源自其真实性 如何防止数据被恶意篡改 是隐私保护方案设计中不可忽视的关键目标