随着我们越来越多地转向公共云,加密密钥的使用也变得越来越重要。这包括加密数据和数字签名。它的优势包括:

云中加密。这允许我们在云中加密数据,而不是在客户端机器上处理数据。

访问策略。使用基于云的系统,可以针对加密密钥的使用定义严格的访问策略。

审计。通过AWS CloudTrail,可以记录对加密密钥的访问,这可以支持监管和对合规性的需求。

BYOK。这允许用户创建自己的密钥,然后将它们上传到云端。

在AWS中,我们有KMS(密钥管理服务),它生成并存储加密密钥。这些密钥永远不会离开 Amazon 的 HSM(硬件安全模块),并且已根据 FIPS 140–2 进行了验证。导出时,它们仅以加密形式被提供。总的来说,存储一个密钥的费用是每月1美元(但为AWS服务生成的密钥是免费存储的)。密钥的使用不受访问阈值的限制。此外,密钥只能在设置它们的地理区域中使用。

对称或非对称密钥

加密密钥保留在AWS内的一个受信任的硬件环境中,锁定到了特定区域,并应用与AWS IAM(身份和访问管理)标识符相关的严格访问策略。这些与最小特权权限相关——除非在访问策略中定义了权限,否则不会授予权限。

最初,我们可以创建对称密钥(用于加密/解密或生成HMAC)或非对称密钥(用于加密或数字签名)。使用HMAC,我们创建一个对称密钥,该密钥可以用于对消息进行签名,然后使用相同的密钥验证签名。数字签名的话,我们使用一个私人(秘密)密钥对消息进行签名,然后由一个公共密钥进行验证。

在AWS控件中,我们可以使用以下命令创建对称密钥:

生成的密钥有一个key ID,我们定义了它的用途(比如加密和解密):

然后,用户定义密钥别名和ARN (Amazon Resource Names)。接下来,我们可以为密钥的使用定义一个策略:

在本例中,我们会看到只允许用户加密和解密,但不允许其他用户执行这些操作。然后由 Key ID 和 ARN 描述创建的密钥:

现在我们可以编写一个Golang程序,使用这个密钥对明文进行加密,然后进行解密。我们首先需要定义AWS区域和ARN。与此同时,我们还为 AWS_Access_Key_ID 和 AWS_Secret_Access_Key 定义了 AWS 凭证。它们可以在程序中定义,也可以在 ~/.aws/credentials 文件夹 中定义:

一个运行示例:

AWS CLI加密和解密

除了使用编程语言外,我们还可以使用CLI执行操作。创建密钥:

我们可以从别名中列出我们的密钥:

然后,我们可以通过以下方式加密明文消息“Hello 123”:

现在可以看到我们有“AQICAH…m4sE=”的密文。接下来,可以进行解密:

非对称密钥和HMAC

使用非对称密钥,我们可以选择RSA 2K、3K或4K:

对于数字签名,我们可以添加P256、P521、sepc256k1的椭圆曲线方法:

结论

网络安全中代价最高的事件之一是信任基础设施遭到破坏。因此,密钥的管理和控制非常重要,将它们存储在云中会带来很多好处。与此同时,我们看到了太多的数据泄露,而加密的使用使得数据泄露的范围可以减少到几乎为零——但我们必须确保我们的密钥得到了安全保存,至少以一种秘密的方式进行了备份。

这些密钥是我们最重要的秘密,所以不要被锁定在一个云提供商上,而且仍然存在有人进入我们的AWS环境并发现我们的密钥的风险。

我在这里创建了一个演示:

https://asecuritysite.com/golang/go_aws

Source:https://medium.com/asecuritysite-when-bob-met-alice/encryption-keys-in-the-cloud-366f091fe90e

关于

ChinaDeFi- ChinaDeFi.com 是一个研究驱动的DeFi创新组织,同时我们也是区块链开发团队。每天从全球超过500个优质信息源的近900篇内容中,寻找思考更具深度、梳理更为系统的内容,以最快的速度同步到中国市场提供决策辅助材料。

Layer 2道友- 欢迎对Layer 2感兴趣的区块链技术爱好者、研究分析人与Gavin(微信: chinadefi)联系,共同探讨Layer 2带来的落地机遇。敬请关注我们的微信公众号“去中心化金融社区”