钱包秘钥管理方式CloudHSM
CloudHSM 是 AWS 或者 Google 提供的一种硬件级别的加密签名解决方案。使用专业的硬件设备来生成、存储和使用加密秘钥。它是为了那些对秘钥有完全掌控权、且极度追求安全的客户所设计的。
地址生成
如上图所示,用户客户端需要请求 CloudHSM 的秘钥生成服务的时候,需要先调用钱包应用去请求,钱包应用这边将这个请求转发到 CloudHSM 硬件签名机服务中。在 CloudHSM 硬件服务中,它会使用随机数生成一个私钥,然后私钥保存在硬件本身,不外泄。随后会使用私钥生成一个公钥返回给到钱包应用,在钱包应用中即可根据这个公钥来构造相应的地址返回给到用户客户端。
签名服务
如图所示,用户客户端在请求一笔交易的时候,首先会将这笔交易给到钱包应用进行构造。钱包应用构造完成原交易信息后,通过 hash 算法将原交易转化成为一个 32 字节的消息 hash(比特币、以太坊),然后将这个 32 字节的 message hash 交给 CloudHSM 进行签名。 CloudHSM 在调用内部的私钥进行签名后,将 65 字节的签名信息吐出给到钱包应用。钱包应用收到签名后,即可将原交易、签名组装在一起发送到区块链中即可。
CloudHSM 的特点TEE 环境
TEE(Trusted Execution Environment,可信执行环境)是处理器内部的一个隔离区域,它为执行代码和处理数据提供机密性、完整性和运行时隔离,即便主操作系统或管理员被攻破,TEE 中的内容也不会泄露或被篡改。
通常情况下,我们也可以直接使用如 AWS 等云服务厂商提供的 TEE 环境(如 AWS 的 Nitro Enclave 服务、Intel SGX 等)。
TEE 环境提供给我们一套硬件级别的隔离环境,但是我们又可以进行编写代码通过 enclave 的方式放进去执行。
TEE 环境通常来说,安全性虽然不及 HSM,但是也足够了。胜在价格相对低廉,故交易所中的用户地址层面使用 TEE 这种方案的比较多。
下面我用 AWS 的 TEE 环境流程架构来细说 AWS Nitro Enclave 是怎么运作的。
在 AWS Nitro Enclave 的方案中,我们的写的签名机代码通过 enclave 的方式包裹进 TEE 环境。TEE 环境中的代码通过 vsock 的方式与宿主机通信。
主要组件有四个个 钱包层、签名机、KMS、S3 对象存储。
地址生成
钱包层:我们的开发的的钱包系统。
EC2 服务器:AWS 的弹性云服务器。
Nitro Enclave:AWS 提供的硬件隔离环境,可以理解为一个容器。
签名机应用:运行在隔离环境中的我们开发的签名机代码,负责地址生成和签名。
KMS 服务:AWS 提供的秘钥管理服务。
S3 对象存储:AWS 提供的对象存储服务,用于存储加密后的私钥等信息。
vsock:用于 Nitro Enclave 内部和 EC2 宿主机上的应用进行通信。
首先来看地址生成的流程:
钱包层通过 REST API 发送地址生成申请到 EC2 宿主机上,EC2 宿主机将请求通过 vsock 的方式穿透到Nitro Enclave 环境里面的签名机器应用。
签名机收到后,执行调用 KMS 的服务(当然也是先要 vsock 给 EC2 服务器代理),请求获取这个秘钥生成的 dataKey(用于加密私钥,仅存在于内存,用完即丢)和 encryptedDataKey(用于持久化存储)。
签名机应用通过随机数生成一个私钥,然后通过私钥导出公钥和地址。其中,私钥经过 dataKey 的加密后生成一个 encryptedPrivateKey。
签名机调用 S3 的服务,将 encryptedDataKey 和 encryptedPrivateKey 等信息存储到 S3 对象存储服务里面。私钥全程不出 TEE 环境。
签名机将公钥、地址返回给到钱包层。
签名
对于签名过程,流程如下:
钱包层构建交易信息,hash 后获得 32 字节的 messageHash ,传给 EC2 服务器。服务器收到后,通过 vsock 的方式调用签名机的应用。
签名机需要从 S3 对象存储服务中,获取出 encryptedPrivateKey和 encryptedDataKey。
签名机通过 encryptedDataKey 请求 KMS 服务,获取出 dataKey。
签名机通过 dataKey 和 encryptedPrivateKey,恢复出完整私钥。对 messageHash 进行签名。
签名后,将 signature 返回给钱包层即可。
KMS 环境
KMS,全称 Key Management Service,是一个 用于集中管理加密密钥的服务,它可以安全地生成、存储、加密、解密和使用密钥,广泛应用于数据加密和身份认证等场景。
Wallet.data 环境
Wallet.data 在此处,可以理解为本地数据库存储私钥的方式。一般存在于去中心化钱包(HD 钱包)。通过本地生成私钥然后将私钥通过 AES 对称加密后写入到本地的数据库中(如 sqllite 数据库或者本地文件)
这个私钥管理方式的安全性相对而言较低。
总结
安全性:安全性方面:CloudHSM > TEE > KMS > Wallet.data
应用: