Googleが開発するConfidential Computingプラットフォーム「Oak」
osuke.icon > 「読み方はオアクじゃなくてオークですね」
tl;dr;
googleのoakプロジェクトチームが開発しているConfidential Computingプラットフォーム
クラウドのTEE VMに対する付加価値として、
モジュールの実行単位及びそれらのコミュニケーションロジックを動的に生成可能
そして、Enclave内実行単位ごとのIsolation、権限管理
サーバー・クライアント・ストレージ・時刻取得などの便利Enclaveモジュールがデフォルトで実装
全体像
https://gyazo.com/6c055f04edb7d614abc3296e6af9e8dc
Oak Runtime
ネイティブコードで実装 (rust)
Oak Node
wasmが動く実行単位
Enclave内のisolation、oak ABI定義のエントリーポイントのみ
cipepser.icon 1つのEnclaveに対して複数のOak Nodeが含まれますか?あとOak Nodeのライフタイムの例とかあります?(clientからのリクエストを受け付ける度に新しいOak Nodeが作られ、スレッドに割当→処理が終わったらOak Node単位で終了?)
シングルスレッド
Channel
Oak RuntimeとOak Node、あるいはNode同士がコミュニケーションする双方向メッセージストリーム
oak ABIで定義されるhost functionをエントリーポイントとしてchannelのやりとり
Oak Application
Oak Nodeの組み合わせ
Channel
https://gyazo.com/4f8d8bf3dd67bbbcd2c158d2b3b9bfaa
NodeとChannelは生成時に設定するlabelにひもづく
labelに基づいて、データ送受信を強制
label: confidentiality, integrity
例:一番低い権限は、"public untrusted"
パブリックデータ、confidentiality, integrityが空
nodes
https://gyazo.com/e81b57b212b2bf41eec431bf4e16f8e1
Oak Node
pseudo-Nodes
nativeコードで実装されているので外部サービスと疎通可能
gRPC server
HTTP server
Logging
gRPC Client
HTTP Client
Storage
Roughtime client
アプリケーション開発
アプリケーションデプロイ時の設定
protobufスキーマ定義
https://gyazo.com/09c4f123c3c05e425dea8bf2716cd76c
cipepser.icon ほほー。gRPCで設定するんですね
memo
全てのNodeは同じenclaveで起動
新しいnodeは node_createで新しいchannelは channel_create で生成
最初にgrpc pseudo nodes or http server pseudo nodeを起動し、クライアントがリクエストを送信できるように環境セットアップ
remote attestationはruntimeとpseudo nodeに対して。
サードパーティが開発したwasm moduleを使ってアプリケーションを開発したい場合は、wasm modulesのハッシュ値に署名し正当性を検証するプロセスも
reviewr
oak moduleのコードを検証し署名
application developer/Operator
アプリケーションで利用するサードパーティ生のoak moduleとその署名をダウンロードし署名検証しデプロイ
Client
クライアントライブラリが対応するreviwerの公開鍵をダウンロードし、デプロイされているoakアプリケーションに送信
クライアントライブラリが正当なことを仮定
検証可能なモジュールコードリポジトリ(夢)
Oak上で動かすモジュールをサードパーティが開発することができ、アプリケーション開発者はそのモジュールを組み合わせてOak上で秘匿性かつ完全性が保証されたロジックを実行可能
remote attestationの用途
クライアント<->Oak runtimeの暗号化
oak runtimeが正しいプログラムを実行しているか
クライアントが指定したラベルを正しくpropagateするか
remote attestationはクライアントが検証
将来的にはgoogle trillianみたいなものを使ってmrenclaveを検証可能に
cipepser.icon :eyes:
oak webassembly abiによってwasmの外部環境からのエントリーポイントを定義
WASIに準拠するのではなく、oakで必要なABIエントリーポイント(host functions)のみ定義
セキュリティ的に良さそう
ノードは実行時に動的に生成される
同チーム他プロジェクト
tinkのrust実装
OpenTitanで使われるペリフェラルの形式検証
AES crypto-acceleratorなど
ユースケース
TEE SDKについては、前はc++で開発していた背景かつgoogleということでasyloだが、rustに移行することでrust sgx sdkやfortanixをリサーチしているがロジック実装を優先し、正式選定はこれから。
重要視している観点:grpcが使えること、intel sgx以外もサポートすること