秋といえばTEEの秋
TEE: Trusted Execution Environment
VISAが中心となって設立された標準化団体であるGlobalPlatformによって定義。
tl;dr
メモリ上に「Enclave」と呼ばれる保護された領域を生成することで、センシティブなデータを保護しつつプログラムを実行する為のCPUの拡張機能。
これによりマルウェアなどを用いた機密情報の流出などを防ぐ。
このような性質を利用して分散台帳にPrivacy+Integrityの性質を持たせられる。(zkがやりたかったこと)
ブロックチェーン文脈ではスケーラビリティ・プライバシー・オラクル・クロスチェーンあたりで応用検討されている
https://gyazo.com/f82011adb39d7b5e6a04e11fad2fc34a
背景
カーネルモード権限などからの操作に対しても秘密鍵やパスワードなどのセンシティブなデータを保護したい
OSを信頼していない:OSが悪意を持っていたとしてもデータを保護したい
そもそもの平文をOSがアクセスできないように。
メモリ破壊(不正なメモリ書き換え、操作)、システムソフトウェアからの攻撃、コールドブート攻撃などを防ぐ(一方でサイドチャネル攻撃には弱い)
akinama.icon TEEにおけるサイドチャネル攻撃は入力を少しずつ変えていってInput -> Outputにかかる時間等々をベンチマークしてどんな処理をしているかをチェックするような攻撃だったような気がする。平文の専用線ハックとして、電磁誘導での波形変化をデジタルに変換して盗み見るみたいなことやってたような。
利用例:1password などのパスワード管理系、指紋認証情報、鍵管理
https://gyazo.com/1484b1a9da0bac5b6fb112d29d10012a
(HIEE: Hardware-assisted Isolated Execution Environments)
https://gyazo.com/2648959bc233b7408b10fe0d2ee98f74
https://gyazo.com/1d5c83a02015b148ec1b1573ef919158
Enclaveの中身
PRM
PRM: Processor Reserved Memory
保護領域リザーブマン
他のソフトウェアから直接アクセスすることはできない
(kernel, hypervisorなど強い権限からでも)non-enclave memoryからのアクセスから保護するための特別なメモリ空間をDRAMのサブセット領域に確保。
EPC: Enclave Page Cache
実際の保護領域マン
enclaveのコードやデータを保持し4KBのpage単位で成る
nrryuya.icon > 96MB、もっとデカくできるが、enclaveの起動遅くなる
EPCM: Enclave Page Cache Metadata
Enclave内で変な操作しようとしていないかチェックするマン
CPUがそれぞれのEPC pageの状態をトラッキングする
例えば、同じEPC pageを2つのenclaveにアロケートしようとするような命令を防ぐ
https://gyazo.com/b25267844dda922a85cd05cd68c3594a
Life cycle
Enclave管理のためにスーパーバイザ、ユーザーそれぞれに対してSGX用の特殊な命令セットが用意
Enclaveへの進入(EENTER)はユーザー命令からのみ
SGXによるプログラムが破壊的なオペレーションを実行することを防ぐ
ECREATE: 新しいenclaveのためにEPC pageをSECSに
EADD: initial codeとdataをenclaveにload
LE(Launch Enclave)がEINITトークン構造体を取得しEINIT
Enclaveが意図していた計算を終えたらEREMOVEにより使ったEPC pagesをdeallocate。
https://gyazo.com/d57306fb2743a43ed9dfb18461f5a7e7
Performance
https://gyazo.com/1539510c13c60735bd05a7ed97672169
2017年時点で、sgxsdkで80%くらい
開発環境
Cloud
Azure/ IBM Cloud/ Alibaba Cloudは対応
AWS/ GCPは非対応
RustかC++のSDKが利用可能
Java対応はCordaが頑張ってる途中で一部コードが公開 重要な2つの機能
Sealing: SGXに状態を持たせるマン
Enclaveは揮発性
Enclave内のコンテンツは軽い気持ちでなくなる
機密性の高いデータを暗号化して外に吐き出して保存
この暗号化をSealingと呼ぶ
この時に用いられる鍵は、CPUコンテキストなどに依存
Enclaveの設定環境、ビルドファイル
同じソースコードで同じoutputになる環境であれば鍵も同じ
Attestation: ちゃんと信頼できるSGXか検証するマン
Local attestation (LA):同一マシン内でEnclaveが動作しているか検証
Remote attestation (RA):SGX <-> IASで変なSGXじゃないか検証
Mutual Remote attestation (MU-RA):SGX <-> SGX で同じ環境・コードで実行しているか検証
そのSGXはIntelから正式に認められてるものか(RA)
相手のEnclaveは意図しているコードを実行するか(MU-RA)
RA: Intelサーバーが認証局的に。
署名鍵はEnclave ユニーク
Intelお墨付きのユニークな公開鍵がいただける。
https://gyazo.com/3a4c60ab5c66be6b52b393002cc603fe
ブロックチェーンへの応用
IntelなどのTEEベンダーが単一障害点
Intelサーバーをトラスト
TEE特有の脆弱性がいくつか
chainlinkやTown CrierなどOracleな文脈でも活用されている
プライバシー保護(&scalability)の文脈では大きく分けて以下の3つの方法
1. Stateless TEEレイヤースタイル
オフチェーンのTEEは状態を持たず暗号化された状態をオンチェーンに保持。
Oasis, Hyperledger PDO(Private Data Objects)
TEEのComputation Layerで状態遷移をし、その暗号化結果をオンチェーンに記録
ledger nodeではTEEによりE2E
https://gyazo.com/45161bdd9e3ffe3034aa31108c0e0c42
2. Stateful TEEレイヤースタイル
Ethereumなどのブロックチェーン(public chain)とは別に実際の状態遷移やその結果を全てTEEマシン間で行うレイヤーを用意
ブロックチェーンには、TEEマシン(worker)の登録 (URL/pubkey)や(Receiptの記録)
worker同士はmutual remote attestationでintegrityを相互検証
登録時に、レポートの検証とmu_raの検証をオンチェーンで
登録しておくことで、クライアントがIASとインタラクティブにやり取りしたりしなくてOKに。
Enigma, substrate tee
https://gyazo.com/72a2773a92bf5af037de98b8a2845ce5
https://gyazo.com/c3ce355257cdb8b51da45a907cd6e793
3. オンチェーンをTEE化ウェイソイヤスタイル
ブロックチェーンのノード自体がSGXマシン
resources: