zoukankan      html  css  js  c++  java
  • HPB钱包助记词生成和备份

    助记词生成

    1 BIP32, BIP39, BIP44

    • BIP32:定义 Hierarchical Deterministic wallet (简称 “HD Wallet”),是一个系统可以从单一个 seed 产生一树状结构储存多组 keypairs(私钥和公钥)。好处是可以方便的备份、转移到其他相容装置(因为都只需要 seed),以及分层的权限控制等
    • BIP39:将 seed 用方便记忆和书写的单字表示。一般由 12 个单词组成,称为 mnemonic code(phrase),中文称为助记词或助记码。例如:

    rose rocket invest real refuse margin festival danger anger border idle brown

    • BIP44:基于 BIP32 的系统,赋予树状结构中的各层特殊的意义。让同一个 seed 可以支持多币种、多帐户等。各层定义如下:

    m / purpose' / coin_type' / account' / change / address_index

    其中的 purporse’ 固定是 44’,代表使用 BIP44。而 coin_type’ 用来表示不同币种,例如 Bitcoin 就是 0’,Ethereum 是 60’。

    2 助记词生成

    HPB Wallet目前使用的BIP39,将64位私钥变化为12个单词的形式便于记忆。

    打开BIP39.swift文件,可以通过调用下面方法,随机生成一个助记词:

    
    static public func generateMnemonics(bitsOfEntropy: Int, language: BIP39Language = BIP39Language.english) throws -> String? {
            guard bitsOfEntropy >= 128 && bitsOfEntropy <= 256 && bitsOfEntropy % 32 == 0 else {return nil}
            guard let entropy = Data.randomBytes(length: bitsOfEntropy/8) else {throw AbstractKeystoreError.noEntropyError}
            return BIP39.generateMnemonicsFromEntropy(entropy: entropy, language: language)
            
        }     

    可以根据助记词去获取seed,然后通过sha256得到明文私钥

    let seed = BIP39.seedFromMmemonics(mnemonic, language: BIP39Language.english)
     let privateKey = seed.sha256()

    2.1 助记词备份

    拥有助记词就可以掌控这个账户,因此助记词生成后,要提醒用户去备份助记词。对于去中心化的APP,用户备份后要从本地删除,用户备份之前可以加密存放在本地。

  • 相关阅读:
    从Kratos设计看Go微服务工程实践
    京东到家安全测试实践
    浅谈 Protobuf 编码 原创 gsonli 腾讯技术工程 2021-07-14
    API Design Guide
    The power of two choices in randomized load balancing
    NGINX and the "Power of Two Choices" Load-Balancing Algorithm
    SRE 崩溃
    DDoS木马
    String.fromCharCode(88,83,83) 方法返回由指定的 UTF-16 代码单元序列创建的字符串
    汇编语言的AX,BX,CX,DX,分别表示什么
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13313344.html
Copyright © 2011-2022 走看看