密码学 | 承诺:Pedersen Commitment

🥑原文:密码学承诺之 Pedersen Commitment 原理及应用

🥑写在前面:本文属搬运博客,自己留存学习。



1 承诺

密码学承诺方案是一个涉及双方的 二阶段 交互协议,双方分别为 承诺方接收方

  • 第一阶段为承诺阶段:承诺方选择一个消息 m m m,以密文的形式发送给接收方。
  • 第二阶段为打开阶段:承诺方公开消息 m m m,接收方验证它和承诺阶段接收到的消息是否一致。

这里看不懂很正常,我也看不懂🙂

承诺方案有两个基本性质:隐藏性绑定性

  • 隐藏性:承诺值不会泄露任何关于消息 m m m 的信息;
  • 绑定性:接收方有能力检验 m m m 就是该承诺值对应的消息。

根据参与方计算能力的不同,承诺方案一般分为两类:完美隐藏、计算绑定 承诺方案。

原文太离谱了,所以我用自己的话改了一下,不知道对不对。



2 Pedersen

Pedersen 承诺的核心公式:

c = g r ∗ h v c = g^r * h ^ v c=grhv

其中, c c c 为生成的承诺值, g , h g,h g,h 为椭圆曲线上的生成元, r r r 为盲因子, v v v 为原始信息。由于 g , h g,h g,h 为椭圆曲线上的生成元,因此 g r , h v g^r, h^v gr,hv 可以视为公钥。同理, r , v r,v r,v 也可以视为私钥。

如果你没有椭圆曲线密码学的基础知识,这一段当然是看不懂的😎



3 Pedersen 的性质

Pedersen 承诺是一个满足 完美隐藏、计算绑定同态 承诺协议:

  • 它的完美隐藏性不依赖于任何困难性假设;
  • 它的计算绑定性依赖于离散对数假设。

Pedersen 承诺的构造分为 3 个阶段:

  • 初始阶段:选择阶为大素数 q q q 的乘法群 G G G、生成元 g g g h h h,公开元组 ( g , h , q ) (g,h,q) (g,h,q)
  • 承诺阶段:承诺方选择随机数 r r r 作为 盲因子,计算出 承诺值 c c c 后发送给接收者;
  • 打开阶段:承诺方发送 ( v , r ) (v,r) (v,r) 给接收者,接收者验证 c c c 是否等于 ( g v h r )   m o d   q (g^vh^r)\ mod\ q (gvhr) mod q

如果相等则接受承诺,否则拒绝承诺。

这里的 v v v 就是前面说的消息 m m m,只不过换了个字母表示。

由于 r r r 为随机数,Pedersen 承诺具有完美隐藏性,以及基于离散对数假设的计算绑定性。

由于盲因子 r r r 是一个随机数,因此针对相同的 v v v 也会产生不同的承诺 c c c,从而提供了信息论安全的隐匿性。这一点类似 ECDSA、Schnorr 签名采用的手法。



4 Pedersen 的同态性

Pedersen 承诺的同态性是指,如果 c 1 ,   c 2 c_1,\ c_2 c1, c2 分别是使用盲因子 r 1 ,   r 2 r_1,\ r_2 r1, r2 v 1 ,   v 2 v_1,\ v_2 v1, v2 的承诺,那么 c 1 ∗ c 2 c_1*c_2 c1c2 是使用盲因子 r 1 + r 2 r_1+r_2 r1+r2 v 1 + v 2 v_1+v_2 v1+v2 的承诺,这是因为:

c = c 1 ∗ c 2 = ( g v 1 h r 1 ) ∗ ( g v 2 h r 2 ) = g v 1 + v 2 h r 1 + r 2 c=c_1*c_2=(g^{v_1}h^{r_1})*(g^{v_2}h^{r_2})=g^{v_1+v_2}h^{r_1+r_2} c=c1c2=(gv1hr1)(gv2hr2)=gv1+v2hr1+r2

假设有 v 1 + v 2 = v 3 v_1+v_2=v_3 v1+v2=v3,证明方想向验证者证明 v 1 ,   v 2 ,   v 3 v_1,\ v_2,\ v_3 v1, v2, v3 的这一关系,但又不想让验证者知道 v 1 ,   v 2 ,   v 3 v_1,\ v_2,\ v_3 v1, v2, v3 的明文值,那么可以使用 Pedersen 承诺的同态性来解决这个问题,即只需要验证其盲因子 r 1 + r 2 r_1+r_2 r1+r2 是否等于 r 3 r_3 r3

