密码学基础:对称加密与非对称加密、哈希算法、数字签名、密钥交换原理

搞国密SDK接入,你绕不开这些基础概念。说实话,很多人在对接时踩坑,就是因为没搞明白这些密码学原语之间的区别。我刚开始接触金融SDK时也迷糊过,后来边踩坑边总结,慢慢就理清楚了。

这一章咱们就把对称加密、非对称加密、哈希、数字签名、密钥交换这五块掰开揉碎。不整虚的,直接说人话。

密码学基础全景 对称加密 非对称加密 哈希算法 数字签名 密钥交换 对称加密 + 非对称加密 + 哈希 + 数字签名 + 密钥交换 = 现代密码学五大支柱

对称加密:加密和解密用同一把钥匙

说白了,你拿钥匙锁门,回头拿同一把钥匙开门。效率高,适合大量数据。国密里叫SM4,国际常见的是AES。我在金融SDK改造时,SM4用得最多,比如加密交易报文里的敏感字段。

经验谈:对称加密的密钥不能明文传输。我曾经在审计中发现有同事把SM4密钥直接写死在配置文件里,好家伙,等于给黑客配了把钥匙。正确的做法是通过密钥交换协议或离线分发。

非对称加密:公钥加密,私钥解密

你想想看,一把锁配两把钥匙——公钥是公开的,谁都可以用来锁数据;私钥只有你自己有,才能打开。国标SM2就是基于椭圆曲线的非对称算法。速度比对称加密慢,所以一般用来加密对称密钥或做数字签名。

对称加密 vs 非对称加密
特性对称加密非对称加密
密钥数量1 个密钥1 对密钥(公钥 + 私钥)
速度快(适合大数据量)慢(适合小数据量)
国密代表算法SM4SM2
典型用途数据加密密钥传输、数字签名

哈希算法:单向散列,不可逆

哈希就是把任意长度的数据,算成固定长度的摘要。你改一点点原文,摘要就完全不一样。而且无法从摘要反推原文。国密里SM3就是做这个的,替代MD5和SHA-1。我在项目中见过有人拿MD5存密码,后来被拖库直接完蛋——改成SM3加盐就好多了。

避坑指南:哈希不等于加密!加密可以解密,哈希不能“解哈希”。另外,哈希存在碰撞风险,国密SM3的抗碰撞性已经过专业评估,金融行业放心用。

数字签名:用私钥签名,用公钥验签

数字签名 = 哈希 + 非对称加密。先对消息算哈希,再用私钥加密这个哈希,得到签名。验证时,接收方用公钥解密签名得到哈希,再对比自己算的哈希。只要匹配,就能确认消息没被篡改且来自私钥持有者。国密里SM2既做加密也做签名,一套算法搞定。

我记得之前做电子签章系统,就是因为没有理解“先哈希再签名”这个流程,导致签名长度爆炸。后来按照标准走,就顺利过检了。

密钥交换:在不安全信道上协商密钥

两个人隔着网线,怎么安全地拿到一把共享密钥?这就靠密钥交换协议。经典的有DH(Diffie-Hellman),国密有SM2密钥交换协议。原理上利用非对称加密的数学特性,双方各自用自己的私钥和对方的公钥,算出相同的会话密钥。

我曾经给一家银行做TLS国密改造,发现他们的密钥协商流程里没有做临时密钥的生成,导致每次连接复用固定密钥,安全隐患很大。改成SM2密钥交换后,完美解决。

核心结论:对称加密管效率,非对称加密管安全分发,哈希管完整性,签名管身份认证,密钥交换管协商。五者互相配合,缺一不可。

学完这一章,你可以回头看看自己项目里的密码学设计,哪些用了对称加密?密钥怎么分发的?签名流程对吗?我敢说,大多数问题都能在基础概念里找到答案。