写点什么

如何确定数据密钥缓冲是否适合您的应用程序

  • 2019-09-25
  • 本文字数:3356 字

    阅读完需:约 11 分钟

如何确定数据密钥缓冲是否适合您的应用程序


今天,AWS 加密工具团队宣布在 AWS 加密工具包中推出一项新功能:数据密钥缓存。借助数据密钥缓存功能,您可以重复使用保护数据所用的数据密钥,不再需要为每个加密操作生成一个新的密钥。


数据密钥缓存可以减少延迟,提高吞吐量,降低成本,帮助您在应用程序扩展的同时不超过服务限制。当您的应用程序触及 AWS Key Management Service (KMS) 的每秒请求数限制,并且执行放宽限制也无法解决问题时,缓存功能可能尤其有用。


当然,这些便利也涉及一些安全性方面的权衡。加密最佳实践一般不鼓励广泛重复利用数据密钥。


在本博文中,我将探索这些权衡,并且将提供相关的信息,以帮助您确定数据密钥缓存是否是适合您的应用程序的好策略。此外,我还将解释如何在 AWS 加密开发工具包中实施数据密钥缓存,并介绍您可以设置的安全阈值,以限制数据密钥的重复使用。最后,我将提供一些有关使用安全阈值来满足成本、性能和安全性目标的实践案例。

数据密钥缓存简介

AWS 加密工具包是一种客户端侧加密库,它可方便您在应用程序中实施加密最佳实践。它包含了多项面向不属于加密专家的开发人员的安全默认行为,同时又保持足够灵活,以便满足经验丰富用户的需要。


在 AWS 加密开发工具包中,按照默认设置,您将为每个加密操作生成一个新的数据密钥。这是最安全的实践。但在一些应用程序中,为每个操作生成一个新数据密钥的开销令人不可接受。


数据密钥缓存将会在一个可配置的缓存中,存储您使用的数据密钥的明文和密文。当您需要使用密钥来加密或解密数据时,您可以重复使用缓存中的数据密钥,而无需创建新的数据密钥。您可以创建多个数据密钥缓存并分别独立配置。最重要的是,AWS 加密工具包提供了安全阈值功能,您可以通过设置安全阈值来确定您将允许重复使用多少个数据密钥。


为方便数据密钥缓存的实施,AWS 加密开发工具包提供了一种称为 LocalCryptoMaterialsCache 的内存中缓存,它是一种最近最少使用型缓存,大小可以配置。这种软件开发工具包负责为您管理缓存,包括为所有加密和解密操作添加存储、搜索和匹配逻辑。


我们建议您按原样使用 LocalCryptoMaterialsCache 缓存,当然您也可以对它进行自定义或者使用兼容的缓存替换。但您绝对不要将明文数据密钥存储在磁盘上。


AWS 加密开发工具包文档包含了 Java 和 Python 格式的示例代码,该示例代码针对使用数据密钥缓存来加密 Amazon Kinesis Streams 收发的数据的应用程序。

成本与安全性的权衡

是否使用数据密钥缓存的决定,应当基于对成本(时间、资金和资源)和安全性的权衡。但在任何情况下,这种权衡应当以安全性要求优先。原则上,应使用实现成本和性能目标所需的最少缓存。


在实施数据密钥缓存前,请考虑您的应用程序的详细情况、您的安全性要求以及加密操作的成本和频率。一般而言,如果每项操作都非常缓慢或昂贵,或者您会频发进行数据加密和解密操作,则您的应用程序可通过数据密钥缓存受益。如果加密操作的成本和速度已经可接受,或者可以通过其他方式改进,则不要使用数据密钥缓存。


如果您的加密和解密流量非常高,则数据密钥缓存可能会适合您的应用程序。例如,如果您已经触及 KMS 每秒请求数限制,那么缓存将会非常有用,因为您将会从缓存中获取一些数据密钥,无需为每个请求调用 KMS。


当然,您也可以在 AWS 支持中心创建案例,申请增加账户的 KMS 限制。 如果放宽限制可以解决问题,则无需使用数据密钥缓存。

配置缓存阈值以优化成本和安全性

在 AWS 加密工具包中,您可以对数据密钥缓存进行配置,从而仅允许在满足成本和性能目标的范围内重复使用数据密钥,同时确保满足应用程序的安全性要求。此软件开发工具包会执行这些阈值,从而让您可以使用任何兼容的缓存。


