密码能力的构建,一个密码能力应该包含哪些算法,实现哪些能力,那种方式最经济实惠,以及为什么用些算法。
构建体系构建的两种模式

我建议使用混合模式,主密钥分散得到次主密钥【业务密钥】,次主密钥【业务密钥】,保护随机生成的数据密钥。一个业务系统可以有多个【业务密钥】,业务密钥的变化不会业务系统的正常运行,适应于数量不大的【每天小于百万】数据加解密。根据密码算法的普遍性能,其瓶颈在于数据的传输,不在于算法性能。
对于数据量非常大的业务系统,建议使用【数据密钥】进行本地加密,如果需要硬件密码模块保护数据密钥和次主密钥则可以使用本地的硬件密码设备,如果在同一网络内,则考虑直接使用数据密钥。
整体架构如下:
说明一下,这个架构的软件部分,几台虚机,在某运营商接入了100+个业务系统,数据量都不小,没什么压力。
注意如果采购硬件密码模块则必须要求原厂:提供符合《GMT 0018-2023 密码设备应用接口规范》的SDK;提供硬件密码模块的初始化工具,初始化一台设备后可以备份同步到其他设备中。我根据业务的要求选择密码模块,一般小于4000次/秒可以选择几百元的密码卡即可。密码卡是一般都是二级的密码模块,可以满足三级的密码要求。
对于密码能力的要求如下:
- 硬件密码模块全部损坏不会影响业务系统的运行
- 业务密钥的变更不影响业务系统的运行
- 由业务系统发起密钥变更,正常情况下不允许密码能力直接停用业务密钥
- 允许系统从软件加密更换到硬件密码模块加密,不需要业务系统变更
- 业务系统需要新的密码能力,开发时间控制在一周以内。
- 只提供符合业务要求的SDK,不给业务系统犯错的机会!

根据《商用密码管理条例》需要外接国家认可的CA,如果需要本地验签可以使用签名验签服务器,本质上和密码机,密码卡是一样的。要求原厂提供符合《GMT 0018-2023 密码设备应用接口规范》的SDK;提供硬件密码模块的初始化工具,初始化一台设备后可以备份同步到其他设备中,这个非常重要,一些厂商会拒绝,这在采购条件就要明确要求!
我在之前给过等效产品的描述,再次强调一下,这个非常非常重要!

