(57)【要約】【課題】解析が難しいソフトウェアの難読化装置、難読化方法及び難読化プログラムを提供すること。【解決手段】難読化装置１は、パラメータに応じて復号に成功する確率が可変となる暗号化方式に対して、確率が第１閾値以上となる第１パラメータを設定した暗号化処理及び復号処理の第１コード、並びに確率が第２閾値未満となる第２パラメータを設定した暗号化処理及び復号処理の第２コードを生成する生成部１１と、ソフトウェアの制御フローに、平文に対して第１コード又は第２コードにより暗号化処理後に復号処理を行い、平文が復元されたか否かを判定する条件分岐を挿入し、当該条件分岐のうち、一方にダミーの処理を割り当てる挿入部１２と、を備える。【選択図】図１
2018106260.tif 000002
【特許請求の範囲】
【請求項１】
パラメータに応じて復号に成功する確率が可変となる暗号化方式に対して、前記確率が第１閾値以上となる第１パラメータを設定した暗号化処理及び復号処理の第１コード、並びに前記確率が第２閾値未満となる第２パラメータを設定した暗号化処理及び復号処理の第２コードを生成する生成部と、
ソフトウェアの制御フローに、平文に対して前記第１コード又は前記第２コードにより暗号化処理後に復号処理を行い、前記平文が復元されたか否かを判定する条件分岐を挿入し、当該条件分岐のうち、一方にダミーの処理を割り当てる挿入部と、を備える難読化装置。
【請求項２】
前記生成部は、前記確率が第２閾値以上、第１閾値未満となる第３パラメータを設定した暗号化処理及び復号処理の第３コードを生成し、
前記挿入部は、平文に対して前記第１コード、前記第２コード又は前記第３コードにより暗号化処理後に復号処理を行い、前記平文が復元されたか否かを判定する条件分岐を挿入し、前記第３コードを用いた条件分岐を挿入した場合には、当該条件分岐の双方に等価の処理を割り当てる請求項１に記載の難読化装置。
【請求項３】
前記生成部は、前記パラメータをランダムに決定する請求項１又は請求項２に記載の難読化装置。
【請求項４】
前記挿入部は、ランダムに条件分岐のコードを選択する請求項１から請求項３のいずれかに記載の難読化装置。
【請求項５】
前記暗号化方式は、ＬＷＥ型格子暗号方式である請求項１から請求項４のいずれかに記載の難読化装置。
【請求項６】
パラメータに応じて復号に成功する確率が可変となる暗号化方式に対して、前記確率が第１閾値以上となる第１パラメータを設定した暗号化処理及び復号処理の第１コード、並びに前記確率が第２閾値未満となる第２パラメータを設定した暗号化処理及び復号処理の第２コードを生成する生成ステップと、
ソフトウェアの制御フローに、平文に対して前記第１コード又は前記第２コードにより暗号化処理後に復号処理を行い、前記平文が復元されたか否かを判定する条件分岐を挿入し、当該条件分岐のうち、一方にダミーの処理を割り当てる挿入ステップと、をコンピュータが実行する難読化方法。
【請求項７】
パラメータに応じて復号に成功する確率が可変となる暗号化方式に対して、前記確率が第１閾値以上となる第１パラメータを設定した暗号化処理及び復号処理の第１コード、並びに前記確率が第２閾値未満となる第２パラメータを設定した暗号化処理及び復号処理の第２コードを生成する生成ステップと、
ソフトウェアの制御フローに、平文に対して前記第１コード又は前記第２コードにより暗号化処理後に復号処理を行い、前記平文が復元されたか否かを判定する条件分岐を挿入し、当該条件分岐のうち、一方にダミーの処理を割り当てる挿入ステップと、をコンピュータに実行させるための難読化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアのソースコード及び実行プログラムを難読化する装置、方法及びプログラムに関する。
【背景技術】
【０００２】
従来、ソフトウェアに対する不正な解析及び改ざんを防止するために、ソースコード及び実行プログラムを難読化する手法が提案されている。
例えば、非特許文献１では、常に真となる条件分岐、又は常に偽となる条件分岐を用いて、ソフトウェアの制御フローを難読化する手法が提案されている。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Ｃｏｌｌｂｅｒｇ，  Ｃ．，  Ｔｈｏｍｂｏｒｓｏｎ，  Ｃ．，  ａｎｄ  Ｌｏｗ，  Ｄ．，  “Ａ  Ｔａｘｏｎｏｍｙ  ｏｆ  Ｏｂｆｕｓｃａｔｉｎｇ  Ｔｒａｎｓｆｏｒｍａｔｉｏｎｓ，”  Ｔｅｃｈｎｉｃａｌ  Ｒｅｐｏｒｔ  １４８，  Ｄｅｐａｒｔｍｅｎｔ  ｏｆ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  Ｔｈｅ  Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ａｕｃｋｌａｎｄ，  １９９７．
【非特許文献２】Ｐｒｅｄａ，  Ｍ．  Ｄ．，  Ｍａｄｏｕ，  Ｍ．，  Ｂｏｓｓｃｈｅｒｅ，  Ｋ．  Ｄ．，  ａｎｄ  Ｇｉａｃｏｂａｚｚｉ，  Ｒ．，  “Ｏｐａｑｕｅ  Ｐｒｅｄｉｃａｔｅｓ  Ｄｅｔｅｃｔｉｏｎ  ｂｙ  Ａｂｓｔｒａｃｔ  Ｉｎｔｅｒｐｒｅｔａｔｉｏｎ，”  Ｐｒｏｃ．  ｏｆ  ｔｈｅ  １１ｔｈ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  Ａｌｇｅｂｒａｉｃ  Ｍｅｔｈｏｄｏｌｏｇｙ  ａｎｄ  Ｓｏｆｔｗａｒｅ  Ｔｅｃｈｎｏｌｏｇｙ  （ＡＭＡＳＴ  ２００６），  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ４０１９，  ｐｐ．  ８１−９５，  ２００６．
【非特許文献３】Ｍｉｎｇ，  Ｊ．，  Ｘｕ，  Ｄ．，  Ｗａｎｇ，  Ｌ．，  ａｎｄ  Ｗｕ，  Ｄ．，  “ＬＯＯＰ：  Ｌｏｇｉｃ−Ｏｒｉｅｎｔｅｄ  Ｏｐａｑｕｅ  Ｐｒｅｄｉｃａｔｅ  Ｄｅｔｅｃｔｉｏｎ  ｉｎ  Ｏｂｆｕｓｃａｔｅｄ  Ｂｉｎａｒｙ  Ｃｏｄｅ，”  Ｐｒｏｃ．  ｏｆ  ｔｈｅ  ２２ｎｄ  ＡＣＭ  ＳＩＧＳＡＣ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｃｏｍｐｕｔｅｒ  ａｎｄ  Ｃｏｍｍｕｎｉｃａｔｉｏｎｓ  Ｓｅｃｕｒｉｔｙ  （ＣＣＳ  ２０１５），  ｐｐ．  ７５７−７６８，  ２０１５．
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、常に真となる条件分岐（例えば、ｉｆ（（ｎ＊ｎ＋ｎ）％２）＝＝０）及び常に偽となる条件分岐（例えば、ｉｆ（ｎ＊ｎ＊ｎ−ｎ％６）＝＝１）は、特徴的な形式をしているため、第三者により発見されやすい。
非特許文献２及び非特許文献３では、代数的な手法により、これらの条件分岐が常に真であるか、又は常に偽であるかを判別できることが示されている。
【０００５】
本発明は、解析が難しいソフトウェアの難読化装置、難読化方法及び難読化プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明に係る難読化装置は、パラメータに応じて復号に成功する確率が可変となる暗号化方式に対して、前記確率が第１閾値以上となる第１パラメータを設定した暗号化処理及び復号処理の第１コード、並びに前記確率が第２閾値未満となる第２パラメータを設定した暗号化処理及び復号処理の第２コードを生成する生成部と、ソフトウェアの制御フローに、平文に対して前記第１コード又は前記第２コードにより暗号化処理後に復号処理を行い、前記平文が復元されたか否かを判定する条件分岐を挿入し、当該条件分岐のうち、一方にダミーの処理を割り当てる挿入部と、を備える。
【０００７】
前記生成部は、前記確率が第２閾値以上、第１閾値未満となる第３パラメータを設定した暗号化処理及び復号処理の第３コードを生成し、前記挿入部は、平文に対して前記第１コード、前記第２コード又は前記第３コードにより暗号化処理後に復号処理を行い、前記平文が復元されたか否かを判定する条件分岐を挿入し、前記第３コードを用いた条件分岐を挿入した場合には、当該条件分岐の双方に等価の処理を割り当ててもよい。
【０００８】
前記生成部は、前記パラメータをランダムに決定してもよい。
【０００９】
前記挿入部は、ランダムに条件分岐のコードを選択してもよい。
【００１０】
前記暗号化方式は、ＬＷＥ型格子暗号方式であってもよい。
【００１１】
本発明に係る難読化方法は、パラメータに応じて復号に成功する確率が可変となる暗号化方式に対して、前記確率が第１閾値以上となる第１パラメータを設定した暗号化処理及び復号処理の第１コード、並びに前記確率が第２閾値未満となる第２パラメータを設定した暗号化処理及び復号処理の第２コードを生成する生成ステップと、ソフトウェアの制御フローに、平文に対して前記第１コード又は前記第２コードにより暗号化処理後に復号処理を行い、前記平文が復元されたか否かを判定する条件分岐を挿入し、当該条件分岐のうち、一方にダミーの処理を割り当てる挿入ステップと、をコンピュータが実行する。
【００１２】
本発明に係る難読化プログラムは、パラメータに応じて復号に成功する確率が可変となる暗号化方式に対して、前記確率が第１閾値以上となる第１パラメータを設定した暗号化処理及び復号処理の第１コード、並びに前記確率が第２閾値未満となる第２パラメータを設定した暗号化処理及び復号処理の第２コードを生成する生成ステップと、ソフトウェアの制御フローに、平文に対して前記第１コード又は前記第２コードにより暗号化処理後に復号処理を行い、前記平文が復元されたか否かを判定する条件分岐を挿入し、当該条件分岐のうち、一方にダミーの処理を割り当てる挿入ステップと、をコンピュータに実行させる。
【発明の効果】
【００１３】
本発明によれば、ソフトウェアのソースコード及び実行プログラムの解析がより難しくなる。
【図面の簡単な説明】
【００１４】
【図１】実施形態に係る難読化装置の機能構成を示すブロック図である。
【図２】実施形態に係る難読化の第１のパターンを示す図である。
【図３】実施形態に係る難読化の第２のパターンを示す図である。
【図４】実施形態に係る難読化の第３のパターンを示す図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態の一例について説明する。
図１は、本実施形態に係る難読化装置１の機能構成を示すブロック図である。
難読化装置１は、サーバ装置又はパーソナルコンピュータ等の情報処理装置（コンピュータ）であり、制御部１０及び記憶部２０の他、各種データの入出力デバイス又は通信デバイス等を備える。
【００１６】
制御部１０は、難読化装置１の全体を制御する部分であり、記憶部２０に記憶された各種プログラムを適宜読み出して実行することにより、本実施形態における各種機能を実現している。制御部１０は、ＣＰＵであってよい。
【００１７】
記憶部２０は、ハードウェア群を難読化装置１として機能させるための各種プログラム、及び各種データ等の記憶領域であり、ＲＯＭ、ＲＡＭ、フラッシュメモリ又はハードディスク（ＨＤＤ）等であってよい。具体的には、記憶部２０は、本実施形態の各機能を制御部１０に実行させる難読化プログラムを記憶する。
【００１８】
制御部１０は、生成部１１と、挿入部１２とを備える。難読化装置１は、これらの機能部により、入力であるソフトウェアのソースコード又は実行プログラムを、難読化して出力する。
【００１９】
生成部１１は、パラメータに応じて復号に成功する確率が可変となる暗号化方式に対して、この確率が第１閾値（例えば、１−１／２１２８）以上となる第１パラメータを設定した暗号化処理及び復号処理の第１コード、並びに確率が第２閾値（例えば、１／２１２８）未満となる第２パラメータを設定した暗号化処理及び復号処理の第２コードを生成する。
【００２０】
ここで、暗号化方式には、例えば、ＬＷＥ（Ｌｅａｒｎｉｎｇ  ｗｉｔｈ  Ｅｒｒｏｒ）型格子暗号が採用される。
ＬＷＥ型格子暗号は、定数部分にノイズを含む連立一次方程式の解を求めるＬＷＥ問題に基づく格子暗号技術である。ＬＷＥ型格子暗号は、次元ｎ、法ｑ、ノイズ分布χの３つのパラメータを有する。ノイズ分布χには、正規分布を用いることが一般的であるが、他の確率分布のノイズを有するＬＷＥ型の暗号方式であってもよい。
【００２１】
生成部１１は、ＬＷＥ型格子暗号における鍵生成処理、暗号化処理及び復号処理のコードを生成する。このとき、生成部１１は、一般的なパラメータ設定の、例えば復号に成功する確率が１−１／２１２８以上のＬＷＥ型格子暗号に加え、ノイズ分布χの標準偏差σに通常よりも大きな値を設定し、高い確率で復号に失敗する、例えば成功確率が１／２１２８未満のＬＷＥ型格子暗号における暗号化処理及び復号処理のコードを生成する。
さらに、生成部１１は、復号に成功する確率が第２閾値以上、第１閾値未満となる第３パラメータを設定した暗号化処理及び復号処理の第３コードを生成する。この第３コードによる復号処理は、例えば１／２程度の確率で成功する。
なお、暗号化のパラメータは、確率の条件を満たす範囲でランダムに決定されてよい。
【００２２】
挿入部１２は、入力されたソフトウェアのソースコード又は実行プログラムの制御フローに、平文に対して第１コード、第２コード又は第３コードにより暗号化処理後に復号処理を行い、元の平文が復元されたか否かを判定する条件分岐を挿入する。
条件分岐は、例えば、平文ｍ、暗号化関数Ｅ及び復号関数Ｄを用いて、「ｉｆ（Ｄ（Ｅ（ｍ））＝＝ｍ）」のように記述できる。
ここで、第１コードからは、常に真とみなせる条件分岐（以下、恒真の分岐）が作成され、第２コードからは、常に偽とみなせる条件分岐（以下、恒偽の分岐）が作成される。また、第３コードからは、真偽が不定の条件分岐（不定の分岐）が作成される。
【００２３】
さらに、挿入部１２は、恒真の分岐のうち偽側の処理に、及び恒偽の分岐のうち真側の処理に、それぞれダミーの処理を割り当てる。また、挿入部１２は、不定の分岐の双方に記述が異なる等価の処理を割り当てる。
【００２４】
ここで、挿入される条件分岐は、恒真の分岐、恒偽の分岐又は不定の分岐がランダムに選択されてよい。
また、暗号化の対象とする平文ｍは、任意の文字列であり、ランダムに選択されてもよいし、所定のワークエリア等の値が選択されてもよい。
なお、挿入部１２により条件分岐が挿入される箇所は、既存の手法により選択されてよい。
【００２５】
図２は、本実施形態に係る難読化の第１のパターンを示す図である。
ここでは、恒真の分岐が用いられ、条件分岐のＹＥＳの側には、元の処理Ｐが割り当てられ、条件分岐のＮＯの側には、ダミーの処理Ｑが割り当てられる。
条件分岐での判定は常にＹＥＳとなるため、ＮＯ側のダミーの処理Ｑは実行されず、難読化後の制御フローは、元の処理Ｐと等価である。
【００２６】
図３は、本実施形態に係る難読化の第２のパターンを示す図である。
ここでは、恒偽の分岐が用いられ、条件分岐のＹＥＳの側には、ダミーの処理Ｑが割り当てられ、条件分岐のＮＯの側には、元の処理Ｐが割り当てられる。
条件分岐での判定は常にＮＯとなるため、ＹＥＳ側のダミーの処理Ｑは実行されず、難読化後の制御フローは、元の処理Ｐと等価である。
【００２７】
図４は、本実施形態に係る難読化の第３のパターンを示す図である。
ここでは、不定の分岐が用いられ、条件分岐のＹＥＳの側には、元の処理Ｐと等価な処理Ｐ’が割り当てられ、条件分岐のＮＯの側にも、元の処理Ｐと等価な処理Ｐ’’が割り当てられる。ここで、Ｐ’及びＰ’’は、Ｐと等価な処理である。
条件分岐での判定は、ＹＥＳの場合とＮＯの場合とがあり、Ｐ’又はＰ’’のいずれかの処理が実行される。
【００２８】
本実施形態によれば、難読化装置１は、暗号化処理及び復号処理のパラメータを調整することにより、常に真となる条件分岐、及び常に偽となる条件分岐を生成し、いずれかをソフトウェアの制御フローに挿入する。
これにより、難読化装置１は、ソフトウェアの制御フローを、実行されないダミーの処理と本来の処理とに分岐させ、解析を難しくできる。さらに、いずれのパターンの条件分岐が挿入されたのかが判別され難いため、ソフトウェアのソースコード及び実行プログラムの解析がより難しくなる。
【００２９】
また、難読化装置１は、確率的に真にも偽にもなり得る条件分岐挿入し、等価な処理を２つ記述することにより難読化を行える。これにより、難読化装置１は、３パターンの制御フローを選択的に組み入れ、ソフトウェアのソースコード及び実行プログラムの解析をより困難にできる。
【００３０】
さらに、難読化装置１は、暗号化処理及び復号処理のパラメータ、及び条件分岐のパターン（恒真、恒偽、不定）をランダムに選択することで、ソフトウェアのソースコード及び実行プログラムの解析をより困難にできる。
【００３１】
難読化装置１は、暗号化方式として、ＬＷＥ型格子暗号を用いることで、パラメータであるノイズ分布の標準偏差σを調整して３パターンの条件分岐を適切に生成できる。
【００３２】
以上、本発明の実施形態について説明したが、本発明は前述した実施形態に限るものではない。また、本実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、本実施形態に記載されたものに限定されるものではない。
【００３３】
難読化装置１による難読化方法は、ソフトウェアにより実現される。ソフトウェアによって実現される場合には、このソフトウェアを構成するプログラムが、情報処理装置（コンピュータ）にインストールされる。また、これらのプログラムは、ＣＤ−ＲＯＭのようなリムーバブルメディアに記録されてユーザに配布されてもよいし、ネットワークを介してユーザのコンピュータにダウンロードされることにより配布されてもよい。さらに、これらのプログラムは、ダウンロードされることなくネットワークを介したＷｅｂサービスとしてユーザのコンピュータに提供されてもよい。
【符号の説明】
【００３４】
１  難読化装置
１０  制御部
１１  生成部
１２  挿入部
２０  記憶部
【図１】
2018106260.tif 000003
【図２】
2018106260.tif 000004
【図３】
2018106260.tif 000005
【図４】
2018106260.tif 000006