CloudHSMCloudHSM是AWS或者Google提供的一种硬件级别的加密签名解决方案。使用专业的硬件设备来生成、存储和使用加密秘钥。它是为了那些对秘钥有完全掌控权、且极度追求安全的客户所设计的。
CloudHSM
是 AWS
或者 Google
提供的一种硬件级别的加密签名解决方案。使用专业的硬件设备来生成、存储和使用加密秘钥。它是为了那些对秘钥有完全掌控权、且极度追求安全的客户所设计的。
如上图所示,用户客户端需要请求
CloudHSM
的秘钥生成服务的时候,需要先调用钱包应用去请求,钱包应用这边将这个请求转发到 CloudHSM
硬件签名机服务中。在 CloudHSM
硬件服务中,它会使用随机数生成一个私钥,然后私钥保存在硬件本身,不外泄。随后会使用私钥生成一个公钥返回给到钱包应用,在钱包应用中即可根据这个公钥来构造相应的地址返回给到用户客户端。
如图所示,用户客户端在请求一笔交易的时候,首先会将这笔交易给到钱包应用进行构造。钱包应用构造完成原交易信息后,通过
hash
算法将原交易转化成为一个 32
字节的消息 hash
(比特币、以太坊),然后将这个 32
字节的 message hash
交给 CloudHSM
进行签名。 CloudHSM
在调用内部的私钥进行签名后,将 65
字节的签名信息吐出给到钱包应用。钱包应用收到签名后,即可将原交易、签名组装在一起发送到区块链中即可。
私钥不出硬件:私钥由 CloudHSM
的硬件设备保存,杜绝外部交互的可能。
成本比较高:CloudHSM
硬件、服务价格比较贵。
承载的秘钥有限:CloudHSM
能承载的秘钥有限,所以不适合用户层面上的地址使用。一般在交易所的热钱包地址使用到 CloudHSM
服务会比较多。
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
,全称 Key Management Service
,是一个 用于集中管理加密密钥的服务,它可以安全地生成、存储、加密、解密和使用密钥,广泛应用于数据加密和身份认证等场景。
KMS
可以提供对称秘钥或者非对层秘钥对生成服务。
KMS
可以提供秘钥的管理服务(就如同我们上面的 TEE
中所使用到的 KMS
)
KMS
可以提供签名验签(但能力有限,仅支持部分算法,且不支持自定义)
KMS
生成的秘钥本身永远不出库。
Wallet.data
在此处,可以理解为本地数据库存储私钥的方式。一般存在于去中心化钱包(HD
钱包)。通过本地生成私钥然后将私钥通过 AES
对称加密后写入到本地的数据库中(如 sqllite
数据库或者本地文件)
这个私钥管理方式的安全性相对而言较低。
安全性:
安全性方面:CloudHSM
> TEE
> KMS
> Wallet.data
应用:
CloudHSM
:交易所热钱包地址
TEE
:交易所用户钱包地址
KMS
:搭配 TEE
环境使用,一般不单独使用
Wallet.data
:去中心化钱包、确定性继承钱包(HD
钱包)使用
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!