SlideShare ist ein Scribd-Unternehmen logo
1 von 42
暗号理論における安全性の証明: プログラム難読化( Obfuscation )の研究動向 Yury Lifshits & Boaz Barak の資料を一部借用しています Part of slides are copies from the web pages of Yury Lifshits & Boaz Barak  http:// logic.pdmi.ras.ru/~yura/obfuscation.html http:// www.cs.princeton.edu/~boaz / 羽田 知史( IBM 東京基礎研究所) Satoshi Hada (IBM Research - Tokyo) mailto: satoshih at jp ibm com
アジェンダ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
プログラムの難読化( Obfuscation )は、プログラムを Unintelligible にする技術です The winning entry for the 1998 International Obfuscated C Code Contest
難読化には様々なアプリケーションがあります ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
難読化の応用(1):秘密鍵暗号から公開鍵暗号への変換 ,[object Object],[object Object],[object Object],[object Object],[object Object],Enc K Dec K C M M K:  秘密の共有鍵 O(Enc K ) Dec K C M M Enc K を難読化
難読化の応用(2):  Homomorphic Encryption の実現 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
難読化の応用(3):  Random Oracle の実現 ,[object Object],[object Object],[object Object],[object Object],[object Object],Distinguisher (Adversary) f s u BB access BB access S is a secret seed
難読化のテクニックには様々なものがあります ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
しかし、安全性の評価は難しいです ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
近年、難読化の安全性を、暗号理論の観点で、議論する研究がさかんです。 赤:主に否定的な結果 青:主に肯定的な結果 ,[object Object],[object Object],[object Object],[object Object],2010 ,[object Object],2009 ,[object Object],2008 ,[object Object],[object Object],[object Object],[object Object],2007 ,[object Object],[object Object],2005 ,[object Object],2004 ,[object Object],2001 ,[object Object],2000
アジェンダ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Obfuscator の定義: Obfuscator は、機能を保持したままプログラムをわかりにくく変換するアルゴリズムです。安全性の定義は非自明です。 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Simulation Paradigm に基づいて、 Obfuscator の安全性を定義することができます(1) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Simulation Paradigm に基づいて、 Obfuscator の安全性を定義することができます(2) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
しかし、前述の Naïve な安全性の定義は強すぎます ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
攻撃者の計算出力を制限することにより、弱い安全性を定義することも可能です。 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
アジェンダ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
MAIN RESULT (informal) ,[object Object],[BGI+01] Barak, Goldreich, Impagliazzo, Rudich, Sahai, Vadhan, Yang “On the (Im)possibility of Obfuscating Programs”, CRYPTO 2001.
DEFINING OBFs ,[object Object],1.   P  can be efficiently recovered from  O (P) (i.e., complete recovery of source code) 2.   P  is hard to learn  (i.e., can’t recover  P   using BB access to its function) Thm   [BGI+01] :  ∀  O   ∃  P  s.t.  O  totally fails on  P .  (assuming OWF exist) * “TASTE” OF PROOF
* “TASTE” OF PROOF Pf:   Show function family  {P  ,  }  s.t.  O  totally fails  ( code recovery  +  hard to learn )  on random member: Thm   [BGI+01] :  ∀   O   ∃  P  s.t.  O  totally fails on  P .  (assuming OWF exist) Define P  ,  (b,x)=  b=0 , x=   b=1 , x(0,  )=  0 otherwise Claim:   ∀ O  for random   ,   w.h.p.  O  totally fails on  P  , 
* “TASTE” OF PROOF Claim:   ∀ O  for random   ,   w.h.p.  O  totally fails on  P  ,  Thm   [BGI+01] :  ∀   O   ∃  P  s.t.  O  totally fails on  P .  (assuming OWF exist) Pf:   Show function family  {P  ,  }  s.t.  O  totally fails  ( code recovery  +  hard to learn )  on random member: Define P  ,  (b,x)=  b=0 , x=   b=1 , x(0,  )=  0 otherwise
Pf: To recover   ,   from  P’= O (P  ,  )   - output  P’(1,P’) For random   ,   can’t distinguish bet  P  ,   and  all-zero function using BB access. Define P  ,  (b,x)=  b=0 , x=   b=1 , x(0,  )=  0 otherwise Claim:   ∀ O  for random   ,   w.h.p.  O  totally fails on  P  ,  Note:  In paper, rule out OBFs for programs with  bounded   input length. Black-box access is useless: Can recover source from obf’d code:
MEANING OF RESULT ,[object Object],Maybe  “virtually general-purpose”  obf exists? Similar to critique of NP-completeness results. Counter Ex. “ Useful” progs  (DES,RSA,AES,SHA,…) O   secure
Summary by Scott Aaronson (http://scottaaronson.com/blog/?p=16) ,[object Object]
アジェンダ ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
研究の方向性:汎用の Obfuscator は、存在しないので、特定のプログラム用の Obfuscator を考察する必要があります。 ,[object Object],[object Object],[object Object],[object Object],[object Object]
Positive Result (1) : Point Functions は難読化できることが知られています。 ,[object Object],1 if x=α 0 otherwise Input: x 埋め込まれる情報 : f(α) Step 1: f(x) を計算 Step 2: f(x)=f(α) なら1を出力 難読化 f(x) は α に関して1ビットも漏らさない特殊な関数。様々な計算量的な困難性の仮定の下での、この関数の設計が研究テーマ。 難読化されたプログラム Input: x 埋め込まれる情報 : α Step 1: x=α なら1を出力
Positive Result (1) :  実は、パスワード認証で広く用いられているテクニックであり、その安全性を、難読化の観点で議論することができます。 (user, password) Valid / Invalid Alice α Bob β ・・・ Password Table 難読化 Alice f(α) Bob f(β) ・・・
Sampling Obfuscator :多くの暗号プリミティブ(暗号化など)は確率的なプログラムなので、確率的なプログラムの難読化の重要なテーマです。 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Positive Result (2) : Sampling Obfuscator の概念に基づいて、 ReEncryption は難読化できることが知られています。 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],ReEncryption by メールセンター (sk1 が漏れないように難読か ) (pk1, sk1)  (pk2, sk2)  E(pk1, M)  E(pk1, M)  E(pk2, M)
Positive Result ( 3 ) :  同様に Encrypted Signatures も難読化できることが知られています。 ,[object Object],Sign Encrypt Alice’s sk (署名鍵) Bob’s pk (暗号化鍵) m c σ Verify Decrypt Alice’s pk (検証鍵) Bob’s sk (復号鍵) 検証結果 c メッセージ 暗号文 難読化の対象 Alice (メール送信者) Bob (メール受信者) σ
従来のメール・アプリケーションでは、 StE の処理は、ローカル・マシンで行われます。署名鍵もローカルマシンで保持されるので安全です。 (e.g., Lotus Notes) Sign-then- Encrypt@ LocalApp Alice’s email application Bob’s email application Server Server Signing keys are stored in local machines
最近の SaaS 環境では、署名鍵はサーバー上に保持され、 StE の処理がサーバー上で行われる必要があります。したがって、署名鍵の漏洩が懸念されます。 (e.g., Lotus Live, Gmail, Hotmail, etc) Sign-then- Encrypt@ Server Alice’s Web Mail Bob’s Web Mail Browser Browser Server Server Key leakage is a potential security issue!! Browsers have no capability of sign-then-encrypt
StE プログラムを暗号理論的に難読化することができれば、署名鍵の漏洩を防ぐことができます。 Sign-then- Encrypt@ Server Alice’s Web Mail Bob’s Web Mail Browser Browser Server Server We can obfuscate this program
Basic Idea :署名鍵を暗号化することにより難読化する。ただし、暗号化した署名鍵を使っても、 Encrypted Signatures の処理が可能なようにアルゴリズムを設計する。 ,[object Object],[object Object],[object Object],Sign Encrypt m c σ Encrypt Alice’s sk Bob’s pk Sign Obfuscated Encrypted Signature Program Encrypted  Alice’s sk
Basic Idea ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Obfuscation 難読化前 難読化後 プログラム中に保持される情報は暗号化されているので、 Alice の秘密鍵は漏れない
使用する署名と暗号化のアルゴリズム ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
難読化対象の Encrypted Signature プログラム ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],署名 暗号化
難読化の試み(失敗例) ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],難読化前 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Obfuscation 難読化後 (c1,c2) はランダムに生成される (c1,c2) はランダムに生成されない
難読化 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],難読化前 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Obfuscation 難読化後 (c1,c2) はランダムに生成される 同様に、 (c1,c2) はランダムに生成される
まとめ
まとめ 安全性の定義 実現可能 実現不可能 安全性の証明が既知 (証明が可能) 安全性の証明が 不可能あるいは 未解決 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Weitere ähnliche Inhalte

