密码学基础回顾:对称加密、非对称加密、哈希函数、数字签名
好,咱们正式开始聊密码学。我知道很多做IoT的兄弟一听到“密码学”三个字就头大,觉得那是数学博士才搞的东西。其实没那么玄乎。你想想看,你每天用、刷门禁、连Wi-Fi,背后全是这些基础密码学在撑着。
我个人习惯是把密码学拆成四个基本工具:对称加密、非对称加密、哈希函数、数字签名。后量子迁移要改的,说白了就是这四个工具里的数学内核。咱们先把它们长什么样、干什么用、有什么坑,一个一个捋清楚。
核心观点:后量子密码迁移不是推翻重来,而是把传统密码学算法(RSA、ECDSA、DH)替换成能抗量子攻击的新算法。但上层协议、应用逻辑、密钥管理体系基本不变。所以,理解这四个基础工具,是看懂后续所有迁移方案的前提。
1. 对称加密:又快又简单,但密钥怎么给?
对称加密,说白了就是加密和解密用同一把钥匙。你拿钥匙锁门,拿同一把钥匙开门。在IoT里,最常用的对称加密算法是 AES(Advanced Encryption Standard)。
我记得有一次帮一家智能门锁厂商做安全审计。他们用AES-128加密门锁和手机之间的通信,乍一看没问题。但仔细一查,所有门锁的密钥都硬编码在固件里,而且每把锁用的密钥一模一样。你想想看,破解一把锁就等于破解了整个小区。这不是AES的问题,是密钥管理的问题。
实战建议:IoT设备资源有限,AES-128已经足够安全。别盲目上AES-256,多出来的128位密钥长度在MCU上可能要多花30%的运算时间。省下来的算力留给后量子算法,它才是真正的吃性能大户。
对称加密的优点是快。硬件加速的AES在IoT芯片上能做到纳秒级加解密。缺点也很明显——密钥分发。你想想,如果智能灯泡和网关之间用对称加密,那密钥怎么安全地给到灯泡?总不能出厂前烧录吧?万一密钥泄露,所有灯泡都得召回。
所以实际工程里,对称加密通常用来加密数据本身。密钥怎么安全交换?那是非对称加密的事。
2. 非对称加密:公钥私钥,天生一对
非对称加密,也叫公钥密码学。它用一对密钥:公钥公开,私钥自己藏好。公钥加密的数据只有私钥能解,私钥签名的数据公钥能验。这个设计太巧妙了——你不需要事先和对方共享任何秘密,就能建立安全通信。
传统非对称加密的数学基础是两个:大整数分解(RSA)和离散对数(ECC、DH)。这两个数学问题在经典计算机上很难解,但Shor算法在量子计算机上能多项式时间破解。这就是后量子密码要解决的核心问题。
| 算法 | 数学难题 | 密钥长度(安全级别) | 量子威胁 |
|---|---|---|---|
| RSA-2048 | 大整数分解 | 2048 bit | Shor算法可破解 |
| ECDSA P-256 | 椭圆曲线离散对数 | 256 bit | Shor算法可破解 |
| DH-2048 | 有限域离散对数 | 2048 bit | Shor算法可破解 |
| CRYSTALS-Kyber | 格上带错误学习(LWE) | 约 1.3 KB(公钥) | 抗量子 |
我曾经踩过一个坑。一个客户要求在IoT网关里同时支持RSA和ECC,说为了兼容旧设备。结果网关的CPU只有200MHz,每次TLS握手要算好几秒,设备直接超时断开。后来我建议他们只保留ECC P-256,握手时间降到200毫秒。嗯,这里要注意:后量子迁移后,密钥和签名会更大,握手时间会更长。IoT设备必须提前做性能摸底。
3. 哈希函数:单向的指纹机
哈希函数,你给它任意长度的数据,它吐出一个固定长度的摘要。这个过程是单向的——你没法从摘要反推出原始数据。而且,哪怕输入只改一个比特,输出的摘要也会面目全非。
IoT里哈希函数用得最多的地方是固件完整性校验。设备启动时,计算固件的哈希值,和出厂时烧录的哈希值比对。对不上?说明固件被篡改了,拒绝启动。
避坑指南:我曾经遇到过一家公司用MD5做固件签名校验。MD5的碰撞攻击在2004年就被公开了,攻击者可以构造两个不同固件但MD5值相同。这等于签名校验形同虚设。现在IoT行业最低标准是SHA-256,别再用MD5和SHA-1了。
哈希函数在后量子迁移里相对轻松。因为量子计算机对哈希函数的威胁主要是Grover算法,它能把暴力搜索的复杂度从2^n降到2^(n/2)。所以SHA-256在量子计算机面前等效于128位安全强度,目前看够用。NIST的建议是:哈希函数可以继续用SHA-256/SHA-384,暂时不需要换。
4. 数字签名:证明你是谁,证明你没改过
数字签名 = 哈希函数 + 非对称加密。流程是这样的:
- 发送方对消息做哈希,得到摘要。
- 发送方用私钥对摘要加密,生成签名。
- 接收方用公钥解密签名,得到摘要A。
- 接收方自己对消息做哈希,得到摘要B。
- 比较A和B,一致则签名有效。
在IoT里,数字签名最常见的场景是固件空中升级(OTA)。设备收到新固件后,先验证数字签名,确认固件来自合法的厂商,再执行升级。如果签名验证失败,直接丢弃固件包。
传统签名算法(RSA-PSS、ECDSA、EdDSA)在后量子时代都得换。NIST已经选定了CRYSTALS-Dilithium作为主标准,FALCON作为备选。Dilithium的签名大小约2.4KB,比ECDSA的签名(64字节)大了近40倍。这对IoT设备的存储和传输带宽是个不小的挑战。
关键数据对比:
- ECDSA P-256 签名:64 字节
- RSA-2048 签名:256 字节
- CRYSTALS-Dilithium 签名:约 2.4 KB
- FALCON-512 签名:约 0.7 KB
迁移到后量子签名后,固件包里的签名数据会显著增大。OTA升级的传输时间和存储空间需要重新评估。
5. 这四个工具怎么配合?
实际工程里,这四个工具很少单独使用。我给你画一个典型的IoT安全通信流程:
- 身份认证:设备用数字签名证明自己的身份(非对称 + 哈希)。
- 密钥交换:用非对称加密协商出一个临时会话密钥。
- 数据加密:用对称加密(AES)加密通信数据。
- 完整性校验:每条消息附带哈希值,防止中间人篡改。
这个流程在TLS 1.3里体现得最清楚。后量子迁移要做的,就是把第1步和第2步里的非对称算法(RSA、ECDHE)换成后量子算法(Kyber、Dilithium)。第3步的AES和第4步的SHA-256基本不动。
我的经验:做后量子迁移时,别一上来就改算法。先把现有系统的密钥长度、签名大小、握手耗时全部打点记录。然后逐个替换,每替换一个组件就做一次回归测试。我曾经见过一个团队同时换了三个算法,结果系统崩溃了三天才定位到是签名缓冲区溢出。稳一点,一个一个来。