逆向开发--3.RSA加密

一.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互质)

    通式:  ,其中p1, p2……pn为x的所有质因数,x是不为0的整数。比如12=2*2*3那么φ(12)=12*(1-1/2)*(1-1/3)=4。

    1.若n是质数,则      2.若m,n互质,

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

    费马小定理:欧拉定理中,若n为质数,  mod n = 1

    模仿元素: mod n = m

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

扫描二维码关注公众号,回复: 5437453 查看本文章
  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<e<φ(n),且e与φ(n)互质
    乙就在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= 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

猜你喜欢

转载自blog.csdn.net/liqun3yue25/article/details/86489322