zoukankan      html  css  js  c++  java
  • RSA算法详解

    测试产品的时候,对签名跟认证很是熟悉。但是对RSA的原理,以及秘钥的关系还是有原理性方面的欠缺。
    本文梳理下RSA的加解密流程,以及秘钥的对应关系
    关于RSA的认证跟加密的应用,采用如下的方式
    认证:私钥签名,公钥认证
    加密:公钥加密,私钥解密

    RSA算法流程

    RSA算法的的原理简单来说就是将一个很大的质数M,很难分解为两个质数a,b,并且a*b=M

    详解请参照:
    http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html

    • 生成秘钥

      1. 选择两个不相等的质数p,q
      2. 计算p,q的乘积n
      3. 计算n的欧拉函数φ(n)=(p-1)*(q-1),计算出来的值就是不大于n且与n互质的整数个数
      4. 选择一个与φ(n)互质的整数e,且1<e<φ(n)
      5. 计算e对于φ(n)的模反元素d,计算公式d*e≡1(mod(n))。
      6. 公钥(n,e),私钥(n,d)。
      7. 销毁p,q
    • 加解密

      • 加密
        • 发送方向接收方发送明文信息m,发送方使用公钥(n,e)依照如下公式加密:
          m^e=c(mod n)
          m必须是整数,且小于n。根据上面的公式可以算出密文C
      • 解密
        • 接收方获取密文c,使用自己的私钥(n,d)依照如下公式解密
          c^d=m(mod n)
          c,d,n已知,可以算出明文m

    从上面的秘钥生成流程中,我们可以发现
    如果p,q都销毁了,很难通过公钥(n,e)获取私钥(n,d).反之亦然。以为公式中的φ(n)=(p-1)(q-1),通过n很难得到p,q是本算法的基础
    但是通常我们使用的tool生成的私钥中,包含了公钥信息。所以可以通过私钥获取公钥

    示例

      1. 随机选择两个不相等的质数47和59
      2. 二者的乘积为43×57=2773,2773转化为二进制为1010,1101,0101,长度为12位,所以密钥的长度为12位
      3. 根据欧拉函数公式φ(n)=n(1-1/p)(1-1/q)计算,φ(2773)= 2773×(1-1/47)(1-1/59)=(47-1)(59-1)=2668
      4. 随机选择一个整数e=63,2668>63>1,并且63与2668互质
      5. 计算63对于2668的模反元素d,根据公式ed≡1(mod φ(n)),有63d-1=2668k,由欧几里得扩展公式计算d=847
      6. 公钥(n,e)=(2773,63),私钥(n,d)=(2773,847)

    • 加密
      根据上面计算出的公钥(n,e)=(2773,63),假如m=244,根据公式m^e=c(mod n),可计算出密文c=465
    • 解密
      根据上面计算出的私钥(n,d)=(2773,847),已知c=465,根据公式c^d=m(mod n),可计算出明文m=244
  • 相关阅读:
    IOS客户端Coding项目记录(二)
    IOS客户端Coding项目记录(一)
    IOS开发基础知识--碎片7
    图解域域树域林根域的含义
    Windows server 2012公用网络修改为专用网络
    Windows2012R2版本区别
    VMWare:vSphere6 企业版参考序列号
    Oracle快速测试连接是否成功
    Brocade300 commands
    也谈免拆机破解中兴B860av1.1(解决不能安装软件/解决遥控)
  • 原文地址:https://www.cnblogs.com/richard-xiong/p/9923283.html
Copyright © 2011-2022 走看看