2012年まで、ウォレットのバックアップを取る作業は終わりのないものでした。元のプログラムは100個の準備された鍵をファイルに保存し、一度に1つずつ使用していました。100個目を過ぎると、初日に取ったバックアップには新しい鍵が含まれておらず、それを信頼していた人は最悪の形でそれを知ることになりました。この問題を解決するために、12の単語が存在します。
この提案は2012年2月にPieter Wuilleによってなされ、BIP-32と呼ばれています。アイデアは簡単に説明できます。各鍵をランダムに選ぶ代わりに、1つのシードを選び、常に同じ方法でそれ以外のすべての鍵をそこから派生させるというものです。今日取ったバックアップは10年後の鍵にも有効です。なぜなら、それらはすでに決定されているからです。ただし、まだ計算されていないだけです。
最初のステップは、前のレッスンで得た512ビットのシードをHMAC-SHA-512に通すことです。64バイトが出力され、それを半分に切ります。左の32バイトはマスター秘密鍵で、右の32バイトは新しいもの、チェーンコードです。この2番目の部分は、子鍵を知っても姉妹鍵について何もわからないようにするものです。

子鍵を派生させるのは1つの計算だけです。2つを組み合わせ、子の番号を追加し、同じ関数を通します。新しい秘密鍵と新しいチェーンコードが出力され、孫を生成する準備が整います。これは数十億の鍵の木であり、どの枝もシードから再計算可能で、保存する必要はありません。
この構造から最も便利なピース、拡張鍵が生まれます。秘密バージョンはxprvと書かれ、すべてを派生させます。公開バージョンはxpubと書かれ、公開鍵のみを派生させます。つまり、アドレスを生成しますが、支出能力はありません。店舗はxpubをサーバーにインストールし、各顧客に新しいアドレスを生成できますが、そのマシン内にはコインを移動させるものは何もありません。

この便利さには注意が必要です。xpubはそのアカウントが将来持つすべてのアドレスを明らかにし、したがってすべての履歴と残高を明らかにします。それは支出しませんが、すべてを伝えます。誰かにxpubを送ることは、全体の明細を開示することであり、その後閉じることはできません。
さらに、本当の数学的な罠があり、そこから派生パスのアポストロフィが来ています。通常の派生では、親のxpubを持ち、1つの子秘密鍵を取得できる人は、親の秘密鍵を推測でき、その鍵で家族全体を推測できます。強化された派生はこの逆方向を遮断します。親の秘密鍵を計算に使用するため、xpubは強化された子を生成することができません。

これでパスは魔法ではなくなります。m/84'/0'/0'/0/5では、mがルートです。アポストロフィ付きの84は目的で、どのアドレス標準が使用されるかを示し、次のレッスンのテーマです。次の0は通貨で、Bitcoinはゼロです。3番目の数字はアカウントで、同じシード内で個人の財務とビジネスの財務を分けることができます。最初の3つのレベルは常に強化されており、前の段落の理由からです。
最後の2つは、実用的な理由で強化されていません。4番目のレベルは、支払いを受けるために渡すアドレスには0、ウォレットが自動的に作成するお釣りのアドレスには1です。5番目は1ずつ進むカウンターです。これらの2つのレベルは一般的であるため、アカウントのxpubはそれらすべてを計算します。これは例の店舗が必要とするものです。
日常の詳細がレッスンを締めくくります。シードを復元する際、ウォレットはツリー全体をスキャンしません。順番にアドレスを探し、20個連続して動きがないと停止します。この20の制限は慣習であり、手動でカウンターのはるか先にアドレスを生成した人は、ブロックチェーンから消えていないのに画面からお金が消えたように見えるかもしれません。
パスの最初の数字、つまり目的について説明が必要です。これは、同じシードが1、3、またはbc1で始まるアドレスを表示するかどうかを決定し、なぜ2つの正直なウォレットが同じ12の単語に対して異なる残高を表示するのかを説明します。次のレッスンでは、44、49、84、86の標準について説明します。