


シリーズ: Zero to Zero Knowledge
ニーモニック・シードフレーズは、暗号資産における最も重要な要素のひとつである セルフカストディ を支えています。
今日は、シードフレーズがどのように生成され、ウォレットで使われるのかを学びます。
リカバリーフレーズは BIP-39 仕様によって定義されており、現在もっとも一般的に使われているリカバリーフレーズの形式です。
リカバリーフレーズの作成は、まず ランダム性 を生成することから始まります。エントロピーが大きいほど、セキュリティは高くなります。128ビット のエントロピーは、ほとんどのユーザーにとって十分と考えられています。

初期エントロピーの長さに応じて、リカバリーフレーズの長さは 12語から24語 になります。
まず 128ビット のエントロピーを生成します。
エントロピーを SHA256 でハッシュ化します。このハッシュの先頭数ビットがチェックサムになります。
これにより、エントロピーに固有のフィンガープリントが与えられます。

合計132ビット(128ビットのエントロピー + 4ビットのチェックサム)を、11ビットずつの塊に分けます。
各11ビットの並びは、10進数(0〜2047)に変換されます。
BIP-39の単語リストには、2048語 がちょうど含まれています(英語、スペイン語、中国語など)。
これらの数値を使って、単語リスト内の対応する単語を見つけます。

結果: これで、安全で人間が読みやすい12語のリカバリーフレーズができました!
リカバリーフレーズを使うことで、ウォレットは支払いアドレスや複数のウォレットアカウントを作成するための鍵を生成できます。
生成される鍵は 決定論的 です。つまり、同じ入力からは常に同じ出力が得られます。
ウォレットの seed は、ニーモニックフレーズから Key Derivation Function (KDF) を用いて導出されます。
これにより、64バイト(512ビット) の seed が生成されます。

seed は2つの32バイト列に分割されます:
これらは、子鍵を導出する Hierarchical Deterministic (HD) Wallets で使用されます。
Zcash では、マスター seed を損なうことなく、サブツリーに対して viewing authority または spending authority を独立して委任できます。
ZIP-32 は、Zcash のプライバシー機能に合わせて調整された階層的決定論的鍵生成の標準を定義しています。
Expanded Spending Key から、以下を導出します:
異なる導出メカニズムによって、シールドプール(Sapling と Orchard)全体で送金者に渡すのに適した外部アドレスが生成されます。

Zcash はまた、Auto-Shielding のようなウォレット操作のための 内部アドレス もサポートしています。
ZecHub (@ZecHub) によるオリジナルスレッド
https://x.com/ZecHub/status/1624125037945946145
このページは、ZecHub wiki のために元の Zero to Zero Knowledge スレッドをもとに作成されました。