http://en.wikipedia.org/wiki/Bitcoin が十分詳しい。
wikipediaを参照するな!というのは置いといて。
Bitcoinでは公開アドレス間の送金を全て検証することで、仮想通貨としての一貫性
・資金を持っている人だけが送金できる
・架空の資金を送金することはできない(残金ゼロなのに送金したり、同じ資金を二人対して使うことができない)
を実現している。
まず前者は非対称暗号による署名で実現している。
まず財布を作りたいユーザは秘密鍵と公開鍵をつくる。このペアから更に、アドレスと呼ばれる使い捨ての財布を生成する。
この公開されるアドレスからの送金情報を、秘密鍵で署名しP2Pネットワークに放流することで、送金を宣言できる。
検証するには、送金元アドレスに対応する公開鍵で送金情報を検証すれば良い。
つぎに架空の送金や二重送金はチェックは少し複雑になる。これはハッシュブロックのチェーンと呼ばれる一貫性のある送金情報のデータベースをP2Pネットワーク全体で維持することで実現される。
さらにこのときこの一貫性を維持する作業に協力した場合に、bitcoinを得られるという利益を与えることで、bitcoinの恒常性が維持されている。(bitcoinを既に持っているヒトのbitcoin価値がわずかに減る)
これは大雑把に言えば次のようなプロトコルに為る。チェーンを維持するための計算をするヒト=以下マイナー(採掘者)は
・前提となる既に世界的に認められた送金情報データのブロック(後述)を取得する。
・P2Pネットワークから、送金情報を得て、署名を確認する。署名が不正な送金はここで除去する。
・送金情報を一定数まとめて、前提となるブロックのハッシュと、送金情報を含めて署名する。これがブロックと呼ばれる検証単位になる
・ブロックの送金情報がある特定のハッシュを持つ場合のみ、ブロックは有効なトランザクション情報として認められる。つまり、適切なハッシュをもつデータの組み合わせを調べることが、マイナーに課される計算課題であり、これが一瞬では済まない困難な問題であることが信頼性を担保している。
・有効なハッシュを持つブロックをP2Pネットワークに放流する
(なお、同時に複数のマイナーが同じブロックに対して分岐したチェーンを作ってしまうことがある。この場合、二箇所に送金情報が登録されることになるが、より長いチェーンのみ信頼することで、分岐した枝は無視される。マイナーは常にネットワークを監視して、最長のチェーンの末端ブロックを確認しなければならない)
有効なブロックを計算してネットワークに提供したユーザには、送金手数料(1回あたり1セントくらい)と、ブロックの計算困難性から自動的に算出されるbitcoinが与えられる。マイナーは計算を行うことで、bitcoinの維持に貢献しつつ利益を得られる。
ある送金を受け取った時、二重送金が行われていないか調べるには、P2Pネットワークから有効なハッシュを持つトランザクション情報を取得し、該当する送金からさかのぼって送金元アドレスの残金がマイナスになっていないか調べる。
たとえば、トランザクション情報をいくら遡っても送金元への入金が見つからなければ、その送金は架空の資金からの送金として無視される。対応する入金が見つかり、送金元アドレスの収支バランスが0以上になれば、検証済みとなり、送金が正しく行われたとみなして良い。
通常のクライアントソフトは自分への送金元だけを検索してチェックすればいいので、計算負荷はとても小さい。
上記のシステムからわかるように、bitcoinでは、送金の発生はほぼ瞬時に通知されるが、検証は何時まで経っても終わらないという事がありうる。それを避けるために、送金手数料が必要となっている。得られる手数料が高いほうがマイナーは優先して計算対象に含めてくれるため、
なお、パケットロストなりで送金情報が消えてしまった場合(いつまでもトランザクション情報ブロックに掲載されない場合)、適切なタイムアウトの後に送金をリトライすることになる。
#この送金をリトライするタイムアウト時間がwikiを見ても見当たらなかったのだが、どこに書いてある?
posted by ko-zu at 00:27|
Comment(0)
|
TrackBack(0)
|
Bitcoin
|
|