TEE の開発者ガイド

著者: Prateek, Roshan, Siddhartha & Linguine (Marlin), Krane (Asula) コンパイラ: Shew, GodRealmX

Appleがプライベートクラウドを導入し、NVIDIAがGPUで機密計算を提供して以来、信頼実行環境(TEE)がますます人気を集めています。それらの機密性の保証は、ユーザーデータ(たとえば秘密鍵を含む場合もあります)を保護するのに役立ち、隔離性はそれらの上で展開されたプログラムの実行が改ざんされることを防ぎます——人間であれ他のプログラムであれ、またはオペレーティングシステムであれ。したがって、Crypto x AI領域ではTEEを使用した製品の構築が一般的となっても不思議ではありません。

どの新技術と同様に、TEEは楽観的な実験期間を経験しています。この記事は、開発者や一般読者に基本的なコンセプトガイドを提供し、TEEとは何か、TEEのセキュリティモデル、一般的な脆弱性、TEEを安全に使用するためのベストプラクティスを理解させることを目的としています。*(注意:テキストを理解しやすくするため、わざとTEE用語をより簡単な同等語で置き換えました)。

TEEとは何ですか

TEEはプロセッサまたはデータセンター内の隔離環境であり、プログラムを実行する際にシステムの他の部分からの干渉を受けないようにします。TEEが他の部分からの干渉を受けないようにするには、厳格なアクセス制御が必要であり、これによりシステムの他の部分がTEE内のプログラムやデータにアクセスすることを制御します。現在、TEEは携帯電話、サーバ、PC、クラウド環境など、あらゆる場所で広く利用されており、したがってアクセスしやすく価格も合理的です。

上記の内容は曖昧で抽象的に聞こえるかもしれませんが、実際には異なるサーバーやクラウドプロバイダーがTEEを実装する方法は異なりますが、その根本的な目的はTEEが他のプログラムに干渉されないようにすることです。

!

ほとんどの読者は、指紋を使用して携帯電話をロック解除するなど、生体認証情報でデバイスにログインする可能性があります。しかし、悪意のあるアプリ、ウェブサイト、または脱獄したオペレーティングシステムがこれらの生体認証情報にアクセスして盗むことができないようにするにはどうすればよいでしょうか?実際、データを暗号化する以外に、TEEデバイス内の回路は、内存とプロセッサ領域の占有に関連する機微なデータにアクセスすることを許可していません。

ハードウェアウォレットはTEEのアプリケーションシナリオの別の例です。ハードウェアウォレットはコンピュータに接続され、サンドボックスと通信しますが、コンピュータはハードウェアウォレットに保存されているニーモニックに直接アクセスできません。上記の2つの場合、ユーザーはデバイスの製造元がチップを適切に設計し、適切なファームウェアの更新を提供してTEE内の機密データがエクスポートまたは表示されないようにすることを信頼しています。

セキュリティモデル

残念ながら、TEEの実装は非常に多岐にわたり、これらの異なる実装(Intel SGX、Intel TDX、AMD SEV、AWS Nitro Enclaves、ARM TrustZone)は、独自のセキュリティモデルのモデリングと分析が必要です。この記事の残りの部分では、Intel SGX、TDX、およびAWS Nitroについて主に説明します。これらのTEEシステムは、より多くのユーザーと完全に利用可能な開発ツールを備えています。これらのシステムは、Web3内でも最も一般的に使用されるTEEシステムです。

一般的に、TEEに展開されたアプリケーションのワークフローは次のようになります:

  1. "開発者"はいくつかのコードを書いていますが、これらのコードはオープンソースであるかもしれませんし、そうでないかもしれません
  2. 開発者はその後、コードをEnclave Image File(EIF)にパッケージ化し、TEEで実行できるファイルにします
  3. EIFはTEEシステムを搭載したサーバーに預託されています。一部の場合、開発者はTEEを搭載した個人コンピュータを直接使用してEIFをホスティングし、外部サービスを提供することができます。
  4. ユーザーは事前定義されたインターフェースを使用してアプリケーションとやり取りすることができます。

!

