密码学 专题 DH密钥交换算法

注意事项:

  • SSL中密钥交换算法有6种:无效(没有密钥交换)、RSA、匿名Diffie-Hellman、暂时Diffie-Hellman、固定Diffie-Hellman、Fortezza
  • 生成对话密钥一共需要三个随机数。(客户端生成随机数、服务器生成随机数、客户端使用服务器公钥加密的随机数);考虑到中间人攻击,中间人可以获得客户端生成随机数、服务器生成随机数和对称加密使用的算法,安全性完全依靠第三个加密的随机数(客户端使用服务器公钥加密的随机数),尽管只要服务器的公钥足够长,破解的难度很大。因此部分 算法使用 DH密钥交换算法;不需要使用第三个参数,仅仅根据 先前传递的随机数 计算这个 随机数
  • 迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange,简称“D–H”) 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。

算法描述

  • 离散对数的概念:
  • 原根:如果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 

安全性

  • 当然,为了使这个例子变得安全,必须使用非常大的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共有一个公钥基础设施时,他们可以将他们的返回密钥进行签名。

参考链接

  • DH密钥交换算法_NowOrNever-CSDN博客_dh算法
  • 算法学习笔记(40): 原根 - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446347.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qq浏览器网页翻译_iOS 14中直接在Safari浏览器中翻译网页的方法!

在 iOS 14 中&#xff0c;苹果推出了「翻译」的应用程序&#xff0c;可以实时翻译数种不同的语言。同时&#xff0c;Safari 浏览器也新增了翻译功能。借助新的网页翻译功能&#xff0c;Safari 会根据设备的首选语言列表自动检测书否需要翻译访问的网页内容&#xff0c;以便继续…

java 输出三位数和n位数的每一位的数

思路 规律&#xff1a;先除以/10^(n-1)再%10 三位数&#xff1a;n 个位&#xff1a;n/1%10 十位&#xff1a;n/10%100 百位&#xff1a;n/100%10 n位数&#xff1a;n 个位&#xff1a;n/10^0%10 十位&#xff1a;n/10^1%10 百位&#xff1a;n/10^2%10n位&#xff1a;n/10^(n…

密码学专题 相关概念的解析 对称算法|算法的安全性|非对称算法存在的问题|单向散列函数|数字签名的弊端|密钥交换

对称加密算法 对称加密算法又可以分成流加密算法和块加密 算法。流加密算法又称为序列加密算法或序列密码&#xff0c;它每次只对明文中的单个位或单个字节 进行加密操作。这种算法的优点是能够实时进行数据传输和解密&#xff0c;缺点是抗攻击能力比 较弱。块加密算法又称为分…

java 交换两个数的值(临时变量,加减,异或)

临时变量 开发中一般使用此方式 加减 第二种写法&#xff1a; //3.使用加减d1d1d2;d2d1-d2;d1d1-d2;System.out.println("d1"d1"\td2"d2);异或&#xff08;位运算符&#xff09; 原理 ^异或:相同为0,不同为1 总代码 class ExchangeNumber {public st…

ipython安装-IPython的安装及问题解决

IPython是python的一个第三方库&#xff0c;本来使用pip(类似于linux的yum)工具是很容易安装的&#xff0c;但是因为版本原因有时会出些问题&#xff0c;比如2.7.x版本的不能安装IPython的最新版本&#xff0c;会报错&#xff1a; 报错如下&#xff1a; [rootiZ2ze7qh6q0di3qkv…

51单片机下载完程序后不亮_程序如何下载到单片机中?单片机常用的四种烧写程序方式介绍...

单片机是一种可编程控制器&#xff0c;搭好硬件电路后&#xff0c;可以利用程序实现很多非常复杂的逻辑功能&#xff0c;与纯硬件电路相比&#xff0c;简化了硬件外围的设计、方便了逻辑的设计、丰富了逻辑的输出。不同厂家的单片机需要不同编程IDE来实现编程。在学习单片机之前…

java 使用三元运算符和if-else获取两个和三个数中的最大值

三元运算符格式 三元运算符:获取两个数中最大值 三元运算符:获取三个数中最大值 三元运算符:总代码 //案例1&#xff1a;获取两个数中最大的数int num178;int num256;int max1(num1>num2)?num1:num2;System.out.println("max1"max1);//max178//案例2&#xff1a;…

密码学专题 鉴别协议|实际应用的混合协议

鉴别是指确定一个人的身份&#xff0c;即确定一个人是否是他所宣称的身份 基于口令的鉴别协议 口令是最常用和最常见的鉴别协议。当登录一台重要的计算机时&#xff0c;它会要求输入用户 名和密码&#xff0c;用户名代表你的身份&#xff0c;口令起鉴别作用&#xff0c;如果你…

如何用texstudio下载ctex_公众号素材库视频如何下载,用这种方法就可以哦