c 3 = ? c 1 ∗ c 2 g v 3 h r 3 = ? ( g v 1 h r 1 ) ∗ ( g v 2 h r 2 ) = g v 1 + v 2 h r 1 + r 2 v 3 = ? v 1 + v 2 ⟷ r 3 = ? r 1 + r 2 \begin{alignat}{2} c_3 &\overset{?}{=} c_1*c_2 \\ g^{v_3}h^{r_3} &\overset{?}{=} (g^{v_1}h^{r_1}) * (g^{v_2}h^{r_2}) = g^{v_1+v_2}h^{r_1+r_2} \\ v_3 &\overset{?}{=} v_1+v_2 \longleftrightarrow r_3\overset{?}{=} r_1+r_2 \end{alignat} c3gv3hr3v3=?c1c2=?(gv1hr1)(gv2hr2)=gv1+v2hr1+r2=?v1+v2r3=?r1+r2

如果证明方知道验证方的验证方式是验证 r 3 = ? r 1 + r 2 r_3\overset{?}{=} r_1+r_2 r3=?r1+r2,那么证明方可以故意构造一个 r 3 = r 1 + r 2 r_3 = r_1+r_2 r3=r1+r2,验证方应该如何防止证明方作弊呢?

由于元组 ( g , h , q ) (g,h,q) (g,h,q) 是公开的,验证方可以根据盲因子 r 1 r_1 r1 来构造一个承诺 g v 1 h r 1 g^{v_1}h^{r_1} gv1hr1,验证与接收到的 g v 1 h r 1 g^{v_1}h^{r_1} gv1hr1 是否是相等。

第二阶段不是打开阶段吗?怎么保证 v 1 v_1 v1 不被验证方知道?



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

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

相关文章

Promise模块化编程ES6新特性

文章目录 Promise&模块化编程1.Promise基本介绍2.快速入门1.需求分析2.原生ajax jQuery3.Promise使用模板 3.课后练习1.原生ajax jQuery2.promise 4.模块化编程基本介绍5.CommonJS基本介绍6.ES5模块化编程1.题目2.示意图3.代码实例—普通导入导出function.jsuse.js 4.代码…

JVM垃圾回收与算法

1. 如何确定垃圾 1.1 引用计数法 在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单 的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关 联的引用,即…

推荐系统综述

推荐系统研究综述 - 中国知网 传统推荐方法主要分类: 1)基于内容推荐方法 主要依据用户与项目之间的特征信息,用户之间的联系不会影响推荐结果,所以不存在冷启动和稀疏问题,但是基于内容推荐的结果新颖程度低并且面临特征提取的问题。 基于内容的推荐方法的思想非…

能源成果3D网络三维展厅越发主流化

在这个数字化飞速发展的时代,我们为您带来了全新的展览形式——线上3D虚拟展厅。借助VR虚拟现实制作和web3d开发技术,我们能够将物品、图片、视频和图文信息等完美融合,通过计算机技术和3D建模,为您呈现一个逼真、生动的数字化展览…

动态规划|1049.最后一块石头的重量II

