ElGamal加密算法
字数 2426 2025-10-28 00:29:09
ElGamal加密算法
题目描述:
ElGamal是一种基于离散对数难题的非对称加密算法,由Taher Elgamal于1985年提出。它包含密钥生成、加密和解密三个步骤。假设你需要在有限域上实现ElGamal算法,给定素数 \(p = 23\)、生成元 \(g = 5\)、私钥 \(d = 6\),以及待加密的明文 \(M = 10\)(需确保 \(M < p\))。请演示完整的加密和解密过程,并解释其数学原理。
解题过程:
1. 密钥生成
-
选择系统参数:
选取大素数 \(p\) 和生成元 \(g\)。生成元需满足:在模 \(p\) 下,\(g\) 的幂运算能生成 \(1\) 到 \(p-1\) 的所有整数。本题已给定 \(p = 23\),验证 \(g = 5\) 是生成元:
\(5^1 \bmod 23 = 5, 5^2 \bmod 23 = 2, ..., 5^{22} \bmod 23 = 1\)(需覆盖所有余数,此处省略验证过程)。 -
生成密钥对:
- 私钥 \(d\):随机整数,满足 \(1 < d < p-1\),本题给定 \(d = 6\)。
- 公钥 \((p, g, y)\):计算 \(y = g^d \bmod p\)。
\(y = 5^6 \bmod 23 = 15625 \bmod 23\)。
逐步计算:
\(5^2 \bmod 23 = 25 \bmod 23 = 2\)
\(5^4 \bmod 23 = (5^2)^2 \bmod 23 = 2^2 \bmod 23 = 4\)
\(5^6 \bmod 23 = (5^4 \times 5^2) \bmod 23 = (4 \times 2) \bmod 23 = 8\)。
因此公钥为 \((p=23, g=5, y=8)\)。
2. 加密过程
加密需要公钥 \((p, g, y)\) 和明文 \(M\)。加密时随机选择整数 \(k\)(需满足 \(1 < k < p-1\) 且与 \(p-1\) 互质),本题假设选 \(k = 3\)。
加密后生成密文对 \((C_1, C_2)\):
- \(C_1 = g^k \bmod p = 5^3 \bmod 23 = 125 \bmod 23 = 10\)(因为 \(23 \times 5 = 115, 125-115=10\))。
- \(C_2 = M \times y^k \bmod p\)。先计算 \(y^k \bmod p = 8^3 \bmod 23\):
\(8^2 \bmod 23 = 64 \bmod 23 = 18\)(因为 \(23 \times 2 = 46, 64-46=18\)),
\(8^3 \bmod 23 = (18 \times 8) \bmod 23 = 144 \bmod 23 = 6\)(因为 \(23 \times 6 = 138, 144-138=6\))。
再计算 \(C_2 = 10 \times 6 \bmod 23 = 60 \bmod 23 = 14\)(因为 \(23 \times 2 = 46, 60-46=14\))。
最终密文为 \((C_1, C_2) = (10, 14)\)。
3. 解密过程
使用私钥 \(d\) 解密密文 \((C_1, C_2)\):
- 计算共享秘密 \(s = C_1^d \bmod p = 10^6 \bmod 23\)。
逐步计算:
\(10^2 \bmod 23 = 100 \bmod 23 = 8\)(因为 \(23 \times 4 = 92, 100-92=8\)),
\(10^4 \bmod 23 = 8^2 \bmod 23 = 64 \bmod 23 = 18\),
\(10^6 \bmod 23 = (10^4 \times 10^2) \bmod 23 = (18 \times 8) \bmod 23 = 144 \bmod 23 = 6\)。 - 计算 \(s\) 的模逆元 \(s^{-1} \bmod p\):
即求 \(6 \times t \bmod 23 = 1\)。通过枚举:
\(6 \times 4 = 24 \bmod 23 = 1\),所以 \(s^{-1} = 4\)。 - 还原明文 \(M = C_2 \times s^{-1} \bmod p = 14 \times 4 \bmod 23 = 56 \bmod 23 = 10\)(因为 \(23 \times 2 = 46, 56-46=10\))。
解密结果与原始明文一致。
4. 数学原理
- 安全性基础:
ElGamal的安全性依赖于离散对数问题(DLP)的困难性:已知 \(g, p, y\),求私钥 \(d\) 使得 \(y = g^d \bmod p\) 在 \(p\) 很大时计算不可行。 - 加密设计:
\(C_1 = g^k\) 传递临时公钥,\(C_2 = M \times y^k\) 通过共享秘密 \(y^k = g^{dk}\) 掩盖明文。解密时计算 \(C_1^d = g^{dk} = y^k\),从而消除掩盖。 - 注意点:
- 每次加密需随机选择 \(k\),避免重复使用导致密钥泄露。
- 明文 \(M\) 需映射到有限域中(例如通过编码规则),且 \(M < p\)。
通过以上步骤,ElGamal实现了非对称加密,其密文长度是明文的两倍,但具备良好的安全性。