このトピックでは、Intel Software Guard Extension (SGX) の仕組みとインストール方法について説明します。

SGX の仕組み

Intel SGX は Intel によって開発されたアーキテクチャ拡張です。 SGX は、メモリ内の暗号化された実行領域であるエンクレーブを使用して、選択したコードとデータを悪意のある開示または変更から保護します。

SGX は、物理メモリの 1 つ以上の範囲をエンクレーブページキャッシュ (EPC) として確保し、メモリ暗号化エンジン (MEE) を使用して EPC に格納されたデータを暗号化します。 EPC に保存されたデータは、CPU 内でのみ復号化されます。 SGX は、CPU ベースのセキュリティ制御を提供します。 オペレーティングシステム、仮想マシンマネージャー (VMM)、または基本入出力システム (BIOS) が侵害された場合でも、データの保護は維持されます。

アプリケーション

機密データを暗号化し、暗号化されたデータをクラウドのエンクレーブに送信し、リモート認証を介してエンクレーブに対して対応するキーをプロビジョニングできます。 次に、CPU で保護されている完全に暗号化されたデータを計算すると、その結果は暗号化されたバージョンで返されます。 この場合、データ開示リスクの低い強力なクラウドコンピューティングを利用できます。

EDL

エンクレーブ定義言語 (EDL) は、SGX の基礎となるものです。 これが、すべてのエンクレーブのインターフェイス関数を定義します。 構築仮定に、Edger8r ツールは、信頼できるおよび信頼できないプロキシ/ブリッジ関数を生成し、セキュリティチェックを実行します。

エンクレーブインターフェース関数は、エンクレーブ呼び出し (ECALL) と外部呼び出し (OCALL) に分けることができます。

  • ECALL:アプリケーションから、信頼できる環境として定義されているエンクレーブ内のインターフェース関数への呼び出し。
  • OCALL:エンクレーブ内から信頼できない環境として定義されているアプリケーションへの呼び出し。
// demo.edl
enclave {
        // Add your definition of "secret_t" here
        trusted {
                 public void get_secret([out] secret_t* secret);
        };
        untrusted {
        // This OCALL is for illustration purposes only.
        // It should not be used in a real enclave,
        // unless it is during the development phase
        // for debugging purposes.
        void dump_secret([in] const secret_t* secret);
        };
};

インストーラーファイルを使用した SGX のインストール

インストーラーファイルを使用して SGX をインストールする前に、対応するLinuxカーネルヘッドファイルをインストールする必要があります。 インストーラーファイルには、SGXドライバー、SGX プラットフォームソフトウェア (PSW)、およびソフトウェア開発キット (SDK) が含まれています。
Makefile のデフォルトのインストールディレクトリは / opt / intel / です。
  1. 適切な SGX インストーラーファイルをダウンロードします。
  2. インストールガイドの手順に従ってください。

ソースコードを使用した SGX のインストール

ソースコードを使用して SGX をインストールする前に、対応する Linux カーネルヘッドファイルをインストールする必要があります。 インストーラーファイルには、SGX ドライバー、PSW、および SDK が含まれています。
Makefile のデフォルトのインストールディレクトリは/opt/intel/です。
  1. GitHubからソースコードをダウンロードします。
  2. README.md ファイルで説明されている手順に従って、ソースコードをコンパイルします。