AI实践哪家强?来 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:26710

评论

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

其实你的下班时间,被 Excel 预定了

叶小鍵

toB应用私有化交付发展历程、技术对比和选型

北京好雨科技有限公司

再见 Fred Brooks

Journeyman

IT 新闻

一年前端面试打怪升级之路

loveX001

JavaScript

100万行Spring源代码,鬼知道面试都会问啥

博文视点Broadview

云图说|移动应用安全服务—App的体检中心,全面检测,安全上路!

华为云开发者联盟

华为云 移动应用安全 VSS

本地开发完成的 Fiori Elements 应用,部署到远端 ABAP 服务器上的详细步骤

汪子熙

web开发 abap Fiori SAP UI5 11月月更

Serverless Devs 重大更新,基于 Serverless 架构的 CI/CD 框架:Serverless-cd

Serverless Devs

云计算 Serverless Serverless Devs

主成分分析PCA与奇异值分解SVD-PCA对手写数据集的降维 & 用PCA做噪音过滤

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

支持向量机-支持向量机分类器原理

烧灯续昼2002

Python 机器学习 算法 sklearn 11月月更

从URL输入到页面展现到底发生什么?

loveX001

JavaScript

6个tips缓解第三方访问风险

SEAL安全

安全 访问权限 第三方访问

2022我的前端面试总结

loveX001

JavaScript

Java程序员在写 SQL 时常犯的错误

@下一站

学习 程序媛 Java core 11月月更

云原生安全系列2:提升镜像安全的10条建议

HummerCloud

云原生 镜像安全 云原生安全

Spring Boot 分离配置文件的 N 种方式

江南一点雨

Java spring springboot

即时通讯技术文集(第6期):移动端弱网优化文章汇总 [共13篇]

JackJiang

网络编程 即时通讯IM

NFTScan 正式推出「NFTScan as a Service」NaaS 服务

NFT Research

NFT 数据基础设施

100+款AI产品薅羊毛攻略(中)——1年节省大几百万

夏夜许游

AI 视觉智能 阿里云视觉智能开放平台 薅羊毛

火山引擎DataTester背后,抖音的名字原来是AB测试来的

字节跳动数据平台

大数据 AB testing实战

极客时间运维进阶训练营第四周作业

chenmin

聊聊Go里面的闭包

秦怀杂货店

Go 函数式编程 闭包

计算机网络:PPP协议与HDLC协议

timerring

计算机网络 11月月更

一键开启云原生网络安全新视界

京东科技开发者

云原生 网络安全 软件架构 应用结构

vivo霍金实验平台设计与实践-平台产品系列02

vivo互联网技术

A/B 测试 平台化 AB实验

阿里云无影研发负责人任晋奎:端云技术创新,打造全新用户体验

云布道师

云栖大会 无影云电脑

想搞懂持续交付理论和实践,你只差这三个问题

华为云开发者联盟

云计算 云原生 华为云 代码托管

云时代下,医药行业管理居然这么简单

华为云开发者联盟

数据库 华为云 SaaS医药管理系统

Docker部署flink备忘

程序员欣宸

Docker flink 11月月更

三次握手与四次挥的问题,怎么回答?

loveX001

JavaScript

智慧屏也常用常新,华为智慧屏V98等6款设备可升级HarmonyOS 3正式版

极客天地

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