钱包签名机 - 四种不同秘钥管理方式
钱包秘钥管理方式
CloudHSM
CloudHSM 是 AWS 或者 Google 提供的一种硬件级别的加密签名解决方案。使用专业的硬件设备来生成、存储和使用加密秘钥。它是为了那些对秘钥有完全掌控权、且极度追求安全的客户所设计的。
地址生成
如上图所示,用户客户端需要请求 CloudHSM 的秘钥生成服务的时候,需要先调用钱包应用去请求,钱包应用这边将这个请求转发到 CloudHSM 硬件签名机服务中。在 CloudHSM 硬件服务中,它会使用随机数生成一个私钥,然后私钥保存在硬件本身,不外泄。随后会使用私钥生成一个公钥返回给到钱包应用,在钱包应用中即可根据这个公钥来构造相应的地址返回给到用户客户端。
签名服务
如图所示,用户客户端在请求一笔交易的时候,首先会将这笔交易给到钱包应用进行构造。钱包应用构造完成原交易信息后,通过 hash 算法将原交易转化成为一个 32 字节的消息 hash(比特币、以太坊),然后将这个 32 字节的 message hash 交给 CloudHSM 进行签名。 CloudHSM 在调用内部的私钥进行签名后,将 65 字节的签名信息吐出给到钱包应用。钱包应用收到签名后,即可将原交易、签名组装在一起发送到区块链中即可。
CloudHSM 的特点
-
私钥不出硬件:私钥由
CloudHSM的硬件设备保存,杜绝外部交互的可能。 -
成本比较高:
CloudHSM硬件、服务价格比较贵。 -
承载的秘钥有限:
CloudHSM能承载的秘钥有限,所以不适合用户层面上的地址使用。一般在交易所的热钱包地址使用到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环境。 -
签名机将公钥、地址返回给到钱包层。
- 注意:对于地址生成而言,私钥是在
TEE环境里面生成的,向S3对象存储服务中存储的是加密后的私钥,完整私钥不会往外暴露,故安全。KMS服务也无法访问或恢复出私钥。S3对象存储中存储的也是加密的私钥,无法恢复出来。
签名
- 简化版

- 完整版
对于签名过程,流程如下:
-
钱包层构建交易信息,
hash后获得32字节的messageHash,传给EC2服务器。服务器收到后,通过vsock的方式调用签名机的应用。 -
签名机需要从
S3对象存储服务中,获取出encryptedPrivateKey和encryptedDataKey。 -
签名机通过
encryptedDataKey请求KMS服务,获取出dataKey。 -
签名机通过
dataKey和encryptedPrivateKey,恢复出完整私钥。对messageHash进行签名。 -
签名后,将
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钱包)使用
版权声明
本文仅代表作者观点,不代表区块链技术网立场。
本文系作者授权本站发表,未经许可,不得转载。
区块链技术网


发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。