密码学 | 承诺:基本概念

目录

正文

1  承诺的交互

2  承诺的属性

3  硬币抛掷问题

3.1  朴素版方案

3.2  承诺版方案


🥑源自:https://en.wikipedia.org/wiki/Commitment_scheme

🥑写在前面:英文的承诺是 commitment scheme,否则很难进行检索。

正文

承诺方案 是一种密码学原语,它允许一个人对他们选择的价值(或选择的陈述)进行承诺,同时将其隐藏在其他所有人面前,并具有在 稍后揭示 所承诺价值的能力。

如上图所示,想象 发送者信息 放入一个带锁的盒子中,并将盒子交给 接收者。接收者无法打开锁,因此无法看到盒子中的信息。同时,由于接收者掌控着盒子,发送者也无法更改其中的信息 —— 发送者只能在稍后的某个时间提供钥匙进行揭示。

密码学中的承诺不同于日常生活中承诺的含义,请自行洗脑😇

承诺方案被设计成这样:一旦当事人对某个价值或陈述进行了承诺,他们就不能更改它。也就是说,承诺方案是具有 约束力 的。承诺方案在许多密码学协议中具有重要应用,包括安全的硬币翻转、零知识证明和安全的计算。 

1  承诺的交互

承诺方案中的交互分为两个阶段:

  • 承诺阶段,在此期间 发送者 选择一个值并对其进行承诺;
  • 揭示阶段,在此期间 发送者 揭示该值,然后 接收者 验证其真实性。

在这个隐喻中,承诺阶段是发送者将信息放入盒子并上锁。揭示阶段是发送者将钥匙交给接收者,接收者使用它来打开盒子并验证其内容。上锁的盒子是承诺,而钥匙是证明。 

你可能会觉得,这都是些什么颠公颠婆,直接把信息告诉对方不就得了吗?或许你看到后面的硬币抛掷问题会有所改观😈

2  承诺的属性

假设发送方选择的是 A 值并对其进行承诺:

  • 隐藏性:在打开承诺之前,接收方不知道发送方选择的是 A 值。
  • 绑定性:在打开承诺之后,发送方难以将已承诺的 A 值解释成 B 值。

在简单的协议中,承诺阶段由发送者向接收者发送的一条消息组成。这条消息被称为承诺。至关重要的是,在那个时候接收者无法得知所选的具体值。这称为隐藏属性。

一个简单的揭示阶段由一条消息组成,即发送者向接收者的开启消息,随后由接收者执行检查。在承诺阶段选择的值必须是发送者能够计算且在揭示阶段得到验证的唯一值。这称为绑定属性。 

3  硬币抛掷问题

假设 AliceBob 希望通过抛掷硬币来解决一些争议。

准确来说不是解决争议,而是 Alice 猜测 Bob 的投掷结果是什么。

3.1  朴素版方案

如果他们身处同一个地方,一个典型的程序可能是:

  1. Alice 喊出自己对抛掷结果的猜测;
  2. Bob 抛掷硬币;
  3. 如果 Alice 的猜测正确,那么她获胜,否则 Bob 获胜。

在 Alice 喊出 “正面” 或者 “背面” 的同时 Bob 抛掷硬币,如果硬币朝上的一面与 Alice 喊的一样,那么 Alice 获胜,否则 Bob 获胜。由于 Alice 和 Bob 身处同一个地方,因此 Alice 一眼就能看到 Bob 的抛掷结果,Bob 也听见了 Alice 的喊声,故二者都没有作弊的空间。

如果 Alice 和 Bob 不在同一个地方,问题就出现了。

如果 Alice 事先把自己的猜测通知给 Bob,那么 Bob 可以规定抛掷结果为他所希望的一切。同样地,如果 Alice 没有事先把自己的猜测通知给 Bob,那么在 Bob 抛掷硬币并宣布结果之后,Alice 可以声称她刚刚猜测的就是当前的抛掷结果。

情况一:Alice 通知 Bob 自己猜测的是 “正面”,那么即使 Bob 抛的是 “正面”,他也可以声称自己抛的是 “背面”,反正 Alice 也看不到。情况二:Alice 先不通知 Bob 自己猜测的是什么,而是先让 Bob 公布抛掷结果,那么即使 Alice 刚刚的猜测和抛掷结果不一致,她也可以声称自己猜测的就是当前的抛掷结果。

3.2  承诺版方案

Alice 和 Bob 仍然不在同一个地方