力扣题目链接 class Solution { public:int lastStoneWeightII(vector<int>& stones) {vector<int> dp(15001, 0);int sum 0;for (int i 0; i < stones.size(); i) sum stones[i];int target sum / 2;for (int i 0; i < stones.size(); i) { // 遍…

开源项目one-api的k8s容器化部署(下)-- 部署至k8s

一、接着上文 本文讲述如何把上文制作好的docker镜像部署到K8S&#xff0c;会涉及以下部分&#xff1a; 健康检测应用程序的配置应用程序的端口日志路径 二、健康检测 1、健康状态 从官方的docker-compose.yml可以得知其健康检测方法 curl http://localhost:5175/api/statu…

03-JAVA设计模式-迭代器模式

迭代器模式 什么是迭代器模式 迭代器模式&#xff08;demo1.Iterator Pattern&#xff09;是Java中一种常用的设计模式&#xff0c;它提供了一种顺序访问一个聚合对象中各个元素&#xff0c;而又不需要暴露该对象的内部表示的方法。迭代器模式将遍历逻辑从聚合对象中分离出来…

Latex学习(从入门到入土)2

第一章 &#xff1a;插图 在LaTeX中插入插图可以通过graphicx宏包来实现&#xff0c;这个宏包提供了强大的图像处理功能。以下是如何使用graphicx宏包插入图像的基本步骤&#xff1a; ### 1. 加载宏包 在文档的序言部分&#xff08;\begin{document}之前&#xff09;&#x…

《C语言深度解剖》:(5)C语言操作符一网打尽

&#x1f921;博客主页&#xff1a;醉竺 &#x1f970;本文专栏&#xff1a;《C语言深度解剖》 &#x1f63b;欢迎关注&#xff1a;感谢大家的点赞评论关注&#xff0c;祝您学有所成&#xff01; ✨✨&#x1f49c;&#x1f49b;想要学习更多数据结构与算法点击专栏链接查看&am…

一些docker安装配置以及常见命令

​常用命令 docker 命令 //进去容器内部&#xff0c;找到需要拷贝的文件及目录 docker exec -it 2c2600fb60f8 /bin/bash ​ //将container id为4db8edd86202的容器内elasticsearch.yml文件拷贝到宿主机指定目录下&#xff1a; docker cp 4db8edd86202:/usr/share/elasticsea…

pytest系列——allure之在测试用例添加标题(@allure.title())

前言 通过使用装饰器allure.title可以为测试用例自定义一个更具有阅读性的易读的标题。 allure.title的三种使用方式&#xff1a; 直接使用allure.title为测试用例自定义标题&#xff1b;allure.title支持通过占位符的方式传递参数&#xff0c;可以实现测试用例标题参数化&a…

温度对射频电路性能的影响

对于射频电路,通常会有使用温度范围的要求,即在特定的温度范围内其性能变化不超出指标要求的值。对于工业级产品,一般要求使用温度范围为-40℃~+70℃,而军品要求使用温度范围为-55℃~+85℃。有一些其他特殊使用场景的产品会有不同的要求。 不同的温度对电路性能的影响,…

nginx安装在linux上

nginx主要用于反向代理和负载均衡&#xff0c;现在简单的说说如何在linux操作系统上安装nginx 第一步&#xff1a;安装依赖 yum install -y gcc-c pcre pcre-devel zlib zlib-devel openssl openssl-devel 第二步&#xff1a; 下载nginx&#xff0c;访问官网&#xff0c;ngin…

char和varchar的区别?

一、问题解析 char和varchar都是用于在数据库中存储字符串的数据类型。它们之间的主要区别在于存储空间的使用方式&#xff1a; char是一种定长的数据类型&#xff0c;它的长度固定且在存储时会自动在结尾添加空格来将字符串填满指定的长度。char的长度范围是0-255&#xff0c…

机器学习理论入门---线性回归从理论到实践

线性回归是机器学习里面最简单也是最常用的算法&#xff0c;理解了线性回归的推导之后对于后续的学习有很大帮助&#xff0c;所以我决定从这里开始深入学习相关的机器学习模型。 本篇首先从矩阵求导开始切入&#xff0c;然后介绍一次线性回归的推导&#xff0c;再到代码实现。本…

【八股】Redisson分布式锁

Redisson分布式锁 主要了解了Redisson分布式锁实现的三个功能&#xff1a; 1.可重入 -> 防止死锁 2.可重试&#xff08;i.e. 非阻塞获取锁&#xff09; 3.自动续约 1. 可重入 原理&#xff1a; 利用Redis的Hash结构&#xff0c;记录了使用当前锁的线程id和重用次数&#…

零基础小白,如何入门计算机视觉?

目录 前言 计算机视觉技术学习路线 基础知识 1. 数学基础 2. 编程基础 3. 图像处理基础 基础算法与技术 1. 特征提取与描述符 2. 图像分割与对象检测 3. 三维重建与立体视觉 机器学习与深度学习 1. 机器学习基础 2. 深度学习 高级主题与应用 1. 高级机器学习与深度学习 2. 计算…

Linux之 USB驱动框架-USB总线核心和主控驱动(4)

一、USB设备描述符 一个USB设备描述符中可以有多个配置描述符&#xff0c;即USB设备可以有多种配置&#xff1b;一个配置描述符中可以有多个接口描述符&#xff0c;即USB设备可以支持多种功能&#xff08;接口&#xff09;&#xff1b;一个接口描述符中可以有多个端点描述符。 …

【YOLOv8改进[Neck]】使用BiFPN助力V8更优秀

目录 一 BiFPN(双向特征金字塔网络) 1 BiFPN 2 EfficientDet 二 使用BiFPN助力模型更优秀 1 整体修改 2 配置文件 3 训练 其他 一 BiFPN(双向特征金字塔网络) BiFPN(双向特征金字塔网络&#xff0c; 2020)用于特征融合层。 官方论文地址&#xff1a;https://arxiv.org…

445. 两数相加 II

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数字都不会以零开头。 示例1&#xff1a; 输入&#xff1a;l1 [7,2,4,3], l2 [5,6,4]…