DH算法及源码解读

article/2025/10/2 3:40:52

【主流的密钥交换方式】

敏感数据信息安全传输需要对敏感信息加密,加密的密钥涉及到传输两端的密钥协商和交换,目前主要两种密钥交换的机制有:

1. 基于非对称密钥的实现:请求方用接收方的公钥加密自己的密钥,接收方用自己的私钥解密得到请求方的密钥,反之一样,从而实现密钥的交换

2. DH密钥交换算法

【DH密钥交换算法】

双方协商用同一个大素数p和素数的原根g,各自生成随机数XA,XB。请求方将g的xA次方mod p产生数值发送给接收方,接收方再将g的XB次方mod p产生的数值发送给请求方,请求方再对接收的数值做XA次方并对p求余运算,接收方对接收的数值做XB次方并对p求余运算,最终形成共同的密钥K,以达到密钥的交换。

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

  1. 取素数p和整数ggp的一个原根,公开gp
  2. A选择随机数XA<p,并计算YA=g^XA mod p
  3. B选择随机数XB<p,并计算YB=g^XB mod p

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

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

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

A和B的K是相同的,K是共享秘钥

【DH算法源码解读】

主要涉及jdk中jce.jar、sunjce_provider.jar、rt.jar三个安全jar包。

主要涉及的几个类keyPairGeneratorDHPrivateKeySpec, DHPublicKeySpec, DHPublicKey DHPrivateKey DHKeyFactory, DHKeyAgreement几个类。

接下来主要针对keyPairGeneratorDHKeyFactoryDHKeyAgreement这几个类的源码进行阐述:

keyPairGenerator形成公私钥的key生成器:生成DHPublicKeyDHPrivateKey

DHKeyFactory:公私钥对象转换器工厂类:里面提供engineGeneratePublic(KeySpec paramKeySpec)protected PrivateKey engineGeneratePrivate(KeySpec paramKeySpec)用来转换数据,如下是engineGeneratePrivate的源码:

从源码中看出会根据paramKeySpec不同用不同的方法生成的DHPrivateKey,为了考虑语言兼容性,统一采用PKCS8EncodedKeySpec

接下来谈下协商的核心类:DHKeyAgreement

首先engineInit(Key paramKey, SecureRandom paramSecureRandom)提供初始化数据,包括P,G,privateKey,下面是对应的源码,b对应Pc->G,d对应privateKey

Key engineDoPhase(Key paramKey, boolean paramBoolean)初始化publickey数据,如下是部分源码:其中e对应到的就是publicKey.

最后这个方法也就是核心方法,协商的算法byte[] engineGenerateSecret(),返回的是协商后的密钥字节数组,源码如下:接下来具体分下下面代码。

从上面源码中看到最核心的代码就一句:BigInteger localBigInteger2 = this.e.modPow(this.d, localBigInteger1);把它转成数学方式的表达式为: publicKey^privateKey mod p = sharekey

再结合DH算法原理对上面就可以更好理解了:

DH算法:双方协商用同一个大素数p和 素数p的原根g,各自生成随机数X,Y。请求方将g的X次方mod p产生的数值发送给接收方,接收方将g的Y次方mod p产生的数值发送给请求方。请求方再对接收的数值做X次方运算,接收方对接收的数值做Y次方运算,最终生成一样的共享密钥,完成密钥的交换。


http://chatgpt.dhexx.cn/article/0Pj0pE43.shtml

相关文章

DH 加密算法的使用

DH 算法的介绍 上面介绍的 DES,3DES,AES 算法都是对称密码算法&#xff0c;所谓对称&#xff0c;在上面也解释了&#xff0c;就是加密和解密的过程中使用相同的密钥 。而现在将要介绍的是 DH 算法&#xff0c;属于非对称密码算法&#xff0c;根据对称密码的概念&#xff0c;很…

非对称加密 DH算法

DH算法简介 迪菲-赫尔曼密钥交换&#xff08;Diffie–Hellman key exchange&#xff0c;缩写为D-H&#xff09; 是一种安全协议。 它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。 这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。 迪…

DH算法 | Diffie-Hellman 密钥交换

概述&#xff1a; DH 算法又称“Diffie–Hellman 算法”&#xff0c;像往常的算法名字一样&#xff0c;这是用俩个数学牛人的名字来命名的算法&#xff0c;实现安全的密钥交换&#xff0c;通讯双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。 优点&am…

DH算法原理

DH算法原理 DH 是 Diffie-Hellman的首字母缩写&#xff0c;是Whitefield与Martin Hellman在1976年提出了一个的密钥交换协议。我个人倾向于称DH算法为 密钥协商协议而RSA算法是密钥交换算法。 本篇分为几个部分&#xff0c;第一个部分介绍一下密钥交换的场景&#xff1b;第二部…

DH、DHE、ECDHE加密算法

DH算法 离散对数 DH 算法是非对称加密算法&#xff0c; 因此它可以用于密钥交换&#xff0c;该算法的核心数学思想是离散对数。 对数运算&#xff1a; i l o g a b i log_{a}b iloga​b 离散对数是在对数运算的基础上加了「模运算」&#xff0c;也就说取余数&#xff0c;…

DH 算法原理

一、DH算法 DH 算法其实也叫作 Diffie - Hellman 密钥交换协议&#xff0c;是一个不安全的秘钥共享网络协议&#xff0c;无法避免中间人攻击。 二、DH算法的原理 假设 Ali 和 Bob 需要互相通信并共享秘钥 Ali 先给 Bob 一个明文共享参数 、 &#xff0c;此信息可以被任何人…

DH算法图解+数学证明

