对称密钥加密系统是加密和解密均采用同一把秘密密钥,而且通信双方都必须获得这把密钥,并保持密钥的秘密,常见的有DES、3DES、AES算法。非对称密钥加密系统采用的加密密钥(公钥)和解密密钥(私钥)是不同的,常见的有RSA、DSA、ECC加密算法。不可逆算法(散列算法),散列是信息的提炼,通常其长度要比信息小得多,且为一个固定长度[10]。加密性强的散列一定是不可逆的,这就意味着通过散列结果,无法推出任何部分的原始信息。任何输入信息的变化,哪怕仅一位,都将导致散列结果的明显变化,这称之为雪崩效应[17]。散列还应该是防冲突的,即找不出具有相同散列结果的两条信息。具有这些特性的散列结果就可以用于验证信息是否被修改,常见的有MD5、SHA1算法。
本设计在ASP.NET2.0中使用forms authentication Cookie来说明如何设计一个安全的Cookie。首先创建一个序列化的forms authentication ticket:即创建此对象为一个字节数组(byte array);然后创建forms authentication ticket的签名。machineKey中的validation和alidationKey属性所设置了生成签名的算法[19]。用此算法计算上面序列化的bytearray,生成MAC(message authentication code); 最后加密forms authentication ticket,同时创建另外一个序列化的对象,此对象经过加密算法加密。这个加密算法也可在machineKey中的decryption和decryptionKey的属性中获得[19]。
machineKey中加密方法(validation)可以选择的有:MD5算法、AES算法、SHA1算法、TripleDES(3DES)算法。解密方法(decryption)可以选择的有:DES算法、TripleDES(3DES)算法、AES算法。[18]下面分别对这五种算法进行分析。
MD5 - Message Digest 5 (MD5) 是一种用于产生数字签名的单向散列算法,在1991年由MIT Laboratory for Computer Science(IT计算机科学实验室)和RSA Data Security Inc(RSA数据安全公司)的Ronald L. Rivest教授开发出来,经由MD2、MD3和MD4发展而来[19]。MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。MD5 可以提供一些保护,以防止遭受计算机病毒和某些程序(看上去像是无害的应用程序,而实际上具有破坏性)的攻击。MD5算法作用是让大容量信息在用数字签名软件签私人密钥前被"压缩"成一种保密的格式,将一个任意长度的“字节串”通过一个不可逆的字符串变换算法变换成一个128bit的大整数,即使看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个。[16]
2000年10月,NIST(美国国家标准和技术协会)宣布通过从15种侯选算法中选出的一项新的密钥加密标准。Rijndael被选中成为将来的AES。 Rijndael是在 1999 年下半年,由研究员 Joan Daemen 和 Vincent Rijmen 创建的。AES 正日益成为加密各种形式的电子数据的实际标准。美国标准与技术研究院 (NIST) 于
AES 算法基于排列和置换运算。排列是对数据重新进行安排,置换是将一个数据单元替换为另一个。AES使用几种不同的方法来执行排列和置换运算。
AES 是一个迭代的、对称密钥分组的密码,可使用128、192 和256位密钥,并且用128位(16字节)分组加密解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密解密数据。返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换和替换输入数据。[16]
SHA-1是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。[10]
单向散列函数的安全性在于其产生散列值的操作过程具有较强的单向性。如果在输入序列中嵌入密码,那么任何人在不知道密码的情况下都不能产生正确的散列值,从而保证了其安全性。SHA将输入流按照每块512位(64个字节)进行分块,并产生20个字节的被称为信息认证代码或信息摘要的输出。[16]
该算法输入报文的最大长度不超过264位,产生的输出是一个160位的报文摘要。输入是按512 位的分组进行处理的。SHA-1是不可逆的、防冲突,并具有良好的雪崩效应。
通过散列算法可实现数字签名实现,数字签名的原理是将要传送的明文通过一种函数运算(Hash)转换成报文摘要(不同的明文对应不同的报文摘要),报文摘要加密后与明文一起传送给接受方,接受方将接受的明文产生新的报文摘要与发送方的发来报文摘要解密比较,比较结果一致表示明文未被改动,如果不一致表示明文已被篡改。[17]
DES是一个分组加密算法,以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。它的密钥长度是56位(因为每个第8位都用作奇偶校验),密钥可以是任意的56位数,而且可以任意时候改变。其中有极少量的数被认为是弱密钥,但是很容易避开他们。所以保密性依赖于密钥。[10]
DES对64(bit)位的明文分组M进行操作,M经过一个初始置换IP置换成m0,将m0明文分成左半部分和右半部分m0=(L0,R0),各32位长。然后进行16轮完全相同的运算,这些运算被称为函数f,在运算过程中数据与密钥结合。经过16轮后,左,右半部分合在一起经过一个末置换,这样就完成了。[16]
在每一轮中,密钥位移位,然后再从密钥的56位中选出48位。通过一个扩展置换将数据的右半部分扩展成48位,并通过一个异或操作替代成新的32位数据,在将其置换一次。这四步运算构成了函数f。然后,通过另一个异或运算,函数f的输出与左半部分结合,其结果成为新的右半部分,原来的右半部分成为新的左半部分。将该操作重复16次,就实现了。[16]
DES加密和解密唯一的不同是密钥的次序相反。如果各轮加密密钥分别是K1,K2,K3….K16那么解密密钥就是K16,K15,K14…K1。
Triple DES(即3DES)是DES向AES过渡的加密算法(1999年,NIST将3DES指定为过渡的加密标准),是DES的一个更安全的变形。它以DES为基本模块,通过组合分组方法设计出分组加密算法,其具体实现如下:
设Ek()和Dk()代表DES算法的加密和解密过程,K代表DES算法使用的密钥,P代表明文,C代表密表,这样
3DES加密过程为:C=Ek3(Dk2(Ek1(P)))
3DES解密过程为:P=Dk1((EK2(Dk3(C)))
K1、K2、K3决定了算法的安全性,若三个密钥互不相同,本质上就相当于用一个长为168位的密钥进行加密。多年来,它在对付强力攻击方面是比较安全的。若数据对安全性要求不那么高,K1可以等于K3。在这种情况下,密钥的有效长度为112位。[16]
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >>