ブロックチェーンアドレス入門
分散型金融と分散型台帳の世界において、「アドレス」は資金を受け取るために使用される公開識別子です。私たちはそれらを英数字の長い文字列として見ることが多いですが、これらの文字列は、人間の読みやすさ、エラー検出、およびスペース効率のために設計された高度なエンコーディングスキームの結果です。
Base58、Bech32、EIP-55 などのエンコーディングスキームを理解することは、開発者、セキュリティ研究者、およびパワーユーザーにとって非常に重要です。このガイドでは、ブロックチェーンアドレスがどのように構築され、検証されるかを定義する技術標準について深く掘り下げます。
1. Base58 と Base58Check:Bitcoinの遺産
Bitcoinのオリジナルのアドレス形式(1 または 3 で始まるレガシーアドレス)は、Base58 エンコーディングを使用します。
なぜ Base58 なのか?
標準の Base64 エンコーディングには、0(数字のゼロ)と O(大文字のオー)、または I(大文字のアイ)と l(小文字のエル)など、人間が混同しやすい文字が含まれています。Base58 は、これらの紛らわしい文字を排除するためにサトシ・ナカモトによって特別に設計されました。
Base58 アルファベット:
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
Base58Check:エラー検出の追加
ユーザーが誤って入力ミスのあるアドレスに資金を送信するのを防ぐために、Bitcoinは Base58Check を使用します。これは、エンコーディングの前にペイロードに 4 バイトのチェックサムを追加します。
Base58Check のプロセス:
- バージョンバイト:アドレスタイプを示すプレフィックスが追加されます(例:P2PKH の場合は
0x00、P2SH の場合は0x05)。 - ペイロード:公開鍵の実際のハッシュ(RIPEMD-160)。
- チェックサム計算:
SHA256(SHA256(バージョン + ペイロード))が計算されます。結果の最初の 4 バイトがチェックサムです。 - 結合:
バージョン + ペイロード + チェックサム。 - Base58 エンコード:結合されたバイト配列全体が Base58 文字列に変換されます。
1文字でも変更されるとチェックサム検証が失敗し、タイポからユーザーを保護します。
2. Bech32 と Bech32m:SegWitとその先へ
Bitcoinが SegWit(Segregated Witness)とともに進化したため、新しいアドレス形式が必要になりました。Bech32(BIP 173 で定義)が、Native SegWit アドレス(bc1q で始まる)の標準となりました。
Bech32 の利点
- 大文字小文字を区別しない:Bech32 文字列はすべて小文字です(大文字も可能ですが、混在は禁止されています)。これにより、入力や読み上げが容易になります。
- QRコードの効率:小文字と数字のみを使用するため、Bech32 はQRコードにおいてより効率的です。
- 優れたエラー検出:Bech32 は、最大 4 つのエラーを検出し、修正できる可能性がある BCH コードを使用します。
- Base58 の曖昧さがない:紛らわしい文字を除外した文字セットを使用します。
Bech32 アルファベット:
qpzry9x8gf2tvdw0s3jn54khce6mua7l(1, b, i, o が除外されていることに注意)。
Bech32m: 「1」文字の問題の修正
2021年、Taproot(v1 ウィットネスプログラム)以降で使用される際のオリジナルの Bech32 の軽微な脆弱性を修正するために、Bech32m(BIP 350)が導入されました。Bech32m は現在、Taproot アドレス(bc1p で始まる)の標準です。
3. Ethereum のアドレス形式と EIP-55 チェックサム
Bitcoinとは異なり、Ethereum のアドレスは公開鍵の Keccak-256 ハッシュの最後の 20 バイトから直接派生します。これらは通常、0x で始まる16進文字列として表されます。
組み込みチェックサムの欠如
当初、Ethereum のアドレスには組み込みのチェックサムがありませんでした。標準の 0x アドレスで文字を打ち間違えると、資金は単に無効または到達不能な宛先に送信されてしまいました。
EIP-55: 大文字小文字混合チェックサム
アドレスの長さを変えずにこの問題を解決するために、ヴィタリック・ブテリンは EIP-55 を提案しました。これは、大文字を使用してチェックサムをエンコードします。
EIP-55 アルゴリズム:
- アドレスを小文字にします(
0xを除く)。 - 小文字のアドレス文字列の Keccak-256 ハッシュを計算します。
- アドレス内の各文字 $i$ について:
- ハッシュの $i$ 番目のニブルが $\ge 8$ の場合、アドレスの $i$ 番目の文字を大文字にします。
- それ以外の場合は、小文字のままにします。
例:
- 標準:
0x5aaeb6053f3e94c9b9a09f33669435e7ef1beaed - EIP-55:
0x5aAeb6053F3E94C9b9A09f33669435E7Ef1BeAed
Bitcoinアドレスバリデーター または Ethereumアドレスバリデーター は、トランザクションの宛先の整合性を確保するために、これらの特定のアルゴリズムを実装する必要があります。
4. 要約表:アドレスエンコーディングの比較
| 機能 | Base58Check | Bech32 / Bech32m | EIP-55 (Ethereum) |
|---|---|---|---|
| ブロックチェーン | Bitcoin (レガシー) | Bitcoin (SegWit/Taproot) | Ethereum |
| プレフィックス | 1 または 3 |
bc1q または bc1p |
0x |
| 文字セット | 58文字 (英数字) | 32文字 (小文字 + 数字) | 16文字 (16進数) |
| チェックサム形式 | Double SHA-256 (4バイト) | BCHコード | Keccak-256 (大文字小文字混合) |
| 大文字小文字の区別 | あり | なし (大文字小文字を区別しない) | オプション (推奨) |
FAQ:ブロックチェーンエンコーディングに関するよくある質問
Q: なぜ 1 で始まる Bitcoin アドレスと 3 で始まるものがあるのですか?
A: 1 で始まるアドレスは P2PKH(Pay-to-Public-Key-Hash)アドレスです。3 で始まるアドレスは P2SH(Pay-to-Script-Hash)アドレスで、マルチシグやネストされた SegWit でよく使用されます。
Q: Ethereum のアドレスに BTC を送信できますか?
A: いいえ。 エンコーディングスキームや基盤となる暗号曲線が重なることはありますが、ネットワークプロトコルは完全に異なります。別のチェーンのアドレスに資産を送信すると、通常は永久に失われます。
Q: 「バニティアドレス」とは何ですか?
A: バニティアドレス とは、特定の単語やパターン(例:1Love... で始まる)を含むブロックチェーンアドレスのことです。これらは、一致する公開ハッシュが見つかるまで、数百万のキーペアを総当たりで生成することによって作成されます。
Q: 「Invalid Address(無効なアドレス)」エラーを修正するにはどうすればよいですか?
A: このエラーは通常、チェックサム検証 に失敗したことを意味します。入力ミスがないか再確認し、0 と O を間違えていないか確認し、正しいネットワークに送信していることを確認してください(例:SegWit BTC をレガシーのみのウォレットに送信しない)。
結論
ブロックチェーンのアドレスエンコーディングは、単なる文字列ではありません。それは重要なセキュリティレイヤーです。Base58Check の誤入力耐性、Bech32 の効率性、あるいは EIP-55 の巧妙な大文字小文字混合チェックサムのいずれであっても、これらの標準は、数十億ドルが自信を持って世界中に移動できることを保証しています。開発者またはユーザーとして、これらの形式をマスターすることは、分散型ウェブの技術的アーキテクチャを理解するための第一歩です。