中心化钱包安全方案

先来看独立的密钥安全技术

1 自建或单租户 CloudHSM

优点:密钥永不出硬件,无法导出,只能对外提供公钥。
交易时,外部应用把消息哈希传进去签名,再把签好名的结果拿出来用。
这种方式安全性拉满,但成本高、容量有限,适合交易所热钱包和高净值用户托管钱包。
AWS CloudHSM是FIPS 140-2 3 级验证的硬件,是在您自己VPC下的专属单租户。
AWS 单租户cloudHSM(在aws 上自建cloudHSM集群)很贵 每小时1-3美金。笔者自建一个集群且只有一个可用区,开了有两三天,帐单干到了100多美金,差不多人民币1000多块。。吓得测试结束赶紧关掉了
在这里插入图片描述

2 AWS KMS

其实KMS也是使用的HSM硬件(FIPS 140-3级别) 但是是多租户的。
在这里插入图片描述
当然KMS支持自定义密钥存储,您可以与您的单租户CloudHSM结合使用:在这里插入图片描述

3 TEE环境

芯片级别的安全技术,像AWS的 AWS Nitro Enclave、Intel SGX、ARM TrustZone。

AWS Nitro Enclaves 是亚马逊云科技提供的 TEE 解决方案,可同时兼容 Intel,AMD x86 处理器以及 Graviton arm 架构处理器,并支持 EC2 实例和 Amazon EKS(Kubernetes)计算服务。

Amazon Nitro Enclaves,旨在提供安全且高度隔离的计算环境,用于处理敏感数据和执行安全计算任务。它使用的 Amazon Nitro System 技术,可以通过硬件隔离技术将计算实例内的部分资源保护在一个受信任的硬件隔离区域中。Nitro Enclaves 采用 Nitro Hypervisor 技术,在 EC2 实例内部,允许您创建一个 CPU 和内存隔离的计算环境。它没有持久存储、交互式访问或外部网络,仅支持与其父实例通过 vsock 的方式进行安全通信。用户无法通过 SSH 进入 enclave,并且父主机实例的进程、应用程序或用户无法访问 enclave 内的数据和应用程序。
在这里插入图片描述

4. Wallet.data本地加密存储

钱包生成密钥对后,用AES算法把私钥加密,存到数据库或文件里,要用的时候再解密。
这种方式简单便宜,但安全系数最低,容易被攻击,适合低价值交易、测试钱包等。

有些人喜欢把上述单独列出就作为解决方案来讲解了 其实不然,实际生产中面对不同情况各种方案是要组合起来来使用的。同时我们不能脱离需求,而中心化交易所最常见的钱包需求就是生成钱包和保管私钥,我们以此为标的,来列举可能的方案:

目标🎯:生成ECDSA secp256k1公私钥。(aws 区块链领域加密算法仅支持secp256k1)

No.1

** A 方式一:TEE环境+自定义HSM密钥存储(自定义单租户aws cloudhsm)**,【即 在 Nitro Enclaves 环境中运行 CloudHSM 的客户端应用】。

举例:在 Amazon Nitro Enclaves 中运行 Amazon CloudHSM 应用。

在某些需要使用 CloudHSM 的合规场景下,如果只是单单在 EC2 示例中运行- CloudHSM 应用,在主机被攻陷的情况下,有可能造成 CloudHSM 中密钥被窃取,或者加解密,身份验证、授权等被利用。针对这种情况,我们可以通过将 CloudHSM 应用运行在 Nitro Enclaves 隔离环境中,来进一步增强数据的安全性和完整性。
说白了就是在 Nitro Enclaves 环境中运行 CloudHSM 的客户端应用。 私钥的生成,签名 等操作都是在HSM里执行的。
AWS提供的CloudHSM SDK只是CloudHSM集群管理的API, 并不是针对hsm中key操作(生成,签名等操作)的API,
因为CloudHSM是硬件层面的安全硬件模块,有自己的接口方案,所以它不支持“想当然式的API直接”调用,而是必须使用一套基于密码学的接口方案和客户端,例如:PKCS #11, OpenSSL Dynamic Engine,JCE provider。 具体可以参考AWS CloudHSM 使用指南

B 方式二:TEE+KMS:即 在 Nitro Enclaves 环境中运行【自定义程序】调用 AWS KMS。使用kms来帮助我们直接管理密钥的生成,签名等操作。这些都可以直接通过kms的api调用实现, 而无需像方式一那样处理硬件模块接口。

在这里插入图片描述
注意,这里KMS的密钥存储理论上可以分为默认存储和自定义存储(自定义单租户cloudHSM集群),但是我们的业务是生成钱包,是基于 非对称 椭圆加密曲线secp256k1的,但aws kms的自定义密钥存储不能和非对称加密一起使用,所以这里只能使用KMS的默认hsm存储,即直接使用KMS服务。
在这里插入图片描述

No.2

如上文提到的场景,( C ) 即单单在 EC2 实例中运行CloudHSM 应用。
或者 ( D ) 使用自定义程序在EC2 实例中进行KMS调用。

No.3

(E) 使用KMS+S3存储
或者 (F) KMS+本地存储

