ビットコインとは何か? 第3回:ビットコインの仕組み(アドレスの作成から送金まで)

実際にアドレスの作成から送金までの流れを追い、ビットコインの仕組みについて見ていきます。ビットコインのウォレットソフト・アプリではこのような作業を自動的に実行し、仕組みを知らなくても誰でも簡単に使えるようになっています。

前提知識

公開鍵暗号とデジタル署名

このページでは、公開鍵暗号デジタル署名という前提知識を持っていると理解が早くなります。これらは、インターネットのセキュリティ技術の基本的知識のため、多くの日本語の解説サイトがあります。詳細は、リンク先やその他サイト等も参照してください。

ビットコインにおいては、公開鍵を変換したものがアドレスとなり、アドレスがつまり口座番号になります。アドレスは銀行の口座とは違いいくらでも簡単に作れるため、お金を受け取れる「メールアドレス」に例えられることもあります。公開鍵に対応するのが秘密鍵(プライベートキー)です。ビットコインの世界では大抵そのまま秘密鍵またはプライベートキーと呼ばれます。これは送金の際に使う暗証番号(パスワード)になります。

ビットコインを利用する上では、とりあえずアドレスは口座番号秘密鍵は暗証番号と覚えておけば十分でしょう。

秘密鍵とアドレスの作成

ここでは、実際に秘密鍵とアドレスを作成する流れを追ってみます。流れ的には秘密鍵→公開鍵→アドレスというかたちになります。

最初に作るのは秘密鍵です。実はビットコインの秘密鍵にあまり厳格な制限はなく、512ビット(128文字)でも128ビット(32文字)でもいいのですが、ここでは、最も一般的な256ビット(64文字)の秘密鍵をランダムに生成してみたいと思います。

ちなみに任意の文字を単にハッシュ化したものも秘密鍵にでき、このような方法で作ったウォレット(財布)は、秘密鍵を暗記できるため、ブレインウォレット(脳内ウォレット)とも呼ばれますが、セキュリティが弱いためほとんど使われません。

取引の署名・検証等に使うため、ビットコインでは秘密鍵から公開鍵への変換はsecp256k1という楕円曲線を利用します(ECDSA)。ただし、説明には複雑な数学的説明が必要なためここでは省略します。

※本ページで作ったアドレス・秘密鍵は実際に使うことも可能ですが、セキュリティ上使用は止めてください

秘密鍵:
secp256k1曲線変換
公開鍵:
SHA-256ハッシュ化
RIPEMD-160ハッシュ化+先頭に0x00
①:
SHA-256ハッシュ化×2
先頭4バイト
チェックサム:

※チェックサムはアドレスが正しい形式かどうか検証するための認証コードのようなものです。


①:
チェックサムを後ろに付加
Base58エンコード
ビットコインアドレス:

このように何回もハッシュを重ねたりすることによりビットコインのアドレスが作成されます。最後のBase58エンコードというのは人間が見ても分かりやすくするために、紛らわしいlと1,0とOを除外して短い文字列にする処理のことです。

また、通常のビットコインのアドレスは必ず1からはじまるようになっています。(3からはじまるアドレス等、他の形式もあり)


秘密鍵:
Base58エンコード等
秘密鍵(WIF):

ここでは詳細は省略しますが、秘密鍵も公開鍵と同様にチェックサムを生成・付加し、最終的にBase58エンコードを行うことにより、通常はWIF(Wallet Import Format, ウォレットインポート形式)というかたちに表します。文字通りウォレットにインポートする際はこの形式の秘密鍵を使用します。秘密鍵(WIF)は5から始まることになります。

取引の作成と送信・検証

まずビットコインにおける取引(送金)について、重要な仕組み・仕様があります。

お釣りの図

上図はビットコインの送金の構造を簡単に表したものです。見て分かるようにビットコインでは送信額(input)と受信額(output)+取引手数料は必ず等しくなければなりません。

このため、例えば10BTCの残高があるうちの1BTCを送信したい場合、1BTCを相手に送信し、残りの9BTCは自分のアドレスに再度送信する、ということになります。

この仕様は「お釣り用アドレス(change address)」の仕組みを知るうえで重要です。上図のように、ビットコインのウォレットソフトのなかには、プライバシー保護のために毎回お釣り用アドレスを新規作成し、元のアドレスにいくら大量のビットコインがあったとしても、全てをお釣り用アドレスに送信し、元のアドレスの残高を空っぽにするという作業を行っているものが多くあるのです。もし元のアドレスから全額がなくなっていたとしても混乱しないようにしましょう。

ちなみに取引手数料というのは、取引が正しいものであることを検証してもらうのに第三者の取引承認者である採掘者(マイナー)に払うものです。一般的に取引手数料が高いほど、早く取引が承認されると言われています。詳細は、第4回にて解説します。

取引への署名と検証

普段ビットコインを使う上では先ほどの仕組みを知っていれば十分ですが、せっかくなので前半で作った秘密鍵と公開鍵を使って取引に署名を行ってみます。

秘密鍵: 公開鍵: 取引データ:

本当は取引データはもっと複雑な内容ですが、ここでは省略して簡単な文字列として表記しています。

署名済の取引データ:

これで署名済みの取引データが完成しました。ビットコインでは、この署名済みの取引データと公開鍵を元の取引データに組み込んで、ネットワークに向けて送信(ブロードキャスト)することによりビットコインの送金が完了します。

送信された取引データが正しいものかどうかは、先ほど組み込まれた署名済取引データと公開鍵を使うことにより検証が可能です。

検証結果:

そのまま検証ボタンをクリックすれば「有効な取引データです。」と表示されるはずです。しかし、取引データ欄の文字列を削除したり変更して改ざんすると「不正な取引データです。」と表示され、取引の改ざんができないことがわかります。

最終更新日: 2016年12月15日

コメント欄

ゲスト(匿名)としての投稿の場合は、任意のメールアドレス(非公開、123@456.com等ランダムな文字列でも可)の入力も可能です。SNS等を利用してログインした場合には、自分の投稿を編集することができます。

現在、情報提供のコメントや間違いのご指摘コメントに対して独自トークンをお送りする実験企画を実施中です。企画に参加したい場合は、コメントの最後に送付を希望するCounterpartyなどのアドレスを書いてください。(プライバシー保護のため送付後にコメント内のアドレスは削除させていただきます。)