🏗️

シードフレーズを実現したアーキテクチャは素晴らしい。

2023/04/24に公開

概要

最近、MetamaskのOG, OBユーザへのハッキングによりMetamaskの脆弱性が言及される中、シードフレーズの流出という説が浮上しています。そこでシードフレーズに関して徹底的に調べてきました。Account AbstractionのERC化が噂される中、本記事は時代に逆行していますが、シードフレーズは革新的なアーキテクチャによって実装されているので学んでおいて損はないです。革新的なアーキテクチャやアルゴリズムからこそ革新的なソリューションが生まれます。

シードフレーズとは

従来のアカウントには秘密鍵を用いてアクセスを行います。また、複数アカウントを保有する場合は複数の秘密鍵を管理しなければならないという問題がありました。しかしMetamaskLedgerなど多くのウォレットにはシードフレーズという12から24単語のユーザーフレンドリーな英単語を用いて異なるブロックチェーン上の異なる複数のアカウントへアクセスすることが可能です。私は最近までこれがデータベースによる管理によって実現されていると愚かな認識をしていました。しかし、実際は高度なアーキテクチャによって実装されていました。

HDウォレット(階層型決定性ウォレット)とは

シードフレーズ(ニーモニックフレーズ)に触れる前にMetamaskやLedgerなどが準拠しているBIP32という規格で定められた一般的なウォレットのアーキテクチャについて解説していきます。これがシードフレーズの根幹を成しているので、理解していく上で重要です。

マスターシードとは

シードフレーズというのはこのマスターシードを可逆暗号化した暗号の一種です。
そして、階層決定性ウォレットの決定性に当たるのがこのマスターシードです。マスターシードとは疑似乱数生成器から秘密鍵を生成する為に渡される エントロピー(乱数生成に影響を与える値) です。擬似乱数生成器の性質上同じのエントロピーからは全く同一の秘密鍵を生成します。このマスターシードによる決定性を用いることでマスターシードから秘密鍵を導き出し、ウォレットへのアクセスを可能にしています。

階層とは

階層型決定性ウォレットの階層型に当たるのがこのアーキテクチャです。これはブロックチェーンとそのチェーン上のアカウントを階層構造にして取り扱う意味論的なアプローチです。各々の階層で生成されるアカウントの秘密鍵は派生鍵と呼ばれ、前述のマスターシードとその階層の情報を織り交ぜたエントロピーから生成されます。この仕組みにより単一のシードフレーズで複数のブロックチェーン上の複数アカウントへのアクセスを可能にしています。

階層構造をチャートで表現

ここからはチャートというアプローチで階層を理解していきましょう。これはBIP44という標準的な階層を定義した規格を基にしたチャートです。HDウォレットの設計思想に関してはBIP32にて定義されていますが、階層の規格は定義されていませんでした。以下が階層の要素を解説したものです。

  • purpose: 採用している階層の規格です。MetamaskはBIP44を採用している為、44の値を取ります。
  • coin_type: ブロックチェーンの種類です。MetamaskはEVM互換のチェーンのみサポートしているので60の値を取ります。
  • account: チェーンで使用しているアカウントの番号が入ります。最初に作成されたものは0となります。
  • change: 外部アカウントか内部アカウントが入ります。Metamaskではこれ以下のディレクトリを使用しないので、0の値を取ります。
  • address_index: アカウント内で使う複数アドレスが入りますが、Ethereumではアカウントが複数アドレスを持つというアーキテクチャではないので、0の値を取ります。

Metamaskでアカウントを二つ作成した場合の階層

先ほどのチャートを踏まえて、EVM互換のチェーンのみをサポートしているMetamaskでは階層の要素にどのような値が入ってくるのかを再現します。

ニーモニックとは

前述のマスターシードをユーザーフレンドリーな英単語へ変換したのがこのニーモニックです。これはBIP39で定義されており、ハッシュ化したマスターシードとそのままのマスターシードを結合させバイト列へ変換し、11bit/フレーズで区切り、2048単語のワードリストから適切なものを選択し、12~24単語の文となるものです。12ワードで128bit,24ワードで256bitのデータを持つことになります。これによりシードフレーズが欠けた場合の補完をコモンセンスで行うことができるようになりました。

まとめ

このような革新的なアーキテクチャにより単一のシードフレーズで複数ブロックチェーンとアカウントへアクセスできるようになっています。ちなみに両者ともにBIP44へ対応している為、Metamaskで作成したシードフレーズをLedgerにインポートして使用することも可能です。とても便利ですが、これが流出時のリスクを高めているのは間違いないので、極度分散を推し進める人達からしたら良いものとは思えないかもしれません。

Discussion