4. 密码学基础回顾:对称加密、非对称加密、哈希函数、数字签名

搞HSM和国密算法,密码学基础躲不开。很多朋友一上来就啃SM2、SM3、SM4的细节,结果发现原理全忘了。我习惯先花一节课把四大件理清楚——对称加密、非对称加密、哈希函数、数字签名。这四样东西,说白了就是HSM的“四根柱子”。

你想想看,HSM为什么能成为硬件安全的核心?因为它把这四类密码操作放进了专用芯片,密钥出不去,算法跑得快。但如果你不理解它们各自的弱点和适用场景,买再贵的HSM也白搭。

密码学组件 典型算法 密钥特点 在HSM中的典型用途
对称加密 SM4, AES, 3DES 加密/解密用同一把密钥 批量数据加密、通信链路加密
非对称加密 SM2, RSA, ECC 公钥/私钥对 密钥协商、数字信封、身份认证
哈希函数 SM3, SHA-256 无密钥,固定长度摘要 数据完整性校验、消息认证码
数字签名 SM2签名, ECDSA 私钥签名,公钥验签 抗抵赖、代码签名、证书签发
密码学四大组件与HSM中的关系 对称加密 非对称加密 哈希函数 数字签名 HSM硬件安全模块 密钥不出芯片 + 高速运算 实际项目中 建议优先使用国密SM系列

4.1 对称加密——又快又简单,但密钥怎么管?

对称加密就是加密和解密用同一把密钥。比如你给文件加个锁,自己用钥匙打开。SM4、AES都是这个路子。我在项目里见过有人直接用AES加密银行卡号,密钥硬编码在代码里——嗯,这种“自杀式”操作我劝你永远别干。

对称加密最大的优点是快。硬件实现尤其快,HSM里通常有专门AES/SM4引擎,加密几G数据只是眨眼的事。但有个致命问题:密钥分发。发密钥的人和收密钥的人,怎么安全地共享这个秘密?你想想看,如果密钥已经在网络上被偷了,那加密等于没加。

注意:对称加密不提供抗抵赖性。因为通信双方都有同一把密钥,A说消息是B发的,B也可以说是A发的。所以需要搭配数字签名。

我记得第一次做金融IC卡项目时,用3DES加密数据,但密钥从HSM导出时必须用密钥信封(Key Envelope)。后来国标下来,全换成SM4。SM4分组128位,密钥128位,结构跟AES差不多,但轮函数、S盒都不一样。别图省事直接用AES库——国密认证要求必须用SM4。

4.2 非对称加密——一对钥匙,解决分发难题

非对称加密解决了对称加密的密钥分发问题。每个人生成一对钥匙:公钥公开,私钥自己藏好。别人用你的公钥加密数据,只有你能用私钥解开。SM2、RSA、ECC都属于这个家族。

为什么叫“非对称”?因为加密和解密用的不是同一把钥匙。你发信给我,用的是我的公钥;我收到后用我的私钥解密。整个过程中,密钥从未在网络上传输——私钥永远不出设备。

这在HSM里极其重要。我见过一个银行密钥管理方案:核心密钥对在HSM内部生成,私钥从不离开HSM芯片;公钥导出后写在证书里。攻击者就算黑掉主机,也拿不到私钥。这就是硬件隔离的价值。

实际对比:SM2(国密椭圆曲线)在同等安全强度下,密钥长度远短于RSA。比如SM2 256位 ≈ RSA 3072位的安全级。更短的密钥意味着更快的运算和更少的存储。

4.3 哈希函数——指纹比对,不存明文

哈希函数不是加密,而是摘要。它把任意长度的数据压缩成固定长度的“指纹”,而且这个指纹不可逆。SM3输出256位,SHA-256也是256位。

哈希有什么特性?

  • 单向性:从摘要反推原文,算不出来。
  • 抗碰撞性:很难找到两段不同数据拥有相同摘要。
  • 输出固定长度:不管输入多大,SM3/SHA-256都是32字节。

我在项目中用哈希做过两件事:第一,校验固件完整性——把HSM固件计算SM3值存到安全存储区,每次启动重新算一遍,不一致就停服务。第二,做消息认证码(HMAC)——用密钥+哈希生成完整性标签,比单纯哈希更安全。

小心哈希长度扩展攻击。 老式的SHA-1、MD5已经不安全。国密SM3目前没有已知的安全缺陷,推荐优先使用。

你可能会问:哈希函数不用密钥,怎么保证数据来源?答案是:哈希本身不能认证来源,需要和数字签名搭着用。

4.4 数字签名——防抵赖的“电子印章”

数字签名 = 哈希 + 非对称加密。先对消息哈希,再用签名者的私钥加密哈希值。别人拿到消息和签名后,用签名者的公钥解密签名得到哈希值,再自己算一遍消息的哈希,对比是否一致。一致说明消息没被篡改,而且确实是你发的。

SM2签名算法在国密体系中扮演核心角色。从CA证书到电子公文,从代码签名到交易抗抵赖,全要用它。我记得有一次客户问:能不能用RSA签名代替SM2?我翻出国密局公告给他看:“金融、政务领域必须采用国密算法。”从此所有方案里签名一律用SM2。

对比项 SM2签名 ECDSA(椭圆曲线) RSA签名(PKCS#1 v1.5)
密钥长度 256位 256位 2048~4096位
签名速度 较快 快 较慢
验签速度 快 快 快
国密合规 是 否 否
HSM支持 标准OPAQUE/软模块 通用 很成熟

避坑:签名≠加密。不要用签名密钥去做加密操作。我曾经见过有人把SM2签名私钥当加密公钥用的例子——签名算法和加密算法在数学结构上不同,乱用会留下安全隐患。

搞清楚了这四个基础组件,你再看HSM的API文档时,会发现所有接口都是围绕它们设计的。对称加密做批量数据保护,非对称加密做密钥交换,哈希做完整性检查,签名做认证和抗抵赖。四者配合,才能构成一套完整的密码应用方案。

下节课我们拿SM系列算法做实战对比,看看它们到底比国外算法强在哪里。嗯,今天就先到这儿。