frontendBaby

公開日

- 16 分で読めます

第3話 「メタマスクなど信用できるか」


信頼ゼロ社会を生きるWEB3.0原理主義エンジニアの奇妙すぎる日常に翻弄される僕 ~フルノードを立てなきゃDAppも使えません!

この物語は、WEB3.0の世界を楽しく学ぶことを目的に、生成AIを活用して執筆されています。 技術的な情報の正確性には細心の注意を払っていますが、その内容がすべて真実であることを保証するものではありません。 あくまで学習の補助ツールとして、肩の力を抜いてお楽しみください。


登場人物紹介

  • 私: DTPオペレータからエンジニアに転職したばかりの新米開発者
  • D氏: 40代半ば、極度の警戒心を持つWEB3.0原理主義者

第3話 「メタマスクなど信用できるか」

D氏から暗号化されたメッセージを受け取ってから3日が経った。フルノードの構築に四苦八苦していた私は、ようやく初期同期が完了したところだった。

「ブロック高: 22,213,179…同期完了!」

画面に表示されたメッセージに小さなガッツポーズをしたとき、再びD氏からのメッセージが届いた。

ウォレットの選定について話がある。
明日、秋葉原の某カフェで14時。
この座標で。
暗号化キーは前回と同じ。

添付されていたのは、緯度と経度の数値だけ。スマホの地図アプリで確認すると、秋葉原の裏通りにある小さなカフェだった。


翌日、指定された時間に私はそのカフェを訪れた。店内は薄暗く、客は数人しかいない。奥のテーブルに座るD氏の姿を見つけた私は、彼に近づいた。

「遅刻はしていませんよね?」

D氏は腕時計を確認し、無言でうなずいた。彼の前には、いつものノートPCと、見慣れない小さな機器が置かれていた。

「座れ」

私が席に着くと、D氏はまず店内を見回した。

「このカフェを選んだ理由が分かるか?」

「え?静かだからですか?」

D氏は小さく鼻で笑った。

「それも理由の一つだが、本質は違う。ここは個人経営の店だ。コーヒーは中央集権的なチェーン店より個人店がいい。チェーン店は全て同じ味に統制され、多様性が失われている。ブロックチェーンの分散化の理念に反する」

彼は真剣な表情でコーヒーを一口飲んだ。

「さて、本題だ。君はどんなウォレットを使っている?」

「MetaMaskです。会社のプロジェクトでも使っていますし、使いやすいので…」

言葉が終わる前に、D氏の表情が一変した。彼はコーヒーを吹き出しそうになり、慌てて口を押さえた。

「MetaMask?」彼は声を抑えながらも明らかな失望を含んだ口調で言った。「君は本当にWEB3.0を理解しているのか?MetaMaskを使うのは、秘密鍵をGoogleに献上するようなものだ!自ら檻に入る豚と同じ!」

「何か問題があるんですか?」

「問題?」D氏は鼻で笑った。「ブラウザ拡張機能としてのウォレットを使うということは、ブラウザという中央集権的なソフトウェアを信頼しているということだ。Chromeを使っているなら、Googleを信頼しているということになる」

彼はコーヒーを一口飲み、続けた。

「クイズだ」D氏は突然姿勢を正した。「ホットウォレットとコールドウォレットの違いを、温度で例えるなら何と言える?」

「えっと…ホットは熱いから、オンラインで常に接続されていて、コールドは冷たいから、オフラインで…」

「その通り!」D氏は珍しく私の答えを認めた。「ホットウォレットはインターネットに常時接続されているため、常に攻撃の危険にさらされている。まるで沸騰した鍋の中のカエルのようなものだ。一方、コールドウォレットはオフラインで保管されるため、理論上は安全性が高い」

彼は少し間を置いて、続けた。

「では、次の質問だ。秘密鍵とは何か?」

「秘密鍵は…えっと、ウォレットのパスワードみたいなもので…」

D氏は頭を抱えた。

「まったく!」彼は声を抑えながらも明らかに苛立った様子で言った。「秘密鍵はパスワードではない!秘密鍵は数学的に生成された一意の値で、対応する公開鍵とペアになっている。ブロックチェーン上のアドレスは公開鍵から派生し、秘密鍵はそのアドレスの所有権を証明する唯一の手段だ」

彼は深呼吸をして、落ち着きを取り戻した。

「MetaMaskのソースコードを確認したか?自分でビルドしたか?Chrome拡張として配布されているバイナリが、公開されているソースコードと一致しているという保証はどこにある?」

私は言葉に詰まった。確かに、MetaMaskをただダウンロードして使っていただけだった。

「でも、MetaMaskはオープンソースですよね?多くの人が使っているので、もし問題があれば…」

「『多くの人が使っている』から安全だと?」D氏は呆れたように言った。「歴史上、大衆が間違っていた例は数え切れないほどある。そもそも、オープンソースであることと、配布されているバイナリがそのソースから正しくビルドされていることは別問題だ」

D氏はノートPCを開き、ターミナル画面を見せた。

「私はMetaMaskのようなブラウザ拡張は一切使わない。代わりに、自分でソースコードを検証し、自分でビルドしたコマンドラインツールを使ってトランザクションを管理している」

画面には複雑なコマンドラインインターフェースが表示されていた。

「これは…自作のウォレットですか?」

