RSA算法过程与正确性推导

1.密钥生成

(1). 选两个保密的大素数 p , q p,q p,q.
(2). 计算 n = p × q , ϕ ( n ) = ( p − 1 ) ( q − 1 ) , ϕ ( n ) n=p\times q,\phi(n)=(p-1)(q-1),\phi(n) n=p×q,ϕ(n)=(p1)(q1),ϕ(n) n n n欧拉函数值
注:与 n n n互素的剩余类个数称为欧拉函数值 ϕ ( n ) \phi(n) ϕ(n),素数 p p p的欧拉函数值为 ϕ ( p ) = p − 1 \phi(p)=p-1 ϕ(p)=p1
(3). 选取整数 e , 1 < e < ϕ ( n ) e,1<e<\phi(n) e,1<e<ϕ(n), g c d ( ϕ ( n ) , e ) = 1 gcd(\phi(n),e)=1 gcd(ϕ(n),e)=1(互素)
(4). 计算 d d d,满足 d ⋅ e = 1 m o d ( ϕ ( n ) ) d\cdot e=1mod(\phi(n)) de=1mod(ϕ(n)),即 d d d e e e ϕ ( n ) \phi(n) ϕ(n)的逆元, e e e ϕ ( n ) \phi(n) ϕ(n)互素,故一定有逆元 d d d
注:对任意两个整数 a , b a,b a,b,存在整数 x , y x,y x,y,使得 g c d ( a , b ) = x a + y b gcd(a,b)=xa+yb gcd(a,b)=xa+yb。所以因 e e e ϕ ( n ) \phi(n) ϕ(n),所以存在 x e + y ϕ ( n ) = 1 xe+y\phi(n)=1 xe+yϕ(n)=1,模去 ϕ ( n ) \phi(n) ϕ(n) x e = 1 ( m o d   ϕ ( n ) ) xe=1(mod ~\phi(n)) xe=1(mod ϕ(n))
(5). { e , n } \{e,n\} {e,n}为公钥, { d } \{d\} {d}为私钥

2.加密

对明文分组,使每一个分组十进制值小于 n n n,每个分组 m m m做以下计算 c = m e ( m o d   n ) c=m^e(mod ~n) c=me(mod n)

3.解密

m = c d ( m o d   n ) m=c^d(mod~n) m=cd(mod n)

正确性验证:

c d ( m o d   n ) = m e d ( m o d   n ) = m k ϕ ( n ) + 1 ( m o d   n ) c^d(mod~n)=m^{ed}(mod~n)=m^{k\phi(n)+1}(mod~n) cd(mod n)=med(mod n)=mkϕ(n)+1(mod n)
1.若 m , n m,n m,n互素,欧拉定理(若 r , m r,m r,m互素,则 r ϕ ( m ) = 1 ( m o d   m ) r^{\phi(m)}=1(mod~m) rϕ(m)=1(mod m))得: m k ϕ ( n ) m ( m o d   n ) = m ( m o d   n ) m^{k\phi(n)}m(mod~n)=m(mod~n) mkϕ(n)m(mod n)=m(mod n), m < n m<n m<n,得 m m m.
2. m , n m,n m,n不互素,则 g c d ( m , n ) ≠ 1 gcd(m,n)\neq 1 gcd(m,n)=1,因为 n = p q n=pq n=pq p , q p,q p,q都为大素数,所以可以知道 m m m p p p的倍数或 q q q的倍数。
不妨设 m = t p m=tp m=tp,则有 g c d ( m , q ) = 1 gcd(m,q)=1 gcd(m,q)=1否则 m m m p q pq pq的倍数,与 m < n = p q m<n=pq m<n=pq矛盾。所以有 m ϕ ( q ) = 1 ( m o d   q ) m^{\phi(q)}=1(mod~q) mϕ(q)=1(mod q), m k ϕ ( q ) = 1 ( m o d   q ) m^{k\phi(q)}=1(mod~q) mkϕ(q)=1(mod q), [ m k ϕ ( q ) ] ϕ ( p ) = 1 ( m o d   q ) [m^{k\phi(q)}]^{\phi(p)}=1(mod~q) [mkϕ(q)]ϕ(p)=1(mod q), m k ϕ ( n ) = 1 ( m o d   q ) m^{k\phi(n)}=1(mod~q) mkϕ(n)=1(mod q)
所以存在整数 r r r, m k ϕ ( n ) = 1 + r q m^{k\phi(n)}=1+rq mkϕ(n)=1+rq两边乘以 m = t p m=tp m=tp,得 m k ϕ ( n ) + 1 = m + r t p q = m + r t n m^{k\phi(n)+1}=m+rtpq=m+rtn mkϕ(n)+1=m+rtpq=m+rtn,即 m k ϕ ( n ) + 1 = m ( m o d   n ) m^{k\phi(n)+1}=m(mod~n) mkϕ(n)+1=m(mod n)
所以得 c d ( m o d   n ) = m c^{d}(mod~n)=m cd(mod n)=m.

举例:

1.密钥生成

(1). 选两个保密的大素数 p = 3 , q = 7 p=3,q=7 p=3,q=7.
(2). 计算 n = p × q = 21 , ϕ ( n ) = ( p − 1 ) ( q − 1 ) = 2 ∗ 6 = 12 , ϕ ( n ) n=p\times q=21,\phi(n)=(p-1)(q-1)=2*6=12,\phi(n) n=p×q=21,ϕ(n)=(p1)(q1)=26=12,ϕ(n) n n n欧拉函数值
(3). 选取整数 e = 5 , 1 < e < 12 e=5,1<e<12 e=5,1<e<12, g c d ( 12 , 5 ) = 1 gcd(12,5)=1 gcd(12,5)=1
(4). 计算 d d d,满足 d ⋅ e = 1 m o d ( ϕ ( n ) ) d\cdot e=1mod(\phi(n)) de=1mod(ϕ(n))用辗转相除可得 5 ∗ 5 = 1 ( m o d   21 ) 5*5=1(mod~21) 55=1(mod 21),所以 d = 5 d=5 d=5
(5). { e = 5 , n = 21 } \{e=5,n=21\} {e=5,n=21}为公钥, { d = 5 } \{d=5\} {d=5}为私钥

2.加密

对明文 10011010 10011010 10011010分组, n n n=21,每个分组1: m = 1001 = 9 m=1001=9 m=1001=9,分组2: m = 1010 = 10 m=1010=10 m=1010=10做以下计算
分组1:
c = m e ( m o d   n ) = 9 5 ( m o d 21 ) = 18 c=m^e(mod ~n)=9^5(mod21)=18 c=me(mod n)=95(mod21)=18
分组2:
c = m e ( m o d   n ) = 1 0 5 ( m o d 21 ) = 19 c=m^e(mod ~n)=10^5(mod21)=19 c=me(mod n)=105(mod21)=19

3.解密

分组1: m 1 = c d ( m o d   n ) = 1 8 5 ( m o d 21 ) = 9 m1=c^d(mod~n)=18^{5}(mod21)=9 m1=cd(mod n)=185mod21=9
分组2: m 2 = 1 9 5 ( m o d 21 ) = 10 m2=19^{5}(mod 21)=10 m2=195(mod21)=10

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅逼码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值