编者荐语:

贝壳技术团队通过这篇文章介绍了其在数据安全治理领域中设计KMS密钥体系的思路,并以两个经典场景示例,说明其方案对业务系统API的有效管控以及数据加密的实现能力。

以下文章来源于贝壳产品技术 ,作者刘福光@贝壳找房

一、概述

密码学技术是信息安全技术的核心,一般情况下,我们习惯认为数据经过加密处理就是安全的,却忽视了由于设计不完善、实现不规范给系统带来的风险。应用中常见的反面例子有:

1、使用的密码算法强度不足。如使用MD5、SHA1算法哈希存储用户密码、手机号等。——可以通过彩虹表攻击在有限空间+时间内通过碰撞推导原文,目前业界已普遍采用强度更强的PBKDF2等算法替代。

2、密钥长度不足导致密钥空间有限,在现有计算条件下易于被暴力破解。如:64位(有效长度56位)密钥长度的DES密钥、1024位RSA密钥在现有硬件条件下,可在几天或几小时内实现破解。

3、算法使用不当,导致抗分析能力较弱。反面案例有:通过不安全的伪随机数产生密钥,导致碰撞概率极高;加密过程中初始向量IV为空,使差分攻击难度降低;HMAC摘要中未使用盐值导致重放等横向攻击。

4、未设置密钥更新机制、更新机制不合理或无法及时停用存在风险的密钥,导致密钥泄露风险逐渐提高。比如:通过构造收集足够多的明文/密文对之后,可以通过差分攻击极大提速密钥的破解。

5、密钥存储方案或存储环境存在泄露风险。如:通过配置文件、硬编码等方式存储密钥,攻击者可通过越权查看配置文件、反编译程序代码等方式获取密钥。

6、不合理的密钥分发机制导致密钥在分发、传输过程中泄露。如:线下传输密钥或直接将密钥明文以文件形式传递,导致密钥泄露的风险大大增加。

7、多应用间共享加密密钥,导致密钥、敏感数据的使用权限和范围无法收敛,同时应用密钥更新机制难以实施。

8、各业务方各自为政的密码学技术实现,导致难以对密钥使用、敏感数据流转进行统一审计和有效追溯。

9、未限制简单口令、未限制口令最小长度、未限制口令/密钥的尝试次数,导致口令/密钥易于遭受暴力破解。如:对登录页面的口令长度未做限制,同时不限制尝试次数,导致用户口令极易猜测;系统间TOKEN验证过程中,对连续认证失败场景缺少IP+次数+时间锁定机制,导致TOKEN易于泄露。

从以上安全风险来看,密钥在生成、更新、存储、分发、使用过程中,存在着泄露、滥用、权限管控缺失、无法有效审计等风险,进而直接影响整个密码系统和应用方案的安全性。因此在密码技术实践过程中,密钥的安全保存、合理使用、最小授权、有效审计是系统的核心任务,也就是密钥管理系统(KMS)的核心价值。

二、KMS总览

KMS(Key Management System)即密钥管理系统,用于对密钥的生命周期进行管理,提供统一的使用接口,并实现权限管控、审计追溯等能力。其核心功能包括:

1、密钥生成 - 统一管理密钥的生成,一般要求根密钥具备较高的随机性以防止密钥被猜测、应用密钥通过安全的分散算法派生生成。

2、密钥存储 - 安全的存储密钥,如使用专用的安全存储设施或采用高强度加密保护,防止密钥的泄露和窃取。

3、密钥分发 - 确保密钥从生成、存储环境向使用环境传输的过程中不被泄露。

4、密钥注销 - 密钥生命周期完结之后,合理、安全地销毁密钥,并对销毁步骤作进行记录。

5、密钥更新 - 通过合理的密钥更替机制,降低密钥长期使用带来的暴露风险。一般要求:根密钥长期有效,具备更替能力;应用密钥定期更新,防止恶意破解;过程密钥一次一密,并通过引入时间戳、流水号等应用数据防止重放攻击。

6、密钥备份 - 保证重要密钥的备份恢复机制,在密钥丢失、灾难场景下,能够较快恢复密码服务能力,恢复时间目标(RTO)和恢复点目标(RPO)满足业务方需求。

7、密钥应用和密码运算服务 - 在具体的应用场景下,KMS还负责为业务方提供与应用相关的安全接口,如:数据加密封装、隐私数据脱敏、接口签名等。

一般情况下我们将KMS系统划分为三个核心模块:

1、安全区 - 整个系统的安全根,主要负责安全存储系统的根密钥,仅对系统内必要的功能模块开放访问权限。

2、服务层 - 系统主要功能的实现部分,为用户和KMS的应用提供密钥管理、数据加密、数字签名等服务,这也是KMS中与业务逻辑关系最紧密的部分。

