写点什么

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

评论

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

低代码开发平台2025年最新排名:从全能平台到垂直专家的全景透视与破局之道

星云低代码中间件

低代码 数字化

MyEMS 开源能源系统:解锁工业、园区、商业的双碳解题思路

开源能源管理系统

开源 能源管理系统

Android渗透测试:Burp证书与Frida环境配置指南

qife122

移动安全 Android逆向

无代码开发实践|基于业务流能力快速开发市场监管系统,实现投诉处理快速响应

数睿数据

Java 后端

无代码开发实践 | 基于权限管理能力快速开发人力资源管理系统

数睿数据

Java 后端

无代码开发实践:基于列表能力快速落地 【项目管理系统】

数睿数据

Java 后端

对比评测Dify vs Coze:谁才是“AI工作流”的终极答案?

测试人

软件测试

2025年11月最新:AI数据分析工具与ai分析软件的数据可视化平台推荐与分析洞察哪家专业

新消费日报

西格电力直供微电网设计①:并网点、隔离点、保护点选址策略

西格电力

微电网 绿电直连 直供微电网 微电网管理系统

快手&南大联合发布自适应推理框架HiPO,突破LLM“过度思考”困局

快手技术

技术 算法 大模型

【FAQ】HarmonyOS SDK 闭源开放能力 — Form Kit

HarmonyOS SDK

HarmonyOS NEXT HarmonyOS SDK应用服务

smardaten AI + 无代码开发实践:基于自然语言交互快速开发【苏超赛事管理系统】

数睿数据

Java 后端

NocoBase 本周更新汇总:优化及缺陷修复

NocoBase

开源 低代码 无代码 版本更新

GPT-6 会带来科学革命?奥特曼最新设想:AI CEO、便宜医疗与全新计算机

掘金安东尼

1688商品列表API技术文档

Datafox(数据狐)

1688商品列表接口 1688API 1688数据采集 关键词搜索1688列表接口

MyEMS:不止是开源 EMS,更是企业降本、减碳、合规的 “全能工具包”

开源能源管理系统

开源 能源管理系统

数字孪生项目技术栈详解

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

数字孪生 软件外包公司 webgl开发

高校迎新管理系统:基于 smardaten AI + 无代码开发实践

数睿数据

Java 后端

Playwright为什么老是跑不稳?12个坑踩完我终于懂了!

测试人

软件测试

股票财务分析系统的主要功能

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

AI技术 软件外包公司 财报分析

1688商品详情API接口技术解析

Datafox(数据狐)

1688API接口 1688API 1688数据采集 1688商品详情API 1688商品详情采集

免费实用!这5个境外舆情网站让你快速查询品牌海外声量

沃观Wovision

境外舆情监测 舆情监测网站 境外舆情

区块链Web3 系统的开发

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

区块链开发 软件外包公司 web3开发

基于 WebGL 的数字孪生项目开发

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

数字孪生 软件外包公司 webgl开发

AI 英语学习 App 的开发

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

AI教育 软件外包公司 AI英语

2026年必备5大境外舆情网站盘点

沃观Wovision

舆情监测 海外舆情监测 舆情监测网站 全球舆情监测

5款能让你快人一步的海外舆情监控平台

沃观Wovision

海外舆情监控 海外舆情 海外舆情监测 海外舆情平台

海外舆情服务流程全解析:从需求对接到报告交付的完整周期

沃观Wovision

海外舆情 海外舆情监测 舆情服务

信息化项目验收材料大全,软件平台验收文档

金陵老街

甩掉 “授权费包袱”!MyEMS:用开源技术让企业能源监控、分析、优化一步到位

开源能源管理系统

开源 能源管理系统

2026年海外舆情监控TOP 5排行榜

沃观Wovision

舆情监测 舆情监测系统 海外舆情监测

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