目录
-
DES算法
背景:
数据加密标准(DES,Data Encryption Standard)是一种使用密钥加密的块密码,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。它基于使用56位密钥的对称算法。这个算法因为包含一些机密设计元素,相对短的密钥长度以及怀疑内含美国国家安全局(NSA)的后门而在开始时有争议,因此DES因此受到了强烈的学院派式的审查,并以此推动了现代的块密码及其密码分析的发展
DES算法的入口参数有三个:Key、Data、Mode。其中Key为8个字节共64位,是DES算法的工作密钥;Data也为8个字节64位,是要被加密或被解密的数据;Mode为DES的工作方式,有两种:加密或解密
安全性:
DES现在已经不是一种安全的加密方法,主要因为它使用的56位密钥过短。1999年1月,distributed.net与电子前哨基金会合作,在22小时15分钟内即公开破解了一个DES密钥。也有一些分析报告提出了该算法的理论上的弱点,虽然在实际中难以应用。为了提供实用所需的安全性,可以使用DES的派生算法3DES来进行加密,虽然3DES也存在理论上的攻击方法。在2001年,DES作为一个标准已经被高级加密标准(AES)所取代。
加密流程:
DES解密过程与加密过程完全相似,只不过将16次迭代的子密钥顺序倒过来,即
m = DES-1(c) = IP-1 • T1•T2•.....T15 • T16 • IP(c)
可以证明,
DES-1 (DES (m) )=m
-
RSA加密算法
背景:
RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法
RSA是一种非对称加密算法,它需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法
安全性:
(1)RSA公钥密码体制在加密或解密变化中涉及大量的数值计算,其加密和解密的运算时间比较长,这比数据加密标准DES的计算量开销大,在一定程度上限制了它的应用范围,以致于实际使用RSA密码体制无法用软件产品,必须用超大规模集成电路的硬件产品。
(2)虽然提高N=P*Q的位数会大大提高RSA密码体制的安全性,但其计算量呈指数增长,以致使其实现的难度增大,实用性降低。
(3)RSA公钥密码体制的算法完整性(指密钥控制加密或解密变换的唯一性)和安全性(指密码算法除密钥本身外,不应该存在其它可破译密码体制的可能性)沿有等进一步完善。
(4)RSA算法面临着数学方法的进步和计算机技术飞跃发展带来的破译密码能力日趋增强的严重挑战。因子分解问题有了长跑的发展,1995年人类成功地分解了128位十进制数RSA密码算法,破译512位长的RSA指日可待。
尽管如此,自1978年RSA算法公布以来,公开密钥密码已从理论研究进入实际应用研究阶段。RSA公开密钥密码算法在信息交换过程中使用比较广泛,安全性比较高。以当前的计算机水平,如选择1024位长的密钥(相当于300位十进制数字)就认为是无法攻破的。
加密原理:
首先产生密钥,过程如下:
随机产生两个长度为K/2位的素数P 和 Q;
计算公钥 publicKey=P*Q;(publicKey 是k位的长度)
随机产生一个加密密钥 keyE, 2<=keyE<=Φ(n)-1其中GCD(keyE, Φ(n))=1;注:这是保证解密密钥keyE *keyD mod Φ(n)=1 有解的充要条件, Φ(n)称为n的欧拉函数,值为: Φ(n)=(P-1)*(Q-1)
求解解密密钥keyD=keyE-1 mod (n) ,keyE-1为解密密钥keyD的逆元 ,此公式原方程为(keyE*keyD mod (n)=1)
由此公钥,加密密钥,解密密钥全部产生。
其次,对明文加密或对密文进行解密,过程如下:
(1) 加密: C = MkeyE mod publicKey;其中M表示明文,C表示密文
(2) 解密: M = CkeyD mod publicKey. 其中M表示明文,C表示密文
(模运算是整数运算,有一个整数m,以n为模做模运算,即m mod n。怎样做呢?让m去被n整除,只取所得的余数作为结果,就叫做模运算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。模幂运算就是先做指数运算,取其结果再做模运算。如53 mod 7=125 mod 7=6)