RustでIntel SGX(Rust LT#5)

RustでIntel SGX(Rust LT#5)

Intel SGX, Intel SGX SDK, Rust SGX SDKについてざっくりお話させていただきました。

149b2599ce16d0045f1251318c8f1e76?s=128

Kosuke Ito

May 27, 2019
Tweet

Transcript

  1. RustでIntel SGX Rust LT #5

  2. 自己紹介 名前:伊藤光佑 twitter: @thank_youkyou Aerial Partners エンジニア 暗号資産の会計システム「Gtax」

  3. Intel SGX • Software Guard Extensions ハードウェアレベルでデータを攻撃者から守る技術 • enclave ◦

    OSが攻撃されても安全なCPU内の保護領域 ◦ アプリケーションの機密な処理を分割する
  4. 何に使うの? • 様々なレイヤーの脅威を避けたいアプリケーション ◦ 暗号鍵管理 ◦ アイデンティティ管理 ◦ 機密記録

  5. どうやって使うの? • ハードウェア ◦ SGXサポートのIntelプロセッサ • ソフトウェア ◦ Intel SGX

    SDK ▪ C++でIntel SGXアプリケーションを書ける
  6. C++?

  7. Rustがいい!

  8. Rust SGX SDK Intel SGX アプリケーションをRustでかける  Rustのメモリ安全性を活用できる  C/C++と同等に高速

  9. アプリケーションコードの構成 enclave SGXによって保護したい処理 app enclave内の処理を呼び出す メインアプリケーション

  10. コードの構成 • Enclave Definition Language • lib.rs • main.rs

  11. Enclave Definition Language • enclaveで実行する関数のインターフェイスを定義する public sgx_status_t say_hello();

  12. コードの構成 • Enclave Definition Language • lib.rs • main.rs

  13. lib.rs 定義した関数を実装する • C言語から利用する #[no_mangle] pub extern "C" fn say_hello()

    -> sgx_status_t { // Rustのplintlnマクロ println!("{}", "hello world"); // 戻り値は成功ステータス sgx_status_t::SGX_SUCCESS }
  14. コードの構成 • Enclave Definition Language • lib.rs • main.rs

  15. main.rs 定義した関数を呼び出す • C言語の関数として呼び出す • 定義した引数に加えてenclaveのidとstatusを受け取るretvalを渡す let result = unsafe

    { say_hello(enclave.geteid(), &mut retval) };
  16. 利用例 Enigma データを秘匿化したまま演算するP2Pネットワーク ブロックチェーン上のオフチェーンレイヤー プライベートデータに関する重い処理も可能な 分散型アプリケーションを作る • データマーケットプレイス • アイデンティティの管理

    • 電子投票
  17. SGXアプリ つくるならRust!!

  18. ありがとうございました