
暗号資産を保有したことがある人なら、まず間違いなく同じ警告を耳にしたことがあるはずです。「シードフレーズを守れ」と。紙に書かれた12個または24個の単語さえあれば、それを手にした誰もが、世界中のどこからでもあなたのウォレットを空にできます。その一連の単語は、ほとんどのセルフカストディウォレットの背後にあるセキュリティモデルそのものであり、それこそが問題なのです。失えば資金は消えます。誰かにコピーされても資金は消えます。一度の不注意、一瞬の油断、巧妙なフィッシングサイトひとつで、結果はどれも同じです。
2-of-2 マルチシグは、この脆さに対する最も導入しやすい答えです。ウォレットの鍵を二台のデバイスに分けることで、いずれかひとつのシード、画面、署名だけではコインを動かせないようにします。本記事では、その仕組み、なぜ重要なのか、そしてどのような攻撃を防げて、どのような攻撃は防げないのかを解説します。
単一シードという単一障害点
ほとんどの暗号資産ウォレットは、スマートフォン上にあろうと、ブラウザ拡張機能上にあろうと、ハードウェアデバイス上にあろうと、ひとつのシークレットを中心に構築されています。そのシークレットがシードフレーズです。ウォレットを初めてセットアップするときに生成される単語列で、そのウォレット内のあらゆる秘密鍵はそこから数学的に導出されます。シードフレーズを持つ者は誰でも、そのウォレットが対応するあらゆるブロックチェーン上の全コインに対して、完全かつ取り消し不能な支配権を握ります。
これは驚くほど便利です。同時に、単一障害点でもあります。
あなたがコインを保有しようとする年月の間に、そのシークレットが何を生き延びなければならないかを考えてみてください。家に侵入して引き出しの中の紙切れを見つける泥棒を生き延びなければなりません。火事、洪水、好奇心旺盛な子どもを生き延びなければなりません。クリップボードやスクリーンショットをスキャンするマルウェアに感染したノートパソコンを生き延びなければなりません。あらゆるフィッシングメール、偽のブラウザポップアップ、単語を「認証」フォームに入力させようとする「サポート」電話を生き延びなければなりません。今は予測できない、あなた自身の将来のミスをも生き延びなければなりません。
2022 年、FBI は米国の消費者だけで暗号資産関連の盗難・詐欺により 25 億ドル超の被害が出たと推計しており、その大半は単一のシークレットの漏えいに起因していました。Mt. Gox、Bitfinex、Ronin ブリッジ — 名の知れた暗号資産の大事件はどれも同じ形をしています。ひとつのシークレット、ひとつの侵害、取り返せないひとつの送金です。
2-of-2 構成は、こう宣言する方法です。「自分のコインは、盗まれた付箋紙一枚で消える距離にあってはならない」と。
M-of-N マルチシグの概略
マルチシグ(「multi-signature」の略)は、トランザクションを送信するために複数の署名を必要とするウォレットです。一般形は M-of-N と呼ばれ、合計 N 個の鍵があり、コインが動く前にそのうち任意の M 個が署名しなければなりません。
<span id="signer"></span>署名者とは、その N 個の鍵のうちの 1 つを保持するデバイスや主体のことです。実際には、署名者は通常、独立したハードウェアまたはソフトウェアです。スマートフォン、机の上のハードウェアウォレット、ノートパソコン、共同署名サービス、あるいは信頼できる友人でもあり得ます。重要な性質は、署名者が互いに独立していることです — そのうちのひとつを侵害しても、攻撃者が他のいずれかにアクセスできるようになってはいけません。
<span id="threshold"></span>閾値(M)は、送金に必要な署名の数です。閾値が 2 の場合、N 人の署名者のうち 2 人がそれぞれ承認し暗号学的に署名しなければ、ブロックチェーンはそのトランザクションを有効と認めません。2-of-3 ウォレットは 3 人の署名者を持ち、そのうち任意の 2 人を必要とします。3-of-5 ウォレットは 5 人の署名者を持ち、そのうち任意の 3 人を必要とします。閾値はウォレット作成時に固定され、いかなる企業でもなく、ブロックチェーン自身によって強制されます。
閾値と署名者数は、ともにウォレットのセキュリティモデルを定義します。すなわち、あなたが送金するためにいくつのことが正しく揃う必要があるか、そして泥棒が送金するためにいくつのことが同時に間違いを起こさなければならないか、です。
2-of-2 という固有のモデル
<span id="2-of-2"></span>2-of-2 マルチシグでは、閾値が署名者の総数に等しくなります。鍵はちょうど 2 つで、すべての送金にその両方の署名が必要です。予備もなく、バックアップ署名者もなく、頼れる過半数もありません。両方のデバイスが承認するか、トランザクションが発生しないかのいずれかです。
これは、依然として意味のある保護を提供する、最もシンプルなマルチシグ構成です。2-of-3 と比較して、セットアップが容易で — 管理する署名者は 3 つではなく 2 つだけ — 予備の鍵を保管する第三者や場所を選ぶ必要もありません。トレードオフとして、2-of-2 には組み込みの復旧経路がありません。2 つの署名者のいずれかが恒久的に失われたり破壊されたりすると、そのアドレスからコインを使えなくなります。2-of-2 における復旧は、各署名者のシードをそれぞれ別個にバックアップすることで対応し、通常はデバイス本体とは離れた場所に保管する密封された紙またはスチール製バックアップを用います。
セルフカストディユーザーにとって最も一般的な 2-of-2 の組み合わせは、「スマートフォンとハードウェアキー」または「スマートフォンと密封された 2 つ目のデバイス」です。ユーザーは毎回、両方で署名します。
ウォレットがアドレスを見つけるしくみ:BIP48
<span id="bip48"></span>BIP48 — Bitcoin Improvement Proposal 48 — は、マルチシグウォレットが各署名者のシードフレーズから公開鍵とアドレスをどう導出するかを、ソフトウェアベンダー間で可搬な形で定めた技術標準です。あるアプリで作成された 2-of-2 ウォレットが、何年か後に別の互換アプリで再オープン、監査、復旧できるのはこの BIP48 のおかげです。
簡略版はこうです。各署名者のシードフレーズは、決定論的なパスに沿って鍵の階層に変換されます。BIP48 はマルチシグウォレットの正確なパスを規定しており、レガシーアドレス、SegWit、ネイティブ SegWit のいずれを使っているかを記録するスロットと、シード内のどの「アカウント」が使われているかを示すスロットを含みます。2 人の署名者がそれぞれ同じ BIP48 パスに沿って公開鍵を導出すると、ウォレットはその 2 つの公開鍵を 1 つのマルチシグアドレスにまとめます。そのアドレスへ送られたコインは、元の 2 つのシードからの署名によってしか解錠できません。
なぜこの標準が重要なのでしょうか。標準がなければ、マルチシグウォレットはブラックボックスです。ベンダーが姿を消したら、あなたの手元には 2 つのシードフレーズが残り、それらが守るアドレスを再構築する可搬な方法は存在しません。BIP48 はアドレスを純粋にシードとパスの関数にします — 標準とシードを持っている人なら誰でも、いかなる企業にも依存せず、永久にウォレットを再構築できます。
Ethereum や EVM チェーンは別の仕組み(スマートコントラクトウォレットや ERC-4337)を使いますが、ユーザーから見えるモデルは同じです。2 人の署名者、1 つのアドレス、両方が必要、です。
2-of-2 が実際に止めるもの
2-of-2 の価値を最もはっきり見るには、具体的な攻撃を順に見ていき、こう問うとよいでしょう。「攻撃者がひとつではなく、独立した二つのデバイスを侵害しなければならなくなったとき、何が変わるか?」
フィッシング。 ユーザーが巧妙な「ウォレット移行」リンクをクリックし、シードフレーズの 1 つを偽サイトに入力してしまいます。単一シードのウォレットなら、資金は数分で消えます — 攻撃者がシードをインポートして送金トランザクションをブロードキャストするからです。2-of-2 なら、攻撃者は今ウォレットの半分を持っているにすぎません。フィッシングページに一度も入力したことのない別のデバイスに置かれた 2 つ目のシードを併せて盗まない限り、攻撃者は 1 枚のコインも動かせません。フィッシング被害は、壊滅的なものから、せいぜい肝を冷やす程度に格下げされます。
スマートフォンやノート PC 上のマルウェア。 クリップボードを乗っ取るマルウェアや情報窃取型マルウェアが、署名デバイスのひとつを侵害したとします。単一鍵のウォレットなら、そのデバイスが何らかのトランザクションを送ろうとした瞬間、マルウェアが宛先アドレスを差し替え、ユーザー自身がそれに署名してしまいます。2-of-2 では、2 つ目のデバイスが、マルウェアの支配下にない画面に本物の改ざんされていないトランザクション詳細をユーザーに表示します。ユーザーは食い違いを見て、共同署名を拒否します。
デバイスの紛失。 ユーザーのスマートフォンが電車内で盗まれます。PIN だけで保護された単一署名のホットウォレットなら、決意ある攻撃者は数時間でシードを抽出できます。2-of-2 では、紛失したスマートフォンは 2 人いる署名者のうちのひとりにすぎません — 単体では役に立ちません。ユーザーには、生き残った署名者とスマートフォンのシードバックアップを使って、資金を新しいアドレスへ移すための時間があります。
強要(「5 ドルのレンチ攻撃」)。 物理的にアクセスできる誰かがユーザーにシードフレーズを要求します。単一シードでは、応じることは全損失を意味します。2-of-2 では、2 人の署名者が物理的に異なる場所に置かれている場合 — 例えばひとつは自宅、ひとつは銀行の貸金庫、あるいはひとつは信頼できる共同署名サービスの手元 — ユーザーは本当にその場で送金を完了できません。攻撃者は、そもそもこの種の攻撃を仕掛ける動機となる即時の見返りを奪われます。
いずれの場合でも基本原理は同じです。短い時間枠の中で独立した二つの侵害を成立させることは、一つの侵害よりはるかに難しい問題です。
2-of-2 が守ってくれないもの
マルチシグは魔法ではありません。意図的に悪意あるトランザクションに署名してしまうことは防げません — 両方のデバイスが同じ誤った宛先アドレスを表示し、それでもあなたが承認してしまえば、ブロックチェーン側には知る術がありません。2 つのバックアップを同じ火事や洪水で失うことも防げません。だからこそ、2 つのバックアップは物理的に離れた場所に置くべきなのです。ウォレットソフトウェア自体のバグも防げません。ただし、これらのウォレットがオープンソースで BIP48 によって可搬であるという性質のおかげで、閉じたカストディアルシステムでは不可能な仕方で、そうしたバグを監査し回避することができます。そして、十分に巧妙な詐欺に応じて、ユーザー自身が両方のデバイスで自発的にコインを譲り渡してしまうことも防げません。閾値はハードルを上げるだけで、ユーザーをループの外に出すわけではありません。
自分で試してみる
2-of-2 マルチシグを腑に落とす最も良い方法は、実際にひとつ設定して、現実のトランザクションがブロードキャストされる前に二度の承認を必要とする様子を見ることです。SSP Wallet は最初からまさにこのモデルを中心に設計されています — スマートフォンとブラウザが 2 人の署名者として動作し、舞台裏に潜む単一シードモードは存在しません。
最初の SSP ウォレットをセットアップする では、ペアリング、バックアップ、そして最初の署名済みトランザクションまでを順を追って解説しています。


