news 2026/5/6 17:17:28

taocp2_rsa_story

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
taocp2_rsa_story

RSA公钥加密算法故事文件

确保互联网安全的算法:RSA 解析

5W1H分析

What(是什么)

RSA(Rivest-Shamir-Adleman)是一种非对称公钥加密算法,由Ron Rivest、Adi Shamir和Leonard Adleman于1977年提出。它是目前最广泛使用的公钥密码系统之一,基于大整数分解的数学难题:将两个大素数的乘积分解回原始素数在计算上是不可行的。

Why(为什么)

在RSA之前,密码学主要依赖对称加密,存在密钥分发问题:

  • 通信双方必须事先安全地共享密钥
  • 密钥数量随用户数量平方增长(n个用户需要n(n-1)/2个密钥)

RSA的革命性在于:

  • 公钥可以公开传输,无需保密
  • 私钥只需保存在本地
  • 解决了密钥分发这一密码学核心难题

Who(谁)

  • 发明者: Ron Rivest、Adi Shamir、Leonard Adleman(1977年,MIT)
  • 命名: 取三位发明者姓氏首字母
  • 理论先驱: Clifford Cocks(1973年,英国GCHQ,保密至1997年)
  • 使用者: 互联网安全(HTTPS/TLS)、数字签名、安全邮件等

When(何时)

  • 1977年:RSA算法公开发表
  • 1983年:获得美国专利(2000年过期)
  • 1990年代:成为互联网安全标准
  • 至今:仍是公钥加密的主流选择

Where(何地)

  • 标准应用: SSL/TLS协议、SSH、PGP/GPG、数字证书
  • 硬件实现: 智能卡、安全芯片、硬件安全模块(HSM)
  • TAOCP位置: 第2卷第4.5.2节 “Rivest-Shamir-Adleman Method”

How(如何)

RSA的核心数学原理:

  1. 密钥生成:

    • 选择两个不同的大素数 p 和 q
    • 计算 n = p × q(模数)
    • 计算 φ(n) = (p-1) × (q-1)(欧拉函数)
    • 选择 e 满足 1 < e < φ(n) 且 gcd(e, φ(n)) = 1
    • 计算 d ≡ e⁻¹ mod φ(n)(扩展欧几里得算法)
    • 公钥: (n, e),私钥: (n, d)
  2. 加密: c = mᵉ mod n

  3. 解密: m = cᵈ mod n

数学正确性基于欧拉定理:若 gcd(m, n) = 1,则 m^φ(n) ≡ 1 (mod n)


需求定义

功能需求

  1. 密钥生成函数rsa_keygen(p, q, e, *pub, *priv)

    • 输入:素数p、素数q、公钥指数e
    • 输出:公钥结构体、私钥结构体
    • 约束:p和q必须是不同的素数,e必须与φ(n)互质
  2. 加密函数rsa_encrypt(m, pub_key)

    • 输入:明文消息m(整数),公钥
    • 输出:密文c
    • 约束:m必须小于n
  3. 解密函数rsa_decrypt(c, priv_key)

    • 输入:密文c,私钥
    • 输出:明文m
  4. 辅助函数

    • mod_exp(base, exp, mod): 快速模幂运算(二进制幂)
    • mod_inverse(e, phi): 模逆元计算(扩展欧几里得)

非功能需求

  1. 安全性: 使用64位整数,支持小素数演示(实际应用需要1024位以上)
  2. 正确性: 严格验证输入参数(素数检查、边界检查)
  3. 可移植性: 纯C99实现,无外部依赖
  4. 教学性: 代码清晰注释,便于理解算法原理

约束条件

  • 明文消息 m 必须满足 m < n
  • 使用unsigned long long(64位)进行计算
  • 素数选择限制在32位以内(演示目的)
  • 实际安全应用需要至少2048位的n

验收标准

功能验收

  • 正确生成RSA密钥对(公钥和私钥)
  • 加密"HEL"等字节序列后正确解密还原
  • 公钥(n,e)可公开,不包含私钥信息
  • 使用错误私钥解密失败
  • m >= n时正确拒绝并返回错误
  • 完整文本消息加密解密流程正确

数学正确性验收

  • 验证 e × d ≡ 1 (mod φ(n))
  • 验证加密和解密是互逆操作
  • 扩展欧几里得算法正确计算模逆元
  • 快速模幂运算结果正确

边界测试验收

  • 最小素数情况(p=3, q=5)正确工作
  • 边界消息值(0, n-1)正确处理
  • 非法输入(非素数、相同素数、无效e)正确拒绝

代码质量验收

  • 使用C99标准编译无警告(gcc -std=c99 -Wall)
  • 包含完整的测试框架
  • 代码注释清晰,解释数学原理
  • 所有测试通过

安全说明

本实现仅用于教学演示,不适用于实际安全应用

  1. 密钥长度: 使用小素数(32位以内),实际RSA需要2048位或更长
  2. 素数生成: 使用简单试除法,实际应用需要概率素性测试(Miller-Rabin)
  3. 填充方案: 未实现OAEP等填充,易受攻击
  4. 侧信道: 未考虑时序攻击等侧信道防护
  5. 随机数: 未涉及密钥生成所需的真随机数

实际应用请使用OpenSSL、libsodium等经过审计的密码学库。


参考

  • TAOCP Volume 2, Section 4.5.2: “Rivest-Shamir-Adleman Method”
  • Rivest, R.L., Shamir, A., and Adleman, L. (1978). “A Method for Obtaining Digital Signatures and Public-Key Cryptosystems”
  • PKCS #1: RSA Cryptography Specifications (RFC 8017)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 17:10:54

完全解决Navicat试用期限制:macOS平台3种简单方法重置14天试用

完全解决Navicat试用期限制&#xff1a;macOS平台3种简单方法重置14天试用 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 还…

作者头像 李华
网站建设 2026/5/6 17:05:44

SWE Agent训练优化:轨迹过滤技术提升AI代码助手效率

1. 项目背景与核心价值 在软件开发自动化领域&#xff0c;基于AI的代码助手正在经历从补全工具到自主执行者的进化。SWE Agent作为斯坦福大学提出的新型智能体框架&#xff0c;其核心突破在于实现了对GitHub Issue的端到端处理能力——不仅能理解问题描述&#xff0c;还能自主执…

作者头像 李华
网站建设 2026/5/6 17:04:51

Next.js站点地图生成器next-sitemap:从原理到实战的SEO优化指南

1. 项目概述&#xff1a;为什么你的Next.js站点需要一个专业的站点地图生成器如果你正在用Next.js构建一个网站&#xff0c;尤其是内容驱动型或电商类应用&#xff0c;那么“站点地图”这个词你一定不陌生。它本质上是一个XML文件&#xff0c;像一张给搜索引擎的地图&#xff0…

作者头像 李华
网站建设 2026/5/6 17:04:17

【UNet 改进 | 注意机制篇】UNet引入DA注意力机制(CVPR 2022),动态偏移捕获关键特征,二次创新

本文教的是方法,也给出几种改进方法,二次创新结构,百变不离其宗,一文带你改进自己模型,科研路上少走弯路。 前言 在医学图像分割任务中,病灶区域往往形态各异、边界模糊,且经常与周围组织的对比度较低,这要求模型具备极强的特征提取和细节辨别能力。传统的U-Net网络虽…

作者头像 李华