Was ist angesagt?

競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
.NET micro FrameWork for TOPPERS (.NET基礎)@基礎勉強会
.NET micro  FrameWork for TOPPERS  (.NET基礎)@基礎勉強会.NET micro  FrameWork for TOPPERS  (.NET基礎)@基礎勉強会
.NET micro FrameWork for TOPPERS (.NET基礎)@基礎勉強会Kiyoshi Ogawa
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門ryos36
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプKohsuke Yuasa
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptotrmr
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Shinya Takamaeda-Y
 
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)Shinya Takamaeda-Y
 
Polyphony の並列化
Polyphony の並列化Polyphony の並列化
Polyphony の並列化ryos36
 
PythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミングPythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミングShinya Takamaeda-Y
 
Coq 20100208a
Coq 20100208aCoq 20100208a
Coq 20100208atmiya
 
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装Ryosuke Okuta
 
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発Shinya Takamaeda-Y
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようShinya Takamaeda-Y
 
言語処理系入門€10
言語処理系入門€10言語処理系入門€10
言語処理系入門€10Kenta Hattori
 
katagaitaictf7_hw_ysk
katagaitaictf7_hw_yskkatagaitaictf7_hw_ysk
katagaitaictf7_hw_yskysk256
 
Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)Jun-ya Norimatsu
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型信之 岩永
 

