ElGamal加密
ElGamal加密算法是一种基于离散对数问题的非对称加密算法,它的安全性建立在求解离散对数问题的困难性之上。
1. 密钥生成
- 选择大素数p:选择一个足够大的素数p,作为有限域的基础。
- 选择生成元g:选择一个整数g,使得g是模p乘法群Zp*的生成元。
- 选择私钥x:随机选择一个整数x作为私钥,其中1 ≤ x ≤ p-1。
- 计算公钥y:计算y = g^x mod p,并将y作为公钥公开。
2. 加密
假设Alice要向Bob发送一条消息m,Bob的公钥为(p, g, y)。
-
随机选择整数k:Alice随机选择一个整数k,其中1 ≤ k ≤ p-1。
-
计算密文c1:计算c1 = gk mod pg^k \ mod \ pgk mod p。
-
计算密文c2:计算c2 =m∗yk mod pm * y^k \ mod \ pm∗yk mod p。
-
发送密文:Alice将密文(c1, c2)发送给Bob。
3. 解密
Bob收到密文(c1, c2)后,使用自己的私钥x进行解密。
- 计算中间值:计算α=(c1x)−1 mod p\alpha = (c1^x)^{-1} \ mod \ pα=(c1x)−1 mod p,即计算α(gk)−x mod p\alpha (g^k)^{-x} \ mod \ pα(gk)−x mod p。
- 解密消息:计算m=c2∗(c1x)−1 mod p=c2∗α mod pm = c2 * (c1^x)^{-1} \ mod \ p = c2 * \alpha \ mod \ pm=c2∗(c1x)−1 mod p=c2∗α mod p。
RSA加密
RSA算法的安全性是基于 大整数因数分解 的困难性。
1. 生成公钥和私钥:
- 选择两个大素数p和q。 计算它们的乘积N = p * q。
- 计算欧拉函数φ(N) = (p-1)(q-1)。
- 选择一个与φ(N)\varphi(N)φ(N)互质的整数e作为公钥指数。
- 计算d,使得d∗e≡1(mod φ(N))d*e \equiv 1 (mod \ \varphi(N))d∗e≡1(mod φ(N)),d作为私钥指数。 公钥为(N, e),私钥为(N, d)。
2. 加密
- 明文为m,密文为c。
- 计算c=me mod Nc = m^e \ mod \ Nc=me mod N。
3. 解密
- 计算m=cd mod Nm = c^d \ mod \ Nm=cd mod N。

502

被折叠的 条评论
为什么被折叠?



