这个机制的巧妙在于它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道确定对称密钥。
安全性在于对于大素数p,计算离散对数是十分困难的
https://blog.csdn.net/chengqiuming/article/details/83002352
https://baike.baidu.com/item/Diffie-Hellman%E7%AE%97%E6%B3%95/20835355?fr=aladdin#3
输入一个素数和它的一个原始根,生成小于此素数的一个随机数,计算出用户的公钥,保存
然后再输入对方的公钥,计算出双方的会话密钥。
import random
import time
def dhAlgorithm(P,G):
random.seed(time.time())
A = random.randint(1,P-2)
X = 1
for i in range(A):
X = X * G
X = X % P
return (A,X)
def dhSessionKey(Y,P,A):
k = 1
for i in range(A):
k = k * Y
k = k % P
return k
这个机制的巧妙在于它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道确定对称密钥。安全性在于对于大素数p,计算离散对数是十分困难的参考:https://blog.csdn.net/chengqiuming/article/details/83002352https://baike.baidu.com/item/Diffie-Hellman%E7%AE%97%E6%B3%95/20...
d1 = pyDH . DiffieHellman ()
d2 = pyDH . DiffieHellman ()
d1_pubkey = d1 . gen_public_key ()
d2_pubkey = d2 . gen_public_key ()
d1_sharedkey = d1 . gen_shared_key ( d2_pubkey )
d2_sharedkey = d2 . gen_shared_key ( d1_pubkey )
d1_sharedkey == d2_sharedkey
默认情况下,它使用组 14(2048 位)。 使用另一个组(例如,15):
d1 = pyDH . DiffieHellman (
我们来看
DH算法交换密钥的步骤。假设甲乙双方需要传递
密钥,他们之间可以这么做:
甲首选选择一个素数p,例如509,底数g,任选,例如5,随机数a,例如123,然后计算A=g^a mod p,结果是215,然后,甲发送p=509,g=5,A=215给乙;
乙方收到后,也选择一个随机数b,例如,456,然后计算B=g^b mod p,结果是181,乙再同时计算s=A^b mod p,结果是121;
乙把计算的B=181发给甲,甲计算s=B^a mod p的余数,计算结果与乙算出的结果一样,都是121。
DH交换算法简介
Deffie-Hellman(简称 DH) 密钥交换是最早的密钥交换算法之一,它使得通信的双方能在非安全的信道中安全的交换密钥,用于加密后续的通信消息。 Whitfield Diffie 和 Martin Hellman 于 1976 提出该算法,之后被应用于安全领域,比如 Https 协议的 TLS(Transport Layer Security) 和 IPsec 协议的 IKE(Internet Key Exchange) 均以 DH 算法作为密钥交换算法。
DH算法
最近在知乎上看到一篇关于RSA和DH的比较,简单明了,以此记录一下。问题1: RSA做密钥协商(密钥交换)时,是否可以防范中间人攻击?
答:单就RSA本身而言,是无法防范中间人攻击的。
和其它加密过程一样,对RSA来说分配公钥的过程是非常重要的。分配公钥的过程必须能够抵挡中间人攻击。假设Eve交给Bob一个公钥,并使Bob相信这是Alice的公钥,并且她可以截下Alice和Bob之间的信息传递...
DH 算法是 Diffie和Hellman于1976年提出了一种的密钥交换协议。这种加密算法主要用于密钥的交换,可以在非安全信道下为双方创建通信密钥,通讯双方可以使用这个密钥进行消息的加密、解密,并且能够保证通讯的安全。
换而言之,算法希望实现这样的一个效果:
通信方A和B首先各自生成密钥DaD_aDa和DbD_bDb,然后通过某种计算获得各自的公钥PaP_aPa和PbP_bPb,接下来,A和B互相交换公钥PaP_aPa和PbP_bPb。现在,A持有自己的密钥DaD_aDa和B的公钥PbP_b
敏感数据信息安全传输需要对敏感信息加密,加密的
密钥涉及到传输两端的
密钥协商和
交换,目前主要两种
密钥交换的机制有:
1. 基于非对称
密钥的
实现:请求方用接收方的公钥加密自己的
密钥,接收方用自己的私钥解密得到请求方的
密钥,反之一样,从而
实现密钥的
交换
2.
DH密钥交换算法
【
DH密钥交换算法】
双方协商用同一个大素数p和素数的原根g,各自生成随机数XA,XB。请求方...
1、选择两个质数p和g,其中p是一个足够大的素数,g是一个原根。
2、Alice和Bob各自生成一个私钥a和b,并计算公钥A和B:A = g^a mod p,B = g^b mod p。
3、Alice接收到Bob的公钥B后,计算共享密钥K:K = B^a mod p。
4、Bob接收到Alice的公钥A后,同样计算共享密钥K:K = A^b mod p。
5、最后得到的K就是双方安全地共享的对称密钥。
以下是DH密钥协商算法的C语言实现:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int power(int g, int a, int p) {
int res = 1;
while(a) {
if(a & 1) res = res*g % p;
g = g*g % p;
a >>= 1;
return res;
int main() {
int p = 23, g = 5; //选择质数p和原根g
int a = 4, b = 3; //生成Alice和Bob的私钥
int A = power(g, a, p), B = power(g, b, p); //计算公钥A和B
int K1 = power(B, a, p), K2 = power(A, b, p); //双方计算共享密钥K
printf("双方共享的对称密钥:K = %d\n", K1);
return 0;
以上C代码实现了DH密钥协商算法,其中的power函数用于计算g的a次方对p取模的结果。对于不同的p和g,只需改变代码中的参数即可得到不同的共享密钥。
- device_id: 51e34b8ea763c454cbec5caabd259b9c
domain: select
entity_id: select.s12_cloud_418250_a_l
type: select_option
option: intelligent_speaker_play_music
mode: single