本文へスキップ
buybitcoinsmart

用語集 / アドレスと鍵

Bech32

Bech32とは?
Bech32はbc1qで始まる文字列の背後にあるアドレス符号化方式です。小文字のbase32形式で、6文字のチェックサムによって最大4文字までのあらゆる誤りを検出します。

BIP-173で規定されています。

BIP-173は、SegWitの出力でBase58Checkに代わるものとして2017年にbech32を導入しました。アルファベットは32文字で構成され、見間違えやすい文字が誤って入れ替わらないよう、"1"、"b"、"i"、"o"を意図的に除外しており、bech32の文字列が90文字を超えることはありません。アドレスを貼り終えた瞬間にウォレットがそのアドレスを拒否した場合、その破損を検出したのはbech32のチェックサムです。

仕組み

bech32の文字列は、固定された順序で3つの部分から成ります。人が読めるプレフィックス、区切り文字の"1"、そして6文字のチェックサム文字で終わるデータ部分です。メインネットはプレフィックス"bc"、テストネットとsignetは"tb"、regtestは"bcrt"を使うため、ウォレットが他の何かをデコードする前に、先頭の文字でネットワークが分かります。この区切り文字は、"1"がアルファベットに含まれない理由でもあります。これにより区切り文字は境界に1回だけ現れることができ、パーサーは右から走査して分割位置を見つけます。

チェックサムは、プレフィックスを含む文字列全体に対して計算されるBCH符号です。BIP-173は、最大4文字に影響するあらゆる誤りを検出することを保証し、より大きな誤りを見逃す確率を10億分の1未満に抑えています。Base58Checkにはこれに匹敵するものはありません。その末尾4バイトは切り詰められた二重SHA-256ハッシュであり、何かがおかしいことはウォレットに伝えても、どこがおかしいかは絞り込めません。

大文字と小文字に意味はありません。bech32アドレスはすべて小文字か、すべて大文字であれば有効で、混在は許されず、ウォレットは小文字の形で表示します。BIP-173はQRコード内では大文字を求めています。大文字の英数字はQRの英数字モードを利用でき、各文字をバイトモードに必要な8ビットではなく5.5ビットに収め、スマートフォンのカメラがより速くとらえる粗いパターンを生成するからです。

使われる場面

すべてのbc1qアドレスはbech32です。42文字のアドレスは20バイトのウィットネスプログラムを符号化し、単一の鍵に支払います。62文字のアドレスは32バイトのプログラムを符号化し、スクリプトに支払います。どちらもウィットネスバージョン0であり、バージョン0は現在bech32が運べる唯一のバージョンです。

この符号化はアドレス以外にも現れます。BOLT11のライトニングインボイスは"lnbc"などのプレフィックスを伴ってこれを借用しており、90文字の上限を承知のうえで無視しています。インボイスは短い1つのプログラムではなく、支払いハッシュ、金額、説明、ルーティングのヒントを運ぶからです。

問題が起きるのは取引所の出金フォームです。2017年より前に書かれたバリデータはBase58の文字列しか認識せず、まったく正しいbc1qアドレスに対して"invalid address"と返します。これは当該プラットフォームの制限であり、お使いのウォレットの制限ではありません。対処法は、別のソフトウェアを探すことではなく、同じシードから導出した、そのプラットフォームが受け付ける種類のアドレスへ出金することです。

bech32 vs bech32m

bech32とbech32mは1つの定数だけが異なり、それ以外は同じです。どちらも同じアルファベット、同じレイアウト、同じ6文字のチェックサム文字を使います。bech32mはチェックサムに組み込む値を1から0x2bc830a3に変え、その区分はウィットネスバージョンで決まります。バージョン0の出力はbech32のままで、バージョン1から16まではbech32mを使います。両者を互換のものとして扱うソフトウェアは、拒否すべき文字列を受け入れてしまいます。これはBIP-350が防ぐために書かれた、まさにその不具合です。

bech32 vs Base58Check

bech32とBase58Checkは競合する符号化であり、競合するアドレスの種類ではありません。Base58Checkはバージョンバイトと20バイトのハッシュを4バイトのチェックサムで包み、1と3で始まる大文字と小文字を区別する文字列を生成します。bech32はウィットネスバージョンとウィットネスプログラムをまとめて符号化し、bc1で始まる大文字と小文字を区別しない文字列を生成します。どちらの符号化も、コインが何にロックされるかは決めません。決めるのは、人が文字列をどれだけ確実にコピーできるか、QRコードをどれだけ大きくする必要があるか、1文字欠けたときにソフトウェアがどれだけ強く警告するかです。

混同しやすい用語

よくある質問

取引所でbc1アドレスが無効と表示されるのはなぜですか?

そのプラットフォームのアドレス検証器がbech32の存在する前に書かれ、Base58の文字列しか認識しないからです。あなたのアドレスは問題ありません。同じウォレットから導出した、そのプラットフォームが受け付ける形式へ出金し、そこからコインを移してください。

bech32アドレスは大文字と小文字を区別しますか?

いいえ。bech32の文字列はすべて小文字、またはすべて大文字であれば有効で、両者を混在させると無効になります。ウォレットは小文字で表示し、QRコードは大文字を使います。大文字にすると、よりコンパクトな符号化モードを利用できるからです。

次に読む

関連用語

アドレスと鍵のその他の用語

このページを英語で読む