数据加密标准
传统加密方法有两种,替换和置换。上面的例子采用的就是替换的方法:使用密钥将明文中的每一个字符转换为密文中的一个字符。而置换仅将明文的字符按不同的顺序重新排列。独立使用这两种方法的任意一种都是不够安全的,但是将这两种方法结合起来就能提供相当高的安全程度。数据加密标准(Data Encryption Standard,简称DES)就采用了这种结合算法,他由IBM制定,并在1977年成为美国官方加密标准。
DES的工作原理为:将明文分割成许多64位大小的块,每个块用64位密钥进行加密,实际上,密钥由56位数据位和8位奇偶校验位组成,因此只有256个可能的密码而不是264个。每块先用初始置换方法进行加密,再连续进行16次复杂的替换,最后再对其施用初始置换的逆。第i步的替换并不是直接利用原始的密钥K,而是由K和i计算出的密钥Ki。DES具有这样的特性,其解密算法和加密算法相同,除了密钥Ki的施加顺序相反以外。
公开密钥加密
多年来,许多人都认为DES并不是真的非常安全。事实上,即使不采用智能的方法,随着快速、高度并行的处理器的出现,强制破解DES也是可能的。"公开密钥"加密方法使得DES及类似的传统加密技术过时了。公开密钥加密方法中,加密算法和加密密钥都是公开的,所有人都可将明文转换成密文。不过相应的解密密钥是保密的(公开密钥方法包括两个密钥,分别用于加密和解密),而且无法从加密密钥推导出,因此,即使是加密者若未被授权也无法执行相应的解密。公开密钥加密思想最初是由Diffie和Hellman提出的,最著名的是Rivest、Shamir及Adleman提出的,目前通常称为RSA(以三个发明者的首位字母命名)的方法,该方法基于下面的两个事实:
1) 已有确定一个数是不是质数的快速算法;
2) 尚未找到确定一个合数的质因子的快速算法。
RSA方法的工作原理如下:
1) 任意选取两个不同的大质数p和q,计算乘积r=p*q;
2) 任意选取一个大整数e,e和(p-1)*(q-1)互质,整数e用做加密密钥。注意:e的选取是非常容易的,例如,所有大于p和q的质数都可用。
3) 确定解密密钥d:d * e = 1 modulo(p - 1)*(q - 1)根据e、p和q能容易地计算出d。
4) 公开整数r和e,不过不公开d;
5) 将明文P (假设P是个小于r的整数)加密为密文C,计算方法为:C = Pe modulo r
6) 将密文C解密为明文P,计算方法为:P = Cd modulo r
然而只根据r和e(不是p和q)要计算出d是不可能的。因此,所有人都可对明文进行加密,但只有授权用户(知道d)才可对密文解密。
下面举一简单的例子对上述过程进行说明,显然我们只能选取非常小的数字。
例:选取p=3, q=5,则r=15,(p-1)*(q-1)=8。选取e=11(大于p和q的质数),通过d * 11 = 1 modulo 8,计算出d =3。
假定明文为整数13。则密文C为
- C = Pe modulo r
- = 1311 modulo 115
- = 1,792,160,394,037 modulo 15
- = 7
复原明文P为:
- P = Cd modulo r
- = 73 modulo 15
- = 343 modulo 15
- = 13
因为e和d互逆,公开密钥加密方法也允许采用这样的方式对加密信息进行"签名",以便接收方能确定签名不是伪造的。假设A和B希望通过公开密钥加密方法进行数据传输,A和B分别公开加密算法和相应的密钥,但不公开解密算法和相应的密钥。A和B的加密算法分别是ECA和ECB,解密算法分别是DCA和DCB,ECA和DCA互逆,ECB和DCB互逆。若A要向B发送明文P,不是简单地发送ECB(P),而是先对P施以其解密算法DCA,再用加密算法ECB对结果加密后发送出去。密文C为:
C = ECB(DCA(P))
B收到C后,先后施以其解密算法DCB和加密算法ECA,得到明文P:
- ECA(DCB(C))
- = ECA(DCB(ECB(DCA(P))))
- = ECA(DCA(P)) /*DCB和ECB相互抵消*/
- = P /*DCB和ECB相互抵消*/
这样B就确定报文确实是从A发出的,因为只有当加密过程利用了DCA算法,用ECA才能获得P,只有A才知道DCA算法,没有人,即使是B也不能伪造A的签名。
数据加密的更对内容请看:详细解析数据加密
【编辑推荐】