• 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可以互换,等式上依然成立,也就是说从数学原理上公钥私钥可以互换,

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

  • 相关阅读:
    Spring restful
    LDAP & Implementation
    Restful levels and Hateoas
    事务隔离的级别
    servlet injection analysis
    session and cookie
    write RE validation
    hello2 source analysis
    匿名函数和递归函数
    生成器和迭代器,列表推导式
  • 原文地址:https://www.cnblogs.com/Colin-Cai/p/7259802.html
Copyright © 2020-2023  润新知