实验步骤
1 密钥生成算法步骤如下:
- 选取大素数 , ∈ 是一个原根。 和 公开;
- 随机选取整数 , ,计算 。
- 公钥为 ,私钥为 。
2 签名算法
- 给定待签消息 𝑘∈ , 满足 gcd(k, p-1) = 1;
- 计算 , 本次实验可以采用SHA256,如果使用其他 Hash 算法,请在实验报告模板中说明。
- 计算 ,
- 定义 , 将 和 发送给对方。
3 验证算法
- 接收方收到 和 , 计算 ;
- 验证:⇔
说明
可以重用RSA公钥加密算法中的 gcd,exgcd, fastmod 等算法, Hash算法建议用 SHA256,可以直接调用,如果使用了其他 Hash 算法,请在实验报告中说明。
4 实验任务
本次实验需要大家完成 ElGamal 数字签名算法,推荐大家用 Java 或者 Python 实现,签名的信息 m 是你的学号, 需要随机生成两次不同的 k 进行签名并验证签名,并且验证假设消息 m 在传送过程中被篡改的情况。
- 需要将公钥(p, g, y)和私钥 x 以及每次使用的随机数 k 打印输出。
- 用学号作为消息 m ,并打印输出随机生成两次不同的 k 的签名信息和签名验证的结果。
- 验证签名时,假设消息 m 被篡改的情况,要输出验证签名不通过的信息。
- Hash 算法使用 SHA256 对消息 m 进行 Hash 运算。