加密技术原理
一.密钥与算法 (一) 密码技术
1. 密码技术的必要性
必须经过公共通道(如 Internet)传输的敏感信息通常不是以明文而是以密文的方式 进行通讯传输的。电子商务特别依赖于加密或秘密代码形式来保护信息。加密的目的是使黑客在获得通过网络传输的秘密文件时,无法将它恢复为原文,密码技术是保证网络、信息安全的核心技术。
2. 加密技术
加密是对原来明文信息中的加密为衔文数字信息。解密是将加密的一段密文信息恢复为原来的明文信息。加密就是信息的变异,它将某种形式(文本、视频、图像)的信息转变为仅通过解密密钥解密后才可读的形式。
基本的加密方法有:替换加密和转换加密。
3. 替换加密法 (1) 单字母加密方法
即利用另一个字母表(与正常的字母表符号或顺序不同)中的字母替代明文中的字母。 单字母加密的方法有很多中,这里介绍其中几种。
例 1:恺撒(Caesar)密码,
这是加密法中最古老的一种,它使用的密码字母表与普通字母表相同,加密时把明文中 的每个字母都用字母表中该字母右边移动固定数目后的位置的字母替代,并认为 Z 后面是 A。 这个固定数目称为偏移量,我们称其为密钥(Key)。比如,取每个字母其右边第K个字母作为偏移量,则密钥为这个数字 K。
举例来说,如果明文为“important”, 其偏移量为 3,Key=3,第一个字母“i”在字目表上右移 3 个字母后为“L”,照此类推,则密文(记做 C)则为“LPSRUWDQW”。 可见,即使算法公开,别人如果不知道偏移量为3,仍然不能解密。加密者不必担心算 法被他人知道,他主要关心密钥不被他人知道。
单字母替换加密法由于是一个明文字母对应唯一一个密文字母。密码分析者可将密文中 字母出现的频率与这些统计相比较,因而容易逐个击破直至最后破译。
(2) 多字母加密方法
多字母加密是使用密钥进行加密。密钥是一组信息(一串字符)。同一个明文经过不同 的密钥加密后,其密文也会不同。
例 1:维吉尼亚(Vigenere)密码。 Vigenere(维吉利亚)是法国密码专家,以他名字命名的密码是这样的: 假设明文 m=m1m2m3......mn,
密钥 Key=K1K2K3......Kn, 对应密文 C=C1C2C3......Cn,
则:Ci = mi + Ki mod 26,i = 1,2,......n, 其中,26 个字母的序号对应是 0------25 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Ci 是密文中第 i 个字母的序号, mi 是明文中第 i 个字母的序号,
Ki 是密钥 Key 中第 i 个字母的序号, 如果 m=information
Key=STAR
则 C=AGFFJFAKAHN
密钥 Key 的循环出现使其长度与明文一样,密文中的字母 A 在明文中是 i 和 a;而明文中的字母 o 在密文中是 F 和 H。
Vigenere 密码的密钥长度若增加,破译的难度也将增加,若密钥的长度与明文的长度一样,而且是随机的,Vigenere 密码可做到一次一密。
Vigenere 算法可以公开,但是,只要密钥 Key=STAR 保密,就不能解密。可见,密钥是加密技术的关键。
4. 转换加密法 在替换加密发中,原文的顺序没被改变,而是通过各种字母映射关系把原文隐藏了起来。
转换加密法是将原字母的顺序打乱,将其重新排列。如:
it can allow students to get close up views 将其按顺序分为 5 个字符的字符串: itcan allow stude ntsto getcl oseup
views
再将其按先列后行的顺序排列,就形成了密文:
即密文 C 为“IASNGOVTLTTESICLUSTEEAODTCUWNWEOLPS” 如果将每一组的字母倒排,也形成一种密文: C=NACTIWOLLAEDUTSOTSTNLCTEGPUESOSWEIV 数据加密是大家熟知的保证安全通信的手段。由于计算机技术的发展,人们借助于计算 机进行分析处理,密码的破译能力也不断提高。
(二) 加密技术分类 1. Kerckhoff 原则
系统的保密性不依赖于对加密或算法的保密,而依赖于密钥。这是著名的 Kerckhoff 原则。
算法不是重点保密对象。密钥是重点保密对象。 因此,加密技术实际上是围绕着密钥展开的。
当前有广泛使用的加密方法。较老的也是较简单的称为“单钥“或“秘密密钥“加密,。近来兴起的方法称“公开密钥“加密。
2. 加密技术分类 根据信息加密使用的密钥的不同,可以将加密技术分为两类:
1) 对称加密(对称密钥、单密钥) 在专用网络上的安全性较满意,但是在公开的计算机网络使用时受制约。
2) 非对称加密(非对称密钥、公开密钥、公钥)。 适合在公开的计算机网络使用。
(三) DES算法概述
DES( Data Encryption Standard)算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共位,是DES算法的工作密钥;Data也为8个字节位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密。
DES算法是这样工作的:如Mode为加密,则用Key 去把数据Data进行加密,生成Data的密码形式(位)作为DES的输出结果;如Mode为解密,则用Key去把密码形式的数据Data解密,还原为Data的明码形式(位)作为DES的输出结果。在通信网络的两端,双方约定一致的Key,在通信的源点用Key对核心数据进行DES加密,然后以密码形式在公共通信网(如电话网)中传输到通信网络的终点,数据到达目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的核心数据。这样,便保证了核心数据(如PIN、MAC等)在公共通信网中传输的安全性和可靠性。
通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融交易网络的流行做法。
1 算法框架:
DES对(bit)位的明文分组M进行操作,M经过一个初始置换IP置换成m0,将m0明文分成左半部分和右半部分m0=(L0,R0),各32位长。然后进行16轮完全相同的运算,这些运算被称为函数f,在运算过程中数据与密匙结合。经过16轮后,左,右半部分合在一起经过一个末置换,这样就完成了。
在每一轮中,密匙位移位,然后再从密匙的56位中选出48位。通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作替代成新的32位数据,在将其置换换一次。这四步运算构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果成为新的右半部分,原来的右半部分成为新的左半部分。将该操作重复16次,就实现了。具体图所示。
2 DES解密
在经过所有的代替、置换、异或盒循环之后,你也许认为解密算法与加密算法完全不同。恰恰相反,经过精心选择的各种操作,获得了一个非常有用的性质:加密和解密使用相同的算法。
DES加密和解密唯一的不同是密匙的次序相反。如果各轮加密密匙分别是K1,K2,K3„.K16那么解密密匙就是K16,K15,K14„K1。
(四) IDEA算法
IDEA是International Data Encryption Algorithm 的缩写,是1990年由瑞士联邦技术学院来学嘉X.J.Lai 和Massey提出的建议标准算法称作PES( Proposed Encryption Standard) 。Lai 和Massey 在1992 年进行了改进强化了抗差分分析的能力改称为IDEA 它也是对bit大小的数据块加密的分组加密算法密钥长度为128位它基于“相异代数群上的混合运算”设计思想算法用硬件和软件实现都很容易且比DES在实现上快的多。IDEA自问世以来,已经经历了大量的详细审查,对密码分析具有很强的抵抗能力,在多种商业产品中被使用。
1算法框架
输入的-位数据分组被分成4个16-位子分组:xl,X2,x3和x4。这4个子分组成为算法的第一轮的输入,总共有8轮。在每一轮中,这4个子分组相互相异或,相加,相乘,且与6个16-位子密钥相异或,相加,相乘。在轮与轮间,第二和第三个子分组交换。最后在输出变换中4个子分组与4个子密钥进行运算。
在每一轮中,执行的顺序如下: (1)X1和第一个子密钥相乘。 (2)x2和第二个子密钥相加。 (3)X3和第三个子密钥相加。 (4)x4和第四个子密钥相乘。
(5)将第(1)步和第(3)步的结果相异或。 · (6)将第(2)步和第(4)步的结果相异或。 (7)将第(5)步的结果与第五个子密钥相乘。 (8)将第(6)步和第(7)步的结果相加。 (9)将第(8)步的结果与第六个子密钥相乘。 (10)将第(7)步和第(9)步的结果相加。 (11)将第(1)步和第(9)步的结果相异或。 (12)将第(3)步和第(9)步的结果相异或。 (13)将第(2)步和第(10)步的结果相异或。 (14)将第(4)步和第(10)步的结果相异或。
每一轮的输出是第(11)、(12)、(13)和(14) 步的结果形成的4个子分组。将中间两个分组分组交换(最后一轮除外)后,即为下一轮的输入。
经过8轮运算之后,有一个最终的输出变换: (1) X1和第一个子密钥相乘。 (2) x2和第二个子密钥相加。 (3) x3和第三个子密钥相加。 (4) x4和第四个子密钥相乘。
最后,这4个子分组重新连接到一起产生密文。
产生子密钥也很容易。这个算法用了52个子密钥(8轮中的每一轮需要6个,其他4个用与输出变换)。
首先,将128-位密钥分成8个16-位子密钥。这些是算法的第一批8个子密钥(第一轮六个,第二轮的头两个)。然后,密钥向左环移x位后再分成8个子密钥。开始4个用在第二轮,后面4个用在第三轮。密钥再次向左环移25位产生另外8个子密钥,如此进行直到算法结束。 2 评价
IDEA算法的密钥长度为128位。设计者尽最大努力使该算法不受差分密码分析的影响,数学家已证明IDEA算法在其8圈迭代的第4圈之后便不受差分密码分析的影响了。假定穷举法攻击有效的话,那么即使设计一种每秒种可以试验10亿个密钥的专用芯片,并将10亿片这样的芯片用于此项工作,仍需1013年才能解决问题;另一方面,若用1024片这样的芯片,有可能在一天内找到密钥,不过人们还无法找到足够的硅原子来制造这样一台机器。目前,尚无一片公开发表的试图对IDEA进行密码分析的文章。因此,就现在来看应当说IDEA是非常安全的。
(五)RSA算法
RSA算法是 R.Rirest、ASllalnlr和L.Adleman于1977年在美国麻省理工学院开发,于1978年首次公布,其算法如下: 找两素数p和q
取n=p*q
取t=(p-1)*(q-1)
取任何一个数e,要求满足e这样最终得到三个数: n d e设消息为数M (M 设c=(M**d)%n就得到了加密后的消息c设m=(c**e)%n则 m == M,从而完成对c的解密。 注:**表示次方,上面两式中的d和e可以互换。
举例
找两个素数: p=47 q=59 这样 n=p*q=2773
t=(p-1)*(q-1)=2668
取e=63,满足e用perl简单穷举可以获得满主 e*d%t ==1的数d:C:\\Temp>perl -e \"foreach $i (1..9999){ print($i),last if $i*63%2668==1 }\" 847
即d=847
最终我们获得关键的 n=2773 d=847
e=63
取消息M=244我们看看 加密:
c=M**d%n = 244**847%2773 用perl的大数计算来算一下:
C:\\Temp>perl -Mbigint -e \"print 244**847%2773\" 465
即用d对M加密后获得加密信息c=465
解密:
我们可以用e来对加密后的c进行解密,还原M: m=c**e%n=465**63%2773 :
C:\\Temp>perl -Mbigint -e \"print 465**63%2773\"
244
即用e对c解密后获得m=244 , 该值和原始信息M相等。
RSA的安全性基于大数分解质因子的困难性。因为若n被分解为n=p*q,则 (n)、e、d可依次求得。目前,因式分解速度最快的方法的时间复杂性为exp(sqrt(ln(n))Inln(n)))。统计数据表明,在重要应用中,使用512位的密钥己不安全,需要采用1024位的密钥。