Develop with pleasure!

福岡でCloudとかBlockchainとか。

Project OtherCoin

microSD内にあるチップを使ってBitcoinのオフトランザクションを実現するOtherCoinについて。

ざっくり言うとSDカード内にセキュアに保持された秘密鍵をセーフティに流通させていく(AからBに移ったらAにはその鍵は残らないことを保証する)ことで、Blockchainとは関係なしに価値の移転を行い、最後の受信者がそれをBlockchainにブロードキャストすることで最初のユーザから最後のユーザに対する資産の移動のトランザクションが記録され、その間の物理的な交換を行ったトランザクションはBlockchain上には記録されないというオフトランザクションの実装だと思う。

http://www.othercoin.com/OtherCoin.pdf

ざっと意訳すると。

OtherCoinとは?

OtherCoinは、microSDカード内の耐タンパー性(ソフトウェアやハードウェアが備える内部構造や記憶しているデータなどの解析の困難さ)を持つスマートカードを利用した、オフチェーンのBitcoin決済システム。
OtherCoinは当事者間でBitconの秘密鍵を安全に生成・格納・送信することによって動作する。秘密鍵は決して送信者、受信者に明かされることなく、Bitcoinプロトコル内のトランザクションへの署名や他のOtherCoinユーザへの転送を行うことが可能。
各OtherCoinのスマートカードは、鍵の安全な生成と、安全なチャンネルを介して同様の制限を持つOtherCoinから安全に鍵を受け取ることができる。

アドバンテージ

信頼できるサードパーティのサーバが不要

作に必要な、信頼が必要な中央サーバを持つ必要がない。
唯一信頼必要なのはOtherCoinの発行者である。発行者はスマートカード上で動作するソフトウェアがOtherCoinのシステムの規則に従い改竄されていないことを保証する。たとえ発行者が廃業しても、発行されたOtherCoinは無期限に使用することが可能。
秘密鍵は必要なタイミングでカードから抽出され、Bitcoinネットワーク上で使用することができる。(ただ直接オフチェーンでの支払いはできない)

プライバシー/匿名性

何の情報もBlockchain上には送信されない。当事者達は彼らのOtherCoinのスマートカードの公開鍵を使ってお互いを識別する。公開鍵はスマートカード間でプライバシーを保護するため暗号化して送信される。

スピード

confirmationは不要で、受信者は新たに受信した秘密鍵に関連付けられた資産をすぐにBlockchain上で確認できる。秘密鍵は通常1時間経過しているので資産は既にconfirmationされた状態になっている。

二重払いの防御

受信者は、未使用かつ送信者によって速やかに削除されたことが保証されている秘密鍵を取得する。受信者はBlockchain経由で自分に資産を送るか、OtherCoinのスマートカード内に秘密鍵を保持したまま後でBlockchainでそれを利用するか他のユーザにOtherCoinのオフチェーンで転送することができる。

トランザクション手数料が不要

BlockchainとBitconiネットワークは取引に関与していないので、取引の値に関係なく何の報酬も発生しない。

BitcoinのBlockchainのロードが不要

トランザクションは受信者と送信者の間でしか記録されないので、BitcoinのBlockchainについて何も知る必要がない。

資産への即時アクセス

OtherCoinを利用開始するのに、alt-coinのように第三者に資金を入金する必要が無い。OtherChainではいつも使ってるBitcoin秘密鍵を移動させるだけでいい。システムからコインを移動させる必要はなく、コインは常に利用可能。
オフチェーンの支払いでは、OtherCoinのカードは単純に秘密鍵が一度も明らかになっていないかトランザクションの署名で使われたことが無いことを保証する。

OtherCoinがやること

OtherCoinのスマートカードは意図的にシンプルになっており、以下の2つの基本的な操作しか提供しない。

  1. Bitcoin秘密鍵の生成
    安全に(tamperresistantチップ内で)秘密鍵を生成、保存し、ユーザに関連付けられた公開鍵を提供する。
  2. 他のOtherCoinのスマートカードへ、暗号化され認証されたチャンネルを確立
    保護されたチャンネルを介して秘密鍵の転送及び自分のストレージから削除する。

