第一章:基础知识
明文、密文和加解密函数
明文M或P,密文C,解密函数D,加密函数E。
鉴别、完整性和抗抵赖:
除了提供机密性外,密码学通常还有以下三个作用:
鉴别:消息的接收者应该能够确认消息的来源;入侵者不可能伪装成他人。
完整性:消息的接收者应该能够验证在传送过程中消息没有被修改;入侵者不可能用假消息代替合法消息。
抗抵赖:发送者事后不可能虚假地否认他发送的消息。
现代密码学使用密钥:
基于密钥的算法通常分为两类:对称算法和公开密钥算法。
- 对称算法(symmetric algorithm)又称传统密码算法,就是加密密钥能够从解密密钥中推算出来,反过来也成立。在大多数的对称算法中,加密/解密密钥是相同的。这些算法也叫做秘密密钥算法或单密钥算法。它要求发送者和接收者在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄露密钥就意味着任何人都能对消息进行加/解密。只要通信需要保密,密钥就必须保密。
对称算法分为两类。一次只对明文中单个位(或字节)运算的算法称为序列算法(stream algorithm)或序列密码。另一类算法是对明文的一组位进行运算,这些位组称为分组,相应的算法称为分组算法(block algorithm)。
- 公开密钥算法(public-key algorithm,也叫非对称算法):解密密钥不能根据加密密钥计算出来。所以加密密钥能够公开,即陌生人能用加密密钥加密信息,但只有用相应的解密密钥才能解密信息。在这些系统中,加密密钥叫做公钥(public-key),解密密钥叫做私钥(private-key)。
衡量攻击方法的复杂性:
- 数据复杂性:用于攻击输入所需要的数据量。
- 处理复杂性:完成攻击所需要的时间,也经常称作工作因素。
- 存储需求:进行攻击所需要的存储量。
代替密码和换位密码
在计算机出现前,密码学由基于字符的密码算法构成。不同的密码算法是字符之间互相代替或互相换位。而现在,重要的变化是算法对位而不是字母进行变换。
代替算法:明文中的每一个字符被替换成密文中的另外一个字符。
比如著名的Caesar(凯撒)密码就是一种简单的代替密码,它的每一个明文字符都由其右边第三个字符代替(A-D…)。ROT13是建立在UNIX系统上的简单加密程序,它也是简单代替密码(A-N…),每一个字母是环移13所对应的字母。
代替密码有四种:
1.简单代替密码 2. 多名码代替密码 3. 多字母代替密码 4. 多表代替密码
- 其中多表代替密码:由多个简单的代替密码构成。例如,可能使用5个不同的简单代替密码,单独的一个字符用来改变明文每个字符的位置。多表代替密码有多个单字母密钥,每一个密钥用来加密一个明文字母。第一个密钥加密明文的第一个字母,第二个密钥加密明文的第二个字母等。若有20个单个字母密钥,那么每隔20个字母的明文都被同一个密钥加密,这叫做密码的周期。在经典密码学中,密码周期越长越难破译,使用计算机就能轻易破译具有很长周期的代替密码。
换位密码:在换位密码中,明文的字母保持不变,但顺序被打乱了。简单了解就好。
转轮机:挺有意思的。转轮机,有一个键盘和一系列转轮,它是维吉尼亚密码的一种实现。每个转轮是字母的任意组合,有26个位置,并且完成一种简单代替。而且转轮的输出栓连接到相邻的输入栓。最有名的转轮装置是恩尼格马,二战德国人用的。
简单异或(非常容易破译的一个算法)
异或(XOR)常用在一个对称算法中,明文用一个关键字进行异或运算产生密文。因为用相同值异或两次就会恢复原来的值。(原理是a∧b∧b=a)
它易于破译,假设明文是英文,并且假设密钥长度是一个任意小的字节数。下面是它的破译方法:
(1)用重合码计数法找出密钥长度。用密文异或相对其本身的各种字节的位移,统计那些相等的字节数。如果位移是密钥长度的倍数,那么超过6%的字节将是相等的;如果不是,则至多有0.4%的字节是相等的(这里假设用随机密钥来加密标准ASCII文本,其他类型的明文将有不同的数值),这叫做重合指数(index of coincidence)。指出的密钥长度倍数的最小位移就是密钥的长度。
(2)按此长度移动密文,并且与自身进行异或。这样就消除了密钥,留下明文和移动了密钥长度的明文的异或。由于英语每字节有1.3位的实际信息,所以有足够的冗余度确定唯一的解密。
一次一密乱码本(one time pad)(第一个对密钥和明文密文有具体概念的可以自己推断的加密方案)
密钥:大的不重复的真随机密钥字母集,这个密钥字母集被写成一个本。发送者用乱码本中的每一个密钥字母准确地加密一个明文字符。
算法:加密是明文字符和乱码本密钥字符的模26加法。(见第11页)
每个密钥仅对一个消息使用一次。用完销毁,用接下来的。
强调:密钥本一定要是随机的。
缺点:传输过程中出现信息失真就完全鉴别不出了。(用在一些军方的高度机密的低带宽信道)
计算机算法(最通用的)
(1)数据加密标准(Date Encryption Standard,DES)是最通用的计算机加密算法。DES是对称算法,加密和解密的密钥是相同的。
(2)RSA(根据发明者命名Rivest\Shamir\Adleman)是最流行的公开密钥算法,它能用作加密和数字签名。
(3)数字签名算法(Digital Signature Algorithm,DSA,用作数字签名标准的一部分)是另一种公开密钥算法,它不能用作加密,只用做数字签名。