RSA原理

RSA前置知识

前置知识1: 互质关系

1. 任意两个质数构成互质关系,比如13和61。

2. 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如3和10。

3. 如果两个数之中,较大的那个数是质数,则两者构成互质关系,比如97和57。

4. 1和任意一个自然数是都是互质关系,比如1和99。

5. p是大于1的整数,则p和p-1构成互质关系,比如57和56。

6. p是大于1的奇数,则p和p-2构成互质关系,比如17和15。

前置知识2: 中国剩余定理

前置知识3: 欧拉函数

欧拉函数就是问 : 任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?
我们有φ(n)表示这个值, 我们一步一步讨论.

  1. 如果n=1,则 φ(1) = 1 。因为1与任何数(包括⾃⾝)都构成互质关系。
  2. 如果n是质数,则 φ(n)=n-1 。因为质数与⼩于它的每⼀个数,都构成互质关系。⽐如5与1、2、3、4都构成互质关系。
  3. 如果n是质数的某⼀个次⽅,即 n = p^k (p为质数,k为⼤于等于1的整数),则 φ ( p k ) = p k − p k − 1 = p k ( 1 − 1 / p ) φ(p ^k) =p^k-p^{k-1}=p^k(1-1/p) φ(pk)=pkpk1=pk(11/p)
    因为只有当⼀个数不包含质数p, 才可能与n互质。⽽包含质数p的数⼀共有p(k-1)个,即1×p、2×p、3×p、…、p(k-1)×p,把它们去除,剩下的就是与n互质的数。
    可以看出,上⾯的第⼆种情况是 k=1 时的特例.
  4. 如果n能分解成两个互质整数之积, 即:n=p1xp2, 则 φ(n) = φ(p1*p2) = φ(p1)φ(p2)
    这⼀条的证明要⽤到"中国剩余定理",这⾥就不展开了,只简单说⼀下思路:如果a与p1互质(a<p1),b与p2互质(b<p2),c与p1p2互质(c<p1p2),则c与数对 (a,b) 是⼀⼀对应关系。由于a的值有φ(p1)种可能,b的值有φ(p2)种可能,则数对 (a,b) 有φ(p1)φ(p2)种可能,⽽c的值有φ(p1p2)种可能,所以φ(p1p2)就等于φ(p1)φ(p2)。
  5. 因为任意⼀个⼤于1的正整数,都可以写成⼀系列质数的积。 n = p 1 k 1 ∗ p 2 k 2 ∗ p 3 k 3 . . . p r k r n=p1^{k1}*p2^{k2}*p3^{k3}...pr^{kr} n=p1k1p2k2p3k3...prkr
    根据4得: φ ( n ) = φ ( p 1 k 1 ) φ ( p 2 k 2 ) φ ( p 3 k 3 ) φ ( p r k r ) φ(n)=φ(p1^{k1})φ(p2^{k2})φ(p3^{k3})φ(pr^{kr}) φ(n)=φ(p1k1)φ(p2k2)φ(p3k3)φ(prkr)
    根据3得: φ ( n ) = p 1 k 1 p 2 k 2 . . . p r k r ( 1 − 1 / p 1 ) ( 1 − 1 / p 2 ) . . . ( 1 − 1 / p r ) φ(n)=p1^{k1}p2^{k2}...pr^{kr}(1-1/p1)(1-1/p2)...(1-1/pr) φ(n)=p1k1p2k2...prkr(11/p1)(11/p2)...(11/pr)
    得到结论: φ ( n ) = n ( 1 − 1 / p 1 ) ( 1 − 1 / p 2 ) . . . ( 1 − 1 / p n ) φ(n)=n(1-1/p1)(1-1/p2)...(1-1/pn) φ(n)=n(11/p1)(11/p2)...(11/pn)

前置知识4: 欧拉定理

欧拉定理: 如果两个正整数如果两个正整数a和和n互质,则互质,则n的欧拉函数的欧拉函数 φ(n) 可以让下⾯的等式成可以让下⾯的等式成⽴: a φ ( n ) ≡ 1 ( m o d n ) a^{φ(n)}≡1(mod n) aφ(n)1(modn)
也就是说,a的φ(n)次⽅被n除的余数为1。或者说,a的φ(n)次⽅减去1,可以被n整除。

