10.1
![](https://i-blog.csdnimg.cn/blog_migrate/9511380c72eb496ca139cd79d6956b3e.png)
10.2
设DH算法中公用素数q=11,原根a=2
(1)证明2是11的原根
(2)若用户 A 的公钥=9,用户A的私钥
是多少?
(3)若用户 B 的公钥=3,则共享的密钥
是多少?
解:(1)根据原根的定义以及题意,需要证明以下条件:
- 2^1 ≡ 1 (mod 11)
- 2^k ≢ 1 (mod 11) 对于所有的k < φ(11) = 10
- 首先,我们验证条件1。计算2^1的结果为2,显然2 ≡ 2 (mod 11),这满足条件1。
-
接下来,我们验证条件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算法的过程可知:=
mod q;q=11,a=2,
=9,带入,求得
=6
(3)同样由DH算法的过程可知:=
mod q;
=9,q=11,
=
mod q=3求得
=8
带入求得=3.
10.14
有限域上的椭圆曲线运算
用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。
示例如下: