(57)【特許請求の範囲】
【請求項１】
符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択する第１の選択手段と、
符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する第２の選択手段と、
ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する行列生成手段と、
数１を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する第１の算出手段と、
該算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出する第２の算出手段と、
プログラムにおいて、代入命令を、第１の算出手段で算出した各符号化式で置換する第１の置換手段と、
プログラムにおいて、右辺にある変数を、第２の算出手段で算出した各復号式で置換する第２の置換手段と、
プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する削除手段と、
プログラムにおいて、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する宣言追加手段と、
プログラムにおいて、各変数に乱数を設定するための命令を追加する命令追加手段と、
を備えたことを特徴とするプログラム難読化装置。
【数１】
0005149062.tif 000006
【請求項２】
符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択する第１の選択手段と、
符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する第２の選択手段と、
ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する行列生成手段と、
数２を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する第１の算出手段と、
該算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出する第２の算出手段と、
プログラムにおいて、代入命令を、第１の算出手段で算出した各符号化式で置換する第１の置換手段と、
プログラムにおいて、右辺にある変数を、第２の算出手段で算出した各復号式で置換する第２の置換手段と、
プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する削除手段と、
プログラムにおいて、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する宣言追加手段と、
プログラムにおいて、各変数に乱数を設定するための命令を追加する命令追加手段と、
を備えたことを特徴とするプログラム難読化装置。
【数２】
0005149062.tif 000007
【請求項３】
第１の選択手段、第２の選択手段、行列生成手段、第１の算出手段、第２の算出手段、第１の置換手段、第２の置換手段、削除手段、宣言追加手段、および命令追加手段を備えるプログラム難読化装置におけるプログラムの難読化方法であって、
前記第１の選択手段が、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択する第１のステップと、
前記第２の選択手段が、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する第２のステップと、
前記行列生成手段が、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する第３のステップと、
前記第１の算出手段が、数３を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する第４のステップと、
前記第２の算出手段が、該算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出する第５のステップと、
前記第１の置換手段が、プログラムにおいて、代入命令を、算出した各符号化式で置換する第６のステップと、
前記第２の置換手段が、プログラムにおいて、右辺にある変数を、算出した各復号式で置換する第７のステップと、
前記削除手段が、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する第８のステップと、
前記宣言追加手段が、プログラムにおいて、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する第９のステップと、
前記命令追加手段が、プログラムにおいて、各変数に乱数を設定するための命令を追加する第１０のステップと、
を備えたことを特徴とするプログラムの難読化方法。
【数３】
0005149062.tif 000008
【請求項４】
第１の選択手段、第２の選択手段、行列生成手段、第１の算出手段、第２の算出手段、第１の置換手段、第２の置換手段、削除手段、宣言追加手段、および命令追加手段を備えるプログラム難読化装置におけるプログラムの難読化方法であって、
前記第１の選択手段が、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択する第１のステップと、
前記第２の選択手段が、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する第２のステップと、
前記行列生成手段が、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する第３のステップと、
前記第１の算出手段が、数４を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する第４のステップと、
前記第２の算出手段が、該算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出する第５のステップと、
前記第１の置換手段が、プログラムにおいて、代入命令を、算出した各符号化式で置換する第６のステップと、
前記第２の置換手段が、プログラムにおいて、右辺にある変数を、算出した各復号式で置換する第７のステップと、
前記削除手段が、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する第８のステップと、
前記宣言追加手段が、プログラムにおいて、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する第９のステップと、
前記命令追加手段が、プログラムにおいて、各変数に乱数を設定するための命令を追加する第１０のステップと、
を備えたことを特徴とするプログラムの難読化方法。
【数４】
0005149062.tif 000009
【請求項５】
符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択する第１のステップと、
符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する第２のステップと、
ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する第３のステップと、
数５を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する第４のステップと、
該算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出する第５のステップと、
プログラムにおいて、代入命令を、算出した各符号化式で置換する第６のステップと、
プログラムにおいて、右辺にある変数を、算出した各復号式で置換する第７のステップと、
プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する第８のステップと、
プログラムにおいて、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する第９のステップと、
プログラムにおいて、各変数に乱数を設定するための命令を追加する第１０のステップと、
をコンピュータに実行させるためのプログラム。
【数５】
0005149062.tif 000010
【請求項６】
符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択する第１のステップと、
符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する第２のステップと、
ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する第３のステップと、
数６を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する第４のステップと、
該算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出する第５のステップと、
プログラムにおいて、代入命令を、算出した各符号化式で置換する第６のステップと、
プログラムにおいて、右辺にある変数を、算出した各復号式で置換する第７のステップと、
プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する第８のステップと、
プログラムにおいて、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する第９のステップと、
プログラムにおいて、各変数に乱数を設定するための命令を追加する第１０のステップと、
をコンピュータに実行させるためのプログラム。
【数６】
0005149062.tif 000011
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乱数を用いた変数の符号化によるプログラム難読化装置、プログラム難読化方法およびプログラムに関する。
【背景技術】
【０００２】
ソフトウェアには、価値のあるアルゴリズムおよびコンテンツの暗号鍵など、利用者に対して秘密にすべき情報が含まれる場合がある。一方では、ソフトウェアを解析するための技術（ＲＥ：Ｒｅｖｅｒｓｅ  Ｅｎｇｉｎｅｅｒｉｎｇ）が数多く開発されている。このため、これらの技術によりソフトウェアが解析されると、不正者が秘密情報を入手するという脅威が考えられる。この脅威に対し、ソフトウェアの仕様を保ったまま、ソフトウェアの解析を困難にする難読化という技術がある。
【０００３】
上記の難読化の技術としては、プログラム中の変数を演算装置によって線形変換して符号化を施す符号化方法、すなわち、符号化を施すｎ個（但し、ｎは正整数）の変数を任意に選択し、ｍ×ｎの行列（但し、ｍは、ｍ≧ｎの正整数）およびｍ次元の任意のベクトルを生成し、生成した行列およびベクトルを変換鍵としてｎ個の変数を線形変換して同時にｍ個の整数に符号化する方法が開示されている（例えば、特許文献１参照。）。
【０００４】
プログラムから符号化の対象となる変数をｎ個（ｎは２以上の正の整数）選択し、選択したｎ個の変数と任意の定数との排他的論理和からなる符号化関数により、ｎ個の独立した符号化関数を含むｍ個（ｍは正の整数であり、ｍ≧ｎ）の符号化式を定義する。ｎ個の独立な符号化関数からなる符号化式をｎ個の変数について演算し、ｎ個の変数に対応した符号化されたｎ個の変数を求め、この符号化されたｎ個の変数を用いて、符号化前のｎ個の変数を表し、次いで、符号化された変数に初期値を与え、連続する代入命令のマージを実行する方法が開示されている（例えば、特許文献２参照。）。
【特許文献１】特開２００６−０７９３４７号公報
【特許文献２】特開２００７−０７９９１６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記の方式では、プログラムに含まれる変数を符号化することにより、データ・ロジックの双方の解析を難しくできるが、同一の入力に対し、符号化された変数の値は同一となるため、十分な安全性を実現できないという問題がある。
【０００６】
そこで、本発明は、上述の課題に鑑みてなされたものであり、十分な安全性を実現するプログラム難読化装置、プログラム難読化方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、上述の課題を解決するために、以下の事項を提案している。
【００１２】
（１）本発明は、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択する第１の選択手段と、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する第２の選択手段と、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する行列生成手段と、所定の演算式を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する第１の算出手段と、該算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出する第２の算出手段と、プログラムにおいて、代入命令を、第１の算出手段で算出した各符号化式で置換する第１の置換手段と、プログラムにおいて、右辺にある変数を、第２の算出手段で算出した各復号式で置換する第２の置換手段と、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する削除手段と、プログラムにおいて、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する宣言追加手段と、プログラムにおいて、各変数に乱数を設定するための命令を追加する命令追加手段と、を備えたことを特徴とするプログラム難読化装置を提案している。
【００１３】
この発明によれば、第１の選択手段は、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択する。第２の選択手段は、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する。行列生成手段は、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する。第１の算出手段は、所定の演算式を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する。第２の算出手段は、算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出する。第１の置換手段は、プログラムにおいて、代入命令を、第１の算出手段で算出した各符号化式で置換する。第２の置換手段は、プログラムにおいて、右辺にある変数を、第２の算出手段で算出した各復号式で置換する。削除手段は、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する。宣言追加手段は、プログラムにおいて、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する。命令追加手段は、プログラムにおいて、各変数に乱数を設定するための命令を追加する。したがって、実際にメモリ上に展開される値を、乱数でマスクをすることで、同一の入力に対する符号化変数の値を、実行ごとに変えることができる。このため、高い安全性を実現できる。
【００１４】
（２）本発明は、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択する第１の選択手段と、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する第２の選択手段と、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する行列生成手段と、所定の演算式を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する第１の算出手段と、該算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出する第２の算出手段と、プログラムにおいて、代入命令を、第１の算出手段で算出した各符号化式で置換する第１の置換手段と、プログラムにおいて、右辺にある変数を、第２の算出手段で算出した各復号式で置換する第２の置換手段と、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する削除手段と、プログラムにおいて、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する宣言追加手段と、プログラムにおいて、各変数に乱数を設定するための命令を追加する命令追加手段と、を備えたことを特徴とするプログラム難読化装置を提案している。
【００１５】
この発明によれば、第１の選択手段は、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択する。第２の選択手段は、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する。行列生成手段は、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する。第１の算出手段は、所定の演算式を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する。第２の算出手段は、算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出する。第１の置換手段は、プログラムにおいて、代入命令を、第１の算出手段で算出した各符号化式で置換する。第２の置換手段は、プログラムにおいて、右辺にある変数を、第２の算出手段で算出した各復号式で置換する。削除手段は、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する。宣言追加手段は、プログラムにおいて、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する。命令追加手段は、プログラムにおいて、各変数に乱数を設定するための命令を追加する。したがって、機密性が高いデータを処理するプログラムの保護に適するとともに、符号化された変数にマスクを施すため、直接、メモリ上に展開される値を保護できる。このため、実行回数が多いプログラムの保護に適する。
【００１６】
（３）本発明は、第１の選択手段、第２の選択手段、行列生成手段、第１の算出手段、第２の算出手段、第１の置換手段、第２の置換手段、削除手段、宣言追加手段、および命令追加手段を備えるプログラム難読化装置におけるプログラムの難読化方法であって、前記第１の選択手段が、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択する第１のステップと、前記第２の選択手段が、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する第２のステップと、前記行列生成手段が、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する第３のステップと、前記第１の算出手段が、所定の演算式を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する第４のステップと、前記第２の算出手段が、該算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出する第５のステップと、前記第１の置換手段が、プログラムにおいて、代入命令を、算出した各符号化式で置換する第６のステップと、前記第２の置換手段が、プログラムにおいて、右辺にある変数を、算出した各復号式で置換する第７のステップと、前記削除手段が、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する第８のステップと、前記宣言追加手段が、プログラムにおいて、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する第９のステップと、前記命令追加手段が、プログラムにおいて、各変数に乱数を設定するための命令を追加する第１０のステップと、を備えたことを特徴とするプログラムの難読化方法を提案している。
【００１７】
この発明によれば、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択し、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する。次に、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成し、所定の演算式を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する。さらに、算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出し、プログラムにおいて、代入命令を、各符号化式で置換するとともに、右辺にある変数を、各復号式で置換する。そして、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除し、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加し、プログラムにおいて、各変数に乱数を設定するための命令を追加する。したがって、実際にメモリ上に展開される値を、乱数でマスクをすることで、同一の入力に対する符号化変数の値を、実行ごとに変えることができる。このため、高い安全性を実現できる。
【００１８】
（４）本発明は、第１の選択手段、第２の選択手段、行列生成手段、第１の算出手段、第２の算出手段、第１の置換手段、第２の置換手段、削除手段、宣言追加手段、および命令追加手段を備えるプログラム難読化装置におけるプログラムの難読化方法であって、前記第１の選択手段が、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択する第１のステップと、前記第２の選択手段が、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する第２のステップと、前記行列生成手段が、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する第３のステップと、前記第１の算出手段が、所定の演算式を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する第４のステップと、前記第２の算出手段が、該算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出する第５のステップと、前記第１の置換手段が、プログラムにおいて、代入命令を、算出した各符号化式で置換する第６のステップと、前記第２の置換手段が、プログラムにおいて、右辺にある変数を、算出した各復号式で置換する第７のステップと、前記削除手段が、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する第８のステップと、前記宣言追加手段が、プログラムにおいて、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する第９のステップと、前記命令追加手段が、プログラムにおいて、各変数に乱数を設定するための命令を追加する第１０のステップと、を備えたことを特徴とするプログラムの難読化方法を提案している。
【００１９】
この発明によれば、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択し、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する。次に、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成し、所定の演算式を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する。さらに、算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出し、プログラムにおいて、代入命令を、各符号化式で置換するとともに、右辺にある変数を、各復号式で置換する。そして、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除し、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加し、プログラムにおいて、各変数に乱数を設定するための命令を追加する。したがって、機密性が高いデータを処理するプログラムの保護に適するとともに、符号化された変数にマスクを施すため、直接、メモリ上に展開される値を保護できる。このため、実行回数が多いプログラムの保護に適する。
【００２０】
（５）本発明は、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択する第１のステップと、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する第２のステップと、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する第３のステップと、所定の演算式を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する第４のステップと、該算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出する第５のステップと、プログラムにおいて、代入命令を、算出した各符号化式で置換する第６のステップと、プログラムにおいて、右辺にある変数を、算出した各復号式で置換する第７のステップと、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する第８のステップと、プログラムにおいて、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する第９のステップと、プログラムにおいて、各変数に乱数を設定するための命令を追加する第１０のステップと、をコンピュータに実行させるためのプログラムを提案している。
【００２１】
この発明によれば、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択し、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する。次に、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成し、所定の演算式を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する。さらに、算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出し、プログラムにおいて、代入命令を、各符号化式で置換するとともに、右辺にある変数を、各復号式で置換する。そして、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除し、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加し、プログラムにおいて、各変数に乱数を設定するための命令を追加する。したがって、実際にメモリ上に展開される値を、乱数でマスクをすることで、同一の入力に対する符号化変数の値を、実行ごとに変えることができる。このため、高い安全性を実現できる。
【００２２】
（６）本発明は、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択する第１のステップと、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する第２のステップと、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する第３のステップと、所定の演算式を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する第４のステップと、該算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出する第５のステップと、プログラムにおいて、代入命令を、算出した各符号化式で置換する第６のステップと、プログラムにおいて、右辺にある変数を、算出した各復号式で置換する第７のステップと、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する第８のステップと、プログラムにおいて、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する第９のステップと、プログラムにおいて、各変数に乱数を設定するための命令を追加する第１０のステップと、をコンピュータに実行させるためのプログラムを提案している。
【００２３】
この発明によれば、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択し、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する。次に、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成し、所定の演算式を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する。さらに、算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）を算出し、プログラムにおいて、代入命令を、各符号化式で置換するとともに、右辺にある変数を、各復号式で置換する。そして、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除し、符号化された変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加し、プログラムにおいて、各変数に乱数を設定するための命令を追加する。したがって、機密性が高いデータを処理するプログラムの保護に適するとともに、符号化された変数にマスクを施すため、直接、メモリ上に展開される値を保護できる。このため、実行回数が多いプログラムの保護に適する。
【発明の効果】
【００２４】
本発明によれば、符号化された変数にマスクを施すため、直接、メモリ上に展開される値の解析を難しくできる。このため、実行回数が多いプログラムの保護に適しているという効果がある。また、機密性が高いデータを処理するプログラムの保護に適するという効果がある。
【発明を実施するための最良の形態】
【００２５】
以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
【００２６】
＜第１の実施形態＞
以下、図１および図２を用いて、本発明の第１の実施形態について説明する。
【００２７】
＜プログラム難読化装置の構成＞
図１を用いて、プログラム難読化装置の構成について説明する。
図１に示すように、本実施形態に係るプログラム難読化装置は、選択部１と、行列生成部２と、算出部３と、置換部４と、宣言削除部５と、宣言追加部６と、命令追加部７と、制御部８とから構成されている。
【００２８】
選択部１は、符号化の対象となるｎ個（ｎ；正の整数）の変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎを選択するとともに、符号化後の変数の個数ｍ（ｍ；ｍ≧ｎの正の整数）を選択する。ここで、符号化された変数（符号化変数）は、ｙ＿１、ｙ＿２、・・・、ｙ＿ｍとなる。
【００２９】
行列生成部２は、ｍ行ｎ列のブール行列Ａおよびｍ次元の行列ｂ＝[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]＾Ｔ（Ｔ；ベクトルの転置）を任意に生成する。ただし、ブール行列Ａは、ｒａｎｋ（Ａ）＝ｎを満たすものとする。
【００３０】
算出部３は、数１にしめす演算式を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する。この各符号化式には、乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎが含まれる。これにより、高い機密性を得ることができる。
【００３１】
【数１】
0005149062.tif 000002
【００３２】
また、算出部３は、上記で算出した符号化式をｘ＿ｎの連立方程式として、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、 ｙ＿２、・・・、ｙ＿ｍ）を算出する。この各復号式にも、乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎが含まれる。これにより、高い機密性を得ることができる。
【００３３】
置換部４は、プログラムにおいて、左辺にある変数を、算出部３で算出した符号化式で置換する。具体的には、代入命令 ｘ＿ｉ＝ｅ (ｅは、定数もしくは関数)を、以下の命令列に置き換える。
ｙ＿１＝ｆ＿１（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）｜ｘ＿ｉ＝ｅ
ｙ＿２＝ｆ＿２（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）｜ｘ＿ｉ＝ｅ
・
・
・  
ｙ＿ｍ＝ｆ＿ｍ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）｜ｘ＿ｉ＝ｅ
ただし、ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）｜ｘ＿ｉ＝ｅは、符号化式ｆ＿ｊにおいて、ｘ＿ｉをｅに置換した式である。
【００３４】
また、置換部４は、右辺にある変数を、算出部３で算出した各復号式で置換する。具体的には、参照されている変数ｘ＿ｉを復号式ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）で置き換える。
【００３５】
宣言削除部５は、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除する。宣言追加部６は、プログラムにおいて、符号化された変数ｙ＿１、 ｙ＿２、・・・、ｙ＿ｍおよび乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する。命令追加部７は、プログラムにおいて、各変数に乱数を設定するための命令を追加する。
【００３６】
制御部８は、図示しない記憶手段に格納された制御プログラムに応じて、装置全体を制御する。
【００３７】
＜プログラム難読化装置の処理＞
次に、図２を用いて、プログラム難読化装置の処理について説明する。
【００３８】
まず、符号化の対象となるn個（nは正の整数）の変数を選択する（ステップＳ１０１）。ここで選択した変数をｘ＿１、ｘ＿２、・・・、ｘ＿ｎとする。
【００３９】
次に、符号化後の変数の個数ｍ（ｍはｎ以上の正の整数）を選択する（ステップＳ１０２）。ここで、符号化された変数（符号化変数）は、ｙ＿１、ｙ＿２、・・・、ｙ＿ｍとなる。
【００４０】
ｍ行ｎ列のブール行列Ａ、および、ｍ次元の行列ｂ=[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]^Ｔ（Ｔはベクトルの転置を意味する）を任意に生成する（ステップＳ１０３）。ただし、ブール行列Ａは、ｒａｎｋ（Ａ）＝ｎを満たすものとする。
【００４１】
次に、下記の数２の式の各行を取り出す（ステップＳ１０４）。この結果、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）が得られる。各符号化式には、乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎが含まれる。
【００４２】
【数２】
0005149062.tif 000003
【００４３】
上記ステップＳ１０４で得られた符号化式を、ｘ＿ｎに対する連立方程式だとみなし、解く（ステップＳ１０５）。この結果、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、 ｙ＿２、・・・、ｙ＿ｍ）が得られる。なお、この各復号式にも、乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎが含まれる。
【００４４】
そして、プログラム中において、左辺に現れる変数を、符号化変数で置き換える（ステップＳ１０６）。具体的には、代入命令 ｘ＿ｉ＝ｅ (eは、定数もしくは関数)を、以下の命令列に置き換える。
ｙ＿１＝ｆ＿１（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）｜ｘ＿ｉ＝ｅ
ｙ＿２＝ｆ＿２（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）｜ｘ＿ｉ＝ｅ
・
・
・  
ｙ＿ｍ＝ｆ＿ｍ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）｜ｘ＿ｉ＝ｅ
ただし、ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）｜ｘ＿ｉ＝ｅは、符号化式ｆ＿ｊにおいて、ｘ＿ｉをｅに置換した式である。
【００４５】
さらに、プログラム中において、右辺に現れる変数を、符号化変数で置き換える（ステップＳ１０７）。具体的には、参照されている変数ｘ＿ｉを復号式ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）で置き換える。
【００４６】
そして、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除し（ステップＳ１０８）、また、変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する（ステップＳ１０９）。最後に、各変数に乱数を設定するための命令を追加する（ステップＳ１１０）。
【００４７】
したがって、本実施形態によれば、変数の値そのものにマスクを施すため、機密性が高いデータを処理するプログラムの保護をさらに高めることができる。
【００４８】
＜第２の実施形態＞
以下、図３および図４を用いて、本発明の第２の実施形態について説明する。
【００４９】
＜プログラム難読化装置の構成＞
図３を用いて、プログラム難読化装置の構成について説明する。
図３に示すように、本実施形態に係るプログラム難読化装置は、選択部１と、行列生成部２と、算出部１３と、置換部４と、宣言削除部５と、宣言追加部６と、命令追加部７と、制御部８とから構成されている。なお、第１の実施形態と同一の符号を付す構成要素については、同一の機能を有することから、その詳細な説明は、省略する。
【００５０】
算出部３は、数３にしめす演算式を演算して、各行を取り出して、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）を算出する。この各符号化式には、乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎおよびＲ＿１、Ｒ＿２、・・・、Ｒ＿ｍが含まれる。これにより、高い機密性を得ることができる。
【００５１】
【数３】
0005149062.tif 000004
【００５２】
＜プログラム難読化装置の処理＞
次に、図４を用いて、プログラム難読化装置の処理について説明する。
【００５３】
まず、符号化の対象となるn個（nは正の整数）の変数を選択する（ステップＳ２０１）。ここで選択した変数をｘ＿１、ｘ＿２、・・・、ｘ＿ｎとする。
【００５４】
次に、符号化後の変数の個数ｍ（ｍはｎ以上の正の整数）を選択する（ステップＳ２０２）。ここで、符号化された変数（符号化変数）は、ｙ＿１、ｙ＿２、・・・、ｙ＿ｍとなる。
【００５５】
ｍ行ｎ列のブール行列Ａ、および、ｍ次元の行列ｂ=[ｂ＿１、ｂ＿２、・・・、ｂ＿ｍ]^Ｔ（Ｔはベクトルの転置を意味する）を任意に生成する（ステップＳ２０３）。ただし、ブール行列Ａは、ｒａｎｋ（Ａ）＝ｎを満たすものとする。
【００５６】
次に、下記の数４の式の各行を取り出す（ステップＳ２０４）。この結果、符号化式ｙ＿ｊ＝ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）が得られる。各符号化式には、乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎおよびＲ＿１、Ｒ＿２、・・・、Ｒ＿ｍが含まれる。
【００５７】
【数４】
0005149062.tif 000005
【００５８】
上記ステップＳ２０４で得られた符号化式を、ｘ＿ｎに対する連立方程式だとみなし、解く（ステップＳ２０５）。この結果、復号式ｘ＿ｉ＝ｇ＿ｉ（ｙ＿１、 ｙ＿２、・・・、ｙ＿ｍ）が得られる。なお、この各復号式にも、乱数を格納する変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎが含まれる。
【００５９】
そして、プログラム中において、左辺に現れる変数を、符号化変数で置き換える（ステップＳ２０６）。具体的には、代入命令 ｘ＿ｉ＝ｅ (eは、定数もしくは関数)を、以下の命令列に置き換える。
ｙ＿１＝ｆ＿１（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）｜ｘ＿ｉ＝ｅ
ｙ＿２＝ｆ＿２（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）｜ｘ＿ｉ＝ｅ
・
・
・  
ｙ＿ｍ＝ｆ＿ｍ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）｜ｘ＿ｉ＝ｅ
ただし、ｆ＿ｊ（ｘ＿１、ｘ＿２、・・・、ｘ＿ｎ）｜ｘ＿ｉ＝ｅは、符号化式ｆ＿ｊにおいて、ｘ＿ｉをｅに置換した式である。
【００６０】
さらに、プログラム中において、右辺に現れる変数を、符号化変数で置き換える（ステップＳ２０７）。具体的には、参照されている変数ｘ＿ｉを復号式ｇ＿ｉ（ｙ＿１、ｙ＿２、・・・、ｙ＿ｍ）で置き換える。
【００６１】
そして、プログラムにおいて、変数ｘ＿１、ｘ＿２、・・・、ｘ＿ｎの宣言を削除し（ステップＳ２０８）、また、変数ｙ＿１、ｙ＿２、・・・、ｙ＿ｍおよび変数ｒ＿１、ｒ＿２、・・・、ｒ＿ｎの宣言を追加する（ステップＳ２０９）。最後に、各変数に乱数を設定するための命令を追加する（ステップＳ２１０）。
【００６２】
したがって、本実施形態によれば、機密性が高いデータを処理するプログラムの保護に適するとともに、符号化された変数にマスクを施すため、直接、メモリ上に展開される値を保護できる。このため、実行回数が多いプログラムの保護に適する。
【００６３】
なお、プログラム難読化装置の処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムをプログラム難読化装置に読み込ませ、実行することによって本発明のプログラム難読化装置を実現することができる。ここでいうコンピュータシステムとは、ＯＳや周辺装置等のハードウェアを含む。
【００６４】
また、「コンピュータシステム」は、ＷＷＷ（Ｗｏｒｌｄ  Ｗｉｄｅ  Ｗｅｂ）システムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
【００６５】
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【００６６】
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【図面の簡単な説明】
【００６７】
【図１】第１の実施形態に係るプログラム難読化装置の構成図である。
【図２】第１の実施形態に係るプログラム難読化装置の処理フローである。
【図３】第２の実施形態に係るプログラム難読化装置の構成図である。
【図４】第２の実施形態に係るプログラム難読化装置の処理フローである。
【符号の説明】
【００６８】
１・・・選択部
２・・・行列生成部
３、１３・・・算出部
４・・・置換部
５・・・宣言削除部
６・・・宣言追加部
７・・・命令追加部
８・・・制御部
【図１】
0005149062.tif 000012
【図２】
0005149062.tif 000013
【図３】
0005149062.tif 000014
【図４】
0005149062.tif 000015