0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【30分でできる】TEE(Trusted Execution Environment) をAzureで作成し、HelloWorldしてみた。

Posted at

@kenmaroです。
普段は主に秘密計算、準同型暗号などの記事について投稿しています
秘密計算に関連するまとめの記事に関しては以下をご覧ください。

勝手に秘密計算アドベントカレンダーについて

この記事は

の「6日目」の記事
としようかと思っています。
興味のある方はアドベントカレンダー参加してみませんか?
ご連絡お待ちしております。

概要

新しいことを吸収したいという一心でムチを打ち、
TEE(Trusted Execution Environment)
で使ってみようと思います。

なにも知識がないので、

これを愚直に追ってみようと思っています。

TEEとはなんぞや、というところに関してはいろいろ記事がありますのでそちらをご覧ください。
例えば

これとかです。

忙しい人へ

  • TEE(Trusted Execution Environment)のチュートリアルを実際に動かしてみたよ
  • Azure でSGXに対応したインスタンスを作ったよ
  • 無事Hello,Worldできたよ
  • 1 + 2 = 3 も秘密領域で実行できたよ
  • 情報が散らばっているけど、本記事に沿えば30分もあればチュートリアル完了できるよ

早速やっていきます。

Azureからインスタンスを作成

Virtual machine name
test-sgx

Region
West US


Security type
Standard

Image
Ubuntu Server 20.04 LTS - Gen2

Size
Standard DC1s v2 (1 vcpu, 4 GiB memory)

とりあえずこんな感じで
DC1s
を用意してみました。

コストは1時間10円くらいです。

ssh したら、

azureuser@test-sgx:~/openenclave/samples/helloworld$ cat /proc/cpuinfo | grep sgx
flags		: sgx sgx_lc

これをみて、
「なんかSGX入ってそうやなぁ」
くらい思っときます。

いざチュートリアルへ

ここをフォローしていきます。

フォローしていくのですが、最終的に私は

この記事を大いに参考にさせていただきました。
このようにまとめている人がいることに感謝いたします。

レポジトリの準備

ssh したら、

git clone https://github.com/openenclave/openenclave.git
git submodule update --init --recursive
cd openenclave/samples/helloworld

を行います。

openenclave SDKのインストール

なにはともあれ、helloworld を実行するために、

ここをフォローする必要があります。

ひととおり実行すると、

/opt/openenclave

が出現しているはずです。

その下に存在しているフォルダ構成の簡単な説明は、

ここをフォローします。
上記リンクの最後の、

source /opt/openenclave/share/openenclave/openenclaverc

を実行することで、必要な環境変数を設定できるようです。
念の為どんなものが設定されているかみてみると、

# Copyright (c) Open Enclave SDK contributors.
# Licensed under the MIT License.

# Update PKG_CONFIG_PATH.
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:/opt/openenclave/share/pkgconfig

# Set CMake Config-package path
export CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}:/opt/openenclave/lib/openenclave/cmake

# Update PATH.
export PATH=${PATH}:/opt/openenclave/bin

らが設定されているようですね。なにも考えず次に進みます。

openenclaveのビルド

openenclave 直下にて、

mkdir build
cd build
cmake -DHAS_QUOTE_PROVIDER=OFF ..

を実行します。私の場合ここでdoxygenがないと怒られたので、

sudo apt install doxygen -y

を実行したところ cmake が通ったので、

make

を実行しました。5〜10分くらいビルドに時間がかかります。

ビルドが完了した段階で、

cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=~/openenclave-install ..
make install

を実行してインストールしました。

helloworld の実行

source ~/openenclave-install/share/openenclave/openenclaverc

で環境変数などを設定した後、

cd ~/openenclave/samples/helloworld
make
make run

を実行します。すると

host/helloworldhost ./enclave/helloworldenc.signed
Hello world from the enclave
Enclave called into host to print: Hello World!

となり、enclave(セキュア領域)からのHello,Worldが出力されます。

お疲れ様でした。

enclave 内で簡単な計算をやってみる

先ほどの helloworld/enclave/enc.c

で、

void enclave_helloworld()
{
    int tmp1 = 1;
    int tmp2 = 2;
    int tmp3 = tmp1 + tmp2;
    fprintf(stdout, "%d + %d = %d\n", tmp1, tmp2, tmp3);


    // Call back into the host
    oe_result_t result = host_helloworld();
    if (result != OE_OK)
    {
        fprintf(
            stderr,
            "Call to host_helloworld failed: result=%u (%s)\n",
            result,
            oe_result_str(result));
    }
}

を実行すると、問題なく

host/helloworldhost ./enclave/helloworldenc.signed
Hello world from the enclave
1 + 2 = 3
Enclave called into host to print: Hello World!

となりました。(当たり前か、、)

というだけです。

まとめ

TEE、なんとなく聞いたことある
という状態からチュートリアルコードを動かすところまでをやってみました。

Azureのアカウントさえあれば、10円あれば再現できます。
この記事に沿って実行すれば、1時間もあれば十分なはずです。

私は、次のステップとして

host から enclave にデータを渡して、
enclave 内で保持しているデータと何か計算をして、
host に返す

つまり enclave に計算に必要な情報が入っていて、
enclaveで計算した結果のみをhostが取得

みたいなシナリオでサンプルコードを走らせてみようと思っています。

そこまでできたらまた記事にしようかと思います。

TEEはまだ全然理解していないので勉強頑張ります。!

今回はこの辺で。

@kenmaro

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?