贝祖等式和编程实现涉及的坑比较深,此外数论背景部分要加上实例说明,待更新。
1 RSA加密算法简介
1.1 RSA算法实现步骤[3]
RSA算法是一种典型的非对称加密算法,本小节将简要介绍RSA算法的实现步骤,对RSA算法原理的分析则留到第3章叙述。RSA算法实现通信的加、解密分为6个步骤,如下:
1)
比如 p与q越大,越安全。
2)
转化为二进制1001010010101,该加密算法即为13位,实际算法是1024位或2048位,位数越长,算法越难被破解。
3)
欧拉函数的定义见定义2.1.7,根据定理2.2.12及定理2.2.17易知,
于是有
4)
两整数互素的定义见定义2.1.4,此处,随机选择
需要注意的是,不能选择e=4619,如果选择这个作为公钥,会使公钥、私钥相同。
5)
模反元素的定义详见定义2.1.12,
根据定义2.1.12,有
根据定义2.1.2 同余的定义以及定义2.1.1 整除的定义,上式等价于:
式1.2.1中,
于是原式变化为,
于是,对私钥d的求解转化为求上述二元一次不定方程的一组整数特解,使用广义欧几里得除法可以很轻松地做到这一点。广义欧几里得除法将在对定理2.2.5 贝祖等式的证明中详细说明,这里不做过多介绍,仅给出d,k的一个特解:
6)
在本节实例中,公钥为: 私钥为:
实际应用中,公钥和私钥的数据都采用ASN.1格式表达。
RSA算法的加密过程如下:
比如甲向乙发送汉字“中”,乙方需先将自己的公钥(n,e) = (4757,101)以明文的形式发送给甲,甲再使用公钥加密汉字 "中", 以 utf-8 方式编码为 [e4 b8 ad],转为 10 进制为 [228,184,173]。要想使用公钥(n,e) = (4757 , 101)加密,要求被加密的数字必须小于 n,被加密的数字必须是整数,字符串可以取 ascii 值或unicode值,因此将“中”字折为三个字节 [228,184,173],分别对三个字节加密。
假设 a 为明文(a < n),b 为密文,则按下列公式计算出 b:
于是明文[228,184,173]加密为: 即[4296,2458,3263]。
RSA算法的解密过程如下:
乙收到密文,使用自己的私钥(n,d) =(4757,1601)解密,解密公式如下:
于是密文[4296,4757,3263]解密为: 解密结果为[228,184,173],再按UTF-8字符集解码[228,184,173]得到汉字“中”,完成解密。
1.2 RSA算法可靠性的简要分析[2]
1.2节中的密钥生成步骤中,共出现了6个数字:
其中,n,e以明文的形式发送,其余p,q,m,d由接收方或着说公私密钥对生成方保存。
现在考虑在已知n,e的情况下,能否推导出d?
结论:如果n可以被因数分解,d就可以算出,也就意味着私钥被破解。
可是,大整数的因数分解,是一件非常困难的事情。目前,除了暴力破解,还没有发现别的有效方法。维基百科这样写道:
"对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解愈困难,RSA算法愈可靠。
假如有人找到一种快速因数分解的算法,那么RSA的可靠性就会极度下降。但找到这样的算法的可能性是非常小的。今天只有短的RSA密钥才可能被暴力破解。到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式。
只要密钥长度足够长,用RSA加密的信息实际上是不能被解破的。"
举例来说,你可以对3233进行因数分解(61×53),但是你没法对下面这个整数进行因数分解。
12301866845301177551304949
58384962720772853569595334
79219732245215172640050726
36575187452021997864693899
56474942774063845925192557
32630345373154826850791702
61221429134616704292143116
02221240479274737794080665
351419597459856902143413
它等于这样两个素数的乘积:
33478071698956898786044169
84821269081770479498371376
85689124313889828837938780
02287614711652531743087737
814467999489
×
36746043666799590428244633
79962795263227915816434308
76426760322838157396665112
79233373417143396810270092
798736308917
事实上,这大概是人类已经分解的最大整数了(232个十进制位,768个二进制位),比它更大的因数分解,还没有被报道过,因此目前被破解的最长RSA密钥就是768位。
2 数论背景简介
在介绍RSA算法数学原理之前,需对一些数论中的基本定义、定理作简要介绍。本章节仅尝试使读者对相关定义、定理有一个基本理解,满足能应用的要求即可,对相关定理的详细证明参见第4章“相关数学定理的证明”。此外,本文并不试图构建完整、严谨的数论体系,对涉及到的数论定理的证明,基于本章节的基本定义、以及一些“直觉上很显然的事实”推出。需要系统学习数论相关知识的读者,可以研读如《柯召数论讲义》、《信息安全数学基础》等书籍。
为缩短文章篇幅,对本章节的定义、定理的描述中使用了集合论、布尔代数中的基本数学符号,相关数学符号的定义详见附录A,对于集合论、布尔代数等中学知识,限于篇幅,本文不作赘述。
2.1 基本定义[1]
定义2.1.1 整除
定义2.1.2 同余
定义2.1.3 素数、合数
定义2.1.4 公因数、最大公因数、互素
定义2.1.5 公倍数、最小公倍数
定义2.1.6 不完全商、余数
定义2.1.7 欧拉(Euler)函数
定义2.1.8 剩余、剩余类
定义2.1.9 完全剩余系
模m的剩余类有m个,即
它们作为新的元素组成的新的集合,记作
特别地,当m=p为素数时,也记作
定义2.1.10 简化剩余、简化剩余类
定义2.1.11 简化剩余系
模m的简化剩余类的全体所组成的集合记作
特别地,当m=p为素数时,也记作
定义2.1.12 模反元素
2.2 基本定理
定理2.2.1 整除的传递性
定理2.2.2 整系数线性组合
定理2.2.3
定理2.2.4 欧几里得除法
定理2.2.5 贝祖(Bezout)等式
定理2.2.6
定理2.2.7
定理2.2.8
定理2.2.9 同余的性质
定理2.2.10
定理2.2.11
定理2.2.12
定理2.2.13
定理2.2.14
定理2.2.15
定理2.2.16
定理2.2.17
定理2.2.18 欧拉(Euler)定理
定理2.2.19 费马(Fermat)小定理
定理2.2.20
定理2.2.21
定理2.2.22
定理2.2.23
定理2.2.24
定理2.2.25
3 RSA加密算法的数学原理
3.1 RSA加密算法的数学语言描述
将1.2节中对RSA加密过程的描述转化为数学语言:
1)
2)
3)
4)
5)
6)
3.2 RSA加密算法证明
对3.1节所描述的数学问题证明如下:
1)
4 相关数学定理的证明
对2.2节所列数学定理证明如下:
定理2.2.1 整除的传递性
证:
定理2.2.2 整系数线性组合
证:
定理2.2.3
证:
定理2.2.4 欧几里得除法
证:
1)存在性
2)唯一性
综1)、2),存在性、唯一性均成立,QED。
定理2.2.5 贝祖(Bezout)等式
证:
定理2.2.6
证:
1)必要性
2)充分性
综1)、2),QED。
定理2.2.7
证:
定理2.2.8
证:
1)n=2时,
2)
综1)2),以及数学归纳法,QED。
定理2.2.9 同余的性质
证:
i)
ii)
iii)
定理2.2.10
证:
i)
ii)
定理2.2.11
证:
定理2.2.12
证:
定理2.2.13
证:
定理2.2.14
证:
定理2.2.15
证:
定理2.2.16
证:
定理2.2.17
证:
定理2.2.18 欧拉(Euler)定理
证:
定理2.2.19 费马(Fermat)小定理
证:
定理2.2.20
证:
定理2.2.21
证:
i)
ii)
iii)
定理2.2.22
证:
定理2.2.23
证:
定理2.2.24
证:
定理2.2.25
证:
5 RSA加密算法编程实现
TBD
待填坑XD
附录A 术语与缩写
TBD
待填坑XD
附录B 参考文献
[1]《信息安全数学基础》 陈恭亮
[2] 阮一峰:RSA算法原理(二)
[3] somenzz:一文搞懂 RSA 算法