Base58
Base58、その意味や概要について
Base58(ベース58)とは?
Base58(ベース58)はバイナリデータ(コンピュータが処理することのできるデータを2進数化したもの)を文字列として扱えるようにするエンコード方式です。Base64はWEBでも知られていますが、それと同様にバイナリデータを58種類の文字で表現します。Base64との大きな違いは英数字以外の文字が視覚的にわかりにくいところを除いた変更がされています。これにより、人が手動でデータ入力することや、コピーすることが楽にできるような設計がなされています。
Base58はビットコインなどの暗号資産(仮想通貨)のアドレスを作成するときに使われるエンコード方式ですが、アドレスの打ち間違いを検知する機能があり、暗号資産(仮想通貨)を構成するシステムのいろいろな場所で使われています。
Base58の役割/仕組み
Base58はBase64と似ていますが、たとえばl(小文字のエル)や1(数字のいち)といった人が間違えやすい文字を除外しています。Base58で使われる58種類の文字は並び順を変えて使用されます。
Base58はBase64から派生したフォーマットで、Base64で使われる文字の中から「+、/、0(数字)、O(oの大文字)、I(大文字i)、l(小文字 L)」の6文字を除いた58文字で表現されています。従来Base64で使われていた文字を排した理由は、見た目が似ていることで紛らわしく、仮に書き写す作業が発生した場合、ミスが発生する可能性があるからです。
特に暗号資産(仮想通貨)の仕組みの一つであるブロックチェーン技術を使ったアドレスや秘密鍵を見間違えることによって損失につながる可能性があるので、そのようなデータを扱う上でも人が見間違えることのない文字列を使用しているのがBase58です。
使用可能な文字
使用可能な文字については扱う暗号資産(仮想通貨)によっても異なります。以下に例を挙げます。
・例:bitcoin Base58 addresses
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
・例:ripple Base58 addresses
rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz
Base58はどのような時に使われるのか
ビットコインなどの暗号資産(仮想通貨)の仕組みとしてブロックチェーンが使われる場合、アドレスや秘密鍵の文字列にこのBase58フォーマットを用います。Base58は暗号資産(仮想通貨)の取引だけでなく、フリッカーといったアプリの短縮URLにも使われています。
Base58は先ほどご説明したように、ビットコインやエックスアールピーなどのアドレス、公開鍵、秘密鍵をテキストデータとして人間が扱えるように変換する場合に用いられます。
ビットコインアドレスはQRコードなどで配布されるケースがほとんどであり、電子的なやり取りの場合では大半がコピー&ペーストで入力されています。しかし大元のビットコインアドレスの打ち間違いにより生成されたアドレスを送付されてしまうと、ビットコインを受け渡しすることはできません。
そのためこのようなことを回避するためにBase58Checkというエンコード方式が使われており、ビットコインアドレスの打ち間違いを事前に検知することができます。
Base64とは?
Base64はバイナリデータを64種類の文字で表示するエンコード方式です。アルファベットは小文字a~z・大文字A~Z、一部の記号である+や/を使って表します。データ長(データの大きさ)を揃える場合に、余った部分を詰めるための記号として末尾に=を使用するので、厳密には65文字で表されます。
元データは6ビットずつ分割し、6ビットのそれぞれが印刷可能な64文字の中の1文字に置き換えられます。1文字は8ビットとなるので、元々は6ビットだったものを8ビットにするので、データ量は4/3になります。その意味から、エンコードする場合はデータ量が多くなるために、大きなファイルの送受信を行う場合は、送受信の速度が遅くなることがあります。
Base64は、電子メールや電子掲示板などでよく使われるフォーマットです。例を挙げると電子メールは7ビットデータ(送信プロトコル制約により)しか送れませんが、Base64なら64種類の文字列で表現することが可能なので、画像や音声データなどの添付データを送信する場合に利用されています。
Base58とBase64の違い
かつて電子メールなどで用いられていたプロトコル(通信を行う際に使用されるあらかじめ定められた規約)では7ビットしか送れませんでした。メールなどで画像や音声などのデータをやり取りする場合は、英文字対応しかしていないSMTPでは送受信ができなかったのです。
それを解消するために作られた規格がBase64という変換方法です。Base58はBase64から派生し、扱う文字数が違うだけでなく、ヒューマンエラーを減らすために開発されたフォーマットです。Base58は目視して判別しにくい文字や特殊文字を排除した仕様になっていますが、エンコードする際は分割単位が58と2の累乗数でないために、Base64と同じように元のデータをビット毎に分割することができません。
つまりBase58は、Base64では変換可能な大きいバイナリデータをエンコードすることには向いていないフォーマットなのです。
Base58実装手順
ビットコインで使用する場合のBase58の実装手順について簡単に解説します。
エンコード手順
Base58のエンコード手順は以下のように行います。
- 文字列(バイナリ)を16進数に変換します
- 次に16進数を10進数に変換します
- 10進数を58種類の文字列に変換します
- 文字列を逆順にします
手順はこれだけです。
デコード手順
Base58のデコード手順はエンコードしたBase58を元の文字列に戻すだけです。
- エンコードした文字列を10進数に戻します
- 10進数を16進数に戻します
- 16進数を文字列(バイナリ)に戻します
今、暗号資産(仮想通貨)を始めるなら
DMMビットコイン