密码学基础:对称加密与非对称加密、哈希算法、数字签名、密钥交换原理
搞国密SDK接入,你绕不开这些基础概念。说实话,很多人在对接时踩坑,就是因为没搞明白这些密码学原语之间的区别。我刚开始接触金融SDK时也迷糊过,后来边踩坑边总结,慢慢就理清楚了。
这一章咱们就把对称加密、非对称加密、哈希、数字签名、密钥交换这五块掰开揉碎。不整虚的,直接说人话。
对称加密:加密和解密用同一把钥匙
说白了,你拿钥匙锁门,回头拿同一把钥匙开门。效率高,适合大量数据。国密里叫SM4,国际常见的是AES。我在金融SDK改造时,SM4用得最多,比如加密交易报文里的敏感字段。
非对称加密:公钥加密,私钥解密
你想想看,一把锁配两把钥匙——公钥是公开的,谁都可以用来锁数据;私钥只有你自己有,才能打开。国标SM2就是基于椭圆曲线的非对称算法。速度比对称加密慢,所以一般用来加密对称密钥或做数字签名。
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1 个密钥 | 1 对密钥(公钥 + 私钥) |
| 速度 | 快(适合大数据量) | 慢(适合小数据量) |
| 国密代表算法 | SM4 | SM2 |
| 典型用途 | 数据加密 | 密钥传输、数字签名 |
哈希算法:单向散列,不可逆
哈希就是把任意长度的数据,算成固定长度的摘要。你改一点点原文,摘要就完全不一样。而且无法从摘要反推原文。国密里SM3就是做这个的,替代MD5和SHA-1。我在项目中见过有人拿MD5存密码,后来被拖库直接完蛋——改成SM3加盐就好多了。
数字签名:用私钥签名,用公钥验签
数字签名 = 哈希 + 非对称加密。先对消息算哈希,再用私钥加密这个哈希,得到签名。验证时,接收方用公钥解密签名得到哈希,再对比自己算的哈希。只要匹配,就能确认消息没被篡改且来自私钥持有者。国密里SM2既做加密也做签名,一套算法搞定。
我记得之前做电子签章系统,就是因为没有理解“先哈希再签名”这个流程,导致签名长度爆炸。后来按照标准走,就顺利过检了。
密钥交换:在不安全信道上协商密钥
两个人隔着网线,怎么安全地拿到一把共享密钥?这就靠密钥交换协议。经典的有DH(Diffie-Hellman),国密有SM2密钥交换协议。原理上利用非对称加密的数学特性,双方各自用自己的私钥和对方的公钥,算出相同的会话密钥。
我曾经给一家银行做TLS国密改造,发现他们的密钥协商流程里没有做临时密钥的生成,导致每次连接复用固定密钥,安全隐患很大。改成SM2密钥交换后,完美解决。
学完这一章,你可以回头看看自己项目里的密码学设计,哪些用了对称加密?密钥怎么分发的?签名流程对吗?我敢说,大多数问题都能在基础概念里找到答案。