DH密钥交换非对称加密

迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange,简称“D–H”) 是一种安全协议。
它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。

(1)、算法描述

离散对数的概念:

原根:如果a是素数p的一个原根,那么数值:

            amodpa^2 modp,…,a^(p-1) modp

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

离散对数:如果对于一个整数b和素数p的一个原根a,可以找到一个唯一的指数 i,使得:

          =(a的i次方) modp               其中0p-1

                     那么指数i称为b的以a为基数的模p的离散对数。

Diffie-Hellman 算法的有效性依赖于计算离散对数的难度,其含义是:当已知大素数p和它的一个原根a后,对给定的 b,要计算 i ,被认为是很困难的,而给定 计算却相对容易。

Diffie-Hellman算法:

假如用户A和用户B希望交换一个密钥。

取素数p和整数aap的一个原根,公开a和p。

A选择随机数XA<p,并计算YA=a^XA mod p。

B选择随机数XB<p,并计算YB=a^XB mod p。

每一方都将X保密而将Y公开让另一方得到。

A计算密钥的方式是:K=(YB) ^XA modp

B计算密钥的方式是:K=(YA) ^XB modp

证明:

                     (YB)^ XA mod = (a^XB modp)^ XA mod p

                         = (a^XB)^ XA mod p = (a^XA) ^XB mod p   
(<-- 密钥即为 a^(XA*XB) mod p)

                         =(a^XA modp)^ XB mod p= (YA) ^XB mod p

由于XA和XB是保密的,而第三方只有pa、YB、YA可以利用,只有通过取离散对数来确定密钥,但对于大的素数p,计算离散对数是十分困难的。

例子:

假如用户Alice和用户Bob希望交换一个密钥。

取一个素数p =97和97的一个原根a=5。

Alice和Bob分别选择秘密密钥XA=36和XB=58,并计算各自的公开密钥:

YA=a^XA mod p=5^36 mod 97=50

YB=a^XB mod p=5^58 mod 97=44

Alice和Bob交换了公开密钥之后,计算共享密钥如下:

Alice:K=(YB) ^XA mod p=44^36 mod 97=75

Bob:K=(YA) ^XB mod p=50^58 mod 97=75 

(2)、安全性

当然,为了使这个例子变得安全,必须使用非常大的XA, XB 以及p, 否则可以实验所有的可能取值。(总共有最多97个这样的值, 就算XA和XB很大也无济于事)。
如果 p 是一个至少 300 位的质数,并且XA和XB至少有100位长, 那么即使使用全人类所有的计算资源和当今最好的算法也不可能从a, p和a^(XA*XB) mod p 中计算出 XA*XB。
这个问题就是著名的离散对数问题。注意g则不需要很大, 并且在一般的实践中通常是2或者5。
在最初的描述中,迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,因此它很容易受到中间人攻击。 
一个中间人在信道的中央进行两次迪菲-赫尔曼密钥交换,一次和Alice另一次和Bob,就能够成功的向Alice假装自己是Bob,反之亦然。
而攻击者可以解密(读取和存储)任何一个人的信息并重新加密信息,然后传递给另一个人。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。
有很多种安全身份验证解决方案使用到了迪菲-赫尔曼密钥交换。例如当Alice和Bob共有一个公钥基础设施时,他们可以将他们的返回密钥进行签名。

时间: 2024-11-01 01:07:06

DH密钥交换非对称加密的相关文章

非对称加密(1)非对称加密原理

