見出し画像

【完全保存版】BIP32をしっかりと理解しよう!

1 概要

BIP32 (Bitcoin Improvement Proposal 32) は、階層的決定性 (Hierarchical Deterministic, HD) ウォレットの標準を定義しています。

https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki

この標準により、一つのシードから無限に多くの鍵ペア(公開鍵と秘密鍵のペア)を生成できるようになります。

2 主な特徴

BIP32の主な特徴と利点は以下の通りです。

1 階層構造

HDウォレットは階層構造を持ち、親子関係を持つ鍵ペアを生成できます。

https://medium.com/@robbiehanson15/the-math-behind-bip-32-child-key-derivation-7d85f61a6681

これにより、異なる用途(例えば、支払い用、貯蓄用)に対して異なる鍵生成し、管理できます。

2 決定性

一つのシード(通常、12または24の単語からなる)からすべての鍵を生成できるため、バックアップが非常に簡単です。

シードを保存しておけば、全ての鍵を再生成することが可能です。

3 公開鍵の拡張性

拡張公開鍵(Extended Public Key, xpub)を使用すると、公開鍵を複数生成するための情報を共有できます。

https://learnmeabitcoin.com/technical/keys/hd-wallets/extended-keys/

これにより、受信アドレスを生成することができますが、秘密鍵は公開されません。

3 利点

1 セキュリティ

秘密鍵を安全に保管しながら、xpubを使って受信アドレスを管理できるため、セキュリティが向上します。

2 利便性

シードフレーズ一つで全ての鍵をバックアップできるため、複数の秘密鍵を管理する手間が省けます。

3 柔軟性

鍵の階層構造により、異なる用途やアカウントごとに鍵を分けることができます。

4 BIP32の使用例

1 バックアップと復元

一つのシードフレーズを使って、全ての鍵をバックアップ・復元することができます。

2 支払いアドレスの生成

拡張公開鍵を使って、異なる受信アドレスを生成し、取引ごとに新しいアドレスを使用することができます。

3 複数アカウントの管理

階層構造を利用して、個人用、ビジネス用、投資用など、異なるアカウントごとに鍵を分けて管理することができます。

5 階層構造

BIP32は階層構造を持つ鍵生成方式であり、各レベルが異なる目的を持っています。

この構造により、異なるアカウントや用途ごとに鍵を分けて管理することができます。

1 m

ルートキー。マスターシードから生成される親キーです。

https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki

2 m/0'/

アカウントレベル。このレベルでは異なるアカウントを管理します。

アポストロフィ(')はハード化された鍵であることを示しています。

ハード化された鍵については、後ほど扱います。

https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki

なお、下のように、導くには、CKD関数(Child Key Derivation関数)を用いていることがわかります。

そして、それは、内容的には、 HMAC-SHA512を使っていることもわかります。

https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki

3 m/0'/0/

チェーンレベル。内部チェーンと外部チェーンに分かれます。

通常、外部チェーン公開されるアドレス(例:受取用アドレス)に使用され、内部チェーンおつりアドレス(内部トランザクション)に使用されます。

https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki

4 m/0'/0/0

アドレスレベル。実際のアドレスを生成するための鍵です。

https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki

6 階層構造の具体例

このパスの階層構造は以下のように具体的な用途を分けることができます。

  • m/0': 個人用アカウント。

  • m/1': ビジネス用アカウント。

それぞれのアカウント内でさらに以下のように分かれます。

  • m/0'/0: 外部チェーン(受取用アドレス)。

  • m/0'/1: 内部チェーン(おつり用アドレス)。

そして、各チェーン内で実際のアドレスを生成します。

  • m/0'/0/0: 最初の受取アドレス。

  • m/0'/0/1: 2番目の受取アドレス。

7 ハード化された子鍵について

1 通常の子鍵とハード化された子鍵の違い

BIP32では、拡張鍵から生成される子鍵に「通常の子鍵」「ハード化された子鍵」の2種類があります。

https://learnmeabitcoin.com/technical/keys/hd-wallets/extended-keys/

2 通常の子鍵(Normal Child Key)

拡張秘密鍵と拡張公開鍵の両方から生成できます。

主に外部で公開して使用するための鍵(例: 受け取り用のアドレス)。

https://learnmeabitcoin.com/technical/keys/hd-wallets/extended-keys/

通常の子鍵は、拡張公開鍵を知っているだけで生成できるため、親の拡張公開鍵が漏洩した場合、すべての通常の子鍵が特定されるリスクがあります。

3 ハード化された子鍵(Hardened Child Key)

拡張秘密鍵からのみ生成できます。拡張公開鍵からは生成できません。

内部での秘密性を重視する用途(例: マスターウォレットの管理)。

https://learnmeabitcoin.com/technical/keys/hd-wallets/extended-keys/

ハード化された子鍵は、拡張公開鍵からは生成できないため、親の拡張公開鍵が漏洩してもハード化された子鍵は保護されます。

なお、インデックス2147483648 以上の値を使用(例: 0' は 2147483648 に対応

https://learnmeabitcoin.com/technical/keys/hd-wallets/extended-keys/

8 最後に

なお、この辺りを使って、

今回は以上です。

サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