Hi 游客

更多精彩,请登录!

比特池塘 区块链技术 正文

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

用香烟做的云
139 0 0
比原项目仓库:
- w  r. X* m6 _9 [Github地址:https://github.com/Bytom/bytom. d. B: V1 L( z: G4 o4 Y; b
Gitee地址:https://gitee.com/BytomBlockchain/bytom6 v4 _9 T* P/ e9 j
背景知识
6 K. ^+ d6 k0 M5 k- O2 UBytom 使用的 密钥类型为基于 ed25519 的 chainkd.XPub' ?0 m( q' ~# d7 h3 D
  • 代码见 bytom/crypto/ed25519/chainkd
  • 文档见 https://chain.com/docs/1.2/protocol/specifications/chainkd`: j5 V2 g7 D/ K/ \: q

    ( _0 R6 Q4 p; J% v预备4 Z/ G% J& a. J
    代码修改7 M% y" Q$ ]& W- {: n; Q0 l
    首先适当修改代码,添加一些打印输出,使得我们更好的进行验证。 如果只是想看 xpub ,而不关心 xprv(对于验证导入导出助记词功能来说已经够了)的话可以跳过这一步,不必修改源码5 y, C0 y/ c4 |( J9 n( ^- O5 T
    在 bytom/blockchain/pseudohsm/pseudohsm.go 中的
    . Y: {, y' h1 Rfunc (h *HSM) createKeyFromMnemonic(alias string, auth string, mnemonic string) (*XPub, error)( X# Z' F+ Z4 V3 B1 t
    添加输出打印 root XPub 对应的 私钥 和 公钥
      Q. b( D) M9 tfunc (h *HSM) createKeyFromMnemonic(alias string, auth string, mnemonic string) (*XPub, error) {
    # d3 J/ ~6 o5 Z! }: W7 S    // Generate a Bip32 HD wallet for the mnemonic and a user supplied password
    ) p; z1 g# c: e7 }    seed := mnem.NewSeed(mnemonic, "")
    & y% x) a& f+ Q0 {- b    xprv, xpub, err := chainkd.NewXKeys(bytes.NewBuffer(seed))
    ) \1 \6 U# X1 P! ]- P0 u# Z  j    if err != nil {
    ' ]  _' X8 ]7 y* u7 X        return nil, err' C/ P% _5 d0 r5 e8 c0 H& C
        }6 u" k3 i1 O$ K
            
    ) K8 G& s( v9 {0 x- l" D: n    fmt.Println(hex.EncodeToString(xprv[:])) // Add info printing8 R1 h( [) O& E$ \$ H. j/ D  u
        fmt.Println(hex.EncodeToString(xpub[:])) // Add info printing4 r& x- s3 I( V& ?
        id := uuid.NewRandom()0 a* [4 Y+ p9 z2 W8 h, }
        key := &XKey{2 y9 b, ^" E! c
            ID:      id,
    % S: J& c/ t2 y3 Y( `: N( W        KeyType: "bytom_kd",
    0 |8 i3 |  [5 u! Y. _        XPub:    xpub,
    9 O# m+ z- M: }7 T% q! ^: Y        XPrv:    xprv,
    6 W$ n: ~5 [2 N        Alias:   alias,
    / y  f- n) ]$ Q    }
    - Y0 e, x/ J. L. }    file := h.keyStore.JoinPath(keyFileName(key.ID.String()))8 U7 P7 r7 b/ L% Z/ i
        if err := h.keyStore.StoreKey(file, key, auth); err != nil {6 m7 @1 p) V2 {, z7 [! _. y
            return nil, errors.Wrap(err, "storing keys")- \- O5 d6 Y, W. T! H8 i8 o4 k$ j, n% t
        }! w4 V* F5 w5 [
        return &XPub{XPub: xpub, Alias: alias, File: file}, nil
    6 R! r  y+ c1 N- t; b}
    7 O/ J1 G( N! H& k! g6 o* ?  J) U工具准备* k7 x0 x; `) f/ ~7 J9 b: d
    因为 bytomd 目前 dashboard 钱包图形界面还没有助记词相关功能,我们需要准备工具使用 POST 请求来使用。比如 curl 或者 postman
    ( X* ?/ _1 u$ R1 S" z获取密钥对应助记词
    3 k$ ?2 u/ x" t% Ydashboard 目前还没有 从 密钥导出助记词的功能,现有只是在创建密钥时有助记词相应输出信息。可以修改源码在查看密钥时 打印对应助记词。. L1 D  I3 }) l& X) e
    因为只是测试,这里为了方便,直接查看在创建密钥时返回的助记词。
    % [9 W: U( C* {9 ~5 u; W对 bytomd 发起 post 请求 /create-key( S2 b0 }4 [5 O! \
    {( A( {9 J# v# n
      "alias": "create_key_test",
      V% @! P& o! S% x  "password": "createkeytest",
    , X, Y8 j2 w# X) S* k+ s# b  "language": "en"$ I- r& f8 j4 q. N. y; \& }
    }4 r" ?! b  H. y% h% }4 ~

    . X+ }  \, Z* P4 L) P可以看到 响应中 显示了 xpub 和 助记词
    & x3 N/ Y" V4 j) ~由于修改了源码,添加了打印信息,bytomd 命令行也打印出了相印的 xprv 和 xpub  Q# i- e) F5 _. A  N

    : X/ l; o" e7 j6 R1 j) l& z0 r) h, j* k步骤
    ; W; A2 {+ n! H8 L如何通过导入助记词恢复密钥呢?( d& q' j2 d! A! p/ O
    假设目前 已经有一个 xprv
    - ]) i3 c+ Q9 ^7 o" l50db5bfe21b08462972eadbce08ec92d078a45fa7a280d175a823f9e457faf447d1f501b69f895b830138fabc6f91e2b3b3c8df26642a34be4af27886b9134dc, M2 P' S% @7 E# t  Z0 H
    对应的 助记词为
    & R! o' ?( X8 G+ q5 X  Hpudding
    - [& y; a1 m* ^7 Y+ K& Eroom
    4 p7 U2 \$ T! `/ ~: d" Kbusiness' d3 ~; X. w- ?6 d4 y3 z) m0 L6 U9 N
    river
    ' W% F, ?/ u" V; wpattern
    3 j& U* o* @. `9 y; \3 Cbox2 K& k6 f! u: @
    snap# t3 @, m3 ]. m% [
    merit  U* S& G2 |& U, q6 ]7 x! c
    unfold/ ?! J2 {: M1 ]3 K0 v' h
    speak6 H8 a6 n# K9 p$ K
    hat; p& F8 {# Z- d7 t7 d
    task
    ! x( x# g0 x$ Y发起 post 请求 /create-key$ v- _- w7 R( k) s( O. j1 s
    {
    6 O& ^% P5 [! f& v2 l8 `7 W: b  "alias": "nnemonic_test",; J7 b) c! u. A, ]
      "password": "nnemonicnnemonic",. z0 u/ P) O; C" @
      "nnemonic": "pudding room business river pattern box snap merit unfold speak hat task",
    / f$ E: M, |' _4 w1 Z  "language": "en"1 y" N$ s2 h( K; z4 h
    }
    / W7 q  q' l& N* Z3 R1 M. R; X返回相应:( m% m) |' h; q" D# {  J2 I
    , b! U" R6 d# s4 `" g" _  `; [% w
    bytomd 输出$ o$ K; p' U1 {
    0 T1 K, }0 j& x
    可以看到,恢复出来的 xprv 和 我们本来的 xprv 一致,验证成功。
    ' u8 b% |# T. Z6 P6 Vdashaboard 中也能见到我们恢复的 密钥。
  • BitMere.com 比特池塘系信息发布平台,比特池塘仅提供信息存储空间服务。
    声明:该文观点仅代表作者本人,本文不代表比特池塘立场,且不构成建议,请谨慎对待。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    成为第一个吐槽的人

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

      0

    • 关注

      0

    • 主题

      2