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

🥑原文:承诺方案(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.rhkb.cn/news/314625.html

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

相关文章

C++笔记:C++中的重载

重载的概念 一.函数重载 代码演示例子&#xff1a; #include<iostream> using namespace std;//函数名相同&#xff0c;在是每个函数的参数不相同 void output(int x) {printf("output int : %d\n", x);return ; }void output(long long x) {printf("outp…

手撕netty源码(一)- NioEventLoopGroup

文章目录 前言一、NIO 与 netty二、NioEventLoopGroup 对象的创建过程2.1 创建流程图2.2 EventExecutorChooser 的创建 前言 processOn文档跳转 本文是手撕netty源码系列的开篇文章&#xff0c;会先介绍一下netty对NIO关键代码的封装位置&#xff0c;主要介绍 NioEventLoopGro…

浅谈叉车车载电脑的市场现状

叉车的起源 叉车源于美国&#xff0c;兴于日本&#xff0c;虽然中国起步较晚&#xff0c;但是近些年来发展迅速。叉车又称叉式装载车&#xff0c;是对于成件托盘类货物进行装卸、堆垛和短距离运输&#xff0c;实现重物搬运作业的轮式工业车辆。 叉车的分类 叉车分为以上六大类…

OpenWrt上的docker容器无法访问外网解决

容器里能ping通OpenWrt的管理地址和wan口地址&#xff0c;但ping外网别的ip或域名就无法访问 简单修改设置就可以&#xff1a; Luci>网络>防火墙>转发&#xff1a;接受 ->保存应用

【Web】DASCTF X GFCTF 2024|四月开启第一局 题解(全)

目录 EasySignin cool_index SuiteCRM web1234 法一、条件竞争(没成功) 法二、session反序列化 EasySignin 先随便注册个账号登录&#xff0c;然后拿bp抓包改密码(username改成admin) 然后admin / 1234567登录 康好康的图片功能可以打SSRF&#xff0c;不能直接读本地文…

Hive安装部署

Apache Hive是一个基于Hadoop分布式文件系统、使用MapReduce算法执行大规模离线数据分析的数据仓库&#xff0c;本文主要描述Hive的安装部署。 如上所示&#xff0c;Hive总体应用架构图&#xff0c;其中&#xff0c;Hive基于HBase或者使用Hadoop分布式文件系统执行MapReduce的分…

Zephyr sensor子系统学习

一、背景 2023年7月份nRF Connect SDK 2.4.0最新版本&#xff0c;使用的Zephyr V3.3版本。从Zephyr 3.5版本在子系统中加入了sensing子系统。 现在最新的nRF Connect SDK 2.6.0 release支持v3.5.99-ncs1&#xff0c;已经支持sensing子系统 nRF52840现在官方支持两个传感器de…

yudao-cloud微服务系统系统模块+后台管理系统成功运行

&#x1f339;作者主页&#xff1a;青花锁 &#x1f339;简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java微服务架构公号作者&#x1f604; &#x1f339;简历模板、学习资料、面试题库、技术互助 &#x1f339;文末获取联系方式 &#x1f4dd; 系列文章目录 第一章 芋…

python基础知识—while和for循环(三)

&#x1f3ac; 秋野酱&#xff1a;《个人主页》 &#x1f525; 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 一&#xff1a;while循环1.1程序的三种执行流程1.2while循环1.3循环变量和死循环 二&#xff1a;for循环2.1for循环2.2range 一&…

OSI七层模型、TCP/IP五层模型理解(个人解读,如何理解网络模型)

OSI七层模型 七层模型&#xff0c;亦称OSI&#xff08;Open System Interconnection&#xff09;。参考模型是国际标准化组织&#xff08;ISO&#xff09;制定的一个用于计算机或通信系统间互联的标准体系&#xff0c;一般称为OSI参考模型或七层模型。它是一个七层的、抽象的模…

UVa12313 A Tiny Raytracer

UVa12313 A Tiny Raytracer 题目链接题意分析AC 代码 题目链接 UVA - 12313 A Tiny Raytracer 题意 给出 《训练指南》题意翻译 本题的任务是实现一个小型光线追踪渲染器。场景由若干三角形网格&#xff08;triangle mesh&#xff09;组成&#xff0c;有且仅有一个点光源&…

ESP32开发

目录 1、简介 1.1 种类 1.2 特点 1.3 管脚功能 1.4 接线方式 1.5 工作模式 2、基础AT指令介绍 2.1 AT指令类型 2.2 基础指令及其描述 2.3 使用AT指令需要注意的事 3、AT指令分类和提示信息 3.1 选择是否保存到Flash的区别 3.2 提示信息 3.3 其他会保存到Flash的A…

界面组件DevExpress Blazor UI v23.2 - 支持.NET 8、全新的项目模版

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验&#xff0c;这个UI自建库提供了一套全面的原生Blazor UI组件&#xff08;包括Pivot Grid、调度程序、图表、数据编辑器和报表等&#xff09;。 DevExpress Blazor控件目前已经升级…

RISC-V CVA6 在 Linux 下相关环境下载与安装

RISC-V CVA6 在 Linux 下相关环境下载与安装 所需环境与源码下载 CVA6 源码下载 首先&#xff0c;我们可以直接从 GitHub 一次性拉取所有源码&#xff1a; git clone --recursive https://github.com/openhwgroup/cva6.git如果这里遇到网络问题&#xff0c;拉取失败&#x…

阿里云企业邮箱API的使用方法?调用限制?

阿里云企业邮箱API性能如何优化&#xff1f;配置邮箱API的优势&#xff1f; 阿里云企业邮箱以其稳定、高效和安全的特点&#xff0c;受到了众多企业的青睐。而阿里云企业邮箱API的开放&#xff0c;更是为企业提供了更加灵活、便捷的管理和操作方式。下面&#xff0c;我AokSend…

Linux的学习之路:22、线程(2)

摘要 本章继续讲一下线程的东西 目录 摘要 一、抢票 二、加锁保护 三、死锁 1、死锁四个必要条件 2、避免死锁 四、同步 1、常见的线程安全的情况 2、常见不可重入的情况 3、常见可重入的情况 4、可重入与线程安全联系 5、可重入与线程安全区别 一、抢票 这里回…

启动 UE4编辑器报 加载 Plugin 失败

启动 UE4编辑器报 加载 Plugin 失败&#xff0c;报如下错误&#xff1a; Plugin ‘SteamVR’ failer to load because module ‘SteamVR’ could not be found. Please ensure the plugin is properly installed, otherwise consider disabling the plugin for this project. …

新时代凌迟:考研

我不喜欢上班&#xff0c;但我很欣赏老板的品味&#xff0c;因为咱们公司竟然还在订阅报纸&#xff0c;而且只有一份&#xff0c;《中国青年报》。 这份报纸我最喜欢看的是“冰点周刊”专栏&#xff0c;因为这个栏目能让读者相信&#xff1a;报纸远远可以超越一天的生命。 昨天…

前端框架编译器之模板编译

编译原理概述 编译原理&#xff1a;是计算机科学的一个分支&#xff0c;研究如何将 高级程序语言 转换为 计算机可执行的目标代码 的技术和理论。 高级程序语言&#xff1a;Python、Java、JavaScript、TypeScript、C、C、Go 等。计算机可执行的目标代码&#xff1a;机器码、汇…

JavaEE初阶——多线程(六)——线程池

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享多线程的第六篇文章,关于线程池 如果有不足的或者错误的请您指出! 目录 3.线程池3.1标准库的线程池3.2 标准库自己提供的几个工厂类3.3自己实现一个线程池完成大体框架接下来完…