RSA加密算法
RSA 是第一个公开发布的、可用于实际加密和签名的非对称加密算法,是一种基于大整数因子分解难题的公钥加密算法,广泛用于安全通信、数字签名等领域。其核心思想是利用 大素数的乘积难以分解 这一数学难题来保证安全性。在进入正题前我们先分析下大整数因子分解难题。
大整数因子分解难题
因数分解的理论依据是”算术基本定理“:任何大于1的自然数都可以分解成素因数的连乘积形式,如果不计素因数在乘积中的顺序,这种分解还是惟一的。例如, 105 = 3 ∗ 5 ∗ 7 = 5 ∗ 7 ∗ 3 = 7 ∗ 3 ∗ 5 105= 3* 5*7= 5* 7* 3= 7* 3* 5 105=3∗5∗7=5∗7∗3=7∗3∗5,其中因数的顺序不同,但只有 3、5、7 这三个素因数是唯一确定的。
一个数的素性检测已经变得不再困难,例如下用一台每秒可作1000 亿次运算的电子计算机,下表给出用上述计算机采用不同方法判定素性的时间比较:
时间复杂度对比
那是否代表着给出一个大合数去计算唯一的素因子分解变得轻松了呢,其实不然,虽然素性检测一定程度上有利于计算大数的素因子分解,但是现代计算机依然很难去计算出大合数唯一的素因子分解。因此引出密码学的大整数素因子难分解问题的定义:
假设 N 是一个合数,且 N = p ∗ q ,其中 p 和 q 都是大于 1 的大素数。仅给定 N ,现在计算机无法找到 p 和 q 。 假设N是一个合数,且N=p*q,其中p和q都是大于1的大素数。仅给定N,现在计算机无法找到p和q。 假设N是一个合数,且N=p∗q,其中p和q都是大于1的大素数。仅给定N,现在计算机无法找到p和q。
RSA加密算法
步骤 1:密钥生成
-
选择两个大素数 p , q p,q p,q(建议大于1024位),计算 n = p ∗ q n=p*q n=p∗q(使得安全位数超2048位)
-
计算欧拉函数 φ ( N ) = ( p − 1 ) × ( q − 1 ) φ(N) = (p-1) × (q-1) φ(N)=(p−1)×(q−1)
-
选择公钥指数 e e e,要求 1 < e < φ ( N ) 1 < e < φ(N) 1<e<φ(N),且 e e e与 φ ( N ) φ(N) φ(N) 互素: g c d ( e , φ ( N ) ) = 1 gcd(e, \varphi(N)) = 1 gcd(e,φ(N))=1
- 常用的 e e e值: e = 65537 e = 65537 e=65537( 2 16 + 1 2^{16} + 1 216+1,计算高效)
-
计算私钥指数 d,满足: d × e ≡ 1 ( m o d φ ( N ) ) d \times e \equiv 1 \pmod{\varphi(N)} d×e≡1(modφ(N))
-
d 是 e 在 mod φ(N) 下的乘法逆元: d = e − 1 m o d φ ( N ) d = e^{-1} \mod \varphi(N) d=e−1modφ(N)
-
计算 d 可使用扩展欧几里得算法。
-
最终,得到:
- 公钥 ( e , N ) (e, N) (e,N)(用于加密)
- 私钥 ( d , N ) (d, N) (d,N)(用于解密)
步骤 2:加密
输入信息 m m m,得到密文 C = m e ( m o d n ) C=m^e \pmod{n} C=me(modn)
步骤 3:加密
输入信息 m m m,得到密文 m = C d ( m o d n ) m=C^d \pmod{n} m=Cd(modn)
RAS加密解析
基于前面的困难问题去生成对应的公私钥,选择两个大素数 p , q p,q p,q(建议大于1024位),计算 n = p ∗ q n=p*q n=p∗q(使得安全位数超2048位)。再基于 p , q p,q p,q去计算公私钥。
这个公私钥的是基于欧拉定理和费马定理来实现加解密的。
欧拉定理:若 n n n和 a a a 互素(即 g c d ( a , n ) = 1 gcd(a,n)=1 gcd(a,n)=1, n n n和 a a a 的公因子只有 1 1 1),则: a ϕ ( n ) ≡ 1 ( m o d n ) a^{ϕ(n)}≡1\pmod{n} aϕ(n)≡1(modn),其中, ϕ ( n ) \phi(n) ϕ(n) 是欧拉函数,表示小于 n n n且与 n n n 互素的数的个数。
费马定理: 若 p p p 是素数,对于任意整数 a a a (且 a a a 不被 p p p 整除,即 a ≢ 0 m o d p a \not\equiv 0 \mod p a≡0modp),则有: a p − 1 ≡ 1 ( m o d p ) a^{p-1} \equiv 1 \pmod{p} ap−1≡1(modp),换句话说, a a a 的 p − 1 p−1 p−1次方模 p p p 总是等于 1。
从欧拉定理结合 n = p ∗ q n=p*q n=p∗q很容易分析出,若信息 a a a 与 n n n互素,若采用 a e d ( m o d n ) = a ( m o d n ) a^{ed}\pmod{n} =a \pmod{n} aed(modn)=a(modn),则希望公钥 e e e和私钥 d d d的乘积为 e d = ϕ ( n ) + 1 ed=ϕ(n)+1 ed=ϕ(n)+1,即其关系为 e d = k ϕ ( n ) + 1 ed=kϕ(n)+1 ed=kϕ(n)+1, a e d ( m o d n ) = a ( m o d n ) a^{ed}\pmod{n} =a \pmod{n} aed(modn)=a(modn)都成立。
而与 n = p ∗ q n=p*q n=p∗q不互素的情况,当且仅当 a a a的值取 p , q p,q p,q的倍数时。此概率可忽略不计。