難読化プログラム

プログラムの難読化は、今日の暗号技術の画期的で最もホットな分野です。 過去2年間で、このトピックに関する70以上の記事が執筆され、激しい議論を引き起こし、研究グループ間の本当の競争を生み出し、科学研究の試験場を開きます。 さらに、難読化は基本的なものであり、今日の暗号化にあるほぼすべてを生成するプリミティブを形成していることがわかります。 それが何であるかを理解します。



プログラムのインストールファイルへのアクセスをユーザーに許可することにより、企業は必然的に専門的な秘密とベストプラクティスを明らかにし、悪意のある競合他社が恥知らずに他人のアルゴリズムをコピーして盗むことを止めることはできません。 別の例に注目しましょう。これらは、オペレーティングシステムのエラーを修正する重要な更新(パッチ)です。 ハッカーは次の更新をほぼ即座に分析し、この更新が修正している問題を特定し、時間通りに更新する時間がない不幸なユーザーを攻撃します。

画像 これらの2つの状況は、1つの基本的な問題、すなわち人によって書かれたプログラムが人になり、理解、分析、分解される可能性があります。 しかし、その機能を維持しながらプログラムを不可逆的にやり直すことが認識できないアルゴリズムがあるとしたらどうでしょうか? そのため、プログラムを完全に理解することはできませんが、同時に元のプログラムよりも悪くなることはありませんか? このようなアルゴリズムは、「難読化」または「難読化」と呼ばれます。



現時点では、開発者が自由に使用できる難読化ツールはありません。今日広く使用されている難読化ツールは非常に原始的です。命令を再配置し、変数名を置き換え、実際に効果のないコードを挿入し、同様のことを行うことができます一般的に、「理解不能によるセキュリティ」と呼ぶことができます。 しかし、熱意の少ないこのような難読化は難読化を解除するのは簡単であり、したがって、それは優秀なハッカーにとって障害にはなりません。



しかし、難読化ツールには正確に何が必要ですか? 彼が出した「プログラムを理解できない」ことは非常に霧がかかっています...



画像 2001 [1]で、最初の正式な定義が提案されました。難読化ツールによって発行される結果のプログラムは、元のプログラムの入出力動作をシミュレートする単なるブラックボックス以上の情報を提供しません。 つまり、難読化されたプログラムコードと、たとえば、指定された入力でプログラムの結果を単に返すWebサービスとの間に違いはないはずです。 このようなアルゴリズムは「ブラックボックス難読化」と呼ばれます。 残念ながら、同じ記事では、そのような難読化ツールはすべてのプログラムに対して構築できるわけではないことが示されました。 つまり、難読化できない非常に特定のクラスのプログラムがあります。これらは、独自の入力[1] 、定理3.4で何らかの秘密を返すプログラムです。 それ以来、この一連の研究は消滅し、人々は退屈になり、12年間のプログラムを難読化することは不可能と考えられていました。



画像 2013 [2]で、この分野でブレークスルーが行われ、理論家は別の定義を導き出し、そのための実際の設計を提案しました。 この新しい種類の難読化ツールは、正式には「識別不能難読化」(「iO」)と呼ばれます。2つの異なるプログラムがあり、機能がまったく同じ場合、これら2つのプログラムの難読化は互いに区別できません。 つまり、任意の入力xに対してP1(x)= P2(x)であり、Oが識別不能性の難読化プログラムであり、プログラムPを入力として新しいプログラムO(P)を返すプログラムP1、P2がある場合、 O(P1)とO(P2)を区別することはできません。 つまり、どの難読化がどの初期プログラムに属するか、O(P1)が難読化P1であるか、難読化P2であるかを言うことはできません。 (Obfuscator Oは確率的アルゴリズムです)。 一見、このような難読化ツールがどれほど優れているかは明らかではありません。 次の2つの段落で説明するこの質問への答えは、暗号コミュニティによってショックを受けました。



2007 [3]では、「最良の」難読化ツールが調査されました。 難読化されたプログラムが同じ機能を持つ他のどのプログラムよりも多くの情報を報告しない場合、難読化ツールを「最適」と呼ぶことが提案されました。 そして、識別不能性の難読化ツール-これが「最良の」難読化ツールであることが示されました。 したがって、世界で最も優れた難読化ツールの候補デザインはすでにポケットに入っています! すぐに、混乱を招く指示や変数名の変更を改良する必要はなくなります。



しかし、話はこれで終わりではありません。世界中の暗号作成者の大きな驚きに、識別不能性の難読化ツールと一方向関数(一方向関数)が一緒に与えることは次のとおりです。

画像





つまり、実際、識別不能性の難読化ツールは、ほぼすべての暗号化を形成するプリミティブであり、その助けを借りて、今日の暗号化のほとんどすべてを構築できます。 もちろん、難読化ツールが広範囲に使用できるようになる前に多くの作業が必要になりますが、その基礎はすでに確立されています。



参照資料



[1] Barak B.、Goldreich O.、Impagliazzo R.、Rudich S.、Sahai A.、Vadhan S.、Yang K.「プログラムを難読化する可能性について」。CRYPTO2001。

[2] Garg S.、Gentry C.、Halevi S.、Raykova M.、Sahai A.、Waters B.「すべての回路の識別不能性の難読化と機能的暗号化の候補。」FOCS2013。( pdf

[3] Goldwasser S.、およびGuy NR「最善の難読化について」。TCC2007。



All Articles