保护密钥的安全,统一安全管控之密钥管理KMS

安全 数据安全
谈到信息安全免不了要解决一个问题就是数据加密。加密就会涉及到密钥相关的问题,比如密钥的生成、传输、保存、泄露等问题。如何保护好密钥的安全就成了信息安全的非常重要的一个部分。

一、为什么要统一管控密钥

谈到信息安全免不了要解决一个问题就是数据加密。加密就会涉及到密钥相关的问题,比如密钥的生成、传输、保存、泄露等问题。如何保护好密钥的安全就成了信息安全的非常重要的一个部分。某司员工将密钥泄漏到开源网站导致重要数据丢失事件,君们还记得否?如果有完善的KMS系统这种情况很大程度上就可以避免了。

对于大部分没有KMS管理系统的公司而言,密钥本地化会导致密钥分散在代码、配置文件中。缺乏统一管理,造成开发、维护成本巨大,而且导致密钥容易泄露。还有一部分公司采用硬件加密机来管理密钥即HSM,全称Hardware Security Module,这种方式管理密钥安全性确实很高,但是因为各级密钥都在HSM中管理所以成本过高。

采用软硬件结合是比较好的方式,通过项目密钥管理服务KMS轻松创建和管理密钥,同时提供对密钥的保护,避免密钥泄漏。使开发者没有必要投入大量时间和精力来保证密钥的保密性、完备性和可用性。通过密钥管理服务,开发者在处理密钥时会更安全、更方便简单,这样可以更集中时间精力去研发如何借助加解密功能来实现业务场景。

二、KMS设计

1. 密钥分级

这里按密钥作用划分为三级:

  • 数据加密密钥(DEK):将用于数据加密的密钥,也称三级密钥(DEK);一般公司里面一个应用对应一个DEK。
  • 密钥加密密钥(KEK):保护三级的密钥,也称二级密钥(KEK 即对DEK进行加密);一般公司里面一个部门对应一个KEK,DEK在KEK管辖之内。
  • 根密钥(RootKey):保护二级密钥的密钥,也称一级密钥(RootKey,即是对KEK进行加密),根密钥构成了整个密钥管理系统的关键。

2. 基本架构

本文中的KMS由三大部分组成SDK、后台服务、HSM。

SDK:主要提供给服务的使用者集成到自己开发的项目中,实现密钥的创建、导入、启用、禁用等相关密钥管理和加密以及解密等常见操作。SDK分为:Client模块、加解密模块,主要负责提供简单接口完成加密解密功能。

KMS服务:主要负责从硬件安全模块获取和保存根密钥,并且安全地保存在后台内存中,然后通过密钥的派生算法生成KEK进而生成DEK。分为,根密钥加载模块、密钥派生模块、Server模块。

HSM:提供根密钥生成和保管服务。

架构图

架构图描述:

根密钥生成,为了生成根密钥的保密性,由三个人分别输入三段约定好算法的随机因子到HSM中去生成根密钥,非法读取HSM中的根密钥会导致HSM被破坏而不可用从而保护了根密钥不被泄露。另外为了保存好根密钥以备及时恢复,要将三段随机因子分别保存到三个保险柜中。

为了防止根密钥被泄露,根密钥RootKey由密钥管理服务KMS从硬件安全模块即HSM中读取,按照一定的分散算法打散存储在内存中。

开发者将SDK集成到自己开发的服务或者系统的代码中,以实现只需要调用较为简单抽象的接口就能够使用密钥管理服务的相关功能。SDK中进行加解密是为了防止业务方私自保存密钥。Client模块主要是负责SDK的Http请求相关的功能,加解密模块则是负责SDK加解密相关的功能。

3. 运行功能

密钥派生:

KMS中最为关键的模块是密钥派生模块。根据用户ID和随机因子通过伪随机函数派生出KEK或者DEK等密钥。KMS杜绝明文持久化保存密钥,派生出来的KEK通过Rootkey加密保存在数据库,派生出来的DEK通过KEK加密保存在数据库。

创建密钥:

  • 用户调用KMS提供的SDK中的创建用户数据密钥接
  • 用户传入用户ID等必要信息(如果要创建KEK则传入部门信息,如果创建DEK则传入应用信息)
  • KMS服务器验证请求
  • 验证通过,KMS服务器在该用户名下创建新的密钥并返回密钥ID

密钥加密(解密同理):

  • 服务调用方调用KMS提供的SDK中直接加密的接
  • 服务调用方传入用户ID、密钥ID、待加密明文
  • KMS服务器验证密钥ID、用户ID以及是否为用户ID名下
  • 验证通过,KMS服务器返回DEK到SDK中
  • SDK加密算法中对明文进行加密,并返回密文

三、推动业务方使用KMS

就算KMS再安全,业务方不愿意使用对于安全来说无疑也是掩耳盗铃。

如何让业务方愿意使用,需要技术和管理相结合去推动。管理上:自上往下推动,通过高管的支持通知业务方使用KMS以及讲述使用KMS带来的收益,并通过KMS管理规范约定不通过KMS来使用密钥所承担的责任。通过定期安全宣传和培训从反面和正面去讲述其中利害。技术上:定期进行专项检查,通过代码扫描查看代码中存在的密钥硬编码,如果存在密钥硬编码则说明很有可能业务方自行创建保管密钥;定期去大数据平台进行扫描将个别字段传入KMS加密接口查看返回密文跟数据库中的密文对比,如果一样说明采用了KMS加密,如果不一样很有可能就是自行保管密钥。

现有一切加密技术都是建立在密钥破解时间很长的情况下,畅想下如果量子计算机出现了,几秒钟就能破解2048位的密钥,那么现有的加密技术都将形同虚设。

 

责任编辑:赵宁宁 来源: FreeBuf
相关推荐

2015-03-24 17:29:40

AWS密钥管理云安全

2014-10-22 10:44:16

2011-11-14 16:07:22

2015-08-10 14:54:57

公有云云安全数据加密

2012-11-27 12:23:28

2015-03-20 17:29:04

密钥管理AWS云安全

2017-02-06 12:16:43

2016-05-18 09:52:20

2020-10-13 06:59:12

CA签名密钥SSH

2016-11-28 19:48:07

2009-12-27 21:29:02

2014-06-13 14:27:46

2015-06-30 11:25:40

2011-11-02 12:12:01

量子安全通信安全

2012-10-23 09:54:17

2011-03-10 15:03:40

SQL Server主密钥

2017-02-20 15:58:07

2019-12-20 07:28:45

Docker容器安全云计算

2019-05-06 10:21:09

加密密钥云安全云计算

2021-05-11 09:00:29

GitHub安全密钥防盗
点赞
收藏

51CTO技术栈公众号