ELGamal公钥体制加密加签
ELGamal公钥体制加密加签
第4章 公钥密码体制.ppt 下载
第7章 数字签名.ppt 下载
安全性
注意事项:(关于ElGamal数字签名体制的参数p)
p的选择与在Zp中计算离散对数的算法有直接关系。从目前的计算水平来看,p至少应该是二进制512位的素数,从长期安全性考虑,应使用1024位或更长的素数。
p-1最好有大的素因子
私钥x最好是Zp的素数阶子群的生成元。
关键点:
- 不要泄露随机数k,否则,根据:
$$
s\equiv(M-x*r)k^{-1}\pmod{p-1}
$$
可以计算出私钥
$$
x\equiv(M-x*k)r^{-1}\pmod{p-1}
$$
- 不要使用同一个随机数k给两个不同的消息签名
大素数生成
知识点:
Miller-Rabin 素性检测
Miller-Rabin 测试
function.py
1 | import math |
加密
ELGamal.py
1 | from funtion import * |
运行
1 | "G:\python environment\python.exe" "G:/Code/IntelliJ Pycharm/Cryptology/ElGamal/ELGamal.py" |
加签
ELGamal_sig.py
1 | from funtion import * |
运行
1 | "G:\python environment\python.exe" "G:/Code/IntelliJ Pycharm/Cryptology/ElGamal/ELGamal_sig.py" |