首先,我们必须假设夏娃只是被动的。通过这种方式,我的意思是她如实地将卡片发送给了Bob,而带回给Alice的任何事情的确是Bob的回应。如果Eve可以在一个或两个方向上更改数据(并且她的动作仍然未被检测到),那么一切都会进行。
(为了遵守长期的传统,参与对话的两个诚实方称为爱丽丝和鲍勃。在您的文字中,您说的是“您”。我的真名不是“爱丽丝”,但我会像您写的那样回应该爱丽丝想验证Bob的电话号码。)
简单(但较弱)的答案是使用哈希函数。爱丽丝在卡片上写道:“还给我您电话号码的SHA-256哈希”。SHA-256是一种加密哈希函数,就哈希函数而言,它被认为是安全的。手工计算将是乏味的,但仍然可以进行(这大约是2500个32位操作,其中每个操作都是加法运算,字移位或旋转或位的按位组合; Bob应该能够在一天或一天之内完成该操作)所以)。
现在那有什么弱点?SHA-256是一种加密哈希函数,可抵抗“原像”:这意味着,在哈希输出的情况下,很难恢复相应的输入(这是Eve面临的问题)。但是,“非常努力”表示“最简单的方法是蛮力:尝试可能的输入,直到找到匹配项”。麻烦的是,这里的暴力很容易:可能的电话号码很少(在北美,这是10位数字,即只有100亿个数字)。鲍勃想手工做事,但我们不能认为夏娃是如此有限。一台基本的PC 每秒可以尝试数百万个SHA-256哈希,因此Eve将在不到一个小时的时间内完成(如果使用GPU,则不到5分钟)。
这是一个普遍的问题:如果Bob是确定性的(即,对于来自Alice的给定消息,他将始终返回相同的响应),Eve可以模拟他。也就是说,夏娃除了知道电话号码外,还了解鲍勃的一切,因此她实际上经营着100亿个鲍勃,他们的假定电话号码不同。她等待虚拟的Bob之一返回真正的Bob实际返回的一切。该缺陷影响许多类型的“智能”解决方案,其中包括随机随机数和对称加密以及诸如此类的东西。这是一个强大的缺陷,其根源在于巨大的差异在计算夏娃和Bob(现在,如果Bob之间的权力也有大如夏娃的一台电脑,那么他可以使用慢通过多次迭代使用哈希函数;差不多就是密码哈希,用电话号码代替密码;参见bcrypt以及此答案)。
因此,非弱解必须在Bob方面涉及一些随机性:Bob必须反复掷硬币或掷骰子,并将值注入他的计算中。此外,夏娃必须不能弄清鲍勃的所作所为,但爱丽丝必须能够弄清楚,因此某些信息是从鲍勃秘密传递给爱丽丝的。这称为非对称加密,或者至少称为非对称密钥协议。那么,该类中最简单的算法(但仍相当安全)可以算是具有PKCS#1 v1.5 padding的RSA。RSA可以使用作为公共指数。因此,协议如下:e = 3
Alice生成一个大整数,其中和是类似大小的质数,因此的大小足以确保安全(即,截至2012年,至少为1024位)。同样,爱丽丝必须安排和不能为3的倍数。p q n p − 1 q − 1n = p qpqñp − 1q− 1
爱丽丝在卡上写。ñ
如PKCS#1所述,Bob首先将其电话号码填充为一个长度为的字节序列(这意味着:00 02 xx xx ... xx 00 bb bb .. bb,其中bb是编码的十个字节电话号码和“ xx”是随机的非零字节值,如果是1024位整数,则总长度为128个字节)。ñññ
鲍勃将其字节序列解释为大整数值(大端编码),并计算(因此,这是一个非常大的整数的乘法运算,然后是除法,结果是除法的其余部分)。仍然可以手动完成此操作(但是,再次执行可能需要一天的大部分时间)。结果就是鲍勃发回爱丽丝的东西。m 3 m o d n米米3 米ø d Ñ
爱丽丝利用她对和知识从鲍勃发送的恢复。RSA上的Wikipedia页面对此过程有一些合理清晰的解释。一旦爱丽丝有了,她就可以删除填充(“ xx”非零,因此第一个“ bb”字节可以清楚地定位),然后有了电话号码,可以将其与自己的电话号码进行比较。q m m 3 m o d n mpq米米3 米ø d Ñ米
爱丽丝的计算将需要一台计算机(一台计算机通常总是基本的并且可以手动操作,但是一台计算机的速度非常快,因此“可行”在实践中可能会花费太多时间;手工进行RSA 解密会花费很多时间周)。
(实际上,通过使用McEliece加密,我们可以进行更快的手动计算,但是随后,公钥(爱丽丝在卡上写的内容)将会很大,而卡根本就不会这样做;夏娃必须运送整本书的数字。)