RSA加密算法是一种非对称加密算法,在公开密钥加密和电子商业中被广泛使用。RSA是由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)在1977年一起提出的。当时他们三人都在麻省理工学院工作。RSA 就是他们三人姓氏开头字母拼在一起组成的。
0x01 安全保证
安全性依赖于大整数分解的难题:寻找两个不同的大素数是容易的,但将两个大素数的乘积分解成原来的两个素数是极其困难的。
0x02 具体内容
假设Bob想给Alice送一个消息m:
- 选择两个大素数 p 和 q ,计算 n = p q n=p q n=pq;
- 随机选取整数e和 d ,满足 e d ≡ 1 ( m o d φ ( n ) ) e d \equiv 1(\bmod \varphi(n)) ed≡1(modφ(n)) ,其中 φ ( n ) \varphi(n) φ(n) 为 n n n的欧拉函数;( r = φ ( n ) = φ ( p ) φ ( q ) = ( p − 1 ) ( q − 1 ) r = \varphi(n)=\varphi(p) \varphi(q)=(p-1)(q-1) r=φ(n)=φ(p)φ(q)=(p−1)(q−1),选择一个小于 r 的整数 e,使 r 与 e 互质,并求得 e 关于 r 的模逆元,命名为 d 求 $ e d \equiv 1(\bmod r)$。模逆元存在,当且仅当 e 与 r 互质。)
- 发布e和 n 为公钥, d 为私钥;
- 设明文为m,加密函数为 c ≡ E ( m ) ≡ m e ( m o d n ) c \equiv E(m) \equiv m^{e}(\bmod n) c≡E(m)≡me(modn),其中 1 < m , c < n 1<m, c<n 1<m,c<n;
- 解密函数为 m ≡ D ( c ) ≡ c d ( m o d n ) m \equiv D(c) \equiv c^{d}(\bmod n) m≡D(c)≡cd(modn)。
( n , e ) (n, e) (n,e) 是公钥, ( n , d ) (n, d) (n,d) 是私钥。Alice将她的公钥 ( n , e ) (n, e) (n,e) 传给Bob,而将她的私钥 ( n , d ) (n, d) (n,d) 藏起来。
0x03 证明
下面使用欧拉定理证明解密函数的正确性,即已知1-4,证明 5 成立。
证明:由于 c ≡ m e ( m o d n ) , c \equiv m^{e}(\bmod n), c≡me(modn), 所以 c d ≡ m e d ( m o d n ) , c^{d} \equiv m^{e d}(\bmod n), cd≡med(modn), 即证 m e d ≡ m ( m o d n ) m^{e d} \equiv m(\bmod n) med≡m(modn)
- 当
(
m
,
n
)
=
1
(m, n)=1
(m,n)=1 时,由欧拉定理知
,
m
φ
(
n
)
≡
1
(
m
o
d
n
)
,
, m^{\varphi(n)} \equiv 1(\bmod n),
,mφ(n)≡1(modn), 而由条件2知
e
d
≡
1
(
m
o
d
φ
(
n
)
)
,
e d \equiv 1(\bmod \varphi(n)),
ed≡1(modφ(n)), 即存
在整数 k , k , k, 使得 e d = k φ ( n ) + 1 , e d=k \varphi(n)+1, ed=kφ(n)+1, 因此 , m e d ≡ m k φ ( n ) + 1 ≡ m ( m o d n ) , \quad m^{e d} \equiv m^{k \varphi(n)+1} \equiv m(\bmod n) ,med≡mkφ(n)+1≡m(modn); - 当
(
m
,
n
)
≠
1
(m, n) \neq 1
(m,n)=1 时,由于
n
=
p
q
,
n=p q,
n=pq, 因此
(
m
,
n
)
=
p
(m, n)=p
(m,n)=p 或
(
m
,
n
)
=
q
,
(m, n)=q,
(m,n)=q, 即
p
∣
m
p|m
p∣m 或
q
∣
m
q | m
q∣m ,
若 p ∣ m , p| m, p∣m, 则显然 m e d ≡ m k φ ( n ) + 1 ≡ m ≡ 0 ( m o d p ) m^{e d} \equiv m^{k \varphi(n)+1} \equiv m \equiv 0(\bmod p) med≡mkφ(n)+1≡m≡0(modp);
若 p ∤ m , p\nmid m, p∤m, 则由欧拉定理知 m p − 1 ≡ 1 ( m o d p ) , m^{p-1} \equiv 1(\bmod p), mp−1≡1(modp), 于是 m k φ ( n ) + 1 ≡ m k ( p − 1 ) ( q − 1 ) + 1 ≡ m ( m o d p ) m^{k \varphi(n)+1} \equiv m^{k(p-1)(q-1)+1} \equiv m(\bmod p) mkφ(n)+1≡mk(p−1)(q−1)+1≡m(modp);
因此,对任意 m m m, m e d ≡ m k φ ( n ) + 1 ≡ m ( m o d p ) m^{e d} \equiv m^{k \varphi(n)+1} \equiv m(\bmod p) med≡mkφ(n)+1≡m(modp) 成立,同理可证,对任意 m , m e d ≡ m k φ ( n ) + 1 ≡ m ( m o d q ) m, \quad m^{e d} \equiv m^{k \varphi(n)+1} \equiv m(\bmod q) m,med≡mkφ(n)+1≡m(modq) 成立,因此 m e d ≡ m ( m o d n ) m^{e d} \equiv m(\bmod n) med≡m(modn) 成立。(同余性质10-最小公倍数)
0x04 安全性
假设偷听者Eve获得了Alice的公钥
n
n
n 和 e 以及Bob的加密消息
c
,
c,
c, 但她无法直接获得Alice的私钥
d
。
d 。
d。 要获得
d
,
d,
d, 最简单的方法是将
n
n
n 分解为
p
p
p 和
q
,
q,
q, 这样她可以得到同余方程
d
e
=
1
(
m
o
d
(
p
−
1
)
(
q
−
1
)
)
d e=1(\bmod (p-1)(q-1))
de=1(mod(p−1)(q−1)) 并解出
d
,
d,
d, 然后代入解密公式
m
≡
c
d
(
m
o
d
n
)
m\equiv c^{d} (\bmod n)
m≡cd(modn)导出
m
m
m(破密) 。
但至今为止还没有人找到一个多项式时间的算法来分解一个大的整数的因子,同时也还没有人能够证明这种算法不存在 (见因数分解)
至今为止也没有人能够证明对
n
n
n进行因数分解是唯一的从
c
c
c导出
m
m
m的方法,直到今天也还没有找到比它更简单的方法。(至少没有公开的方法)
因此今天一般认为只要
n
n
n足够大,那么黑客就没有办法了。
假如
n
n
n的长度小于或等于256位,那么用一台个人电脑在几个小时内就可以分解它的因子了。1999年,数百台电脑合作分解了一个512位长的
n
n
n。一个由Shamir 和Tromer在2003年从理论上构建的硬件TWIRL,使人们开始质疑1024位长的
n
n
n的安全性,目前推荐
n
n
n的长度至少为2048位。
1994年彼得·秀尔(Peter Shor)证明一台量子计算机可以在多项式时间内进行因数分解。假如量子计算机有朝一日可以成为一种可行的技术的话,那么秀尔的算法可以淘汰RSA和相关的派生算法。(即依赖于分解大整数困难性的加密算法)
假如有人能够找到一种有效的分解大整数的算法的话,或者假如量子计算机可行的话,那么在解密和制造更长的钥匙之间就会展开一场竞争。但从原理上来说RSA在这种情况下是不可靠的。
0x05 参考
- 《信息安全数学基础》(主编:常相茂 周玉倩)
- 维基百科