明らかに、ここには3つの潜在的なリスクがあります:

  • 開発者: EIFのコードを準備する目的は何ですか?EIFのコードはプロジェクトの公式なビジネスロジックとは異なる可能性があり、ユーザーの個人データを盗む可能性があります
  • **サーバー:**TEEサーバーは、予想どおりのEIFファイルで実行されていますか?または、EIFは本当にTEE内で実行されていますか?サーバーはTEE内で他のプログラムを実行している可能性もあります
  • **サプライヤー:**TEEの設計は安全ですか?TEE内のすべてのデータをサプライヤーに漏洩するバックドアがありますか?

幸いなことに、現在のTEEには、上記のリスクを排除するための解決策があります。それは再現可能なビルド(Reproducible Builds)とリモートアテステーション(Remote Atteststations)です。

**再構築可能性とは何ですか?**現代のソフトウェア開発では、外部ツール、ライブラリ、フレームワークなどの大量の依存関係をインポートする必要がありますが、これらの依存ファイルには潜在的な脆弱性が存在する可能性があります。npmなどのソリューションでは、依存ファイルに対応するコードハッシュを一意の識別子として使用しています。npmは依存ファイルが記録されたハッシュ値と一致しないことを検出した場合、その依存ファイルが変更されたと見なすことができます。

!

そして、再現可能な構築は、一連の基準と見なすことができ、任意のコードが任意のデバイスで実行される場合、事前に定義された手順に従って構築すると、最終的には一致するハッシュ値を得ることができます。もちろん、実際の操作では、ハッシュ以外の生成物を識別子として使用することもできます。ここでは、それをコードの測定値と呼びます。(code measurement)

Nixは再現可能な構築に使用される一般的なツールです。プログラムのソースコードが公開されると、誰もがコードを確認して開発者が異常な内容を挿入していないことを確認できます。また、誰もがNixを使用してコードを構築し、構築された成果物がプロジェクトが本番環境に展開した成果物と同じコードメトリクス/ハッシュを持つかどうかを確認できます。しかし、TEE内のプログラムのコードメトリクス値をどのように知ることができるのでしょうか?ここで「リモートプルーフ」と呼ばれる概念が関わってきます。

!

リモートプルーフとは、TEEプラットフォーム(信頼された第三者)からの署名メッセージであり、プログラムのコードメトリック値、TEEプラットフォームのバージョンなどが含まれています。リモートプルーフにより、外部の観察者は、プログラムが安全な場所(xxバージョンの実際のTEE)で実行されていることを知ることができますが、誰もアクセスできません。

!

再構築とリモートプルーフにより、ユーザーはTEE内で実行される実際のコードとTEEプラットフォームのバージョン情報を知ることができるため、開発者やサーバーの不正行為を防ぐことができます。

しかし、TEEの場合、常にサプライヤーを信頼する必要があります。TEEサプライヤーが悪意を持っている場合、リモートプルーフを直接偽造することができます。したがって、サプライヤーを攻撃の可能性のある媒体と見なす場合、TEEだけに依存せず、むしろZKまたはコンセンサスプロトコルと組み合わせることをお勧めします。

TEEの魅力

私たちにとって、TEEの特に人気のある特徴、特にAIエージェントの展開にとっての友好性は、主に以下の点にあります:

  • **パフォーマンス:TEEはLLMモデルを実行できるため、そのパフォーマンスとコストは通常のサーバーと同様です。**一方、zkMLはLLMのzkプルーフを生成するために大量の計算能力を必要とします。 GPU サポート: NVIDIA は、最新の GPU ファミリ (Hopper、Blackwell など) で TEE コンピューティング サポートを提供しています。
  • 正確性:LLMsは非決定的であり、同じプロンプトワードを複数回入力すると異なる結果が得られます。したがって、複数のノード(詐欺証明を作成しようとする観察者を含む)がLLMの実行結果について合意に達することは決してありません。このようなシナリオでは、TEEで実行されるLLMは悪意のある者によって操作されないことが信頼できます。TEE内のプログラムは常に記述された方法で実行されるため、これにより、LLMの推論結果の信頼性を保証するために、TEEはopMLや合意よりも適している
  • 機密性: TEE内のデータは外部のプログラムから見えません。したがって、TEEで生成または受信される秘密鍵は常に安全です。この機能により、その鍵によって署名されたメッセージがTEE内部プログラムから来ることが保証されます。ユーザーは、秘密鍵をTEEに委託し、いくつかの署名条件を設定できるだけでなく、TEEからの署名が事前に設定された署名条件と一致することを確認できます
  • ネットワーキング: TEEで実行されるプログラムは、ツールを使用して安全にインターネットにアクセスできます(TEEで実行されるサーバーにクエリまたはレスポンスを明かさずに、正しいデータの検索をサードパーティに提供できます)。これは、サードパーティAPIから情報を取得するために非常に便利であり、信頼されたが専有のモデルプロバイダに計算をアウトソースするために使用できます。
  • **書き込み権限:**TEEで実行されるコードは、zkスキームとは異なり、メッセージ(ツイートまたは取引)を構築し、それらをAPIおよびRPCネットワークを介して送信できます
  • 開発者フレンドリー:TEE関連のフレームワークとSDKは、人々が任意の言語でコードを書き、プログラムをTEEに簡単にデプロイすることができるようにする

