密钥分级这件小事

1,022 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

如果你要做支付或者做任何安全相关的工作,就都离不开密码密钥。 你知道你是如何获得密钥的吗?

这里就要说一下,密钥分级这件小事:

硬件加密机

对安全需求稍微严格一点公司都会使用到硬件加密(HSM). 有了安全的硬件设备提供的密钥,并不代表我们的安全基础已经稳固。很多时候不安全的管理会带来毁灭性的破坏,例如:谁都可以获取密钥权限。

给密钥分级,并给不同级别的密钥设置不同的访问权限,使用低密级,快速轮换的底层密钥,可以大大提高密钥的安全性!那么,让我们来看看,如果要自建一个KMS,要如何做密钥分级呢?

密钥分级如下:

1. 根密钥(RootKey)

根密钥(RootKey)是初始化硬件加密机时通过密钥卡写入的,正常情况下任何人都无法读取和修改这个密钥。

2. 应用主密钥(AppKey)

应用主密钥(AppKey)是创建安全应用 例如:密钥管理系统KMS(Key Management Service)时,由硬件加密机随机生成并使用根密钥加密的,这个密钥是安全应用服务用于加密或离散,派生工作密钥的。

3. 工作密钥(WorkKey)

工作密钥(WorkKey)是业务系统向密钥管理系统KMS申请创建的密钥,是业务系统真正使用的密钥,使用应用主密钥加密存储,用于应用数据的加密和解密。

 

4. 传输密钥(TransKey)

传输密钥(TransKey)是SDK和应用传递密钥时用于加密工作密钥的随机密钥,这个密钥由应用服务生成并通过非对称加密后传递给SDK使用。

5. 信封密钥(EnvelopeKey)

信封密钥(EnvelopeKey)是SDK加密数据时生成的随机密钥,这个密钥用于加密SDK的待加密数据,信封密钥由工作密钥加密。

 

为什么要做这么多的密钥层级呢?

密钥分级之后,不同的层级的密钥做的是各自的事情,越高级的密钥获取需要更多的授权,对外使用的机会也越少,越低级别的密钥,轮换的频次也越高,被破解后带来的危害也越小。密钥分级后可以系统性的减少底层工作密钥泄漏带来的整体风险。

 

使用腾讯云的密钥服务的话,就会遇到CMK(用户主密钥)和DEK(数据加密密钥),类比到自建的KMS系统的话CMK就是工作密钥而DEK就是信封密钥。

下图1是腾讯的CMK和DEK使用流程,图2是自建KMS的密钥使用流程   aq7.png

(图1)

ap6.jpg

(图2)

信封加密

现在你知道你的密钥是哪个位置的密钥了吧?一般也就是WorkKey,如果你要加密大量数据,我建议你可以试试信封加密。

信封加密是类似数字信封技术的一种加密手段。这种技术将加密数据的数据密钥封入信封中存储、传递和使用,不再使用用户主密钥(CMK)直接加密和解密数据。

其实,信封加密就是密钥分级,又分了一级,不用你自己的主密钥(CMK),这样会更安全

信封加密具有以下特点:

  • 保护数据密钥:加密数据密钥时,数据密钥将受到加密保护,您可以安全地将加密数据与加密数据密钥一起存储。
  • 信任和可信证明:KMS对密钥的所有操作都会进行访问控制及日志跟踪,提供所有密钥的使用记录,满足审计和合规性要求。
  • 性能好、成本低:KMS通过密码运算API在线生成数据密钥,用离线数据密钥在本地加密大量数据。

信封加密流程

p285637.png

信封解密流程

p332672.png


嗯,今天就到这里吧!好好上班 fighting!