前几天和同事讨论IKE密钥交换流程时&#xff0c;提到了Diffie-Hellman交换。DH算法最主要的作用便是在不安全的网络上成功公共密钥(并未传输真实密钥)。但由于对于DH算法的数学原理则不清楚&#xff0c;因此私下对DH算法进行一个简单学习。 1. DH算法的交互流程&#xff1a; Al…

卷积神经网络(Convolutional Neural Networks,CNNS/ConvNets)

本文翻译自 Convolutional Neural Networks(CNNs / ConvNets)&#xff0c;更多内容请访问&#xff1a;http://cs231n.github.io/。 原来译文&#xff1a;https://blog.csdn.net/Consu_Yasin/article/details/78052411 卷积神经网络非常类似于普通的神经网络&#xff1a;它们都…

卷积神经网络CNNs的理解与体会

孔子说过&#xff0c;温故而知新&#xff0c;时隔俩月再重看CNNs&#xff0c;当时不太了解的地方&#xff0c;又有了新的理解与体会&#xff0c;特此记录下来。文章图片及部分素材均来自网络&#xff0c;侵权请告知。 卷积神经网络&#xff08;Convolutinal Neural Networks&a…

Gated-SCNN: Gated Shape CNNs for Semantic Segmentation论文笔记

论文介绍 作者认为之前的semantic segmentation的工作将所有信息都放入到了CNN的网络之中(这其中包含了颜色、边界、纹理等信息)&#xff0c;这不太理想&#xff0c;所以作者在regular stream的基础之上增加了一个shape stream的分支&#xff0c;通过利用门控卷积来控制使得sh…

【t-SNE可视化CNNs特征向量-代码】

t-SNE可视化CNNs特征向量-代码 本博客主要是自己学习记录&#xff0c;参考网络&#xff0c;欢迎指正 整体代码 ModelPath是存放训练好的模型参数的路径 DatasetPath是存放数据集的文件夹的路径&#xff0c;其中不同类别放在不同的子文件夹里也可以参考【t-SNE可视化-代码】 …

CNNs: AlexNet补充

CNNs: AlexNet的补充 导言对AlexNet模型进行调整模型不同层的表征其他探索总结 导言 上上篇和上一篇我们详细地讲述了AlexNet的网络结构和不同超参数对同一数据集的不同实验现象。 本节&#xff0c;我们就AlexNet的一些其他相关问题进行解剖&#xff0c;如修改AlexNet参数量调…

深度学习-浅谈CNNs

偶尔看到了这篇文章&#xff0c;感觉作者写的很容易理解&#xff0c;对于初步认识CNNs有很大的帮助&#xff0c;若想查看原文&#xff0c;请点击此处。 关于神经网络的学习方法&#xff0c;总结起来的要点有以下几点&#xff1a; BP算法 激励函数正则化与交叉验证等其他防止过…

【GSCNN】GSCNN:Gated Shape CNNs for Semantic Segmentation论文记录

目录 简单不看版&#xff1a; 摘要 一、介绍 二、相关工作 三、Gated Shape CNN 代码 四、实验 五&#xff0e;总结 论文&#xff1a;https://arxiv.org/abs/1907.05740 代码&#xff1a;GitHub - nv-tlabs/GSCNN: Gated-Shape CNN for Semantic Segmentation (ICCV 2…

CNNs和视觉Transformer:分析与比较

探索视觉Transformer和卷积神经网络&#xff08;CNNs&#xff09;在图像分类任务中的有效性。 图像分类是计算机视觉中的关键任务&#xff0c;在工业、医学影像和农业等各个领域得到广泛应用。卷积神经网络&#xff08;CNNs&#xff09;是该领域的一项重大突破&#xff0c;被广…

你应该知道的9篇深度学习论文(CNNs 理解)

当时看到英文的博客&#xff0c;本想翻译给感兴趣的同学们看看&#xff0c;没想到已经有人翻译&#xff0c;于是进行了转载&#xff0c;留给自己和更多的人学习&#xff0c;本文仅供参考。 英文博客&#xff1a;https://adeshpande3.github.io/adeshpande3.github.io/The-9-Dee…

【神经网络】CNN

CNN工作原理笔记 卷积神经网络定义卷积运算池化激活函数全连接反向传播算法其他应用延伸知识 首先放个学习视频链接: 大白话讲解卷积神经网络工作原理. 卷积神经网络定义 CNN其实就相当于黑箱&#xff0c;有输入有输出 输入&#xff1a;二维像素阵列 输出&#xff1a;判决结果…

CNN+RNN

CNN,RNN(recurrent, 下同)结合到一起可以建立一个更好的model 1. CRNN&#xff08;先CNN&#xff0c;后RNN&#xff09; References: An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition 一般用于基…

CNNs: ZFNet之CNN的可视化网络介绍

CNNs: ZFNet之CNN的可视化网络介绍 导言Deconvnet1. Unpooling2. ReLU3. Transpose conv AlexNet网络修改AlexNet Deconv网络介绍特征可视化 导言 上一个内容&#xff0c;我们主要学习了AlexNet网络的实现、超参数对网络结果的影响以及网络中涉及到一些其他的知识点&#xff0…

吊炸天的CNNs,这是我见过最详尽的图解!(上)

导读&#xff1a;卷积神经网络&#xff08;CNNs&#xff09;在“自动驾驶”、“人脸识别”、“医疗影像诊断”等领域&#xff0c;都发挥着巨大的作用。这一无比强大的算法&#xff0c;唤起了很多人的好奇心。当阿尔法狗战胜了李世石和柯杰后&#xff0c;人们都在谈论“它”。但…