随着微信的不断崛起&#xff0c;它现在不仅仅是一个交流软件还包含着很多功能&#xff0c;其中里面就有各种微信公众号&#xff0c;我们可以在公众号上找到许多有用的视频&#xff0c;今天拓途数据就告诉大家公众号素材库视频如何下载吧。 如何下载微信公众号里的视频文件 复制…

java 进制转换 十进制转二,八,十六进制

十进制转其他进制 因为在java中位运算符是直接对数值的二进制数进行操作的 并且 写的是二进制数在输出和操作时是以十进制数的形式&#xff1b; 所以十进制转二&#xff0c;八&#xff0c;十六进制&#xff1b;就已经实现了二进制&#xff0c;八进制&#xff0c;十进制&#x…

密码学专题 密钥生成|分组加密的模式 ECB|CBC|CFB|OFB

密钥生成 如何安全地生成密钥。即如何生成可信任的密钥&#xff0c;保证用户得到的密钥是安全的&#xff0c; 生成密钥的机器或程序是可信的。如何生成安全的密钥。安全的密钥没有统一准确的定义&#xff0c;但一般来说是指密钥抗 猜测和抗穷举等针对密钥攻击的能力。涉及密钥…

java 狗的年龄转换为对应的人的年龄

题目 我家的狗5岁了&#xff0c;5岁的狗相当于人类多大呢&#xff1f; 其实&#xff0c;狗的前两年每 一年相当于人类的10.5岁&#xff0c;之后每增加一年就增加四岁。 那么5岁的狗相当于人类多少年龄呢&#xff1f;应该是&#xff1a;10.5 10.5 4 4 4 33岁。 编写一个程序…

excel高级筛选怎么用_Excel表格中高级筛选的优点以及常用方法介绍

在Excel表格中普通的数据筛选只能满足一些基本的筛选要求&#xff0c;这篇文章为朋友们总结一下高级筛选的优点以及常用方法。一.与普通筛选相比&#xff0c;高级筛选可以使用比较运算符。在下图中要筛选性别为男并且评分大于90的人员。如果使用普通筛选需要一个个的勾选成绩大…

STL源码剖析 第二次温习 细节审核

临时对象的产生 临时对象也叫做 无名对象&#xff0c;(使用pass by value的方式会引发copy的操作&#xff0c;于是产生一个临时的对象)&#xff0c;造成效率的负担&#xff0c;但是可以可以制造一些临时对象在型别的后面 直接加上() 并可以指定初始数值&#xff0c;相当于调用…

java 彩票游戏

题目 Math.random()获取随机数 Math.random()返回的是一个[0.0,1.0)的doule类型的数 所以&#xff0c;获取0-9&#xff1a;(int)Math.random()*10–> [0,10) 获取0-10&#xff1a;(int)Math.random()*101–> [0,11) 获取10-99&#xff1a;(int)Math.random()9010–> […

python异常处理_Python入门 断言与异常处理

一、断言断言&#xff0c;可以理解为判断是否断开的预言。assert 表达式 , 描述表达式为我们的预期结果&#xff0c;当表达式的结果为False时&#xff0c;抛出 AssertionError 异常&#xff0c;如无异常捕获程序遇到异常时直接结束运行。反之&#xff0c;表达式结果为True 程序…

C++ 左值和右值 的学习

引用是一个变量&#xff0c;它引用其他变量的内存位置 int x 34; int &lRef x; 标识符 IRef 就是一个引用。在声明中&#xff0c;引用是通过 & 来指示的&#xff0c;出现在类型与变量的标识符之间&#xff0c;这种类型的引用称为左值引用左值看作是一个关联了名称的…

百度关键词排名查询源码_章丘百度霸屏总部,关键词排名腾沃云

上海保沃腾沃云为您详细解读URiIr章丘百度霸屏总部的相关知识与详情&#xff0c;做网站SEO优化文章内容优化效果已经十分明显。内容的量量关于网站的整体量量很重要。通过关键字阐发&#xff0c;陈某们晓得需要环绕关键字编写网页。使您的内容的重要根底是您对网页筹算描述的卖…

java 结婚问题

题目 大家都知道&#xff0c;男大当婚&#xff0c;女大当嫁。那么女方家长要嫁女儿&#xff0c;当然要提出 一定的条件&#xff1a;高&#xff1a;180cm以上&#xff1b;富&#xff1a;财富1千万以上&#xff1b;帅&#xff1a;是。 如果这三个条件同时满足&#xff0c;则&…

密码学专题 数据填充的方式|序列加密的方式

电子密码本模式和加密分组链接模式的分组算法都要求加密输入的分组是固定长度 的&#xff0c;但是大多数输入明文可能都不是分组长度的整数倍&#xff0c;也就是说&#xff0c;最后一个分组一般来 说是不足一个分组长度的。为了使分组加密算法能够正常工作&#xff0c;通常使用…