现在我们已经知道对称加密的一个最大的问题是如何安全地传输密钥,并且在对称加密的体系下找不到好的解决方案.1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是"公开密钥系统".相对于"对称加密算法"这种方法也叫做"非对称加密算法". 与对称加密算法不同,非对称加密算法需要两个密钥:公钥(publickey)和私钥(privatekey

Android 安全加密:非对称加密详解_Android

Android安全加密专题文章索引 Android安全加密:对称加密 Android安全加密:非对称加密 Android安全加密:消息摘要Message Digest Android安全加密:数字签名和数字证书 Android安全加密:Https编程 以上学习所有内容,对称加密.非对称加密.消息摘要.数字签名等知识都是为了理解数字证书工作原理而作为一个预备知识.数字证书是密码学里的终极武器,是人类几千年历史总结的智慧的结晶,只有在明白了数字证书工作原理后,才能理解Https 协议的安全通讯机制.

详解.Net下的加密解密算法(6) 玩转非对称加密

本博文来聊聊怎么玩转非对称加密吧,这里主要介绍.NET算法下的3种非对称加密算法:DSA,RSA,ECDsa.上两篇博文分 别为Hash家族和非对称加密家族找到了lead,现在我们就为非对称加密技术找个合适的lead吧. 首先创建一个接口 :"IEncryptAndDecrypt",然后为上面的3中算法分别创建3个实现类并让这些类实现接口"IEncryptAndDecrypt".它们 的情况如下图: 这下我们把这些哥们都召集起来了,现在我们就给他们找一个lead:&

详解.NET下的加密解密算法(3) 非对称加密

本博文列出了.NET下常用的非对称加密算法,并将它们制作成小DEMO,希望能对大家有所帮助. RSA static string EnRSA(string data,string publickey) { RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); byte[] cipherbytes; rsa.FromXmlString(publickey); cipherbytes = rsa.Encrypt(Encoding

C#—非对称加密:加密文件 RSA

加密 C#-非对称加密:加密文件★★★★★★ ☆☆☆ ★★★★★★●●○○    聂永  ○○●●§§§§nie_yong@163.com§§§§◆◆□□nie.yong@126.com□□◆◆№№№№№№ ※※※ №№№№№№ 说明:1.你要注意的是读取文件的两种不同方式:2.从已经保存的钥匙文件中读取其内容:3.这个程序做的很粗糙(要准备考外语六级,要准备期末考试,实在很忙啊!),希望诸位能够完善,然后也发表出来,在下表示感谢:4.参考书目: <C#数据安全手册>;5.有做这方面程序的朋友

C#—非对称加密:加密文件

加密 C#-非对称加密:加密文件★★★★★★ ☆☆☆ ★★★★★★●●○○ 聂永 ○○●●§§§§nie_yong@163.com§§§§◆◆□□nie.yong@126.com□□◆◆№№№№№№ ※※※ №№№№№№ 说明:1.你要注意的是读取文件的两种不同方式:2.从已经保存的钥匙文件中读取其内容:3.这个程序做的很粗糙(要准备考外语六级,要准备期末考试,实在很忙啊!),希望诸位能够完善,然后也发表出来,在下表示感谢:4.参考书目: <C#数据安全手册>;5.有做这方面程序的朋友,愿意相

C#---非对称加密的一个程序

程序|加密 using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.IO;using System.Text;using System.Security.Cryptography; namespace 非对称加密{ /// <summary> /// Form1

非对称加密(4).NET非对称加密实践

非对称加密在理论上似乎比对称加密简单,但是在实际应用中的细节却复杂得多,为了能由浅入深地理解.NET中的非对称加密,本小节分步理解其中的细节. 非对称密钥 当使用一个非对称加密类创建一个该类的实例的时候,构造函数会生成一个"公钥/私钥"对.我们可以选择是否保存该密钥和保存的方式. 先从代码清单6-8的内容来熟悉下非对称密钥的密钥结构. 代码清单6-8 输出非对称密钥 class Program { staticvoid Main(string[] args) { RSACryptoSe

漫谈iOS RSA非对称加密与解密

前言 最近公司的客户端安全性出现了严重的问题,如今这个出解决方案并自我测试验证可行性的重任落在了我的身上,学习了很多他人的文章,再经过多次讨论,最后才确定最终解决方案.笔者在这里讲讲这一经历中所需要了解的知识. iOS客户端想要加密传输数据以防被窃取,最可靠的方式莫过于使用公钥加密算法加密,使用HTTPS协议在整个传输过程中都使用了这个技术,对于未能使用HTTPS的HTTP接口,我们能否实现RSA加密呢? PHP端实现解密可参考:iOS与PHP端实现RSA非对称加密解密 提示:本篇文章只讲RSA