Was ist angesagt? (20)

競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
.NET micro FrameWork for TOPPERS (.NET基礎)@基礎勉強会
.NET micro  FrameWork for TOPPERS  (.NET基礎)@基礎勉強会.NET micro  FrameWork for TOPPERS  (.NET基礎)@基礎勉強会
.NET micro FrameWork for TOPPERS (.NET基礎)@基礎勉強会
 
研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門研究者のための Python による FPGA 入門
研究者のための Python による FPGA 入門
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
C++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプC++ ポインタ ブートキャンプ
C++ ポインタ ブートキャンプ
 
katagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Cryptokatagaitai CTF勉強会 #5 Crypto
katagaitai CTF勉強会 #5 Crypto
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討Pythonを用いた高水準ハードウェア設計環境の検討
Pythonを用いた高水準ハードウェア設計環境の検討
 
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
Veriloggen: Pythonによるハードウェアメタプログラミング(第3回 高位合成友の会 @ドワンゴ)
 
Polyphony の並列化
Polyphony の並列化Polyphony の並列化
Polyphony の並列化
 
PythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミングPythonとVeriloggenを用いたRTL設計メタプログラミング
PythonとVeriloggenを用いたRTL設計メタプログラミング
 
Coq 20100208a
Coq 20100208aCoq 20100208a
Coq 20100208a
 
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
 
音声認識と深層学習
音声認識と深層学習音声認識と深層学習
音声認識と深層学習
 
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
メモリ抽象化フレームワークPyCoRAMを用いたソフトプロセッサ混載FPGAアクセラレータの開発
 
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみようPythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
PythonとPyCoRAMでお手軽にFPGAシステムを開発してみよう
 
言語処理系入門€10
言語処理系入門€10言語処理系入門€10
言語処理系入門€10
 
katagaitaictf7_hw_ysk
katagaitaictf7_hw_yskkatagaitaictf7_hw_ysk
katagaitaictf7_hw_ysk
 
Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)Chainer Meetup LT (Alpaca)
Chainer Meetup LT (Alpaca)
 
