Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

用香烟做的云
77 0 0
比原项目仓库:
5 J) J5 f- A" t3 dGithub地址:https://github.com/Bytom/bytom9 g$ z8 M  F3 l5 ]- ?# K5 W' K" J
Gitee地址:https://gitee.com/BytomBlockchain/bytom
( v7 ]- u# F# d: q5 F背景知识
) Z* \! H5 W0 P0 p+ m4 iBytom 使用的 密钥类型为基于 ed25519 的 chainkd.XPub
8 E9 m& Z6 B& D( D/ A3 j( Z  m
  • 代码见 bytom/crypto/ed25519/chainkd
  • 文档见 https://chain.com/docs/1.2/protocol/specifications/chainkd`
    . f; B4 q4 l# {5 G

    4 D8 F* r" r) h, k预备
    7 j: _, T2 [% H9 T# M1 D' Z代码修改5 e# t! s# P1 E6 U; _7 B
    首先适当修改代码,添加一些打印输出,使得我们更好的进行验证。 如果只是想看 xpub ,而不关心 xprv(对于验证导入导出助记词功能来说已经够了)的话可以跳过这一步,不必修改源码
    1 d' K3 s+ N3 J: W4 ~  g  m% A( Z在 bytom/blockchain/pseudohsm/pseudohsm.go 中的
    + C6 Q7 O0 \8 ]& R/ tfunc (h *HSM) createKeyFromMnemonic(alias string, auth string, mnemonic string) (*XPub, error)
    . \+ _' @$ q5 X3 ]2 D  U( i添加输出打印 root XPub 对应的 私钥 和 公钥
    . t/ F0 n) x/ L$ X4 c/ ~" H: F4 Efunc (h *HSM) createKeyFromMnemonic(alias string, auth string, mnemonic string) (*XPub, error) {) ?+ O7 p) r8 U% i+ a
        // Generate a Bip32 HD wallet for the mnemonic and a user supplied password
    , `: t/ T8 n; S6 b    seed := mnem.NewSeed(mnemonic, "")+ O+ t) ~+ z* ~4 @9 g5 T
        xprv, xpub, err := chainkd.NewXKeys(bytes.NewBuffer(seed))/ E6 h, Q3 p5 [/ ]/ C1 h* Z8 Z
        if err != nil {
    % L; b  ]3 w9 I/ p        return nil, err
    ! b$ @- r" Q9 d# x6 @. G    }
    ' ]" g" L  N" {1 a" U7 y        & ^) [& j# b- y; c, Z  l7 U6 L) Q( {
        fmt.Println(hex.EncodeToString(xprv[:])) // Add info printing5 X- G4 \* n. P& a  e
        fmt.Println(hex.EncodeToString(xpub[:])) // Add info printing/ M& S3 g. k( i4 D! C
        id := uuid.NewRandom()
    9 \. k4 E! w, U) a  R1 l    key := &XKey{, w( r: A# n5 ^
            ID:      id,
    8 f) {' b, D3 g0 w) W; ~        KeyType: "bytom_kd",+ ~3 P3 t% G9 R
            XPub:    xpub,; {# u$ k1 G! e5 B6 Q
            XPrv:    xprv,
      o/ f6 f! g. J' ]$ h        Alias:   alias,
    3 R9 t7 f% n- D) l9 e  t) E9 @* k5 I    }! E3 V8 |3 `" t! K
        file := h.keyStore.JoinPath(keyFileName(key.ID.String()))
    ) L4 j& f2 m& F" {) L; g# U    if err := h.keyStore.StoreKey(file, key, auth); err != nil {0 H8 X4 Q* E1 d9 z2 a5 x
            return nil, errors.Wrap(err, "storing keys")
    - u1 |0 |( x- R' c) }6 V& ~    }
    . v4 R) f: `- V* ^5 n    return &XPub{XPub: xpub, Alias: alias, File: file}, nil
    # G* L, r. _& _( I5 X}  K9 v( c3 [: }# }& E
    工具准备
    9 T. @6 I9 a2 y5 Y0 m8 N0 m" R因为 bytomd 目前 dashboard 钱包图形界面还没有助记词相关功能,我们需要准备工具使用 POST 请求来使用。比如 curl 或者 postman' G1 s) c# S$ D0 \
    获取密钥对应助记词) q1 j2 f! D' C# A/ r8 Y" y* u0 i. ]
    dashboard 目前还没有 从 密钥导出助记词的功能,现有只是在创建密钥时有助记词相应输出信息。可以修改源码在查看密钥时 打印对应助记词。
    7 p0 ^0 m. S% Q# Q, _( h6 J因为只是测试,这里为了方便,直接查看在创建密钥时返回的助记词。
    : Q- i# O( z7 U1 r对 bytomd 发起 post 请求 /create-key
    # ?7 o6 r" ~/ @# z' U2 x{7 T+ l% P1 A+ o& r3 p# {
      "alias": "create_key_test",
    / R' r$ S* c4 O! G  "password": "createkeytest",  r: x, v/ L) V+ q" R+ M
      "language": "en"! O) a; {, z6 T3 z0 s$ H# t
    }
    ! N3 p' H' G& D5 R9 P, ~
    ( V& k; k: v( V5 k可以看到 响应中 显示了 xpub 和 助记词
    * V6 P3 P4 u' u3 W4 p6 ?由于修改了源码,添加了打印信息,bytomd 命令行也打印出了相印的 xprv 和 xpub9 e: ~7 H& ^# \1 C/ N4 l

    $ C% f) i) b5 ^7 V- r/ w& T步骤6 ]! T" H" c/ W- y' U
    如何通过导入助记词恢复密钥呢?$ K* l( k9 y0 }- H: e3 ^
    假设目前 已经有一个 xprv9 w+ K6 q% M4 L
    50db5bfe21b08462972eadbce08ec92d078a45fa7a280d175a823f9e457faf447d1f501b69f895b830138fabc6f91e2b3b3c8df26642a34be4af27886b9134dc+ W  Z8 t9 a4 X3 J
    对应的 助记词为# d0 P- b" M9 I- p% v& \2 {: W- O
    pudding
    # C# S& c$ ^5 x! }7 y6 c! H+ O7 ?room
    + f5 Q! q6 w0 W9 |: N* a+ J& q: |business) R# T- `" ~) W
    river
    5 J# w, k5 q- p% T5 R- mpattern
    " Y5 r3 u& ~' r8 k- b. H- Nbox# m( j: c9 G1 D
    snap
    ; P2 q5 u* X9 z* \) lmerit
    9 X6 c% b' J7 Munfold' k+ O9 j  R+ k3 W  `
    speak) V( d1 U+ _- _  c
    hat
    ! Y+ A2 k$ X) Mtask5 C: D' m! N$ d  R7 Y
    发起 post 请求 /create-key
    6 v& x/ `( i: g( N{
    % m# `8 F' q8 `, P  "alias": "nnemonic_test"," @4 z" a$ f& m2 X- f
      "password": "nnemonicnnemonic",- M8 F4 ~' v- L) v- e
      "nnemonic": "pudding room business river pattern box snap merit unfold speak hat task",: Z/ `# C3 J, D8 p
      "language": "en"
    " z. y9 H" H) L& ]& \}- D/ g# a, j# T
    返回相应:
    ! r7 S1 {" J) o3 y* \) R/ _- m% F+ m3 t* k1 Y# s( ~" \
    bytomd 输出
    ) z6 }9 E% K* u- o! b
    . x& m; y) d' P4 ]- ?$ |可以看到,恢复出来的 xprv 和 我们本来的 xprv 一致,验证成功。- F- s/ J  M$ Q) j9 B1 y2 ^
    dashaboard 中也能见到我们恢复的 密钥。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      2