数据密钥缓存的安全阈值适用于每个缓存条目。如果任何缓存条目超过您设置的任何阈值,则 AWS 加密开发工具包不会使用来自该缓存条目的数据密钥。


  • 最长寿命(必填项):每个缓存密钥的寿命,该参数的设置必须足够长以确保能获得缓存点击,同时又要足够短,以确保仅在特定的时间期限内在内存中暴露明文数据密钥。

  • 您可以将最长寿命阈值作为密钥轮换策略来使用。使用它可以限制数据密钥的重复使用,减少加密材料的暴露。您还可以借助此功能,在应用程序处理的数据类型或来源发生变化时收回数据密钥。

  • 最大加密消息数(可选;默认值为 232 条消息):这是每个缓存密钥可以保护的消息数,它的设置必须足够大以确保重复利用的价值,同时要足够小以限制可能潜在暴露的消息数量。

  • AWS 加密开发工具包仅缓存使用算法套件和密钥导出函数的数据密钥。这种方法避免了有关使用单个密钥加密的字节数的加密限制。但一个密钥加密的数据越多,该数据密钥泄露时暴露的数据也将越多。


限制消息的数量而不是字节数,在您的应用程序加密具有类似大小的许多消息时,或者潜在的暴露风险必须限制在极少数消息时尤其有用。当您希望将某个数据密钥重复用于特定类型的消息,并且事先知道您拥有多少条该类型的消息时,此阈值也将非常有用。您还可以使用加密上下文来为您的加密请求选择特定的缓存数据密钥。


  • 最大加密字节数(可选;默认值为 263 – 1):这是每个缓存数据密钥可以保护的字节数,它的设置应足够大以确保满足您的重复利用需求,同时要足够小以限制同一密钥加密的数据量。

  • 限制字节数而不是消息数量,适合应用程序加密的消息大小差异较大,或者对可能会暴露大量数据的担忧远远高于暴露较小数量的数据等情形。


除这些安全阈值外,AWS 加密开发工具包中的 LocalCryptoMaterialsCache 还可让您设置容量,这是缓存中可以容纳的最大条目数量。


使用容量值来调整 LocalCryptoMaterialsCache 缓存的性能。一般而言,应使用能够实现应用程序需要的性能改进的最小值。建议您对仅包含 5-10 个条目的极小缓存进行测试,然后在必要时进行扩展。如果将缓存同时用于加密和解密请求,或者您使用加密上下文来选择特定的缓存条目,则您将需要稍大一些的缓存。

考虑下面的缓存配置示例

在您确定了应用程序的安全性和性能要求后,请谨慎考虑缓存的安全阈值并根据您的需求进行调整。这些阈值不存在万用值:理想的设置取决于具体的应用程序、它的安全性和性能要求以及预算等。应使用获得可接受性能和成本所需的最低缓存量。


下面的示例演示了您可以如何借助 LocalCryptoMaterialsCache 的容量设置和安全阈值来满足您的安全性要求:


  • 主密钥操作缓慢:如果您的主密钥处理速度仅为 100 条事务每秒 (TPS),但您的应用程序需要达到 1000 TPS,则您可以允许每个数据密钥最大加密 10 条消息,从而满足应用程序的要求。

  • 高频和大规模场景:如果您的主密钥的成本为每次操作 0.01 USD,并且您需要稳定保持 1000 TPS 的处理速度,同时不能超过每月 100000 USD 的预算,则您可以允许每个缓存条目最大加密 275 条消息。

  • 突增流量:如果您的应用程序的处理量,在一分钟内会有五秒时间突增到 100 TPS,而剩下的时间为零,并且您的主密钥成本为每次操作 0.01 USD,则可将最大消息数设置为 3,从而实现的可观的节约。为防止在突增间歇期(55 秒)内重复使用数据密钥,则可将每个缓存数据密钥的最大寿命设置为 20 秒。

  • 主密钥操作成本高:如果您的应用程序使用某种低吞吐量的加密服务,成本高达每个操作 1.00 USD,则您可能需要减少操作次数。为此,您可以创建一个足够大的缓存,以容纳您需要的数据密约。然后将字节数和消息数限制设置为一个足够高的值,以在满足安全性要求的前提下确保重复利用。例如,如果您的安全性要求不允许一个数据密约加密超过 10GB 的数据,则将处理的字节数设置为 10GB 仍可显著减少操作数,并同时满足您的安全性要求。

了解更多有关数据密钥缓存的信息

如需了解更多有关数据密钥缓存的信息,包括如何实施此方法,如何设置安全阈值,以及有关缓存组件的详细信息,请参阅 AWS 加密开发工具包中的数据密钥缓存。另请参阅适用于 Java 和 Python 的 AWS 加密开发工具包以及 Javadoc 和 Python 文档。


