密钥交换的概念密钥交换,也有称作密钥协商,这套机制,最主要的作用是用来得到通信双方的临时会话密钥。这里的临时会话密钥,可以理解为对称加密的密钥,只不过他的有效性仅限于一次会话链接,并不是长期有效的。 基于RSA的密钥交换简单的密钥交换过程基于RSA进行密钥交换,基于非对称密钥的两个基本特性:使用公钥加密、私钥解密,且此过程无法逆向公钥是对外公开的,私钥是私密不公开的客户端与服务端在简单的密钥交换场景中 图片客户端是密钥生成的决定方在基于RSA的密钥交换体系中,总是由客户端来生成密钥。 密钥交换协议DH前面我们聊了很多RSA,但其实,RSA更侧重于非对称密钥算法,主要功能其实还是在于加密与解密。而密钥交换协议DH,是专门用于协商密钥生成的。 RSA可以用来传输信息,DH更适合用来协商密钥。DH算法解决了密钥在双方不直接传递密钥的情况下完成密钥交换,这个神奇的交换原理完全由数学理论支持。
数学描述 Diffie-Hellman密钥交换 Diffie-Hellman密钥交换是W.Diffie和M.Hellman在1976年提出的第一个公钥密码算法,已在很多商业产品中得到应用。 算法的唯一目的是要让两个用户安全的协商出一个共同的密钥。 首先选择一个大素数p,再选择p的一个本原根a,p和a这两个值可以在网上公开,任何人都可以查询到。用户A选择一个保密的数 ? ,并将 ?
用户A通过计算Yb^Xa mod q产生密钥。用户B同理计算出密钥。 那么,这两个密钥是相同的。 为什么相同呢? 就这样,用户AB都自己随便凑了个数,得到了相同密钥,中间人监听也得不到有用信息。不过,如果中间人假冒A与B,同时拿两份密钥,DH算法一样可以被攻破。
图片TLS是固定格式,一般在ng配置的时候是不需要配置TLS_这一部分的,直接从密钥交换开始算。 DH 算法:DH 交换密钥时就只有客户端的公钥是变化,而服务端公钥是不变的,那么随着时间延长,黑客就会截获海量的密钥协商过程的数据,因为密钥协商的过程有些数据是公开的,黑客就可以依据这些数据暴力破解出服务器的私钥 ,然后就可以计算出会话密钥了,于是之前截获的加密数据会被破解DHE 算法既然固定一方的私钥有被破解的风险,那么干脆就让双方的私钥在每次密钥交换通信时,都是随机生成的、临时的,这个方式也就是 DHE 算法 (这里解释下原因:如果RSA证书,那么密钥交换方式也是RSA的,肯定可以。 密钥交换模式是ECDHE的话,由于ECDHE的密钥交换过程无需证书的实质性参与,所以RSA证书也可以和ECDHE一起工作;ECDHE的密钥交换方式可以参考我的另一篇博客;交换过程主要是client和server
背景 对称加密算法通过密钥解决了数据加密问题,但是如何安全的传输密钥成为了下一个问题。如果密钥被窃取了,那对称加密数据就没有什么意义了。 密钥交换算法(Diffie-Hellman算法 or DH算法)就是为了解决这个问题而出现的算法,DH算法也奠定了非对称加密算法的基础。 密钥交换算法(DH算法) 张三先随机取一个较大的素数p = 7777,一个底数g = 11,私钥k1 = 31,计算A = g^k1 MOD p = 2937 张三将p、g、A三个值发个李四 李四随机选择私钥为 k2 = 19,计算B = g^k2 MOD p = 6325, 李四将B发给张三 李四计算密钥S2 = A^k2 MOD p = 781 张三计算密钥S1 = B^k1 MOD p = 781 明文传输了 p、g、A、B四个值,只通过这四个值是无法计算出最终的密钥S,张三李四通过自己的私钥K1和k2计算出约定的密钥S1和S2,这样就完成了密钥的交换。
迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange,简称“D–H”) 是一种安全协议。 它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。 例子: 假如用户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 注意g则不需要很大, 并且在一般的实践中通常是2或者5。 在最初的描述中,迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,因此它很容易受到中间人攻击。 有很多种安全身份验证解决方案使用到了迪菲-赫尔曼密钥交换。例如当Alice和Bob共有一个公钥基础设施时,他们可以将他们的返回密钥进行签名。
今天这篇来介绍一下实战中使用的“密钥协商算法”。 ★密钥交换/协商机制要达到啥目的? 前一篇介绍了 SSL/TLS 的身份认证机制。 举例: RSA ◇依靠专门的密钥交换算法 原理: 这个原理比较复杂,一两句话说不清楚,待会儿聊到 DH 的那个章节会详谈。 客户端从 CA 证书中取出公钥 5. 客户端生成一个随机密钥 k,并用这个公钥加密得到 k’ 6. 客户端把 k’ 发送给服务端 7. 服务端收到 k’ 后用自己的私钥解密得到 k 8. 3. g 必须是质数,【不】需要很大,比如 2 或 3 或 5 都可以。g 如果太大并【不能】显著提升安全性,反而会影响性能。 ◇如何防范偷窥(嗅探) 使用这种算法,在协商密钥的过程中交换的是密钥的标识(ID)而【不是】密钥本身。 就算攻击者监视了全过程,也无法知晓密钥啥。
概述: DH 算法又称“Diffie–Hellman 算法”,像往常的算法名字一样,这是用俩个数学牛人的名字来命名的算法,实现安全的密钥交换,通讯双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥 用该算法协商密码,即使中间被截获,也无法解密出来密钥是啥 缺点: 没有办法进行认证 计算很复杂,但是一般情况下,一个会话只用计算一次,那么假如有大量的请求,就会耗费大量的资源来进行计算,容易受阻塞性攻击 张三和李四互相交换各自的公钥。 y)发送至客户端 客户端计算Sa(x,y) = Ra * Pb(x,y) 服务器计算Sb(x,y) = Rb *Pa(x,y) 算法保证了Sa = Sb = S,提取其中的S的x向量作为密钥 (预主密钥)
迪菲-赫尔曼密钥交换(英语:Diffie-Hellman key exchange,缩写为D-H) 迪菲-赫尔曼密钥交换是在美国密码学家惠特菲尔德.迪菲和马丁.赫尔曼的合作下发明的,发表于1976年。 它是第一个实用的在非保护信道中创建共享密钥(英语:Shared secret)方法。它受到了瑞夫.墨克的关于公钥分配工作的影响。 算法理论证明 对上面Alice和Bob秘钥交换问题的解释(下面用A与B分别表示两人) 首先A: a^k1 mod b ≡ c (例子中a=5,b=23) B: a^k2 mod b ≡ d 之后二人交换所得 (k,k-1)(qb)*n^(k-1) +C(k,k)n^k 参考资料 wikipedia https://zh.wikipedia.org/wiki/%E8%BF%AA%E8%8F%B2-%E8%B5% AB%E7%88%BE%E6%9B%BC%E5%AF%86%E9%91%B0%E4%BA%A4%E6%8F%9B 网易公开课 http://open.163.com/movie/2012/10/K/N/
本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 简介 Diffie-Hellman(简称DH)是密钥交换算法之一,它的作用是保证通信双方在非安全的信道中安全地交换密钥 目前DH最重要的应用场景之一,就是在HTTPS的握手阶段,客户端、服务端利用DH算法交换对称密钥。 下面会先简单介绍DH的数理基础,然后举例说明如何在nodejs中使用DH相关的API。 var crypto = require('crypto'); var primeLength = 1024; // 素数p的长度 var generator = 5; // 素数a // 创建客户端的 console.log(clientSecret.toString('hex')); console.log(serverSecret.toString('hex')); 相关链接 理解 Deffie-Hellman 密钥交换算法 迪菲-赫尔曼密钥交换 Secure messages in NodeJSusing ECDH Keyless SSL: The Nitty Gritty Technical Details
简介 Diffie-Hellman(简称DH)是密钥交换算法之一,它的作用是保证通信双方在非安全的信道中安全地交换密钥。 目前DH最重要的应用场景之一,就是在HTTPS的握手阶段,客户端、服务端利用DH算法交换对称密钥。 下面会先简单介绍DH的数理基础,然后举例说明如何在nodejs中使用DH相关的API。 var crypto = require('crypto'); var primeLength = 1024; // 素数p的长度 var generator = 5; // 素数a // 创建客户端的 console.log(clientSecret.toString('hex')); console.log(serverSecret.toString('hex')); 相关链接 理解 Deffie-Hellman 密钥交换算法 迪菲-赫尔曼密钥交换 Secure messages in NodeJSusing ECDH Keyless SSL: The Nitty Gritty Technical Details
从上面的过程我们可以看到,如果传送者跟接收者都有密钥 KEY ,那么就可以在不安全的信道下进行安全的通信了,目前比较流行的对称加密算法有 AES、DES、3DES、TDEA、Blowfish、RC5、IDEA 这时候我们又要搬出伟大的数学了,今天介绍一种算法 迪菲-赫尔曼密钥交换,这个算法能够解决在不安全的信道下进行安全的密钥交换问题,究竟是怎么实现的呢。 迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange,简称“D–H”) 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。 (这两个概念不清楚的自己百度去) 交换的过程分为 3 part 。 第 1 part :A 和 B 各自生成一个私钥。 第 2 part :A 和 B 进行指数运算,然后求模。 虽然这个方法很棒,但是你思考一下下面这个过程,如果 A 要跟 5 个人通信,那么 A 就要保存 5 个密钥,久而久之,A会崩溃的。。。 如果不想这样,那能怎么办呢?
Internet 密钥交换 (IKE) 是一种协议,旨在为需要加密通信的终端创建安全关联。 虽然非对称加密看起来很安全,但它也有一个缺点,非对称加密和解密非常耗时,这使得非对称加密在交换大量数据时不是最优的。 在主模式的第一阶段,IKE 通过包交换协商一个 IKE SA。该 SA 主要用于加密第 2 阶段用于数据加密的对称密钥协商中使用的对称密钥的消息。 IKE 提议参数交换消息 图 5. 密钥生成信息交换 图 6. 身份和认证信息交换 与IKEv1 相比,IKEv2 简化了协商过程,通过两次交换,四个 ISAKMP 消息建立一个 IPSec SA,大大改善了协商过程。 图 7.
python实现Diffie-Hellman密钥交换算法工程文件
前言 迪菲赫尔曼密钥交换是一种可以在通信双方之间安全交换密钥的方法。这种方法通过将双方共有的密码数值隐藏在公开数值相关的运算中,来实现双方之间密钥的安全交换。 但是,X无法用自己窃听到的密钥合成出P-SA-SB,因此这种交换方式是安全的。 迪菲赫尔曼密钥交换图解 如图所示,P、G两个整数表示一开始生成的公开密钥P。 因此,此处使用迪菲赫尔曼密钥交换是安全的。 迪菲赫尔曼密钥交换是通过素数P、生成元G和“G的x次方 mod P”求出X的问题就是「离散对数问题」,至今为止尚未找到这个问题的解法,而迪菲赫尔曼密钥交换正是利用了这个数学难题,因此在离散对数问题未解决前 ❝使用迪菲赫尔曼密钥交换,通信双方仅通过交换一些公开信息就可以实现密钥交换。但实际上,双方并没有交换密钥,而是生成了密钥。因此,该方法又被叫做「迪菲赫尔曼协议」。
服务器证书的公钥,必须和选择的密钥交换算法配套。 其中有5种是ECC密钥交换算法:ECDH_ECDSA, ECDHE_ECDSA, ECDH_RSA, ECDHE_RSA, ECDH_anon。 如果一个CipherSuite指定了新的TLS密钥交换算法,也会指定证书格式和要求的密钥编码方法。 signed_params 对需要认证的(即非anonymous的)密钥交换,对服务器的密钥交换参数的数字签名。 消息结构: 消息的选择取决于选择的密钥交换算法。
概述 迪菲-赫尔曼算法用于通信双方交换密钥. 还记得之前介绍HTTPS协议的时候, 提到需要先通过对方公钥来进行密钥的交换, 然后再通过密钥对通信内容进行加密. 迪菲-赫尔曼算法就是用于交换密钥的. . 此算法与非对称加密算法不同哦. OK, 一起来看看吧. 引入 在正式介绍迪菲-赫尔曼算法之前, 先简单跟我思考下面场景. 重复一下上面的交换步骤, 开始尝试建立公共密钥 「第一步」 选择自己的私人数字. ? image-20200503205038362 OK, 至此, 密钥交换成功. 当然, 通过穷举的方法还是可以得到共享密钥. 例子中的数字为方便计算, 都很小. 比如2是11的本原根.(2^1%11 ... 2^10%11 的值分别为: 2,4,8,5,10,9,7,3,6,1.
密钥交换/协商机制 密钥协商这一概念也得以提出。一方面它能为参与者提供身份认证,另一方面,也能与参与者协商并共享会话密钥。 针对以下问题: 1.有哪些密钥交换协议? 2.工作原理是什么? 依靠专门的密钥交换算法 原理:利用正向计算共享秘密简单、逆向求解私钥困难的思路。 ---- Diffie–Hellman密钥交换协议 简介:Diffie–Hellman(以下简称DH)密钥交换是一个特殊的交换密钥的方法。它是密码学领域内最早付诸实践的密钥交换方法之一。 (5)Bob向Alice发送bG。点bG被Eve知道也没有关系,他是Bob的公钥。 (6)Alice对Bob发送的点bG计算其在椭圆曲线上a倍的点。 (5)Bob向Alice发送bG。点bG被Eve知道也没有关系,他是Bob的公钥。 (6)Alice对Bob发送的点bG计算其在椭圆曲线上a倍的点。
我的公众号:密码学人CipherHUB 本文描述一种客户端-服务器加密通信方案,核心流程结合临时ECDH密钥交换、HKDF密钥强化、AES-GCM数据加密三阶段技术栈。 该方法兼顾效率与安全性,适用于敏感数据传输场景(如凭证交换、支付信息传输)。 核心流程 服务端身份密钥初始化 服务端生成持久化ECC密钥对(ECC-PERSIST-KEY-B),公钥提前分发至客户端(标记为ECC-PERSIST-KEY-A)。 客户端会话密钥构建 客户端为当前会话生成临时ECC密钥对(ECC-Tmp-Key-B),私钥在内存中生存周期限于本次会话。 设计思想 现代密码学分层设计思想: 非对称层:ECDH提供密钥协商(临时密钥实现前向保密) 转换层:HKDF消解算法耦合,输出标准化密钥 对称层:AES-GCM实现高速保密通信undefined
image.png 不需要可信第三方的密钥交换。 image.png Merkle Puzzles 没有可信第三方的密钥交换,可以用对称加密实现吗? 可以滴!!!但是效率很低,实际中没有用。 image.png Alice 和 Bob 交换密钥所花费的时间很多,代价很高。 image.png 对于对称密钥和哈希函数,平方鸿沟是最好的结果了。 image.png DH密钥交换协议 能否实现一个指数级鸿沟? image.png DH密钥交换协议构造方法。 image.png 安全性。 image.png 离散对数问题的困难性。 表展示了使用DH协议交换会话密钥,用于分组加密的会话密钥要有合适的密钥大小,这张表展示了需要使用的模的大小,使得密钥交换协议的安全性和你之后使用的分组密钥的安全性相当。 image.png 交换密钥。 image.png 安全性。 针对窃听是安全的。 image.png 中间人攻击。 image.png 文献推荐 image.png