「ウォレットという言葉は誤解を招く」D氏は言った。「ウォレットの本質は『秘密鍵の管理』と『トランザクションの署名』だ。それ以外の機能は全て付加的なものに過ぎない」

彼はテーブルの上の小さな機器を指さした。

「これが私の『ウォレット』だ。私の最高傑作だ!」

それは、カメラとディスプレイが付いた小型のデバイスだった。よく見ると、古いゲーム機を改造したような奇妙なデザインで、側面には手作り感満載の追加ボタンが取り付けられていた。液晶画面の周りには、何かの回路基板が露出しており、全体的に「秘密基地で作られた怪しいガジェット」という雰囲気を醸し出していた。

「これは自作のエアギャップデバイスだ。インターネットには一切接続されていない。トランザクションデータをQRコードとして受け取り、秘密鍵で署名し、署名済みトランザクションを再びQRコードとして出力する」

D氏は実演するように、ノートPCの画面に表示されたQRコードをそのデバイスで読み取った。デバイスの画面にトランザクション情報が表示され、彼が確認ボタンを押すと、新たなQRコードが生成された。

「このQRコードには署名済みトランザクションが含まれている。これをオンラインPCで読み取り、自分のフルノードを通じてネットワークにブロードキャストする」

私は感心しながらも、その複雑さに戸惑いを隠せなかった。

「それは…かなり手間がかかりますね」

「セキュリティに『手間』を惜しむべきではない」D氏は厳しい口調で言った。「秘密鍵がインターネットに接続されたデバイスに存在する限り、リスクは常に存在する」

彼は少し間を置いて、続けた。

「しかし、全ての人間がこのレベルの対策を取れるとは思っていない。だからこそ、最低限の対策として、ハードウェアウォレットの使用を勧める」

「Ledgerとか、Trezorですか?」

「それらも完全に信頼できるわけではない」D氏は言った。「ハードウェアの中身を自分で検証することは難しい。しかし、少なくともブラウザ拡張よりは安全だ」

彼はバックパックから小さな箱を取り出した。中には新品のハードウェアウォレットが入っていた。

「これを使え。これは私の命より大切なものだ」

D氏は厳かな表情で箱を私に手渡した。その重々しい態度に、私は思わず緊張した。

「本当にいいんですか?こんな大切なものを…」

「問題ない」D氏は意外にも軽く言った。「私は予備を10個持っている」

「え?」

「セキュリティに冗長性は不可欠だ。単一障害点を作らないことが基本だ」

彼は当然のように言い、続けた。

「ただし、以下の点に注意しろ」

D氏は指を立てながら列挙した。

「一、公式サイトからのみ購入し、パッケージが破損していないか確認すること。二、初期設定時にシードフレーズを紙に書き、デジタルデバイスには絶対に保存しないこと。三、シードフレーズのバックアップは複数の場所に分散して保管すること。四、大きな取引の前には必ずアドレスを複数の方法で確認すること」

私はうなずきながらメモを取った。

「そして最も重要なのが、ウォレットの使い分けだ」D氏は真剣な表情で言った。「主要な資産を管理するウォレットと、日常的にDAppと接続するウォレットは分けるべきだ」

「どういうことですか?」

「ブロックチェーンは透明すぎる」D氏は説明を始めた。「すべてのトランザクションが公開され、永続的に記録される。これはプライバシーという観点では大きなリスクとなる」

彼はノートPCに簡単な図を描いた。

「例えば、君がメインウォレットでDEXを使うと、君の保有資産や取引パターンが全て公開される。これは現実世界で言えば、銀行口座の残高と取引履歴を街頭に貼り出すようなものだ」

図には複数のウォレットアドレスと、それらを結ぶ矢印が描かれていた。

「私は複数のウォレットを階層的に管理している。最上位のコールドウォレットには主要資産を保管し、そこから必要最小限の資金だけを中間ウォレットに移す。さらにそこから、DApp接続用の使い捨てウォレットに少額だけを移す」

「使い捨て…ですか?」

「そう。一度使ったウォレットアドレスは再利用しない。これにより、行動パターンの追跡を困難にする」

D氏の説明は続いた。彼はIPアドレスの隠蔽方法、ブラウザフィンガープリント対策、さらにはTornado Cashのようなミキシングサービスの使用方法まで詳細に解説した。

「これらすべてを実践するのは難しいかもしれないが、少なくともウォレットの階層化だけは実践すべきだ」

私は圧倒されながらも、D氏の言葉に一理あると感じていた。

「わかりました。まずはハードウェアウォレットを導入して、資産を分散管理することから始めます」

D氏の表情が少し和らいだ。

「良い決断だ。ウォレットは君の資産への鍵だ。その管理を他人任せにするのは愚かなことだ」

彼はコーヒーを飲み干し、立ち上がった。

「今日はこれで終わりだ。次回は私の自宅で会おう。」

「自宅ですか?」

「ああ。座標と訪問時間は暗号化して送る」

D氏は会計を済ませ、店を出た。私も彼に続いた。

店の外で、D氏は古いアパートの方向を指さした。

「実はあそこに住んでいるのだ。もし興味があれば、今から案内しよう」

私は好奇心に駆られて同意した。

次回予告 「第4話:D氏の聖域」

D氏の自宅に招かれた私は、彼の生活空間の異常なまでの徹底ぶりに驚愕する。複数のサーバーが稼働する「聖域」で、D氏は次なる教えを授けてくれるが…。


第3話 おわり