密码学 | 承诺:常见的承诺方案

🥑原文:密码学原语如何应用?解析密码学承诺的妙用 - 知乎



1 简介

密码学承诺 涉及 承诺方、验证方 两个参与方,以及以下两个阶段:

  • 承诺阶段:承诺方选择一个敏感数据 v v v,为它计算出相应的承诺 c c c,然后将承诺 c c c 发送给验证方。通过使用承诺 c c c,验证方可以确定承诺方对于尚未解密的敏感数据 v v v 只能有一种的解读方式,即承诺方没有办法指鹿为马。
  • 揭示阶段:承诺方公布敏感数据 v v v 和用于计算承诺 c c c 的相关参数。验证方重新执行承诺的计算过程,比较新生成的承诺 c ′ c' c 与之前接收到的承诺 c c c 是否一致,一致则表示验证成功,否则验证失败。

你没看错,揭示阶段就是直接公布承诺方的敏感数据。个人认为,承诺的作用不在于保护敏感数据的隐私,而在于防止承诺方随意解读这一敏感数据。

一个设计良好的 密码学承诺 具备如下特性:

  • 隐藏性:在打开承诺 c c c 之前,验证方不知道承诺方选择的敏感数据 v v v 是什么。
  • 绑定性:在承诺 c c c 生成之后,承诺方难以将已承诺的敏感数据解读为另一个不同的数据 v ′ v' v

一旦做出承诺,就必须在揭示阶段使用之前已经承诺的敏感数据,否则谎言会被戳穿。

几乎每一篇博客都会重复上述内容,大家常看常新啊😇



2 哈希承诺

哈希承诺是密码学承诺中最简单的一种实现方式。

哈希承诺通过以下公式计算关于敏感数据 v v v 的承诺:

c = H ( v ) c=H(v) c=H(v)

其中 H H H 是一个密码学安全的单向哈希算法。

基于单向哈希的 单向性,难以通过哈希值 H ( v ) H(v) H(v) 反推出敏感数据 v v v,以此提供了一定的 隐藏性;基于单向哈希的 抗碰撞性,难以找到不同的敏感数据 v ′ v' v 产生相同的哈希值 H ( v ) H(v) H(v),以此提供了一定的 绑定性

验证方拿着承诺 c = H ( v ) c=H(v) c=H(v) 却无法反推出敏感数据 v v v,体现了隐藏性;只有使用敏感数据 v v v 才能产生哈希值 H ( v ) H(v) H(v),而其他数据 v ′ v' v 却不行,体现了 v v v 和承诺 c = H ( v ) c=H(v) c=H(v) 之间的绑定性。

哈希承诺的 构造简单、使用方便,满足密码学承诺基本的特性,适用于对敏感数据机密性要求不高的应用场景。对敏感数据机密性要求高的应用,需要注意哈希承诺提供的 隐匿性比较有限,不具备随机性

对于同一敏感数据 v v v H ( v ) H(v) H(v) 值是固定的。因此可以通过暴力穷举的方法,列举出所有可能的 v v v 值,来反推出 H ( v ) H(v) H(v) 中实际承诺的 v v v

与其他类型的承诺相比,哈希承诺 不支持在密文形式下的直接运算和交叉验证。这意味着,在某些需要进行复杂密码学协议构造和安全多方计算的场景中,哈希承诺不如其他承诺技术那样有效。



3 Pedersen 承诺

Pedersen 承诺 是目前隐私保护方案中使用广泛的密码学承诺,相比哈希承诺,构造略微复杂,但提供了一系列优异的特性:

  • 信息论安全的理论最强隐藏性
  • 基于离散对数困难问题的强绑定性
  • 具有同态加法特性的密文形式

Pedersen 承诺 的具体构造如下:

在这里插入图片描述
其中 g g g h h h 是循环群内的两个生成元, v v v 是敏感数据。

Pedersen 承诺引入了盲因子 r r r,其中 r r r 是一个随机数。这样一来,即便敏感数据 v v v 不变,最终的承诺 c c c 也会随着 r r r 的改变而改变,从而提供了信息论安全的隐藏性。

