相关基础数学知识请看:
https://blog.csdn.net/weixin_43790779/article/details/105621372
RSA (大整数分解)
- 密钥生成:
- 大素数:p、q (至少为1024位 );
- ,其中 是n的欧拉函数值;
- 选择一整数e,满足1<e<φ(n),且gcd(φ(n), e)=1;
- 计算d,满足 d·e ≡1 mod φ(n);
- 公钥{e, n},私钥{d, n}。
- 加密:
- 密钥生成:
- p,一个较大的素数;
- g,$Z^ * _ p $ 中的生成元;
- ;
- p,g,β为公钥;α为私钥;
- 加密:
随机生成一个秘密数k, 。
- 解密:
椭圆曲线上ElGamal秘密(椭圆曲线,离散对数问题)
- 密钥生成:
在椭圆曲线 上选取一个阶为n(n为一个大素数)的生成元P。随机选取整数x(1<x<n),计算Q=xP。公钥为Q,私钥为x。 - 加密:
为了加密,随机选取一个整数k,1<k<n,计算
则密文$c=(C_1,C_2)$。
- 解密:
为了解密一个密文,计算
攻击者要想从$c=(C_1,C_2)$,计算出$P_m$,就必须知道k。而要从P和kP中计算出k将面临求解椭圆曲线上的离散对数问题。