在这里插入图片描述

4 不安全

不使用KMS,纯本地存储或自建存储。

方案选择

现在我们回归实际业务,从

  1. 操作难易程度
  2. 业务方向
  3. 成本控制

三个角度考虑最优方案。

首先,很明显,KMS的操作难易程度要远远小于自定义CloudHSM,且能提供几乎相当的安全性,并且可以与aws 其他服务 高度集成,所有 KMS 密钥使用请求都会记录在 CloudTrail 中,方便审计。
所以在必须用HSM存储密钥的角度上来讲,选择直接集成KMS的优势明显。
其次,业务角度,交易所钱包一般分为用户钱包和归集钱包,其中归集钱包又分为热归集钱包和冷归集钱包。
用户钱包顾名思义,就是每个用户充值的时候都会分配对应网络的一个钱包地址,一般来讲这个是固定的。所以用户钱包的生成量会非常的大。而归集钱包地址数则相对来说小了很多,只要交易所根据自身业务量维持在一个合理范围值即可。

这里就不得不考虑密钥存储的成本问题。

其次,自定义CloudHSM存储密钥的成本实在是太高了,单个密钥单个小时就要1-3美刀,根本不适合用来做用户钱包,哪怕是归集冷钱包地址累积下来也是一笔不小的开销。(同时归集冷钱包的另一种普适方案是使用智能合约多签钱包或MPC钱包。)
所以无论从哪个角度看,使用自定义cloudHSM都不是一个好的选择,除非你自有安全硬件,机房和工程师,当然土大款人傻钱多也可以任性梭哈aws 自定义cloudHSM。
而如果归集钱包使用kms,成本则会下降很多,也保证了相当的安全性。所以针对归集钱包,使用TEE环境部署签名机代码,签名机调用aws kms服务会是一个很好的选择

归集钱包: AWS Nitro Enclaves + AWS KMS(hsm)

对于用户钱包,由于aws单个区域内的单个用户的kms 密钥容量
的限制10万个,而对于有大体量用户需求的场景(如:交易所),单个用户密钥存储的限制显然不符合需求, 而增加可用区和账户数的方式显然会带来系统实现上更高的复杂性、繁琐度和不稳定性。

所以,我们不如转变下思路,将用户钱包密钥生成后使用AES加密后再落地,将AES的密钥存储在KMS,这样就解决了用户体量持续扩展的问题,而用户密钥的存储 理所当然的选择为S3。当然这里的密钥生成部分依然要放在Nitro Enclaves里做,只要是生产环境的密钥生成就要放在TEE环境里,可以将安全提升至内存级别

用户钱包:AWS Nitro Enclaves + AES + AWS KMS(hsm) + S3 

这种方式还有个好处就是可以突破aws的密钥算法限制。 不管CloudHSM还是KMS的加密算法支持在blockchain领域都是只有 ECDSA secp256k1 曲线的,而一些新兴的链如 Solana Ton等是在使用EDDSA ed25519曲线,这也是一个趋势,所以这种方式可以突破这种限制,实现多链支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87546.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 实现底部弹窗

文章目录在 Android 中创建优雅的底部选项弹窗 (BottomSheetDialogFragment) 📱第一步:设计底部弹窗的布局 🎨第二步:创建 BottomSheetDialogFragment 类 ⚙️第三步:触发并显示底部弹窗 🚀在 Android 中创…

LAN8720 寄存器概览和STM32 HAL库读写测试

目录 寄存器0x00:Basic Control Register(BCR)0x01:Basic Status Register(BSR) 连接测试寄存器读写测试 补充 寄存器 // 0x00:Basic Control Register(BCR) BIT15:Soft Reset 写1复位,写1之…

渗透测试深度分析:空密码Administrator账户引发的安全风暴

渗透测试深度分析:空密码Administrator账户引发的安全风暴0x01 测试背景 在内网渗透测试中,对Windows主机 192.168.1.98 使用 enum4linux 进行枚举: enum4linux -u Administrator -p -a 192.168.1.98关键发现:Administrator账户空…

OpenCV CUDA模块设备层-----高效地计算两个 uint 类型值的带权重平均值

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 OpenCV 的 CUDA 模块(cudev) 中的一个设备端内联函数,用于高效地计算两个 uint 类型值的带权重平均值。 该函…

[学习记录]Unity毛发渲染[URP]-Shell基础版

毛发,无论是人类的头发、动物的皮毛,还是奇幻生物的绒毛,都是构成生命感和真实感不可或缺的元素。它对光线的独特散射、吸收和反射,赋予了物体柔软、蓬松、有生命力的质感。它不仅仅是让角色看起来更“毛茸茸”那么简单&#xff0…

数字孪生技术引领UI前端设计潮流:增强现实(AR)的集成应用

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!一、引言:AR 与数字孪生融合的设计革新浪潮在体验经济与技术融合的双重驱动下&…

碰一碰发视频源码搭建与定制化开发:支持OEM

在近场通信(NFC)技术与移动终端深度融合的背景下,“碰一碰发视频” 功能凭借便捷的交互体验,在商业推广、信息传递等场景中快速落地。不同于标准化解决方案的黑盒模式,基于源码的定制化开发能从底层优化传输效率、提升…