与此不同,哈希承诺对于同一个 v v v 会产生相同的承诺 H ( v ) H(v) H(v)

由于 Pedersen 承诺在构造中采用了离散对数运算,因此也具有 加法同态性

具体来说,两个分别关于 v 1 v_1 v1 v 2 v_2 v2 的 Pedersen 承诺 c 1 c_1 c1 c 2 c_2 c2 相加,得到的新承诺是关于 v 1 + v 2 v_1+v_2 v1+v2 的 Pedersen 承诺。证明过程非常简单:

c 3 = c 1 + c 2 = C o m m i t ( v 1 , r 1 ) + C o m m i t ( v 2 , r 2 ) = ( v 1 ∗ g + r 1 ∗ h ) + ( v 2 ∗ g + r 2 ∗ h ) = ( v 1 + v 2 ) ∗ g + ( r 1 + r 2 ) ∗ h = C o m m i t ( v 1 + v 2 , r 1 + r 2 ) \begin{alignat}{2} c_3 &= c_1 + c_2 \\ &= Commit(v_1, r_1)+Commit(v_2, r_2) \\ &= (v_1*g+r_1*h)+(v_2*g+r_2*h) \\ &= (v_1+v_2)*g+(r_1+r_2)*h \\ &= Commit(v_1+v_2, r_1+r_2) \end{alignat} c3=c1+c2=Commit(v1,r1)+Commit(v2,r2)=(v1g+r1h)+(v2g+r2h)=(v1+v2)g+(r1+r2)h=Commit(v1+v2,r1+r2)

其中 C o m m i t ( ) Commit() Commit() 代表生成承诺的方法。

Pedersen 承诺还可以用来构造 v 1 ∗ v 2 v_1*v_2 v1v2 v 1 ∣ ∣ v 2 v_1 || v_2 v1∣∣v2 等更复杂的承诺 c 3 c_3 c3,通过基于离散对数的通用零知识证明系统,来证明新承诺 c 3 c_3 c3 满足与原始承诺 c 1 c_1 c1 c 2 c_2 c2 之间存在指定的约束关系。

Pedersen 承诺重在承诺,适用于数据所有者向第三方证明承诺中的敏感数据满足一定的约束关系。Pedersen 承诺不直接提供解密功能,不支持需要互不透露敏感数据明文的多方协同计算,这一点与密码学领域的同态加解密算法有很大区别,切勿混淆概念。



4 量子比特承诺

量子比特承诺 是基于量子力学原理构造的比特承诺方案,具体实现可以抽象为一个带随机输入的单向哈希算法。具体构造如下:
在这里插入图片描述
根据单向函数的单向性,承诺方向验证方发送 r 1 r_1 r1 c c c 后,验证方也无法推知 v v v,满足对 v v v 的隐藏性。根据单向哈希的抗碰撞性,承诺方难以找到 r 2 ′ r_2' r2 v ′ v' v,使得 H ( r 1 , r 2 , v ) = H ( r 1 , r 2 ′ , v ′ ) H(r_1 , r_2 , v) = H (r_1 , r_2', v') H(r1,r2,v)=H(r1,r2,v),因此承诺方难以违约,满足对 v v v 的绑定性。

不知道为什么需要两个随机数,也不知道为什么要分开发送😇

量子比特承诺的构造看似简单,但其实现需要借助量子协议完成计算,同时也有一定的理论局限性。

早在 1996 年,Hoi-Kwong Lo 和 Hoi Fung Chau 团队、Dominic Mayers 团队分别独立地证明了不存在满足信息论安全的理论最强绑定性的量子比特承诺方案。这个不存在性被称为 MLC no-go 定理。其主要原因是,如果验证方完全没有任何承诺的信息,那么承诺方可以通过 量子纠缠 随意地改变承诺内容,而验证方既不能阻止也不能发现承诺方的违约行为。

这就是为什么要先发一个 r 1 r_1 r1 给验证方吗?



5 量子模糊承诺

