文章目录
- 一、前言
- 1.1 衍生算法生成的私钥
- 1.2 随机生成的私钥
- 二、私钥生成及私钥提取
- 2.1 golang如何使用衍生算法生成私钥,然后为用户生成地址
- 2.1.1 实现步骤
- 2.1.2 golang代码示例
- 2.1.3 代码说明
- 2.2 地址交易时,如何提取地址私钥
- 2.2.1 私钥恢复说明
- 2.2.2 golang代码通过助记词恢复私钥示例
- 2.2.3 代码说明
- 三、将地址衍生算法应用到中心化钱包中
- 3.1 将地址衍生算法应用到中心化钱包中
- 3.1.1 架构设计
- 3.1.1.1 安全的地址生成方式
- 3.1.1.2 安全转账流程设计
- 3.1.1.3 大规模用户管理
- 3.1.1.4 安全监控和风控设计
- 3.1.2 使用公钥验证地址身份信息(是否为钱包系统生成)
- 3.1.2.1 为什么要存储公钥信息
- 3.1.2.2 golang 通过公钥校验地址是否伪造
- 3.2 使用主私钥恢复子私钥
- 3.2.1 主私钥的作用
- 3.2.1 主私钥恢复子私钥的具体流程
- 3.2.1 golang使用主私钥恢复子私钥
- 四、秘钥路径及BIP44
- 4.1 BIP44 结构概览
- 4.2 BIP44 路径结构的详细说明
- 4.3 BIP44 路径实例:以太坊地址生成
- 4.4 BIP44 的应用场景
- 五、 为什么:每个account下的address_index不要超过20个?
- 5.1 建议address_index不要超过20个的原因
- 5.2 什么是自动扫描和恢复地址?
- 5.2.1 钱包的扫描和恢复流程
- 5.2.2 为什么“自动扫描和恢复”重要?
- 5.2.3 如果每个account下的address_index生成了非常多,会影响钱包使用吗?
- 六、根据每个address_index根据建议20个,如果我需要上千万个地址,那么应该如何实现?
- 6.1 实现思路
- 6.2 golang实现批量生成和管理地址
- 6.3 除了增加更多的account,还会有其它的解决方式吗?
- 6.3.1 增加地址的扫描深度
- 6.3.2 分区索引(Sharded Indexing)
- 6.3.3 分区索引 代码如何实现
- 6.3.4 根据address_index 派生地址和 根据 userID 派生地址 的区别是什么?
一、前言
在中心化钱包中,区块链地址的私钥一般通过衍生算法生成,而不是直接通过简单的随机生成。这是因为衍生算法生成的私钥可以通过种子或主密钥管理,更适合多账户管理和增强安全性。
1.1 衍生算法生成的私钥
常见的中心化钱包多采用HD(分层确定性)钱包标准,比如 BIP32、BIP39 和 BIP44 等。通过这些标准:
主私钥或种子:钱包会生成一个主私钥或种子,这个种子通过密码学算法生成,然后可以衍生出一系列私钥。
私钥衍生路径:使用类似m/44’/60’/0’/0/0的路径规则,可以为每个用户、每条链或每个账户生成独立的私钥。
优点:只需备份一个种子或主密钥,即可恢复所有私钥,大大简化了备份过程,提高了安全性。
1.2 随机生成的私钥
直接随机生成私钥的方式在一些单账户钱包中可能会使用,但在中心化钱包中很少见。这种方式管理多个账户的私钥较为繁琐,不适合规模化管理。
总结