速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

当 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:26623

评论

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

理解Python协程的本质

Justfly

Python 协程 异步 Async 异步编程

三分钟看懂快速开发,常用软件快速开发平台速览

Marilyn

敏捷开发 快速开发 企业开发 企业应用

深度学习在物理层信号处理中的应用研究

华为云开发者联盟

学习 模型 物理层

美女面试官问我:说说你对序列化的理解

田维常

序列化

K8s 将弃用 Docker;TypeScript 超越 C++ 成第四大语言

京东科技开发者

程序人生

蕃茄田宋姝梦:科技赋能时代,儿童在线艺术教育的思考

ZEGO即构

一次产品影响地图的探索之旅

Bruce Talk

敏捷 Agile Product Owner 影响地图

架构探索:事务处理一

而立斋

拆解增长黑客之实战(一):获客与激活

懒杨杨

增长 产品运营

WebRTC SDP 详解和剖析

阿里云CloudImagine

阿里云 音视频 WebRTC 视频云 流媒体传输

软件开发中的防呆方法总结

张明云

DevOps 软件开发 技术架构 防呆 模式

《图解数据结构》.pdf

田维常

数据结构

anyRTC 联合 vInClass 打造在线教育上课模式

anyRTC开发者

音视频 WebRTC 在线教育 RTC

InfoQ 内容推荐位资源限时开放

乐白

InfoQ 资源

CloudIDE插件开发实战:教你如何调试代码

华为云开发者联盟

ide 开发 Cloud

福利 | 这些网站有免费代理IP!

前嗅大数据

大数据 代理IP 网站反爬 免费代理ip 封ip

深入灵魂的考验,每行注释都是灵魂的单例模式,源码+实例降临

小Q

Java 学习 架构 面试 设计模式

基于RTMP数据传输协议的实时流媒体技术研究(论文全文)

程序员小灰

音视频 ffmpeg 流媒体 RTMP webrtc、

苦修月余,斩获bigo、腾讯offer,面经奉上!

艾小仙

Java 腾讯 面试 腾讯大厂

干货分享!用心满满:面试前必知必会的二分查找及其变种

比伯

Java 编程 架构 面试 计算机

多活/多机房的几种实现方式与重点

Justfly

高可用 跨机房 数据同步 异地多活容灾

揭秘 VMAF 视频质量评测标准

阿里云CloudImagine

视频 图像处理

话题讨论 | 用好VSCode这13款插件和8个快捷键,工作效率提升10倍

程序员柠檬

话题讨论

鹅厂大佬亲身经历证明,一周上线百万级并发系统

Java架构师迁哥

5G多输入多输出技术,到底是个啥东东?

华为云开发者联盟

5G 输入 输出

为什么阿里人能够快速成长?看完他们Java架构进化笔记,我秒懂!

Java架构追梦

Java 学习 架构 面试 成长笔记

架构师训练营第 1 期 第 11 周作业

李循律

极客大学架构师训练营

全球熵ETV系统APP开发|全球熵ETV软件开发

系统开发

研发管理:敏捷研发下周报的价值

云原生实验室

云原生 敏捷 研发管理 周报

王者级别的Java多线程技术笔记,我愿奉你为地表最强!

Java架构师迁哥

大型团队实践敏捷开发管理的挑战与应对

万事ONES

敏捷开发 研发管理 敏捷开发管理 开发管理

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