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

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



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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Pytorch】Yolov5中CPU转GPU过程报错完善留档归纳

Yolov5 从CPU转GPU Python多版本切换 Conda包处理 文章目录 Yolov5 从CPU转GPU Python多版本切换 Conda包处理1.Pytorch套件中存在版本不匹配2.numpy停留在3.8没跟上pytorch2.2.23.ModuleNotFoundError: No module named pandas._libs.interval4.ImportError: cannot imp…

SpringBoot启动流程深度解析

写在前面: 由于该系统是底层系统,以微服务形式对外暴露dubbo服务,所以本流程中SpringBoot不基于jetty或者tomcat等容器启动方式发布服务,而是以执行程序方式启动来发布(参考下图keepRunning方法)。 本文以调试一个实际的SpringBoo…

【做一名健康的CSDNer】

程序员由于工作性质,常常需要长时间面对电脑,这可能对身心健康带来挑战。以下是一些实用的建议,帮助程序员保持身心健康: 规律生活:建立健康的生活习惯,包括规律的作息时间和固定的饮食时间,保证…

书生·浦语大模型实战营Day04OpenXLab 部署

书生浦语大模型实战营Day04OpenXLab 部署 如何在 OpenXLab 部署一个 InternLM2-7B chat 的应用。 OpenXLab浦源平台介绍 OpenXLab 浦源平台以开源为核心,旨在构建开源开放的人工智能生态,促进学术成果的开放共享。OpenXLab面向 AI 研究员和开发者提供…

【python】使用python和selenium实现某平台自动化上传作品的全步骤

第一,我们需要下载python并安装 下载地址:https://www.python.org/downloads/release/python-3123/ 3.x版本的python自带pip工具,因此不需要额外下载。 ModuleNotFoundError: No module named seleniumpip用于下载python适用的各类模块&…

yolov8自带的P2层如何开启

YOLOv8模型 简述YOLOv8不同size模型简述 在最开始的YOLOv8提供的不同size的版本,包括n、s、m、l、x(模型规模依次增大,通过depth, width, max_channels控制大小),这些都是通过P3、P4和P5提取图片特征; 正…

网络编程 -- 简易TCP网络程序

一 字符串回响 1.1 核心功能 字符串回响程序类似于 echo 指令,客户端向服务器发送消息,服务器在收到消息后会将消息发送给客户端,该程序实现起来比较简单,同时能很好的体现 socket 套接字编程的流程。 1.2 程序结构 这个程序我们…

Python编程玩转二维码

文章目录 Python编程玩转二维码第一部分:背景介绍第二部分:qrcode库是什么?第三部分:如何安装这个库?第四部分:库函数使用方法第五部分:场景应用第六部分:常见Bug及解决方案第七部分…

动力学重构/微分方程参数拟合 - 基于模型

这一篇文章,主要是给非线性动力学,对微分方程模型参数拟合感兴趣的朋友写的。笼统的来说,这与混沌系统的预测有关;传统的机器学习的模式识别虽然也会谈论预测结果,但他们一般不会涉及连续的预测。这里我们考虑的是&…

Git ignore、exclude for TortoiseGit 小结

1.Ignore Type:忽略类型,也即忽略规则,如何去忽略文件? 1.1.Ignore item(s) only in containing folder(s):仅忽略在包含在文件夹中项目。 仅忽略该文件夹下选定的patterns。the patterns其实就是文件类型,比如.txt后…

文本美学:text-image打造视觉吸引力

当我最近浏览 GitHub 时,偶然发现了一个项目,它能够将文字、图片和视频转化为文本,我觉得非常有趣。于是我就花了一些时间了解了一下,发现它的使用也非常简单方便。今天我打算和家人们分享这个发现。 项目介绍 话不多说&#xf…

面试(05)————Redis篇

目录 一、项目中哪些地方使用了redis 问题一:发生了缓存穿透该怎么解决? 方案一:缓存空数据 方案二:布隆过滤器 模拟面试 问题二: 发生了缓存击穿该怎么解决? 方案一:互斥锁 方案二&#xff…

【GPTs分享】GPTs分享之Image Recreate | img2img​

简介 该GPT是一个专门用于图像编辑、重建和合并的工具。它通过详细的自动图像描述和生成,帮助用户从源图像中重现或修改图像。此工具设计用于为视障用户提供图像内容的详细描述,并生成全新的图像,以满足特定的视觉需求。 主要功能 \1. 图像…

Clion 2023.1.5 最新详细破解安装教程

CLion 最大的优点是跨平台,在Linux、Mac、Windows 上都可以运行。CLion 还同时支持 GCC、Clang、MSVC 这 3 种编译器,使用 CLion 编写程序,程序员可以根据需要随意切换使用的编译器。 第一步: 下载最新的 Clion 2023.1.5 版本安装包 我们先…

掌握字幕艺术:pysrt 库指南

文章目录 掌握字幕艺术:pysrt 库指南第一部分:背景介绍第二部分:库是什么?第三部分:如何安装这个库?第四部分:库函数使用方法第五部分:场景应用第六部分:常见Bug及解决方…

Hive基础3

一、表的分区 大数据开发数据量较大,在进行数据查询计算时,需要对数据进行拆分,提升的查询速度 1-1 单个分区 单个分区是创建单个目录 -- 创建表指定分区,对原始数据进行分区保存 create table new_tb_user(id int,name string,ag…

Linux嵌入式驱动开发-linux中断

文章目录 linux中断原理中断控制器GIC中断源分类 中断ID、中断线(中断号/中断源)中断ID中断线(中断号/中断源)MX6U中断源 上半部与下半部(顶半部和底半部)下半部实现机制linux软中断注册软中断触发软中断初始化软中断 taskletasklet_init:初始…

【AIGC】文本与音频生成引领行业革新

AIGC技术崛起 一、AIGC技术概述二、文本生成:结构化与创作型并进三、实例与代码解析四、音频生成:语音合成技术大放异彩五、结语 在科技的浪潮中,人工智能与大数据的结合不断推动着时代的进步。其中,AIGC(Artificial I…

安居水站:水站经营秘籍:年入30万不是梦。水站创业指南。

在这个快节奏的社会里,初创企业家们总是在寻找一条明路,以在竞争激烈的市场中立足。为了帮助他们更好地实现这一目标,我根据经验决定制定一份水站经营指导手册。这份手册将详细阐述如何从零起步,如何运营,如何进行市场…

智慧浪潮下的产业园区:解读智慧化转型如何打造高效、绿色、安全的新产业高地

随着信息技术的飞速发展,智慧化转型已经成为产业园区发展的重要趋势。在智慧浪潮的推动下,产业园区通过集成应用物联网、大数据、云计算、人工智能等先进技术手段,实现园区的智慧化、高效化、绿色化和安全化,从而打造成为新产业高…