Diffie-Hellman密钥交换

DH密钥交换是一种安全协议,它可让双方在不安全的信道上建立一个密钥。双方互相发送的数据就算被第三方知晓,也没法知道加密信息的密钥。安全

其解决问题的主要思想能够用下图来解释: 微信

在这里插入图片描述

Alice和Bob想要协商出一个只有它们两人知道的颜色,不能让第三方知道,怎么办呢?解决办法以下:加密

  1. 先从它们共同拥有的颜色(图中为黄色)开始,这个黄色是你们都知道的,第三方知道也没有关系。
  2. Alice选了一个只有本身知道的颜色(图中为红色),并将之混入你们知道的黄色中,造成新的颜色(图中为棕色)。
  3. Bob也选了一个只有本身知道的颜色(图中为淡绿色),并将之混入你们都知道的黄色中,造成新的颜色(图中为浅蓝色)。
  4. Alice和Bob交换混合后的颜色。(这里假定人们很难从混合颜色中找到是哪两种颜色混合的,安全性保证取决于此,因此即便第三方知道了混合后的颜色也没有用,由于它推断不出来只有Alice和Bob本身掌握的红色和淡绿色)
  5. Alice收到Bob发送过来的混合色后,再加入只有本身知道的红色,获得秘密颜色=黄色+红色+淡绿色(图中为土色,在图的最下方)。
  6. Bob收到Alice发送过来的混合色后,再加入只有本身知道的淡绿色,获得秘密颜色=黄色+淡绿色+红色。
  7. 至此,Alice和Bob各自拥有了只有它们两人知道的秘密颜色,且秘密颜色是相同的。

这里的关键是,混合后的颜色,人们没法知晓是由哪两种颜色混合而成的。由此,很容易想到数学难题,离散对数问题。数学描述以下: .net

在这里插入图片描述

这里,a只有Alice知道,b只有Bob知道,g,p是公开的,K是最终计算出的共享密钥。3d

通常描述以下:cdn

  1. Alice和Bob协商一个有限循环群G和它的一个生成元g,一个大素数p;
  2. Alice生成一个随机数a,计算A=g^a mod\ p,将A发送给Bob;
  3. Bob生成一个随机数b,计算B=g^b mod\ p,将B发送给Alice;
  4. Alice计算K=B^a mod\ p=(g^b)^a mod\ p,获得共享密钥K
  5. Bob计算K=A^b\ mod\ p=(g^a)^b\ mod\ p,获得共享密钥K

(g^b)^a=(g^a)^b由于群是乘法交换的,涉及到数论及代数的内容。Alice和Bob同时协商出K,做为共享密钥。blog

最后,安全性问题,DH密钥交换能够防窃听(即,你知道咱们交换的数据也不要紧),可是DH自己并无提供通信双方的身份验证服务(正确交换的前提是,Alice必须确保对方是Bob),没法抵御中间人攻击。图片

参考文档:Diffie–Hellman key exchangeip

欢迎关注微信公众号,天天进步一点点,Let's go! 文档

相关文章
相关标签/搜索