LitentryにおけるプライバシーIII:TEEサイドチェーン
Litentryの各リンクをフォローして最新情報を入手しましょう!
前回までのTrusted Execution Environment(TEE)の説明に加え、今回はTEEのサイドチェーンとその構成要素について説明します。
レイヤー0,1,2
下図は、ブロックチェーンの3つのレイヤーを示しており、それぞれが責任を負っています。
IDアグリゲーションを実現するために、LitentryはEthereumアカウントや計算されたクレジットスコアなどの機密性の高いユーザデータを保存する必要があります。そこで、データの保存と処理のセキュリティとプライバシーを確保するために、Trusted Execution Environment (TEE) を選択しました。Litentryは、複数のTEE搭載ノードからなるサイドチェーンを開発し、安全でプライベートな方法でユーザーデータの分散保存と処理を提供しています。
- レイヤー0:KusamaやPolkadotのようなリレーチェーンのメインネットで、リレーチェーンやパラチェーンネットワーク全体で共有されるセキュリティを提供する役割を担っています。また、XCMメッセージのルーターとしても機能します。
- レイヤー1:LitentryパラチェーンやLitmusパラチェーンは、アプリケーションに特化したブロックチェーンとして採用されています。パラチェーンスロットを占有することでリレーチェーンと相互接続し、リレーチェーンがそのブロックを検証し、XCMメッセージを監視することを可能にします。
- レイヤー2:TEEサイドチェーンは、Integriteeによってサポートされ、ランタイムがSGXセキュアラン環境で実行できるようにします。これは、全てのステートとエクストラシンクを公開、可視化するレイヤー1のパラチェーンとは異なります。
このアーキテクチャの要点は、ブロックチェーンの3つのレイヤーすべてがSubstrateフレームワーク上に構築されていることです。このフレームワークは高度なカスタマイズが可能で、開発者はランタイムと実行ロジックを構成してさまざまな役割を果たすことができます。
パラチェーンは、dPOS(Delegated Proof of Stake)メカニズムを利用してブロックの同期と生成を行うノードで構成され、サイドチェーンは、Trusted Execution Environments(TEE)を備えたノードで構成されます。
ソフトウェア構成要素
上記の図では、Teerex Pallet、SGX Runtime、Identity Hub Client、Worker Serverという4つのソフトウェアコンポーネントが存在します。
Teerex pallet
パラチェーンのTeerex palletは、TEEワーカーの登録、検出、および相互通信を可能にします。その主な機能は以下の通りです:
- SGXエンクレーブのリモート検証を可能にする検証済みレジストリとして機能し、公開監査可能性を提供します。
- エンクレーブ間の信頼ギャップを埋めるために機密性を中核に設計され、誰でも実行されたコードを検証することができます。
- SGXエンクレーブによって実行されるオフチェーン機密状態遷移呼び出しの間接的なプロキシとして機能します。
詳細情報については、Integritee のドキュメントを参照してください。
SGXランタイム
サイドチェーンワーカー内のSGXランタイムは、全ての基板互換パレットの機密実行と統合を可能にします。
SGXパレットは、TEE SGXワーカーのエンクレーブでインスタンス化され、WASM blob/binaryにコンパイルされ、tee-sgx-sdkに依存します。SGXノードにプライバシーデータを格納し、IDのリンク、アサーションの検証、IDグラフの格納を行います。外部パラメータ/アドレスはパラチェーンで暗号化され、秘密鍵はSGXノードのみが知っており、SGXでデータを復号化し、ランタイムに呼び出しをディスパッチします。これによって、Litentryが掲げるユーザーデータのプライバシーを維持できます。
詳細は、SGX ランタイムレポに記載されています。
Identity Hub Client
Identity Hub Clientは、呼び出しや操作を実行するために使用されるSubstrateベースのツールです。
クライアントは、RPC/WSS経由でパラチェーンやサイドチェーンとやり取りします(図はサイドチェーンがまだオープンしていないため、サイドチェーンのやり取りを表示していません)。パラチェーンへの呼び出しは、暗号化され機密性を呼び出すことができます。これにより、操作の内容は、ClientとサイドチェーンTEE(SGX、SGXワーカー/ノード、SGXランタイム)だけが見ることができます。
操作の宛先に応じて、クライアントが実行できるさまざまなタイプの呼び出しがあります。以下の通りです:
- Untrusted Call- クライアントは、Untrusted Callを介してパラチェーンノードと対話し、トランザクションまたはクエリを送信します。例えば、クライアント経由の残高転送はUntrusted Callです。
- Trusted call- クライアントは、TEE ワーカーサーバと対話します。例えば、SGX アカウントリンカーパレットから外付けされている link_eth を呼び出す。または、SGXの暗号化されたデータをクエリする10いった形です。
- Direct call- クライアントが SGX ランタイム内の外部コールを呼び出す (Untrusted Callと同じ)
- Indirect call- クライアントはSGXランタイムコールを暗号化し、パラチェーンのTeerexパレットに送信します。ワーカーノードはブロックを同期してcall_work外部コンポーネントを識別し、パラチェーンからの呼び出しを解析して、SGXランタイムにディスパッチします。詳細は下図をご覧ください。
ワーカーサーバー
ワーカーサーバは、TEEの呼び出しや操作に応じて、指定された入力とリソース制限で関数を実行します。十分なスケーラビリティを確保するため、通常、これらの実行には多数のワーカーサーバーが必要となります。
サーバーは、TEE 全体の中で最も複雑な部分であり、その主な機能は以下の通りです:
- リモート認証(TEEメーカー(インテル)にTEEの認証を依頼するプロセス)の実行に使用。製造元は、TEE本体と実行バイナリのハッシュ値の両方が本物であることを確認するためのレポに署名
- 信頼されたノードでSGXランタイムの実行環境を提供
- パラチェーンからのブロックの同期、call_workからのデータの復号とパース
- サイドチェーンのブロック生成、ノード間の同期とコンセンサスの実施
- RPCとWSSのサービスを提供
- 外部経由でパラチェーンに応答を送信
ソフトウェア実行の観点からは、サーバーは信頼できるTEE部分と信頼できないTEE部分の境界となります。信頼できるコードはSGXで実行され、スタートアッププロセス、RPCサーバー、エンクレーブの初期化など、信頼できないコードはパレットで実行されます。
シャーディングは、サイドチェーン設計の初期段階からサポートされています。サーバーノードは、1つのシャードに参加します(各コールにデフォルトのパラメーターであるシャードIDが存在)。その後、サーバーノードは、参加したのと同じシャードで呼び出しを実行します。シャーディングの利点は次のとおりです:
- 各シャードの状態は分離されており、異なるシャードノードは、互いのプライベートデータを見ることができない
- シャードノードは他のシャードからの呼び出しをスキップでき、リソースを節約し、ブロック内の外部実行を少なくして高速化する
- シャーディングは、ユーザーデータを保護すると同時に、大規模なソリューションの利用を可能にする
TEEで扱われるデータは?
Identity HubでIDリンク(Web2 <> Web3、またはクロスチェーンウォレットリンク)または検証可能なクレデンシャル生成をリクエストすると、リクエストを完了するために必要な全てのデータがTEE環境に保存され計算されます。
これには、リクエスト自体、異なるウォレット間の関係、VC での主張をサポートする特定のウォレットから取得されたデータなどが含まれます。
トークン転送、ガバナンス、ステーキング、クロスチェーン転送を含むLitentry Parachainの初期機能には、プライバシーを保護する処理は含まれません。