comSec 作业四 DH

在这里插入图片描述

10.1

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

可得 Alice 给 Bob 的 public Key Y A Y_A YA 为 79

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

在这里插入图片描述

可得Bob 给 Alice 的 public Key Y B Y_B YB 为 65

c.

Alice & Bob 之间共享的密钥为

Y B X A = Y A X B Y_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 的密钥 X B X_B XB = 3

b.Bob 收到 Alice 发来的 Y A Y_A YA 后可以获取 Key = Y A X B = 8 3 Y_A^{X_B} = 8^3 YAXB=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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值