海量业务数据加解密方案的落地与实践
一、背景简介
根据数据安全规范与标准及企业合法合规运营,业务系统需要对海量的业务数据进行加密,保护数据的安全。
1.1 业务数据的安全性要求
- 敏感业务数据需要加密存储
- 数据查询需要进行解密
- 加密数据的密钥支持定期轮换
二、方案预研
对于上述业务数据的加密要求,一般采用加密性能较高的对称加密算法,如:AES、国密SM4等。系统的数据加解密及密钥的管理及定期轮换,行业内一般是采用密钥管理服务(Key Management Service,简称KMS)来解决,下面我们就预研一下KMS的使用。
2.1 密钥管理服务KMS
密钥管理,即密钥管理服务(Key Management Service,KMS),是一种安全、可靠、简单易用的密钥托管服务,帮助您轻松创建和管理密钥,保护密钥的安全。
KMS通过使用硬件安全模块HSM(Hardware Security Module)保护密钥的安全,所有的用户密钥都由HSM中的根密钥保护,避免密钥泄露。
KMS对密钥的所有操作都会进行访问控制及日志跟踪,提供所有密钥的使用记录,满足审计和合规性要求。
2.2 KMS服务选型
密钥管理服务使用硬件安全模块HSM(Hardware Security Module)保护密钥的安全,企业内部如果是要自己搭建密钥管理服务,则需要采购专业的硬件设备进行搭建。对于没有专业的安全团队的公司,选择云厂商提供的KMS服务是一个更加高效便捷的途径。
目前提供KMS云服务能力的厂商:
上述云厂商提供的KMS服务能力基本相同,介于企业内部使用华为云,本文主要介绍基于华为云KMS的海量业务数据加密场景的落地。
三、华为云KMS简介
华为云提供统一管理密钥、敏感数据加密、华为云服务加密、数据数字签名、安全合规(PCI-DSS、等保等)等能力。
3.1 功能总览
功能 | 说明 |
---|---|
密钥管理 | 密钥管理,即密钥管理服务(Key Management Service,KMS),是一种安全、可靠、简单易用的密钥托管服务,帮助您轻松创建和管理密钥,保护密钥的安全。 KMS通过使用硬件安全模块HSM(Hardware Security Module)保护密钥的安全,所有的用户密钥都由HSM中的根密钥保护,避免密钥泄露。 |
创建密钥 | 用户主密钥有密钥元数据(密钥ID、密钥别名、描述、密钥状态与创建日期)和用于加解密数据的密钥材料。 用户可以使用控制台创建密钥,该密钥会自动生成密钥材料。 |
密钥全生命周期管理 | 用户可以通过密钥管理界面,对用户主密钥进行全生命周期管理。(启用、禁用、删除) |
数据加解密 | 当有少量数据(例如:口令、证书、电话号码等)需要加解密时,用户可以通过密钥管理服务(Key Management Service,KMS)界面使用在线工具加解密数据,或者调用KMS的API接口使用指定的用户主密钥直接加密、解密数据。 当有大量数据(例如:照片、视频或者数据库文件等)需要加解密时,用户可采用信封加密方式加解密数据,无需通过网络传输大量数据即可完成数据加解密。 |
密钥轮换 | 广泛重复的使用加密密钥,会对加密密钥的安全造成风险。为了确保加密密钥的安全性,建议您定期轮换密钥,更改原密钥的密钥材料。 开通密钥轮转后,会收取相应的密钥存储费用,每个轮转的版本将作为一个独立的主密钥资源进行计算。 |
专属密钥库 | KMS通过专属密钥库支持HYOK功能,帮助用户完全自主可控名下的用户主密钥,用户主密钥不脱离加密机,并且密码运算完全在加密机中完成。 说明:在外部密钥存储中使用 KMS 密钥的加密和解密操作,由您的外部密钥管理器使用加密密钥材料执行,该功能称为持有自己的密钥(HYOK)。 |
签名验签 | 签名验签是一种加密机制,是保证数据传输安全性以及完整性的重要手段。 通过签名验签的方式,可以防止信息在传输过程中被篡改或伪造。 |
密钥授权 | 用户可以为其他IAM用户或账号创建授权,授予其使用自身的自定义密钥的权限。被授权用户可以通过调用API接口,即可使用被授权的权限。 以下两种情况下,授权用户可以通过密钥管理界面撤销授权: · 当被授权用户不再使用授权用户的自定义密钥时,被授权用户可告知授权用户撤销授权,或者通过API接口直接退役授权。 · 当授权用户想收回自定义密钥的操作权限时,授权用户可强制撤销授权。 |
密钥区域性 | KMS通过密钥区域性,实现密钥跨区域使用。每组用户主密钥与副本密钥具有相同的密钥材料,即可以实现在不同区域的密钥共享。 · 创建副本密钥 · 使用副本密钥 |
3.2 信封加密术语说明(谷歌KMS)
对于海量的业务数据加解密场景,采用信封加密的方式对业务进行加密,下面我们介绍一下何为信封加密。
3.3 华为云KMS信封加密简介(官网)
当有大量数据(例如:照片、视频或者数据库文件等)需要加解密时,用户可采用信封加密方式加解密数据,无需通过网络传输大量数据即可完成数据加解密。
大量数据加密
说明如下:
- 用户需要在KMS中创建一个用户主密钥。
- 用户调用KMS的“create-datakey”接口创建数据加密密钥。用户得到一个明文的数据加密密钥和一个密文的数据加密密钥。其中密文的数据加密密钥是由指定的用户主密钥加密明文的数据加密密钥生成的。
- 用户使用明文的数据加密密钥来加密明文文件,生成密文文件。
- 用户将密文的数据加密密钥和密文文件一同存储到持久化存储设备或服务中。
大量数据解密
说明如下:
- 用户从持久化存储设备或服务中读取密文的数据加密密钥和密文文件。
- 用户调用KMS的“decrypt-datakey”接口,使用对应的用户主密钥(即生成密文的数据加密密钥时所使用的用户主密钥)来解密密文的数据加密密钥,取得明文的数据加密密钥。
如果对应的用户主密钥被误删除,会导致解密失败。因此,需要妥善管理好用户主密钥。 - 用户使用明文的数据加密密钥来解密密文文件。
四、本地数据加解密方案实践
综上,我们对KMS的信封加密的标准流程进行一些本地项目落地的调整。
方案说明:
- 本地开发一个密钥管理服务,实现数据加密密钥的管理
- 数据加密密钥定期轮换,并指定数据加密密钥的数据类型、生效时间、版本号
- 应用引入定制加解密SDK,数据加密时根据数据类型、生效时间选择对应版本号的数据加密密钥进行加密
- 加密后的密文同时拼接加密所用的密钥版本号
- 加密数据查询时,根据查询数据的类型及时间,选择对应版本号的数据加密密钥对参数加密后进行精确查询
4.1 数据加密密钥的数据安全分析
五、华为云KMS验证
在基于华为云KMS服务进行海量数据加解密的场景中,我们主要用到一下3个接口:
- 控制台创建主密钥
- 接口创建数据密钥
- 接口解密数据密钥
5.1 控制台创建主密钥
5.2 创建数据密钥
调用华为云创建数据加密密钥的接口,会返回明文和密文的数据加密密钥(DEK),如下:
{
"plain_text": "43456936300d023645e0d7898d44c3a98b98c1b67cf611ccbfe8b9f5460d7095",
"key_id": "2eef7f6e-7686-45c5-95c4-ddd6459d2e83",
"cipher_text": "050064004ab28a42d6fff08045cd023000e738415a5de6ebccb0cebab73c14369fcc33e5dbc1d36c96739a4edd989eae2be4155a95374dfb04eef8581b95b6df32656566376636652d373638362d343563352d393563342d6464643634353964326538330000000014131211100f0e0d0c0b0a090807060504030201e3b815d0aae3791dfc9947897bfc20188f71c8ab4827c10f555bf3cc894cbbfe"
}
5.3 解密数据密钥
调用解密数据密钥接口,对本地存储的加密后的数据密钥进行解密。
请求参数
{
"key_id": "2eef7f6e-7686-45c5-95c4-ddd6459d2e83",
"cipher_text": "050064004ab28a42d6fff08045cd023000e738415a5de6ebccb0cebab73c14369fcc33e5dbc1d36c96739a4edd989eae2be4155a95374dfb04eef8581b95b6df32656566376636652d373638362d343563352d393563342d6464643634353964326538330000000014131211100f0e0d0c0b0a090807060504030201e3b815d0aae3791dfc9947897bfc20188f71c8ab4827c10f555bf3cc894cbbfe",
"datakey_cipher_length": "312"
}
响应参数
{
"datakey_dgst": "1a96e1bcf8849e04e9e6786b4fcfa779260fac66ecd2233a413dc35c1d48fecb",
"data_key": "43456936300d023645e0d7898d44c3a98b98c1b67cf611ccbfe8b9f5460d7095",
"datakey_length": "32"
}
六、总结
本文主要介绍基于KMS的海量数据加解密方式,在本地大量数据加解密的场景下,一般采用信封加密的方式对业务数据进行加密。在本地业务落地过程中,基于加密数据查询的需求及数据存储的要求,我们对标准的信封加密方式进行调整,引入本地密钥服务,实现对数据加密密钥生效时间和版本的管理,更好的适配本地海量业务数据加密的场景。