Architecture
Overview
LCPは、2つのブロックチェーン間のMessage/Packetの送信をrelayするIBC Relayerと連携して動作する。受信チェーンは送信チェーンのLight Client検証を直接行わないため、RelayerはLCPに対して送信チェーンを検証するように要求する。そしてその検証結果をRelayerは受信チェーンに提出し、受信チェーンは代わりに検証する。
次の図は2つのchain間のLCPを用いたアーキテクチャおよびPacket-relayのフローである。
Packet-relayの各ステップは次のようになる。ここでは、chainBがchainA上のpacketの存在証明を検証する場合を想定する。
- 最初にRelayerはchainA上でchainB宛のPacketが送信されたことを検出する
- RelayerはLCP NodeのAppにchainAを検証するように要求する
- AppはLCP EnclaveにPacketの検証を要求するVerifyMembership commandを送信する。また、Handlerはcommand受取り、ELCにpacketの検証を要求する。
- ELCはchainAに対応するLight Clientによりpacket commitmentを検証し、そのcommitmentにEKにより署名を行いproofを生成する
- 4.のcommitmentとproofをEnclaveは返し、AppはそれをRelayerに返す
- Relayerは5.のcommitmentとproofをchainBに提出し、chainB上のLCP Clientによりpublic EKを用いて検証される
Components
LCP Node
LCP Nodeは、Intel SGXを搭載し、LCP Enclaveを作成するHost Applicationを実行する。
Host Application
Host App(単にAppとも呼ぶ)は、LCP Enclaveの作成およびEKの生成、またRelayerからの要求を元にELCへ検証の要求を行うGRPC serverを実装する。
また、Host AppはRemote Attestationのために、AEと対話を行い、LCP Enclaveの情報を含むQuoteを作成する。このQuoteをIASなどのAttestation ServiceへQuoteを送信することで、Verifiable Quoteを取得できる。DCAP(ECDSA attestation)を利用する場合は、IASの代わりに外部の検証者が直接的にQuoteを検証する。
LCP Enclave
LCP Enclaveは、Handler, Enclave Manager(EM), ELCの各モジュールから構成されるEnclaveである。ELC moduleはregister_implementation
を用いてEnclaveに登録可能であり、1つのEnclaveには複数のELCを登録することができる。
また、Host Appからのecallによる要求をHandlerがroutingして適切なモジュールを実行する。
Enclave Light Client (ELC)
ELCは、Enclave内で動作するLight Clientモジュールである。
ELCは、RelayerからAppを介して要求されたChainのheaderや状態の存在証明を検証し、その結果を示す新たなcommitmentを生成する。Enclave内でEKを用いてそのcommitmentに署名を行うことでProofを生成し、commitmentとともにAppに返す。Appを介してそれらを受け取ったRelayerは相手chainに提出し、それらはLCP Clientにより検証される。
詳細についてはこちらを参照。
Enclave Manager (EM)
EMは、ELCのcommitmentのproofを生成するためのEnclave Key(EK)を生成する。また、外部の検証者がEnclaveの妥当性を確認するためのRemote Attestationに必要なEKの公開鍵を含むReportを生成する。
Attestation Service
Remote partyによるenclaveの妥当性の確認を可能にするためのRemote Attestationを提供するサービスである。IAS、Microsoft Azure Attestation(MAA)があり、外部serviceを必要としない方式としてECDSA attestationがある。LCPでは、最初にIASをサポートしている。このドキュメントでは特に注釈がない限りはRemote AttestationについてはIASの利用を前提に記述する。
Attestation Serviceにより得られたVerifiable Quoteの署名を検証し、期待するEnclaveのMRENCLAVE値と照合することで、Quoteに含まれるデータが正しく対象のEnclaveにより構成されたことがわかる。さらにこれにより、検証者はQuote内のEKが正しくEnclave内で生成されたことを確認できる。このプロセスの詳細はRemote Attestationで述べる。
Relayer
Relayerは2つのChainの間に存在し、検証を行うChainに必要なデータを提供するために検証先のChainやLCP Nodeと対話を行う。これはIBCにおけるRelayerと同義である。
LCP Client
LCP Clientは、ELCの生成したcommitmentとproofを検証するChain上のIBC Client実装である。 LCP Clientは、Appが生成したLCP EnclaveのためのVerifiable Quoteを検証した上で、そこに含まれるEKの公開鍵を取得し保持する。DownstreamのchainのLCP Clientはその鍵を用いてELCにより生成されたcommitmentを検証し、Upstream chainの状態遷移や存在証明の妥当性の確認を行う。
詳細についてはこちらを参照。