comsec第四次作业

10.1

用户 A B 使用 DH 算法来交换秘钥,设公用素数q=71,原根a=7
(1)若用户A的私钥X_{A}=5,则用户A的公钥Y_{A}是多少?
(2)若用户B的私钥X_{B}=12,则用户A的公钥Y_{B}是多少?
(3)共享密钥是多少?
DH算法的过程如下:
解:
(1)由题意得: Y_{A}=a^{X_{A}}mod q=7^{5} mod 71=51
(2)由题意得: Y_{B}=a^{X_{B}}mod q=7^{12} mod 71=4
(3)共享密钥:K_{A}=Y_{B}^{X_{A}} mod q=30;K_{B}=Y_{A}^{X_{B}} mod q=30

10.2

设DH算法中公用素数q=11,原根a=2

(1)证明2是11的原根

(2)若用户 A 的公钥Y_{A}=9,用户A的私钥X_{A}是多少?

(3)若用户 B 的公钥Y_{B}=3,则共享的密钥K_{B}是多少?

解:(1)根据原根的定义以及题意,需要证明以下条件:

  1. 2^1 ≡ 1 (mod 11)
  2. 2^k ≢ 1 (mod 11) 对于所有的k < φ(11) = 10
  3. 首先,我们验证条件1。计算2^1的结果为2,显然2 ≡ 2 (mod 11),这满足条件1。
  4. 接下来,我们验证条件2。为了简化计算,我们可以列出2的幂对11取模的结果:

    2^1 ≡ 2 (mod 11)
    2^2 ≡ 4 (mod 11)
    2^3 ≡ 8 (mod 11)
    2^4 ≡ 5 (mod 11)
    2^5 ≡ 10 (mod 11)
    2^6 ≡ 9 (mod 11)
    2^7 ≡ 7 (mod 11)
    2^8 ≡ 3 (mod 11)
    2^9 ≡ 6 (mod 11)
    2^10 ≡ 1 (mod 11)

    观察上述结果,我们可以看到对于所有的k < 10,2^k都不等于1 (mod 11)。因此,2是11的原根。

(2)由DH算法的过程可知:Y_{A}=a^{X_{A}}mod q;q=11,a=2,Y_{A}=9,带入,求得X_{A}=6

(3)同样由DH算法的过程可知:K_{B}=Y_{A}^{X_{B}} mod q;Y_{A}=9,q=11,Y_{B}=a^{X_{B}}mod q=3求得X_{B}=8

带入求得K_{B}=3.

10.14

有限域上的椭圆曲线运算

E_{11}(1,6)上的点G(2,7)计算2G3G的值
先计算2G=G+G=(X_{2G}Y_{2G}
则根据所给式子:
            k=\frac{3*4+1}{2*7}=\frac{13}{14}(mod 11)=8;
            X_{2G}=64-2-2 (mod11) =5;
           Y_{2G}=8*(-3)-7=2;
所以2G=(X_{2G}Y_{2G})=(5,2);
            
又由题意,3G=2G+G= X_{3G}Y_{3G})=(8,3),证明过程略。

SageMath实现一种ElGamal加密/解密的程序

在SageMath中,可以使用内置的powmod()函数来实现ElGamal加密算法。

加密过程:

1.生成两个大质数p和g,其中g是p的原根,即g对p取模的阶为p-1。

2.随机选取一个整数k,满足1<k<p-1,且k和p-1互质。

3.计算a = g^k mod p,b = m*y^k mod p(m为要加密的明文)。

4.密文C = (a, b)。

解密过程:

1.计算a^(-1) mod p。

2.计算m = b * a^(-1) mod p。

示例如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值