C# 8.0 null許容参照型
C# 8.0 null許容参照型C# 8.0 null許容参照型
C# 8.0 null許容参照型
 

Ähnlich wie Provable Security4

Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Yasutomo Kawanishi
 
プログラミング・パラダイム
プログラミング・パラダイムプログラミング・パラダイム
プログラミング・パラダイムYusuke Matsushita
 
ガイオプライベートセミナー2012秋(坂本)
ガイオプライベートセミナー2012秋(坂本)ガイオプライベートセミナー2012秋(坂本)
ガイオプライベートセミナー2012秋(坂本)Kazunori Sakamoto
 
Provable Security2
Provable Security2Provable Security2
Provable Security2Satoshi Hada
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)啓 小笠原
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio CodeAkira Inoue
 
Python standard 2022 Spring
Python standard 2022 SpringPython standard 2022 Spring
Python standard 2022 Springanyakichi
 
Tokyo.R #19 発表資料 「Rで色々やってみました」
Tokyo.R #19 発表資料 「Rで色々やってみました」Tokyo.R #19 発表資料 「Rで色々やってみました」
Tokyo.R #19 発表資料 「Rで色々やってみました」Masayuki Isobe
 
Web applicationpenetrationtest その2
Web applicationpenetrationtest その2Web applicationpenetrationtest その2
Web applicationpenetrationtest その2Tetsuya Hasegawa
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1Atsushi Tadokoro
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ陽平 山口
 
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチZynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチMr. Vengineer
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライドkoturn 0;
 

Ähnlich wie Provable Security4 (20)

Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜Pythonによる機械学習入門〜基礎からDeep Learningまで〜
Pythonによる機械学習入門〜基礎からDeep Learningまで〜
 
Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
Subprocess no susume
Subprocess no susumeSubprocess no susume
Subprocess no susume
 
プログラミング・パラダイム
プログラミング・パラダイムプログラミング・パラダイム
プログラミング・パラダイム
 
ガイオプライベートセミナー2012秋(坂本)
ガイオプライベートセミナー2012秋(坂本)ガイオプライベートセミナー2012秋(坂本)
ガイオプライベートセミナー2012秋(坂本)
 
Provable Security2
Provable Security2Provable Security2
Provable Security2
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
TypeScript と Visual Studio Code
TypeScript と Visual Studio CodeTypeScript と Visual Studio Code
TypeScript と Visual Studio Code
 
Python standard 2022 Spring
Python standard 2022 SpringPython standard 2022 Spring
Python standard 2022 Spring
 
R04 Security II
R04 Security IIR04 Security II
R04 Security II
 
Tokyo.R #19 発表資料 「Rで色々やってみました」
Tokyo.R #19 発表資料 「Rで色々やってみました」Tokyo.R #19 発表資料 「Rで色々やってみました」
Tokyo.R #19 発表資料 「Rで色々やってみました」
 
Django_fukuoka
Django_fukuokaDjango_fukuoka
Django_fukuoka
 
Django_Fukuoka
Django_FukuokaDjango_Fukuoka
Django_Fukuoka
 
Ilerpg Study 003
Ilerpg Study 003Ilerpg Study 003
Ilerpg Study 003
 
Web applicationpenetrationtest その2
Web applicationpenetrationtest その2Web applicationpenetrationtest その2
Web applicationpenetrationtest その2
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3  インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
 
オープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリオープンソースで作るスマホ文字認識アプリ
オープンソースで作るスマホ文字認識アプリ
 
Zynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチZynq VIPを利用したテストベンチ
Zynq VIPを利用したテストベンチ
 
第1回勉強会スライド
第1回勉強会スライド第1回勉強会スライド
第1回勉強会スライド
 