云密码机非必要不要使用,一个实体机虚拟出来N+个虚机是个什么情况。
密码工具箱,如果有些密码算法不再安全可以替换,这个非常重要!!!
1.密码工具箱
| 序号 | 算法名称 | 算法 | 说明 |
| 1 | 对称密码 | SM1,SM4,SM7,ZUC,3DES,AES | |
| 2 | 公钥密码 | SM2,SM9,RSA2048及以上 | |
| 3 | 单向散列函数 | SM3,SHA256,SHA384,SHA512 | SHA1,MD5 已经不安全,非必要不再使用。 |
| 4 | 消息认证码 | HMAC-SM3,MAC,HMAC-SHA256,CBC-MAC | CBC-MAC【SM4-CBC 取右边32个字符】,约定好长度的消息产生消息验证码,不建议使用。 |
| 5 | 数字签名 | SM2(SM3(Random)) , RSA(SHA256(R)) | |
| 6 | 伪随机数生成器 | Random |
2.初步简化
| 序号 | 算法名称 | 算法 | 说明 |
| 1 | 对称密码 | SM4 | |
| 2 | 公钥密码 | SM2 | 可以用线下分发替代在线密钥分发 |
| 3 | 单向散列函数 | SM3 | |
| 4 | 消息认证码 | HMAC-SM3 | |
| 5 | 数字签名 | SM2(SM3(Random)) | 不需要数据签名可以简化掉 |
| 6 | 伪随机数生成器 | Random |
原则:根据密码学常识去掉不公开的,去掉实现复杂的,去掉可以替代的,每个工具箱只剩下一个,如果不需要数字签名和密钥分发可以进一步简化
3.进一步简化算法
| 序号 | 算法名称 | 算法 | 说明 |
| 1 | 对称密码 | SM4 | |
| 2 | 单向散列函数 | SM3 | |
| 3 | 消息认证码 | HMAC-SM3 | |
| 4 | 伪随机数生成器 | Random |
4.细化算法模式
| 序号 | 算法名称 | 算法 | 说明 |
| 1 | 对称密码 | SM4(FPE,CBC,GCM) | 满足第三级密码应用基本要求 |
| 2 | 单向散列函数 | SM3 | |
| 3 | 消息认证码 | HMAC-SM3 | |
| 4 | 伪随机数生成器 | Random |
FPE:保留格式加密,用于加密手机号,身份证,银行卡号等,最大好处是长度和字符集保持不变,对于以此作为数据库索引的字段非常重要,特别是数量比较大的时候,索引变动小,查询效率基本不会降低。
CBC:分组链接模式,加密串行,解密并行,是密码机,密码卡,签名验签服务器等必须支持的算法。被大量使用,普遍验证过。
GCM:是一种同时提供认证和加密功能的分组密码工作模式。它结合了 CTR(Counter,计数器模式)的高效加密特性和 GMAC(Galois Message Authentication Code)的认证特性。这种模式主要用于保障数据的机密性、完整性和认证性。最合适在系统间的接口定义中使用。使用Encrypt-then-MAC方式构建,只需要一个密钥。
给出过样例可以参考。系统间接口定义中非常有优势,强烈建议使用此模式!
SM4_CBC+SM3 结合,提供文件加密的能力,直接对二进制进行加密。
参照:python 的sm4 算法,sm4_apply对str的操作,是对sm4_alg的封装_java 32位十六进制的sm4随机对称密钥-优快云博客
如果不喜欢此模式可以使用SM4_CBC+HMAC-SM3 自行构建密码能力保证:机密性、完整性和认证性。
注意HMAC-SM3的数据源应该是包含所有数据的,数据源在做HMAC-SM3的时候要排序! HMAC-SM3使用的密钥和SM4_CBC的密钥是不同!除了多了一个密钥,非常好用!在对比多项数据是否完全相同的时候使用SM3更好用,还不需要密钥。
举例如下【这个例子参考了15843实体鉴别的规范,这个可以为一个基础接口定义框架,加入其他业务参数,就可以了】:
mac的数据源为:
{'app_id': '10000', 'timestamp': '1736422377.553015', 'random': '71BC2F60AEADF363AC8ADF6C648BA6A7BA9405992DEEBD304128F17D221B83AD', 'encrypt_data': '8DD5E687BEB1560B44E63698D4F14D072FDDD265495822DA11EC980EF95E90F577ABEE6DD903E765B1E30DD4FC9388B4C8D8052D7141A1D523B49D20564647FFA5F18C96FB7B7A4AFCFD7D93D8D1E3D58EC05476E0800AA1EBC0FE92F9187AAC2EE2FB92D9DA3D52D62228F2A3F18B35131F38ECBBA347B7CE1D87AEFE700DF87F3C1810ACEFD400080297D4DE361457'}
生成的mac为
04A1ED002EACA95312071CCA52280363BA475E4D538CEC1D096ADC27418163A4
请求数据为:
{'app_id': '10000', 'timestamp': '1736422377.553015', 'random': '71BC2F60AEADF363AC8ADF6C648BA6A7BA9405992DEEBD304128F17D221B83AD', 'encrypt_data': '8DD5E687BEB1560B44E63698D4F14D072FDDD265495822DA11EC980EF95E90F577ABEE6DD903E765B1E30DD4FC9388B4C8D8052D7141A1D523B49D20564647FFA5F18C96FB7B7A4AFCFD7D93D8D1E3D58EC05476E0800AA1EBC0FE92F9187AAC2EE2FB92D9DA3D52D62228F2A3F18B35131F38ECBBA347B7CE1D87AEFE700DF87F3C1810ACEFD400080297D4DE361457', 'mac': '04A1ED002EACA95312071CCA52280363BA475E4D538CEC1D096ADC27418163A4'}
4344

被折叠的 条评论
为什么被折叠?