3、接入层 - 面向应用系统提供业务接入能力,贝壳KMS通过提供多语言、多框架适配的SDK,来支持无侵入或低侵入的集成。

在此基础上,依赖公司部分已有基础架构(依赖服务)、KMS服务层的数据及基础能力,实现了KMS的平台层(负责系统监控和密钥管理);面向各业务系统在应用界面提供数据安全能力(如接口管控、数据加密、数据脱敏等);同时在用户界面上平台层主要面向不同用户(业务方团队、安全运营团队和系统运维团队)提供业务接入管理、敏感数据地图、应急响应等关键服务。

三、KMS密钥体系

贝壳KMS的密钥体系设计如下:

1、应用密钥(AK) - 对应用系统提供各类密码运算的密钥(按照功能可以划分为数据加密密钥DEK、数据检索密钥DAK、身份认证密钥AK/SK等),应用密钥运行在KMS-Agent中。

2、密钥加密密钥(KEK) - 用于在密钥分发过程中对应用密钥进行加密保护,密钥管理中心服务与每个KMS-Agent之间的每个会话维护一把KEK,在向Agent分发应用密钥时使用KEK对密钥进行加密保护;

3、Agent证书(Cert) - 用于每个Agent节点的身份认证,并确保KEK的安全接收,Agent证书在程序安装时由密钥管理中心服务颁发;

4、根密钥(Root KEY) - 系统中密钥体系的安全根,由多个密钥分量组成、并存储在KMS系统的安全区域。密钥管理中心服务启动时将其加载至服务的运行内存中,用于生成应用密钥、加密备份和归档的应用密钥。

四、应用场景介绍

在贝壳数据安全应用中,密码学技术主要用于接口签名和数据加密两个经典场景,如下图:

4.1、接口签名

数字签名经典算法有两类:

1. 基于PKI体系公私钥对的非对称算法:通常使用私钥进行签名、公钥进行验签。常见的算法有RSA、椭圆曲线ECC、国密算法SM2。

2.基于对称密钥的HMAC算法:使用散列函数H,以消息M、盐值Salt、对称密钥K作为输入,输出定长摘要。常见的算法有:HMAC-MD5、HMAC-SHA256、HMAC-SHA384、HMAC-SHA512等。

由于公钥密码算法性能较低,因此在接口签名时通常采用轻量级的HMAC算法来实现,业界典型应用有AWS Signature、OAuth等。通常由服务端为客户端签发一组AK/SK安全凭证,其中AK用以标识客户端身份,而SK用于签名消息的生成和验证。

该模式下通常面临一个关键的安全挑战:由于应用方普遍缺乏对AK/SK的安全管理能力,凭证存在泄露、使用范围不可控等风险。

针对该问题,贝壳KMS提供了签名托管能力,依托KMS的能力实现业务调用时的接口签名方案,已经帮助近70个业务系统实现了API管控能力:

1. 通过预装在服务器环境中的Agent,识别本地服务的真实身份,防止客户端身份冒用;

2. 凭证管理、签名、验签运算统一打包为API接口,实现统一的签名规范,并提供基于切面(AOP)、代码低侵入的开发框架集成支持。

4.2、数据加密

KMS系统在2020年与各业务线的密切合作中,逐渐确定了覆盖数据传输和存储场景的数据加密方案,并支持了40余个业务系统接入KMS的数据加密能力。

通过如下机制,确保数据安全能力落地:

1. 敏感数据不再以明文形式在系统间流转、不再存在明文形式的静态敏感数据;

2. 对敏感数据的跨系统访问,需经过相关业务的授权,权限控制颗粒度精确到字段级别;

3. 对敏感信息的使用,都可以通过KMS解密功能的调用记录跟踪到具体的系统和时间;

4. 对于敏感数据的批量泄露事件,可以结合KMS相关功能的访问量变化进行分析排查;

5. 通过持续丰富完善的SDK,帮助业务系统快捷的实现数据加密能力集成,支持无侵入、低侵入的集成方式,如:

a) PHP Laravel服务框架下接口敏感字段的自动加、解密能力;

b) Java SpringBoot MVC服务框架中接口敏感字段的自动加、解密能力;

c) OKHttp客户端组件调用敏感数据接口时的自动化加、解密处理能力;

d) Keboot DataSource中数据库敏感字段自动化加、解密处理。

五、结语

数据已愈发成为每个公司的核心竞争力,数据的价值已不言而喻,数据安全的重要性也越来越高。在贝壳,高价值的数据无处不在,同时数据安全又是一项安全与业务紧密结合、长期且艰巨的工作。——“道阻且长,行则将至”,贝壳技术团队将通过持续打造KMS等公共安全能力,把高标准的数据安全赋能到业务流程中,不断提升公司数据安全治理的技术底座。

贝壳安全和风险中心安全产品研发部

点赞(16) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部