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

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



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.mzph.cn/web/67.shtml

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

相关文章

国家信息安全漏洞库(CNNVD)技术支撑单位等级证书

国家信息安全漏洞库(CNNVD)技术支撑单位等级证书是CNNVD对参与信息安全漏洞研究、事件解读、漏洞信息共享等工作的单位进行认证和评级的机制。该证书有助于提升单位在信息安全领域的影响力和公信力,同时也是对单位技术实力和贡献的一种认可。…

AUTOSAR ARXML处理 - C#的解析代码(四)

4.3 配置参数关键类 4.3.1 配置数据&#xff1a;模块 MODULE &#xff08;ECUCMODULECONFIGURATIONVALUES&#xff0c;<ECUC-MODULE-CONFIGURATION-VALUES>&#xff09; 与ECUCMODULEDEF&#xff0c;<ECUC-MODULE-DEF> 关联 /// <remarks/>[System.CodeDom…

标题:探索算法世界的奇妙与力量

标题&#xff1a;探索算法世界的奇妙与力量 在当今信息时代&#xff0c;算法已经成为了我们生活中不可或缺的一部分。从搜索引擎、社交媒体&#xff0c;到无人驾驶、机器人&#xff0c;算法都在其中发挥着重要的作用。本文将为您详细介绍算法的概念、类型、应用场景以及算法的…

美国家安全局等发布安全部署人工智能系统指南

该指南旨在为部署和运行由其他实体设计和开发的人工智能系统的组织提供最佳实践。 2024年4月15日&#xff0c;美国国家安全局发布了名为《安全部署人工智能系统&#xff1a;部署安全、弹性人工智能系统的最佳实践》&#xff0c;该指南旨在为部署和运行由其他实体设计和开发的人…

【Jupyter Notebook】快捷键

在命令模式下&#xff0c;单元格边框是灰色&#xff08;缺省&#xff09;的。这些快捷键主要用于操作单元格。 Enter&#xff1a;进入编辑模式Shift Enter&#xff1a;运行当前单元格并选中下一个单元格Ctrl Enter&#xff1a;运行当前单元格Alt Enter&#xff1a;运行当前单…

类声明是public类型的变量如何赋值

