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

devtools/2024/9/23 14:26:42/

🥑原文:承诺方案(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/devtools/18142.html

相关文章

如何通过淘宝API获取商品详情:一个简单的指南

引言 淘宝,作为中国最大的在线购物平台,拥有海量的商品信息。对于想要开发购物助手、价格监控工具的开发者来说,能够快速获取这些信息至关重要。淘宝提供了API接口,让开发者可以方便地访问商品详情。这篇文章将用通俗易懂的语言&…

Spark面试整理-解释Spark中的广播变量和累加器

在Apache Spark中,广播变量(Broadcast Variables)和累加器(Accumulators)是两种特殊的共享变量,它们用于不同的用途并有助于优化分布式计算的性能和资源利用。 广播变量(Broadcast Variables) 广播变量用于在所有节点之间高效地分发大数据集,主要用于只读操作。当你有…

以太网口硬件知识分享

一、了解网口通信基本原理 实现网络通信实质上是PHY与MAC及RJ45接口实现信号传输。MAC 就是以太网控制器,MAC属于数据链路层,主要负责把数据封装成帧,对帧进行界定实现帧同步。对MAC地址和源MAC地址及逆行相应的处理并对错误帧进行处理。PHY…

Web3革命:区块链如何重塑互联网

引言 互联网的发展已经深刻地改变了我们的生活方式,而现在,Web3和区块链技术正在为我们提供一个全新的数字世界的视角。本文将带你深入了解Web3的核心概念、技术特性以及它如何正在重塑我们的互联网体验。 从Web1.0到Web3:数字革命的演进 W…

IDEA快速入门

目录 1. 概述 2. 安装 3. 激活 4. 关闭自动更新 5. 创建Java项目 5.1 配置JRE 5.2 创建项目 6. 配置设置 6.1 主题 6.2 设置字体默认大小 6.3 鼠标滚轮改变字体大小 6.4 设置自动导入 6.5 项目选择 7. lombok插件 7.1 安装插件 7.2 启用注解 8. 安装包及插件…

excel文件可以直接转换成图片格式吗?excel文件怎样才能快速转换成图片?excel文件快速转换成图片的方法

一,excel文件转图片的必要性 1,excel文件转图片可以提高信息传播的便捷性。在日常工作中,我们可能需要将表格数据分享给同事或客户,但由于Excel文件的复杂性,对方可能需要安装相应的软件才能查看。而如果将Excel文件转…

矿山自动驾驶技术点分析

自动驾驶多用于乘用车领域,目前矿山自动驾驶量产落地前景广阔,由于矿山工作环境差,污染严重,而且通常矿区面积大,工作任务单一,场景固定,是一个适合进行自动驾驶落地的场景。 矿山自动驾驶俗称智…

MT8788智能模块简介_MTK联发科安卓核心板方案厂商

MT8788安卓核心板是一款具备超高性能和低功耗的4G全网通安卓智能模块。该模块采用联发科AIOT芯片平台,供货周期长。 MT8788核心板搭载了12nm制程的四个Cortex-A73处理器核心和四个Cortex-A53处理器核心,最高主频可达2.0GHz。板载内存容量可选为4GB64GB(也…