#阿里云 #飞天发布时刻 正在直播!中企出海的「技术引擎」来了! 了解详情
写点什么

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

评论

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

链上衍生品协议 ProsperEx:探索 RWA 叙事,打造 DeFi 变异黑马

股市老人

通俗易懂数仓建模—Inmon范式建模与Kimball维度建模

五分钟学大数据

大数据 数据仓库 维度建模

IoTOS-v1.2.1接入J-IM(t-io)后台通知App

开源物联卡管理平台-设备管理

物联网平台 IoT 开源物联网 国产开源 开源项目介绍

一文熟知网络 – 文章巨长,但是很详细

邹志全

网络编程 计算机网络 架构设计

暗黑2能用Java开发?还能生成APP?

烧霞

游戏开发 java17

数据交换不失控:华为云EDS,让你的数据你做主

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号 7 月 PK 榜

一文了解潜力黑马Infiblue:借力Web3,释放元宇宙价值

小哈区块

微服务之服务器缓存

Disaster

微服务

从钢铁行业数字化管控平台的智能进化,看超自动化能力边界

王吉伟频道

RPA 数字化转型 超自动化 业务流程自动化 钢铁行业

IoTOS-App(移动端) v0.1.0 免费开源 | 商用

开源物联卡管理平台-设备管理

物联网平台 IoT 开源物联网 国产开源 开源项目介绍

2023-07-09:给定N、M两个参数, 一共有N个格子,每个格子可以涂上一种颜色,颜色在M种里选, 当涂满N个格子,并且M种颜色都使用了,叫一种有效方法。 求一共有多少种有效方法。 1 <= N,

福大大架构师每日一题

福大大架构师每日一题

一文了解潜力黑马Infiblue:借力Web3,释放元宇宙价值

股市老人

深度剖析线上应用节点流量隔离技术

阿里巴巴云原生

阿里云 云原生 流量隔离

克服困难、提升学习效率的关键方法

叶小鍵

基于云原生网关的全链路灰度实践

阿里巴巴云原生

阿里云 微服务 云原生

华为云河图KooMap:夯实数字孪生底座,点燃燎原星火

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 7 月 PK 榜

代码随想录 Day11 - 栈与队列(中)

jjn0703

走向 Native 化:Spring&Dubbo AOT 技术示例与原理讲解

阿里巴巴云原生

spring 阿里云 云原生 dubbo native

一文搞懂常见的加密算法 | 社区征文

闫同学

网络 加密算法 年中技术盘点

一文了解潜力黑马Infiblue:借力Web3,释放元宇宙价值

BlockChain先知

从多元生态、开源到人才培养,让开发者成为决定性力量

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号 7 月 PK 榜

一文了解潜力黑马Infiblue:借力Web3,释放元宇宙价值

西柚子

数据增强之裁剪、翻转与旋转

timerring

人工智能

Docker学习路线1:介绍

小万哥

Docker 程序员 容器 后端 开发

BFF网关模式开发指南

WizInfo

毕马威:中国算力关联产业规模可达24万亿元|报告

B Impact

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