JP2009086746A - 情報処理装置及び情報処理プログラム - Google Patents
情報処理装置及び情報処理プログラム Download PDFInfo
- Publication number
- JP2009086746A JP2009086746A JP2007252276A JP2007252276A JP2009086746A JP 2009086746 A JP2009086746 A JP 2009086746A JP 2007252276 A JP2007252276 A JP 2007252276A JP 2007252276 A JP2007252276 A JP 2007252276A JP 2009086746 A JP2009086746 A JP 2009086746A
- Authority
- JP
- Japan
- Prior art keywords
- program
- dummy code
- obfuscation
- obfuscated
- information processing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
【課題】動的解析に対しても効果のあるプログラムの難読化処理を行う情報処理装置を提供する。
【解決手段】情報処理装置の受付手段は、難読化処理の対象となるプログラムを受け付け、ダミーコード生成手段は、有限群の任意の要素に対して、有限群の位数回の演算を施したものが単位元になる演算を用いてダミーコードを生成し、プログラム合成手段は、前記ダミーコード生成手段によって生成されたダミーコードを、前記受付手段によって受け付けられたプログラムに合成する。
【選択図】図1
【解決手段】情報処理装置の受付手段は、難読化処理の対象となるプログラムを受け付け、ダミーコード生成手段は、有限群の任意の要素に対して、有限群の位数回の演算を施したものが単位元になる演算を用いてダミーコードを生成し、プログラム合成手段は、前記ダミーコード生成手段によって生成されたダミーコードを、前記受付手段によって受け付けられたプログラムに合成する。
【選択図】図1
Description
本発明は、情報処理装置及び情報処理プログラムに関する。
プログラムを悪意あるリバースエンジニアリングから守るために、様々なプログラム難読化技術が提案されている。難読化とは、プログラムを複雑に変換することで、プログラムの解析コストを大きくする技術である。
これに関連する技術として、例えば、特許文献1には、秘密データやアルゴリズムを読み取りにくくするとともに、スタックメモリの覗き見によるプログラムの秘密データの取得も困難にでき、さらには、一般的なプログラムに対して適用することができる難読化手法によりプログラムを難読化することを課題とし、プログラム中のデータを符号化規則を用いて符号化するデータ符号化部と、データ符号化部によって符号化された符号化データを含む演算式の各演算子に、演算子変換規則を適用することにより演算式を符号化演算式に変換する演算式変換部と、符号化演算式を復号化規則を用いて復号化演算式とする復号化処理部とを備えることが開示されている。
また、例えば、特許文献2には、元のプログラムで用いられている変数の個数、ならびに当該変数間の参照・代入関係を秘匿し、かつ、秘密鍵の候補数を多くして耐性の高いプログラムの難読化を実現することを課題とし、プログラム中の変数を演算装置によって線形変換して符号化を施す符号化方法であって、符号化を施すn個(ただし、nは正整数)の変数を任意に選択するステップと、m×nの行列(ただし、mは、m≧nの正整数)及びm次元の任意のベクトルを生成するステップと、生成した行列及びベクトルを変換鍵として前記n個の変数を線形変換して同時にm個の整数に符号化するステップとを有することが開示されている。
また、例えば、特許文献3には、プログラムが機密データや機密アルゴリズムを持つとき、前記プログラムを、安価な構成で、関数間解析を困難にするように難読化する方法であって、構成によっては難読化された前記プログラムの解析の困難さが証明されているような難読化方法及び装置によって前記プログラムを難読化し、前記プログラムへの不正アクセスを防ぐことを課題とし、プログラムのソースコードに対して、前記プログラムの仕様を変更しないように、関数へのポインタ変数を新たに複数個導入し、前記関数ポインタ変数のいずれかに関数のアドレスを代入する命令文を複数個挿入し、前記プログラムにおける関数の呼出しを、前記関数ポインタ変数の値に応じて関数を呼出すように変換することが開示されている。
特開2005−049925号公報
特開2006−079347号公報
特開2003−337629号公報
ところで、Opaque Predicatesを用いた難読化技術は、攻撃者がプログラムに対し動的解析を行うことによってプログラムの内容を解析できてしまう場合がある。
本発明は、動的解析による解析に対しても、その解析コストをより大きくするプログラムの難読化処理を行う情報処理装置及び情報処理プログラムを提供することを目的としている。
本発明は、動的解析による解析に対しても、その解析コストをより大きくするプログラムの難読化処理を行う情報処理装置及び情報処理プログラムを提供することを目的としている。
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
請求項1の情報処理装置は、難読化処理の対象となるプログラムを受け付ける受付手段と、有限群の任意の要素に対して、有限群の位数回の演算を施したものが単位元になる演算を用いてダミーコードを生成するダミーコード生成手段と、前記ダミーコード生成手段によって生成されたダミーコードを、前記受付手段によって受け付けられたプログラムに合成するプログラム合成手段を具備することを特徴とする。
請求項1の情報処理装置は、難読化処理の対象となるプログラムを受け付ける受付手段と、有限群の任意の要素に対して、有限群の位数回の演算を施したものが単位元になる演算を用いてダミーコードを生成するダミーコード生成手段と、前記ダミーコード生成手段によって生成されたダミーコードを、前記受付手段によって受け付けられたプログラムに合成するプログラム合成手段を具備することを特徴とする。
請求項2の情報処理装置は、請求項1に記載する情報処理装置であって、前記ダミーコード生成手段は、前記受付手段によって受け付けられたプログラム内の変数に対するダミーコードを生成することを特徴とする。
請求項3の情報処理装置は、請求項1又は2に記載する情報処理装置であって、前記ダミーコード生成手段は、互いに逆変換となる式を含むダミーコードを生成することを特徴とする。
請求項4の情報処理プログラムは、コンピュータを、難読化処理の対象となるプログラムを受け付ける受付手段と、有限群の任意の要素に対して、有限群の位数回の演算を施したものが単位元になる演算を用いてダミーコードを生成するダミーコード生成手段と、前記ダミーコード生成手段によって生成されたダミーコードを、前記受付手段によって受け付けられたプログラムに合成するプログラム合成手段として機能させることを特徴とする。
請求項1記載の情報処理装置によれば、動的解析による解析に対しても、本構成を有していない場合に比較して、その解析コストをより大きくするプログラムの難読化処理を行うことができるようになる。
請求項2記載の情報処理装置によれば、プログラム内の変数の値を変化させて、より安全性の高い難読化処理を行うことができるようになる。
請求項3記載の情報処理装置によれば、より安全性の高い難読化処理を行うことができるようになる。
請求項4記載の情報処理プログラムによれば、動的解析による解析に対しても、本構成を有していない場合に比較して、その解析コストをより大きくするプログラムの難読化処理を行うことができるようになる。
本実施の形態は、プログラムの不正対策技術、例えば、不正な逆解析・リバースエンジ
ニアリング防止、難読化、耐タンパ(Anti−Tamper)技術等に関するものである。
ニアリング防止、難読化、耐タンパ(Anti−Tamper)技術等に関するものである。
まず、難読化手法の1つとして知られている、不明瞭な条件式(以下、Opaque Predicates ともいう)を用いた難読化処理([1]C. Collberg, C. Thomborson, and D. Low, ゛Manufacturing Cheap, Resilient, and Stealthy Opaque Constructs," Proceedings of the 25th ACM Symposium on Principles of Programming Languages, pp.184--196, 1998、[2]T. Ogiso, Y. Sakabe, M. Soshi and A. Miyaji,゛Software obfuscation on a theoretical basis and its implementation," IEEE Trans. Fundamentals, vol.E86-A, no.1, pp.176--186, January, 2003.など)がある。Opaque Predicatesとは、難読化のために利用される恒真/恒偽の条件式のことをいう。
図11に、図10に示したプログラムにOpaque Predicatesを用いた難読化処理を適用した例を示す。なお、図10に示すプログラムは、以下、第1の実施の形態、第2の実施の形態の説明においても、難読化処理の対象となるプログラムとして示す。これらのプログラムはC言語によるものを例示する。
図10のプログラムのp12の箇所に、「a*(a-1) mod 2 == 1」という条件式と「++a;」という条件節からなる条件分岐21を加えることで、図11のプログラムは生成されている。ここでmodとは、記号modの左にある整数値を右にある整数値で割った時の剰余を返す演算である((例)7 mod 2 = 1)。
aがどのような整数値であっても、条件分岐21内の「a*(a-1)」は、2の倍数であるため、「a*(a-1) mod 2」の値は常に0、つまり、「a*(a-1) mod 2 == 1」は恒偽のOpaque Predicateである。そのため、「++a;」という条件節は決して実行されない。
図10と図11に示すプログラムの機能・動作は変わらない一方で、図11のプログラムには冗長な条件分岐21が含まれている分、図10のプログラムよりもプログラム全体の長さが長くなり、解析コスト、つまりプログラムの挙動解析に必要となるコストは大きくなる。これにより、解析が困難になり、難読化処理が施されたプログラムは元のプログラムに比較して安全性が向上することになる。
図10と図11に示すプログラムの機能・動作は変わらない一方で、図11のプログラムには冗長な条件分岐21が含まれている分、図10のプログラムよりもプログラム全体の長さが長くなり、解析コスト、つまりプログラムの挙動解析に必要となるコストは大きくなる。これにより、解析が困難になり、難読化処理が施されたプログラムは元のプログラムに比較して安全性が向上することになる。
しかし、このようなOpaque Predicatesを用いた難読化処理には、プログラムの入力を変えても、付加したOpaque Predicatesの真偽値が変化しないという点がある。そのため、攻撃者は難読化処理を適用したプログラムに動的解析を行うことで、Opaque Predicatesを用いた難読化処理を無効化できる。ここで動的解析とは、プログラムを実行しつつ、プログラムにランダムに入力を与えたり、プログラム内部を書き換えたりすることで、出力結果や実行フローの違いを観察することでプログラムの挙動を分析することをいう。
攻撃者はプログラムに対し、以下に述べるような動的解析を行うことで、Opaque Predicatesを無効化できる。
通常考えられる条件分岐の場合、プログラムの入力を変えればある割合でその真偽値も変化する。しかし、Opaque Predicatesの真偽値はどのような入力に対しても変化しない。つまり、Opaque Predicatesを用いた条件分岐の条件節は、どのような入力においても必ず実行されるか、必ず実行されないかのいずれかである。
このことを利用して、動的解析において入力を変えて何度も実行フローを観察するうちに、攻撃者は、必ず実行される/必ず実行されない条件節を特定できる。これにより、Opaque Predicatesを利用した難読化処理は無効化されてしまう。
通常考えられる条件分岐の場合、プログラムの入力を変えればある割合でその真偽値も変化する。しかし、Opaque Predicatesの真偽値はどのような入力に対しても変化しない。つまり、Opaque Predicatesを用いた条件分岐の条件節は、どのような入力においても必ず実行されるか、必ず実行されないかのいずれかである。
このことを利用して、動的解析において入力を変えて何度も実行フローを観察するうちに、攻撃者は、必ず実行される/必ず実行されない条件節を特定できる。これにより、Opaque Predicatesを利用した難読化処理は無効化されてしまう。
このため、以下に説明する実施の形態では、有限群の任意の要素に対して有限群の位数回の演算を施したものが単位元になる性質を利用することで、動的解析に対しても堅牢なプログラムの難読化処理を行う。このプログラムの難読化処理では、前記の性質を利用して入力によって変換式の出力値は変化するが、プログラムの挙動に変更を与えないような変換式群を与え、この変換式群を用いて任意の長さのダミーコードを生成することができる。前述のようにOpaque Predicatesを用いた難読化処理は動的解析により比較的簡単に無効化されてしまうが、本実施の形態によれば動的解析に対して安全性が高い難読化処理を行うことができる。
以下、図面に基づき本発明を実現するにあたっての好適な各種の実施の形態の例を説明する。
図1は、第1の実施の形態の構成例についての概念的なモジュール構成図を示している。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア(コンピュータ・プログラム)、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはコンピュータ・プログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、コンピュータ・プログラム、システム及び方法の説明をも兼ねている。ただし、説明の都合上、「記憶する」、「記憶させる」、これらと同等の文言を用いるが、これらの文言は、実施の形態がコンピュータ・プログラムの場合は、記憶装置に記憶させること、又は記憶装置に記憶させるように制御するの意である。また、モジュールは機能にほぼ一対一に対応しているが、実装においては、1モジュールを1プログラムで構成してもよいし、複数モジュールを1プログラムで構成してもよく、逆に1モジュールを複数プログラムで構成してもよい。また、複数モジュールは1コンピュータによって実行されてもよいし、分散又は並列環境におけるコンピュータによって1モジュールが複数コンピュータで実行されてもよい。なお、1つのモジュールに他のモジュールが含まれていてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続(データの授受、指示、データ間の参照関係等)を含む。
また、システム又は装置とは、複数のコンピュータ、ハードウェア、装置等がネットワーク(一対一対応の通信接続を含む)等の通信手段で接続されて構成されるほか、1つのコンピュータ、ハードウェア、装置等によって実現される場合も含まれる。
図1は、第1の実施の形態の構成例についての概念的なモジュール構成図を示している。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア(コンピュータ・プログラム)、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはコンピュータ・プログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、コンピュータ・プログラム、システム及び方法の説明をも兼ねている。ただし、説明の都合上、「記憶する」、「記憶させる」、これらと同等の文言を用いるが、これらの文言は、実施の形態がコンピュータ・プログラムの場合は、記憶装置に記憶させること、又は記憶装置に記憶させるように制御するの意である。また、モジュールは機能にほぼ一対一に対応しているが、実装においては、1モジュールを1プログラムで構成してもよいし、複数モジュールを1プログラムで構成してもよく、逆に1モジュールを複数プログラムで構成してもよい。また、複数モジュールは1コンピュータによって実行されてもよいし、分散又は並列環境におけるコンピュータによって1モジュールが複数コンピュータで実行されてもよい。なお、1つのモジュールに他のモジュールが含まれていてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続(データの授受、指示、データ間の参照関係等)を含む。
また、システム又は装置とは、複数のコンピュータ、ハードウェア、装置等がネットワーク(一対一対応の通信接続を含む)等の通信手段で接続されて構成されるほか、1つのコンピュータ、ハードウェア、装置等によって実現される場合も含まれる。
難読化装置は、プログラムに対して難読化処理を施すものであって、図1に示すように、プログラム受付モジュール110、プログラム合成モジュール120、ダミーコード生成モジュール130、プログラム送信モジュール140を有している。
プログラム受付モジュール110は、プログラム合成モジュール120と接続されており、難読化処理の対象となるプログラムを受け付け、そのプログラムをプログラム合成モジュール120へ渡す。
プログラム受付モジュール110は、プログラム合成モジュール120と接続されており、難読化処理の対象となるプログラムを受け付け、そのプログラムをプログラム合成モジュール120へ渡す。
プログラム合成モジュール120は、プログラム受付モジュール110、ダミーコード生成モジュール130、プログラム送信モジュール140と接続されており、ダミーコード生成モジュール130によって生成されたダミーコードを、プログラム受付モジュール110によって受け付けられたプログラムに合成し、そのプログラム(すなわち、難読化処理されたプログラム)をプログラム送信モジュール140へ渡す。
ダミーコード生成モジュール130は、プログラム合成モジュール120と接続されており、有限群の任意の要素に対して、有限群の位数回の演算を施したものが単位元になる演算を用いてダミーコードを生成し、そのダミーコードをプログラム合成モジュール120へ渡す。より具体的には、有限群として剰余環Z/nZ(nは整数)上の乗法群を利用するようにしてもよいし、有限群として楕円曲線上の加法群を利用するようにしてもよい。
また、ダミーコード生成モジュール130は、プログラム受付モジュール110によって受け付けられたプログラム内の変数に対するダミーコードを生成するようにしてもよい。より具体的には、プログラム内の変数を引数として、有限群の性質を利用して関数を生成する。
さらに、ダミーコード生成モジュール130は、互いに逆変換となる式を含むダミーコードを生成するようにしてもよい。より具体的には、有限群の性質を利用して互いに逆変換となる2つの関数をダミーコードとして生成し、さらに、その関数によってプログラム内の変数を処理するようにしてもよいし、その2つの関数の対が複数あってもよい。そして、2つの関数の対を複数生成した場合、プログラム合成モジュール120は、対となる2つの関数が入れ子の状態になるように、プログラムと合成する。
また、ダミーコード生成モジュール130は、プログラム受付モジュール110によって受け付けられたプログラム内の変数に対するダミーコードを生成するようにしてもよい。より具体的には、プログラム内の変数を引数として、有限群の性質を利用して関数を生成する。
さらに、ダミーコード生成モジュール130は、互いに逆変換となる式を含むダミーコードを生成するようにしてもよい。より具体的には、有限群の性質を利用して互いに逆変換となる2つの関数をダミーコードとして生成し、さらに、その関数によってプログラム内の変数を処理するようにしてもよいし、その2つの関数の対が複数あってもよい。そして、2つの関数の対を複数生成した場合、プログラム合成モジュール120は、対となる2つの関数が入れ子の状態になるように、プログラムと合成する。
プログラム送信モジュール140は、プログラム合成モジュール120と接続されており、プログラム合成モジュール120によって合成されたプログラムを、そのプログラムを実行する装置へ送信する。
図2を用いて、第1の実施の形態を実現する場合のシステムの構成例を説明する。
このシステムは、プログラム難読化送信用PC210、プログラム受信実行用PC220を有しており、インターネット230がプログラム難読化送信用PC210とプログラム受信実行用PC220を接続している。
プログラム難読化送信用PC210は、第1の実施の形態を含んでおり、難読化処理したプログラムをプログラム受信実行用PC220へ送信する。プログラム受信実行用PC220は、プログラム難読化送信用PC210によって難読化処理されたプログラムを受け取り、そのプログラムを実行するものである。プログラム難読化送信用PC210、プログラム受信実行用PC220は、それぞれ複数あってもよい。
このシステムは、プログラム難読化送信用PC210、プログラム受信実行用PC220を有しており、インターネット230がプログラム難読化送信用PC210とプログラム受信実行用PC220を接続している。
プログラム難読化送信用PC210は、第1の実施の形態を含んでおり、難読化処理したプログラムをプログラム受信実行用PC220へ送信する。プログラム受信実行用PC220は、プログラム難読化送信用PC210によって難読化処理されたプログラムを受け取り、そのプログラムを実行するものである。プログラム難読化送信用PC210、プログラム受信実行用PC220は、それぞれ複数あってもよい。
図3をもとに、第1の実施の形態による難読化装置の利用形態を説明する。
まず、図3の表記を説明する。人型の記号は、プログラム開発者31又はユーザ33を表し、四角形の記号は難読化装置32を表す。矢印は、プログラムの交換を表す。つまり、矢印の起点の方から終点の方に、矢印に付記されたプログラムが渡されることを示す。
まず、図3の表記を説明する。人型の記号は、プログラム開発者31又はユーザ33を表し、四角形の記号は難読化装置32を表す。矢印は、プログラムの交換を表す。つまり、矢印の起点の方から終点の方に、矢印に付記されたプログラムが渡されることを示す。
第1の実施の形態による難読化装置32は、一般的なプログラム開発者31によって利用されることを想定している。開発者31は、ユーザの利用に供されるプログラムを開発する。プログラムの開発完了後、開発者31はそのプログラムを難読化装置32に入力として与える(S301)。
難読化装置32は、受け取ったプログラムに対し、第1の実施の形態による難読化処理を施し、その後、難読化済プログラムを出力する(S302)。難読化装置32は、入力プログラムと難読化済プログラムの機能及び出力が異ならないように入力プログラムを変換する。ただし、難読化済プログラムにはダミーコードが追加されているので、変換により元のプログラムよりも解析コストは大きくなる。
そして、開発者31は、物理的に離れたところにいるユーザ33に対し、難読化済プログラムを渡す(S303)。渡す手段としては、インターネットを介する方法、あるいはCD−ROM等のメディアにデータとして格納した後にこれを渡す方法等であってもよい。
難読化装置32は、受け取ったプログラムに対し、第1の実施の形態による難読化処理を施し、その後、難読化済プログラムを出力する(S302)。難読化装置32は、入力プログラムと難読化済プログラムの機能及び出力が異ならないように入力プログラムを変換する。ただし、難読化済プログラムにはダミーコードが追加されているので、変換により元のプログラムよりも解析コストは大きくなる。
そして、開発者31は、物理的に離れたところにいるユーザ33に対し、難読化済プログラムを渡す(S303)。渡す手段としては、インターネットを介する方法、あるいはCD−ROM等のメディアにデータとして格納した後にこれを渡す方法等であってもよい。
難読化済プログラムがユーザに渡された時点での、プログラム開発者41、ユーザ42、開発者41が作成したプログラム(元のプログラム)43、難読化済プログラム44の関係を図4に示す。
まず、図4の表記を説明する。人型の記号はプログラム開発者41又はユーザ42を表し、丸形の記号はプログラム43又は難読化済プログラム44を表す。
図4は、開発者41が元のプログラム43と難読化済プログラム44を所持しており、またユーザ42が難読化済プログラム44のみを所持している状態を示す。
元のプログラム43と難読化済プログラム44の機能及び出力は同じなので、ユーザ42は難読化済プログラム44により元のプログラム43と同じ機能及び出力を利用できる。さらに、ユーザ42は元のプログラム43を所持していないので、元のプログラム43の持つ機密情報(例えば、ライセンスに関する情報など)を得るためには、難読化済プログラム44を解析しなければならない。元のプログラム43の解析コストよりも難読化済プログラム44の解析コストの方が大きいので、元のプログラム43をユーザに手渡す状況と比較すると、プログラムの機密情報が流出する機会はより小さい。
まず、図4の表記を説明する。人型の記号はプログラム開発者41又はユーザ42を表し、丸形の記号はプログラム43又は難読化済プログラム44を表す。
図4は、開発者41が元のプログラム43と難読化済プログラム44を所持しており、またユーザ42が難読化済プログラム44のみを所持している状態を示す。
元のプログラム43と難読化済プログラム44の機能及び出力は同じなので、ユーザ42は難読化済プログラム44により元のプログラム43と同じ機能及び出力を利用できる。さらに、ユーザ42は元のプログラム43を所持していないので、元のプログラム43の持つ機密情報(例えば、ライセンスに関する情報など)を得るためには、難読化済プログラム44を解析しなければならない。元のプログラム43の解析コストよりも難読化済プログラム44の解析コストの方が大きいので、元のプログラム43をユーザに手渡す状況と比較すると、プログラムの機密情報が流出する機会はより小さい。
次に第1の実施の形態による難読化手法の手順を説明する。
ここでは、長さがnのダミーコードを生成し、これをプログラムに付加して難読化処理を施す場合を述べる。
まず、難読化処理を施すデータをxとした場合の変換式を生成する手順Aを示す。また、手順Aのフローチャートを図5に示す。以下において、max_xは難読化処理が施されるデータxの最大値を表すものとする。
ここでは、長さがnのダミーコードを生成し、これをプログラムに付加して難読化処理を施す場合を述べる。
まず、難読化処理を施すデータをxとした場合の変換式を生成する手順Aを示す。また、手順Aのフローチャートを図5に示す。以下において、max_xは難読化処理が施されるデータxの最大値を表すものとする。
<手順A>
(ステップS51)
max_x よりも大きな素数p,q1,・・・,qn-1を生成する。
(ステップS52)
ランダムな正の整数kを選択し、k(p-1)+1を素因数分解して素因数s1,s2,・・・,smを算出する。
(ステップS53)
m>=nであるならS54へ進む。そうでなければ、S52に戻る。
(ステップS54)
m=nであるならS56へ進む。そうでなければ、S55へ進む。
(ステップS55)
sm-n, sm-n-1,・・・,smを掛け合わせてできる合成数をsnとしてS56へ進む。
(ステップS56)
変換式を以下の式(数1)と置く。
(ステップS51)
max_x よりも大きな素数p,q1,・・・,qn-1を生成する。
(ステップS52)
ランダムな正の整数kを選択し、k(p-1)+1を素因数分解して素因数s1,s2,・・・,smを算出する。
(ステップS53)
m>=nであるならS54へ進む。そうでなければ、S52に戻る。
(ステップS54)
m=nであるならS56へ進む。そうでなければ、S55へ進む。
(ステップS55)
sm-n, sm-n-1,・・・,smを掛け合わせてできる合成数をsnとしてS56へ進む。
(ステップS56)
変換式を以下の式(数1)と置く。
前記の手順Aにより生成される変換式群がプログラムの挙動に影響を与えないことを以下に説明する。
まず、数2とすると、数3が成立する。
次に、数4とすると、数5が成立する。
ただし、前式で、K 及びK’は適当な正の整数である。このことから、xに変換式x=f1(x),x=f2(x),・・・,x=fn(x)を順次適用して得られる結果は、数6に示す式であることがわかる。
まず、数2とすると、数3が成立する。
pを法とする剰余全体をZ/pZで表記する。pは素数なのZ/pZは乗法に関する群を構成し、その位数はp-1となる。オイラーの定理により、有限群の任意の要素に対して有限群の位数回演算を施したものは単位元となる。よって、任意の整数wに対して、数7に示す式が成立する。
このとき、数8に示す式となるため、変換式x=f1(x),x=f2(x),・・・,x=fn(x)を適用した後のxの値と変換を適用しない状態のxの値は同じものとなる。
このため、プログラム中の適当な変数xに前記の変換式群x=f1(x),x=f2(x),・・・,x=fn(x)を適用してもプログラムの挙動に影響が出ないことがわかる。
次に、前記変換式を利用したダミーコードの生成手順を説明する。
図6に、このダミーコードの生成手順のフローチャートを示す。
まず、プログラム中の難読化処理を施す変数とダミーコードの長さを選択する(ステップS61)。ここでは、前記同様選択される変数をx、ダミーコードの長さをnとする。ダミーコードは長いほど、攻撃者が解析に用するコストが大きくなるが、一方で難読化処理後のプログラムの実行時間も増加する。このため、nは難読化済プログラムの実行速度に関する要求仕様に見合うような適切なものを選択する。
前述した手順Aを用いて、x=f1(x),x=f2(x),・・・,x=fn(x)を作成する(ステップS62)。
図6に、このダミーコードの生成手順のフローチャートを示す。
まず、プログラム中の難読化処理を施す変数とダミーコードの長さを選択する(ステップS61)。ここでは、前記同様選択される変数をx、ダミーコードの長さをnとする。ダミーコードは長いほど、攻撃者が解析に用するコストが大きくなるが、一方で難読化処理後のプログラムの実行時間も増加する。このため、nは難読化済プログラムの実行速度に関する要求仕様に見合うような適切なものを選択する。
前述した手順Aを用いて、x=f1(x),x=f2(x),・・・,x=fn(x)を作成する(ステップS62)。
次に、プログラム中でxの値に関して参照あるいは代入が発生する場所prを決定し(ステップS63)、プログラムのフロー上prの上位にあり、prに最も近いところにあるxの参照あるいは代入が発生する場所psを決定する(ステップS64)。
次に、prとpsに挟まれた領域内のランダムな位置に変換式x=f1(x),x=f2(x),・・・,x=fn(x)を挿入していく(ステップS65)。ただし、プログラムのフロー上においてx=fn(x)が最後になるようにする。
次に、prとpsに挟まれた領域内のランダムな位置に変換式x=f1(x),x=f2(x),・・・,x=fn(x)を挿入していく(ステップS65)。ただし、プログラムのフロー上においてx=fn(x)が最後になるようにする。
図7に、この実施例によって生成されるプログラムの例を示す。
図7のプログラムは、図10に示すプログラムである関数funcに難読化処理を適用した例である。図7のプログラムの動作について説明する。
式f71から式f74は、前記手順Aによって生成された変換式である。ただし、ここでn=4、q1=41,q2=31,q3=29,p1=23である。これらの式は前記のprとpsに挟まれた領域内に適当に配置されており、式f71から式f74はデータcを順次変換していく。前記に示したとおり、手順Aによって生成された変換式は、その全ての変換式を適用することでcの値を変化させない。このため、式f71から式f74によって構成されるダミーコードは元のプログラムの挙動を変化させない。
図7のプログラムは、図10に示すプログラムである関数funcに難読化処理を適用した例である。図7のプログラムの動作について説明する。
式f71から式f74は、前記手順Aによって生成された変換式である。ただし、ここでn=4、q1=41,q2=31,q3=29,p1=23である。これらの式は前記のprとpsに挟まれた領域内に適当に配置されており、式f71から式f74はデータcを順次変換していく。前記に示したとおり、手順Aによって生成された変換式は、その全ての変換式を適用することでcの値を変化させない。このため、式f71から式f74によって構成されるダミーコードは元のプログラムの挙動を変化させない。
前述では、有限群として環Z/nZ上の乗法群を使用したが、有限体上に構成される楕円曲線上の加法群も同様に用いることができる。この際、ランダムな楕円曲線を生成し、その位数をSchoofの方法、あるいはその改良法で求める。楕円曲線上の加法群を用いる場合、上記の環Z/nZ上の乗法群において使用されるべき乗計算、及び乗算はそれぞれ全て乗算、及び加算となる。その他のダミーコードの生成手順は、環Z/nZ上の乗法群の場合と同様で、図6に示されたフローチャートと同様の手順である。
第2の実施の形態の構成例及び実現する場合のシステム構成例は、前述の第1の実施の形態の構成例(図1、図2)と同等である。また、第2の実施の形態における難読化装置の利用形態例は、前述の第1の実施の形態の利用形態例(図3、図4)と同等である。
第2の実施の形態では、可逆な変換式の対を複数個生成し、これらを用いてダミーコードを生成する例を説明する。
ダミーコードの生成手順は以下の手順Bで記述される。また、この手順のフローチャートを図8に示す。下記でpr及びpsは、第1の実施の形態の説明で定義されたものと同一である。
第2の実施の形態では、可逆な変換式の対を複数個生成し、これらを用いてダミーコードを生成する例を説明する。
ダミーコードの生成手順は以下の手順Bで記述される。また、この手順のフローチャートを図8に示す。下記でpr及びpsは、第1の実施の形態の説明で定義されたものと同一である。
<手順B>
(ステップS81)
ダミーコードの長さ2tを決定
(ステップS82)
n=2として手順Aを用いて、変換式の対(fi(x),fi -1(x))をt個作成する。
(ステップS83)
prを決定する。
(ステップS84)
psを決定する。
(ステップS85)
prとpsの間に、x=f1(x),x=f2(x),・・・,x=ft(x),x=ft -1(x),・・・,x=f2 -1(x),x=f1 -1(x)を、この順番に挿入する。
(ステップS81)
ダミーコードの長さ2tを決定
(ステップS82)
n=2として手順Aを用いて、変換式の対(fi(x),fi -1(x))をt個作成する。
(ステップS83)
prを決定する。
(ステップS84)
psを決定する。
(ステップS85)
prとpsの間に、x=f1(x),x=f2(x),・・・,x=ft(x),x=ft -1(x),・・・,x=f2 -1(x),x=f1 -1(x)を、この順番に挿入する。
手順Bでは、互いに逆変換を与える変換式の対を利用するため、プログラム中の適当な変数xに前記の手順Bによって生成されるダミーコードを付加してもプログラムの挙動は変化しない。
ダミーコードの長さは2tで与えられるため、tの値は難読化済プログラムの実行速度に関する要求仕様に見合うような適切なものを選択するとよい。
ダミーコードの長さは2tで与えられるため、tの値は難読化済プログラムの実行速度に関する要求仕様に見合うような適切なものを選択するとよい。
図9に、第2の実施の形態によって生成されるプログラムの例を示す。
図9のプログラムは、図10の関数funcに難読化処理を適用した例である。
図9のプログラムの動作について説明する。
式f905からより式f910は、前記手順Bによって生成された変換式である。式f905と式f910、式f906と式f909、式f907と式f908はそれぞれ互いの逆変換になっている。これらの式は前記のprとpsに挟まれた領域内に配置されており、難読化処理前の元のプログラムではこの領域内で変数cの値は変化しない。
手順Bによって生成された式f905から式f910を順次適用していくと、式f910適用後のcの値は、式f905の適用前の値と同じものになる。このため、難読化処理後もプログラムの挙動は変化しないことがわかる。
図9のプログラムは、図10の関数funcに難読化処理を適用した例である。
図9のプログラムの動作について説明する。
式f905からより式f910は、前記手順Bによって生成された変換式である。式f905と式f910、式f906と式f909、式f907と式f908はそれぞれ互いの逆変換になっている。これらの式は前記のprとpsに挟まれた領域内に配置されており、難読化処理前の元のプログラムではこの領域内で変数cの値は変化しない。
手順Bによって生成された式f905から式f910を順次適用していくと、式f910適用後のcの値は、式f905の適用前の値と同じものになる。このため、難読化処理後もプログラムの挙動は変化しないことがわかる。
前述の実施の形態では、有限群の任意の要素に対して有限群の位数回演算を施したものが単位元になる性質を利用する。これにより、前述の実施の形態は動的解析に対して堅牢なプログラム難読化手法を提供している。このプログラム難読化手法では、前記の性質を利用して入力によって個々の変換式の出力値は変化するが、プログラムの挙動に変更を与えないような変換式群を与える。これを用いて任意の長さのダミーコードを生成する。前述のようにOpaque Predicatesを用いた難読化処理は動的解析により簡単に無効化されてしまうが、前述の実施の形態によるダミーコードはプログラムの入力に関連してその状態(変数の値)が変化するため、動的解析に対して安全性が高い難読化手法を提供している。
なお、第1及び第2の実施の形態としてのプログラムが実行されるコンピュータのハードウェア構成は、図12に示すように、一般的なコンピュータであり、具体的にはパーソナルコンピュータ、サーバーとなり得るコンピュータ等である。プログラム受付モジュール110、プログラム合成モジュール120、ダミーコード生成モジュール130、プログラム送信モジュール140等のプログラムを実行するCPU1201と、そのプログラムやデータを記憶するRAM1202と、本コンピュータを起動するためのプログラム等が格納されているROM1203と、補助記憶装置であるHD1204(例えばハードディスクを用いることができる)と、キーボード、マウス等のデータを入力する入力装置1206と、CRTや液晶ディスプレイ等の出力装置1205と、通信ネットワークと接続するための通信回線インタフェース1207(例えばネットワークインタフェースカードを用いることができる)、そして、それらをつないでデータのやりとりをするためのバス1208により構成されている。これらのコンピュータが複数台互いにネットワークによって接続されていてもよい。
前述の実施の形態のうち、コンピュータ・プログラムによるものについては、本ハードウェア構成のシステムにソフトウェアであるコンピュータ・プログラムを読み込ませ、ソフトウェアとハードウェア資源とが協働して、前述の実施の形態が実現される。
なお、図12に示すハードウェア構成は、1つの構成例を示すものであり、本実施の形態は、図12に示す構成に限らず、本実施の形態において説明したモジュールを実行可能な構成であればよい。例えば、一部のモジュールを専用のハードウェア(例えばASIC等)で構成してもよく、一部のモジュールは外部のシステム内にあり通信回線で接続しているような形態でもよく、さらに図12に示すシステムが複数互いに通信回線によって接続されていて互いに協調動作するようにしてもよい。また、特に、パーソナルコンピュータの他、情報家電、複写機、ファックス、スキャナ、プリンタ、複合機(スキャナ、プリンタ、複写機、ファックス等のいずれか2つ以上の機能を有している画像処理装置)などに組み込まれていてもよい。
なお、図12に示すハードウェア構成は、1つの構成例を示すものであり、本実施の形態は、図12に示す構成に限らず、本実施の形態において説明したモジュールを実行可能な構成であればよい。例えば、一部のモジュールを専用のハードウェア(例えばASIC等)で構成してもよく、一部のモジュールは外部のシステム内にあり通信回線で接続しているような形態でもよく、さらに図12に示すシステムが複数互いに通信回線によって接続されていて互いに協調動作するようにしてもよい。また、特に、パーソナルコンピュータの他、情報家電、複写機、ファックス、スキャナ、プリンタ、複合機(スキャナ、プリンタ、複写機、ファックス等のいずれか2つ以上の機能を有している画像処理装置)などに組み込まれていてもよい。
なお、数式を用いて説明したが、数式には、その数式と同等のものを含めてもよい。同等のものとは、その数式そのものの他に、最終的な結果に影響を及ぼさない程度の数式の変形、又は数式をアルゴリズミックな解法で解くこと等が含まれる。
なお、説明したプログラムについては、記録媒体に格納して提供してもよく、また、そのプログラムを通信手段によって提供してもよい。その場合、例えば、前記説明したプログラムについて、「プログラムを記録したコンピュータ読み取り可能な記録媒体」の発明として捉えてもよい。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通などのために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク(DVD)であって、DVDフォーラムで策定された規格である「DVD−R、DVD−RW、DVD−RAM等」、DVD+RWで策定された規格である「DVD+R、DVD+RW等」、コンパクトディスク(CD)であって、読出し専用メモリ(CD−ROM)、CDレコーダブル(CD−R)、CDリライタブル(CD−RW)等、光磁気ディスク(MO)、フレキシブルディスク(FD)、磁気テープ、ハードディスク、読出し専用メモリ(ROM)、電気的消去及び書換可能な読出し専用メモリ(EEPROM)、フラッシュ・メモリ、ランダム・アクセス・メモリ(RAM)等が含まれる。
そして、前記のプログラム又はその一部は、前記記録媒体に記録して保存や流通等させてもよい。また、通信によって、例えば、ローカル・エリア・ネットワーク(LAN)、メトロポリタン・エリア・ネットワーク(MAN)、ワイド・エリア・ネットワーク(WAN)、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、あるいは無線通信ネットワーク、さらにこれらの組み合わせ等の伝送媒体を用いて伝送させてもよく、また、搬送波に乗せて搬送させてもよい。
さらに、前記のプログラムは、他のプログラムの一部分であってもよく、あるいは別個のプログラムと共に記録媒体に記録されていてもよい。また、複数の記録媒体に分割して記録されていてもよい。また、圧縮や暗号化など、復元可能であればどのような態様で記録されていてもよい。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通などのために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク(DVD)であって、DVDフォーラムで策定された規格である「DVD−R、DVD−RW、DVD−RAM等」、DVD+RWで策定された規格である「DVD+R、DVD+RW等」、コンパクトディスク(CD)であって、読出し専用メモリ(CD−ROM)、CDレコーダブル(CD−R)、CDリライタブル(CD−RW)等、光磁気ディスク(MO)、フレキシブルディスク(FD)、磁気テープ、ハードディスク、読出し専用メモリ(ROM)、電気的消去及び書換可能な読出し専用メモリ(EEPROM)、フラッシュ・メモリ、ランダム・アクセス・メモリ(RAM)等が含まれる。
そして、前記のプログラム又はその一部は、前記記録媒体に記録して保存や流通等させてもよい。また、通信によって、例えば、ローカル・エリア・ネットワーク(LAN)、メトロポリタン・エリア・ネットワーク(MAN)、ワイド・エリア・ネットワーク(WAN)、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、あるいは無線通信ネットワーク、さらにこれらの組み合わせ等の伝送媒体を用いて伝送させてもよく、また、搬送波に乗せて搬送させてもよい。
さらに、前記のプログラムは、他のプログラムの一部分であってもよく、あるいは別個のプログラムと共に記録媒体に記録されていてもよい。また、複数の記録媒体に分割して記録されていてもよい。また、圧縮や暗号化など、復元可能であればどのような態様で記録されていてもよい。
110…プログラム受付モジュール
120…プログラム合成モジュール
130…ダミーコード生成モジュール
140…プログラム送信モジュール
210…プログラム難読化送信用PC
220…プログラム受信実行用PC
230…インターネット
120…プログラム合成モジュール
130…ダミーコード生成モジュール
140…プログラム送信モジュール
210…プログラム難読化送信用PC
220…プログラム受信実行用PC
230…インターネット
Claims (4)
- 難読化処理の対象となるプログラムを受け付ける受付手段と、
有限群の任意の要素に対して、有限群の位数回の演算を施したものが単位元になる演算を用いてダミーコードを生成するダミーコード生成手段と、
前記ダミーコード生成手段によって生成されたダミーコードを、前記受付手段によって受け付けられたプログラムに合成するプログラム合成手段
を具備することを特徴とする情報処理装置。 - 前記ダミーコード生成手段は、前記受付手段によって受け付けられたプログラム内の変数に対するダミーコードを生成する
ことを特徴とする請求項1に記載の情報処理装置。 - 前記ダミーコード生成手段は、互いに逆変換となる式を含むダミーコードを生成する
ことを特徴とする請求項1又は2に記載の情報処理装置。 - コンピュータを、
難読化処理の対象となるプログラムを受け付ける受付手段と、
有限群の任意の要素に対して、有限群の位数回の演算を施したものが単位元になる演算を用いてダミーコードを生成するダミーコード生成手段と、
前記ダミーコード生成手段によって生成されたダミーコードを、前記受付手段によって受け付けられたプログラムに合成するプログラム合成手段
として機能させることを特徴とする情報処理プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007252276A JP2009086746A (ja) | 2007-09-27 | 2007-09-27 | 情報処理装置及び情報処理プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007252276A JP2009086746A (ja) | 2007-09-27 | 2007-09-27 | 情報処理装置及び情報処理プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009086746A true JP2009086746A (ja) | 2009-04-23 |
Family
ID=40660139
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007252276A Pending JP2009086746A (ja) | 2007-09-27 | 2007-09-27 | 情報処理装置及び情報処理プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009086746A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013507670A (ja) * | 2009-10-08 | 2013-03-04 | イルデト カナダ コーポレーション | 動的ファンクションコールシステムにおけるアグレッシブな自動修正のためのシステムおよび方法 |
JP2013156798A (ja) * | 2012-01-30 | 2013-08-15 | Kddi Corp | 記憶装置、アクセスパターンの秘匿方法およびプログラム |
KR20150145629A (ko) * | 2014-06-20 | 2015-12-30 | 주식회사 큐브피아 | 바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법 |
JP2017509942A (ja) * | 2014-01-21 | 2017-04-06 | メタフォリック リミテッド | 暗号アルゴリズムで使用されるときに秘密データを保護する方法 |
-
2007
- 2007-09-27 JP JP2007252276A patent/JP2009086746A/ja active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2013507670A (ja) * | 2009-10-08 | 2013-03-04 | イルデト カナダ コーポレーション | 動的ファンクションコールシステムにおけるアグレッシブな自動修正のためのシステムおよび方法 |
JP2013156798A (ja) * | 2012-01-30 | 2013-08-15 | Kddi Corp | 記憶装置、アクセスパターンの秘匿方法およびプログラム |
JP2017509942A (ja) * | 2014-01-21 | 2017-04-06 | メタフォリック リミテッド | 暗号アルゴリズムで使用されるときに秘密データを保護する方法 |
KR20150145629A (ko) * | 2014-06-20 | 2015-12-30 | 주식회사 큐브피아 | 바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법 |
KR101641769B1 (ko) * | 2014-06-20 | 2016-07-29 | 주식회사 큐브피아 | 바이너리 파일의 보호방법 및 보호된 바이너리 파일의 실행방법 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10079674B2 (en) | Systems and methods for privacy-preserving functional IP verification utilizing fully homomorphic encryption | |
US9501646B2 (en) | Program verification apparatus, program verification method, and computer readable medium | |
CN112016120A (zh) | 基于用户隐私保护的事件预测方法和装置 | |
JP4470982B2 (ja) | 情報処理装置及び情報処理プログラム | |
WO2018135563A1 (ja) | 秘密計算システム、秘密計算装置、秘密計算方法、プログラム | |
JP5929905B2 (ja) | 順序保存暗号化システム、装置、方法及びプログラム | |
KR20110014630A (ko) | 지수 불명료화 | |
CN113169860A (zh) | 用于对密文进行非多项式计算的装置和方法 | |
US8553878B2 (en) | Data transformation system using cyclic groups | |
RU2680761C1 (ru) | Безопасные преобразования данных | |
JP2009086746A (ja) | 情報処理装置及び情報処理プログラム | |
EP3125145B1 (en) | White-box elliptic curve point multiplication | |
JP6585846B2 (ja) | 秘密計算システム、秘密計算装置、秘密計算方法、およびプログラム | |
JP4667800B2 (ja) | 符号化方法およびそのプログラム | |
JP2018205511A (ja) | パラメータ変換方法、パラメータ変換装置、パラメータ変換プログラム、ペアリング演算方法、ペアリング演算装置、及びペアリング演算プログラム | |
JP2020519968A (ja) | ビット分解秘密計算装置、ビット結合秘密計算装置、方法およびプログラム | |
JP4675642B2 (ja) | プログラム難読化装置およびその方法ならびにプログラム | |
KR101472800B1 (ko) | 공개키 암호화 연산에서의 윈도우의 크기를 변경하는 방법 | |
JP2021081591A (ja) | 安全性評価装置、安全性評価方法及び安全性評価プログラム | |
JP2008286964A (ja) | ストリーム暗号の暗号化装置、復号化装置、暗号化方法、復号化方法およびプログラム | |
EP3125144B1 (en) | Array indexing with modular encoded values | |
JP4924177B2 (ja) | プログラム難読化装置及びプログラム | |
JP2009271884A (ja) | 情報処理装置及び情報処理プログラム | |
KR102582082B1 (ko) | 공개키를 이용한 agcd 기반 완전동형암호 연산 방법 및 시스템 | |
Taneja et al. | Comparative Study of RSA with Optimized RSA to Enhance Security |