欢迎光临
我们一直在努力

为什么公钥可以公开?RSA 原理一次讲透

为什么公钥可以公开?RSA 原理一次讲透

你网购时浏览器地址栏的小锁,HTTPS 加密的底层是 RSA——一个"加密钥匙随便公开、解密钥匙自己藏好"的系统。公钥公开了为什么还安全?今天用小素数把 RSA 完整跑一遍,你就懂了。

一、核心思想:单向陷门函数

RSA 的数学核心是一句话:模幂运算 f(x) = x^e mod n 是单向陷门函数。

  • 给定 x,算 f(x) 很容易(几毫秒)
  • 给定 f(x),反推 x 计算上不可行——除非你知道陷门(私钥 d)

就像保险柜:谁都能把东西放进去(公钥加密),但只有持钥匙的人能打开(私钥解密)。公钥是"锁",私钥是"钥匙"——锁可以随便发,钥匙自己留好。

二、密钥怎么生成?

  • 选两个大素数 p、q(真实 RSA 是 2048 位,约 600 位十进制数)
  • n = p×q(公开),φ(n) = (p-1)(q-1)(保密)
  • 选公钥 e(如 65537),求私钥 d = e⁻¹ mod φ(n)
  • 安全性根基:n 公开,但分解 n 得到 p、q 计算上不可行(2048 位分解需要天文数字的算力)。知道 p、q 才能算 φ(n),才能求 d——这就是"陷门"。

    三、加密解密:一个公式搞定

    加密:c = m^e mod n
    解密:m = c^d mod n

    为什么能还原?靠欧拉定理:因为 e×d ≡ 1 mod φ(n),所以 m^(e×d) ≡ m mod n——先加密再解密,绕一圈回到原点。

    四、代码演示:小素数完整跑一遍

    p, q = 61, 53 # 两个素数(真实场景是 2048 位大数)
    n = p * q # 3233,公开
    phi = (p1) * (q1) # 3120,保密(由 p,q 算出)
    e = 17 # 公钥(公开)
    d = pow(e, 1, phi) # 私钥 = 2753(保密)

    msg = 42
    cipher = pow(msg, e, n) # 加密:任何人可用公钥做
    dec = pow(cipher, d, n) # 解密:只有持私钥者能做
    print(f"p={p}, q={q}, n={n}, φ(n)={phi}")
    print(f"公钥 e={e}(公开), 私钥 d={d}(保密)")
    print(f"明文 {msg} -> 加密 {cipher} -> 解密 {dec} {'✓' if dec == msg else '✗'}")
    print(f"安全性: 公开 n={n} 和 e={e}, 但分解 n 得 p,q 才能算私钥")
    print(f"真实 RSA: n 是 2048 位, 分解不可行 -> 公钥随便公开")

    运行输出:

    p=61, q=53, n=3233, φ(n)=3120
    公钥 e=17(公开), 私钥 d=2753(保密)
    明文 42 -> 加密 2557 -> 解密 42 ✓
    安全性: 公开 n=3233 和 e=17, 但分解 n 得 p,q 才能算私钥
    真实 RSA: n 是 2048 位, 分解不可行 -> 公钥随便公开

    公钥 (n, e) = (3233, 17) 完全公开,别人也只能加密;只有知道 d=2753 的人能解密。 小素数你能心算分解,换成 2048 位(约 600 位十进制数)就没人能分解了——这就是"锁可以公开"的安全根基。

    五、避坑清单

  • RSA 不能加密大数据:模数多大就只能加密多大数据(2048 位 ≈ 256 字节),实际用 RSA 加密"会话密钥"、用 AES 加密正文(混合加密)
  • 公钥加密 ≠ 数字签名:签名是"私钥加密、公钥验证"(反过来用)——用于证明"是我发的"
  • 别用教科书 RSA 直接加密:需要 OAEP 填充防选择明文攻击(同样的明文会得到同样的密文,泄露信息)
  • 量子计算威胁真实存在:Shor 算法能分解大数——后量子时代要换 Kyber/Dilithium(PQC)
  • p、q 不能太接近:太接近可以用费马分解攻破;随机数生成器弱会导致共模攻击(ROCA 漏洞的教训)
  • 六、想系统学密码学?

    本文精选自 ima 知识号【Kruptos】《密码学与零知识证明》订阅库(第 024 期 RSA 数学基础、第 025 期 RSA-OAEP 加密与 RSA-PSS 签名等 100 期系统教程,从古典密码、RSA、椭圆曲线到零知识证明、后量子密码,每期配可运行 Python 代码)。

    📚 完整系列 100 期 + 配套代码,已在 ima 知识号发布

    本文只是系列的一个切片。完整系列(100 期系统教程 + 每期可运行代码)在 ima 知识号【Kruptos】持续更新中:

    • 🗂 67+ 技术知识库:信号与系统、SDR 软件无线电、数字信号处理、操作系统、AI Agent、大模型微调……几乎覆盖全部软硬件技术栈
    • 🧠 8 款 AI 技能:系列生产、知识库管理、CMMI 受管开发、自进化 Agent 等,已在 ima 技能广场上架,即装即用
    • ✅ 全部免费订阅,后续更新自动推送

    🔍 订阅方式:打开 ima(腾讯智能工作台)→ 搜索「Kruptos」→ 一键订阅。或在 ima 内直接搜索《密码学与零知识证明》等知识库名称。

    💬 你还困惑过公钥密码学的哪个问题?评论区聊聊——想看数字签名还是后量子密码,点赞高的安排。


    作者:Kruptos(西电毕业,13 年无线通信/DSP/嵌入式科研)|原创内容,转载注明出处

    赞(0)
    未经允许不得转载:171主机测评 » 为什么公钥可以公开?RSA 原理一次讲透
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址