密码学 | 承诺:基本概念

news/2024/9/23 14:33:15/

目录

正文

承诺的交互

承诺的属性

3  硬币抛掷问题

3.1  朴素版方案

3.2  承诺版方案


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

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

正文

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

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

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

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

承诺的交互

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

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

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

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

承诺的属性

假设发送方选择的是 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.ppmy.cn/news/1425183.html

相关文章

学习使用php获取上周一、上周日、本周一、本周日,获取指定日期的上周一、上周日、本周一、本周日

学习使用php获取上周一、上周日、本周一、本周日,获取指定日期的上周一、上周日、本周一、本周日 上周一上周日本周一本周日指定日期的上周一指定日期的上周日指定日期的本周一指定日期的本周日 上周一 if (date(w) 1){ //当前周一时的处理$sMondayDay date(Y-m-…

c语言之结构体指针

一个结构体的初始位置就是结构体指针。 用一个指针变量存储结构体指针就是一个结构体指针变量 #include<stdio.h> #include<string.h> int main() {struct test{char name[30];int age;char sex;int student_number;} lisi{"lisi",32,m,20190305};stru…

Elasticsearch安装、启动异常问题总结

安装es、kibana、ik分词器可参考&#xff1a;http://t.csdnimg.cn/59mEG 1. 内核过低 我们使⽤的是 centos6 &#xff0c;其 linux 内核版本为 2.6 。⽽ Elasticsearch 的插件要求⾄少 3.5 以上版 本。不过没关系&#xff0c;我们禁 ⽤这个插件即可。 修改 elasticsearch.ym…

iOS 动态对UIImageView加载到的图片进行偏移裁剪处理

关键点&#xff1a;图片偏移重绘、图片重绘时机处理 1. 图片偏移重绘问题 原因&#xff1a;UIImageView的现有填充模式已经不能满足应用需求&#xff0c;需自定义偏移量结合填充模式实现效果 方法&#xff1a;按需求样式重绘&#xff0c;设置偏移量比例&#xff0c;偏移阈值&a…

纯css实现左右拖拽改变盒子大小

效果&#xff1a; 代码 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html;charsetutf-8"><title></title><style>body {background-color: black;color: white;}.column {ove…

open-webui与ollama的部署最后完整之命令

docker run -d --networkhost -v open-webui:/app/backend/data -e HF_ENDPOINThttps://hf-mirror.com -e OLLAMA_BASE_URLhttp://127.0.0.1:11434 --name open-webui --restart always ghcr.io/open-webui/open-webui:main -e HF_ENDPOINThttps://hf-mirror.com 一定要加上&a…

MATLAB数据类型和运算符+矩阵创建

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 ✍一、MATLAB数据类型和运算符&#x1f48e;1 MATLAB的数据类型&#x1f339;…

Unity 3D定点数物理引擎实战系列:BEPU物理引擎碰撞计算与碰撞规则的架构与设计

前面我们讲解了如何监听物理引擎的碰撞事件, 在物理引擎内核中如何架构与设计碰撞规则,使得物理Entity与周围的物理环境产生碰撞时&#xff0c;如何灵活的控制物理碰撞&#xff0c;本节給大家详细的讲解BEPUphysicsint 物理引擎内部是如何管理与控制碰撞规则的。本文主要讲解3个…