良いか悪いかに関係なく、TEEを使用する多くのユースケースには、現時点では代替手段が見つかりにくいです。TEEの導入により、チェーン上のアプリケーションの開発空間がさらに拡大し、新しいアプリケーションシナリオが生まれる可能性があると考えています。

TEEは銀の弾丸ではありません

**TEEで実行されるプログラムは、依然としてさまざまな攻撃やエラーの影響を受けやすいです。**スマートコントラクト同様、さまざまな問題に直面する可能性があります。簡単のため、潜在的な脆弱性を以下のように分類します:

  • 開発者のミス
  • ランタイムの脆弱性
  • アーキテクチャの設計欠陥 *運用上の問題

開発者の過失

意図的または意図しないが、開発者は意図的または意図しないコードによってTEE内のプログラムのセキュリティ保証を弱めることができます。これには次のものが含まれます:

  • **不透明代码:**TEEのセキュリティモデルは外部で検証可能であることに依存しています。コードの透明性は外部第三者の検証にとって非常に重要です。
  • **コードメトリクスに問題がある:**コードが公開されていても、第三者がコードを再構築してリモートプルーフのコードメトリクス値を確認し、提供されたリモートプルーフのコードメトリクスに基づいて確認しない限り、問題があります。これはzkプルーフを受け取っても検証しないのと似ています。
  • **安全でないコード:**あなたがTEEで鍵を正しく生成および管理していても、**コードに含まれるロジックは外部からの呼び出し中にTEE内の鍵を漏洩する可能性があります。**さらに、コードにはバックドアや脆弱性が含まれている可能性があります。従来のバックエンド開発と比較して、ソフトウェア開発および監査プロセスには高い基準が求められ、スマートコントラクトの開発に類似しています。
  • **サプライチェーン攻撃:**現代のソフトウェア開発では、多くのサードパーティのコードが使用されています。サプライチェーン攻撃はTEEの完全性に重大な脅威をもたらします。

ランタイムバグ

開発者は慎重になってもランタイムエラーの犠牲になる可能性があります。 開発者は、以下のいずれかがプロジェクトのセキュリティ保証に影響を与えるかどうかを注意深く考慮する必要があります:

  • **ダイナミックコード:**すべてのコードを常に透明に保つことができるわけではありません。場合によっては、ユースケース自体が、TEEにロードされた不透明なコードを実行時に動的に実行する必要があります。この種のコードは機密情報の漏洩や不変条件の破損を引き起こす可能性があり、非常に注意してこのような状況を防止する必要があります。
  • **ダイナミックデータ:**ほとんどのアプリケーションは、外部APIや他のデータソースを使用して実行されます。セキュリティモデルはこれらのデータソースを含み、DeFiのオラクルと同じ位置にあり、不正確または時代遅れのデータは災害を引き起こす可能性があります。たとえば、AIエージェントのユースケースでは、ClaudeなどのLLMサービスへの過度の依存があります。
  • 安全でないかつ不安定な通信: TEEは、TEEコンポーネントを含むサーバー内で実行する必要があります。セキュリティの観点からは、** TEEを実行しているサーバーは実際にはTEEと外部との間の完璧な中間者(MitM)です。サーバーはTEEの外部接続を傍受し、送信されている内容を表示できるだけでなく、特定のIPを調査し、接続を制限し、接続にデータパケットを注入することさえできます。これにより、相手方がxxから送信されたものと誤解させることができます。**

