第3章:密码学基础回顾

好,咱们进入正题。做HSM开发,密码学是躲不开的。你想想看,车上的安全通信、安全启动、安全刷写,哪样离得开加密?这一章,我把最常用的几个算法给你捋一遍。对称加密、非对称加密、哈希、消息认证码,一个一个来。

3.1 对称加密:AES

对称加密,说白了就是加密和解密用同一个密钥。就像你家里的大门钥匙,锁门和开门都是它。在汽车电子里,AES是绝对的主流。

我个人习惯用AES-128,为什么?因为128位密钥在安全性和性能之间平衡得最好。AES-256当然更安全,但在TC3xx的HSM里,128位已经够用,而且速度更快。

核心要点:AES是分组加密算法,分组大小固定为128位(16字节)。密钥长度可以是128、192或256位。

AES有几种工作模式,我重点说两个你一定会用到的:

  • ECB模式:最简单,但别用。同样的明文会得到同样的密文,这在汽车通信里是致命的。我曾经见过一个项目,用ECB模式加密CAN报文,结果攻击者直接重放攻击就破解了。
  • CBC模式:需要初始化向量(IV),每个分组会与前一个密文异或。安全性好很多,但注意IV不能重复使用。
  • CTR模式:把AES当成流密码用,可以并行计算,适合高速通信。我在做以太网安全通信时常用这个。

嗯,这里要注意:在HSM里,密钥通常不直接暴露给CPU。你通过API告诉HSM「用密钥ID 0x05加密这段数据」,HSM自己处理密钥。这样即使CPU被攻破,密钥也拿不到。

实战技巧:在TC3xx上,AES加密一个16字节块大约需要几十个微秒。如果你要加密大量数据,建议用CTR模式,可以提前计算密钥流。

3.2 非对称加密:ECC与RSA

非对称加密,就是一对密钥:公钥和私钥。公钥可以公开,私钥自己藏好。这玩意儿在汽车里主要干两件事:密钥交换和数字签名。

RSA是老牌选手,基于大整数分解难题。我刚开始做安全时,RSA-2048是标配。但现在,我个人更推荐ECC。

ECC(椭圆曲线密码学)的优势很明显:同样的安全强度,密钥长度短得多。RSA-2048的安全级别,ECC用256位就够了。在HSM这种资源受限的环境里,ECC简直是福音。

安全级别 RSA密钥长度 ECC密钥长度
80位 1024 160
112位 2048 224
128位 3072 256
256位 15360 512

你看这表,RSA到256位安全级别时,密钥长度已经15K了,HSM根本存不下。ECC只要512位,舒服多了。

在汽车里,ECC最常用的曲线是NIST P-256(也叫secp256r1)。为什么?因为HSM硬件直接支持这条曲线的点乘运算,速度飞快。我曾经试过用软件实现ECC签名,一个签名要几百毫秒,换成HSM硬件加速,几毫秒搞定。

避坑指南:我曾经遇到过一个问题——ECC签名时随机数生成器出故障,导致两个签名用了相同的随机数。结果攻击者直接算出了私钥。所以,一定要确保HSM的随机数生成器是健康的。

3.3 哈希算法:SHA2

哈希算法,就是把任意长度的数据,压缩成固定长度的摘要。它有几个特点:不可逆、抗碰撞、雪崩效应。说白了,你改一个比特,摘要就完全变了。

在汽车里,SHA-256是主力。为什么不是SHA-1?SHA-1已经被攻破了,虽然实际攻击成本很高,但做安全设计不能赌。我建议直接上SHA-256。

哈希的典型应用场景:

  • 安全启动:计算固件的哈希值,和签名里的哈希比对,看固件有没有被篡改。
  • 密码存储:存密码的哈希值,而不是明文。这样数据库泄露了,攻击者也拿不到原始密码。
  • 数据完整性:传输数据时附带哈希值,接收方重新计算,看数据有没有被改过。

嗯,这里有个细节:SHA-256的输出是32字节。如果你需要更长的摘要,可以用SHA-512(64字节)。但TC3xx的HSM对SHA-256有硬件加速,SHA-512可能慢一些。

性能数据:在TC3xx HSM上,SHA-256处理1MB数据大约需要几毫秒。这个速度足够满足大多数汽车应用。

3.4 消息认证码:HMAC

哈希只能保证完整性,不能保证真实性。什么意思?你收到一段数据和它的哈希值,你怎么确定这个哈希值就是发送方算的?万一中间人把数据和哈希一起改了呢?

这时候就需要消息认证码(MAC)。HMAC是哈希和密钥的结合体。只有知道密钥的人,才能生成正确的MAC。

HMAC的计算公式其实不复杂:

HMAC(K, m) = H( (K' ⊕ opad) || H( (K' ⊕ ipad) || m ) )

其中K'是密钥经过填充后的结果,opad和ipad是固定的常数。你不需要记住这个公式,但要知道:HMAC的安全性依赖于底层哈希函数和密钥的保密性。

在汽车里,HMAC最常见的应用是:

  • 安全通信:每个CAN或以太网报文后面附上HMAC,接收方验证。
  • 会话密钥派生:用HMAC-based密钥派生函数(HKDF)从主密钥派生出会话密钥。

我个人习惯用HMAC-SHA256。为什么?因为SHA256是硬件加速的,HMAC的计算开销主要就在哈希上。而且256位的输出长度,在汽车通信里足够用了。

实战技巧:在TC3xx上,HSM内部可以直接计算HMAC,不需要把密钥暴露给CPU。你只需要告诉HSM「用密钥ID 0x0A计算这段数据的HMAC」,HSM返回结果。这样密钥永远不会离开HSM的安全边界。

好,这一章的内容就这些。对称加密、非对称加密、哈希、HMAC,这四个是汽车安全的基础。下一章,我们会把这些算法组合起来,看看HSM到底是怎么工作的。

最后提醒:密码学算法本身是安全的,但实现和部署才是漏洞的重灾区。密钥管理、随机数生成、侧信道攻击,这些才是真正要命的。后面几章,我会结合TC3xx的HSM,一个一个给你讲透。