精华内容
下载资源
问答
  • 密码算法与协议 Diffie-Hellman算法的python代码实现 实验课 实验报告截图 Diffie-Hellman密钥交换协议/算法(Diffie-Hellman Key Exchange/Agreement Algorithm).这个机制的巧妙在于需要安全通信的双方可以用这个...
  • 西华大学计算机系学生上机实践报告 第 PAGE 3 页 共 NUMPAGES 3 页 第 PAGE 1 页 共 NUMPAGES 1 页 西华...Hellman密钥生成算法实现 学号312008080605331 上机实践日期10 上机实践编号实验一 组号 上机实践时间4学时
  • Diffie-Hellman 密钥交换的纯 Python 实现。 Py2、Py3、PyPy 兼容。 例子 用作库: import pyDH d1 = pyDH . DiffieHellman () d2 = pyDH . DiffieHellman () d1_pubkey = d1 . gen_public_key () d2_pubkey = d2 ...
  • 迪菲·赫尔曼 Python Diffie-Hellman算法实现
  • 用c++实现的基于Diffie-Hellman协议的密钥交换,包含求一个素数的本原根函数,但由于数据类型问题,不能求太大的素数的本原根。压缩包中包含源代码和可执行文件,代码注释清晰。
  • Diffie-Hellman(简称DH)是密钥交换算法之一,它的作用是保证通信双方在非安全的信道中安全地交换密钥。目前DH最重要的应用场景之一,就是在HTTPS的握手阶段,客户端、服务端利用DH算法交换对称密钥。 下面会先简单...
  • Diffie-Hellman算法

    千次阅读 2019-07-12 17:29:17
    Diffie-Hellman算法是Whitefield Diffie和Martin Hellman在1976年公布的一种秘钥交换算法,它是一种建立秘钥的方法,而不是加密方法,所以秘钥必须和其他一种加密算法结合使用。这种秘钥交换技术的目的在于使两个...

    Diffie-Hellman算法是Whitefield Diffie和Martin Hellman在1976年公布的一种秘钥交换算法,它是一种建立秘钥的方法,而不是加密方法,所以秘钥必须和其他一种加密算法结合使用。这种秘钥交换技术的目的在于使两个用户安全的交换一个秘钥一遍后面的报文加密。

    Diffie-Hellman密钥交换算法的有效性依赖于计算离散对数的难度。

    简言之,可以如下定义离散对数:

    首先定义一个素数p的原根a,a的各次幂从1 到p-1产生所有整数根,也就是说,如果a是素数p的一个原根,那么数值

                                                           a mod p, a2 mod p,…,ap-1 mod p

    是各不相同的整数,并且以某种排列方式组成了从1到p-1的所有整数。

    对于一个整数b和素数p的一个原根a,可以找到惟一的指数i,使得

                                                                 b=a^i mod p, 0<=i<=p-1

    指数i称为b的以a为基数的模p的离散对数或者指数。该值被记为inda ,p(b)。

    基于此背景知识,可以定义Diffie-Hellman密钥交换算法。该算法描述如下:

     

    1、有两个全局公开的参数,一个素数q和一个整数a,a是q的一个原根。

    2、假设用户A和B希望交换一个密钥,

    用户A选择一个作为私有密钥的随机数XA<q,并计算公开密钥YA=a^XA mod q。A对XA的值保密存放而使YA能被B公开获得。

    类似地,用户B选择一个私有的随机数XB<q,并计算公开密钥YB=a^XB mod q。B对XB的值保密存放而使YB能被A公开获得。

    3、用户A产生共享秘密密钥的计算方式是K = (YB)^XA mod q。

    同样,用户B产生共享秘密密钥的计算是K = (YA)^XB mod q。

    这两个计算产生相同的结果:

                  K = (YB)XA modq

                    = (aXB modq)XA mod q

                    = (aXB)XA modq                  (根据取模运算规则得到)

                    = aXBXA modq

                    = (aXA)XB modq

                    = (aXA modq)XB mod q

                    = (YA)XB modq

    所以 (YB)XA modq = K =(YA)XB modq

    因此相当于双方已经交换了一个相同的秘密密钥。

    4、因为XA和XB是保密的,一个敌对方可以利用的参数只有q、a、YA和YB。因而敌对方被迫取离散对数来确定密钥。例如,要获取用户B的秘密密钥,敌对方必须先计算

                   XB = inda ,q(YB)

    然后再使用用户B采用的同样方法计算其秘密密钥K。

    Diffie-Hellman密钥交换算法的安全性依赖于这样一个事实:虽然计算以一个素数为模的指数相对容易,但计算离散对数却很困难。对于大的素数,计算出离散对数几乎是不可能的。

    展开全文
  • Diffie Hellman算法 该项目使用Java实现了Diffie Hellman算法。 它是由我和费萨尔·萨塔尔先生(Faisal Sattar)编程为2018年4月的``离散结构II''课程的项目。 该程序将从用户处获取两个数字: 素数模P 基数B ...
  • 基于socket的diffie-hellman密钥交换协议的mfc实现,包含服务器端和客户端,可以在本机通信,也可以在两台机器上进行密钥交换。
  •   Diffie-Hellman 密钥交换算法,是由 Whitfield Diffie 和 Martin Hellman 在1976年共同提出了的一个奇妙的密钥交换协议。这个算法的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥,然后可以用这个密钥...

    Diffie-Hellman

      密钥的配送一直是一个难以解决的问题,我们始终无法保证在不安全的线路中安全传递密钥。直到 Diffie-Hellman 密钥交换算法出现:一种确保共享密钥安全穿越不安全网络的方法
      Diffie-Hellman 密钥交换算法,是由 Whitfield Diffie 和 Martin Hellman 在1976年共同提出的一个奇妙的密钥交换协议。这个算法的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥,然后可以用这个密钥进行加密和解密。(注意:Diffie-Hellman 算法是一种建立密钥的方法,而不是加密方法,只能用于密钥的交换,而不能进行消息的加密和解密)

    Diffie-Hellman 算法描述

    在这里插入图片描述

    1. 有两个全局公开的参数,一个素数 p 和一个整数 a,其中 a 是 p 的本原元(a mod p,a2 mod p,a3 mod p…是互不相同的数,而且以某种排列包含从 1 到 p-1 的所有整数)。
    2. 假设有用户 A 和 B 希望安全交换一个密钥。
    3. A 用户生成一个作为私有密钥的随机数 XA(XA < p),这个随机数只能 A 知道,然后计算公开密钥 YA = aXA mod p,并发送给 B 用户。
    4. B 用户生成一个作为私有密钥的随机数 XB(XB < p),这个随机数只能 B 知道,然后计算公开密钥 YB = aXB mod p,并发送给 A 用户。
    5. A 用户使用 XA 和收到的 YB 计算共享密钥 K = YBXA mod p = (aXB mod p)XA mod p = aXB*XA mod p。
    6. B 用户使用 XB 和收到的 YA 计算共享密钥 K = YAXB mod p = (aXA mod p)XB mod p = aXA*XB mod p。
    7. 此时双方计算出相同密钥 K,成功交换共享密钥,使用密钥 K 进行通信。

    Diffie-Hellman 安全性

      在 Diffie-Hellman 算法中,公开的变量是 p、a、YA、YB ,共享密钥 K = aXA*XB mod p。其中 p、a 变量已知,问题在于已知 YA、YB 求 XA、XB。这个问题涉及到离散对数问题,要解决是非常困难的。所以,我们可以相信 Diffie-Hellman 算法是非常安全的。

    Diffie-Hellman 缺点

    • 没有提供双方身份的任何信息。
    • 它是计算密集性的,因此容易遭受阻塞性攻击,即对手请求大量的密钥。
    • 受攻击者花费了相对多的计算资源来求解无用的幂系数而不是在做真正的工作。
    • 没办法防止重演攻击
    • 容易遭受中间人的攻击

    Oakley 算法是对 Diffie-Hellman 密钥交换算法的优化,它保留了后者的优点,同时克服了其弱点。

    展开全文
  • IKE如何进行密钥安全的保证,Diffie-Hellman算法的介绍 虽然 IKE 使用了认证来保证会话一定是来自合法的对等体,但是单靠认证也无 法保证密钥的安全,因为数据还是有可能被第三者截获,所以 IKE 还必须有一套机 制来...

    IKE如何进行密钥安全的保证,Diffie-Hellman算法的介绍

    虽然 IKE 使用了认证来保证会话一定是来自合法的对等体,但是单靠认证也无 法保证密钥的安全,因为数据还是有可能被第三者截获,所以 IKE 还必须有一套机 制来保证密钥的安全,因为只要密钥泄露,就全玩完了。在密钥方面,IKE 使用了 称为 Diffie-Hellman 的算法在 VPN 对等体之间建立安全的密钥用来加密数据, Diffie-Hellman 使用了极为复杂的数学算法,最后将在 VPN 对等体之间计算出只有它 们自己才知道的密钥,即使他们的会话被第三者监控,也无法推算出密钥。

    1、算法介绍
    Diffie-Hellman:一种确保共享KEY安全穿越不安全网络的方法,它是OAKLEY的一个组成部分。Whitefield与Martin Hellman在1976年提出了一个奇妙的密钥交换协议,称为Diffie-Hellman密钥交换协议/算法(Diffie-Hellman Key Exchange/Agreement Algorithm).这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥。然后可以用这个密钥进行加密和解密。但是注意,这个密钥交换协议/算法只能用于密钥的交换,而不能进行消息的加密和解密。双方确定要用的密钥后,要使用其他对称密钥操作加密算法实现加密和解密消息。

    2、算法原理描述
    基于原根的定义及性质,可以定义Diffie-Hellman密钥交换算法.该算法描述如下:

    1. 有两个全局公开的参数,一个素数q和一个整数a,a是q的一个原根.
    2. 假设用户A和B希望交换一个密钥,用户A选择一个作为私有密钥的随机数XA(XA<q),并计算公开密钥YA=a^XA mod q。A对XA的值保密存放而使YA能被B公开获得。类似地,用户B选择一个私有的随机数XB<q,并计算公开密钥YB=a^XB mod q。B对XB的值保密存放而使YB能被A公开获得.
    3. 用户A产生共享秘密密钥的计算方式是K = (YB)^XA mod q.同样,用户B产生共享秘密密钥的计算是K = (YA)^XB mod q.这两个计算产生相同的结果: K = (YB)^XA mod q = (a^XB mod q)^XA mod q = (aXB)XA mod q (根据取模运算规则得到) = a^(XBXA) mod q = (aXA)XB mod q = (a^XA mod q)^XB mod q = (YA)^XB mod q 因此相当于双方已经交换了一个相同的秘密密钥.
    4. 因为XA和XB是保密的,一个敌对方可以利用的参数只有q,a,YA和YB.因而敌对方被迫取离散对数来确定密钥.例如,要获取用户B的秘密密钥,敌对方必须先计算 XB = inda,q(YB) 然后再使用用户B采用的同样方法计算其秘密密钥K. Diffie-Hellman密钥交换算法的安全性依赖于这样一个事实:虽然计算以一个素数为模的指数相对容易,但计算离散对数却很困难.对于大的素数,计算出离散对数几乎是不可能的. 下面给出例子.密钥交换基于素数q = 97和97的一个原根a = 5.A和B分别选择私有密钥XA = 36和XB = 58.每人计算其公开密钥 YA = 5^36 = 50 mod 97 YB = 5^58 = 44 mod 97 在他们相互获取了公开密钥之后,各自通过计算得到双方共享的秘密密钥如下: K = (YB)^XA mod 97 = 44^36 = 75 mod 97 K = (YA)^XB mod 97 = 50^58 = 75 mod 97 从|50,44|出发,攻击者要计算出75很不容易。

    3、算法的缺点
    然而,该技术也存在许多不足: 没有提供双方身份的任何信息. 它是计算密集性的,因此容易遭受阻塞性攻击,即对手请求大量的密钥.受攻击者花费了相对多的计算资源来求解无用的幂系数而不是在做真正的工作. 没办法防止重演攻击. 容易遭受中间人的攻击.第三方C在和A通信时扮演B;和B通信时扮演A.A和B都与C协商了一个密钥,然后C就可以监听和传递通信量.中间人的攻击按如下进行: B在给A的报文中发送他的公开密钥. C截获并解析该报文.C将B的公开密钥保存下来并给A发送报文,该报文具有B的用户ID但使用C的公开密钥YC,仍按照好像是来自B的样子被发送出去.A收到C的报文后,将YC和B的用户ID存储在一块.类似地,C使用YC向B发送好像来自A的报文. B基于私有密钥XB和YC计算秘密密钥K1.A基于私有密钥XA和YC计算秘密密钥K2.C使用私有密钥XC和YB计算K1,并使用XC和YA计算K2. 从现在开始,C就可以转发A发给B的报文或转发B发给A的报文,在途中根据需要修改它们的密文.使得A和B都不知道他们在和C共享通信。

    4、发展与优化
    Oakley算法是对Diffie-Hellman密钥交换算法的优化,它保留了后者的优点,同时克服了其弱点. Oakley算法具有五个重要特征: 它采用称为cookie程序的机制来对抗阻塞攻击. 它使得双方能够协商一个全局参数集合. 它使用了现时来保证抵抗重演攻击. 它能够交换Diffie-Hellman公开密钥. 它对Diffie-Hellman交换进行鉴别以对抗中间人的攻击。

    创作者:Eric· Charles

    展开全文
  • 不对称diffie hellman 非对称密钥交换 一旦被证明是安全的,该软件包就被设计为未来的抗量子密钥交换算法的占位符。 安装 npm install 用法 首先,我们需要导入包 import { KeyPair } from 'asymmetric-diffie-...
  • 非对称加密算法--Diffie-Hellman算法

    千次阅读 2019-03-10 21:29:00
    非对称加密的好处是当通信双方没有事先协商密钥的情况下也能进行安全通信,而在互联网普及的今天,很多通信双方往往在事先是无法协商好密钥的,从而非对称加密算法得到了广泛应用,本文主要阐述Diffie-H...

    之前写的一个文章,现在发上来....

      :

    非对称加密算法又称公开密钥加密算法,非对称加密是相对于对称加密而言的,对称加密指的是通信双方使用的密钥是一致的,而非对称加密就是算法使用的密钥不一致。非对称加密的好处是当通信双方没有事先协商密钥的情况下也能进行安全通信,而在互联网普及的今天,很多通信双方往往在事先是无法协商好密钥的,从而非对称加密算法得到了广泛应用,本文主要阐述Diffie-Hellman密钥交换这一非对称加密算法。

    1概述

          传统的加密通信需要通信双方共享一个密钥,即用于加密和解密的密钥,此种方法的一个问题就是双方必须就共享密钥达成一致,但是共享密钥的传输又需要通信,从而该密钥有着被攻击者窃取的风险。在互联网普及的今天,在网络世界中通信各方之间可能从来没有接触过,即需要一种在没有预先共享密钥的情况下能进行安全通信的方法,即所谓的非对称加密算[1]

    假设A要和B之间需要通信,但是AB并未共享一个密钥,在此情况下他们之间如何进行安全通信呢?为了方便阐述非对称加密的概念,假定通信者AB共享一个公钥,这个公钥是公开的,任何人都可以获得(对于攻击者来说也是如此),该公钥用Kpublic表示。A可以持有一个私钥KprivateAA基于这个私钥KprivateA进行某种运算ff(KprivateA,Kpublic)B也随机生成私钥KprivateB进行运算ff(KprivateB,Kpublic),紧接着AB以明文方式交换他们的运算结果(入侵者可以截取到该信息),即此时A获得了f(KprivateB,Kpublic)记为fBB获得了f(KprivateA,Kpublic)  记为fA。然后AB进行运算g,即A运算得到g(fB,KprivateA,Kpublic)B运算得到g(fA,KprivateB,Kpublic),分别记做gAgB,并且存在着这样的运算fg使得gA=gB,此时gAgB分别是AB的新的私钥,即通信中加密/解密的私钥。从上面的过程来看AB之间任何一方都无须分发任何敏感的私钥(初始的私钥是各自持有的,无须在信道上传输)。假定在AB通信的过程中有一个攻击者C截获了他们之间的报文,显然入侵者只能获取Kpublicf(KprivateB,Kpublic)f(KprivateA,Kpublic),而无法获得真正的私钥gAgB,因此无法解密报文,保证了通信的安全性。下面我们将介绍应用这一过程的算法-Diffie-Hellman密钥交换算法。

    2 Diffie-Hellman算法原理

    Diffie-Hellman密钥交换算法基于数论知识,最初由Whitefield与Martin Hellman在1976年提出[2] ,该算法本质上是一个确保共享的私钥穿越不安全网络的方法,它基于单向函数这样一个概念,单向函数的基本思想就是单向函数计算起来相对容易,但求逆运算却非常困难。也就是说,已知x, 我们很容易计算f(x), 但已知f(x), 却很难计算出x。Diffie-Hellman算法运用的单向函数是模运算,如下所示:f(x) = x mod p,已知x与p很容易计算f(x),但是已知f(x)与p却很难准确计算出x,因为x的取值非常多,特别是当x和p取很大的值时[3]

    2.1 Diffie-Hellman算法原理

    为了方便叙述,假设A和B需要进行安全通信,需要安全地生成一个密钥,而中间有一个攻击者C在窃听,其基本步骤如下:

    1.AB公开一个数a和素数模p,假设分别为523,即公钥,这个信息是AB攻击者C都掌握的。

    2.A随机选择一个数,记为s1,假设为29,即A的私钥,计算单向函数f(s1) = 5s1 mod 23的值,记为f1(此处计算得17),然后将计算得到的值发送给B。在这个过程中, B得到单项函数的值17攻击者C也能截获。

    3.B也选择一个数,记为s2,假设为33,即B的私钥, 计算单向函数f(s2) =  5s2 mod 23的值,记为f2(此处为22),然后将计算得到的值发送给A。在这个过程中,A得到单向函数的值22,窃听者C也能截获。

    4.定义函数g1(x)=f2x mod pA计算g1(s1)的值作为密钥,此例中为g1(29) = 2229 mod 23=22

    5.定义函数g2(x)=f1x mod p,B计算g2(s2)的值作为密钥,此例中为g2(33) = 1733 mod 23=22

    上述整个过程如下图1所示:

                                        

                                                                              图1  AB通信过程

    可以发现g1(x)= g2(x),即(as2 mod p)s1 mod p= (as1 mod p)s1 mod p 。事实上根据数论理论可以证明对任意整数,有上式成立。通信双方只需知道公钥a,p以及交换非敏感信息f1,f2就可以完成密钥交换这一工作,从而在后续的通信中使用生成的密钥来加密/解密信息。

           使用python进行简单的编程验证,代码如下图2:(运行1000次输出结果为Success)

                                       

                                                                     图2  python验证代码

     

           输出结果如下图3:

                                   

                                                                  图3  代码输出结果

     

           Diffie-Hellman算法的有效性依赖于计算离散对数的难度[4] ,即此时窃听者尽管能截获f1f2以及获知所用的公钥,但是想从f1f2ap计算出指数s1s2是十分困难的,进而也就无法计算出私钥g1g2

    2.2 Diffie-Hellman算法的优缺点

           Diffie-Hellman算法让通信双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥,这个密钥一般作为对称加密的密钥而被双方在后续数据传输中使用。Diffie-Hellman算法仅当需要时才生成密钥,减小了将密钥存储很长一段时间而致使遭受攻击的机会,除对全局参数即公钥的约定外,密钥交换不需要事先约定其它参数,这也是非对称加密的优势所在。然而Diffie-Hellman算法也有着以下一些缺[5]

    1. 通信时没有提供双方身份的任何信息;
    2. 该算法是计算密集性的,因此容易遭受阻塞性攻击,即对手请求大量的密钥时本机会花费了相对多的计算资源来求解参数而不是在做真正的工作;
    3. 没办法防止重演攻击,即攻击者截获了先前的整个过程的通信报文,然后来重演这一过程,向本机重发一模一样的报文;
    4. 容易遭受中间人的攻击,即攻击者C在和A通信时扮演B,在和B通信时扮演AAB都与C协商了一个密钥,然后C就可以监听AB的通信过程;

    以上的一些缺点并没有阻止Diffie-Hellman算法在实际工程中的广泛应用,通常可以采用一些辅助技术来弥补上述缺点,如数字签名技术、鉴别协议与MACMessage Authentication Code)技术等。

     

     

    展开全文
  • Diffie-Hellman-Merkle 密钥交换演示 Diffie Hellman Merkle (DH) 密钥交换是建立传输层安全性 (TLS) 连接的关键组件。 在 DH 密钥交换结束时,两方将就用于加密和解密数据的对称密钥达成一致。 在实现 TLS 时,...
  • 19 20 /**21 * DH Diffie-Hellman算法(D-H算法),密钥一致协议。 22 * 是由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想。 23 * 简单的说就是允许两名用户在公开媒体上交换信息以生成"一致"的、可以...
  • Diffie-Hellman算法原理2.1 Diffie-Hellman算法原理2.2 Diffie-Hellman算法的优缺点 转载自原文 在原文基础上优化了一下,加上注释,更好读懂 0. 摘要 非对称加密算法又称公开密钥加密算法,非对称加密是相对于对称...
  • Diffie-Hellman算法解析

    千次阅读 2020-04-08 12:16:39
    一、Diffie-Hellman算法简介 Diffie-Hellman算法是第一个公开密钥算法,早在 1976 年就发现了。其安全性源于在有限域上计算离散对数,比计算指数更为困难。该算法可以使两个用户之间安全地交换一个密钥,但不能用于...
  • Diffie-Hellman密钥交换代码以下:javaimport java.util.ArrayList;并发import java.util.List;domimport java.util.Random;函数import java.math.*;spapublic class DHtest {ormpublic static void main(String[] ...
  • 基于椭圆曲线密码的Diffie-Hellman密钥交换,陈永玲,,本文介绍了在实数域和有限域中椭圆曲线的基本定义,然后以椭圆曲线的基本定义为基础,详细论 述了基于椭圆曲线密码的 Diffie-Hellman
  • Diffie-Hellman算法是Whitefield Diffie和Martin Hellman在1976年公布的一种秘钥交换算法,它是一种建立秘钥的方法,而不是加密方法,所以秘钥必须和其他一种加密算法结合使用。这种秘钥交换技术的目的在于使两个...
  • DH算法是一种密钥交换协议,它可以让双方在不泄漏密钥的情况下协商出一个密钥来。 DH算法基于数学原理,比如小明和小红想要协商一个密钥,可以这么做: 小明先选一个素数和一个底数,例如,素数p=23,底数g=5...
  • Diffie-Hellman密钥协议算法是一种确保共享密钥KEY安全穿越不安全网络的方法,它是OAKLEY的一个组成部分,由Whitefield与Martin Hellman在1976年提出。...由于Diffie-Hellman算法本身限于密钥交换的用途,被许多商
  • Boblee人工智能硕士毕业,擅长及爱好python,基于...1.Diffie-Hellman密钥协商算法Diffie-Hellman密钥协商算法在1976年在Whitfield Diffie和Martin Hellman两人合著的论文New Directions in Cryptography(Section Ⅲ...
  • 初学了一下CryptAPI,主要是需要使用DH算法,经过几天的摸索,把CryptAPI中关于dh算法的东西简单封装了一下,程序主要通过DH算法来获取密钥,然后使用密钥来加密,加密算法可选择des,3des,rc4,加密10M的数据,循环10...
  • Diffie-Hellman密钥交换 (DiffieHellman key exchange) This cool algorithm provides a way of generating a shared key between two people in such a way that the key can't be seen by observing the ...
  • 首先,Diffie-Hellman密钥交换算法的主要目的是为了通信双方能够生成一个共同的会话密钥 过程图: 原理: 首先通信双方先协商好两个公共数值,p和g,其中p是一个大素数,g是一个整数,p和g公开,即所有用户均可获取...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,251
精华内容 3,300
关键字:

diffie-hellman算法

友情链接: StriptoolDemo5_DXVST.zip