密码学论文
则 e×d≡1 mod f(n),即 3×d≡1 mod 20。
d 怎样取值呢?可以用试算的办法来寻找。试算结果见下表:
通过试算找到,当 d=7 时,e×d≡1 mod f(n)同余等式成立。因此,可令 d=7。从而我们 可以设计出一对公私密钥,加密密钥(公钥)为:KU =(e,n)=(3,33),解密密钥(私钥)为: KR =(d,n)=(7,33)。
若系统中共有一个模数,只是不同的人拥有不同的 e 和 d,系统将是危险的。最普遍的情 况是同一信息用不同的公钥加密,这些公钥共模而且互质,那末该信息无需私钥就可得到恢复。 设 P 为信息明文,两个加密密钥为 e1 和 e2,公共模数是 n,则: C1 = P^e1 mod n C2 = P^e2 mod n 密码分析者知道 n、e1、e2、C1 和 C2,就能得到 P。 因为 e1 和 e2 互质,故用 Euclidean 算法能找到 r 和 s,满足:r * e1 + s * e2 = 1 假设 r 为负数,需再用 Euclidean 算法计算 C1^(-1),则( C1^(-1) )^(-r) * C2^s = P mod n 另外,还有其它几种利用公共模数攻击的方法。总之,如果知道给定模数的一对 e 和 d,一是 有利于攻击者分解模数,一是有利于攻击者计算出其它成对的 e’和 d’,而无需分解模数。解 决办法只有一个,那就是不要共享模数 n。
e1 和 e2 可以互换使用,即:A=B^e2 mod n;B=A^e1 mod n;
代码所示为简单的演示:
#include <stdio.h>
#include <math.h>
/* RSA 算法中加密方公布的密钥是 N 和 E,解密方使用 N 和 D 解密 */
#define P 5 /* P 和 Q 必须为素数,在实际运用中通常为很大的数 */
(2)英文数字化。 将明文信息数字化,并将每块两个数字分组。假定明文英文字母编码表为按字母顺序排列
数值,即:
则得到分组后的 key 的明文信息为:11,05,25。 (3)明文加密
用户加密密钥(3,33) 将数字化明文分组信息加密成密文。由 C≡Me(mod n)得: 因此,得到相应的密文信息为:11,31,16。
RSA 加密算法是最常用的非对称加密算法,CFCA 在证书服务中离不了它。 RSA 是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。RSA 以它的 三个发明者 Ron Rivest, Adi Shamir, Leonard Adleman 的名字首字母命名,这个算法经受住 了多年深入的密码分析,虽然密码分析者既不能证明也不能否定 RSA 的安全性,但这恰恰说明 该算法有一定的 可信性,目前它已经成为最流行的公开密钥算法。 RSA 的安全基于大数分解的难度。其公钥和私钥是一对大素数(100 到 200 位十进制数或更 大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积。 RSA 的公钥、私钥的组成,以及加密、解密的公式可见于下表:
RSA 加密算法解析
摘要:描述了 RSA 算法,给出了 RSA 加密解密的算法原理并用一个实例进行详细描述,以及它
的抗攻击能力和常见攻击方式,还有 RSA 算法的优缺点,最后进行(在 VS2013 下)RSA 算法实 现以及演示结果。 关键词:RSA;加密解密;攻击能力;攻击方法;安全性;算法优缺点;RSA 实现 简介:
(1)产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。 (2)安全性,RSA 的安全性依赖于大数的因子分解,但并没有从理论上证明破译 RSA 的难度 与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是 NPC 问题。目前,人们已能 分解 140 多个十进制位的大素数,这就要求使用更长的密钥,速度更慢。 (3)速度太慢,由于 RSA 的分组长度太大,为保证安全性,11 至少也要 600 位以上,使运 算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展, 这个长度还在增加,不利于数据格式的标准化。目前,SET(Secure Electronic Transaction) 协议中要求 CA 采用 2048 比特长的密钥,其它实体使用 1024 比特的密钥。 十、RSA 算法实现(在 VS2013 下)
由于进行的都是大数计算,使得 RSA 加密算法最快的情况也比 DES 加密算法慢上倍,无论 是软件还是硬件实现。速度一直是 RSA 加密算法的缺陷。一般来说 RSA 加密算法只用于少量数 据加密。 六、RSA 加密算法在选择密文攻击面前很脆弱
一般攻击者是将某一信息作一下伪装( Blind),让拥有私钥的实体签署。然后,经过计算 就可得到它所想要的信息。实际上,攻击利用的都是同一个弱点,即存在这样一个事实:乘幂 保留了输入的乘法结构: ( XM )^d = X^d *M^d mod n
(6)大数是质数的两个数是互质数。如 97 与 88。 (7)小数是质数,大数不是小数的倍数的两个数是互质数。如 7 和 16。 (8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个 数是互质数。如 357 与 715,357=3×7×17,而 3、7 和 17 都不是 715 的约数,这两个数为互 质数。等等。 三、什么是模指数运算? 模运算是整数运算,有一个整数 m,以 n 为模做模运算,即 m mod n。让 m 去被 n 整除, 只取所得的余数作为结果,就叫做模运算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0 等 等。
四、RSA 加密算法的安全性依赖于大数分解 RSA 加密算法的安全性依赖于大数分解,但是否等同于大数分解 一直未能得到理论上的
证明,因为没有证明破解 RSA 加密算法就一定需要作大数分解。假设存在一种无须分解大数的 算法,那它肯定可以修改成为大数分解算法。 目前,RSA 加密算法的一些变种算法已被证明等 价于大数分解。不管怎样,分解 n 是最显然的攻击方法。现在,人们已能分解多个十进制位的 大素数。因此,模数 n 必须选大一 些,因具体适用情况而定。 五、RSA 加密算法的速度较慢,一般只用于少量数据加密
一、 什么是“素数”? 素数是这样的整数,它除了能表示为它自己和 1 的乘积以外,不能表示为任何其它两个整
数的乘积。例如,15=3*5,所以 15 不是素数;又 如,12=6*2=4*3,所以 12 也不是素数。 另一方面,13 除了等于 13*1 以外,不能表示为其它任何两个整数的乘积,所以 13 是一个素数。 素数也称 为“质数”。 二、什么是“互质数”(或“互素数”)?
RSA 算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一 个加密,则需要用另一个才能解密。
RSA 的算法涉及三个参数,n、e1、e2。 其中,n 是两个大质数 p、q 的积,n 的二进制表示时所占用的位数,就是所谓的密钥长度。 e1 和 e2 是一对相关的值,e1 可以任意取,但要求 e1 与(p-1)*(q-1)互质;再选择 e2,要求 (e2*e1)mod((p-1)*(q-1))=1。 (n,e1),(n,e2)就是密钥对。其中 (n,e1)相同,设 A 为明文,B 为密文,则:A=B^e1 mod n;B=A^e2 mod n;
(4)密文解密。
用户 B 收到密文,若将其解密,只需要计算
,即:
用户 B 得到明文信息为:11,05,25。根据上面的编码表将其转换为英文,我们又得到了 恢复后的原文“key”。
以上就是 RSA 算法的工作原理了 当然,实际运用要比这复杂得多,由于 RSA 算法的公钥私钥的长度(模长度)要到 1024 位甚至 2048 位才能保证安全,因此,p、q、e 的选取、公钥私钥的生成,加密解密模指数运算 都有一定的计算程序,需要仰仗计算机高速完成。
这个固有的问题来自于公钥密码系统的最有用的特征–每个人都能使用公钥。但从算法上 无法解决这一问题,主要措施有两条:一条是采用好 的公钥协议,保证工作过程中实体不对其 他实体任意产生的信息解密,不对自己一无所知的信息签名;另一条是决不对陌生人送来的随 机文档签名,签名时首先使用 One-Way HashFunction 对文档作 HASH 处理,或同时使用不同的 签名算法。下面有几种不同类型的攻击方法。 七、RSA 加密算法公共模数攻击方法
#define Q 7
#define N (P*Q) /* add the (), or will cause the mistake */
#define Z ((P - 1)*(Q - 1))
#define E 5
/* 加密方选择 E,E 必须和 Z 只有一个公约数 */
八、RSA 加密算法的小指数攻击 有一种提高 RSA 速度的建议是使公钥 e 取较小的值,这样会使加密变得易于实现,速度有
所提高。但这样做是不安全的,对付办法就是 e 和 d 都取较大的值。 九、RSA 加密算法的优缺点 RSA 算法是一种公钥密码,所以它具有公钥密码的所有优点。主要表现在:
(1)密钥分发简单:由于加密密钥和解密密钥不同,并且不能由加密密钥推断出解密密钥, 从而使得加密密钥表可以像电话号码本一样由主管部门发送给各个用户。
模指数运算就是先做指数运算,取其结果再做模运算。如 算法描述: (1)选择一对不同的、足够大的素数 p,q(保密)。 (2)计算 n=pq 的值(公开)。 (3)计算(欧拉函数)f(n)=(p-1)(q-1),同时对 p, q 严加保密,不让任何人知道。 (4)找一个与 f(n)互质的数 e 作为加密密钥,且 1<e<f(n)。 (5)计算 d(私钥),使得 de≡1 mod f(n)成立。这个公式也可以表达为 d ≡e-1 mod f(n), ≡是数论中表示同余的符号。公式中,≡符号的左边必须和符号右边同余,也就是两边模运算 结果相同。显而易见,不管 f(n)取什么值,符号右 边 1 mod f(n)的结果都等于 1;符号的左 边 d 与 e 的乘积做模运算后的结果也必须等于 1。这就需要计算出 d 的值,让这个同余等式能 够成立。 (6)公钥 KU=(e,n),私钥 KR=(d,n)。 (7)加密时,先将明文变换成 0 至 n-1 的一个整数 M。若明文较长,可先分割成适当的组,