(57)【要約】【課題】特定の処理の実行タイミングを狙ったサイドチャネル攻撃又は故障利用攻撃等への耐性を向上できる変換装置、変換方法、変換プログラム及び難読プログラムを提供すること。【解決手段】変換装置１は、処理対象プログラムに含まれる第１の命令ブロックの指定を受け付ける指定部１１と、指定された第１の命令ブロックと等価かつ実行クロック数が異なる１又は複数の命令ブロックを生成する生成部１２と、乱数により第１の命令ブロック又は第２の命令ブロックのいずれかに動的に分岐する条件分岐コードを挿入する挿入部１３と、を備える。【選択図】図１
2020064461.tif 000002
【特許請求の範囲】
【請求項１】
処理対象プログラムに含まれる第１の命令ブロックの指定を受け付ける指定部と、
指定された前記第１の命令ブロックと等価かつ実行クロック数が異なる１又は複数の第２の命令ブロックを生成する生成部と、
乱数により前記第１の命令ブロック又は前記第２の命令ブロックのいずれかに動的に分岐する条件分岐コードを挿入する挿入部と、を備える変換装置。
【請求項２】
前記生成部は、前記第２の命令ブロックを構成する少なくとも一部のコードの入力を受け付ける請求項１に記載の変換装置。
【請求項３】
前記生成部は、前記第１の命令ブロックを等価なまま変換するための冗長コードを含む第１のテンプレートを用いて、前記第２の命令ブロックを生成する請求項１又は請求項２に記載の変換装置。
【請求項４】
前記挿入部は、第２のテンプレートを用いて、分岐数に応じた前記条件分岐コードを挿入する請求項１から請求項３のいずれかに記載の変換装置。
【請求項５】
前記指定部は、複数の前記第１の命令ブロックの指定を受け付ける請求項１から請求項４のいずれかに記載の変換装置。
【請求項６】
処理対象プログラムに含まれる第１の命令ブロックの指定を受け付ける指定ステップと、
指定された前記第１の命令ブロックと等価かつ実行クロック数が異なる１又は複数の第２の命令ブロックを生成する生成ステップと、
乱数により前記第１の命令ブロック又は前記第２の命令ブロックのいずれかに動的に分岐する条件分岐コードを挿入する挿入ステップと、をコンピュータが実行する変換方法。
【請求項７】
処理対象プログラムに含まれる第１の命令ブロックの指定を受け付ける指定ステップと、
指定された前記第１の命令ブロックと等価かつ実行クロック数が異なる１又は複数の第２の命令ブロックを生成する生成ステップと、
乱数により前記第１の命令ブロック又は前記第２の命令ブロックのいずれかに動的に分岐する条件分岐コードを挿入する挿入ステップと、をコンピュータに実行させるための変換プログラム。
【請求項８】
秘密情報を用いた処理を実行するためのプログラムであって、
第１の命令ブロックと等価かつ実行クロック数が異なる１又は複数の第２の命令ブロックと、
乱数により前記第１の命令ブロック又は前記第２の命令ブロックのいずれかに動的に分岐する条件分岐コードと、を備える前記秘密情報の難読プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアに用いられる秘密情報の解読を困難にする技術に関する。
【背景技術】
【０００２】
近年、センサ及びウェアラブル端末等の普及に伴い、これらの端末に対する攻撃の影響も増大している。例えば、室内の温度センサが送信するデータが改ざんされ、空調が間接的に操作されることで、健康被害が発生するおそれがある。端末が送信するデータの改ざんを防止するためには、暗号学的な手段により、データの正当性を証明するとともに、暗号処理に用いる秘密鍵を安全に端末に実装する必要がある。
【０００３】
一方で、端末におけるサイドチャネル情報（消費電力、処理時間、熱、音、漏れ電磁波、メモリ又はキャッシュのデータ等）を用いて、端末の秘密鍵を推定する方法がある。サイドチャネル攻撃としては、例えば、暗号処理を繰り返し行い、鍵に対する演算の消費電力の統計データを取得し鍵を推定する電力差分攻撃（Ｄｉｆｆｅｒｅｎｔｉｌａ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ  （ＤＰＡ））及び相関電力解析（Ｃｏｒｒｅｌａｔｉｏｎ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ  （ＣＰＡ））等が挙げられる。
また、プログラムに対し、一時的な障害を引き起こすことで、通常とは異なる出力又は内部状態を解析し、鍵を推定する故障利用攻撃も知られている。
【０００４】
また、秘密情報を用いた処理等が実装されたソフトウェアを難読化する従来の手法は、大別すると、下記の４つに分類できる（例えば、非特許文献１参照）。
・Ｃｏｎｔｒｏｌ  Ｆｌｏｗ  Ｏｂｆｕｓｃａｔｉｏｎ（制御フローの難読化）：  冗長な条件分岐又は冗長な関数呼び出し等の追加により、処理の流れを分かり難くする手法。
・Ｏｐａｑｕｅ  Ｐｒｅｄｉｃａｔｅ（解析困難な条件式の利用）：  常に真（又は偽）となる条件式（例えば、「（ｘ＊ｘ＋ｘ）％２＝０」）を利用することで、解読を難しくする手法。
・Ｄａｔａ  Ｅｎｃｏｄｉｎｇ（データの符号化）：  データを関係式により変換し、解析を難しくする手法。
・Ｂｒｅａｋｉｎｇ  Ａｂｓｔｒａｃｔｉｏｎ（抽象化の破壊による難読化）：  オブジェクト指向言語におけるカプセル化構造を破壊することで、解析を難しくする手法。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Ｃｏｌｌｂｅｒｇ，  Ｃ．，  Ｔｈｏｍｂｏｒｓｏｎ，  Ｃ．，  Ｌｏｗ，  Ｄ．：  Ａ  Ｔａｘｏｎｏｍｙ  ｏｆ  Ｏｂｆｕｓｃａｔｉｎｇ  Ｔｒａｎｓｆｏｒｍａｔｉｏｎｓ．  Ｔｅｃｈ．  ｒｅｐ．，  Ｔｈｅ  Ｕｎｉｖｅｒｓｉｔｙ  ｏｆ  Ａｕｃｋｌａｎｄ  （１９９７）．
【非特許文献２】Ｗａｎｇ，  Ｃ．，  Ｄａｖｉｄｓｏｎ，  Ｊ．，  Ｈｉｌｌ，  Ｊ．，  Ｋｎｉｇｈｔ，  Ｊ．：  Ｐｒｏｔｅｃｔｉｏｎ  ｏｆ  Ｓｏｆｔｗａｒｅ−ｂａｓｅｄ  Ｓｕｒｖｉｖａｂｉｌｉｔｙ  Ｍｅｃｈａｎｉｓｍｓ．  Ｉｎ：  ２００１  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｄｅｐｅｎｄａｂｌｅ  Ｓｙｓｔｅｍｓ  ａｎｄ  Ｎｅｔｗｏｒｋｓ．  ｐｐ．  １９３−２０２  （Ｊｕｌｙ  ２００１）．
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来の難読化手法では、前述のサイドチャネル攻撃又は故障利用攻撃への対策として、次の課題が存在する。
Ｃｏｎｔｒｏｌ  Ｆｌｏｗ  Ｏｂｆｕｓｃａｔｉｏｎでは、静的な制御フローの変更を行うため、攻撃者がプログラムを入手できる場合には、攻撃対象の命令ブロックの処理タイミングが特定されてしまう。例えば、非特許文献２では、プログラムの制御フローの構造を命令ブロックが並列に並ぶ構造に変換し、新たに導入する制御変数により、各命令ブロックの実行順序を制御する方法が提案されている。ところが、制御変数の値については、静的な代入命令により更新される。このため、攻撃対象の命令は、毎回同一のタイミングで実行され、サイドチャネル攻撃が可能となる。
【０００７】
Ｏｐａｑｕｅ  Ｐｒｅｄｉｃａｔｅでは、条件分岐の結果は静的に定まるため、攻撃者がプログラムを入手できる場合には、サイドチャネル攻撃が可能となる。
Ｄａｔａ  Ｅｎｃｏｄｉｎｇでは、変換に用いるためのデータがサイドチャネル攻撃により推測され、結果として秘密情報の解読が可能となる。
Ｂｒｅａｋｉｎｇ  Ａｂｓｔｒａｃｔｉｏｎは、オブジェクト指向言語に特化した方式であり、アセンブラ及び機械語には適用できない。このため、攻撃対策としての適用範囲が大幅に制限される。
【０００８】
このように、従来の手法では、プログラム中の特定の処理の実行タイミングを狙ったサイドチャネル攻撃又は故障利用攻撃等への耐性が十分でなく、安全性に課題があった。
【０００９】
本発明は、特定の処理の実行タイミングを狙ったサイドチャネル攻撃又は故障利用攻撃等への耐性を向上できる変換装置、変換方法、変換プログラム及び難読プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明に係る変換装置は、処理対象プログラムに含まれる第１の命令ブロックの指定を受け付ける指定部と、指定された前記第１の命令ブロックと等価かつ実行クロック数が異なる１又は複数の第２の命令ブロックを生成する生成部と、乱数により前記第１の命令ブロック又は前記第２の命令ブロックのいずれかに動的に分岐する条件分岐コードを挿入する挿入部と、を備える。
【００１１】
前記生成部は、前記第２の命令ブロックを構成する少なくとも一部のコードの入力を受け付けてもよい。
【００１２】
前記生成部は、前記第１の命令ブロックを等価なまま変換するための冗長コードを含む第１のテンプレートを用いて、前記第２の命令ブロックを生成してもよい。
【００１３】
前記挿入部は、第２のテンプレートを用いて、分岐数に応じた前記条件分岐コードを挿入してもよい。
【００１４】
前記指定部は、複数の前記第１の命令ブロックの指定を受け付けてもよい。
【００１５】
本発明に係る変換方法は、処理対象プログラムに含まれる第１の命令ブロックの指定を受け付ける指定ステップと、指定された前記第１の命令ブロックと等価かつ実行クロック数が異なる１又は複数の第２の命令ブロックを生成する生成ステップと、乱数により前記第１の命令ブロック又は前記第２の命令ブロックのいずれかに動的に分岐する条件分岐コードを挿入する挿入ステップと、をコンピュータが実行する。
【００１６】
本発明に係る変換プログラムは、処理対象プログラムに含まれる第１の命令ブロックの指定を受け付ける指定ステップと、指定された前記第１の命令ブロックと等価かつ実行クロック数が異なる１又は複数の第２の命令ブロックを生成する生成ステップと、乱数により前記第１の命令ブロック又は前記第２の命令ブロックのいずれかに動的に分岐する条件分岐コードを挿入する挿入ステップと、をコンピュータに実行させるためのものである。
【００１７】
本発明に係る難読プログラムは、秘密情報を用いた処理を実行するためのプログラムであって、第１の命令ブロックと等価かつ実行クロック数が異なる１又は複数の第２の命令ブロックと、乱数により前記第１の命令ブロック又は前記第２の命令ブロックのいずれかに動的に分岐する条件分岐コードと、を備える。
【発明の効果】
【００１８】
本発明によれば、特定の処理の実行タイミングを狙ったサイドチャネル攻撃又は故障利用攻撃等への耐性を向上できる。
【図面の簡単な説明】
【００１９】
【図１】実施形態に係る変換装置の機能構成を示すブロック図である。
【図２】実施形態に係るプログラムの変換方法を示す概念図である。
【図３】実施形態に係る変換方法による変換前後のプログラムのソースコードを例示する図である。
【発明を実施するための形態】
【００２０】
以下、本発明の実施形態の一例について説明する。
図１は、本実施形態に係る変換装置１の機能構成を示すブロック図である。
変換装置１は、サーバ装置又はパーソナルコンピュータ等の情報処理装置（コンピュータ）であり、制御部１０及び記憶部２０の他、各種データの入出力デバイス及び通信デバイス等を備える。
【００２１】
制御部１０は、変換装置１の全体を制御する部分であり、記憶部２０に記憶された各種プログラムを適宜読み出して実行することにより、本実施形態における各機能を実現する。制御部１０は、ＣＰＵであってよい。
【００２２】
記憶部２０は、ハードウェア群を変換装置１として機能させるための各種プログラム、及び各種データ等の記憶領域であり、ＲＯＭ、ＲＡＭ、フラッシュメモリ又はハードディスク（ＨＤＤ）等であってよい。具体的には、記憶部２０は、本実施形態の各機能を制御部１０に実行させるためのプログラム（変換プログラム）、及びこのプログラムで用いられるテンプレート等を記憶する。
【００２３】
制御部１０は、指定部１１と、生成部１２と、挿入部１３とを備える。制御部１０は、これらの機能部により、処理対象プログラムに動的な分岐を付加し、秘密情報を用いた特定の処理の実行タイミングがランダムに変化する難読プログラムに変換することで、サイドチャネル攻撃又は故障利用攻撃等に耐性を持たせる。
【００２４】
指定部１１は、処理対象プログラムに含まれる、秘密情報を用いた特定の処理より前の１又は複数の命令ブロック（第１の命令ブロック）の指定を受け付ける。
複数の第１の命令ブロックが指定された場合、それぞれに対して、生成部１２及び挿入部１３により動的な分岐処理が付加される。
【００２５】
生成部１２は、指定された第１の命令ブロックと等価かつ実行クロック数が異なる１又は複数の第２の命令ブロックを生成する。
このとき、生成部１２は、第１の命令ブロックを等価なまま変換するための冗長コードを含む第１のテンプレートを用いて、第２の命令ブロックを生成する。具体的には、例えば、プログラムが利用しない変数又はレジスタに対する値の読み出し又は書き込みを行うコード、あるいは、Ｏｐａｑｕｅ  Ｐｒｅｄｉｃａｔｅを用いて実質的な意味を持たない分岐処理を行うコード等が追加されてよい。
また、生成部１２は、第２の命令ブロックを構成する少なくとも一部のコードの入力を受け付けてもよい。
【００２６】
挿入部１３は、乱数により第１の命令ブロック又は第２の命令ブロックのいずれかに動的に分岐する条件分岐コードを、処理対象プログラムに挿入する。
このとき、挿入部１３は、第２のテンプレートを用いて、分岐数に応じた条件分岐コードを挿入する。なお、分岐数は、予め所定の数が設定されていてもよいし、指定部１１が入力を受け付けてもよい。あるいは、挿入部１３が分岐数をランダムに決定してもよい。
【００２７】
図２は、本実施形態に係るプログラムの変換方法を示す概念図である。
処理対象プログラムには、秘密情報である秘密鍵を用いる命令ブロックが存在している。変換装置１は、動的な分岐を挿入する箇所として、第１の命令ブロックＡの指定を受け付ける。
【００２８】
変換装置１は、指定された命令ブロックＡと同一の処理結果が得られる、すなわち等価な３つの命令ブロックＡ´、Ａ´´、Ａ´´´を新たに生成する。オリジナルの命令ブロックＡ、及び生成された命令ブロックＡ´、Ａ´´、Ａ´´´は、全て実行クロック数が異なる。
【００２９】
次に、変換装置１は、プログラム内で生成された乱数、又は新たに生成する乱数に基づいて、これらの命令ブロックＡ、Ａ´、Ａ´´、Ａ´´´のいずれかをランダムに実行する条件分岐を挿入する。
この動的な条件分岐により、プログラムの実行の度に実行クロック数が変化し得るため、秘密鍵を用いる命令ブロックの実行タイミングが一定せず、特定されなくなる。
【００３０】
図３は、本実施形態に係る変換方法による変換前後のプログラムのソースコードを例示する図である。
この例では、変換前の処理対象プログラムで指定された「Ｂ［０］＝Ｋ１０；」という命令ブロックが、３分岐のコードに変換されている。
【００３１】
変換後のコードでは、乱数Ｒａｎｄの下位２ビット（Ｒａｎｄ  ＆  ０ｘ３）の値（０〜３）により、３種類の命令ブロックのいずれかがランダムに実行される。
具体的には、値が０の場合は、元の命令ブロックが実行され、値が１の場合は、冗長な代入処理である「Ｂ［１１］＝０ｘ１０；」が追加される。また、値が２又は３の場合は、乱数Ｒａｎｄとの排他的論理和（演算記号：＾）を２回実行するという冗長な処理が追加されており、各命令ブロックの実行クロック数は、それぞれ異なっている。
【００３２】
実行クロック数が異なる命令ブロックは、これらには限られず、プログラムが利用しない変数又はレジスタに対する値の読み出し又は書き込みを行う処理、あるいは、Ｏｐａｑｕｅ  Ｐｒｅｄｉｃａｔｅを用いて実質的な意味を持たない分岐処理等、様々なダミーの命令が適宜追加されてよい。
ただし、クロック数を増やすために導入するダミーの命令は、コンパイラの最適化機能等により除去されないものが選ばれる。
【００３３】
このように生成される冗長な処理、及びｉｆ文等の分岐処理のコードは、記憶部２０に予めテンプレートとして記憶され、適宜読み出して利用される。
なお、この例では、０〜３の乱数を用いた３分岐への変換例を示したが、各命令ブロックが同確率で実行されるように、同じ０〜３の乱数を用いた４分岐に変換されてもよい。さらに、乱数の桁数を増やして５分岐以上の分岐処理が採用されてもよい。
【００３４】
本実施形態によれば、変換装置１は、処理対象のプログラムに制御フローの難読化を適用し、さらに、動的な条件分岐を用いることで、鍵を用いた暗号化又は復号処理等、サイドチャネル攻撃又は故障利用攻撃の対象となる特定の処理が実行されるタイミングを、プログラムの実行毎に変える。このとき、変換装置１は、特定の処理の前に、乱数に基づく動的な条件分岐を挿入し、プログラムの実行毎にランダムな命令ブロックが実行されるようにする。変換装置１は、各命令ブロックに、等価であり、かつ、実行クロック数が異なる命令列を割り当てることで、プログラム全体の機能を保ちつつ、攻撃対象となる特定の処理が実行されるタイミングを実行毎に変えることができる。
この結果、変換装置１は、特定の処理の実行タイミングを狙ったサイドチャネル攻撃又は故障利用攻撃等への耐性を向上できる。
【００３５】
変換装置１は、命令ブロックを構成する少なくとも一部のコードの入力を受け付けることにより、実行クロック数が異なる等価な命令ブロックを容易に生成できる。
また、変換装置１は、第１の命令ブロックを等価なまま変換するための冗長コードを含む第１のテンプレートを用いて、第２の命令ブロックを生成することで、ユーザの手間を削減して、自動的に難読プログラムを生成できる。
【００３６】
変換装置１は、第２のテンプレートを用いて、分岐数に応じた条件分岐コードを挿入するので、状況に応じて、適切な分岐数の動的な条件分岐をプログラムに挿入し、サイドチャネル攻撃又は故障利用攻撃等への耐性を向上できる。
【００３７】
変換装置１は、複数の第１の命令ブロックの指定を受け付け、動的な条件分岐を複数箇所に適用することで、攻撃対象となる特定の処理が実行されるタイミングのばらつきをさらに大きくできるので、この結果、サイドチャネル攻撃又は故障利用攻撃等への耐性をさらに向上できる。
【００３８】
以上、本発明の実施形態について説明したが、本発明は前述した実施形態に限るものではない。また、前述した実施形態に記載された効果は、本発明から生じる最も好適な効果を列挙したに過ぎず、本発明による効果は、実施形態に記載されたものに限定されるものではない。
【００３９】
変換装置１による変換方法は、ソフトウェアにより実現される。ソフトウェアによって実現される場合には、このソフトウェアを構成するプログラムが、情報処理装置（コンピュータ）にインストールされる。また、これらのプログラムは、ＣＤ−ＲＯＭのようなリムーバブルメディアに記録されてユーザに配布されてもよいし、ネットワークを介してユーザのコンピュータにダウンロードされることにより配布されてもよい。さらに、これらのプログラムは、ダウンロードされることなくネットワークを介したＷｅｂサービスとしてユーザのコンピュータに提供されてもよい。
【符号の説明】
【００４０】
１  変換装置
１０  制御部
１１  指定部
１２  生成部
１３  挿入部
２０  記憶部
【図１】
2020064461.tif 000003
【図２】
2020064461.tif 000004
【図３】
2020064461.tif 000005