Provable Security4

  • 1. 暗号理論における安全性の証明: プログラム難読化( Obfuscation )の研究動向 Yury Lifshits & Boaz Barak の資料を一部借用しています Part of slides are copies from the web pages of Yury Lifshits & Boaz Barak http:// logic.pdmi.ras.ru/~yura/obfuscation.html http:// www.cs.princeton.edu/~boaz / 羽田 知史( IBM 東京基礎研究所) Satoshi Hada (IBM Research - Tokyo) mailto: satoshih at jp ibm com
  • 2.
  • 3. プログラムの難読化( Obfuscation )は、プログラムを Unintelligible にする技術です The winning entry for the 1998 International Obfuscated C Code Contest
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20. * “TASTE” OF PROOF Pf: Show function family {P  ,  } s.t. O totally fails ( code recovery + hard to learn ) on random member: Thm [BGI+01] : ∀ O ∃ P s.t. O totally fails on P . (assuming OWF exist) Define P  ,  (b,x)=  b=0 , x=   b=1 , x(0,  )=  0 otherwise Claim: ∀ O for random  ,  w.h.p. O totally fails on P  , 
  • 21. * “TASTE” OF PROOF Claim: ∀ O for random  ,  w.h.p. O totally fails on P  ,  Thm [BGI+01] : ∀ O ∃ P s.t. O totally fails on P . (assuming OWF exist) Pf: Show function family {P  ,  } s.t. O totally fails ( code recovery + hard to learn ) on random member: Define P  ,  (b,x)=  b=0 , x=   b=1 , x(0,  )=  0 otherwise
  • 22. Pf: To recover  ,  from P’= O (P  ,  ) - output P’(1,P’) For random  ,  can’t distinguish bet P  ,  and all-zero function using BB access. Define P  ,  (b,x)=  b=0 , x=   b=1 , x(0,  )=  0 otherwise Claim: ∀ O for random  ,  w.h.p. O totally fails on P  ,  Note: In paper, rule out OBFs for programs with bounded input length. Black-box access is useless: Can recover source from obf’d code:
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28. Positive Result (1) : 実は、パスワード認証で広く用いられているテクニックであり、その安全性を、難読化の観点で議論することができます。 (user, password) Valid / Invalid Alice α Bob β ・・・ Password Table 難読化 Alice f(α) Bob f(β) ・・・
  • 29.
  • 30.
  • 31.
  • 32. 従来のメール・アプリケーションでは、 StE の処理は、ローカル・マシンで行われます。署名鍵もローカルマシンで保持されるので安全です。 (e.g., Lotus Notes) Sign-then- Encrypt@ LocalApp Alice’s email application Bob’s email application Server Server Signing keys are stored in local machines
  • 33. 最近の SaaS 環境では、署名鍵はサーバー上に保持され、 StE の処理がサーバー上で行われる必要があります。したがって、署名鍵の漏洩が懸念されます。 (e.g., Lotus Live, Gmail, Hotmail, etc) Sign-then- Encrypt@ Server Alice’s Web Mail Bob’s Web Mail Browser Browser Server Server Key leakage is a potential security issue!! Browsers have no capability of sign-then-encrypt
  • 34. StE プログラムを暗号理論的に難読化することができれば、署名鍵の漏洩を防ぐことができます。 Sign-then- Encrypt@ Server Alice’s Web Mail Bob’s Web Mail Browser Browser Server Server We can obfuscate this program
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 42.

