![見出し画像](https://assets.st-note.com/production/uploads/images/107671297/rectangle_large_type_2_0d5dbb4db0855128012d31c9c6d0cb87.png?width=1200)
【完全保存版】キーストアファイルの構成を学んでいこう
今回は、thirdwebのローカルウォレットの作成時に出てくる、キーストアファイルの構成について学んでいきたいと思います。
注意
今回はテスト用のウォレットであるため、公開していますが、実際に扱うキーストアファイルは他の人には見せず、厳重に保管してください。
1 全体の構成について
まず、下のように、5つから構成されています。
① address
② id
③ version
④ crypto
⑤ x-ethers
![](https://assets.st-note.com/img/1686179764144-2Ab6h6fHMn.png?width=1200)
上の3つは下のようになっています。
addressがウォレットアドレスを示しているのですね。
![](https://assets.st-note.com/img/1686180028335-LgFZzA21hj.png?width=1200)
次に、こちらの「crypto」は暗号化された秘密鍵とその複合化に必要な情報が入っています。
![](https://assets.st-note.com/img/1686180229155-jYZcud9gxj.png?width=1200)
最後に、「x-ethers」です。
こちらには、ethers.jsライブラリが追加した情報が入っています。
具体的には、ニーモニックフレーズの暗号文などが含まれています。
![](https://assets.st-note.com/img/1686180484977-LFGlCqOTRC.png?width=1200)
2 「crypto」について
では、ここから「crypto」の中身について見ていきます。
1 「cipher」について
まずは、「cipher」からです。
こちらは、暗号化に使用されるアルゴリズムの名前が含まれます。
![](https://assets.st-note.com/img/1686180588138-HE6GuC4Ikx.png?width=1200)
ここでは、AES128-CTRが使われていることがわかりました。
![](https://assets.st-note.com/img/1686180813723-gRMJWWzzlF.png?width=1200)
2 「cipherparams」について
次は、「cipherparams」についてです。
その名の通り、暗号化アルゴリズムのパラメータを定義しています。
具体的に使われているのが、「iv」である、初期化ベクトル(Initialization Vector)です。
![](https://assets.st-note.com/img/1686180938354-hUU5VBJSxG.png?width=1200)
初期化ベクトルというランダムな値も暗号化に用いています。
これによって、同じ平文からでも異なる暗号文が生成されるようになっています。
3 「ciphertext」について
次は、「ciphertext」です。
こちらには、秘密鍵を暗号化したものが入っています。
実際に「ciphertext」から公開鍵を作成したところ、実際のウォレットアドレスとは別のウォレットアドレスが作られました。
![](https://assets.st-note.com/img/1686181209008-3kE7u39Ac2.png?width=1200)
4 「kdf(Key Derivation Function)」について
次は「kdf」についてです。
こちらは鍵導出関数(Key Derivation Function)です。
パスワードから安全な鍵を導出するために使用されます。
具体的には、「cipertext」の秘密鍵を複合させるための鍵を導きます。
![](https://assets.st-note.com/img/1686181815408-5PnlbRShv2.png?width=1200)
5 「kdfparams」について
「kdfparams」は以下のようになります。
ソルトというランダムな文字列を使って、同じパスワードからでも、異なる鍵を導きます。
![](https://assets.st-note.com/img/1686182210325-yBtfb7jH5y.png?width=1200)
6 「mac」について
最後に、「mac」です。
これは、Message Authentication Code(メッセージ認証コード)で、暗号文が改ざんされていないことを確認するために使用されます。
![](https://assets.st-note.com/img/1686182362164-qguqVRHIJK.png?width=1200)
3 「x-ethers」について
1 「client」について
まずは「client」についてです。
「ethers.js」を使用していることがわかります。
![](https://assets.st-note.com/img/1686189865555-OeVrIuwr7J.png?width=1200)
2 「gethFilename」について
次は、「gethFilename」です。
その名の通り、ファイル名です。
ウォレットアドレスから来ていますね。
ちなみに、「Geth」とはイーサリアムの「クライアント実装」の一つです。
![](https://assets.st-note.com/img/1686190115603-BgxITf4zdX.png?width=1200)
3 「mnemonicCounter」と「mnemonicCiphertext」について
次は、「mnemonicCounter」と「mnemonicCiphertext」です。
ニーモニックフレーズを暗号化した結果を保存しています。
ニーモニックフレーズは、初めてウォレットを作るときなどにでてくる、12〜24の英語の単語のリストのことです。
![](https://assets.st-note.com/img/1686190361977-xssmtMIKwh.png?width=1200)
「mnemonicCounter」はニーモニックフレーズを暗号化する際に使用されるカウンタです。
一方、「mnemonicCiphertext」は暗号化されたニーモニックフレーズです。
4 「path」について
次の「path」 はHDウォレット(階層的決定性ウォレット)の「パス」を表しています。
下のような構成になっています。
![](https://assets.st-note.com/img/1686190933355-TLSGhrFHsQ.png?width=1200)
5 「locale」と「version」について
最後に「locale」は使用言語(英語)、「version」はethers.jsのバージョンを表しています。
![](https://assets.st-note.com/img/1686190997609-gXV6djkCRL.png?width=1200)
以上です。
最後までありがとうございました。
いいなと思ったら応援しよう!
![ユウキ](https://assets.st-note.com/production/uploads/images/52347520/profile_e7d36b385c74618d7fec56da47f68a35.jpeg?width=600&crop=1:1,smart)