Python:Diffie-Hellman共享会话密钥

Diffie-Hellman

关于这两位闻名世界的靓仔,相信各位并不陌生,资料和他俩的贡献都不少
DH-度娘版

算法描述

假设用户A和B希望交换一个密钥,用户A选择一个作为私有密钥的随机数XA(XA<q),并计算公开密钥YA=a^XA mod q。A对XA的值保密存放而使YA能被B公开获得。类似地,用户B选择一个私有的随机数XB<q,并计算公开密钥YB=a^XB mod q。B对XB的值保密存放而使YB能被A公开获得。
看完感觉懵懵的

例子

——来自度娘的例子
密钥交换基于素数q = 97和97的一个原根a = 5
A和B分别选择私有密钥XA = 36和XB = 58
每人计算其公开密钥 YA = 5^36 = 50 mod 97 YB = 5^58 = 44 mod 97 在他们相互获取了公开密钥之后,各自通过计算得到双方共享的秘密密钥如下:
K = (YB)^XA mod 97 = 44^36 = 75 mod 97 K = (YA)^XB mod 97 = 50^58 = 75 mod 97
但是从50,44出发,攻击者要计算出75很不容易
啊……其实就是攻击者想要拿到密钥就要解决像a的多少次方在模p的情况下等于b的离散对数问题

声明

本文所使用的自定义函数均在之前发的我的prime.py(某篇不起眼的文章)中

算法实现

import prime
import random
p=prime.safe_length(100)
print('p='+str(p))
g=prime.safe_root(p)
print('g='+str(g))

x=random.randint(1, p)
print('A的私钥x:'+str(x))
gx=pow(g,x,p)
print('发送给B:'+str(gx))
y=random.randint(1, p)
print('B的私钥y:'+str(y))
gy=pow(g,y,p)
print('发送给A:'+str(gy))

ka=pow(gy,x,p)
print('A的会话密钥:'+str(ka))
kb=pow(gx,y,p)
print('B的会话密钥:'+str(kb))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值