Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

Bytomd 助记词恢复密钥体验指南

用香烟做的云
68 0 0
比原项目仓库:) [) V& {, C5 L+ d
Github地址:https://github.com/Bytom/bytom
! U; L+ I$ A! E" nGitee地址:https://gitee.com/BytomBlockchain/bytom. d: ?7 g( d/ f* f4 o8 X
背景知识
% g4 o$ U* w5 T+ M1 K1 X% \9 e/ MBytom 使用的 密钥类型为基于 ed25519 的 chainkd.XPub
, D/ _, X/ @3 @: ^# Q
  • 代码见 bytom/crypto/ed25519/chainkd
  • 文档见 https://chain.com/docs/1.2/protocol/specifications/chainkd`, M* E. o7 B! Z
    : P5 y, z3 O: x7 x
    预备
    3 d- T# w0 P- X代码修改
    2 [+ _( d( x2 o+ G7 n5 w首先适当修改代码,添加一些打印输出,使得我们更好的进行验证。 如果只是想看 xpub ,而不关心 xprv(对于验证导入导出助记词功能来说已经够了)的话可以跳过这一步,不必修改源码9 {$ B3 m% z  }
    在 bytom/blockchain/pseudohsm/pseudohsm.go 中的
    . ~/ A. q: k& H, E. cfunc (h *HSM) createKeyFromMnemonic(alias string, auth string, mnemonic string) (*XPub, error)
    # d9 ~8 z! e' m: k: ]& e添加输出打印 root XPub 对应的 私钥 和 公钥
    1 D- \0 L$ j8 A; |* Jfunc (h *HSM) createKeyFromMnemonic(alias string, auth string, mnemonic string) (*XPub, error) {: W3 }: l1 G7 H' h# }. Z3 z
        // Generate a Bip32 HD wallet for the mnemonic and a user supplied password- ]/ @8 I7 N8 @( A
        seed := mnem.NewSeed(mnemonic, "")
    - g4 ~. b/ ~5 i" p1 X    xprv, xpub, err := chainkd.NewXKeys(bytes.NewBuffer(seed))
    ( U& u$ B% m5 M- {7 }$ g    if err != nil {5 j( }1 d- X* ^: n
            return nil, err
    7 r( X! Y9 S- _4 G0 F7 Z    }
    . w5 F2 }" n4 Q$ i, K3 l& Q        
    7 C, S% M8 \5 o$ h; ]! v& E    fmt.Println(hex.EncodeToString(xprv[:])) // Add info printing
    - Q4 |' C/ C) w, o: i    fmt.Println(hex.EncodeToString(xpub[:])) // Add info printing. k  b3 H# E1 m8 M
        id := uuid.NewRandom()
    - h  Z8 ?$ x/ e% Y. K6 y( D+ j/ r    key := &XKey{
    6 K8 R! R8 U' `9 C* _# y$ y        ID:      id,0 }" v! c5 s: L  ?5 G: c& y
            KeyType: "bytom_kd",
    ! X) B- W4 N- V1 E% B. r, r9 O% Q        XPub:    xpub,
    & y, N1 p1 ^/ x        XPrv:    xprv,
    , u" V! M2 q$ R! H7 T        Alias:   alias,6 Q5 N+ R, U' O3 W! a- E
        }0 }5 Y. @( D* k, C; E* G
        file := h.keyStore.JoinPath(keyFileName(key.ID.String()))2 W9 x9 H2 F! ^% N: r& X
        if err := h.keyStore.StoreKey(file, key, auth); err != nil {
    9 K$ |* M0 Y4 g8 L7 G3 @, [% D# D        return nil, errors.Wrap(err, "storing keys")
    ' u& _' ^4 m: G* c    }
    0 p' }; y( V5 @0 R    return &XPub{XPub: xpub, Alias: alias, File: file}, nil
    # Z5 U# f. C  f1 ^. y6 m}! ~  B. ?( p& x5 X  h+ _
    工具准备
    ; Z  v2 D0 }3 _3 ~/ Y因为 bytomd 目前 dashboard 钱包图形界面还没有助记词相关功能,我们需要准备工具使用 POST 请求来使用。比如 curl 或者 postman
    ) s+ J2 R+ D* A$ |获取密钥对应助记词
    & ^  N8 s  w  `8 U8 b4 w7 ?dashboard 目前还没有 从 密钥导出助记词的功能,现有只是在创建密钥时有助记词相应输出信息。可以修改源码在查看密钥时 打印对应助记词。- _2 q- z; P9 g# ~) D- h
    因为只是测试,这里为了方便,直接查看在创建密钥时返回的助记词。
    . b* u7 P- i2 V/ r; n3 Y2 u( \4 a对 bytomd 发起 post 请求 /create-key
    : F) t- _7 Z& W0 N{
    ! b" a- g, I% {  s  "alias": "create_key_test",! N0 X$ [) s) w; U3 \, c
      "password": "createkeytest",
    7 S& D9 h. V' c, k, a. g9 H2 e  "language": "en"
    $ ~8 _& I+ u3 ~) D; G; u9 Q}  p0 O9 j  y2 x7 p

    0 t0 l  a" B; Y) }3 e可以看到 响应中 显示了 xpub 和 助记词% R8 b' J  g  o/ A4 z$ J# Y
    由于修改了源码,添加了打印信息,bytomd 命令行也打印出了相印的 xprv 和 xpub2 p1 U: I6 J/ K% l2 m% ~3 ]

    . x+ T3 k8 X7 z8 N* h3 K. J2 N步骤
    0 e: s8 _) q; ^* e# s0 ^如何通过导入助记词恢复密钥呢?
    9 G2 C$ n' L" L% Z( h假设目前 已经有一个 xprv# g/ ]( c/ K: y. z- |9 K7 T/ i% S
    50db5bfe21b08462972eadbce08ec92d078a45fa7a280d175a823f9e457faf447d1f501b69f895b830138fabc6f91e2b3b3c8df26642a34be4af27886b9134dc
    " X* z' u& p' F对应的 助记词为
    . r/ r" w8 ]* \7 O3 }' [- }pudding
    / j  p' M  ~/ aroom
    + T6 Q$ o: r6 Z" k+ u$ Z$ z0 Kbusiness+ C. R% T9 h3 W$ z. N
    river
    ' a! w: D- }$ b* Vpattern
    7 G$ ]+ c: q9 d# k5 e' kbox
    + A( O! n3 a" B  _" a! l5 Asnap# ^$ ]) D) i" C+ ~" I5 E
    merit  u* ]! E4 S: j. `9 R
    unfold
    $ X, Z% X9 O! h8 [& o) I- B/ zspeak9 ?* `/ W6 V/ o8 }
    hat
    ! `3 n: p5 g, f( d4 |+ Mtask
      D. t( ?6 m+ t# n- y1 d发起 post 请求 /create-key0 u! f( C$ m* q0 g8 }0 `
    {
    8 q; o; ?3 c% N2 E$ F5 x8 E( Q  "alias": "nnemonic_test",6 `8 }& a' d0 t
      "password": "nnemonicnnemonic",
    ( Y/ G/ |; V/ ~  "nnemonic": "pudding room business river pattern box snap merit unfold speak hat task",! |, j) D& Q9 @" C( a6 g( N* u" ?& p
      "language": "en"
    6 y; Q# `5 G' F% z}* c3 M5 @' ~2 U
    返回相应:
    1 P: ~  V( G) ~, ^) A
    3 T* k; f& f2 F) F/ {" _, _bytomd 输出( W- T; A7 ?  L2 w

    5 w0 A2 u' Q$ x/ e$ F; |) |可以看到,恢复出来的 xprv 和 我们本来的 xprv 一致,验证成功。; n% W, S* R+ o+ Y+ j% D
    dashaboard 中也能见到我们恢复的 密钥。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

    用香烟做的云 小学生
    • 粉丝

      0

    • 关注

      0

    • 主题

      2