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/**
更多内容推荐
如何通过 Java 程序加密或者解密 PDF 文档
PDF文档加密是一种用于保护文件内容的功能。加密后的文档需要提供密码才能打开和查看。这一功能有效防止未经授权的访问、复制和修改 PDF 文件。Free Spire.PDF for Java支持以编程的方式加密和解密PDF文档,且过程中不需要安装第三方软件。详细操作步骤和相关
2023-03-10
03|Token:如何降低用户身份鉴权的流量压力?
这节课我们来看看如何用token算法降低用户中心的身份鉴权流量压力。
2022-10-28
SDK 设计(下):IAM 项目 Go SDK 设计和实现
今天,我会介绍Kubernetes client-go风格的SDK实现方式。和公有云厂商的SDK设计相比,client-go风格的SDK设计有很多优点。
2021-08-12
WhatsApp 是如何实现端到端加密备份的?
有了加密备份,数据访问就只需要一把密钥。
一文读懂加密资产板块的盈利潜力与投资机会
加密市场进入4月以来,一系列黑天鹅事件频发(尤其是Terra/UST 的崩盘拖垮了整个 Crypto 市场),引发加密市场的恐慌,市场信心愈发不足,同时市场也迎来了新一轮的洗牌。比如在本轮熊市中,以三箭资本为代表的新兴Web3知名投资机构,就成为“陪葬者”。
2022-11-02
SDK 设计(上):如何设计出一个优秀的 Go SDK?
通过提供SDK,可以提高API调用效率,减少API调用难度,所以大型应用通常都会提供SDK。今天,我主要介绍如何设计一个优秀的Go SDK。
2021-08-10
一文读懂加密资产板块的盈利潜力与投资机会
加密市场进入4月以来,一系列黑天鹅事件频发(尤其是Terra/UST 的崩盘拖垮了整个 Crypto 市场),引发加密市场的恐慌,市场信心愈发不足,同时市场也迎来了新一轮的洗牌。比如在本轮熊市中,以三箭资本为代表的新兴Web3知名投资机构,就成为“陪葬者”。
2022-11-02
壁纸欣赏
今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周末休息,今天周
2021-01-31
Postman 如何调试加密接口?
众所周知,Postman 是一款非常流行且易用的 API 调试工具,在接口调试或测试时经常被使用针对普通 API 接口,我们可以直接在 Postman 中输入 URL、Query String、Header、Data 来模拟发送一个 HTTP 请求 针对「 加密接口 」的调试及测试,我们怎么来做呢?
2021-09-25
KonaJDK 8 新版本更新,国密算法轻松用
TencentKona 是腾讯开源的可立即投入生产的 OpenJDK 发行版,在主流 OpenJDK8 的基础上进行了针对性的开发和优化。
05|风轻云淡——如何用好对象存储(下)?
2022-09-21
安卓指纹对称加密及登录功能的实现 (1),技术实现
cipher.init(Cipher.ENCRYPT_MODE | Cipher.DECRYPT_MODE, key);} catch (KeyPermanentlyInvalidatedException e) {_keystore.deleteEntry(KEY_NAME);//删除获取的码,保留生成的密码if (retry) {createCipher(false);} else {throw new Exception("Could no
2021-11-03
加密数字货币钱包软件系统开发详情(案例)
加密数字货币钱包软件系统开发详情,张森:I85薇2946电OIIO,加密数字货币钱包系统软件开发搭建,加密数字货币钱包软件系统开发搭建,加密数字货币钱包软件系统开发,加密数字货币钱包软件系统开发价格,加密数字货币钱包软件系统开发介绍,加密数字货币钱包
2021-10-18
密码学系列之:PEM 和 PKCS7,PKCS8,PKCS12
PEM是一种常见的保存key或者证书的格式,PEM格式的文件一般来说后缀是以.pem结尾的。那么PEM到底是什么呢?它和常用的证书格式PKCS7和PKCS12有什么关系呢?一起来看看吧。
2022-05-29
2023 年,你需要了解 Zebec 生态的几个开年利好
在2023年开年以来,加密市场开始迎来复苏,以BTC、ETH等为代表的主流加密资产迎来普涨,虽然相较于2021年顶峰时期相比仍存在一定的差距,但市场的回暖正在带动加密行业在2023年的复苏。
2023-02-06
24|拦截扩展:如何利用 Filter 进行扩展?
我们从已经学过的过滤器知识点,抛出了一个在面对需求如何适当利用过滤器进行扩展的问题,通过四个拦截场景,分析了常见的**分离、相交、相切、包含**四种关系。
2023-02-10
APISIX Ingress 如何使用 Cert Manager 管理证书
Apache APISIX Ingress Controller 是一款以 Apache APISIX 作为数据面的 Kubernetes Ingress Controller 开源工具,目前已经更新到 v1.3 版本,实现了如证书管理、负载均衡、金丝雀发布等功能。
2023-02-07
keytool 生成 keystore、truststore、证书
打开cmd命令行,进入文件夹(如:D:\test_icessl_key)。keytool会把接下来生成的所有文件都保存到此处。
2021-10-13
10|服务认证:被异构系统侵入调用了,怎么办?
从一个异构系统调用支付系统引发了QPS暴增的问题开始,我们意识到内部系统与异构系统之间缺乏一种安全的认证机制,分析了服务如何进行认证。
2023-01-09
JAVA 微信小程序 解密 用户信息 encryptedData
byte[] ivByte = Base64.decodeBase64(iv);
2021-11-11
推荐阅读
33|Schema:如何设计实现 Schema 模块?
2023-09-04
HTX 与 Zebec Protocol 展开深度合作,并将以质押者的身份参与 ZBC Staking
2023-10-17
28|认证机制:Flask 认证机制设计与实现
2023-06-26
Spring Security 中的基本认证过滤器链
2023-05-04
4、利用 ShardingSphere 实现敏感数据的加解密
2023-09-26
如何选择适合企业的移动应用管理平台?
2023-09-27
ARTS 打卡第 6 周
2023-10-15
电子书
大厂实战PPT下载
换一换 李鹤 | Shopee 云原生技术专家
何蔚然 | 月之暗面 推理系统负责人
李旭东 | 蚂蚁集团 技术专家
评论