例えば、TEEで実行されると、暗号化トランザクションのマッチングエンジンを処理できますが、このエンジンは公平な順序付けの保証(MEVに対する耐性)を提供できません。なぜなら、ルーター/ゲートウェイ/ホストは依然としてデータパケットの送信元IPアドレスに基づいて破棄したり、遅延させたり、優先的に処理したりすることができるからです。

アーキテクチャの欠陥

TEEアプリケーションで使用される技術スタックは注意が必要です。TEEアプリケーションを構築する際に、以下の問題が発生する可能性があります:

  • 攻撃面が広いアプリケーション: アプリケーションの攻撃面とは、完全に安全である必要があるコードモジュールの数を指します。攻撃面が広いコードは非常に見落としがちであり、バグや悪用可能な脆弱性が隠れている可能性があります。 これは通常、開発者のエクスペリエンスとも衝突します。例えば、Dockerに依存しないTEEプログラムと比較して、Dockerに依存するTEEプログラムの攻撃面ははるかに広くなります。最も軽量なオペレーティングシステムを使用するTEEプログラムと比較して、成熟したオペレーティングシステムに依存するEnclavesはより広い攻撃面を持っています。
  • **ポータビリティと活性:**Web3では、アプリケーションは検閲に耐えなければなりません。誰でもTEEを起動し、非アクティブなシステム参加者を引き継ぐことができ、TEE内のアプリケーションをポータブルにすることができます。**最大の課題は鍵のポータビリティです。一部のTEEシステムには鍵の派生メカニズムが存在していますが、TEE内で鍵の派生メカニズムを使用すると、他のサーバーはTEE内の鍵をローカルで生成できなくなります。**このため、TEEプログラムは通常、同じマシンに制限されるため、ポータビリティが不十分です
  • 安全でない信頼ルート:例えば、TEEでAIエージェントを実行する際に、与えられたアドレスがそのエージェントに属しているかをどのように検証するか?ここで細心の注意が払われていないと、本当の信頼ルートはTEEそのものではなく、外部の第三者や鍵保管プラットフォームになる可能性があります。

運用上の問題

最後に、TEEプログラムを実行するサーバーを実際に実行する方法に関する実際の注意事項がいくつかありますが、最後に重要ではありません。

  • 安全でないプラットフォームバージョン: TEEプラットフォームは時々セキュリティ更新を受け取りますが、これらの更新はリモートプルーフにプラットフォームバージョンとして反映されます。あなたのTEEが安全なプラットフォームバージョンで動作していない場合、ハッカーは既知の攻撃手段を利用してTEEからキーを盗むことができます。さらに悪いことに、あなたのTEEは今日安全なプラットフォームバージョンで動作していても、明日は安全ではなくなるかもしれません。
  • 物理的な安全性がない: TEEは最大限の努力をしていても、サイドチャネル攻撃の影響を受ける可能性があります。これには通常、TEEが存在するサーバーへの物理的なアクセスと制御が必要です。したがって、物理的なセキュリティは重要なディフェンスレイヤーです。関連する概念として、クラウドプルーフがあります。クラウドプルーフでは、TEEがクラウドデータセンターで実行されており、そのクラウドプラットフォームに物理的なセキュリティが確保されていることを証明できます。

安全なTEEプログラムの構築

私たちは私たちの提案を次のように分類します:

  • 最安全のソリューション *必要な予防措置
  • ユースケースに基づいたアドバイス

1. 最安全なソリューション:外部依存関係なし

高度安全なアプリケーションを作成するには、外部依存関係(外部入力、API、サービスなど)を排除し、攻撃面を減らす必要があります。この方法によって、アプリケーションが独立して実行され、その完全性やセキュリティが損なわれる可能性のある外部インタラクションがないことが保証されます。この方針はプログラムの機能の多様性を制限する可能性がありますが、非常に高いセキュリティを提供することができます。

モデルがローカルで実行されている場合、CryptoxAIのほとんどのユースケースにおいて、このレベルのセキュリティを実現することができます。

2. 必要な予防措置

アプリケーションに外部依存関係があるかどうかにかかわらず、次の内容は必須です!

