跳到主要内容

可信计算环境




在金融服务行业,数据泄漏可能会造成直接的收入损失,并对业务、用户信任和企业声誉产生重大影响。如何在计算环境中确保数据的机密性和完整性,将是企业面临的重大挑战,尤其是在公有云的环境中。

可信执行环境(TEE: Trusted Execution Environment)的提出,正是应对这样的需求。 其在芯片层面单独划分出来的一个隔离空间,建立与本地操作系统并行运行的隔离执行环境,保证加载到内部的代码和数据在机密性和完整性方面受到保护,保护敏感代码和数据免受来自本地操作系统潜在漏洞的特权攻击。比如钱包的典型场景:我们可以在隔离的安全环境中使用和处理私钥,同时阻止父实例上的用户、应用程序查看和获取这些密钥。

业界常见的可信执行环境技术包括 Intel SGX 和 ARM TrustZone 以及我们采用的 AWS Nitro Enclave



其优势主要有以下几点:

  • 隔离和安全的运行环境:基于 Nitro Hypervisor 实现完全隔离的 CPU、内存计算环境,无持久化存储,交互式访问宿主机和外部网络。

  • 加密证明:Attestation 证明文件允许用户在外部服务中授权 Enclave 访问权限,并能验证 Enclave 中的业务代码完整性,以防恶意纂改。

  • 灵活:不需要绑定 CPU 厂商,支持 Intel,AMD 芯片,和任何编程语言。

  • 成本:Nitro Enclave 运行于 EC2 中,无任何额外费用。

  • 云原生安全集成:与云原生的 KMS,ACM 安全服务直接集成,提供更好的用户体验和安全保障。



Transaction signature


上图是我们基于 AWS Nitro Enclaves 和 KMS 实现的私钥生成、加解密、签名的简要流程。

  1. Client App 收发 MPC 协议消息,并通过 Vscok 双向传递到 Nitro Enclave 的 Server App 进行计算,最终生成私钥碎片。

  2. 在 Nitro Enclave 中,Server App 通过 kms:GenerateDataKey API 获取加密密钥(明文 DataKey 和 KMS 加密的 DataKey),使用明文 DataKey 结合用户信息,对私钥进行 Client-Side 加密。

  3. 在 Nitro Enclave 中,Server App 将加密的私钥和加密的 DataKey ,通过 Vsock 发送到 Client App。

  4. 在 Parent OS 中,Client App 将从 Vsock 中收到的加密私钥、加密 DataKey 以及所属用户信息存入数据库。

  5. 在 Parent OS 中,Client App 从数据库中读取一条数据,通过 Vsock 将加密的私钥、加密的 DataKey 和需要被签名的消息,发送到 Nitro Enclave 的 Server App。

  6. 在 Nitro Enclave 中,Server App 从 Vsock 接收数据,通过 kms:Decrypt API 对加密的 DataKey 进行解密,获取明文 DataKey。

  7. 在 Nitro Enclave 中,Server App 使用明文 DataKey 结合用户信息对加密的私钥进行解密。

  8. Client App 收发 MPC 协议消息,并通过 Vscok 双向传递到 Nitro Enclave 的 Server App 进行计算,最终通过私钥完成对消息的签名。

  9. 在 Nitro Enclave 中,丢弃签名信息,只将签名结果通过 Vsock 发送到 Client App。因为协同计算的用户测也可以拿到同样的签名信息。



这里还有一些需要注意的安全要点:

  1. 创建的 KMS Key 必须是无法导出类型,防止泄露。

  2. KMS Key 可以采用 AWS CloudHSM 自定义存储隔离,以满足更高的安全要求。

  3. KMS Key 必须进行权限控制,只有特定的 EC2 Instance 可以访问。

  4. 有权访问 KMS 的 EC2 Instances, 不能拥有修改 Key Policy 的权限。

  5. AWS Nitro Enclave 必须启用 Attestation Document,将 Nitro Enclave 镜像 Hash 绑定到 Key Policy 中。这样每次 KMS API 请求必须从 Nitro Enclave 内部发出,并携带正确的镜像 Hash 才能完成私钥加解密。任何人企图修改镜像代码,或从 Parent OS 直接完成私钥解密都是不被允许的。在这种情况下,即使服务器被攻破,您的私钥也是安全的。