RSA算法

作者: 彭金虎 | 来源:发表于2017-04-22 16:02 被阅读72次

    目录


    • https通信抓包
    • 消息验证
    • RAS算法
    • RAS数字签名验证

    1. https通信抓包


    使用如下命令,我们可以抓去https的通信数据包:

    curl --key ssl/private_keys/privatekey.pem --cacert ssl/certs/ca.pem --cert
    ssl/certs/publickkey.pem -v https://www.example.com

    通过上图,我们可以看到https的通信过程:

    图中包含了客户端的证书验证。

    2. 消息验证


    下面内容参考此网络

    step1: “客户”向服务端发送一个通信请求

    “客户”->“服务器”:你好

    step2: “服务器”向客户发送自己的数字证书。证书中有一个公钥用来加密信息,私钥由“服务器”持有

    “服务器”->“客户”:你好,我是服务器,这里是我的数字证书

    step3: “客户”收到“服务器”的证书后,它会去验证这个数字证书到底是不是“服务器”的,数字证书有没有什么问题,数字证书如果检查没有问题,就说明数字证书中的公钥确实是“服务器”的。
    检查数字证书后,“客户”会发送一个随机的字符串给“服务器”用私钥去加密,服务器把加密的结果返回给“客户”,“客户”用公钥解密这个返回结果,如果解密结果与之前生成的随机字符串一致,那说明对方确实是私钥的持有者,或者说对方确实是“服务器”。

    “客户”->“服务器”:向我证明你就是服务器,这是一个随机字符串 //前面的例子中为了方便解释,用的是“你好”等内容,实际情况下一般是随机生成的一个字符串。

    “服务器”->“客户”:{一个随机字符串}[私钥|RSA]

    step4: 验证“服务器”的身份后,“客户”生成一个对称加密算法和密钥,用于后面的通信的加密和解密。这个对称加密算法和密钥,“客户”会用公钥加密后发送给“服务器”,别人截获了也没用,因为只有“服务器”手中有可以解密的私钥。这样,后面“服务器”和“客户”就都可以用对称加密算法来加密和解密通信内容了。

    “服务器”->“客户”:{OK,已经收到你发来的对称加密算法和密钥!有什么可以帮到你的?}[密钥|对称加密算法]

    “客户”->“服务器”:{我的帐号是aaa,密码是123,把我的余额的信息发给我看看}[密钥|对称加密算法]

    “服务器”->“客户”:{你好,你的余额是100元}[密钥|对称加密算法]

    …… //继续其它的通信

    3. RAS算法


    参考RSA算法
    step1: 选择两个质数 pq
    step2: 计算modulus

    n = p x q

    step3:

    Φ = (p-1)(q-1)

    step4: 选择一个质数作为公钥系数 e, 1 < e < Φ

    gcd(e, Φ) = 1, //即 e, Φ互质

    step5: 从下面公式可计算出私钥系数 d, 1 < d < Φ

    d x e = 1 (mod Φ)

    if d > Φ:
    d = d mod Φ
    if d < 0:
    d = d + Φ

    step6: 加密数据如 P

    C = Pe (mod n)

    step7: 解密数据

    P = Cd (mod n)

    其中公钥保存系数(n, e), 私钥保存系数(n, d, p, q)

    Example:
    step1: 选择两个质数

    p = 7
    q = 11

    step2: 计算乘积

    n = p x q = 7 x 11 = 77
    n = 77

    step3:

    Φ = (p-1)(q-1) = (7-1)(11-1) = 60
    Φ = 60

    step4: 公钥系数 e = 13

    step5: 私钥系数 d = 37

    d x e = 1 (mod Φ)
    d x 13 = 1 (mod 60)

    可计算的出d值为 37

    step6: 假设加密数据 P=5

    C = Pe (mod n)
    C = 513 (mod 77) = 26

    step7: 解密数据

    P = Cd (mod n)
    P = 2637 (mod 77) = 5

    4. RAS数字签名验证


    参考RSA算法
    step1: 服务端数字签名,假设 m为将发送消息的MD5值

    s = md (mod n)

    step2: 客户端验证

    m' = se (mod n)
    if m' = m, then return 'True',
    if m' ≠ m, then return 'False'

    相关文章

      网友评论

        本文标题:RSA算法

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