Ubuntu 24.04 安装配置 Redis 7.0 开机自启

下载源码 wget https://download.redis.io/releases/redis-7.0.12.tar.gz安装依赖 & 准备环境 sudo apt update && sudo apt upgrade -y sudo apt install -y build-essential tcl curl解压 tar xzf redis-7.0.12.tar.gz编译安装 cd redis-7.0.12 make -j$(nproc) …

【Linux 系统】基础IO——Linux中对文件的理解

13.基础IO(1) 文章目录13.基础IO(1)文件的基本概念:内容与属性文件的打开机制:fopen 和 open被打开的文件与磁盘文件的区别文件的内核数据结构文件与进程的交互方式标准输入/输出/错误与文件流系统调用与文件描述符文件打开模式(r/w/a/a&…

Go调度器的抢占机制:从协作式到异步抢占的演进之路|Go语言进阶(7)

想象一下这样的场景:你在餐厅排队等位,前面有个人点了餐却一直霸占着座位玩手机,后面的人只能干等着。这就是Go早期版本面临的问题——一个goroutine如果不主动让出CPU,其他goroutine就只能饿着。 今天我们来聊聊Go调度器是如何解…

开源模型应用落地-让AI更懂你的每一次交互-Mem0集成Qdrant、Neo4j与Streamlit的创新实践(四)

一、前言 在人工智能迅速发展的今天,如何让AI系统更懂“你”?答案或许藏在个性化的记忆管理之中。Mem0作为一个开源的记忆管理系统,正致力于为AI赋予长期记忆与个性化服务能力。通过结合高性能向量数据库Qdrant、图数据库Neo4j的强大关系分析能力以及Streamlit的高效可视化交…

基于微信小程序的校园二手交易平台、微信小程序校园二手商城源代码+数据库+使用说明,layui+微信小程序+Spring Boot

school-market 介绍 基于微信小程序的校园二手交易平台 功能结构图 软件架构 系统分为三个端,分别是客户端、管理端、服务端; 客户端:使用原生微信小程序实现 管理端:使用Layui实现 服务端:使用Java SpringBoot…

IDEA与Gradle构建冲突,导致java重复类的解决方案

项目构建总是报错:错误提示1:java:重复类或错误提示2:Internal error in the mapping processor: java.lang.RuntimeException: javax.annotation.processing.FilerException: Attempt to recreate a file排查发现build/generated/sources/an…

如何调节笔记本电脑亮度?其实有很多种方式可以调整亮度

长时间面对屏幕工作、学习或娱乐,很多人会感到眼睛干涩、疲劳,甚至出现视力下降等问题。其实,这些问题的背后,往往隐藏着一个看似简单却极易被忽视的设置—屏幕亮度。 合适的屏幕亮度不仅能提升视觉体验,还能有效缓解…

国际数字影像产业园创作空间升级 打造更优质营商环境

国际数字影像产业园创作空间升级后表现显著,聚焦设施数字化与用户体验优化。整体提升了创意生态系统的竞争力,有效吸引全球企业。 升级核心改进 基础设施现代化:引入智能硬件如5G网络和云渲染设备,支持高清影像处理,…

浅谈 webshell 构造之如何获取恶意函数

前言这篇文章主要是总结一下自己学习过的如何获取恶意函数的篇章,重点是在如何获取恶意函数get_defined_functions(PHP 4 > 4.0.4, PHP 5, PHP 7, PHP 8)get_defined_functions — 返回所有已定义函数的数组我们主要是可以通过这个获取危险的函数比如比如当然还有…

Python 单例模式与魔法方法:深度解析与实践应用

在 Python 编程领域,设计模式解决常见问题的通用方案,而魔法方法则是 Python 语言赋予类强大功能的特殊接口。单例模式和魔法方法看似独立,实则紧密关联,魔法方法常被用于实现单例模式。深入理解并熟练运用它们,能够帮助开发者编写出结构清晰、高效且具有高复用性的代码。…

pybind11 导出 C++ map 在 Python 层 get 访问慢的优化方案

pybind11 导出 C map 在 Python 层 get 访问慢的优化方案 问题描述 通过 pybind11 导出 C 的 std::map 或 std::unordered_map,在 Python 代码中频繁使用 get 方法访问 value 时,性能非常低下。其主要原因是: pybind11 的 map 绑定会导致每次…

RTC实时时钟DS1339U-33国产替代FRTC1339M

FRTC1339M是一款实时时钟(RTC)芯片,由NYFEA徕飞公司制造。 FRTC13399M串行实时时钟是一种低功耗的时钟日期设备,具有两个可编程的每日时间警报和一个可编程的方波输出。通过2线双向总线进行串行地址和数据传输。时钟/日期提供秒、…

网络常用端口号归纳

ICMP端口号:1IGMP端口号:2TCP端口号:6UDP端口号:17FTP端口号:20(控制信息传输)、21(数据传输)SSH端口号:22Telnet端口号:23SMTP端口号:25IPV6端口号&#xff…