comSec 作业四 DH

本文详细介绍了Diffie-Hellman密钥交换算法的工作原理与具体步骤。通过两个示例展示了如何使用该算法在不安全的信道中安全地交换密钥。包括了计算公共密钥和共享密钥的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

10.1

a.YA=αXA=515Y_A = \alpha^{X_A} = 5^{15}YA=αXA=515
在这里插入图片描述

可得 Alice 给 Bob 的 public Key YAY_AYA 为 79

b.YB=αXB=527Y_B = \alpha^{X_B} = 5^{27}YB=αXB=527

在这里插入图片描述

可得Bob 给 Alice 的 public Key YBY_BYB 为 65

c.

Alice & Bob 之间共享的密钥为

YBXA=YAXBY_B^{X_A} = Y_A^{X_B}YBXA=YAXB

在这里插入图片描述

在这里插入图片描述

10.2

q = 23 , g = 5

Bob: Yb = g^xb = 5^xb = 10, 求 xb

Alice: Ya = 8,求 Key = Ya^xa

用穷举法,求出 5 ^k ,k∈[1,q−1]k\in[1, q-1]k[1,q1]

在这里插入图片描述

a.可得当 k = 3 时,结果为 10,故有 Bob 的密钥 XBX_BXB = 3

b.Bob 收到 Alice 发来的 YAY_AYA 后可以获取 Key = YAXB=83Y_A^{X_B} = 8^3YAXB=83

在这里插入图片描述

c.观察图片1 可得 5 mod 23 的阶为 22, 故 5 是 q 的原根

ps.计算程序

int mul_mod(int a, int b, int mod) {
	int res = 0;
	int len = 0, t_b = b;
	while (t_b) {
		len++;
		t_b /= 2;
	}
	for (int i = len-1; i >=0; i--) {
		res <<= 1;
		res %= mod;
		if (b >> i & 1) {
			res = (res + a) % mod;
		}
	}
	return res;
}

int exp_mod(int a, int b, int mod){
	cout << "计算中间结果如下:"<<endl;
	int res = 1;
	int len = 0, t_b = b;
	while (t_b) {
		len++;
		t_b /= 2;
	}
	for(int k = len -1; k >= 0; k--){
		res = mul_mod(res,res,mod);
		if(b >> k & 1){
			res = mul_mod(res, a, mod);
		} 
		cout << "d = " << res <<";"<< endl;
	}
	return res;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值