密码学 | 承诺:绑定性 + 隐藏性

news/2024/9/23 0:49:54/

🥑原文:承诺方案(Commitment)学习笔记
🥑写在前面: 本文属搬运博客,自己留存学习。本文只会讲承诺的两个安全属性,不会再讲解承诺的定义。



正文

承诺方案需要满足两个安全属性:绑定、隐藏。

  • 绑定属性: 是指承诺 c c c 绑定了消息 m m m承诺方不能用假消息 m ′ ≠ m m' \ne m m=m 使得接收方在揭示时输出接受。绑定属性 主要针对不诚实的承诺方。
  • 隐藏属性: 是指承诺 c c c 隐藏了消息 m m m。接收方收到 c c c 后,不能根据 c c c 恢复出 m m m隐藏属性 主要针对不诚实的接收方。

承诺方案的安全定义我翻了很多论文其实都没有详细说的,所以下面给出 WIKI 的定义:

  • 绑定属性: 不存在 m ′ ≠ m m' \ne m m=m,使得 C o m m i t ( m , r ) = C o m m i t ( m ′ , r ′ ) \rm{Commit}(m, r)=\rm{Commit}(m', r') Commit(m,r)=Commit(m,r)
  • 隐藏属性: R \mathcal{R} R 是所有随机数的集合,对于所有 m ′ ≠ m m' \ne m m=m,都有 { C o m m i t ( m , R ) } ≡ { C o m m i t ( m ′ , R ) } \{\rm{Commit}(m, \mathcal{R})\} \equiv \{\rm{Commit}(m', \mathcal{R})\} {Commit(m,R)}{Commit(m,R)}

C o m m i t ( ) Commit() Commit() 代表生成承诺的方法。看不懂没关系,原博接着就会细讲。



1 绑定的定义

对于绑定,个人感觉现在的定义应该更像是:

给定 ( c , d ) ← C o m m i t ( m , r ) (c, d) \leftarrow \rm{Commit}(m, r) (c,d)Commit(m,r),不存在 m ′ ≠ m m' \ne m m=m d ′ d' d,使得 O p e n ( c , m ′ , d ′ ) = A c c e p t \rm{Open}(c, m', d')=\rm{Accept} Open(c,m,d)=Accept

其中, c c c d d d 分别代表承诺值和揭示值。

个人理解:在我之前看到的一些基础承诺方案中,使用的揭示值显然就是 ( m , r ) (m,r) (m,r)。但在某些情况下,承诺方可能不希望揭示消息的明文 m m m。因此,承诺方在揭示阶段给接收方一个 d d d 值,即所谓的揭示值,通过零知识证明来告诉接收方它刚刚传的确实是消息 m m m

而对于上面的定义,感觉上是一些古老的承诺方案,比如 [DN02]。

在这些古老的承诺方案中,接收方在揭示阶段直接检测:

c = ? C o m m i t ( m , r ) c \overset{?}{=} \rm{Commit}(m, r) c=?Commit(m,r)

只要不存在 m ′ ≠ m m' \ne m m=m,使得 C o m m i t ( m , r ) = C o m m i t ( m ′ , r ′ ) \rm{Commit}(m, r)=\rm{Commit}(m', r') Commit(m,r)=Commit(m,r),就不存在 m ′ m' m 使得揭示阶段输出接受。

而对于现在各种花里胡哨的承诺方案,“不存在 m ′ ≠ m m' \ne m m=m,使得 C o m m i t ( m , r ) = C o m m i t ( m ′ , r ′ ) \rm{Commit}(m, r)=\rm{Commit}(m', r') Commit(m,r)=Commit(m,r)” 感觉只是个必要而不充分条件,不过如果揭示阶段设计得好的话估计也可以做到必要充分吧。



2 隐藏的定义

