C++ Diffie-Hellman 算法

2024 年 8 月 28 日 | 阅读 6 分钟

Diffie-Hellman 算法是一种在公共信道上有效交换加密密钥的方法。它是最早的公钥协议之一。Diffie-Hellman密钥交换由Ralph Merkle发明,并以Whitfield DiffieMartin Hellman的名字命名。DH(Diffie-Hellman)是密码学领域中公钥交换的第一个实例。这项工作首次向公众介绍了公钥私钥对应对的概念。

总的来说,两方之间的安全加密通信需要通过物理和安全的方式交换密钥,例如由信誉良好且安全的信使递送的纸质密钥列表。通过使用DH密钥交换机制,双方在事先不知道对方的情况下,可以通过不安全(公共)信道建立共享的秘密。然后,可以使用此密钥通过对称密钥密码加密通信。

Diffie-Hellman密钥交换创建了双方共享的秘密,以便在公共网络上传输数据时进行秘密通信。许多与互联网相关的服务都是使用Diffie-Hellman开发的。然而,2015年10月的研究显示,当时使用的Diffie-Hellman设置不足以防御资金充裕的攻击者,例如某些国家的安全部门特工。尽管DH密钥协商是一种非认证密钥协商协议,但它为许多认证协议奠定了基础,并用于在传输层安全性(Transport Layer Security)的临时模式中提供前向保密(forward secrecy)。

Diffie-Hellman 算法

算法描述

公钥密码学的缩写是ECC(椭圆曲线密码学)。它基于有限域上椭圆曲线的代数结构。与非椭圆曲线加密相比,椭圆曲线密码学只需要较小的密钥即可提供相同的安全性(256位ECC的安全性相当于3072位RSA加密)。通过使用这种椭圆曲线生成点,并使用参数推导出私钥,Diffie-Hellman算法被用来建立一个共享的秘密,该秘密可用于在公共信道上传输数据时进行秘密通信。

分步描述

为了简单且实用地实现该算法,我们考虑四个变量:一个素数P,一个P的本原根,称为Q(如果对于素数n,n的本原根r,并且它位于范围[1,n-1]内,使得rx(modn)的所有值,其中x位于范围[0,n-2]内都不同,以及两个私有值,称为abPG都是公开的数字。用户(例如AlenRoy)选择两个私有值ba,然后生成一个密钥并公开交换。当另一个人收到密钥时,会生成一个秘密密钥

AlenRoy
P 和 G 是公开的密钥P 和 G 是公开的密钥
a 是选定的私钥b 是选定的私钥
生成的密钥:x = Ga mod P生成的密钥:y = Gb mod P

生成的密钥进行交换

AlenRoy
y 是收到的密钥x 是收到的密钥
生成的密钥:ka = ya mod P生成的密钥:kb = xb mod P

代数上可以证明

ka = kb 用户现在可以使用对称密钥加密数据。

一些例子

  • AlenRoy各自的公共数字为P = 23G = 9
  • AlenRoy分别选择了私钥a=4b=3
  • Alen和Roy计算公共值。Alen:x = (9^4 % 23) = (6561 % 23) = 6Roy:y = (9^3 % 23) = (729 % 23) = 16
  • RoyAlen交换了公共密钥。
  • 公共密钥y=16x=6分别被给出给AlenRoy
  • Alen和Roy计算对称密钥。Alen:ka = y^a % p = 16^4 % 23 = 65536 % 23 = 9。 Roy:kb = x^b % p = 6^3 % 23 = 216 % 23 = 9。
  • 泄露的秘密是9。

实施

C++ 代码

输出

Value of Ps is: 32
Value of Gs is: 5
Private key g is: 6
Private key h is: 2
Alen's Secret key is: 17
Roy's Secret key is: 17
Other Uses

加密

已经提出了一种基于Diffie-Hellman密钥交换的公钥加密系统。最初的此类系统是ElGamal加密。另一个当代变体是集成加密方案(Integrated Encryption Scheme)。

初始保密性

前向保密协议为每个会话生成新的密钥对,并在会话结束时销毁它们。Diffie-Hellman密钥交换是此类协议的可行选择,因为它生成密钥的速度很快。

密码认证密钥协商

JoyAllen共享密码时,他们可以通过使用DH的密码认证密钥协商来防御中间人攻击。一种简单的方法是将生成的密码与s(其中s是共享秘密)的哈希值进行比较,该哈希值已在信道两端独立连接。这些方法有一个优点,就是攻击者一次只能测试一个密码与另一方进行交互,从而提供强大的安全性,即使密码较弱。G.hn家庭网络标准使用的方法在ITU-T建议X.1035中有详细介绍。其中一种协议是安全远程密码协议(Secure Remote Password protocol)。

结论

  • Diffie-Hellman算法是一种在公共信道上有效交换加密密钥的方法。
  • DH密钥交换技术使两个事先不认识的双方能够通过不安全(公共)信道建立共享的秘密。
  • Diffie-Hellman密钥交换在双方之间创建一个共享的秘密,以便在公共信道域上进行秘密通信的数据交换。
  • 许多互联网服务是使用Diffie-Hellman开发的。
  • 一种称为DH的非认证密钥协商机制,可以在传输层安全性的临时模式中确保前向保密。它为许多认证协议奠定了基础。
  • 公钥密码学的缩写是ECC(椭圆曲线密码学)
  • 它基于有限域上椭圆曲线的代数结构。
  • 在通过公共信道传输数据时,Diffie-Hellman算法用于创建可用于安全通信的共享秘密。该椭圆曲线生成点,并使用参数来获取私钥。
  • 已经提出了一种基于Diffie-Hellman密钥交换的公钥加密系统。最初的系统是ElGamal加密。另一个当代变体是集成加密方案
  • 前向保密协议为每个会话生成新的密钥对,并在会话结束后销毁它们。Diffie-Hellman密钥交换因其快速的密钥生成而成为此类协议的可行选择。

下一个主题C++ 中的宽字符