​「Base58ってたまに見るけどよくわからない...」

「むずかしい技術なのかな...」

そのように思っている方も多いのではないでしょうか?

特に、ビットコインの秘密鍵公開鍵を作成する仕組みについて学んだことのある方なら一度は見たことのある言葉かと思います。

この記事を読めば、「Base58」について理解できるだけでなく、ビットコインアドレスなどを見る目が変わるかもしれません!

それでは、「Base58」について、わかりやすく説明していきます!

​Base58とは ​

​Base58:文字列を58種類の英数字で表現するフォーマット

​Base58とは、バイナリデータ(コンピューターが扱うデータ、人間が読めないデータ)を58種類の英数字のみを用いて表現するフォーマットです。

暗号資産(仮想通貨)では公開鍵秘密鍵アドレスなどを人間が扱える形に変換するところに使われています。

 

​「公開鍵・秘密鍵って何だろう?」「どうして鍵が2つもあるの?」このような疑問を持ったことはありませんか?この記事を読めば公開鍵・秘密鍵の基本を理解することができます。普通に考えれば、1つの錠に対して鍵は1つです。しかし、暗号資産(仮想通貨)取引において用いられるこの2つの鍵は性質が全く異なります。鍵が2つあることは情報を保護する上で非常に重要な意味を持っています。一般の鍵のイメージは公開鍵・秘密鍵を理解する中で邪魔になるかもしれません。一旦はそのイメージを脇において読むといいと思います!目次公開鍵・秘密鍵とは​​​​秘密鍵の管理に注意!​秘密鍵の管理方法は?​まとめ​暗号資産(仮想通貨)の公開鍵・秘密鍵とは​​​​​公開鍵​公開鍵とは一般に公開されている鍵で、後で説明する秘密鍵から作成されます。流れとしては秘密鍵→公開鍵→アドレスという感じです。しばしば公開鍵とアドレスは同じものとして扱われるのですが、違うものなので注意してください。アドレスは銀行口座で例えるなら口座番号です。例えばA君からB君に1BTC送るとしましょう。B君は1BTCを受け取る際、自分のアドレスをA君に教えればいいだけです。このトランザクションではB君の秘密鍵も公開鍵も必要ありません。現在の銀行を介した取引と仕組みは同じです。一方で、公開鍵は取引の検証のために用いるものです。つまり公開鍵でトランザクション内容が本当に正しいのかを検証することができるということです。上の例でA君の公開鍵を使えば、「A君が自分の秘密鍵を使って送金したこと」「送金額が1BTCのままであること」「B君のアドレスに送金されていること」を誰もが確認することができます。詳しくは電子署名の図で説明します。秘密鍵から公開鍵を作ることは比較的容易にできますが、公開鍵から元の秘密鍵を類推することは非常に困難です。​公開鍵から秘密鍵を作れてしまってはこの暗号方式の意味がありません。この一方向性が非常に重要で、歴史的にみると1960年代、一方向性をもつアルゴリズムが見つからなかったので、公開鍵と秘密鍵を用いた暗号方式は理論の段階にとどまっていました。しかし条件を満たすアルゴリズムが見つかったことで、現在の2つの鍵を用いた暗号方式が可能になりました。とにかく公開鍵を知られたと言って、別に自分のお金が盗まれるというわけではないので安心してください!​秘密鍵​秘密鍵は

 

Base64:58種類の英数字に加えて、記号も使用

Base64は、バイナリデータを、Base58が扱う58種類の英数字を含めた64種類の英数字と記号を用いて表現するフォーマットです。

Base64は電子メール電子掲示版などによく使われています。​

Base64を理解すると、それと比較することでBase58がよりわかりやすくなるかと思います。

上の図のように、Base64は、

「数字0~9の10文字」+「大アルファベットA~Zの26文字」+「小アルファベットa~zの26文字」+「記号+と/の2文字」=「64文字」

によって表現されます。

それに対して、Base58は、Base64が扱う64文字から、

  1. 「0」(数字のゼロ)
  2. 「I」(大アルファベットi)
  3. 「O」(大アルファベットo)
  4. 「l」(小アルファベットL)
  5. 「+」(記号のプラス)
  6. 「/」(記号のスラッシュ)

