写点什么

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

评论

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

比曲婉婷云尽孝更可怕的是:2020年,低收入家庭仍然在被收割

成周

心理学 教育 培训 维权 曲婉婷

看看别人是怎么面试蚂蚁金服的!社招Java面经分享

Java架构师迁哥

Java 阿里巴巴 面试 蚂蚁金服

奈学:Java 和 JavaScript 是什么关系?

古月木易

Java

浅谈滴滴需求响应式公交背后的技术

滴滴技术

滴滴技术 创新公交 路径优化

10多家公司的Java开发面试常见问题合集

Java架构师迁哥

StreamNative 宣布开源 MoP:Apache Pulsar 支持原生 MQTT 协议

Apache Pulsar

开源 云原生 mqtt Apache Pulsar 消息中间件

奈学:Java 和 JavaScript 是什么关系?

奈学教育

Java

一次注定失败的裸面

escray

ruby 程序员 面试 面经

融云技术分享:基于WebRTC的实时音视频首帧显示时间优化实践

JackJiang

音视频 即时通讯 实时通信

2020年行摄回忆录(上)

穿过生命散发芬芳

生活 摄影

图解 K8S 源码 - Deployment Controller 篇

郭旭东

Kubernetes Kubernetes源码

国庆假期快来了,打开8天长假的正确方式是...

老胡爱分享

读书 书籍推荐 随笔杂谈

DàYé玩转数据战略Step By Step

曲水流觞TechRill

数据中台 数字化

甲方日常 24

句子

工作 随笔杂谈 日常

不一样的面向对象(三)

书旅

php 面向对象 面向对象编程

java安全编码指南之:异常处理

程序那些事

java安全编码 java安全 java安全编码指南

数据挖掘技术在轨迹数据上的应用实践

滴滴技术

人工智能 数据挖掘 滴滴技术 轨道技术 创新公交

初学源码之——Spring IOC 应用

Java架构师迁哥

一篇文章搞定 Nginx 反向代理与负载均衡

哈喽沃德先生

nginx 负载均衡 反向代理 服务器 正向代理与反向代理

2020面试阿里字节跳动90%被问到的JVM面试题附答案

Java架构师迁哥

倒计时!Pulsar Summit Asia 2020 演讲征集

Apache Pulsar

开源 云原生 pulsar Apache Pulsar 消息中间件

linux 文件权限控制

kcnf

linux 文件权限控制 acl

Spring 5 中文解析数据存储篇-JDBC数据存储(下)

青年IT男

Spring5

Go编程(二) 多线程简单斗地主

dongfanger

编程 开发 Go 语言

聊一下《技术力量-一线技术团队成功启示录》

Man

中台 研发管理

信息公交服务在滴滴的应用实践

滴滴技术

滴滴技术 人工只能 信息公交 路径优化

架构1期第三周作业二

道长

极客大学架构师训练营

Go编程(一) 怎么写Go代码

dongfanger

编程 开发 Go 语言

Java源码系列1——ArrayList

超超不会飞

Java

JAVA集合之ConcurrentHashMap

彭阿三

Java JAVA集合

点对点音视频应用场景及优势

anyRTC开发者

音视频 WebRTC 直播 RTC 安卓

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