OtherCoinがやらないこと

  1. Bitcoinトランザクションには署名しない。
    OtherCoinはBitcoinの署名の生成やトランザクションの承認は行えない。
  2. OtherCoin自体で外部の世界と接続できない
    OtherCoinはそのカードを挿したPCもしくはスマートフォン上で動作しているソフトウェアウォレットと対話する。OtherCoin自体はワイヤレスな通信機能を保持してないので、それ自身でインターネットへの接続したり任意の場所にデータを送信することはできない。
  3. 秘密鍵Bitcoinアドレスへのアクセスは不可
    PCやスマートフォン上で動作するソフトウェアウォレットは、OtherCoinの公開鍵と、内部で新しいBitcoin アドレスを作成してできた公開鍵を結びつける。こうするとウォレットは半分の秘密鍵を持つが、もう半分の秘密鍵にはアクセスできない。 これはOtherCoinのセキュリティの本質で、ウォレットもカードもどちらも全秘密鍵へのアクセス権を持っておらず、ウォレットだけが唯一Bitcoinアドレスに対応する公開鍵を知っている。

なぜOtherCoinを使うのか?

OtherCoinはオフチェーンのBitcoin取引を欠点なく提供できる。最初のカードの認証では、発行者に依存するが、後続のトランザクションは発行者に依存すること無く、Blockchainや任意の他のデータとして登録されることは無い。
これは特に対面状況で本当に匿名でプライベートな取引を可能にする。
Blockchainのトランザクションに署名するために秘密鍵が使われる時、それまでにOtherCoin経由で何百もの個人間取引が行われていたかもしれないが、Blockchain上に表示されるのは資産の最後の受信者からの単一のトランザクションのみになる。

残高証明とSPV証明

OtherCoinのAndroidアプリの現在のバージョンでは、指定されたBitcoinアドレスの残高を取得するのに、blockchain.infoのAPIをベースにした中央サーバを使用している。この部分はSPV証明を使った純粋なBlockchainベースのソリューションに置き換えている過程で、この残高の取得処理が現在唯一中央サーバに依存している機能になる。

各ユーザは、更新されたブロックヘッダのみをダウンロードする。(実際のトランザクションやフルノードはダウンロードしない)
鍵が供給されると、アプリケーションはトランザクションを含むフルブロックのリスニングを開始する。該当するトランザクションを含むブロックが見つかると、シリアライズされたトランザクションと、そのトランザクションが繋がってるMerkel Branchを格納する。このデータ(トランザクション+Merkel Branch+ブロックハッシュ)は支払いの証明として当事者間で転送される。受信者のみがブロックハッシュとトランザクションの出力を確認し、Merkel Branchが与えられたブロックにトランザクションを入れること確認する。

PINベースのエスクロー

OtherCoinシステムでは、支払人が支払った資金の受取人が実際にサービスを実行したり商品を出荷するまでの間に、受取人が支払われた資金を使うのを防ぐためのプリミティブエスクローメカニズムを採用している。
鍵が転送されると、その鍵は内部でランダムな4桁のPINで暗号化されている。このPINは鍵を送信した際に支払人に表示される。
受取人がキーを受け取り資金を確認できるがPINを入力するまで「locked」と表示されている。ロック状態では、鍵は両当事者ともに利用できず資金を利用可能にするために合意する必要がある。

サポートされるハードウェアとプロトコル

スマートカードは、2015年5月の時点でOtherCoinスマートカードアプリケーションは、NXP JCOPまたはInfineon secure elements上で実行可能。
その他、Device Fidelity (NXP), Swissbit (Infineon) and Certgate (NXP), the Yubikey Neo by Yubico (NXP) 、Famoco FX100とかでも動作は確認できてる。

当事者間の通信にはNFCBluetooth、QAコードとリレーサーバを経由したTCP/IPをサポートしている。また同じトランザクション中であっても複数プロトコルを利用するこができる。(例えば最初のハンドシェイクはBluetoothで行うが、支払いを受け取るときにはNFCQRコードをスキャンする等)