硬币掷出之后,正逆的转换从未停止。
Coin Flip Algorithm
密码学,是一个死板且迷惑的学问,密码学家大多不受人理解,超脱俗世之外。研究生活中大家都理解的事物,质疑现实里大家都公认的条理。
虽然感觉现在没多少人会甩硬币了),这个随机系统快捷,方便,最重要的是,大家都公认了其公正性,没有人会质疑这个硬币
但显然,有人会质疑,这就是密码学家的工作。
博弈与悖论
打比你和朋友一起吃饭,现在决定谁请客,那么你拿出了这枚硬币,然后抛出,大家都会认为这枚硬币是
若双方互不信任,无法制备被两人公认的随机数生成器
显然,作为一个聪明的 虽然这个好像是生物学的统计方法),或者我们用三维建模模拟硬币的抛出下落,然后循环往复个
这个时候你的朋友可能就哑口无言了,那如果他还想反驳,他也许会提出:那如果这个硬币富有魔法,在一切实验性场合时表现正常,但是在正式性场合时则会受到抛出人思维控制,这个结论又该如何证明呢?
证明你个头啊,显然这个问题是无解的,在当今人类的科技树上并不存在魔法这一选项,所以显然,在这种情况下,
但你怎么能服输呢,于是你选择了一种可能会比
现在我手中有一张白纸,我会在这张白纸上写下一个整数(保证一定是整数),现在我将白纸倒扣在桌子上,你没有任何机会看到这张白纸,但你可以监督我不会对这张白纸再做任意修改。
现在你猜测这个数是奇数还是偶数,如果猜错了,那么你就买单。
这个看样子也太正确了,直接规避掉了有关随机的性质,去除了随机数的生成。并且使用信息论的证明,你的朋友不存在比随机猜测更好的策略(我们假设你的朋友没有透视眼或者读心术之类的超能力,也就是他不具备任何信息)。
那这就是我们寻找的完美的
不不不,你的朋友又开始耍花招了,他提出了新的要求:
双方互不信任,且不存在一个双方都信任的第三方
这怎么行呢,这种时候多半就直接甩手走人了。现实中当然不存在这么让人讨厌的情况存在,而密码学就是为了摆脱烦恼而存在的。
密码学建立在「质疑」的基础之上,不吝以最大的恶意去揣度每一个人。这就能达到密码学的最初目的,让最坏且最聪明的人都无机可乘,乖乖就范,没有捣乱的空间,这样才能让每一场游戏都安心。
所以我们的研究,就是一步一步将所有有利的条件全部禁止,然后找到最原初最本质的解决方案。
所以,上面引入介质(第三方)的方法显得太过于简单了,就比如我们直接找到某一方的家长,然后让他来操作整个游戏流程,因为家长是大家都信任的第三方。
尝试与解决
然后你发现这是一个死局。
不能用硬币,因为没有办法满足「方案中不能含有公认随机部分」;不能用纸条,因为不能满足「只有公开的信息才能被公认」;不能使用介质。
事实上,根据博弈论(
所以,从理论数学的角度来看,
从密码学的角度上看,我们只需要解决一个问题,如果必须存在必胜策略,但那要求两个波特面对面交互上万年的话,这个必胜策略是不是可以近似于没有呢?所以,当我们制定的必胜策略超出了博弈双方的计算能力,那这就是公平的。
单向双射
定义一个函数
这里,我们额外添加一个条件:已知
于是,我们设计出了基于单向双射的
约定一种单向双射函数 ,此时 的计算方式双方已知且信任; 在 中选择一个数 ( 并不知道 的具体数值),并计算 ,公开展示 (此时 仅知道 ) 将猜测 的值(判断奇偶性, 的公平概率)。 将 公开并得到游戏结果。(此时 可以通过 验证数值是否被偷换)
这里我们尽可能将
而此时
所以,上述过程是在计算数学的领域下得到的结果,如果有人想要在理论数学中计算那纯属扯皮,这也是理论可行(一份完全无损的方案)与计算可行(一份在平常情况下能够实施的方案)的区别。
那么让计算可行无限接近于理论可行的方法,就是把这个
这里给出两个例子:
基于离散对数
选择一个质数 以及其原根 ,公开展示; 在 中任意指定数 ,公开展示 ; 在 中选择数 ,公开展示。 将判断 的大小关系,然后 公开展示 ,并得到游戏结果。
基于质因数分解
选择质数 满足 ,并公开展示 ; 选择任意整数 ,公开展示 或者 。 将猜测 公示的是 还是 ; 公开 ,并得到游戏结果。
经过数学界证明,如果
加密通信 Encrypted Communication
加密通信属于通信问题的一种,一般而言,用于互相信任的双方在保证不会对被怀疑的第三方获取任何正确信息的通信方式。是间谍工作最简单的一环。
举一个例子,
这个情况在现实中基本得到完全解决,在谍报工作中,传递信息的双方会在事先约定一套完整的加密与解密方案,所以这样使得所有公开的信息都是已加密信息,而接受信息的一方可以轻松通过解密方案实现正确信息的获取。而任何不知道解密方案的第三方都无法实现解密,也就无法获取正确信息。
于是我们要提高难度,设想下面的场景:此时
这就是加密通信的假设。
Diffie-Hellman Algorithm
从信息论的角度而言,此时
从信息论角度上,这个角度无解,因为
然后你发现基本上密码学都基于一些数学界中无解或难解的问题。于是
- 由
或 公开一个质数 和其原根 。(此时 对于 是已知的) 想一个数 ,不公开; 想一个数 ,不公开。 公开 , 公开 (这里我们假设 不是 ,无法推算 ) 推算 , 推算 ,二人得到共识 。 通过 对通信进行加密与解密,此时 获得的是没有 的错误信息。
感觉很熟悉?因为有一道 long long
或者 __int128_t
能够做到多么安全的加密系统,别人的破解说不定就是一杯茶的时间。
加密系统的建立
设
那么,在上述情况下,我们设
RSA Algorithm
全称
明文攻击
对于交换信息的双方
此上为明文攻击。是密码学中一种牵一发而动全身的手段,一旦出现则损失巨大。
而
防御明文攻击
依然基于质因数分解和离散对数的难解性,我们提出了以下方案:
- 首先指定两个不同的质数
,计算 ,公开 ; - 计算
。 - 选择一个数
,并满足 ,公开 ; - 计算
,即 模 的逆元 。
此时获得公钥
你说可以通过
那么此时
计算 ,公开展示 。 接受 ,并通过欧拉定理计算出 。
当然,想要通过
需要注意的是,这里的
Secure Multi-party Computation
2PC:Millionaires’ Problem
设