RSA算法的介绍
-
RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两个大素数之积(这是公认的数学难题)。 RSA的公钥、私钥的组成,以及加密、解密的公式可见于下表:
名称 描述 公钥 KU n: 两个素数p和q的乘积(p和q必须保密)
e: 与(p-1)(q-1)互质私钥 KR d: ( m o d ( p − 1 ) ( q − 1 ) ) e \dfrac{(mod(p-1)(q-1))}{e} e(mod(p−1)(q−1))
n : p ∗ q p * q p∗q加密 C = m e m o d ( n ) m^e mod(n) memod(n) 解密 m = C d m o d ( n ) C^d mod(n) Cdmod(n)
重要知识点
- 小学数学教材对互质数是这样定义的:“公约数只有1的两个数,叫做互质数。”这里所说的“两个数”是指自然数。
判别方法主要有以下几种(不限于此):
- (1)两个质数一定是互质数。例如,2与7、13与19。
- (2)一个质数如果不能整除另一个合数,这两个数为互质数。例如,3与10、5与 26。
- (3)1不是质数也不是合数,它和任何一个自然数在一起都是互质数。如1和9908。
- (4)相邻的两个自然数是互质数。如 15与 16。
- (5)相邻的两个奇数是互质数。如 49与 51。
- (6)大数是质数的两个数是互质数。如97与88。
- (7)小数是质数,大数不是小数的倍数的两个数是互质数。如 7和 16。
- (8)两个数都是合数(二数差又较大),小数所有的质因数,都不是大数的约数,这两个数是互质数。如357与715,357=3×7×17,而3、7和17都不是715的约数,这两个数为互质数。等等。
开始解析RSA算法加密解密过程
- 1.选择一对 不同的、足够大 的素数p, q
- 2.计算 n = p q n=pq n=pq
- 3.计算 f ( n ) = ( p − 1 ) ( q − 1 ) f(n) = (p-1)(q-1) f(n)=(p−1)(q−1), 同时对p,q严加保密,不让任何人知道。
- 4.找一个与f(n)互质数e
- 5.计算d, 是的d= ( m o d ( f ( n ) ) e \dfrac{(mod(f(n))}{e} e(mod(f(n))
注释: d 的计算方式 由于流程图里不能使用(), 所以用F 表示 f(n), 且 1 < e < f ( n ) 1 < e < f(n) 1<e<f(n)
模拟计算一次
-
- p=3 , q =11
-
- n=33
-
- f(n)=20
-
- e=13
-
- d=17 | 37 | …