C++ Diffie-Hellman 算法2024 年 8 月 28 日 | 阅读 6 分钟 Diffie-Hellman 算法是一种在公共信道上有效交换加密密钥的方法。它是最早的公钥协议之一。Diffie-Hellman密钥交换由Ralph Merkle发明,并以Whitfield Diffie和Martin 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]内都不同,以及两个私有值,称为a和b。P和G都是公开的数字。用户(例如Alen和Roy)选择两个私有值b和a,然后生成一个密钥并公开交换。当另一个人收到密钥时,会生成一个秘密密钥。
生成的密钥进行交换
代数上可以证明 ka = kb 用户现在可以使用对称密钥加密数据。 一些例子
实施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密钥交换是此类协议的可行选择,因为它生成密钥的速度很快。 密码认证密钥协商当Joy和Allen共享密码时,他们可以通过使用DH的密码认证密钥协商来防御中间人攻击。一种简单的方法是将生成的密码与s(其中s是共享秘密)的哈希值进行比较,该哈希值已在信道两端独立连接。这些方法有一个优点,就是攻击者一次只能测试一个密码与另一方进行交互,从而提供强大的安全性,即使密码较弱。G.hn家庭网络标准使用的方法在ITU-T建议X.1035中有详细介绍。其中一种协议是安全远程密码协议(Secure Remote Password protocol)。 结论
下一个主题C++ 中的宽字符 |
在 C++ 中,多线程是一种强大的技术,程序被分解为称为线程的执行单元。多线程允许 CPU 或多核处理器的单个核心同时运行多个线程。C++ 中的编程使应用程序能够...
阅读 12 分钟
一种称为 K 维树(或简称 K-D 树)的数据结构。它旨在 K 维域中进行有效的空间搜索。它是二叉搜索树的多维泛化。K-D 树在计算机图形学、最近邻搜索等各种领域都有应用...
5 分钟阅读
在本文中,我们将通过示例讨论 C++ 中的神经网络。什么是神经网络?神经网络是一种计算模型,其结构与大脑中的神经元相似。它的功能也与….
11 分钟阅读
名为 std::auto_ptr 的智能指针在 C++98 中被添加到 C++ 中,用于控制动态分配对象的内存分配。它旨在为动态分配的对象提供自动内存管理,并且是 C++ 标准库的一部分。但是,std::auto_ptr 已在 C++11 中弃用...
阅读 3 分钟
我们将讨论 C++ 编程语言中的二分查找。二分查找是一种通过不断将数组分成两半然后从一半数组中搜索指定元素的机制,用于查找排序数组中的给定元素。然后继续...
阅读 6 分钟
如果你处理视觉效果,编写游戏需要扎实的编程技能以及对 OpenGL 和 DirectX 等几个 API 的深刻理解。对于 C++ 程序员来说,有几个游戏引擎可以简化这个过程。必需的头文件...
阅读 4 分钟
CComPtr 和 CComQIPtr 是 Microsoft COM 库(Windows API 的一部分)提供的智能指针,用于管理 COM 对象的生命周期。它们用于简化创建、使用和释放 COM 对象的过程,并帮助避免诸如...
阅读 16 分钟
在 C++ 中打印给定二进制矩阵中唯一行的问题的理解和解决可以通过几种计算机科学概念和理论来完成。以下是与解决此问题相关的一些关键理论和概念:二进制矩阵表示在二进制矩阵中,每个元素...
阅读 4 分钟
在本文中,您将学习如何在 C++ 中将字符串分割成 N 个相等的部分。字符串操作和基本算术用于 C++ 程序中将字符串分割成 N 个相等的部分。1. 输入:程序开始时需要两个用户输入……
阅读 4 分钟
C++ 中强大而重要的运算符重载功能,使您能够修改用户定义数据类型的内置运算符行为。作为一种面向对象的编程语言,C++ 拥有这项主要特性。通过使您的...
11 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India