暗号資産におけるウォレットとは① 〜基本編〜

本稿では、技術的な観点から、暗号資産を保管するためのウォレットについて述べます。

 

ホットウォレットとコールドウォレット

主に暗号資産を保管するためのウォレット(お財布のようなもの)には、大きく分けて、ホットウォレットとコールドウォレットが存在します(厳密にはその中間のようなウォームウォレットというものも存在します)。

まずはホットウォレットとコールドウォレットの類型について説明します。

  • ホットウォレット (常時インターネットに接続)
    • Webウォレット: Webブラウザを介して利用するウォレット
    • デスクトップウォレット: ソフトウェアをコンピューターに導入して利用するウォレット
    • モバイルウォレット: スマートフォン等に導入して利用するウォレット
  • コールドウォレット (インターネットから隔離されたオフラインのもの)
    • ハードウェアウォレット: TrazorやLedger等、専用のハードウェアを用いるウォレット
    • ペーパーウォレット: 秘密鍵やアドレス等を紙に印刷したウォレット

ホットウォレットは基本的にオンラインで利用するもので、利便性に優れます。一方、コールドウォレットはインターネットから隔絶されたオフラインでの運用のため、利便性には劣りますが、インターネットを介したハッキング等の危険性からは免れます。そのため安全性が高いと言えるでしょう(ウォレットそのものを盗まれてしまうというリスクはありますが、金庫やセキュリティ会社のサービスを使って安全性を高められます)。

暗号資産取引所や顧客資産を預かるカストディアンにおいては、一定以上の資産はコールドウォレットに保管することを求められています。

 

ウォレットの仕組み

次に、基本的なウォレットの仕組みについて述べたいと思います。

通貨により仕組みは異なるのですが、ここではBitcoinとEthereumのウォレットの特徴について説明します。

暗号資産をお持ちの方なら、アドレスという単語を聞いたことがあるでしょう。

このウォレット(お財布)を識別するものであるアドレスは、ウォレットのアカウント(口座)の公開鍵から生成されるものであり、その公開鍵はアカウントの秘密鍵から生成されます。したがって、自身のウォレットの秘密鍵は安全に保管しなければなりません。

本稿ではEthereumについて説明しますが、基本的にはアドレスの生成順序等は大体の通貨に共通しています。

Ethereumのアドレスの生成は以下のように行われます。

  1. Private Key(秘密鍵)の生成: 256 bitsの乱数
    • 256 bits(32 bytes)の乱数を秘密鍵(k)とする
  2. 楕円曲線暗号(secp256k1)によりPublic Key(公開鍵)を生成
    • 秘密鍵kを楕円曲線のスカラー倍算に掛け、それにより得られた2次元座標(x, y)を繋げた文字列64 bytesの公開鍵(K)とする (厳密には、それを公開鍵として利用する場合には先頭に「04」を付加して65 bytesにしますが、アドレスを生成するにあたっては付加しません)
  3. 一方向ハッシュ関数であるKeccak-256によりPublic Key Hash(公開鍵ハッシュ)を生成
    • 公開鍵Kを一方向ハッシュ関数であるKeccak-256関数に入れ、32 bytesのハッシュ値を算出
  4. 3の後ろ半分20 bytesを取り出し、先頭に「0x」を付加
    • 結果例: 0x26432b347e432631a74664413A29D5B2A7164622

以上のように、「秘密鍵 → 公開鍵 → アドレス」の順序で生成されます。逆方向の生成は出来ません。

 

終わりに

ここまで、暗号資産のウォレットの基本について述べてきました。

ウォレットの類型にはまた別の観点があるのですが、それはまた別の機会に致したいと思います。

秘密鍵の保管には充分お気をつけください。