在面向对象编程(如Java、C#、PHP等语言)中,类声明为public类型的变量是类的成员变量,也称为属性或字段。这些变量可以在类内部、构造函数中、或者从类外部通过实例化对象来赋值。以下是一些基本的赋值方式: 在类内部赋值: // Java 示例 public class MyClass {public S…

途游游戏,科锐国际(计算机类),得物,蓝禾,奇安信,顺丰,康冠科技,金证科技24春招内推

途游游戏&#xff0c;科锐国际&#xff08;计算机类&#xff09;&#xff0c;得物&#xff0c;蓝禾&#xff0c;奇安信&#xff0c;顺丰&#xff0c;康冠科技&#xff0c;金证科技24春招内推 ①得物 【岗位】技术&#xff0c;设计&#xff0c;供应链&#xff0c;风控&#xff0…

Mac多媒体播放器 Movist Pro v2.11.4中文激活版下载

Movist Pro for Mac是一款专业的媒体播放器&#xff0c;特别为Mac用户设计。它不仅界面简洁美观&#xff0c;而且功能强大&#xff0c;能满足用户各种播放需求。 Movist Pro v2.11.4中文激活版下载 首先&#xff0c;Movist Pro for Mac支持多种媒体文件的播放&#xff0c;包括视…

关于Qt主窗口的菜单部件

前言 在介绍主窗口的两大部件之前&#xff0c;我们要先知道关于主窗口的一些知识。 主窗口 一个主窗口可以没有菜单条、工具条、状态条&#xff0c;但必须设置中心部件。在 Q 生成的 C头文件 ui_mainwindow.h 代码中,我们可以看到以下代码: centralWidget new Qwidget(MainWi…

CSS基础常用属性之颜色(如果想知道CSS的颜色知识点,那么只看这一篇就足够了!)

前言&#xff1a;在我们学习CSS的时候&#xff0c;主要学习选择器和常用的属性&#xff0c;而这篇文章讲解的就是最基础的属性——颜色。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 目录 1.颜色属性 【1】使用颜色关键词表…

深入理解Vue 3中的自定义Hooks

开始 Vue 3引入了Composition API&#xff0c;这使得我们可以更自由、更灵活地组织组件的逻辑代码。其中&#xff0c;自定义Hooks是Composition API的一个重要特性&#xff0c;它允许我们将可复用的逻辑抽象成独立的函数&#xff0c;并在不同的组件中进行共享和复用。本文将深…

fatal error C1001: An internal error has occurred in the compiler

VS2008驱动项目A&#xff0c;集成一个Wzarid生成的驱动LIB项目B&#xff0c;在编译64位驱动时,出现以下错误&#xff1a; 1>------ Build started: Project: xxxx, Configuration: Release x64 ------ 1>Linking... 1>fatal error C1001: An internal error has occu…

Android 应用分配的内存大小是多少

Android应用给定的内存大小可以因设备而异&#xff0c;主要受设备的硬件配置和操作系统的限制。不同的设备&#xff0c;尤其是有着不同RAM大小的设备&#xff0c;可能会为应用分配不同的最大内存数量。此外&#xff0c;同一个设备上&#xff0c;不同版本的Android操作系统也可能…

MySQL常见函数的讲解

函数:将某些功能封装到一起&#xff0c;对外提供到一个接口(函数名)&#xff0c;通过函数调用的方式可以重复的执行函数里的功能&#xff0c;从而提高我们的代码的复用性。 MySql里自带了很多已经封装好了的函数,可以帮我们实现很多功能 MySql里调用函数和java一样用函数名()…

怎么在 Spring 服务响应时控制响应时间?

在Spring应用程序中控制服务响应时间是确保系统性能和用户体验的关键方面之一。在处理请求时&#xff0c;响应时间是指从客户端发送请求到服务端返回响应所花费的时间。 在某些情况下&#xff0c;需要对响应时间进行控制&#xff0c;以确保系统能够及时响应用户请求&#xff0…

springboot中mongodb连接池配置-源码分析

yml下spring.data.mongodb 以前mysql等在spring.xxx下配置&#xff0c;现在springboot新版本&#xff08;小编3.2.3&#xff09;在spring.data.xxx下了&#xff0c;如下所示&#xff0c;mongodb的配置在spring.data.mongodb下&#xff1a; 连接池相关参数配置-源码分析 拼接在…

改进下记录学习的小网站

Strong改进 结束&#xff1a;2024-4-14 打算投入&#xff1a;10h 实际消耗&#xff1a;12h 3m 学习总是不在状态。 我的时间花得很零散&#xff0c;也有点茫然。所以想尝试一下集中式地、一块一块地花&#xff0c;比如投入30个小时&#xff0c;去干一件事&#xff0c;这样就可…

C#版本与.NET版本对应关系以及各版本的特性

C#版本与.NET版本对应关系以及各版本的特性 C#版本.NET版本发布日期特性C# 1.0.NET Framework 1.02002-02-13委托、事件C# 1.1.NET Framework 1.12003-04-24APM&#xff08;异步编程模型&#xff09;C# 2.0.NET Framework 2.02005-11-07泛型、匿名方法、迭代器、可空类型C# 3.…

住宅代理和数据中心代理有什么区别

一、什么是住宅代理 住宅代理IP来自于真实家庭网络&#xff0c;每个住宅代理地址都有一个物理位置&#xff0c;并由互联网服务提供商&#xff08;ISP&#xff09;提供。这种代理服务为用户分配真实的住宅IP&#xff0c;并向服务器隐藏用户的真实IP&#xff0c;以实现更多的在线…

现在期权开户佣金最低的证券公司是哪家?1.7元/张是真的吗?

期权开户的要求主要包括以下几个方面&#xff1a; 1. **资金要求**&#xff1a;在申请开户时&#xff0c;保证金账户可用资金余额需要不低于人民币50万元。这是为了确保投资者有足够的资金来应对期权交易的风险。 2. **交易经验**&#xff1a;投资者需要具备股指期货交易经验&…