Base58の概要
Base58とはバイナリデータを58種類の文字列で表現するフォーマットです。
ビットコインなどのブロックチェーンではアドレスや秘密鍵の文字列の表現にこのBase58というフォーマットを用いています。
「Base58」は聞いたことがないが、「Base64」であれば聞いたことがあるという人もいると思います。それは、Base64が電子メールや電子掲示板などにおいて、よく使われているフォーマットだからです。例えば電子メールにおいては、送信プロトコルであるSMTPなどの制約により、7ビットで表現されるデータしか送ることが出来ません。そこで、Base64という0から63までの64個の数値を「a-z、A-Z、0-9、 +、/ 」の 64種類の文字で表現できるフォーマットが使われています。特に、画像や音声といった添付ファイルなどのデータを送信する際にBase64が標準的に利用されています。Base58はBase64からの派生で、Base64では64種類の文字で表現されることに対し、58種類の文字で表現するフォーマットです。
Base58のフォーマットでは、Base64で使わていてる文字から「 +、/、0(数字)、O(oの大文字)、I(iの大文字)、l(Lの小文字)」の6文字を除いた58文字が使われています。これらの文字を除く理由は、似ていてまぎらわしく、書き写す際に間違えやすいからです。実際に、「0Oo」、「 Il1」を見分けるのに苦労していた経験がある人も多いと思います。
従って、Base58において使用可能な文字は
「123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz」
の58文字となります。
ブロックチェーンでは、秘密鍵やアドレスなど間違えてしまうと取り返しのつかないことになるデータを扱うため、このような文字列を排除する工夫をしています。
Base58が使われているサービス
Base58の実際に使用されてているサービスの例としては、以下のものが挙げられます。
- ビットコインのアドレス
- Rippleのアドレス
- Flickerの短縮URL
これら3つの応用例において使われている58文字は以下のようになります。
このように、使用される58種類の文字は同じものですが、サービスによって並び順が違っています。この表では、サービスによって実際に割り当てられている順番が違っていることを表しています。このように、「Base58で」と言っても、一意の変換テーブルにはなっていないので気をつけなくてはなりません。
ビットコインやRippleは台帳技術なので、Base58はアドレスや鍵の表示に使用されますが、Flickerでは、画像の短縮URLを表示するためのエンコーディング形式としてBase58が使用されます。このように、長く複雑な文字列を分かりやすい形で表現できることから、Base58は様々なアプリケーションで利用されています。
ブロックチェーンでは、高度なセキュリティを担保しつつ、使いやすさも重視した仕様になっていることが理解できたかと思います。今後、仮想通貨のアドレスや鍵を目にするときに、Base58という工夫されたフォーマットが使われていることに注目して見てみると、またブロックチェーンが面白くなるかもしれません。ぜひ、注目してみてください。