发布网友 发布时间:2024-10-16 09:22
共1个回答
热心网友 时间:2024-11-18 00:47
Binary: letting the letters do the math is the hallmark of modern cryptography
前面的密码学,都停留在古典密码时代;从这节开始,密码学就要进入 计算机时代 了。
从计算机时代开始,字母作为操作的最小单位的概念就消失了。
举个栗子就明白了:
二进制咱们都知道,在计算机里,所有的数据都被表示成0和1的数字组合,字母也不例外。把字母数字化得有个标准,现在这个标准就叫做 ASCII 。
早期,每个字母和符号都对应一个7位的二进制数字,比如说,a=1100001,!=0100001。字母一旦变成数字,在计算机中字母的符号属性、发音属性等就完全消失了。
它只是一个二进制数字,我们可以随意对它做改变。比如AB=1000001 1000010,我们可以把其中的奇数位、偶数位分别挑出来,然后再首尾相接就变成另外一个数字了(1001001 0001000),这个数字实际对应的符号就是“H+退格符号”。
我们也可以做其他指定,比如奇偶互换形成一段新的字符……
虽然最终输出的仍是两个有意义的字符,但它和以往加密法的最大区别在于:
以往的加密,都是对*单个字母*进行操作;但数字化后的加密,打乱的是语言规律的底层结构,改变发生在字母内部。所以说,数字化使加密法步入一个新的世代。
刚刚举的例子很简单,其实在计算机出现后不久,就出现了操作步骤很复杂的加密方法。这些方法是怎么计算的呢?
过程不但不保密,而且每个人都可以查到技术细节。
从前 恩尼格码机 的时代,德军还会想方设法保密军用版机器的内部结构和使用说明书。但到了计算机时代,所谓内部结构和操作说明根本不用保密,完全公开。
到底有多公开呢?
从1976年11月起,有一套规范就成了美国国家标准局的加密系统官方标准,简称DES。任何人只要想了解,都可以得到这份规范。
这个规范还有一个外号——“魔王”(Lucifer),这是最典型的诞生在计算机时代的第五代密码法。
据说,当初设计者一直把这套算法叫做“示范算法”(Demonstration),但70年代的操作系统对文件名长度有,于是只能截取前几位字母Demon,而Demon又是“恶魔”的意思,后来大家就用另一个恶魔的名字——路西法(Lucifer),也就是“魔王”来称呼这个算法了。
计算机科学中经常会出现一些新词怪词,比如黑客(hacker)、程序错误(bug)、垃圾邮件(spam)、博客(blog),包括魔王这个名字在内,它们背后都有故事。
这些故事综合在一起,在70年代后形成了一种全新的主流文化—— IT文化 。
而在接下来的密码学进展中,还会出现3个著名的IT虚拟人物。如今就算在正式的学术讨论中,这3个人名也都是标准用语。它们是爱丽丝(Alice)、鲍勃(Bob)和伊芙(Eve)。
记住这三个名字,咱们后面的还会反复用到。
现在,咱们就用这3位来举例。假如爱丽丝和鲍勃通信,但伊芙想偷听,怎么解决呢?
有人说,就使用刚才说的魔王系统加密嘛。但是信息加密后,钥匙的安全怎么保障呢?
爱丽丝得想法把每条消息对应的钥匙给到鲍勃才行,最稳妥的方法是爱丽丝直接和鲍勃见面,告诉他钥匙内容。
你说不用见面,双方约定一下,比如说用 《宣言》 的字母顺序当钥匙,就可以省去见面了。但这消息一旦走漏给伊芙,此后两人的通信就没法保密了。
所以用魔王系统加密能保证信息主体的安全,但双方还是要交换钥匙,而钥匙的安全是没法保证的。这就是魔王系统最大的漏洞。
对双方约定钥匙内容这件事来说:
钥匙越没规律,密码越保险 ,但也就越需要双方见面沟通;钥匙越有规律,密码越不安全,但却省去了见面沟通的成本。
没办法,在新方法出现前,像有些一个月才需要沟通一次,却又对保密等级要求极为严格的场合,真的会采用见面的方式交换钥匙。
70年代的大银行就专门有个职位,那人每天提着保险箱,飞到世界各地给客户送钥匙。
现在问题来了:
那就需要等到新一代密码系统诞生,才能解决。这套系统解决了一个问题,就是在传输加密内容时不必单独传递钥匙了,这就把魔王加密系统的漏洞给补上了。
这是在密码学发展了2000多年后才有人想到的。
有人说:怎么会这么复杂?我马上就能想出一套不需要交换钥匙的方案出来。比如:
爱丽丝把机密放在盒子中,上一把锁,盒子寄给鲍勃;
鲍勃收到盒子后,因为没有爱丽丝的钥匙,所以打不开,但鲍勃又给盒子加了把锁,寄回爱丽丝。这会儿盒子上就有两把锁了。
爱丽丝收到挂了两把锁的盒子后,用自己的钥匙打开其中那把自己的锁,然后再把只有一把锁的盒子寄给鲍勃;
鲍勃收到盒子后,上面只有一把自己的锁了,他又有自己的钥匙,所以就可以打开看到里面的机密文件。
整个过程中双方就没交换过钥匙。听上去是不是很完美?但是实际上却行不通。
原因就是,把加密比喻成上锁是行不通的。
因为在加密中,当一套字符先使用A加密一次,又使用B加密一次,我们就必须先用B解密,再用A解密,也就是后加密的先解。如果这个顺序颠倒了,解出来就是乱码。可是开锁上锁,一般不用讲顺序。
这个例子也提醒我们:
比喻虽然对难的知识是一种*辅助*,但比喻法不能代替数学的理解。
那能用什么来解决这个问题呢?还是数学。
具体来说,就是用一种不可逆的函数。密码学中为了简单,把它叫作“ 单向函数 ”。其实严格的说,单向函数存在与否的数学证明,到现在还没有做出来。但我们不纠结,就叫它单向函数。
函数指的是某种固定操作,比如×2,就是一种函数操作。我们大多数情况接触到的函数,都是可逆的。如果把3进行了×2的操作,可以得到6;那么也可以可逆的,从6÷2得到3。
那不可逆的操作是什么呢?
数学上还真的有一类特殊的运算,它有时候就是不可逆操作,这种操作叫作“ 模运算 ”(modular arithmetic)。
模运算很像我们看手表的思路。比如晚上22点再过3小时是几点呢?结果不是25点,而是1点,所以钟表就是一个模等于24的体系。我们可以任意规定模的大小,比如在模是7的体系里,2+3=5 (mod7),2+6=1 (mod7)。
乘法也一样可以用模运算,比如在模为13的体系中,11×9等于多少呢?加入不考虑模,我们知道结果等于99。可是在模等于13的表盘里没有99,所以数字的增加只能等同于不断的转圈,99相当于转了7圈后又走了8格。所以在模13的体系中,11×9=8 (mod13)。
模运算怎么就是单向函数了呢?
我们可以看看刚才的例子:
11×9=8 (mod13) 这个算式,从左往右推可以推出来,而且结果是唯一的。但是从右往左呢,就相当于问你“在模等于13的体系中,什么数×9以后余数为8”。这个问题能不能逆运算呢?答案是不能。
当然,不一定模运算就一定没有乘法逆。当模比较小的时候,可以逆运算的数字比较多;但是当模大到一定程度时,就完全没有逆运算了。这是由数学决定的。
明白了模运算,我们就能知道它是怎么用来传递钥匙的了。过程是这样,比如说:
当然,你不用管为什么非得是β^A 、α^B,这个是数算保证的,这样算是一定正确的。
这两个人算完后,奇怪的事就会出现——他们将得到完全一样的结果,这个结果就是9。他们得到的结果相同,那么这个结果就可以当作他们的钥匙。
整个过程没人传递过钥匙,但双方都拿到了同样的钥匙。对窃听者伊芙来说,她偷听到的只是模运算的结果。因为这种运算没有逆运算,所以伊芙偷听了也白听。
你可能很困惑,最后两人计算的结果为什么恰恰都等于9?
这就是整个过程的精髓所在。不过这可不是巧合,而是阳升(Sun)的高级工程师迪菲(Whitfield Diffie)和斯坦福大学电子系教授黑尔曼(Martin Hellman),两个人花了两年多的时间才找出的这种函数。也因此,这套方法被称为“迪菲-黑尔曼钥匙交换方案”。
具体的证明过程非常复杂,我们不需要了解。我们只要知道经过这样的运算,双方都会得到相同的结果就可以了。
2000年来,密码学一直信奉用户必须特地为交换钥匙而额外碰面;
1976年之后,这个信条就完全破灭了
总结一下内容,进入计算机时代,加密法出现了几个重大进展:
这几个进展,全都是由数学推动的。事实上,不只是密码学,每个科学分支最重要的理论突破背后,都有数学的巨大贡献。
那这种加密法能不能实用呢?如果说不实用,又要如何改进呢?