后量子密码学承诺的研究尚处于早期阶段,充满了各类挑战,目前难以直接应用到实际业务系统中。除了量子比特承诺之外,基于模糊算法的 量子模糊承诺 也是一类热门研究方向,目标应用领域为生物特征识别相关的隐私安全系统。具体构造如下:

在这里插入图片描述
其中, v v v 是敏感数据(如密钥), x x x 是模糊特征(如指纹), f f f 是一个模糊数据恢复算法,当输入值 x ′ x' x 接近 x x x 时,输出 v ′ = v v'=v v=v



6 总结

本论中,我们重点介绍了 哈希承诺Pedersen 承诺,在往后的文章中,我们还会进一步介绍其他重要的密码学承诺,例如 z k-SNARKs 零知识证明系统中使用的 多项式承诺、向量承诺 等。

怎么还有啊,想鼠😇

对于需要在数据的密文形式上直接进行运算和交叉验证的业务,只要不涉及互不透露数据明文的多方协同计算,相比现有同态加密算法,以 Pedersen 承诺为代表的密码学承诺往往可以提供更好的性能。这一优势与密码学承诺的同态性密不可分,如何构造和应用同态性,敬请关注下文分解。

下文:密码学原语如何应用?解析密文同态性的妙用



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/563485.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【团体程序设计天梯赛】L2-052 吉利矩阵

思路: 直接回溯枚举每一个位置填的数,二维肯定是不方便的,我们转成一维,下标x从0到n*n-1。二维数组下标从0到n-1,在一维中下标为x的点在二维中对应行是x/n,列是x%n。 每个数最小能填的是0,最大…

总结线程池

目录 导言: 正文: 1.概念 2.线程池的组成和基本原理 3.使用ThreadPoolExecutor创建线程池 4.使用Executors 创建常见的线程池 总结: 导言: 虽然创建销毁线程比创建销毁进程更轻量, 但是在频繁创建销毁线程的时候…

深度学习transformer架构详细详解

一、transformer的贡献 transformer架构的贡献:该架构只使用自注意力机制,没有使用RNN或卷积网络。且可以实现并行计算,加快模型训练速度。 (将所有的循环层全部换成:multi-headed self-attention) 二、t…

JavaScript运算符(赋值、自增自减、比较、逻辑、展开、优先级)、分支语句(if、三元表达式、switch)、循环结构(while、for)、断点调试

目录 1. 运算符1.1 赋值运算符1.2 自增和自减运算符1.3 比较运算符1.4 逻辑运算符1.5 展开运算符1.6 运算符优先级 2. 分支语句2.1 if2.2 三元表达式2.3 switch 3. 循环结构3.1 while循环3.2 for循环 4. 断点调试 1. 运算符 1.1 赋值运算符 -*/% 1.2 自增和自减运算符 前置…

(C++) 树状数组

目录 一、介绍 二、一维树状数组 2.1 区间长度 2.2 前驱和后继 2.3 查询前缀和 2.4 点更新 三、一维数组的实现 3.1 区间长度函数 3.2 前缀和 3.3 插入/更新 3.4 封装成类 一、介绍 树状数组(Binary Indexed Tree,BIT),又称为 …

ActiveMQ 如果数据处理出现异常会怎么样

我们有一个 Spring 的客户端,在处理消息的时候因为程序的原因出现消息处理异常。 对这种情况,ActiveMQ 会把出现异常的消息放在 DLQ 队列中进行持久化。 因此,在 ActiveMQ 消息处理队列中需要持续关注 DLQ 队列, DLQ 的队列都是无…

线段树汇总

线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。 使用线段树可以快速的查找某一个节点在若干条线段中出现的次数,时间复杂度为O(logN)。而未优化的空间复杂度为2N&a…

最新版的GPT-4.5-Turbo有多强

OpenAI再次用实力证明了,GPT依然是AI世界最强的玩家!在最新的AI基准测试中,OpenAI几天前刚刚发布的GPT-4-Turbo-2024-04-09版本,大幅超越了Claude3 Opus,重新夺回了全球第一的AI王座: 值得一提的是&#xf…