对于隐藏, { C o m m i t ( m , R ) } ≡ { C o m m i t ( m ′ , R ) } \{\rm{Commit}(m, \mathcal{R})\} \equiv \{\rm{Commit}(m', \mathcal{R})\} {Commit(m,R)}{Commit(m,R)}的意思是:

对于所有 m ′ ≠ m m' \ne m m=m,拿所有的随机数 r i ∈ R r_i \in \mathcal{R} riR 分别跟 m m m m ′ m' m 生成承诺,它们结果的集合相同。换句话说,给定一个承诺 c c c,它有可能由任意一个 m i ∈ M m_i \in \mathcal{M} miM 承诺出来的,其中 M \mathcal{M} M 是指明文空间。所以知道了 c c c 也不会泄露 m m m 的任何信息。

个人理解:对于消息 m m m,假设 m m m 和所有随机数 r i r_i ri 生成的承诺 c = C o m m i t ( m , r i ) c=Commit(m,r_i) c=Commit(m,ri) 的集合为 C \mathcal{C} C。那么对于消息 m ′ ≠ m m' \ne m m=m m ′ m' m 和所有随机数 r i r_i ri 生成的承诺 c = C o m m i t ( m ′ , r i ) c=Commit(m',r_i) c=Commit(m,ri) 的集合等于 C \mathcal{C} C。因此,对于集合 C \mathcal{C} C 中的一个 c c c 值,任何一个 m m m 都能生成它。

下面是本人画的示意图,但不知道对不对:
在这里插入图片描述上图表示, m i ∈ M m_i \in \mathcal{M} miM 和所有随机数 r i ∈ R r_i \in \mathcal{R} riR 生成的承诺 c i = C o m m i t ( m i , r i ) c_i=Commit(m_i,r_i) ci=Commit(mi,ri) 构成集合 C \mathcal{C} C。蓝线和红线表示,不同的消息 m m m m ′ m' m,与不同的随机数 r r r r ′ r' r,能够生成相同的承诺 c c c

这里我把随机数和承诺值的个数画成了一样的。因为我觉得,一个消息 m m m 和不同的随机数 r r r 生成的 c c c 应该不会存在重复的情况吧?所以画成了 r r r c c c 一对一的关系。



3 完美绑定和计算绑定

在上述绑定和隐藏的定义中,其实还有安全性的强弱之分。

如果绑定定义中的 “不存在” 是真的 “不存在”,那就是 完美绑定。也就是说,即使攻击者具有无限计算能力,比如可以遍历整个明文空间 M \mathcal{M} M 之类的,也不能找到两个承诺值相同的消息。

如果只是计算上的 “不存在”,那就是 计算绑定。也就是说,可能存在 m ′ ≠ m m' \ne m m=m,使得 C o m m i t ( m , r ) = C o m m i t ( m ′ , r ′ ) \rm{Commit}(m, r)=\rm{Commit}(m', r') Commit(m,r)=Commit(m,r),但是不能在多项式时间内计算出来。

但是具有无限计算能力的攻击者可以找到这样的 m ′ m' m



4 完美隐藏和计算隐藏

如果隐藏定义中的 “ ≡ \equiv ” 是真的 “相等”,那就是 完美隐藏。也就是说,具有无限计算能力的攻击者也不能根据 c c c 恢复 m m m

如果 “ ≡ \equiv ” 只是计算上的 “相等”(即 ≡ c \overset{c}{\equiv} c),那就是 计算隐藏。也就是说,但是不能在多项式时间内恢复 m m m

同样地,具有无限计算能力的攻击者可以找到这样的 m ′ m' m



5 二者不可兼得

完美的安全性显然比计算上的安全性高。但坏消息是,绑定和隐藏是不能同时做到完美的。

这个可以简单从定义上推出:

如果不存在 m ′ ≠ m m' \ne m m=m,使得 C o m m i t ( m , r ) = C o m m i t ( m ′ , r ′ ) \rm{Commit}(m, r)=\rm{Commit}(m', r') Commit(m,r)=Commit(m,r),那么就不会有 { C o m m i t ( m , R ) } ≡ { C o m m i t ( m ′ , R ) } \{\rm{Commit}(m, \mathcal{R})\} \equiv \{\rm{Commit}(m', \mathcal{R})\} {Commit(m,R)}{Commit(m,R)}

个人理解:如果 m ′ m' m m m m 能各自生成不同的承诺值,那么它们的承诺值集合 C \mathcal{C} C 必不相同。

下面是本人画的示意图,但不知道对不对:

在这里插入图片描述

如上图所示,完美绑定 应该是要求 m 1 m_1 m1 m 2 m_2 m2 各自的承诺值集合 C 1 C_1 C1 C 2 C_2 C2 毫无交集。

相似地,如果对于所有 m ′ ≠ m m' \ne m m=m,都有 { C o m m i t ( m , R ) } ≡ { C o m m i t ( m ′ , R ) } \{\rm{Commit}(m, \mathcal{R})\} \equiv \{\rm{Commit}(m', \mathcal{R})\} {Commit(m,R)}{Commit(m,R)},那么就会存在 m ′ ≠ m m' \ne m m=m,使得 C o m m i t ( m , r ) = C o m m i t ( m ′ , r ′ ) \rm{Commit}(m, r)=\rm{Commit}(m', r') Commit(m,r)=Commit(m,r)

个人理解:同样地,如果 m ′ m' m m m m承诺值集合 C \mathcal{C} C 相同,那么它们肯定能生成相同的承诺 c c c,不管它们分别是跟哪个 r i r_i ri 生的。



6 论文写法举例

🥑原文:Toward Achieving Anonymous NFT Trading

There are two properties of the Pederson commitment: perfectly binding and computational hiding.

翻译:Pederson 承诺具有两个属性:完美绑定性和计算隐藏性。