Alice 和 Bob 可以在程序中使用承诺,以使双方都能信任结果:

  1. Alice 告诉 Bob 她对 猜测承诺
  2. Bob 抛掷硬币并向 Alice 报告抛掷结果;
  3. Alice 告诉 Bob 她的 猜测
  4. Bob 检验 Alice 的 猜测 和她之前的 承诺 是否相匹配;
  5. 如果不匹配,说明 Alice 在撒谎,游戏终止,反之继续;
  6. 如果 Alice 的 猜测 与 Bob 报告的抛掷结果相匹配,那么 Alice 获胜。

每当你觉得步骤繁琐甚至冗余的时候,想想前面两个大骗子是怎么互相骗的就释怀了😇

由于在第 2 步的时候,Alice 已经知道抛掷结果了,因此她完全可以在第 3 步的时候谎称自己的猜测就是当前的抛掷结果。那么 Bob 该如何识破 Alice 的谎言呢?此时承诺就派上用场了。

补充:在第 2 步中,由于 Bob 手里只有 Alice 的 承诺 而非 Alice 的 猜测,因此 Bob 没有办法欺骗 Alice,只能老老实实地告诉 Alice 真实的抛掷结果。如果 Bob 这都想撒谎,那真是无语呢😇

简而言之,第 3 步 Alice 传给 Bob 的猜测可能是真的,也可能是假的。但由于承诺方案的存在,即使 Alice 撒谎,Bob 也能够轻松识破 Alice 的谎言。

在第 4 步中,Bob 是如何进行检验的呢?

如下图所示,事实上 Alice 在第 3 步除了要告诉 Bob 自己的猜测,还要告诉 Bob 自己生成承诺的方法。Bob 会根据这个方法和 Alice 传来的猜测生成一条新承诺。如果这个 新承诺老承诺 相同,那么说明 Alice 没有撒谎,反之则发现内鬼终止游戏。

这里就要求:只要信息没有改变,生成承诺的方法每次都应该为该信息生成一样的承诺。

说明:这里使用绿色是为了指明 Alice 可以传一条假的猜测。

为什么上述过程和前文说的打开上锁的盒子不太一样?

答:在实际操作中,上锁的盒子一般是打不开的。因此,Alice 只能告诉 Bob 自己的信息和上锁的方式是什么。如果 Bob 根据信息和上锁方式得到了一个一模一样的上锁的盒子,那么就能证明 Alice 发来的信息就是之前被承诺的信息。

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

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

相关文章

项目实践---贪吃蛇游戏(游戏的概述)

这里要准备三个文件:1.头文件(snake.h) 2.测试文件(test.c) 3.主文件(snake.c) 贪吃蛇游戏是一个经典的C语言代码实现的项目,大约500行代码。对于大家来说,贪吃蛇都玩过…

如何用个人电脑搭建一台本地服务器,并部署项目到服务器详细教程

服务器是一种高性能计算机,作为网络的节点,它存储、处理网络上80%的数据、信息,因此也被称为网络的灵魂。与普通计算机相比,服务器具有高速CPU运算能力、长时间可靠运行、强大I/O外部数据吞吐能力以及更好的扩展性。 服务器的主要…

【QT进阶】Qt Web混合编程之html、 js的简单交互

