汽车网络安全:RSA算法详细解析

目录

[1. 概述](#1. 概述)

[2. RSA算法原理](#2. RSA算法原理)

[2.1 密钥生成](#2.1 密钥生成)

[2.2 加密 / 解密过程](#2.2 加密 / 解密过程)

[2.3 签名 / 验签过程](#2.3 签名 / 验签过程)

[3. 为什么e默认选择65537](#3. 为什么e默认选择65537)

[3.1 数学角度:65537 是 费马素数,计算极快](#3.1 数学角度:65537 是 费马素数,计算极快)

[3.2 安全角度:避免"小指数攻击"](#3.2 安全角度:避免“小指数攻击”)

[3.3 被所有加密库标准化支持](#3.3 被所有加密库标准化支持)

[4. 为什么攻击者无法从 e=65537 推出 d?](#4. 为什么攻击者无法从 e=65537 推出 d?)

[4.1 如果攻击者试图逆推出 d,会遇到什么数学难题?](#4.1 如果攻击者试图逆推出 d,会遇到什么数学难题?)

[4.2 那大整数分解到底有多难?](#4.2 那大整数分解到底有多难?)

[4.3 总结](#4.3 总结)


1. 概述

RSA是1977年Ron Rivest、Adi Shamir和Leonard Adleman一起提出的。RSA就是他们三人姓氏开头字母拼在一起组成的。

RSA算法的核心思想是利用一对密钥(公钥和私钥)进行加密和解密操作。公钥可以公开分发给任何人,用于加密信息,而私钥则必须保密,用于解密信息。这种加密方式保证了只有私钥的持有者才能解密出原始信息,从而确保了信息传输的安全性。

目前有RSA 1024,2048,4096,它们都属于 同一个 RSA 算法 ,唯一的区别是 密钥长度

名称 密钥长度 p 和 q 的长度(大致)
RSA‑1024 1024 bit 512 bit ×2
RSA‑2048 2048 bit 1024 bit ×2
RSA‑4096 4096 bit 2048 bit ×2

数学原理 完全一样,只是数字更大,更难分解。

  • RSA‑1024 已经被攻破,不安全,禁止使用(TLS、证书都不再允许)
  • RSA‑2048 目前是互联网主流安全强度
  • RSA‑4096 则面向高安全应用(银行、政府、长期签名)

2. RSA算法原理

2.1 密钥生成

  1. 选择两个大质数

p 和 q(2048 位 RSA 通常让 n=pq 长度为 2048 bit)

  1. 计算

ϕ(n)=(p−1)(q−1)

  1. 选择一个与 ϕ(n) 互素的整数e

满足 1 < e < φ(n) 且 e 与 φ(n) 互质,通常取 65537=2^16+1)

因为计算快、且安全

  1. 计算私钥指数d

ed≡1(modϕ(n))

也就是:d 是 e 关于模 φ(n) " 逆元 "

数学名称:模乘法逆元(modular multiplicative inverse)

最终得到:

  • 公钥:(n,e)
  • 私钥:(n,d)

2.2 加密 / 解密过程

  • 加密(公钥加密):明文 m → 密文 c = m^e mod n(m 必须小于 n,否则需分段)。
  • 解密(私钥解密):密文 c → 明文 m = c^d mod n。

2.3 签名 / 验签过程

签名(私钥签名)

  1. 对数据 data 计算哈希值 hash(data)

  2. 用私钥加密哈希值得到签名 sig = hash(data)^d mod n。

验签(公钥验签)

  1. 接收方用公钥解密签名 hash'(data) = sig^e mod n

  2. 对比 hash'(data) 与自身计算的 hash(data),一致则数据未篡改且身份合法。

3. 为什么e默认选择65537

为什么 RSA 默认选择 e = 65537?为什么不是 3、17、239、随机数......?

从数学、工程、安全三个角度看,65537 是几乎完美的公钥指数,成为事实标准。

下面分步骤讲清楚

3.1 数学角度:65537 是 费马素数,计算极快

65537 = 2¹⁶ + 1,是一个 费马素数(Fermat prime)

它的二进制非常稀疏:

复制代码
1_0000_0000_0000_0001

只有 两个 1,这意味着:

模幂运算 m^e mod n 的复杂度极低

因为"平方‑乘法"(Square‑and‑Multiply)实现时,"乘法次数"特别少,速度快。

比方说:

  • e = 65537:只需 17 次乘法
  • e = 3:只需 2 次乘法(但不安全)
  • e = 随机 2048 位数:需要上千次乘法(很慢)

所以 65537 是在 计算速度和安全性之间的最佳点

3.2 安全角度:避免"小指数攻击"

e = 3、e = 17 曾经被广泛使用

但是导致多个严重安全问题:

  1. 低加密指数攻击(Low Exponent Attack)

如果加密消息 没有足够 padding,可能出现:

c=m3<nc = m^3 < nc=m3<n

攻击者可直接开立方根恢复明文。

  1. 广播攻击(Håstad Attack)

多个用户都用 e=3 时,攻击者能组合多个密文直接解密。

  1. Coppersmith 攻击

数字结构不够随机时,小 e 会暴露弱点。

因此,小指数(3、5、7、17)如今已全部不安全。

而:

✔ e=65537 足够大,能避免以上所有攻击

同时又不会过大导致性能下降。

所以它成为行业标准。

3.3 被所有加密库标准化支持

包括:

  • OpenSSL
  • Windows CNG
  • Java's RSA
  • Python cryptography
  • PKCS#1 标准
  • x.509 证书体系

4. 为什么攻击者无法从 e=65537 推出 d?

生成 d 的公式是:

d=e^mod  ϕ(n)

要算 d 中的逆元,必须要知道:

ϕ(n)=(p−1)(q−1)

但 ϕ(n) 的计算前提是:

必须知道 p 和 q。

而外界只能看到 公钥 n ,但不知道它的质因子 p、q

⭐ 換句话说:

只要不知道 p、q,就无法算 ϕ**(n),
而没有** ϕ**(n),就永远无法逆推出 d。**


4.1 如果攻击者试图逆推出 d,会遇到什么数学难题?

攻击者已知:

  • n=pq
  • e=65537

攻击者想求 d,但是公式依赖 ϕ(n):

ϕ(n)=(p−1)(q−1)

所以攻击者必须:

💥 把 n 分解为 p 和 q

这就是 RSA 安全性的核心:

公钥 n 是一个约 2048/4096 位的大整数,它是两个超大质数的乘积。对 n 因式分解是超难问题。


4.2 那大整数分解到底有多难?

目前已知最快的算法(GNFS)在现实中:

✔ 从未分解成功 2048-bit RSA

✔ 甚至 1024-bit 都只有在国家级资源下才有可能

✔ 2048-bit 需要的计算量接近天文数字

这就是为什么 2048-bit RSA 仍然安全。

4.3 总结

项目 是否公开 是否影响安全性
e=65537 ✔ 公开 ✔ 无风险
n ✔ 公开 ✔ 无风险
d ❌ 不公开 ✔ 核心秘密
p, q ❌ 不公开 ✔ 核心秘密
φ(n) ❌ 不公开 ✔ 关键,不可推算
相关推荐
ん贤2 小时前
双Token的致命漏洞,你的系统安全吗?
安全·系统安全
深盾科技2 小时前
Windows 11 24H2内核堆栈保护:系统安全新盾牌
安全·系统安全
普通网友2 小时前
等保2.0合规指南:三级系统安全要求与落地
安全·系统安全
Guheyunyi12 小时前
智能守护:视频安全监测系统的演进与未来
大数据·人工智能·科技·安全·信息可视化
Traced back13 小时前
WinForms 线程安全三剑客详解
安全·c#·winform
汉堡包00113 小时前
【网安基础】--内网代理转发基本流程(正向与反向代理)
安全·web安全·php
桌面运维家15 小时前
vDisk VOI/IDV权限管理怎么做?安全方案详解
安全
世界尽头与你15 小时前
(修复方案)kibana 未授权访问漏洞
安全·网络安全·渗透测试
xixixi7777716 小时前
今日 AI 、通信、安全行业前沿日报(2026 年 2 月 4 日,星期三)
大数据·人工智能·安全·ai·大模型·通信·卫星通信