はじめに
おつかれさまです。
前回の記事では、NFTが発行(mint)される流れについて整理しました。
その中で何度も登場したのが「ウォレット」です。
NFTの発行や売買を行う際には、MetaMaskなどのウォレットを利用しますが、
- ウォレットは何を管理しているのか?
- なぜパスワードなしでログインできるのか?
- mint時に表示される「署名」とは何なのか?
今回はこの3つの疑問を中心に、Web3におけるウォレットの役割と署名の仕組みを整理します。
ウォレットはNFTを保管しているわけではない
「ウォレット」という名前から、NFTや暗号資産を保管する財布のようなものをイメージするかもしれません。
しかし実際には、ウォレットの中にNFTが保存されているわけではありません。
NFTはブロックチェーン上に記録されており、ウォレットはそれらを操作するための鍵を管理しています。
つまり、ウォレットの本質は
NFTを保管する場所ではなく、ブロックチェーン上の資産を操作するための鍵管理ツール
です。
公開鍵・秘密鍵・ウォレットアドレス
ウォレットを理解するうえで重要なのが鍵の仕組みです。
簡略化すると次のような関係になります。
| 項目 | 役割 |
|---|---|
| 秘密鍵 | 本人だけが持つ鍵。絶対に公開しない |
| 公開鍵 | 秘密鍵から生成される公開情報 |
| ウォレットアドレス | 公開鍵から生成される識別子(0x...形式) |
NFTを受け取る際にはウォレットアドレスを共有します。一方で、秘密鍵を持つ人はそのウォレットの所有者として振る舞えるため、秘密鍵は絶対に第三者へ渡してはいけません。
鍵生成の仕組み
この鍵ペアはECDSA(楕円曲線デジタル署名アルゴリズム)をベースにしており、Ethereumではsecp256k1という楕円曲線を使用しています。
秘密鍵(256bit乱数)
↓ secp256k1による楕円曲線演算 公開鍵(512bit)
↓ Keccak-256ハッシュ → 末尾160bit
ウォレットアドレス(20bytes / 0x...)
秘密鍵から公開鍵やアドレスを生成できますが、その逆は現実的な計算量では不可能です。そのため、アドレスを公開していても秘密鍵が漏れることはありません。
Web2とWeb3の認証の違い
普段利用しているWebサービスでは、IDとパスワードを利用して認証を行います。認証情報はサービス側のデータベースに保存されています。
ID + Password → サーバーで照合 → ログイン
Web3では考え方が異なります。サービス側はパスワードを保持しません。代わりに、ウォレットによる「署名」を使って本人確認を行います。
Wallet → 署名 → ログイン
サービス側はパスワードを保持しません。
代わりに、ウォレットによる署名を利用して本人確認を行います。
署名とは何か?
署名(Signature)は、
「この操作を自分が承認したことを証明する仕組み」
です。
例えばWeb3サービスへログインする場合、次のような流れになります。
↓
MetaMask起動・署名要求の表示
↓
ユーザーが署名を承認
↓
ウォレットが秘密鍵で署名データを生成
↓
ログイン
ユーザーから見ると「署名ボタンを押しているだけ」に見えますが、裏側では秘密鍵を使った暗号演算が行われています。
署名の検証処理
サービス側は「メッセージ」と「署名結果」を受け取り、署名者のウォレットアドレスを復元します。
// 内部では ecrecover 相当の処理が行われる
// ethers.js での署名(クライアント側)
const message = "ログイン認証: 2024-01-01T00:00:00Z";
const signature = await signer.signMessage(message);
// サーバー側での検証
const recoveredAddress = ethers.verifyMessage(message, signature);
// recoveredAddress がウォレットアドレスと一致すれば認証OK
パスワードの照合ではなく、「この署名を生成できる秘密鍵の持ち主か」を数学的に証明する仕組みです。
「ログインの署名」と「mintの署名」の違い
混同しやすいですが、実際には別の処理です。
| ログイン時の署名 | mint時の署名 | |
|---|---|---|
| 目的 | 本人確認 | トランザクション送信 |
| ブロックチェーンへの書き込み | なし(オフチェーン処理) | あり |
| ガス代 | 不要 | 発生する |
前回の記事で整理したmintの流れの最初にある「Wallet署名」は、トランザクションとしてブロックチェーンに送信されます。これが「誰が・どのウォレットへ発行したか」をオンチェーンで証明する根拠になっています。
なぜウォレット管理が重要なのか
Web2ではアカウント情報をサービス事業者が管理しています。パスワードを忘れても、サービス側でリセットできます。
Web3では、秘密鍵をユーザー自身が管理します。そのため、
- パスワードリセットがない
- 管理者による復旧が難しい
- 秘密鍵を失うと、資産へアクセスできなくなる
という特徴があります。その分、自己責任が伴います。これは制約でもありますが、「自分自身で資産とアカウントを管理する」というWeb3の自己主権(Self-Sovereign Identity)の思想でもあります。
まとめ
冒頭の3つの疑問に答える形でまとめます。
| 疑問 | 答え |
|---|---|
| ウォレットは何を管理しているのか? | NFTそのものではなく、操作するための「秘密鍵」 |
| なぜパスワードなしでログインできるのか? | 秘密鍵による署名で本人確認するため |
| mint時の「署名」とは何か? | トランザクションの承認。ブロックチェーンに記録される |
ウォレットは、Web3における「認証・承認・資産管理」のすべての起点です。NFTの発行や売買の裏側では、常にウォレットによる署名が動いています。

