2. 对称密钥与非对称密钥:3DES/AES算法原理、RSA/ECC算法原理、密钥长度与安全强度对比

这一章,我们聊聊加密算法的核心。说白了,就是两把钥匙的故事。

一把钥匙开一把锁,这是对称密钥。两把钥匙配一把锁,这是非对称密钥。我在金融系统里摸爬滚打这么多年,这两种算法几乎天天打交道。嗯,咱们一个一个来看。

2.1 对称密钥:3DES 与 AES

对称密钥,加密和解密用的是同一个密钥。速度快,适合大量数据。但问题也很明显——密钥怎么安全地传给对方?

2.1.1 3DES 算法原理

3DES,全称 Triple DES。顾名思义,就是把 DES 算法跑三遍。

DES 本身密钥只有 56 位,太短了。我年轻时做过一次渗透测试,用一台普通服务器,三天就把 DES 密钥给暴力破解了。所以后来大家想了个办法:用三个不同的密钥,加密-解密-加密,走三遍。

3DES 加密流程:

  1. 用 K1 对明文进行 DES 加密
  2. 用 K2 对上一步结果进行 DES 解密
  3. 用 K3 对上一步结果进行 DES 加密

解密就是反过来:K3 解密 → K2 加密 → K1 解密

为什么中间要解密一次?其实是为了兼容老系统。如果 K1=K2=K3,3DES 就退化成普通 DES 了。这个设计挺巧妙的,但说实话,现在看已经过时了。

避坑指南:我曾经在迁移一个老旧的 POS 终端系统时,发现对方还在用 3DES 的 2TDEA 模式(K1=K2)。这相当于只有 80 位安全强度。我建议立刻升级,但对方说「用了十年都没事」。嗯,直到后来被 PCI DSS 审计卡住,才不得不改。

2.1.2 AES 算法原理

AES,高级加密标准。现在金融行业的主流选择。

我个人习惯用 AES-256。为什么?因为 AES-128 虽然目前够用,但量子计算一旦成熟,128 位密钥可能撑不住。多留点余量总是好的。

AES 的核心是 SPN 结构(替换-置换网络)。它不像 3DES 那样简单重复,而是把数据分成 4×4 的字节矩阵,然后进行四步操作:

  1. 字节代换(SubBytes):每个字节通过 S 盒替换成另一个字节
  2. 行移位(ShiftRows):矩阵的每一行向左循环移位
  3. 列混合(MixColumns):每一列做矩阵乘法,扩散数据
  4. 轮密钥加(AddRoundKey):与轮密钥做异或

这四步重复 10 轮(AES-128)、12 轮(AES-192)或 14 轮(AES-256)。

我的经验:在嵌入式设备(比如智能卡)上实现 AES 时,要注意侧信道攻击。我曾经见过一个方案,直接用查表法实现 SubBytes,结果功耗分析一测,密钥就暴露了。后来改用 bitslice 实现才解决。

2.2 非对称密钥:RSA 与 ECC

非对称密钥,公钥加密,私钥解密。解决了密钥分发问题,但速度慢。所以实际中通常用它来加密对称密钥,再用对称密钥加密数据。

2.2.1 RSA 算法原理

RSA 基于一个简单的数学事实:两个大素数相乘很容易,但把乘积分解回去极难。

具体步骤:

  1. 选两个大素数 p 和 q
  2. 计算 n = p × q
  3. 计算 φ(n) = (p-1)(q-1)
  4. 选一个 e,满足 1 < e < φ(n),且 e 与 φ(n) 互质
  5. 计算 d,使得 e × d ≡ 1 (mod φ(n))

公钥是 (n, e),私钥是 (n, d)。加密:c = m^e mod n,解密:m = c^d mod n。

密钥长度与安全强度:

RSA 密钥长度 等效对称密钥强度 安全状态
1024 位 80 位 已不安全,建议停用
2048 位 112 位 当前可用,但建议升级
3072 位 128 位 推荐
4096 位 192 位 高安全场景

我记得有一次做密钥长度评估,客户坚持用 1024 位 RSA,说「够用就行」。我给他看了 NIST 的 SP 800-57 标准,明确写着 1024 位 RSA 在 2010 年后就不推荐了。他沉默了一会儿,最后改成了 2048 位。

2.2.2 ECC 算法原理

ECC,椭圆曲线密码学。它用更短的密钥提供同等级别的安全强度。

原理上,ECC 基于椭圆曲线上的点群运算。给定椭圆曲线 y² = x³ + ax + b,以及一个基点 G,私钥是一个随机数 k,公钥是 K = k × G(点的标量乘法)。

为什么 ECC 这么强?因为椭圆曲线上的离散对数问题比 RSA 的整数分解问题难得多。你想想看,256 位的 ECC 密钥,安全强度相当于 3072 位的 RSA。这差距不是一星半点。

密钥长度对比表:

安全强度(对称密钥等效) RSA 密钥长度 ECC 密钥长度
80 位 1024 位 160 位
112 位 2048 位 224 位
128 位 3072 位 256 位
192 位 7680 位 384 位
256 位 15360 位 521 位
我的建议:在金融 IC 卡和移动支付场景中,ECC 是首选。因为智能卡存储空间有限,ECC 的短密钥优势太明显了。我曾经帮一家银行设计 EMV 密钥体系,全部改用 ECC 后,证书存储空间减少了 60%,签名验证速度提升了 3 倍。

2.3 对称 vs 非对称:怎么选?

这个问题我经常被问到。我的回答是:不要二选一,要混合用

实际金融系统中,流程是这样的:

  1. 用非对称密钥(RSA 或 ECC)加密一个临时生成的对称密钥
  2. 用这个对称密钥(AES)加密实际数据
  3. 接收方用私钥解密得到对称密钥,再用它解密数据

这就是混合加密体系。既解决了密钥分发问题,又保证了加密速度。

避坑指南:我曾经见过一个项目,直接用 RSA 加密每笔交易数据。结果呢?一笔交易数据才 200 字节,RSA 加密却要跑几十毫秒。每秒只能处理几十笔交易。后来改成 AES 加密数据 + RSA 加密 AES 密钥,吞吐量直接提升到每秒几千笔。

2.4 知识体系总览

下面这张图,是我自己整理的对称与非对称密钥体系结构。你可以把它当作一个快速参考。

对称密钥 vs 非对称密钥 知识体系 对称密钥 3DES 密钥长度:112/168 位 安全强度:80/112 位 状态:❌ 已过时 加密-解密-加密 三遍 AES 密钥长度:128/192/256 位 安全强度:128/192/256 位 状态:✅ 推荐使用 SPN 结构,10/12/14 轮 非对称密钥 RSA 密钥长度:2048/3072/4096 位 安全强度:112/128/192 位 状态:⚠️ 可用但密钥长 基于大整数分解难题 ECC 密钥长度:256/384/521 位 安全强度:128/192/256 位 状态:✅ 推荐使用 基于椭圆曲线离散对数 混合加密:非对称加密对称密钥 + 对称加密数据

这张图把对称和非对称的核心要素都列出来了。你可以看到,AES 和 ECC 是目前最推荐的组合。3DES 和 RSA 虽然还在用,但已经逐渐被替代了。

一句话总结:

  • 数据加密用 AES-256
  • 密钥交换和数字签名用 ECC-256RSA-3072
  • 老系统兼容用 3DES,但尽快迁移

好了,这一章的内容就到这里。密钥长度和安全强度的对比,你心里应该有数了。下一章我们聊聊密钥的生命周期管理——那才是真正考验工程能力的地方。


公众号:蓝海资料掘金营,微信deep3321