当前位置: 首页 > news >正文

以太坊系地址衍生算法分层确定性生成逻辑

文章目录

  • 一、前言
    • 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 随机生成的私钥

直接随机生成私钥的方式在一些单账户钱包中可能会使用,但在中心化钱包中很少见。这种方式管理多个账户的私钥较为繁琐,不适合规模化管理。

总结

http://www.lryc.cn/news/484176.html

相关文章:

  • 【Unity】ScriptableObject的应用:利用配方合成新物体
  • 31DNS设置
  • 使用Docker快速部署FastAPI Web应用
  • 全面掌握Spring Boot异常处理:策略与实践
  • 【LeetCode】【算法】11. 盛最多水的容器
  • ES6代理和反射新特性,详细讲解
  • vue计算属性 初步使用案例
  • 大模型时代,呼叫中心部门如何建设一套呼出机器人系统?
  • 使用Java绘制图片边框,解决微信小程序map组件中marker与label层级关系问题,label增加外边框后显示不能置与marker上面
  • 力扣 LeetCode 142. 环形链表II(Day2:链表)
  • 用MVVM设计模式提升WPF开发体验:分层架构与绑定实例解析
  • C++中的动态断言和静态断言
  • 运算放大器的学习(一)输入阻抗
  • Rust枚举之卧龙凤雏(Rust Option枚举、Rust Result枚举)(Rust Enum、Some(T)、Ok(T)、Err(E))链式操作
  • TCP/IP协议,TCP和UDP区别
  • 【go从零单排】Timer、Epoch 时间函数
  • 壁仞科技上市前最后一波 校招 社招 内推
  • 【微软报告:多模态基础模型】(2)视觉理解
  • Linux 驱动
  • 【数学二】线性代数-线性方程组-齐次线性方程组、非齐次线性方程组
  • Git别名设置
  • 算法基础 -- 红黑树原理与插入伪代码
  • 力扣 LeetCode 27. 移除元素(Day1:数组)
  • 微服务链路追踪skywalking安装
  • mqtt学习笔记(一)
  • Kafka Eagle 安装教程
  • Ajax 获取进度和中断请求
  • 实验5:网络设备发现、管理和维护
  • kafka 生产经验——数据积压(消费者如何提高吞吐量)
  • 对等同步身份认证(Simultaneous Authentication of Equals,简称SAE)介绍