RSA加密

RSA加密是典型的非对称加密算法。RSA加密主要由五个部分组成:

  • 原文M
  • 密文C
  • 公钥PU和私钥PR
  • 加密算法E(x)
  • 解密算法D(x)

RSA算法的实现整体又分为三个过程:

  • 生成密钥对
  • 加密
  • 解密

实现上述三个步骤用到了六个数学变量p,q,n,φ(n),e,d,下文将会说明。

rsajm

简单理解下RSA加密:任何计算机信息都能转换成二进制,也能转换成十进制整数。这里M是一个整数,选择一个数字e进行M的e次方运算,再选取整数N进行取模运算,结果用c表示。比如整数7用公钥(2,23)进行加密后得到密文3,我们可以看到给定M,e,N是很容易算出C的,但是给定e,n,C却很难得出M。这个时候我们就要用到私钥(d,n)来进行解密得到M,RSA的算法规则在适当的选择e和N的前提下一定存在一个d使得C^d mod n=M。RSA最复杂的地方在于如何适当的选择e和n,又如何运算出d。

数学基础

  1. 素数

    质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。
    
  2. 同余

     ≡ :同余号。两个整数a,b,若它们除以整数m所得的余数相等,则称a,b对于模m同余
    记作 a ≡ b (mod m) 
    # 3 mod 2 ≡ 1
    
  3. 互质

    互质是公约数只有1的两个整数,叫做互质整数。
     * 任意两个质数构成互质关系,比如13和61
     * 一个数是质数,另一个数只要不是前者的倍数,两者就构成互质关系,比如3和10
     * 如果两个数中,较大的那个数是质数,则两者构成互质关系,比如97和57
    	以上两条规则,可以抽象为ー条:质数,和不为自己倍数的自然数互质。
     * 1和任意一个自然数都是互质关系
     * p是大于1的整数,则p和p-1构成互质关系,比如57和56
     * p是大于1的奇数,则p和p-2构成互质关系,比如17和15
    
  4. 平方剩余

    假设p是素数,a是整数。 如果存在一个整数x使得x^2≡a(mod p) (即x^2-a可以被p整除), 那么就称a在p的同余类中是平方剩余的。
    
  5. 欧拉函数

    给定任意正整数n,计算在小于等于n的正整数中,有多少个与n构成互质关系,计算这个值的方法叫做欧拉函数。
    
    • 第一种情况:

      如果n=1,则φ(1)=1。1与任何自然数都构成互质。

    • 第二种情况:

      如果n是质数,则φ(n)=n-1。质数与每个小于他的数都构成互质。

    • 第三种情况:

      如果n是质数的某一个次方,即n=p^k(p为质数,k<=1),则

      [φ(p^k)=p^k-p^{k-1}=p^{K(1-frac1p)} ]

    • 第四种情况:

      n可以分解成两个互质的整数之积,n=p1*p2,则φ(n)=φ(p1p2)=φ(p1)φ(p2)。

    • 第五种情况:

      任意大于1的整数,都可以写成一系列质数的积。

      [n=p^{k1}_1p^{k2}_2p^{k3}_3...p^{kr}_r ]

      根据第四条结论

      [φ(n)=φ(p^{k1}_1)φ(p^{k2}_2)...φ(p^{kr}_r) ]

      根据第三条结论

      [φ(n)=p^{k1}_1p^{k2}_2p^{k3}_3...p^{kr}_r(1-frac1{p1})(1-frac1{p2})...(1-frac1{pr}) ]

      等于

      [φ(n)=n(1-frac1{p1})(1-frac1{p2})...(1-frac1{pr}) ]

      例:

      [φ(1323)=φ(3^2*7^2)=1323*(1-frac13)(1-frac17)=756 ]

  6. 欧拉定理

    如果两个正整数a和n互质,则n的欧拉函数φ(n)可以让下面的式子成立:

    [a^{φ(n)}≡1(mod\,n) ]

    a的φ(n)次方减去1能被n整除

  7. 费马小定理(费马小定理是欧拉定理的一个特例)

    如果p是一个质数,而整数a不是p的倍数,则

    [a^{p-1}≡1(mod\,p) ]

  8. 模反元素

    如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除

    [ab≡1(mod\,n) ]

RSA加密过程

生成密钥对

  1. 随机生成两个足够大的素数p,q
  2. 计算公共模数 n=p*q
  3. 计算欧拉函数φ(n)=(p−1)∗(q−1)p,q必须严格保密。
  4. 选取一个与φ(n)互质的数e作为公钥指数,且1<e<φ(n)。公钥PU=(e,n)
  5. 计算私钥指数d,d满足(d*e)mod φ(n)=1私钥PR=(d,n)

加密

[C=M^emod\,n(C为密文) ]

解密

[M=C^dmod\,n(M为明文) ]

目前被破解的最长RSA密钥就是768位,因此我们认为1024位以上的密钥长度是安全的。

原文地址:https://www.cnblogs.com/yangyu-IoT/p/13069804.html