#何の話?
ビットコインは単位時間あたりに処理できるトランザクション数に限りがあります。
所謂スケーラビリティ問題です。これを解決するために、トランザクションの処理をブロックチェーンの外で行うマイクロペイメントチャネルというアプローチがあります。
その中で、trusted execution environment (TEE) を使用した Teechan という双方向マイクロペイメントチャネルが提案されています。
元の論文は
Teechan: Payment Channels Using Trusted Execution Environments
参考サイト
https://techmedia-think.hatenablog.com/entry/2016/12/24/152906
参考サイトでプロトコルの詳細が説明されているので、ここでは大雑把に書きます。
#Intel SGX
Teechan では Intel SGX を使用して TEE を構築しています。主に SGX の以下の2つの機能を使用しています。
- enclave : 重要なデータを格納するメモリ内の領域です。この enclave が TEE になります。enclave 内のデータは特権モードでもアクセスすることが不可能で、特定のプログラムからアクセスしか許可されません。
- remote attestation : リモートの enclave 同士で認証を行う機能です。所望のコードが通信相手の enclave 内で動いていることを確認できます。
remote attestation の詳細は ここ で確認できます。
ざっくり説明すると、認証される enclave A は認証する enclave B へ署名を送信します。 (実際には quoting enclave が介入する)
enclave B はその署名をサードパーティの Intel attestation service (IAS) に送信して、IAS がその署名は enclave A からのものであると検証し、その結果を enclave B に返します。
#Teechan
Teechan の概要な以下の通り。
Teechan: Payment Channels Using Trusted Execution Environments から
enclave の機能により、Bob は Bob TEE に( Teechan のアプリケーション外から )不正にアクセスできないので、Alice から見て Bob TEE は安全なんですね。これを利用して Alice は自身のビットコインの秘密鍵を Bob TEE に送信します。Bob も Bob TEE に自身の秘密鍵を送信します。
即ち、Bob TEE には Alice と Bob の秘密鍵が存在しています。Bob は Bob TEE にアクセスできないので Alice の秘密鍵を奪うことはできません。Alice TEE も同様に Alice と Bob の秘密鍵が存在しており、Alice は Alice TEE 内の Bob の秘密鍵を奪うことはできません。
ここで気を付けることは、Alice は Bob TEE に秘密鍵を送信する前に、remote attestation 機能を用いて Teechan のコードが Bob TEE で動作していることを確認しなければいけません。Bob が不正に Teechan のコードを書き換えて、資金を奪うような細工をしている可能性があるからです。
Teechan のプロトコルは、他の双方向ペイメントチャネルと同様です。
オープニングトランザクションで 2-of-2 multisig へ資金をデポジットし、ペイメントの更新を複数回行い、クロージングトランザクションでチャネルを閉じます。TEE がペイメントの更新を管理しているので、過去のトランザクションを不正にブロードキャストされるという心配がありません。
TEE が trusted third party として機能しているんですね。
Alice が Bob に送金したいときは、Alice TEE へペイメントのリクエストを送るだけです。
Alice TEE は両者の秘密鍵を持っているので、いつでもトランザクションに署名を行うことができます。
#感想
前提として、Intel と SGX のセキュリティを信頼する必要がありますね。
あと SGX を持っている人も限られているので、気軽に導入するのは難しそう。