Hinweis der Redaktion

  1. The main result of this part is that general purpose software obfuscators do *not* exist, even if we use a very weak definition of security. By “general purpose” I mean an obfuscator that takes any program and should output a Scrambled version of this program. This result is joint work with Goldreich, Impagliazzo, Rudich, Sahai, Vadhan and Yang.
  2. Before proving such a result we need to formally define what does it mean for An obfuscator to be secure, or at least what it means for an obfuscator to be insecure. We use the following definition. Let O be a candidate obfuscator. That means that O is an algorithm that takes A program as input and outputs a different program. We say that O totally fails on some program P if P can be efficiently recovered from O(P). Note that this means that it is possible to invert the obfuscator and recover the entire Original source code from the supposedly obfuscated version. If this happens then the obfuscator definitely failed. However one may complain that this definition does not capture all possible ways in which an obfuscator can fail. Indeed, if P contained comments Then even the trivial obfuscator that just throws away the comments will not fail totally on P. However, because we Are shooting for a negative result, the stronger notion of failure we require, the better – it will just mean our impossibility result will be stronger. Condition # 2 is meant to avoid trivialities. For example, if P is a program that prints its own source code, then, No matter how you obfuscate P, it will always be possible to recover the source from the obfuscated version by simple executing it. Thus, we require that it will be impossible to recover the source code of P just by executing it. The main theorem of this part is that for every candidate obfuscator O there exists a program P on which O totally fails. I will now give a “taste” of the proof of this theorem.
  3. To prove the theorem we will give a family of functions, parametrized by a pair of strings \\alpha,\\beta of length, say 1000, Such that for every O if we choose alpha and beta at random then O will totally fail on P_{\\alpha,\\beta}. For every \\alpha,\\beta we define the program P_{\\alpha,\\beta} as follows: It takes as input a bit b and a string x. If b=0 and x=\\alpha, then P_{\\alpha,\\beta} outputs \\beta. I will now turn to proving this claim. If b=1, then P_{\\alpha,\\beta} interprets the string x as a description of a program! It then runs this program On the input (0,\\alpha). If the output is equal to \\beta then P_{\\alpha,\\beta} outputs the pair (\\alpha,\\beta). In all other cases P_{\\alpha,\\beta} outputs 0. As I said above, I will claim that every obfuscator fails w.h.p. on a P_{\\alpha,\\beta} if alpha,\\beta are chosen at random.
  4. I will first show the second condition (i.e., that a random P_{\\alpha,\\beta} is hard to learn). I claim that black box access to P_{\\alpha,\\beta} is completely useless, since there is only negligible probability that one can obtain a non-zero answer from that black-box. Indeed, suppose that someone gives you a black-box that computes P_{\\alpha,\\beta} but you don’t know \\alpha or \\beta. Then, if you feed the box a query of the form (0,x) you will get a zero answer unless you happened to guess \\alpha, which We can assume never happens, since it will only happen with low probability. Now, if you only get zero answers For queries of the form 0,x then you have no information about \\beta, and so you have no way of coming up with a program that outputs \\beta on input \\alpha. This means that you will also get zero answers on queries of the form (1,x). Thus with very high probability you will only get zero answers from the black box. I will now show the first condition. Namely, that it is possible to efficiently recover the source of P_[\\alpha,\\beta} From any P’ which is an obfuscated version of P_{\\alpha,\\beta}. First, note that once we know \\alpha and \\beta Then it is easy to recover the code of P_{\\alpha,\\beta}, and hence we need to show that we can recover \\alpha and \\beta from P’. However, this is quite easy – to get \\alpha and \\beta run P’ on input 1 and *its own code*. Since P’ is a program that on input 0,\\alpha outputs \\beta, it follows that P’(1,P’)=\\alpha,\\beta. This finishes the proof. I just want to comment that this argument used crucially the fact that we could feed P’ as input to itself. This is no longer true if we want to rule out obfuscators for programs with bounded input length. I don’t have time to even hint how we overcome this obstacle , but actually in some sense that part is the technical heart of the paper.
  5. I want now to dicuss a bit the meaning of this impossibility result. What we prove is that there doesn’t exist a general purpose obfuscator that takes any program and scrambles it securely. However, a manufacturer of commercial obfuscator might claim that we still didn’t rule out the possibility that his obfuscator is “virtually general purpose”. By this I mean that it is secure for all the programs that come up in practice, Although it will of course fail for our somewhat contrived counterexample. Let’s visualize this hypothetical (or not so hypothetical, see slashdot) obfuscator manufacturer’s argument as follows: We have the set of “useful” programs that come up in practice (don’t worry if you don’t know all these acronyms). Then there is our counter example, which admittedly is not in this set. Then, the manufacturer claims that the set of programs for which his obfuscator is secure contains all the useful programs and hence his obfuscator is “virtually general purpose”. This claim is similar to criticism of NP-completeness results. When we prove that the TSP problem is NP-complete, we prove that it is hard in the worst case, and that no algorithm can solve it on the crazy instances that come from our reduction. However, it may very well be that there is a simple heuristic that solves TSP on all the instances that actually come up in practice. I want to comment that in fact there is a difference between the case of obfuscation and the case of TSP, and actually in our case our negative result means more than may seem at first sight.