写点什么

当 DR 灾备遇到 KMS(二)

  • 2019-12-20
  • 本文字数:1420 字

    阅读完需:约 5 分钟

当 DR 灾备遇到 KMS(二)

3. 场景三,客户端加密场景扩展,需要固定 DEK 支持密文对比

某些场景下,加密数据不会解密使用,而是用密文做对比,比如用户的密码,数据库存放的就是密文。用户在客户端输入的密码,在加密之后传输,通过密文与密文的对比来判断密码是否一致。这样的情况下,都不会涉及解密过程,但是要求不管任何时间对同样的明文,加密的密文保持不变。这样就要求 DEK 必须固定不变。在场景二介绍的 Encryption SDK 中,为了提高安全等级,DEK 是调用的时候临时生成的,每次调用,生成的 DEK 是不一样的。因此场景二的解决方案不能直接用于场景三。调整如下


为了保证 DEK 不变,需要将 DEK 从封装的方法中剥离出来,Client 端自己管理 DEK。具体如下

DEK 的生成和管理

首先,调用 Encryption SDK 中的 generateDataKey 方法,生成一个 DEK ****


Java


// generate data key, with CMK, with AES_128        GenerateDataKeyRequest dataKeyRequest = new GenerateDataKeyRequest();        //dataKeyRequest.setKeyId(KEYID);        dataKeyRequest.setKeyId(this.CMKKeyID);        dataKeyRequest.setKeySpec("AES_128");        GenerateDataKeyResult dataKeyResult = kms.generateDataKey(dataKeyRequest);```    ****
其次,对该DEK进行加密保护,在加密的时候,为了保证该DEK能够在DR场景下使用,也需要使用场景二中介绍的包含多个区域的CMK的Provider,对DEK进行加密保护,这样,我们就可以在不同的区域都可以将加密的DEK进行解密了。 ****
Java

复制代码


// plain text data key


ByteBuffer plainTextKey = dataKeyResult.getPlaintext();


// 使用 multiple provider 加密管理 datakey,以便跨区域使用


CryptoResult<byte[], ?> result = new AwsCrypto().encryptData(this.provider, plainTextKey.array());



经过加密的DEK,就可以保存在数据库中备用了。当然,还可以放一份在S3上作为冷备保存,借助S3高达11个9的持久性,更为放心。因为DEK已经加密了,所以也不担心安全的风险。
#### 数据加解密环节
从数据库中取出加密的DEK,调用场景二中的解密方法**decryptData()**,得到明文的DEK,这时候就可以使用该DEK对数据进行加解密了。由于encryption SDK 中包含的方法都有自己的DEK,因此建议使用成熟的库支持AES加密的SDK,对数据做加密和解密。比如java中的Cipher库 **javax.crypto.Cipher;**
### 4. 总结
无论是使用客户端加密还是服务器端加密的方式,AWS都提供了对应的DR(多区域)的方案。但是从具体的操作方式来看,服务器端的加密,更加简单方便,无需修改代码;而客户端的方式,是需要在代码层面进行调整的。因此我们建议优先使用服务器端加密的方式,在服务器端加密不能满足的场景下,再考虑客户端加密的方式。
**作者介绍:**
<footer> ![](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/Author/shengbo.jpg)
### [](https://amazonaws-china.com/cn/blogs/china/tag/%E9%99%88%E6%98%87%E6%B3%A2/)
亚马逊AWS解决方案架构师,负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内的应用和推广。现致力于网络安全和大数据分析相关领域的研究。在加入AWS之前,在爱立信东北亚区担任产品经理,负责产品规划和方案架构设计和实施,在用户体验管理以及大数据变现等服务方面有丰富经验。</footer>
**本文转载自AWS技术博客。**
**原文链接:https://amazonaws-china.com/cn/blogs/china/when-the-dr-disaster-prepared-encounter-kms/**
复制代码


2019-12-20 15:26749

评论

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

Awesome LLM Apps - 精选大型语言模型应用集合

qife122

语音助手 LLM rag

以图治链:GES在链路治理方面的应用

华为云开发者联盟

Cisdem Duplicate Finder for Mac重复文件查找工具

Geek贝

Mac 软件

如何在YashanDB数据库中进行数据分层管理?

数据库砖家

如何在YashanDB数据库中设计安全策略

数据库砖家

如何在YashanDB数据库中实现复杂事务管理

数据库砖家

如何在YashanDB数据库中使用JSON数据类型?

数据库砖家

如何在YashanDB中管理数据模型变更

数据库砖家

精准·高效·强执行:企业低代码开发的能力跃迁路径

JeeLowCode低代码平台

低代码 低代码, 低代码工具 低代码技术

如何在YashanDB数据库中实现数据查询优化

数据库砖家

如何在YashanDB数据库中实现自动化数据处理

数据库砖家

如何在YashanDB数据库中使用索引优化查询效率

数据库砖家

OpenSearch 视频 RAG 实践

阿里云大数据AI技术

人工智能 数据库 音视频 视频处理 多模态

如何在YashanDB中管理用户权限与角色

数据库砖家

从几个方面深入分析信创堡垒机的作用

行云管家

信创 数据安全 堡垒机 国产化

你的大脑真的在被AI“腐蚀”吗?

脑极体

AI

微服务架构中数据一致性保证机制深度解析

电子尖叫食人鱼

架构 微服务

如何在YashanDB数据库中进行高效的JSON数据存储

数据库砖家

PaddleOCR 3.1发布:文心助力30+语种文字识别精度提升30%+,关键能力支持MCP

百度Geek说

如何在YashanDB数据库中实现数据模型的简化

数据库砖家

数字藏品 NFT 系统的开发

北京木奇移动技术有限公司

NFT开发 软件外包公司 音乐NFT

JixiPix Premium Pack for mac图像处理工具

Geek贝

为什么选择开源能源管理系统?

开源能源管理系统

开源 能源管理系统

第一!中国电信天翼云全面领跑中国政务公有云市场!

天翼云开发者社区

公有云 政务云 天翼云

A Better Finder Attributes 7 for Mac文件批量重命名工具

Geek贝

从核心到边缘,Solidigm SSD助力破解AI存储难题

科技热闻

以标准为舟,驶向能源管理新未来 —— 解读 ISO 50003

开源能源管理系统

开源 能源管理系统

如何在YashanDB中集成数据可视化工具

数据库砖家

前端热更新:静默引擎重构中国互联网敏捷生态与数字化转型范式

xuyinyin

如何在YashanDB中建立业务智能的支持系统

数据库砖家

一文让你深刻理解等保制度的重大意义

行云管家

等保 等保测评 等级测评

当 DR 灾备遇到 KMS(二)_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章