zoukankan      html  css  js  c++  java
  • RSA简介(一)——数论原理

      版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址
    
      http://www.cnblogs.com/Colin-Cai/p/7259802.html 
    
      作者:窗户
    
      QQ:6679072
    
      E-mail:6679072@qq.com
    

      RSA是最常用的非对称加密算法。

      所谓非对称加密,就是说有两个密钥,一个密钥加密只可以用另外一个密钥解密,一般一个作为公钥,公开给所有人用来加密用,而另一个用来解密其他拥有公钥的加密结果,叫做私钥。另外,拥有私钥者可以用私钥加密信息,公钥可以解密获得加密内容,从而验证私钥拥有者的身份,这是一种特殊的加密,叫签名。

      RSA涉及到5个整数,关系如下:

      p和q都是质数;

      N=p*q;

      找一个1<e1<(p-1)(q-1),使得e1与(p-1)(q-1)互质;(互质的意思是两个数的最小公约数为1)

      再找一个1<e2<(p-1)(q-1),使得e1*e2 % (p-1)(q-1) = 1;(%在这里的意思除法取余数,我不采用数学的mod符号 )

      (N,e1)数对和(N,e2)数对是我们所需要的两个密钥,至于p/q,一旦生成密钥就应该及时销毁,因为它除了可以让人窃取了之后直接破解之外,没有任何其他的作用。

      对于任何满足1<A<N的整数A,使用(N,e1)加密就是

      B=Ae1%N

      对B解密,就是

      A=Be2%N

      实际上,整数a和b互质有两个等价定义:

      (1)a和b的最大公约数为1;

      (2)存在整数c,d,使得ac+bd=1

      两个定义的等价性证明中直接包含找e2的算法,放以后再讲。

      对于所有小于N的正整数,建立一种二元运算,计作a#b,

      定义a#b = a*b%N,称为模乘。

      先看所有小于N且与N互质的正整数下的模乘,看看这些整数在N模乘下成一种什么样的代数系统。

      因为a,b与N互质,所以a*b与N互质,所以a*b%N也与N互质,所以运算满足封闭性,

      又易证,a#b#c = a#(b#c) = a*b*c%N ,也就是满足结合律,

      从而,所有小于N并与N互质的数在#二元运算下成一半群,而且是有限半群,

      所有的有限半群是群,所以所有小于N并与N互质的数在#二元运算下成一个群。

      因为N=p*q,p和q都是质数,所有小于N并与N不互质的数都是p或者q的倍数,p的倍数小于N的一共q-1个,q的倍数小于N的一共p-1个

      所以这个群的阶(元素的个数)就是p*q-1-(q-1)-(p-1) = p*q-p-q+1=(p-1)(q-1),其e元为1。

      

      再看看小于N且与N不互质的正整数上的模乘,分两类,一类是有因数p,一类有因数q。

      先看所有有因数p的模乘,也就是p,2p...(q-1)p下的模乘,

      显然,其中任何两个数的乘积都有因数p2,再除以pq的余数也依然有因数q,所以依然在p.....(q-1)p之中,

      所以模乘满足封闭性,同样,模乘也满足结合律,

      从而是有限半群,从而是群,该群的阶为q-1,其e元记作ep

      同理可得,有因数q的所有小于N的正整数在模乘下也是一个群,阶为p-1,其e元记作eq

      

      我们再定义一符号,a##n为n个a的模乘,

      上面加密,B=Ae1%N,也就是B=A##e1,

      那么Be2%N也就是(A##e1)##e2 = A##(e1*e2),

      根据抽象代数知识,有限群的任何一个元素的周期是阶的因数,

      因为e1*e2除以(p-1)(q-1)等于1,则存在一个正整数k,使得e1*e2 = k(p-1)(q-1)+1,则

      如果A与N互质,与N互质的数的模乘群的阶为(p-1)(q-1),

      A##((p-1)(q-1)) = 1

      所以A##(e1*e2) = A##(k(p-1)(q-1)+1)

              =  A # (A##((p-1)(q-1)) ## k

              = A # (1##k)

              = A#1

              = A,

      如果A与N有公约数p,则

      该群的阶为q-1,

      所以A##(q-1)=ep

      所以A##(e1*e2) = A##(k(p-1)(q-1)+1)

              =  A # (A##(q-1) ## (k(p-1))

              = A # (ep##(k(p-1))

              = A#ep

              = A,

      同理,如果A与N有公约数q,

      A##(e1*e2) = A,

      所以

      Be2%N = A##(e1*e2)

          = A,

      这就是RSA加密解密之所以可以成立的原理,e1/e2可以互换,等式上依然成立,也就是说从数学原理上公钥私钥可以互换,

      但一般公钥的指数很短,这样破解就会变的很容易,在这种意义上,公钥私钥是不可以互换的。

  • 相关阅读:
    Samba 4.0 RC3 发布
    SymmetricDS 3.1.7 发布,数据同步和复制
    Express.js 3.0 发布,Node.js 的高性能封装
    GIFLIB 5.0.1 发布,C语言的GIF处理库
    jQuery UI 1.9.1 发布
    SVN Access Manager 0.5.5.14 发布 SVN 管理工具
    DynamicReports 3.0.3 发布 Java 报表工具
    HttpComponents HttpClient 4.2.2 GA 发布
    AppCan 2.0 正式发布,推移动应用云服务
    Ruby 2.0 的新功能已经冻结
  • 原文地址:https://www.cnblogs.com/Colin-Cai/p/7259802.html
Copyright © 2011-2022 走看看