2、密钥基础概念:对称加密与非对称加密、密钥长度与安全强度、密钥生命周期
大家好,我是老张。今天咱们聊聊密钥的基础概念。说实话,这部分内容看着有点理论,但你要是真搞懂了,后面做加密狗烧录的时候会少踩很多坑。我当年刚入行时,就因为没搞清对称和非对称的区别,差点把客户的密钥给搞丢了……嗯,咱们慢慢说。
2.1 对称加密与非对称加密
先说说对称加密。说白了,就是加密和解密用同一把钥匙。就像你家里的门锁,用一把钥匙锁门,也用同一把钥匙开门。常见的对称加密算法有 AES、DES、SM4 等。
对称加密的特点:
- 速度快,适合大量数据加密
- 密钥管理麻烦,分发是个大问题
- 安全性完全依赖于密钥的保密性
我在项目中遇到过一件事。有一次给客户做加密狗方案,他们坚持用 DES。我说 DES 的密钥长度只有 56 位,现在用暴力破解,几小时就能搞定。他们不信。后来我给他们演示了一下,用一台普通 PC,跑了不到 3 小时就把密钥解出来了。从那以后,他们再也不敢用 DES 了。
非对称加密呢?它用一对钥匙:公钥和私钥。公钥可以公开,私钥自己藏着。你用公钥加密,只有对应的私钥能解开。反过来,你用私钥签名,别人用公钥验证。常见的算法有 RSA、ECC、SM2。
我的建议:在实际的加密狗方案中,我习惯用非对称加密来做密钥分发和身份认证,用对称加密来加密实际的数据。两者配合使用,既安全又高效。
你想想看,如果只用对称加密,你怎么把密钥安全地传给对方?快递?邮件?都不靠谱。非对称加密就解决了这个问题:你用对方的公钥加密对称密钥,对方用私钥解密,然后双方用这个对称密钥通信。这就是经典的“混合加密”方案。
2.2 密钥长度与安全强度
密钥长度越长,安全强度越高,但计算开销也越大。这里有个平衡点。
| 算法 | 密钥长度(位) | 安全强度 | 推荐用途 |
|---|---|---|---|
| AES | 128 | 高 | 一般数据加密 |
| AES | 256 | 极高 | 机密数据加密 |
| RSA | 2048 | 高 | 数字签名、密钥交换 |
| RSA | 4096 | 极高 | 高安全场景 |
| ECC | 256 | 极高 | 移动设备、物联网 |
| SM2 | 256 | 极高 | 国密标准 |
为什么会这样?因为破解不同算法的难度不一样。比如 RSA 2048 位的安全强度,大约相当于 AES 112 位。而 ECC 256 位的安全强度,相当于 RSA 3072 位。所以 ECC 在同等安全强度下,密钥更短,计算更快。
注意:我曾经见过有人用 512 位的 RSA 密钥做加密狗。我当时就告诉他,这个密钥用现在的算力,几分钟就能破解。他还不信,结果我现场用了一个开源工具,不到 5 分钟就把私钥算出来了。所以,密钥长度千万别省!
我个人习惯,在加密狗方案中,对称加密至少用 AES-256,非对称加密至少用 RSA-2048 或 ECC-256。如果是国密方案,就用 SM4 和 SM2。这个配置,目前来看是安全的。
2.3 密钥生命周期
密钥不是生下来就能一直用下去的。它有完整的生命周期:生成、分发、存储、使用、销毁。每个环节都可能出问题。
2.3.1 密钥生成
密钥生成的关键是随机性。如果随机数生成器不够随机,密钥就可能被预测。我在项目中遇到过,有人用 C 语言的 rand() 函数生成密钥。结果呢?每次程序重启,生成的密钥序列都一样。这跟没加密有什么区别?
正确的做法:
- 使用硬件随机数生成器(TRNG)
- 或者使用操作系统提供的安全随机数接口(如 /dev/urandom)
- 不要用软件伪随机数生成器(PRNG)直接生成密钥
2.3.2 密钥分发
密钥分发是最容易出问题的环节。你想想看,你要把密钥从生成设备传到加密狗里,中间经过了多少环节?网络?USB?文件?每个环节都可能被截获。
我的经验:我建议在加密狗内部生成密钥对,公钥导出,私钥永远不出芯片。这样私钥从出生到死亡,都没离开过安全环境。分发公钥就简单多了,公开出去也没事。
2.3.3 密钥存储
密钥存储要保证机密性和完整性。不能被人读走,也不能被人篡改。
常见的存储方式:
- 硬件安全模块(HSM):最安全,但贵
- 安全芯片(如加密狗):次安全,性价比高
- 文件系统加密存储:方便,但容易被攻击
- 环境变量或配置文件:最不安全,千万别用
警告:我曾经见过有人把密钥硬编码在代码里。结果代码被反编译,密钥直接暴露。嗯,这个项目后来重做了。记住:密钥永远不要出现在源代码中!
2.3.4 密钥销毁
密钥用完了,或者怀疑被泄露了,就要销毁。销毁不是简单地 delete 文件,因为数据可能还在磁盘上。
正确的销毁方式:
- 覆盖写入:用随机数据多次覆盖密钥存储区域
- 物理销毁:对于安全芯片,直接销毁芯片本身
- 安全擦除:使用专用的安全擦除工具
我建议在加密狗方案中,设计一个“自毁”功能。当检测到物理攻击或多次认证失败时,自动擦除所有密钥。这样即使加密狗被人拿走了,密钥也拿不到。
总结一下:密钥生命周期管理,说白了就是管好密钥的“生老病死”。生成要随机,分发要安全,存储要加密,销毁要彻底。每个环节都不能马虎。我做了这么多年嵌入式安全,见过太多因为密钥管理不当导致的安全事故。希望你们能引以为戒。
好了,这一章就到这里。下一章我们聊聊加密狗的具体硬件架构,看看里面到底是怎么工作的。