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

🥑原文:承诺方案(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 生的。



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

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

相关文章

Oracle之SQL plus的一些经验心得

每次登入SQL plus后,不知道时哪个用户登入,非常不方便,只能使用show user查看。 以下时可以通过一些设置实现上述的效果,知道时哪个用户登入,和实现输出效果等 1)SQL plus使用细则 SQL plus登录时,我们可以设置一些通用的设置,在每次登入SQL plus的时候生效。 [root@c…

npm常用命令详解(一)

npm(Node Package Manager)是Node.js的包管理器,它允许你安装、共享和管理Node.js代码库。以下是一些常用的npm命令及其详解,以帮助您更好地理解和使用它。 1. npm install 功能:安装Node.js包。 语法:n…

安装Zipkin

官网:https://zipkin.io/pages/quickstart.html Jar包方式 下载 方式一:百度网盘下载 链接:https://pan.baidu.com/s/1PRV1RamJ8IWX32IJb7jw3Q?pwde8vu 提取码:e8vu 方式二:Central Repository: io/zipkin/zipk…

react 项目路由配置(react-router-dom 版本 v6.3、v6.4)

根据 react-router-dom 的版本,有不同的方式 一、react-router-dom v6.3 用到的主要 api: BrowserRouteruseRoutesOutlet 下面是详细步骤: 1、index.js BrowserRouter 用来实现 单页的客户端路由使用 BrowserRouter 包裹 App放在 顶级 位置&#x…

【六十一】【算法分析与设计】高精度乘法和高精度除法

高精度乘以单精度 由于计算机的基本数据类型如 int 或 long 有其大小限制,当我们需要进行超出这些基本类型范围的计算时,就需要使用大数乘法技术。一种简单的大数乘法算法——单精度乘高精度数算法。这种方法特别适用于将一个大数(用字符串表…

[ LeetCode ] 题刷刷(Python)-第58题:最后一个单词的长度

题目描述 给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 示例 1: 输入:s "Hello World" 输出&…

(1)认识人工智能

第一章 认识人工智能 引言 本人目前大三,双非一本的人工智能专业,代码能力不算太差,做过项目,也打了比赛,获了奖,但是走技术路线总会有否定自己的感觉,可能是感觉自己的才能没有在搞技术方面实…

UML绘制

processon官网 https://www.processon.com/template_create 官方学习地址 https://plantuml.com/zh/class-diagram 在Android studio 中自动生成类图 https://blog.csdn.net/zyfzhangyafei/article/details/126636358 plantUML 在线编辑 https://www.plantuml.com/plantuml/um…

小红书电商运营实战课,从0打造全程实操(65节视频课)

课程内容: 1.小红书的电商介绍 .mp4 2.小红书的开店流程,mp4 3.小红书店铺基础设置介绍 ,mp4 4.小红书店铺产品上架流程 .mp4 5.客服的聊天过程和子账号建立 .mp4 6.店铺营销工具使用和后台活动参加 .mp4 7.小红书产品上架以及拍单教程,mp4 8.小红书如何选品…

数据分析_商品维度占比及变化可视化分析(Pandas和Matplotlib)

数据分析_商品维度占比及变化可视化分析(Pandas和Matplotlib) 分析维度包括: 各商品年度销量占比 各商品月度销量变化 构建测试数据 这里你可以了解到: 如何生成时间相关的数据。 如何从列表(可迭代对象)中生成随机数据。 Pandas 的 DataFrame 自…

IDM下载管理工具的详细介绍

第一章:IDM简介与安装 Internet Download Manager(IDM)是一款备受欢迎的下载管理工具,具有强大的下载加速功能和丰富的功能特性。本章将介绍IDM的基本信息,以及如何进行安装和设置。 1.1 IDM简介 IDM是由美国公司Tonec Inc.开发的一款下载管理器,它能够提供强大的下载…

eggjs 日志记录配置 记录

eggjs日志配置 ## //config.default.js // 日志配置config.logger {level: "INFO", // SILENT, DEBUG, INFO, WARN, ERROR, FATALconsoleLevel: "DEBUG", // 控制台日志输出级别dir: "/logs", // 日志文件的存储目录type: "dateFile…

MVC、MVP、MVVM

MVC、MVP和MVVM是三种流行的软件架构模式,它们被设计来组织代码结构,提高代码的可维护性、可测试性和可扩展性。尽管它们在高层次目标上一致,但在实现细节和应用交互方式上各有特点。 MVC(Model-View-Controller) Mo…

【JVM系列】关于静态块、静态属性、构造块、构造方法的执行顺序

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

2.Vue简介

Vue简介 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,V…

【网站项目】“最多跑一次”小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

【一竞技DOTA2】双冠王N0tail将发布新书自传《性格胜过天赋》

1、近日Ti双冠王N0tail,在个人推特上宣布将发布自己的自传《性格胜过天赋》。N0tail职业生涯豪夺两届Ti冠军,700万美元个人生涯奖金亦是电竞史最高的传奇选手。 “经过许多年的努力和收到的大量请求,我将发布我的自传新书《性格胜过天赋》&am…

C++ 核心编程 - 引用

文章目录 2.1 引用的基本使用2.2 注意事项2.3 引用作函数参数2.4 引用作函数返回值2.5 引用的本质2.6 常量引用 2.1 引用的基本使用 作用&#xff1a; 给变量起别名&#xff0c;语法为 数据类型 &别名 原名 int main(){int a 100;int &b a;cout << "a …

特征值eigenvalue与特征向量eigenvector

特征值&#xff0c;特征向量概念 在线性代数中&#xff0c;对于一个给定的线性变换A&#xff0c;他的特征向量v经过这个线性变换的作用之后&#xff0c;得到的新向量仍然与原来的 v v v保持在同一条直线上。但长度或方向也许会改变。即&#xff1a; A v Av Av λ v \lambda…

戒烟生活记录

今天是2024年4月15日&#xff0c;从大前天也就是12号下班后&#xff0c;吃的有一点饱&#xff0c;就感觉身体及其难受&#xff0c;气短呼吸不上&#xff0c;我查了后可能是心脏的问题&#xff0c;并且晚上睡觉有一种呼吸不上&#xff0c;憋气的感觉&#xff0c;然后我就又开始决…