证明欧拉定理:设 x1, x2, x3 , …, xφ(n) 是1到n里与n互质的数, 容易发现他们模n两两不同, 且余数都与n互质, (因为模了之后还是原数
然后我们发现ax1, ax2, …axφ(n)正好也有以上性质.
证明模n互质: 反正法:假设模n之后有相同的,则axi≡axj, 则 a(xi-xj) ≡ 0(mod n), 因为a与n互质, xi-xj不可能是n的倍数,所以不成立.
证明余数都与n互质: a与n互质, xi与n互质, 所以axi也与n互质
有了这两个性质,我们发现ax1, ax2, …axφ(n)模n后一定是x1, x2, x3 , …, xφ(n) .
所以得到:x1 x2 x3 … xφ(n) ≡ ax1 ax2…axφ(n) (mod n)==> 1 ≡ a^φ(n)(mod n)

欧拉函数的特殊情况(费马小定理):
假设正整数a与质数与质数p互质, 因为质数互质, 因为质数p的的φ§等于p-1,则欧拉定理可以写为: a p − 1 ≡ 1 ( m o d p ) a^{p-1}≡1(mod p) ap11(modp)

前置知识5: 模反元素

如果两个正整数如果两个正整数a和和n互质,那么⼀定可以找到整数b,使得 ab-1 被n整除,或者说ab被n除的余数是1。这时,b就叫做a的"模反元素"。 a b ≡ 1 ( m o d n ) ab≡1(mod n) ab1(modn)
欧拉定理可以⽤来证明模反元素必然存在: a φ ( n ) = a ∗ a φ ( n ) − 1 ≡ 1 ( m o d n ) a^{φ(n)}=a*a^{φ(n)-1}≡1(mod n) aφ(n)=aaφ(n)11(modn)

前置知识6: 扩展欧几里得算法

RSA算法原理

RSA加密

第一步: 随机选择两个不相等的质数p和q.
第二步: 计算p和q的乘积n.
第三步: 计算n的欧拉函数
φ(n) = (p-1)(q-1)
第四步: 随机选择一个整数e, 条件是1<e <φ(n),且e与φ(n)互质.
第五步: 计算e对于φ(n)的模反元素d.
e d ≡ 1 ( m o d φ ( n ) ) ed≡1 (mod φ(n)) ed1(modφ(n))
这个式子等价于: e d − 1 = k φ ( n ) ed - 1 = kφ(n) ed1=kφ(n)
找到d,就是对下面的二元一次方程求解: e x + φ ( n ) y = 1 ex + φ(n)y = 1 ex+φ(n)y=1
用扩展欧几里得算法求解; 得到d
第六步: 将n和e封装成公钥,n和d封装成私钥
RSA算法的可靠性
目前我们一共接触到了 六 个数字:
p q n φ(n) e d
这六个数字之中, 公钥的n和e公开, 其余四个数字不公开. 其中最关键的是d, 因为n和d组成了私钥, 一旦d泄露, 就等于私钥泄漏.
那么,有无可能在已知n和e的情况下,能不能退导出d呢?
(1)ed≡1 (mod φ(n)). e公开, 只有知道和φ(n), 才能算出d。
(2)φ(n)=(p-1)(q-1). 只有知道p和q, 才能算出φ(n)。
(3) n=pq. 只有将n因数分解, 才能算出p和和q。
结论: 如果n可以被分解, d就可以算出来, 私钥就能被破解.
但是目前破解最长RSA密钥就是768位.

RSA的加解密

解密要用到公钥(n,e),密文是m(字符串取unicode值), 且m小于n. m e ≡ c ( m o d n ) m^e ≡ c (mod n) mec(modn)
解密要用到私钥(n,d) c d ≡ m ( m o d n ) c^d ≡ m (mod n) cdm(modn)

私钥解密的证明

因为: m^e ≡ c (mod n)
==> c = m^e - kn 把c带入解密规则(c^d ≡ m (mod n))中:
==> (m^e - kn)^d ≡ m (mod n) 等同于:
==> m^ed ≡ m (mod n) 由于ed ≡ 1 (mod φ(n))及ed = hφ(n)+1
==> m^(hφ(n)+1) ≡ m (mod n)
接下来分为两种情况:
(1) m与n互质.
数论知识1: a ≡ b (mod n) ==> a^c ≡ b^c (mod n)
数论知识2: a ≡ b (mod n) ==> ac ≡ bc (mod n)
根据欧拉定理,此时
==> m^φ(n) ≡ 1 (mod n) 由于数论知识1,2可得:
==> (mφ(n))h x m ≡ m (mod n) 化简:
==> m^(hφ(n)+1) ≡ m (mod n)
得证.
(2) m与n不互质:
因为n=pq, 所以m必然是kp或者kq
以m=kp为例,因为k和q必须互质(q是质数),根据欧拉定理:
==> (kp)^(q-1) ≡ 1 (mod q) 更具数论1,2
==> [(kp)(q-1)]h(p-1) x kp ≡ kp (mod q)
==> 由于ed ≡ 1 (mod φ(n))及ed = hφ(n)+1
==> (kp)^ed ≡ kp (mod q)
==> (kp)^ed ≡ tq + kp 同时整除p,又因p,q互质,所以t一定是p的倍数
==> (kp)^ed ≡ t’pq + kp 因为m =kp ,n = pq
==> m^ed ≡ m (mod n)
得证.

  • 54
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值