【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

  • 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:05556
用户头像

发布了 1829 篇内容, 共 90.0 次阅读, 收获喜欢 73 次。

关注

评论

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

和鲸科技入选2022中国企业数智化创新TOP50

ModelWhale

数字化转型 数智化 榜单

泰山众筹4.0合约系统开发技术

薇電13242772558

智能合约

复杂并发场景下的并发调度模型在转转的演进之路

转转技术团队

Java 性能 后端 高并发

OneAccess | 面对庞大复杂的身份和权限管理,企业该怎么办?

爱尚科技

华为云CDN加速,为企业开启高效且安全的加速环境

科技说

企业数据如何存?华为云对象存储服务OBS帮您忙

IT科技苏辞

2022年11月视频行业用户洞察:世界杯效应显著,咪咕视频凭借大屏、小屏同时触达球迷群体,未来体育营销将更加激烈

易观分析

视频 世界杯

部门来了个JAVA开发,听说是00后,上来一顿操作给我看呆了...

程序知音

Java JAVA开发 java面试 java架构 后端技术

动态配置开发模式在转转的落地实践

转转技术团队

Java 后端 可视化 动态配置

正式毕业!Apache Kyuubi 成为 Apache 基金会顶级项目!

网易数帆

大数据 spark 开源 Apache Kyuubi

华为云CSE 关键特性,支持托管Nacos注册配置中心

与时俱进的时代

数据存储安全责任重于泰山,看华为云对象存储服务OBS如何大展身手

IT科技苏辞

数据存储难?华为云对象存储OBS轻松解决

IT科技苏辞

极狐GitLab include 语法减少 CI/CD Pipeline 代码冗余,提升构建效率

极狐GitLab

DevOps CI/CD pipeline 极狐GitLab include

探讨丨SaaS软件是否正在“毁掉”数字化转型企业?

优秀

数字化转型

Vertically Federated Graph Neural Network for Privacy-Preserving Node Classification

1+1=王

联邦学习 Fl 图神经网络 GNN 节点分类

数据存储服务的百宝箱——华为云对象存储服务OBS

IT科技苏辞

不止于快,华为云CDN加速服务为企业提供安全加速环境

科技说

华为云CDN:海量存储+过硬本领为用户带来更优体验

科技说

开个脑洞,带你写一个自己的极狐GitLab CI Runner

极狐GitLab

DevOps 持续集成 CI/CD runner 极狐GitLab

ModStart交给您的开源年终总结

ModStart

一文读懂 | Getaverse 节点部署

Geek_Web3

Oracle数据库安装配置详细教程汇总(含11g、12c、18c、19c、21c)

墨天轮

数据库 oracle 升级 安装 & 部署

软件测试 / 测试开发 / BAT大厂都在用的Docker。学会这三招,面试、工作轻松hold住

测试人

Docker 容器 软件测试 测试开发 环境搭建

如何用Alluxio加速云上深度学习训练?

Alluxio

机器学习 分布式, Alluxio 大数据 开源 数据编排

软件测试 | 掌握高频 Docker 命令,夯实内功基础

测试人

Docker 软件测试 自动化测试 测试开发 环境搭建

数据存储的全能侠——华为云对象存储服务OBS

IT科技苏辞

为什么说DeFi隐私协议Unijoin.io具备趋势性

股市老人

“数字·进化”——2022数字化发展峰会圆满落幕

创业邦

华为云CDN,如何助力智能新媒体转型

科技说

不止稳定快速,看华为云CDN如何在国际云服务市场中“分蛋糕”

爱科技的水月

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