# 交易签名

**场景 1 描述：**

用户可以在亚马逊云上安全的使用私钥，例如进行交易签名，同时避免在代码或者配置文件中暴露私钥，私钥通过亚马逊云加密服务进行加密，密文可以安全的保存在 Amazon RDS 或 Secrets Manager 等存储中，使用时通过 IAM 权限控制谁可以解密密文。

**实现方案：**

使用 Amazon KMS 创建一个对称加密算法的 KEY，使用这个 KEY 对私钥进行加密，得到密文，可以选择将密文保存在 Amazon RDS 或 Secrets Manager ，应用希望使用私钥进行交易时，从存储中查到密文，调用 KMS 对密文解密得到私钥明文，进行交易签名。其中 KMS 的加密和解密需要设置密钥策略，允许哪些 IAM User 或 IAM Role 使用这个 KEY。

<figure><img src="https://3752289132-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LTfg4e0NhLEbwi6WFJp%2Fuploads%2FDzLvpZGyKtF9JmyfIVp8%2Fimage.png?alt=media&#x26;token=9d5319cc-a02d-4e40-832c-2d1c5f61b8da" alt=""><figcaption></figcaption></figure>

**场景 2 描述：**

用户可以在隔离的 CPU 和内存安全环境中使用和处理私钥，例如进行交易签名，同时阻止父 EC2 实例上的用户和应用程序获取私钥，免受来自本地操作系统潜在漏洞的攻击，比如黑客通过代码漏洞攻击内存，拿到私钥滥用发起交易。

**实现方案：**

基于 EC2 Enclave 构建一个隔离的零信任私钥使用环境，参考[博客](https://aws.amazon.com/cn/blogs/china/build-a-secure-and-trusted-execution-environment-based-on-nitro-enclave/) ，使用流程如下所示：

[<br>](https://s3.cn-north-1.amazonaws.com.cn/awschinablog/aws-security-key-management-services-support-innovative-growing-enterprises6.jpg)另外如果希望在容器应用中使用 Enclave，目前支持在 Amazon EKS 中使用，参考 [文档](https://docs.aws.amazon.com/zh_cn/enclaves/latest/user/kubernetes.html)。

<figure><img src="https://3752289132-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LTfg4e0NhLEbwi6WFJp%2Fuploads%2FoWBh2b5LGJ83ynee5LT6%2Fimage.png?alt=media&#x26;token=08ba3fd1-9255-4ccf-b902-ef53ebf3cb67" alt=""><figcaption></figcaption></figure>

## 参考资料

[\[Blogs\] AWS Nitro Enclaves for secure blockchain key management: Part 3](https://aws.amazon.com/cn/blogs/database/part-3-aws-nitro-enclaves-for-secure-blockchain-key-management/)

\[Blogs] <https://aws.amazon.com/cn/blogs/china/aws-security-key-management-services-support-innovative-growing-enterprises/>
