zoukankan      html  css  js  c++  java
  • Diffie-Hellman算法简介

    一、DH算法是一种密钥交换协议,它可以让双方在不泄漏密钥的情况下协商出一个密钥来。

    DH算法基于数学原理,比如小明和小红想要协商一个密钥,可以这么做:

    1. 小明先选一个素数和一个底数,例如,素数p=23,底数g=5(底数可以任选),再选择一个秘密整数a=6,计算A=(g^a mod p)=8,然后大声告诉小红:p=23,g=5,A=82. 小红收到小明发来的p,g,A后,也选一个秘密整数b=15,然后计算B=(g^b mod p)=19,并大声告诉小明:B=193. 小明自己计算出s=(B^a mod p)=2,小红也自己计算出s=(A^b mod p)=2,因此,最终协商的密钥s为2。

    在这个过程中,密钥2并不是小明告诉小红的,也不是小红告诉小明的,而是双方协商计算出来的。

    第三方只能知道p=23,g=5,A=8,B=19,由于不知道双方选的秘密整数a=6和b=15,因此无法计算出密钥2。

    二、数学证明:

    对于小明的密钥计算过程有:
    s1 = (g^b mod p)^a mod p = g^(b*a) mod p
    对于小红的密钥计算过程有::
    s2 = (g^a mod p)^b mod p = g^(a*b) mod p
    根据乘法交换律,s1 == s2

    三、神奇的数学,完美的加密算法?

    开始看到这个过程的时候,我着实小激动了一下,选择合适的素数,这个密钥的协商简直是”无懈可击“,怎么应用不怎么广泛呢?

    查了一下资料,好吧,这个如果用于实战的话,一个”代理“就轻易的使这种加密完全无效。

    所以现在用的比较广泛的加密算法是RSA(非对称加密算法)

    参考文档:

    https://www.liaoxuefeng.com/wiki/1022910821149312/1023025778520640

    https://www.cnblogs.com/qcblog/p/9016704.html

  • 相关阅读:
    mysql表的查询(连接查询)练习
    mysql基础语法
    Linux 常用命令整理
    1.django 环境搭建
    2.django 操作笔记
    mysql基础笔记(1)
    VMware复制Linux虚拟机后网络配置
    uC/OS-III 软件定时器(三)
    uC/OS-III 时间管理(二)
    uC/OS-III 时钟节拍(一)
  • 原文地址:https://www.cnblogs.com/yoyotl/p/10853484.html
Copyright © 2011-2022 走看看