往期回顾 【QT进阶】Qt Web混合编程之VS2019 CEF的编译与使用(图文并茂超详细介绍)-CSDN博客【QT进阶】Qt Web混合编程之QWebEngineView基本用法-CSDN博客【QT进阶】Qt Web混合编程之CMake VS2019编译并使用QCefView(图文并茂超详细版本&…

NSSCTF Round#22 Reverse个人专项赛 WP

1. ezcrypt(史) pyinstxtractor.py解包exe,然后pycdc反编译NSSCTF.pyc 得到的源码并不完整,但是重要的部分已经有了,就是一个blowfish加密 但是密钥是crypto.SomeEncode,这并不是字面意义的字符串&#x…

基于弹簧鞘复合纱和迁移学习算法的可穿戴人体重构和智能试衣系统

研究背景 在信息时代和元宇宙的背景下,虚拟服装设计对满足服装行业的个性化需求至关重要。与传统方法不同,虚拟试衣节省时间、方便客户,并提供多样化的款式。准确得测量人体围度并重构出人体的模型是虚拟试衣的关键。为了实现动态人体重构&a…

路径规划 | RRT结合APF算法快速探索随机树结合人工势场法的路径规划算法(Matlab)

目录 效果一览基本介绍程序设计参考文献 效果一览 基本介绍 RRT结合APF算法的matlab代码。地图为可以替换的栅格地图。代码是在复现华中科技大学发表的英文论文的基础上的进一步改进。RRT算法。人工势场算法。 1.原论文方法简介:针对快速探索随机树(RRT&…

用 Pytorch 训练一个 Transformer模型

昨天说了一下Transformer架构,今天我们来看看怎么 Pytorch 训练一个Transormer模型,真实训练一个模型是个庞大工程,准备数据、准备硬件等等,我只是做一个简单的实现。因为只是做实验,本地用 CPU 也可以运行。 本文包含…

C++ STL 容器 vector

目录 1. vector 对象2. vector 大小 size 和 容量 capacity3. vector 成员函数3.1 迭代器3.2 容量3.3 元素访问3.4 插入3.5 删除3.6 动态扩充与收缩 4. vector 迭代器失效问题总结其他补充 本文测试环境为 编译器 gcc 13.1 vector 是 STL 中的一个顺序容器,它给我们…

如何将静态网页资源“打包“成.exe或者.apk

Hello , 我是小恒不会java。最近有音乐播放器win桌面应用程序的需求,那就说说上手electron 又想到很多人对apk文件不太了解,apk文件就是安卓桌面应用程序,比如你手机现在打开的微信 当然,exe文件基本都清楚,windows可执…

正则表达式(Regular Expression)

正则表达式很重要,是一个合格攻城狮的必备利器,必须要学会!!! (参考视频)10分钟快速掌握正则表达式(奇乐编程学院)https://www.bilibili.com/video/BV1da4y1p7iZ在线测试…

React Hooks(常用)笔记

一、useState(保存组件状态) 1、基本使用 import { useState } from react;function Example() {const [initialState, setInitialState] useState(default); } useState(保存组件状态) :React hooks是function组件(无状态组件) &#xf…

再拓信创版图-Smartbi 与东方国信数据库完成兼容适配认证

近日,思迈特商业智能与数据分析软件 [简称:Smartbi Insight] V11与北京东方国信科技股份有限公司 (以下简称东方国信)CirroData-OLAP分布式数据库V2.14.1完成兼容性测试。经双方严格测试,两款产品能够达到通用兼容性要…

浪潮信息成功打造大规模、高性能、高可靠的单存储集群方案!

为帮助企业应对商业智能应用中面临的关于海量数据存储及实时分析的难题,浪潮信息日前通过技术研发,创新推出全球首个SAP HANA集群方案,该方案实现了最大可支持HANA集群服务器节点数量的翻倍,单存储即可支持16节点的,大…

图片高效批量管理,一键批量旋转150度,高效整理您的图片库

在数字化时代,我们的生活中充满了各种图片。从手机拍照到网络下载,从社交媒体到工作文档,图片无处不在。然而,随着图片数量的不断增加,如何高效管理这些图片,让它们有序、易于查找,成为了许多人…

Vue3从入门到实战:深度了解相关API

shallowRef 作用:创建一个响应式数据,但只对顶层属性进行响应式处理。 用法: let myVar shallowRef(initialValue); 特点:只跟踪引用值的变化,不关心值内部的属性变化。 shallowReactive 作用:创建一个…

【MySQL】表的基本约束

文章目录 1、约束类型1.1NOT NULL约束1.2UNIQUE:唯一约束1.3DEFAULT:默认值约束1.4PRIMARY KEY:主键约束1.5FOREIGN KEY:外键约束 2、表的设计2.1一对一2.2一对多2.3多对多 1、约束类型 关键字解释NOT NULL指示某列不能存储NULL值…

点赞列表查询列表

点赞列表查询列表 BlogController GetMapping("/likes/{id}") public Result queryBlogLikes(PathVariable("id") Long id) {return blogService.queryBlogLikes(id); }BlogService Override public Result queryBlogLikes(Long id) {String key BLOG_…

【C++航海王:追寻罗杰的编程之路】C++11(上)

目录 1 -> C11简介 2 -> 统一的列表初始化 2.1 -> {}初始化 2.2 -> std::initializer_list 3 -> 声明 3.1 -> auto 3.2 -> decltype 3.3 -> nullptr 1 -> C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1),使得C…

Debian

文章目录 前言一、使用root用户操作二、配置用户使用sudo命令三、添加桌面图标显示1.打开终端2.执行安装命令3.执行成功后重启4. 打开扩展,配置图标 四、图形化界面关闭和打开五、设置静态IP1.查询自己系统网络接口2.修改网络配置文件 总结 前言 Debian 系统在安装…

基于Springboot+Vue的Java项目-在线文档管理系统开发实战(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…
最新文章