DH密钥相关知识

一、DH密码的大概思路:
(1)协商公共参数g,p
(2)各自在1~p-1中随机选用私钥Xa,Xb
(3)各自计算可公平的公钥 y=g^xmodp
(4)利用公开信道交换公钥
(5)计算共享密钥k=ybxamodp=yaxbmodp
DH的具体做法:
1、Alice向Bob发送两个质数P和G

P必须是一个非常大的质数,而G则是一个和P相关的数,称为生成元。G可以是一个较小的数字

2、Alice生成一个随机数A

A是一个1~P-2之间的整数。这个数是一个只有Alice知道的秘密数字,没有必要告诉Bob,也不能让窃听者知道

3、Bob生成一个随机数B

B是一个1~P-2之间的整数。这个数是一个只有Bob知道的秘密数字,没有必要高数Alice,也不能让窃听者知道

4、Alice将 G的A次方 mod P 这个数发送给Bob

5、Bob 将 G的B次方 mod P 这个数发送给Alice

6、Alice用Bob发过来的数计算A次方并求 mod P,获得共享密钥

二、DH密钥CS交互的Python代码

import math
import random


def judge_prime(p):
    # 素数的判断
    if p <= 1:
        return False
    i = 2
    while i * i <= p:
        if p % i == 0:
            return False
        i += 1
    return True
def get_generator(p):
    # 得到所有的原根
    a = 2
    list = []
    while a < p:
        flag = 1
        while flag != p:
            if (a ** flag) % p == 1:
                break
            flag += 1
        if flag == (p - 1):
            list.append(a)
        a += 1
    return list
# A,B得到各自的计算数
def get_calculation(p, a, X):
    Y = (a ** X) % p
    return Y


# A,B得到交换计算数后的密钥
def get_key(X, Y, p):
    key = (Y ** X) % p
    return key


if __name__ == "__main__":
 # 得到规定的素数
    flag = False
    while flag == False:
        print('Please input your number(It must be a prime!): ', end='')
        p = input()
        p = int(p)
        flag = judge_prime(p)
    print(str(p) + ' is a prime! ')

    # 得到素数的一个原根
    list = get_generator(p)
    print(str(p) + ' 的一个原根为:', end='')
    print(list[-1])

    # 得到A的私钥
    XA = random.randint(0, p - 1)
    print('A随机生成的私钥为:%d' % XA)

    # 得到B的私钥
    XB = random.randint(0, p - 1)
    print('B随机生成的私钥为:%d' % XB)
 # 得待A的计算数
    YA = get_calculation(p, int(list[-1]), XA)
    print('A的计算数为:%d' % YA)

    
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值