Perfectly binding represents that for Alice, the possibility of outputting C o m m i t ( m , r ) = C o m m i t ( m ′ , r ′ ) Commit(m, r) = Commit(m', r') Commit(m,r)=Commit(m,r) where m ≠ m ′ m \ne m' m=m is negligible even if Alice has unbounded computational power. This means once a commitment is made, the commitment c o m com com is uniquely linked to the commit message m m m.

翻译:完美绑定性表示,即使对于具有无限计算能力的 Alice 来说,她能找到 C o m m i t ( m , r ) = C o m m i t ( m ′ , r ′ ) Commit(m, r) = Commit(m', r') Commit(m,r)=Commit(m,r) m ≠ m ′ m \ne m' m=m 的概率也是微乎其微的。这意味着一旦一个承诺被做出,这个承诺 c o m com com 唯一地与消息 m m m 相关联。

On the other hand, computational hiding represents that for m ≠ m ′ m \ne m' m=m, the probability ensembles C o m m i t ( m , R ) Commit(m, R) Commit(m,R) and C o m m i t ( m ′ , R ) Commit(m', R) Commit(m,R) with R R R being a uniform distribution over 2 k 2^k 2k are computationally indistinguishable. It means for a probabilistic polynomial-time adversary, it cannot extract any useful information about m m m before the opening.

翻译:另一方面,计算隐藏性表示对于任意的 m ≠ m ′ m \ne m' m=m,当 R R R 是在 2 k 2^k 2k 上的均匀分布时,承诺值集合 C o m m i t ( m , R ) Commit(m, R) Commit(m,R) C o m m i t ( m ′ , R ) Commit(m', R) Commit(m,R) 在计算上是不可区分的。这意味着对于一个概率多项式时间的敌手来说,在揭示阶段之前,它无法提取关于 m m m 的任何有用信息。



附:中英文对照

  • 隐藏 - hiding
  • 绑定 - binding
  • 完美隐藏/绑定 - perfectly hiding/binding
  • 计算隐藏/绑定 - computational hiding/binding
  • 无限计算能力 - unbounded computational power
  • 概率多项式时间 - probabilistic polynomial-time
  • 敌手 - adversary



http://www.ppmy.cn/news/1430317.html

相关文章

一款pdf工具

下载链接:点击跳转; 它是一个installer,下好它之后,把网断掉,然后双击它,他会默认安装在C盘,安装时,浏览器可能会有一个弹窗,直接关掉并进入任务管理器杀掉所有smallerp…

vue中,为什么data属性是一个函数,而不是一个对象?

vue中,为什么data属性是一个函数,而不是一个对象? vue2中,data是一个函数,而不是一个对象的原因,与组件的复用和独立性有关。 在vue中定义一个组件时,这个组件可能会被多次复用, …

动态IP与静态IP的区别,你选对了吗?

在互联网世界中,IP地址是每台设备在网络上的唯一标识。这些地址可以是动态的,也可以是静态的。对于非专业人士来说,理解这两者之间的区别可能会有些困难。本文旨在深入探讨动态IP和静态IP的主要差异,帮助读者根据自己的需求做出明…

vue 实现实时搜索文档关键字并高亮显示

最近接到的一个新需求:实时搜索文档关键字并高亮显示,听起来好难的样子,仔细分析起来其实也蛮简单的。 实现思路 通过 input 实现关键字的输入,监听关键字的变化,用正则表达式来匹配关键字,然后给关键字添…

06 JavaScript学习:语句

JavaScript 语句是用来执行特定任务或操作的一组指令。它可以包括变量声明、条件语句、循环语句、函数调用等。JavaScript 语句以分号结尾,每个语句都会被解释器执行。 分号 ; 在JavaScript中,分号(;)用于表示语句的结束。尽管在…

MySQL 的事务概念

事务概念 MySQL事务是一个或者多个的数据库操作,要么全部执行成功,要么全部失败回滚。 事务是通过事务日志来实现的,事务日志包括:redo log和undo log。 事务状态 事务有以下五种状态: 活动的部分提交的失败的中止的…

在Windows 10中禁用Windows错误报告的4种方法,总有一种适合你

序言 在本文中,我们的主题是如何在Windows 10中禁用Windows错误报告。你知道什么是Windows错误报告吗?事实上,Windows错误报告有助于从用户的计算机收集有关硬件和软件问题的信息,并将这些信息报告给Microsoft。 它将检查任何可…

C++中的模板类pair

目录 一、成员函数 一、构造函数 二、赋值运算符重载 operator 三、交换函数 swap 二、非成员函数重载 一、关系运算符重载 二、交换函数 swap 三、获取数据 get 三、See also 一、无需写类型创建pair对象 make_pair pair是一个模板类,可以存储两个值的有…