TEEアプリケーションをバックエンドアプリケーションではなくスマートコントラクトとして扱い、更新頻度を低く保ち、厳格なテストを行います。

TEEプログラムの構築は、スマートコントラクトの作成、テスト、更新と同様に厳格である必要があります。スマートコントラクト同様、TEEは高度に機密で改ざんできない環境で実行され、誤りや予期しない動作が深刻な結果をもたらす可能性があります。これには資金の完全な損失も含まれます。TEEベースのアプリケーションの完全性と信頼性を確保するためには、徹底した監査、広範なテスト、そして最小限の慎重に監査された更新が不可欠です。

監査コードを確認し、ビルドパイプラインをチェックしてください

**アプリケーションのセキュリティはコードそのものだけでなく、ビルドプロセスで使用されるツールにも依存します。**安全なビルドパイプラインは脆弱性を防ぐ上で不可欠です。TEEは提供されたコードが予期した手順で実行されることを保証しますが、ビルドプロセスで導入された欠陥を修正することはできません。

リスクを低減するために、コードを厳密にテストおよび監査し、エラーを排除し、不必要な情報漏洩を防止する必要があります。さらに、再現可能なビルドは、コードが一方によって開発され、他方によって使用される場合に特に重要な役割を果たします。再現可能なビルドにより、TEE内で実行されるプログラムが元のソースコードと一致するかどうかを誰でも検証できるため、透明性と信頼性が確保されます。再現可能なビルドがない場合、TEE内で実行されるプログラムの正確な内容を特定することはほぼ不可能であり、アプリケーションのセキュリティが危険にさらされます。

例えば、DeepWorm(TEEで動作するワームブレインシミュレーションプロジェクト)のソースコードは完全にオープンです。TEE内の実行プログラムは再現可能な方法でNixパイプラインを使用して構築されています。

監査または検証済みのライブラリを使用する

TEEプログラムでの機密データの処理において、キーマネージメントとプライベートデータ処理には、監査済みのライブラリのみを使用してください。監査されていないライブラリは、キーを公開し、アプリケーションのセキュリティを損なう可能性があります。データの機密性と完全性を維持するために、徹底的にレビューされ、セキュリティ中心の依存関係を優先的に考慮してください。

常にTEEからの証明を検証する

**TEEとの対話を行うユーザーは、TEEによって生成されたリモートプルーフまたは検証メカニズムを検証する必要があります。**これらのチェックがない場合、サーバーは応答を操作する可能性があり、真のTEEの出力と改ざんされたデータを区別することができません。リモートプルーフは、TEEで実行されるコードライブラリと構成に対する重要な証明を提供し、TEE内で実行されるプログラムが予想どおりであるかどうかをリモートプルーフに基づいて判断することができます。

具体の証明は、チェーン上(IntelSGX、AWSNitro)で行うことができ、ZKプルーフ(IntelSGX、AWSNitro)を使用してチェーン下で検証することもできます。また、ユーザー自身またはt16zやMarlinHubなどのホスティングサービスを使用して検証することも可能です。

3. ユースケースに基づくアドバイス

アプリケーションの目的と構造に応じて、以下のヒントがアプリケーションをより安全にするのに役立つ可能性があります。

安全なチャネルでユーザーとTEEの相互作用を常に実行することを確認してください

TEE が存在するサーバーは、本質的に信頼されていません。 サーバーは通信を傍受して変更できます。 サーバーがデータを変更せずに読み取ることが許容される場合もあれば、望ましくない場合でもデータを読み取ることが望ましくない場合もあります。 これらのリスクを軽減するには、ユーザーと TEE の間に安全なエンドツーエンドの暗号化チャネルを確立することが重要です。 少なくとも、メッセージの信憑性と発信元を確認するための署名が含まれていることを確認してください。 さらに、ユーザーは、TEE がリモート構成証明を提供していることを常に確認して、正しい TEE と通信していることを確認する必要があります。 これにより、通信の整合性と機密性が確保されます。 **

例えば、OysterはCAAレコードとRFC8657を使用して安全なTLS証明をサポートすることができます。さらに、WebPKIに依存しないTEEネイティブTLSプロトコルであるScallopという名前のものも提供されています。

