钱包签名机 - 四种不同秘钥管理方式

CloudHSMCloudHSM是AWS或者Google提供的一种硬件级别的加密签名解决方案。使用专业的硬件设备来生成、存储和使用加密秘钥。它是为了那些对秘钥有完全掌控权、且极度追求安全的客户所设计的。

钱包秘钥管理方式

CloudHSM

CloudHSMAWS 或者 Google 提供的一种硬件级别的加密签名解决方案。使用专业的硬件设备来生成、存储和使用加密秘钥。它是为了那些对秘钥有完全掌控权、且极度追求安全的客户所设计的。

地址生成

image.png 如上图所示,用户客户端需要请求 CloudHSM 的秘钥生成服务的时候,需要先调用钱包应用去请求,钱包应用这边将这个请求转发到 CloudHSM 硬件签名机服务中。在 CloudHSM 硬件服务中,它会使用随机数生成一个私钥,然后私钥保存在硬件本身,不外泄。随后会使用私钥生成一个公钥返回给到钱包应用,在钱包应用中即可根据这个公钥来构造相应的地址返回给到用户客户端。

签名服务

image.png 如图所示,用户客户端在请求一笔交易的时候,首先会将这笔交易给到钱包应用进行构造。钱包应用构造完成原交易信息后,通过 hash 算法将原交易转化成为一个 32 字节的消息 hash(比特币、以太坊),然后将这个 32 字节的 message hash 交给 CloudHSM 进行签名。 CloudHSM 在调用内部的私钥进行签名后,将 65 字节的签名信息吐出给到钱包应用。钱包应用收到签名后,即可将原交易、签名组装在一起发送到区块链中即可。

CloudHSM 的特点

  • 私钥不出硬件:私钥由 CloudHSM 的硬件设备保存,杜绝外部交互的可能。

  • 成本比较高CloudHSM 硬件、服务价格比较贵。

  • 承载的秘钥有限CloudHSM 能承载的秘钥有限,所以不适合用户层面上的地址使用。一般在交易所的热钱包地址使用到 CloudHSM 服务会比较多。

TEE 环境

TEE(Trusted Execution Environment,可信执行环境)是处理器内部的一个隔离区域,它为执行代码和处理数据提供机密性、完整性和运行时隔离,即便主操作系统或管理员被攻破,TEE 中的内容也不会泄露或被篡改。

通常情况下,我们也可以直接使用如 AWS 等云服务厂商提供的 TEE 环境(如 AWSNitro Enclave 服务、Intel SGX 等)。

TEE 环境提供给我们一套硬件级别的隔离环境,但是我们又可以进行编写代码通过 enclave 的方式放进去执行。

TEE 环境通常来说,安全性虽然不及 HSM,但是也足够了。胜在价格相对低廉,故交易所中的用户地址层面使用 TEE 这种方案的比较多。

下面我用 AWSTEE 环境流程架构来细说 AWS Nitro Enclave 是怎么运作的。

AWS Nitro Enclave 的方案中,我们的写的签名机代码通过 enclave 的方式包裹进 TEE 环境。TEE 环境中的代码通过 vsock 的方式与宿主机通信。

主要组件有四个个 钱包层签名机KMSS3 对象存储。

地址生成

  • 简化版 image.png
  • 完整版 image.png 首先我们要理解几个概念:
  1. 钱包层:我们的开发的的钱包系统。

  2. EC2 服务器AWS 的弹性云服务器。

  3. Nitro EnclaveAWS 提供的硬件隔离环境,可以理解为一个容器。

  4. 签名机应用:运行在隔离环境中的我们开发的签名机代码,负责地址生成和签名。

  5. KMS 服务AWS 提供的秘钥管理服务。

  6. S3 对象存储AWS 提供的对象存储服务,用于存储加密后的私钥等信息。

  7. vsock:用于 Nitro Enclave 内部和 EC2 宿主机上的应用进行通信。

首先来看地址生成的流程:

  1. 钱包层通过 REST API 发送地址生成申请到 EC2 宿主机上,EC2 宿主机将请求通过 vsock 的方式穿透到Nitro Enclave 环境里面的签名机器应用。

  2. 签名机收到后,执行调用 KMS 的服务(当然也是先要 vsockEC2 服务器代理),请求获取这个秘钥生成的 dataKey(用于加密私钥,仅存在于内存,用完即丢)和 encryptedDataKey(用于持久化存储)。

  3. 签名机应用通过随机数生成一个私钥,然后通过私钥导出公钥和地址。其中,私钥经过 dataKey 的加密后生成一个 encryptedPrivateKey

  4. 签名机调用 S3 的服务,将 encryptedDataKeyencryptedPrivateKey 等信息存储到 S3 对象存储服务里面。私钥全程不出 TEE 环境。

  5. 签名机将公钥、地址返回给到钱包层。

  • 注意:对于地址生成而言,私钥是在 TEE 环境里面生成的,向 S3 对象存储服务中存储的是加密后的私钥,完整私钥不会往外暴露,故安全。KMS 服务也无法访问或恢复出私钥。S3 对象存储中存储的也是加密的私钥,无法恢复出来。

签名

  • 简化版 image.png
  • 完整版

image.png 对于签名过程,流程如下:

  1. 钱包层构建交易信息,hash 后获得 32 字节的 messageHash ,传给 EC2 服务器。服务器收到后,通过 vsock 的方式调用签名机的应用。

  2. 签名机需要从 S3 对象存储服务中,获取出 encryptedPrivateKey和 encryptedDataKey

  3. 签名机通过 encryptedDataKey 请求 KMS 服务,获取出 dataKey

  4. 签名机通过 dataKeyencryptedPrivateKey,恢复出完整私钥。对 messageHash 进行签名。

  5. 签名后,将 signature 返回给钱包层即可。

  • 注意:对于签名而言,私钥是在 TEE 环境里面进行恢复出来的,不会往外暴露,故安全。KMS 服务也无法访问或恢复出私钥。S3 对象存储中存储的也是加密的私钥,无法恢复出来。

KMS 环境

KMS,全称 Key Management Service,是一个 用于集中管理加密密钥的服务,它可以安全地生成、存储、加密、解密和使用密钥,广泛应用于数据加密和身份认证等场景。

  • KMS 可以提供对称秘钥或者非对层秘钥对生成服务。

  • KMS 可以提供秘钥的管理服务(就如同我们上面的 TEE 中所使用到的 KMS

  • KMS 可以提供签名验签(但能力有限,仅支持部分算法,且不支持自定义)

  • KMS 生成的秘钥本身永远不出库。

Wallet.data 环境

Wallet.data 在此处,可以理解为本地数据库存储私钥的方式。一般存在于去中心化钱包(HD 钱包)。通过本地生成私钥然后将私钥通过 AES 对称加密后写入到本地的数据库中(如 sqllite 数据库或者本地文件)

这个私钥管理方式的安全性相对而言较低。


总结

安全性: 安全性方面:CloudHSM > TEE > KMS > Wallet.data

应用:

  • CloudHSM:交易所热钱包地址

  • TEE:交易所用户钱包地址

  • KMS:搭配 TEE 环境使用,一般不单独使用

  • Wallet.data:去中心化钱包、确定性继承钱包(HD 钱包)使用

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
shawn_shaw
shawn_shaw
web3潜水员、技术爱好者、web3钱包开发工程师、欢迎交流工作机会。欢迎闲聊、交流技术、交流工作:vx:cola_ocean