【机器学习】重塑汽车设计与制造:实例与代码探索

机器学习重塑汽车设计与制造 一、机器学习在汽车设计中的应用二、机器学习在智能制造与生产中的应用 在数字化浪潮的推动下,机器学习技术正逐步成为汽车行业的创新引擎。从概念设计到智能制造,机器学习正以其独特的优势助力汽车产业的革新与发展。本文将…

实现基于RAG的QA应用程序

实现基于RAG的Q&A应用程序 LLM 支持的最强大的应用程序之一是复杂的 问答 (Q&A) 聊天机器人。这些应用程序可以 回答有关特定来源信息的问题。这些应用程序 使用一种称为检索增强生成 (RAG) 的技术。 什么是检索增强生成…

Golang | Leetcode Golang题解之第43题字符串相乘

题目: 题解: func multiply(num1 string, num2 string) string {if num1 "0" || num2 "0" {return "0"}m, n : len(num1), len(num2)ansArr : make([]int, m n)for i : m - 1; i > 0; i-- {x : int(num1[i]) - 0fo…

设计模式之访问者模式(上)

访问者模式 1)概述 1.概念 访问者模式包含访问者和被访问元素两个主要组成部分。 处方单中的各种药品信息就是被访问的元素,而划价人员和药房工作人员就是访问者,被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行…

上位机图像处理和嵌入式模块部署(树莓派4b处理类muduo网络编程)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 既然是linux编程,那么自然少不了网络编程。在linux平台上面,有很多的网络编程库可以选择,大的有boost、qt&…

免费PNG素材网站推荐:设计效率倍增!

一、即时设计 新一代协同设计工具即时设计,内置丰富社区资源,可以在此获得设计前线的各类PNG图像,以及矢量图标,包括毛玻璃、3D混搭、全息投影、单色、平面化等,都是符合目前市场的主流风格。通过最近更新、作品、资源…

影响钕铁硼磁钢性能的因素及方法

钕铁硼永磁材料自问世以来,就以其优越的磁性能而备受关注,被称为“磁王“,在市场需求的不断地增长下,钕铁硼生产工艺及磁体性能也不断发展和提升。我们一般用剩磁、矫顽力和最大磁能积这几个指标来衡量磁性材料的磁性能。 剩磁 B…

【C++】:类和对象(上)

目录 一,面向过程和面向对象初步认识二,类的引入三,类的定义3.1 **类的说明**3.2 **类的访问限定符**3.3 **类的两种实现方式**3.4 **成员变量的命名规则 --- 加下划线** 四,类的作用域4.1 **类域的说明**4.2 **类域与命名空间域的…

分析经过j2k压缩的dicom文件经验分享

最近碰到一个问题,在网上搜到是用JPEG 2000压缩的DICOM文件 JPEG 2000对应的transfer syntax UID为 1.2.840.10008.1.2.4.91 参考:https://dicom.nema.org/medical/dicom/current/output/chtml/part18/sect_8.7.3.html 该文件是用专业德国老牌开发库DCMTK生成的 (…

虚拟机VMware安装与Ubuntu

1.虚拟机安装 链接:百度网盘 请输入提取码 提取码:2fr6 CG54H-D8D0H-H8DHY-C6X7X-N2KG6 2.Ubuntu下载 Download Ubuntu Desktop | Ubuntu 3.设置 如后续要下一些软件越大越好

Diffusion Model原理剖析

目录 前言1. DDPM演算法初览2. 图像生成模型共同目标3. VAE: Lower bound of l o g P ( x ) logP(x) logP(x)4. Diffusion Model背后的数学原理5. 为什么需要Sample?6. Diffusion Model的应用7. Diffusion Model成功的关键总结参考 前言 接着上篇文章 图像生成模型浅析&#…

15.C++常用的算法_拷贝和替换算法

文章目录 遍历算法1. copy()代码工程运行结果 2. replace()代码工程运行结果 3. replace_if()代码工程运行结果 4. swap()代码工程运行结果 遍历算法 1. copy() 代码工程 copy()函数不要因为使用而使用#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include&l…