TEEメモリは瞬時のものであることを知っています

**TEE内存は一時的であり、これはTEEが閉じられるとその内容(暗号化キーを含む)が失われることを意味します。**これらの情報を保存する安全なメカニズムがない場合、重要なデータに永久的にアクセスできなくなる可能性があり、それにより資金や運営が困難に陥る可能性があります。

IPFSなどの分散型ストレージシステムを持つ多者計算(MPC)ネットワークは、この問題の解決策として使用できます。 MPCネットワークは、鍵を複数のノードに分割し、単一のノードが完全な鍵を持たないことを保証しながら、ネットワークが必要な場合に鍵を再構築できるようにします。この鍵で暗号化されたデータは、IPFS上で安全に保存できます。

必要な場合、MPCネットワークは同じイメージを実行している新しいTEEサーバーに鍵を提供することができますが、特定の条件を満たす必要があります。この方法により、データのアクセス可能性と機密性を信頼できない環境でも確保することができる、柔軟性と強力なセキュリティが確保されます。

!

もう一つの解決策は、TEEが関連する取引をそれぞれ異なるMPCサーバーに渡し、MPCサーバーが署名して集約署名を行い、取引を最終的にチェーンに上げる方法です。この方法の柔軟性ははるかに低く、APIキー、パスワード、または任意のデータ(信頼できるサードパーティの保存サービスがない)を保存するためには使用できません。

!

攻撃面を減らす

安全な重要なユースケースに対して、開発者のエクスペリエンスを犠牲にする価値があり、周辺依存をできるだけ減らす試みが価値があります。たとえば、Dstackには、Dstackの動作に必要なモジュールのみを含むYoctoベースの最小カーネルが付属しています。また、TEEの一部としてブートローダーやオペレーティングシステムが不要であるため、SGX(TDXを超える)のような古い技術を使用する価値さえあります。

物理的な分離

TEEと人為的な介入を物理的に分離することで、TEEのセキュリティをさらに強化することができます。 TEEサーバーをデータセンターやクラウドプロバイダーにホスティングすることで物理的なセキュリティを提供できると信じていますが、Spacecoinのようなプロジェクトはかなり興味深い代替案を探っています。それが宇宙です。SpaceTEEの論文は、発射後の慣性モーメントなどの安全対策に依存し、衛星が軌道に入る過程で予想外の軌道に逸脱していないかを検証します。

マルチプルプルーフ

イーサリアムがネットワーク全体に影響を与えるバグのリスクを軽減するために、複数のクライアント実装に依存しているように、マルチプロバーズは異なるTEE実装方法を使用してセキュリティと柔軟性を向上させます。異なるTEEプラットフォームで同じ計算手順を実行することにより、マルチバリデーションは特定のTEE実装の脆弱性がアプリケーション全体に影響を及ぼすことはありません。この方法では計算プロセスが決定論的であること、または非決定論的な場合には異なるTEE実装方法間での合意が定義される必要がありますが、故障隔離、冗長性、クロスバリデーションなどの重要な利点を提供し、信頼性の保証が必要なアプリケーションにとって優れた選択肢となります。

!

将来を見据えて

**TEEは明らかに非常に興奮する分野となっています。**前述のように、AIの普及とユーザーの機密データへの持続的なアクセスは、AppleやNVIDIAなどの大手テクノロジー企業が製品にTEEを使用し、それを製品の一部として提供していることを意味しています。

一方、暗号コミュニティは常にセキュリティに非常に注力しています。開発者がチェーン上のアプリケーションとユースケースを拡張しようとする中で、機能と信頼のバランスを提供する解決策としてTEEが人気を集めています。TEEは完全なZKソリューションと同様に最小限の信頼を必要としないものではありませんが、Web3企業と大手テクノロジー企業の製品が初めて融合する経路として期待されています。

原文表示
内容は参考用であり、勧誘やオファーではありません。 投資、税務、または法律に関するアドバイスは提供されません。 リスク開示の詳細については、免責事項 を参照してください。
  • 報酬
  • コメント
  • 共有
コメント
0/400
コメントなし
  • ピン
いつでもどこでも暗号資産取引
qrCode
スキャンしてGateアプリをダウンロード
コミュニティ
日本語
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)