3.RSA加密

作者: 木羊君 | 来源:发表于2019-01-28 10:44 被阅读0次

    一.RSA加密

         质数:一个大于1的自然数,除了1和它本身外,不能被其他自然数整除(除0以外)的数称之为质数(素数);否则称为合数

        互质数:公约数只有1的两个数,叫做互质数。

        模运算:让m去被n整除,只取所得的余数作为结果,就叫做模运算。m mod n = x

        同余:给定一个正整数m,如果两个整数a和b满足a-b能被m整除,即(a-b)modm=0,

    那么就称整数a与b对模m同余,记作a≡b(modm),同时可成立amodm=b

        欧拉函数:在数论,对正整数n,小于n的正整数中与n互质的数的数目(φ(1)=1,φ(8)=4,1,2,3,4,5,6,7与8互质)

        通式:​\varphi (x)=x\prod_{i=1}^n (1-\frac{1}{p_{i} } ),其中p1, p2……pn为x的所有质因数,x是不为0的整数。比如12=2*2*3那么\varphi (12)=12*(1-1/2)*(1-1/3)=4。​​​

        1.若n是质数,则\varphi (n)=n-1  ​2.若m,n互质,​\varphi (mn)=\varphi (m)\varphi (n)

        欧拉定理:在数论,是一个关于同余的性质。欧拉定理表明,若m,n为正整数,且m,n互质,则:​m^{\varphi (n)}mod n = 1

        费马小定理:欧拉定理中,若n为质数,​m^{n-1}mod n = 1

        模反元素:m^{e*d} mod n = m

        根据以上介绍的定义和数学知识,先来看一个真实的例子加深印象。假设甲要发送一串秘密数字m=65给乙,乙发送了一个公钥(n,e)=(3233,17)给甲,甲根据以下公式及公钥对密文m加密成c,​m^e mod n = c,代入得,c=​m^e mod n =65^{17 }​mode 3233 = 2790,甲将使用公钥加密的密文c=2790发送给乙,乙收到c=2790的密文后,使用私钥(n,d)=(3233,2753)根据以下公式进行解密,代入得,m=​c^d mod n =​​2790^{2753 }mode 3233 = 65,乙使用与公钥不同的私钥成功计算出密文m,发现了吗?从始至终,用来解密的私钥(n,d)=(3233,2753)一直都在乙处,从未泄露乙给甲的仅仅是用来加密的公钥(n,e)=(3233,17),这个公钥并不能用来解密,即使被他人截获,也没有任何泄密的风险。那么,乙是如何计算出给甲的公钥(n,e)=(3233,17)和私钥(n,d)=(3233,2753)的呢?

        1.随机选择两个不相等的质数p和q(乙选择了61和53)

        2.计算p和q的乘积n=p×q=61×53=3233

        3.根据本文“欧拉函数”介绍过的公式,φ(n)=(p-1)(q-1),代入计算n的欧拉函数值,φ(3233)=(61-1)×(53-1)=60×52=3120

        4.随机选择一个整数e,条件是1,乙就在1到3120之间,随机选择了17

        5.因为e与φ(n)互质,根据求模反元素的公式计算e,对于e的模反元素d有:ed≡1(modφ(n)),这个式子等价于(ed-1)/φ(n)=k(k为任意正整数)即ed-kφ(n)=1,代入数据得:17d-3120k=1,实质上就是对以上这个二元一次方程求解,得到一组解为:(d,k)=(2753,-15)

        6.将n和e封装成公钥,n和d封装成私钥,n=3233,e=17,d=2753,所以公钥就是(3233,17),私钥就是(3233,2753)

        7.其中,n的长度就是密钥长度,3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位

    二.密钥组成和加解密公式

         公钥KU:n:质数p和质数q的乘积(p和q必须保密)    e:与(p-1)×(q-1)互质

         私钥KR:n:质数p和质数q的乘积(p和q必须保密)    d:e-1(mod(p-1)(q-1))

         加密:c=m mod​ m^e

         解密:m=c^d ​mod n

    三.OpenSSL使用RSA

           1.生成 private.pem   |    openssl genrsa -out private.pem 1024

           2.私钥中提取公钥    |    openssl rsa -in private.pem -pubout -out public.pem writing RSA key

           3.公钥加密    | openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enc.txt

           4.密钥解密    |  openssl rsautl -decrypt -in enc.txt -inkey private.pem -out dec.txt

    相关文章

      网友评论

        本文标题:3.RSA加密

        本文链接:https://www.haomeiwen.com/subject/zdaojqtx.html