の6文字を除いた、58文字を扱います。

なぜ、上記の6文字を除くのでしょうか?

​それは、人間が目視でデータを読み取って入力したり、ダブルクリック一発で文字列全てを選択して簡単にコピー&ペーストできるようにするためです。

  • 「0」(数字のゼロ)と「O」(大アルファベットo)
  • 「I」(大アルファベットi)と「l」(小アルファベットL)

は見分けにくいですよね?

もし、人間が読み取りミス・入力ミスをしてしまったら大変なことになってしまいます。

Base58では、識別が難しい文字が除かれているということです。

Base58Check:ビットコインアドレスの入力ミスを検出

​暗号資産(仮想通貨)はユーザーがアドレスを目で読み取り、手打ちする機会が多いです。

その際に、見間違えや入力ミスが生じる可能性があります。

Base58Checkは打ち間違えられたアドレスなど、無効なアドレス検出してくれるエンコード(符号化)方式です。

Base58Checkでエンコードされたアドレスは末尾に「チェックサム」というアドレスの正誤を判断する文字列があります。

 

Base58の実装方法​

​​では、どのようにしてBase58を実装していくのかを簡単に説明します。

実装するにはJava等のプログラミング言語を扱う必要があるのですが、ここではコードを用いた説明は省略します。

処理手順はとてもシンプルで、エンコード(符号化)実装は4ステップ、デコード(復元)実装は3ステップです。

10進数16進数を用います。

エンコード実装4ステップ 

​Base58のエンコード処理手順は次の4ステップです。

  1. バイナリデータを16進数に変換する
  2. 16進数を10進数に変換する
  3. 10進数を58種類の文字列に変換する
  4. 文字列を逆順にする​

となります。

デコード実装3ステップ

​次に、Base58のデコード処理手順を説明します。

以下のような3ステップです。

  1. ​エンコード文字列を10進数に戻す
  2. 10進数を16進数に変換する
  3. 16進数をバイナリデータに戻す

となります。

 

以上、エンコード処理手順とデコード処理手順を非常に簡潔に説明しました。

「Base58を実装するためには、10進数と16進数が使われている」ということさえ覚えておけば十分かと思います。

 

Base58の使用例3つ ​

​ここでは、Base58が用いられている例を3つ紹介します。

代表的なのは、

  • ビットコイン(bitcoin)のアドレス
  • リップル(ripple)のアドレス
  • Flickerの短縮URL

です。​​

ビットコイン(bitcoin)アドレス ​​

​ビットコインアドレスとは、ビットコインの「口座番号」のようなものです。

「1か3」から始まる34文字の英数字でできていて、公開鍵をハッシュ関数という関数にかけることで生成できます。

ビットコインのアドレスは厳密にはBase58ではなく、Base58Checkから生成されます。

先ほども紹介した通り、その文字列の順番は以下のようになっています。

​123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz

 

リップル(ripple)アドレス​

​​リップルアドレスとは、リップルの「口座番号」のようなものです。

「r」から始まる32桁の英数字で構成される文字列です。

こちらは、ビットコインの場合とは異なり、英数字が以下のように不規則な順番で並んでいます。

​rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz​

 

Flickerの短縮URL​

​Flicker(フリッカー)とは、写真の共有を目的としたコミュニティサイトです。

画像の短縮URLを表示するためのフォーマットとしてBase58が使われています。

文字列の順番は以下の通りです。ビットコインのものと似ていますが、Flickerのものは小文字のアルファベットが大文字のアルファベットよりも先に並んでいますね。

​123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ​

 

以上、Base58が使われているサービスを3つ紹介しました。

使われている58種類の英数字は同じですが、サービスによって順番が異なりますね

​アプリケーション ​対応文字
​ビットコインアドレス ​123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz​
​リップルアドレス ​rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz​​
​Flickerの短縮URL ​​123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ​​

 

まとめ​

いかがでしたでしょうか?

Base58とはバイナリデータを58種類の英数字のみを用いて表現するフォーマットです。

言い換えれば、長く複雑なデータを人間が扱いやすい形で表現できるフォーマットとも言えます!

Base58は様々なアプリケーションで使われていくでしょう!