密码学基础:对称加密与非对称加密
密码学,说白了就是信息的伪装术。没有它,密钥隔离域的设计连地基都算不上。你在域里折腾半天,加解密通道被人一锅端,那还玩什么?我当年刚做安全系统时,觉得算法选哪个都行,结果被架构师怼了一顿——现在回看,那真是血泪教训。
对称加密:一把钥匙开一把锁
对称加密的概念很简单。通信双方用同一把密钥来加密和解密。
拿 AES 来说吧。它是个分组密码,把明文切成 128 比特的块,然后用 128、192 或 256 比特的密钥反复混淆。加密和解密用的是同一个密钥。
加密:C = Encrypt(K, M)
解密:M = Decrypt(K, C)
其中 K 就是那把共享密钥。
但问题来了——密钥怎么安全地交给对方?你想想看,如果网络是明文传输的,那密钥本身就成了新靶子。这是对称加密的老大难问题。
常见对称算法对比
| 算法 | 密钥长度 | 分组大小 | 安全性状态 |
|---|---|---|---|
| AES | 128/192/256 | 128 | 安全(推荐) |
| DES | 56 | 64 | 已破解(别用) |
| 3DES | 112/168 | 64 | 逐渐淘汰 |
| SM4 | 128 | 128 | 国标,安全 |
实际开发里,AES-GCM 是我的首选。它内置了认证加密,能防篡改。一次操作,加密加完整性校验都办了。
非对称加密:公钥私钥这对好基友
非对称加密解决了密钥分发的问题。它用一对密钥:一个公开,一个私有。
- 公钥加密,私钥解密:别人用你的公钥加密数据,只有你能用私钥解开。
- 私钥签名,公钥验签:你用私钥签名消息,别人用公钥验证是你签的。
为什么它能做到?基于数学难题。RSA 依赖大数分解,ECC 依赖椭圆曲线离散对数。本质上,正向运算(生成密钥对、加密、解密)相对轻松,但逆向破解在计算上不现实。
主流非对称算法速览
| 算法 | 密钥长度等效 | 常见应用 | 安全状态 |
|---|---|---|---|
| RSA | 2048+ | 加密、签名 | 安全 |
| ECC | 256|384|521 | 签名、密钥交换 | 高效安全 |
| SM2 | 256 | 国标签名/加密 | 安全 |
| DH | 2048+ | 密钥交换 | 安全 |
我个人的习惯是:新项目优先用 ECDSA 签名 + ECDH 密钥交换。效率高,密钥短,证书也紧凑。但记得检查曲线实现是否有侧信道漏洞,这事我踩过坑。
为什么密钥隔离域要同时用这两个
好,问题来了——既然非对称能解决密钥分发,那直接全用它不就行了?
不行。性能扛不住。在隔离域的加解密通道里,如果所有数据都用 RSA 处理,延迟会爆炸。
做法是这样:
- 客户端用服务器的公钥(非对称)加密一个临时对称密钥。
- 服务器用私钥解密,得到这个对称密钥。
- 后续所有的业务数据都用对称加密(AES-GCM)传输。
这就是混合加密系统的典型结构。HTTPS 就是这么干的。
举个例子。在域内的密钥分发协议里:
- 用 SM2 签名验证通信方身份。
- 用 ECDH 协商会话密钥。
- 用 SM4 加密会话数据。
- 用 HMAC-SM3 校验完整性。
你看,四种密码原语各司其职。你不可能只用一种解决所有问题。我在迭代隔离域架构时,把这三个层次拆开设计,后期的维护成本低了不止一个量级。
到这里,你应该清楚了。对称加密和非对称加密不是二选一的关系。它们是工具链里的两个组件。在密钥隔离域系统里,你要学会把它们组合起来,让每个组件干它最擅长的事。
对了,我建议你在设计初期就把密码算法抽象成接口层。别和具体实现绑死。这样以后换算法、升版本,不用动整个系统。这是我迭代了三版隔离域架构之后,最后悔没早点做的事。