イーサリアム(Ethereum)開発者であるカール・フローシュ(Karl Floersch)氏が作成した仮想通貨やブロックチェーンを学べる「Cryptoeconomics Study」から、クリプト経済の入門編を解説したビデオを紹介。
この動画はクリプト経済入門のチャプター1だ。「Central Payment Processor」について、どのように実装するのか、必要なツールは何かといったことを解説していく。全5回のうち第1回の今回は、Central Payment Processorとは何かその概要について説明する。さまざまな概念については各セクションで詳細に触れる。
Central Payment Processorとは?
Central Payment Processorとは、AWS上のデータセンターでも何でもよいが、支払い処理を管理する何らかのコンピューターだ。alice、bob、aparna、jing、karl…といったユーザーがいるとする。各ユーザーもコンピューターを持っており、小さなプライベートキーを保持している。Central Payment Processorはバランス(残高)情報を保持しており、このバランス情報は各ユーザーが保有している金額を表す。また、ナンスと呼ばれる情報も保持している。
これは各自が行ったトランザクションの回数を表す数字だ。例えば、aliceはトランザクションを1回、bobは3回、というふうに。バランスの数字は各コンピューターのアドレスが持つ残高に対応する。つまり、もしこれらの数字を照らし合わせることができれば決算処理に必要な情報を取得することができる。どのユーザーがどのアドレスを管理しているかは、ブロックチェーンの匿名性のように、ユーザーとアドレスの対応を知らない限りは知ることができない。
(動画内でアドレスを表している)0x2a2という文字列は数字を表している。0xはこれが16進数であることを意味する。10進数で1,2,3,…8,9,10と数える代わりに、16進数では1,2,3,…8,9,a,b,c,d,e,f,10というふうに数える。
署名によるメッセージの確認
aliceが中央サーバーであるCentral Payment Processorに自身のバランスを問い合わせるとする。aliceはこのメッセージに署名を施す。非常に基本的な暗号概念であるハッシュと署名の詳細についてはセクション1.1で扱う。次にCentral Payment Processorはその署名がaliceのものであるかをチェックし、署名が正しければaliceにバランスを返信する。
これにより、aliceは自分が保有している残高を知ることができる。aliceはこの時、やはり署名をチェックし、メッセージが本当にCentral Payment Processorからのものであるかを確認する。この処理は中央集権化されているため、自身のトランザクションに関係のあるメッセージだけが重要となる。
残高を確認した後にaliceは本当のトランザクションを送信し、バランスが更新される。トランザクションと決済処理の実装についてはセクション1.2で解説する。
ナンスのチェックによる二重取引の防止
aliceの送金先のアドレスbc1はjingのアドレスに一致する。そのため、aliceはjingに10ドル送金しようとしていることが分かる。Payment Processorはjingが誰なのかさえ知らないが、署名をチェックしトランザクションが正しいものであることを確認する。
次に、このトランザクションのナンスをチェックし、Payment Processorが保持しているリストのaliceのナンスと一致していることを確認する。これにより、同一のトランザクションが複数回送信されるのを防ぐことができる。このリプレイプロテクションについてはセクション1.3で取り上げる。
ナンスのチェック後、Payment Processorはナンスを1増加させる。次に、バランスに十分な金額が残っているかどうか確認し、aliceのバランスから送金額の10ドルを引き、jingのバランスに10ドルを加算する。バランスを更新し、状態を追跡するさまざまな方法についてはセクション1.4で解説する。ここまでで説明した方法はアカウントモデルであるが、ビットコインで利用されているUTXOモデルについても見ていく。バランスが更新されると、Payment Processorはもう一度署名をチェックする。
次に、先ほどのトランザクションをもう一度送信してみよう。署名には問題無いが、ナンスは一致しないためこのトランザクションは受理されない。リプレイ攻撃による二重取引を防ぐことができたということだ。
バランスのチェックによる無効なトランザクションの防止
続いて別のトランザクションで50ドルをjingに送信してみよう。署名には問題ない。ナンスも一致する。しかし、最後にバランスをチェックすると残高は45ドルしかなく、送金額の50ドルよりも少ない。そのためトランザクションは処理されず、バランスが足りないというエラーメッセージが返信される。無効なトランザクションを防ぐことができたということだ。
アドレスのチェックによるなりすましの防止
今度は、aliceになりすましたユーザーがaliceの代理でトランザクションを送信しようとしているとする。しかし、aliceのものと同一のアドレス(鍵)は実際には持っていない。そのためこのトランザクションは成立しない。Payment Processorが署名をチェックする際に無効な署名であることが判明する。
最後に
Payment Processorの概要について説明した。Payment Processorは多数のユーザ同士の送金を非常にシンプルな方法で調整することができる。セクション1.5ではPeyment Processorを使用する上での欠点についても解説する。
関連
・ブロックチェーンの普及に関係する重要な2種類のサイクルとは?
・なぜフルノードが重要なのか?:ビットコイン(BTC)教育者Jimmy Song氏の解説動画