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

news2024/10/1 21:24:06

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



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 承诺为代表的密码学承诺往往可以提供更好的性能。这一优势与密码学承诺的同态性密不可分,如何构造和应用同态性,敬请关注下文分解。

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



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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker打包部署自己的应用

docker部署应用 当谈及使用 Docker 进行容器化部署应用时,可以想象它是一个能够将整个应用程序及其所有依赖项打包成一个独立、可移植的容器的工具。这个容器不仅包含了应用代码,还包括了操作系统、运行时环境以及所有依赖的库和组件。这样一来&#xf…

Python 全栈安全(二)

原文:annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者:飞龙 协议:CC BY-NC-SA 4.0 第二部分:认证与授权 本书的第二部分是最具商业价值的部分。我这样说是因为它充满了大多数系统需要具备的实用工作流示例&#xf…

nginxtomcat笔记

nginx是一个轻量级高性能的http和反向代理web服务器,优点:占用内存少,并发能力强 实验主机:192.168.200.141 192.168.200.142 1.虚拟主机 1.1基于域名:一台服务器,一个端口,部署多个网站 在ng…

Transformer - Teacher Forcing

Transformer - Teacher Forcing flyfish 在训练过程中,将目标序列输入给解码器的方法称为(Teacher Forcing)。这个术语又代表什么意思呢? 这里的目标序列就是Ground Truth,也就是我们已知的正确答案 一句话就是我们…

火灾风险把控:数据采集卡搭配传感器实现电路异常全面监控!

引言 在现代社会中,火灾安全和用电安全是人们生活和工作中不可忽视的重要问题。为了有效应对火灾风险和电路异常情况,阿尔泰科技引入了一项创新解决方案:利用PXIe5681多功能数据采集卡对小信号的高精度测量优势,搭配电压传感器监…

使用代理绕过网站的反爬机制

最近在尝试收集一些网络指标的数据, 所以, 我又开始做爬虫了。 :) 我们在做爬虫的过程中经常会遇到这样的情况,最初爬虫正常运行,正常抓取数据,一切看起来都是那么的美好,然而一杯茶的功夫可能就会出现错误…

文本嵌入新方案:合合信息acge模型荣登C-MTEB榜首

目录 0 写在前面1 文本嵌入:LLM落地的根基2 C-MTEB:acge荣夺榜一2.1 max tokens2.2 文本分类2.3 文本聚类 3 acge demo演示与体验总结 0 写在前面 随着信息技术的发展和应用场景的不断扩大,人们需要处理和利用大量的文档信息。而传统的手动处…

深度学习transformer架构详细详解

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

39. UE5 RPG角色释放技能时转向目标方向

在上一篇,我们实现了火球术可以向目标方向发射,并且还可以按住Shift选择方向进行攻击。技能的问题解决,现在人物释放技能时,无法朝向目标方向,接下来我们解决人物的问题。 实现思路: 我们将使用一个官方的…

C++ //练习 12.20 编写程序,逐行读入一个输入文件,将内容存入一个StrBlob中,用一个StrBlobPtr打印出StrBlob中的每个元素。

C Primer(第5版) 练习 12.20 练习 12.20 编写程序,逐行读入一个输入文件,将内容存入一个StrBlob中,用一个StrBlobPtr打印出StrBlob中的每个元素。 环境:Linux Ubuntu(云服务器) 工…

密码学 | Random Oracle 随机预言机

​ 🥑原文:究竟什么才是随机预言机呢? - 玄星的回答 🥑答主指出: 英文维基明明对 随机预言机 给出了两个完全不同的理解,但这两个理解之间的连接词却是 “Stated differently”,即 “换句话说…

LabVIEW多设备控制与数据采集系统

LabVIEW多设备控制与数据采集系统 随着科技的进步,自动化测试与控制系统在工业、科研等领域的应用越来越广泛。开发了一种基于LabVIEW平台开发的多设备控制与数据采集系统,旨在解决多设备手动设置复杂、多路数据显示不直观、数据存储不便等问题。通过RS…

c语言利用控制台实现贪吃蛇

使用控制台实现贪吃蛇需要的技能加点: 控制台设置(包含于stdlib.h): 定义命令行窗口高/宽: system("mode con cols100 lines30"); system() 函数是一个C标准库函数,它允许程序执行操作系统命令…

Java中创建对象内存分析

package day31; ​ public class Pet {String name;int age;public void shout(){System.out.println("叫了一声");} } ​ package day31; ​ public class Application {public static void main(String[] args) {Pet cat new Pet();cat.name"肥波";cat…

Linux——网络管理nmcli

nmcli 不能独立使用,需要对应的服务启动 1. NetworkManager.service 2. 网络配置和服务不相关 3. 通过 nmcl i 建立网络配置和网卡之前的映射关系 网卡 简称:nmcli d DEVICE :物理设备 TYPE: 物理设备类型 ethernet 以太网…

螺纹滑牙的原因有哪些——SunTorque智能扭矩系统

螺纹滑牙的原因,通常是由于在旋紧或旋松过程中,螺纹副之间的摩擦力不足以维持所需的预紧力或工作载荷,导致螺纹副的相对位置发生变化。这种现象可能由多种因素引起,包括材料选择不当、设计不合理、制造工艺缺陷、环境因素以及使用…

AI大模型探索之路-实战篇3:基于私有模型GLM-企业级知识库开发实战

文章目录 前言概述一、本地知识库核心架构回顾(RAG)1. 知识数据向量化2. 知识数据检索返回 二、大模型选择1. 模型选择标准2. ChatGLM3-6B 三、Embedding模型选择四、改造后的技术选型五、资源准备1. 安装git-lfs2. 下载GLM模型3. 下载Embeding模型 六、…

Java、Spring、Dubbo三者SPI机制原理与区别

Java、Spring、Dubbo三者SPI机制原理与区别 什么是SPI SPI全称为Service Provider Interface,是一种动态替换发现的机制,一种解耦非常优秀的思想,SPI可以很灵活的让接口和实现分离,让api提供者只提供接口,第三方来实…

【嵌入式】keil5安装(同时兼容C51和STM32)

最近在开发STM32的时候,安装Keil5,遇到STM32和C51的共存的问题,在网上找了很多方法,又遇到一些bug,最终还是弄好了。因此将处理的过程记录下来,希望对遇到相同问题的朋友一些启发。 1、下载安装包 Keil P…

判断水仙花数(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int n 0;int b 0;int s 0;int g 0;int m 0;//提示用户&#xff1b;printf("请输入…