信封加密

最近更新时间: 2024-06-12 15:06:00

简介

信封加密(Envelope Encryption)是一种应对海量数据的高性能加解密方案。对于较大的文件或者对性能敏感的数据加密,使用 GenerateDataKey 接口生成数据加密密钥 DEK,只需要传输数据加密密钥 DEK 到 KMS 服务端(通过CMK 进行加解密),所有的业务数据都是采用高效的本地对称加密处理,对业务的访问体验影响很小。 在实际业务场景中,对数据加密性能要求较高,数据加密量大的场景下,可通过生成 DEK 来对本地数据进行加解密,保证了业务加密性能的要求,同时也由 KMS 确保了数据密钥的随机性和安全性。

示意图

本场景中,KMS 生成的 CMK 作为重要资源,通过 CMK 生成和获取 DEK 的明文和密文。用户根据实际业务场景,首先在内存中通过 DEK 明文来对本地数据进行加密,然后将 DEK 密文和密文数据落盘,其次在业务解密场景中需通过 KMS 来解密 DEK 密文,最后通过解密出来的 DEK 明文在内存中解密。

操作步骤

创建明文 DEK

  1. API 调用 KMS GenerateDataKey 接口生成数据密钥,
  2. 用户通过第三方工具或者开发库创建(比如 OpenSSL)。

创建和保存密文 DEK

  1. 密文 DEK 可以通过 KMS 云 API 对明文加密生成,也可以通过在线工具来处理。
  2. 密文 DEK 由用户自行保存,常见的实现方案中,密文 DEK 会和密文业务数据保存在一起,比如存储场景下保存在一个或类似访问途径的存储容器,通信场景下与密文 DEK 和密文业务数据共同组成一个报文。

优势

高效

所有的业务数据都是采用高效的本地对称加密处理,对业务的访问体验影响很小。而对于 DEK 的创建和加解密开销,除了非常极端的情况下,您需要采用"一次一钥"的方案,大部分场景下可以在一段时间内复用一个 DEK 的明文和密文,所以大多数情况下这部分开销非常小。

安全易用

信封加密的安全性类似于常见公钥体系,DEK 保护业务数据,而KMS 则保护 DEK 并提供更好的可用性,您的主密钥无论如何都不会被泄露,只有有用密钥访问权限的对象才有能力操作 CMK。

何时在云上使用信封加密?

  1. 较大体积:目前 KMS API 支持4KB以下数据加解密。
  2. 海量数据,低延迟:想对业务数据加解密,但是又比较在乎访问延迟。KMS 后台虽然拥有非常高的性能,但是是远程调用且采用非对称加密,而信封加密方案大多数操作使用高性能的本地对称加密。

常见方案对比

敏感信息加密 信封加密
相关密钥 CMK CMK、DEK
性能 非对称加密,远程调用 少量远程非对称加密,海量本地对称加密
主要场景 密钥、证书、小型数据 海量大型数据