加密算法相关

RSA 加密算法的流程


1️⃣ 密钥生成

你的步骤是标准的 RSA:

  1. 选大质数 (p, q)

    • 通常 1024 位以上(现代安全要求 2048 位以上)
    • 确保无法被高效分解
  2. 计算模数 $ (n = p \times q)$

    • 用于公钥和私钥
    • 明文和密文都需小于 (n)
  3. 计算欧拉函数 \((\phi(n) = (p-1)(q-1))\)

    • 保证后续公私钥关系成立
  4. 选择公钥 (e)

    • \((1 < e < \phi(n))\),且 \((\gcd(e, \phi(n)) = 1)\)
    • 常用 \((e=65537)\),兼顾安全与效率
  5. 计算私钥 (d)

    • 模逆元:\(((d \times e) \mod \phi(n) = 1)\)
    • 确保解密可逆

最终公钥 \(((e, n))\),私钥 \(((d, n))\)

💡 补充:p, q, φ(n) 一旦生成私钥后应该立即销毁,防止泄露导致私钥被推导。


2️⃣ 加密解密流程

  • 加密\((c = m^e \mod n)\)
  • 解密\((m = c^d \mod n)\)

注意:明文 (m) 必须小于 (n),实际应用中通常会先做 分块或填充(Padding),如 PKCS#1 或 OAEP,否则大消息无法直接加密。


3️⃣ 为什么能解密

基于 欧拉定理
\( [ m^{\phi(n)} \equiv 1 \pmod{n} \quad (\text{如果 } \gcd(m,n)=1) ] \)

因为 (d) 是 (e) 的模逆元:
\( [ e \cdot d = k \cdot \phi(n) + 1 ] \)
所以解密:
\( [ c^d = (m^e)^d = m^{ed} = m^{k \phi(n) + 1} = (m^{\phi(n)})^k \cdot m \equiv 1^k \cdot m \equiv m \pmod{n} ] \)

这解释了为什么公钥加密后,私钥能解密还原明文。


4. 关键特性

  • 非对称性:公钥可公开,私钥必须保密

  • 安全性基础:依赖大整数因式分解困难性

  • 注意事项

    • 明文不能直接大于 n
    • 实际系统加密时通常使用 混合加密:先对数据用对称加密(AES),再用 RSA 加密对称密钥
    • 需要做填充,防止简单明文攻击

posted @ 2025-10-26 22:31  不报异常的空指针  阅读(37)  评论(0)    收藏  举报