zoukankan      html  css  js  c++  java
  • 迪菲.赫尔曼(Diffie–Hellman)密钥交换算法

    迪菲.赫尔曼算法是通信线路不安全情况下,交换密钥的一个算法,应用于TLS协议中

    首先说一下生成密钥的流程,我们有这样一种计算叫做求摸运算 mod, 

    比如:27 mod 17 = 10,也就是求余数的运算。 

    现在有两个通信者A和B,我们使用一种计算 假如我们这里选用 

    3 ^ x mod 17,A和B分别生成一个随机的整数,这个整数即为x,比如A是2,B是3,那么A使用2计算:

    3^2 mod 17 = 9 ①

    B使用3计算:

    3^3 mode 17 = 10 ②

    然后A将9发送给B,B将10发送给A。当然这里的9和10是可以被任何人看到。 

    A收到B的10之后做这样的计算:

    10^2 mod 17 = 15 ③

    B收到A的9后做这样的计算:

    9^3 mod 17 = 15 ④

    这样15就可以作为两人通信加密的密钥了。 

    突然一看还有点不明白,为什么这样的计算就能计算出相同的数字15? 

    mod运算的性质 性质如下:

    就像普通运算一样,他是可交换的、可结合的、可分配的,可以表示为

    (a+b)mod n=((a mod n)+(b mod n))mod n

    (a−b)mod n=((a mod n)−(b mod n))mod n

    (a× b)mod n=((a mod n)×(b mod n))mod n

    (a× (b+c))mod n=(((a× b)mod n)+((a× c)mod n)))mod n

     

    A:在做③计算的时候使用的10是由②计算来的,也就是:

    (3^3 mode 17)^2 mod 17 = 15 ⑤

    B:做的④计算的时候使用的9是由①计算来的,也就是:

    (3^2 mod 17)^3 mod 17 = 15 ⑥

    那么接下来就证明为什么⑤和⑥会相等

    (3^3 mode 17)^2 mod 17 == (3^2 mod 17)^3 mod 17

    其实证明只是用到上面mod计算性质的第三条 

     

    计算⑤等于以下的分解

    =((3 * 3 * 3) mod 17)^2 mod 17

    =(((3 mod 17) * (3 mod 17) * (3 mod 17)) mod 17)^2 mod 17

    = ((((3 mod 17) * (3 mod 17) * (3 mod 17)) mod 17) * (((3 mod 17) * (3 mod 17) * (3 mod 17)) mod 17)) mod 17

    =((3 mod 17) * (3 mod 17) * (3 mod 17) * (3 mod 17) * (3 mod 17) * (3 mod 17)) mod 17

    = (3 mod 17)^6 mod 17

     

    同理分解⑥ 也可得这个结果

    = (3 mod 17)^6 mod 17

    ⑤⑥是相等的得证。 

    在这个通信过程中可以看到A和B分别生成了一个随机数2和3,只要2和3不泄露,那么其他人即使知道3 mod 17、9、10这些信息也得不出15的这个结果。

     本文转自:https://blog.csdn.net/wangbaolongaa/article/details/49468187

  • 相关阅读:
    在Oracle中添加用户 赋权 修改暗码 解锁
    Ubuntu Linux 8.04 Vsftp 假造用户设置
    用一个实例讲解DB2数据库游标轮回的成果
    解说Oracle数据库自动增长列的完成过程
    MSN登录错误“80072efd”解决办法
    再学 GDI+[61]: 路径画刷(1) SetCenterColor、SetSurroundColors
    WinAPI: 测试 BitBlt
    两个 CopyRect
    再学 GDI+[58]: 路径 保存与读取路径数据
    再学 GDI+[62]: 路径画刷(2) SetCenterPoint、GetCenterPoint
  • 原文地址:https://www.cnblogs.com/wjq310/p/8642053.html
Copyright © 2011-2022 走看看