
[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2018-03-24 标题TLS简单笔记-DH算法简单介绍分类编程 标签tlsTLS简单笔记-DH算法参考链接《 https://blog.csdn.net/mrpre/article/details/52608867 》《 https://blog.csdn.net/qq_40870418/article/details/78829769 》《 https://blog.csdn.net/jerry81333/article/details/52856081 》《 https://baike.baidu.com/item/迪菲赫尔曼密钥交换/10159042?fraladdin 》DH 是 Diffie-Hellman的首字母缩写是Whitefield与Martin Hellman在1976年提出了一个的密钥交换协议。我个人倾向于称DH算法为密钥协商协议而RSA算法是密钥交换算法。简单场景简单的密钥协商先从一个应用场景说起Alice 和Bob想要在一个不安全的信道共享一个密钥该密钥可被用来进行后续的其他的操作并且仅被Alice和Bob所知第三方无法得知。一个简单的方法就是现在全世界都是知道一个值 P100。Alice生成随机值5然后乘上P接着发送Pa 500给Bob通样Bob生成随机值6然后乘上P接着发送Pb 600给Alice。这样Alice 有 1005 600Bob有1006,500。Alice计算: 随机值5自己私钥 * 600对端的公钥 3000 等式1Bob计算 : 随机值6自己私钥 * 500对端的公钥 3000 等式2这样 Alice就和Bob共享了一个值3000还有谁知道3000这个值呢我们知道Alice明文的将500发送到不安全信道Bob明文的将600发送到不安全信道这也就意味着第三方仅仅知道500 和 600想要计算获得共享密钥第三方要么获取到Alice的随机值然后拿它乘上600要么获取到Bob的随机值然后拿它乘上500这样才能获取到Alice和Bob的共享密钥。问题来了如何获取到Alice的随机值呢第三方知道Alice发送的500是由P乘上Alice的随机值得到的所以问题变成了求方程 x*100 500的解。一眼就能看出来Alice的随机值是5。上述方法很容易被破解的原因是P太简单了。P值再复杂点怎么样所以怎么要让中间人难以从Pa或者Pb中分解得到Alice或Bob的随机数而Alice和Bob又能轻松的通过P和随机数计算得到Pa和Pb就成了设计这个算法的关键。从上面的例子可以看出简单的乘法运算是不行的。一般来说上述所说的全世界都知道的值P称之为公钥为Alice和Bob的随机数称之为私钥。