密码学 | 承诺: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=gr∗hv

其中, 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 c1∗c2 是使用盲因子 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=c1∗c2=(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=?c1∗c2=?(gv1hr1)∗(gv2hr2)=gv1+v2hr1+r2=?v1+v2⟷r3=?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 不被验证方知道?

相关推荐
应长天14 小时前
密码学(斯坦福)
密码学
Turbo正则1 天前
量子计算基础概念以及八大分支
密码学·量子计算
网安INF12 天前
公钥加密与签名算法计算详解(含计算题例子)
网络·算法·网络安全·密码学
电院工程师13 天前
基于机器学习的侧信道分析(MLSCA)Python实现(带测试)
人工智能·python·嵌入式硬件·安全·机器学习·密码学
电院工程师15 天前
SM3算法C语言实现(无第三方库,带测试)
c语言·算法·安全·密码学
小七mod16 天前
【BTC】密码学原理
web3·区块链·密码学·比特币·btc·肖臻·北大区块链
电院工程师21 天前
轻量级密码算法PRESENT的C语言实现(无第三方库)
c语言·算法·安全·密码学
电院工程师22 天前
轻量级密码算法CHAM的python实现
python·嵌入式硬件·算法·安全·密码学
电院工程师22 天前
SM3算法Python实现(无第三方库)
开发语言·python·算法·安全·密码学
网安INF22 天前
SHA-1算法详解:原理、特点与应用
java·算法·密码学