暗号資産におけるウォレットとは① 〜基本編〜
本稿では、技術的な観点から、暗号資産を保管するためのウォレットについて述べます。
ホットウォレットとコールドウォレット
主に暗号資産を保管するためのウォレット(お財布のようなもの)には、大きく分けて、ホットウォレットとコールドウォレットが存在します(厳密にはその中間のようなウォームウォレットというものも存在します)。
まずはホットウォレットとコールドウォレットの類型について説明します。
- ホットウォレット (常時インターネットに接続)
- Webウォレット: Webブラウザを介して利用するウォレット
- デスクトップウォレット: ソフトウェアをコンピューターに導入して利用するウォレット
- モバイルウォレット: スマートフォン等に導入して利用するウォレット
- コールドウォレット (インターネットから隔離されたオフラインのもの)
- ハードウェアウォレット: TrazorやLedger等、専用のハードウェアを用いるウォレット
- ペーパーウォレット: 秘密鍵やアドレス等を紙に印刷したウォレット
ホットウォレットは基本的にオンラインで利用するもので、利便性に優れます。一方、コールドウォレットはインターネットから隔絶されたオフラインでの運用のため、利便性には劣りますが、インターネットを介したハッキング等の危険性からは免れます。そのため安全性が高いと言えるでしょう(ウォレットそのものを盗まれてしまうというリスクはありますが、金庫やセキュリティ会社のサービスを使って安全性を高められます)。
暗号資産取引所や顧客資産を預かるカストディアンにおいては、一定以上の資産はコールドウォレットに保管することを求められています。
ウォレットの仕組み
次に、基本的なウォレットの仕組みについて述べたいと思います。
通貨により仕組みは異なるのですが、ここではBitcoinとEthereumのウォレットの特徴について説明します。
暗号資産をお持ちの方なら、アドレスという単語を聞いたことがあるでしょう。
このウォレット(お財布)を識別するものであるアドレスは、ウォレットのアカウント(口座)の公開鍵から生成されるものであり、その公開鍵はアカウントの秘密鍵から生成されます。したがって、自身のウォレットの秘密鍵は安全に保管しなければなりません。
本稿ではEthereumについて説明しますが、基本的にはアドレスの生成順序等は大体の通貨に共通しています。
Ethereumのアドレスの生成は以下のように行われます。
- Private Key(秘密鍵)の生成: 256 bitsの乱数
- 256 bits(32 bytes)の乱数を秘密鍵(k)とする
- 楕円曲線暗号(secp256k1)によりPublic Key(公開鍵)を生成
- 秘密鍵kを楕円曲線のスカラー倍算に掛け、それにより得られた2次元座標(x, y)を繋げた文字列64 bytesの公開鍵(K)とする (厳密には、それを公開鍵として利用する場合には先頭に「04」を付加して65 bytesにしますが、アドレスを生成するにあたっては付加しません)
- 一方向ハッシュ関数であるKeccak-256によりPublic Key Hash(公開鍵ハッシュ)を生成
- 公開鍵Kを一方向ハッシュ関数であるKeccak-256関数に入れ、32 bytesのハッシュ値を算出
- 3の後ろ半分20 bytesを取り出し、先頭に「0x」を付加
- 結果例: 0x26432b347e432631a74664413A29D5B2A7164622
以上のように、「秘密鍵 → 公開鍵 → アドレス」の順序で生成されます。逆方向の生成は出来ません。
終わりに
ここまで、暗号資産のウォレットの基本について述べてきました。
ウォレットの類型にはまた別の観点があるのですが、それはまた別の機会に致したいと思います。
秘密鍵の保管には充分お気をつけください。