如果您对本博文有意见和建议,请在下面的“评论”部分提交评论。如果您有任何问题,请在 Java 或 Python 版本的加密开发工具包 GitHub 存储库中提出问题,也可加入 AWS 加密工具论坛浏览和发帖。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/aws-encryption-sdk-how-to-decide-if-data-key-caching-is-right-for-your-application/


2019-09-25 15:05653
用户头像

发布了 1845 篇内容, 共 110.5 次阅读, 收获喜欢 77 次。

关注

评论

发布
暂无评论
发现更多内容

如何在 TiDB Cloud 上使用 Databricks 进行数据分析 | TiDB Cloud 使用指南

TiDB 社区干货传送门

PingCAP Clinic 服务:贯穿云上云下的 TiDB 集群诊断服务

TiDB 社区干货传送门

TiFlash Proxy 模块介绍

TiDB 社区干货传送门

Go-Excelize API源码阅读(十四)——GetSheetFormatPr

Regan Yue

开源 源码刨析 Go 语言 8月日更 8月月更

20万字的《Kafka运维实战宝典》PDF现在免费下载了

石臻臻的杂货铺

大数据 kafka

希捷亮相OCP China Day 2022,与生态伙伴共话绿色存储之道

Geek_2d6073

基础到高级涵盖11个技术,Alibaba最新出品711页Java面试神册真香

收到请回复

Java 大数据 架构 编程语言 语言 & 开发

利用现有数据库管理系统创建一个安全的分布式数据库集群

亚马逊云科技 (Amazon Web Services)

大数据 分布式 Tech 专栏

膜拜阿里!首次发布「10亿级并发系统设计文档」(内部绝密)

退休的汤姆

阿里 面经 Java工程师 秋招 并发系统设计

TiDB 和 Java 的简单 CRUD 应用程序

TiDB 社区干货传送门

离谱!这份笔记及实战手册帮助你四天快速上手SpringSecurity

了不起的程序猿

Java springsecurity java程序员 框架

云堡垒机主要针对运维过程中的什么进行管理和审计?

行云管家

运维 堡垒机 IT运维 云堡垒机

五天玩转EMAS Serverless

云端explorer

云计算 Serverless emas

离线部署系列文章之一:TiDBv5.3.0集群部署&源码部署 Haproxy v2.5.0

TiDB 社区干货传送门

实践案例 版本升级 管理与运维 安装 & 部署 扩/缩容

TiDB 和 Golang 的简单 CRUD 应用程序

TiDB 社区干货传送门

大数据训练营毕业总结

Geek_Q

手把手教你实现 TiFlash 向量化函数丨十分钟成为 TiFlash Contributor

TiDB 社区干货传送门

多并发下线程创建、释放的阻塞问题

TiDB 社区干货传送门

采访22年第一批秋招上岸的同学后,我整理了这份Java面试手册

Java面试那些事儿

Java 编程 程序员 架构 面试

当内卷风波及代码领域,看Alluxio将会采取怎样的块分配策略

Alluxio

腾讯 存储 Alluxio block 8月月更

故障处理 | DM 搭建 MySQL 8.0 同步链路报错:code=26005

TiDB 社区干货传送门

安装 & 部署 TiDB 源码解读

离线部署系列文章之二:TiDB集群升级(5.3.0->5.4.2)&缩扩容 TiDB Server、PD、TiKV、TiFlash

TiDB 社区干货传送门

版本升级 集群管理 管理与运维 安装 & 部署

魅族高校新生充电计划进行中,直播课让科目一新生直呼厚道

Geek_2d6073

传统堡垒机数据可以迁移到云堡垒机上吗?方式有哪些?

行云管家

云计算 网络安全 堡垒机

某站下载量过W的近4000页“Java面试合集”号称大厂面试零门槛

收到请回复

Java 程序员 面试 金九银十

如何在企业数字化团队内部实现数据分析建模成果的结构化整合沉淀

ModelWhale

工作流 数字化转型 数字化 案例分享 提高效率

如何让 TiDB 集群管理“更省心”?TiUniManager(原 TiEM)使用教程来了

TiDB 社区干货传送门

HarmonyOS Connect FAQ第四期

HarmonyOS开发者

HarmonyOS

一对一直播软件——如何实现音视频传播?

开源直播系统源码

软件开发 直播系统源码 一对一语音聊天软件 语音直播系统

什么!阿里最新版Spring Cloud Alibaba项目文档,竟将重要组件弃用

收到请回复

Java spring 阿里巴巴 面试 spring-cloud

对话ACE第五期:到底什么才是真正的HTAP?

OceanBase 数据库

如何确定数据密钥缓冲是否适合您的应用程序_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章