目录
正文
1 承诺的交互
2 承诺的属性
3 硬币抛掷问题
3.1 朴素版方案
3.2 承诺版方案
🥑源自:https://en.wikipedia.org/wiki/Commitment_scheme
🥑写在前面:英文的承诺是 commitment scheme,否则很难进行检索。
正文
承诺方案 是一种密码学原语,它允许一个人对他们选择的价值(或选择的陈述)进行承诺,同时将其隐藏在其他所有人面前,并具有在 稍后揭示 所承诺价值的能力。
如上图所示,想象 发送者 将 信息 放入一个带锁的盒子中,并将盒子交给 接收者。接收者无法打开锁,因此无法看到盒子中的信息。同时,由于接收者掌控着盒子,发送者也无法更改其中的信息 —— 发送者只能在稍后的某个时间提供钥匙进行揭示。
密码学中的承诺不同于日常生活中承诺的含义,请自行洗脑😇
承诺方案被设计成这样:一旦当事人对某个价值或陈述进行了承诺,他们就不能更改它。也就是说,承诺方案是具有 约束力 的。承诺方案在许多密码学协议中具有重要应用,包括安全的硬币翻转、零知识证明和安全的计算。
1 承诺的交互
承诺方案中的交互分为两个阶段:
- 承诺阶段,在此期间 发送者 选择一个值并对其进行承诺;
- 揭示阶段,在此期间 发送者 揭示该值,然后 接收者 验证其真实性。
在这个隐喻中,承诺阶段是发送者将信息放入盒子并上锁。揭示阶段是发送者将钥匙交给接收者,接收者使用它来打开盒子并验证其内容。上锁的盒子是承诺,而钥匙是证明。
你可能会觉得,这都是些什么颠公颠婆,直接把信息告诉对方不就得了吗?或许你看到后面的硬币抛掷问题会有所改观😈
2 承诺的属性
假设发送方选择的是 A 值并对其进行承诺:
- 隐藏性:在打开承诺之前,接收方不知道发送方选择的是 A 值。
- 绑定性:在打开承诺之后,发送方难以将已承诺的 A 值解释成 B 值。
在简单的协议中,承诺阶段由发送者向接收者发送的一条消息组成。这条消息被称为承诺。至关重要的是,在那个时候接收者无法得知所选的具体值。这称为隐藏属性。
一个简单的揭示阶段由一条消息组成,即发送者向接收者的开启消息,随后由接收者执行检查。在承诺阶段选择的值必须是发送者能够计算且在揭示阶段得到验证的唯一值。这称为绑定属性。
3 硬币抛掷问题
假设 Alice 和 Bob 希望通过抛掷硬币来解决一些争议。
准确来说不是解决争议,而是 Alice 猜测 Bob 的投掷结果是什么。
3.1 朴素版方案
如果他们身处同一个地方,一个典型的程序可能是:
- Alice 喊出自己对抛掷结果的猜测;
- Bob 抛掷硬币;
- 如果 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 可以在程序中使用承诺,以使双方都能信任结果:
- Alice 告诉 Bob 她对 猜测 的 承诺;
- Bob 抛掷硬币并向 Alice 报告抛掷结果;
- Alice 告诉 Bob 她的 猜测;
- Bob 检验 Alice 的 猜测 和她之前的 承诺 是否相匹配;
- 如果不匹配,说明 Alice 在撒谎,游戏终止,反之继续;
- 如果 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 发来的信息就是之前被承诺的信息。