明 細 書
プログラム変換装置、セキュア処理装置、コンピュータプログラム及び記 録媒体
技術分野
[0001] 本発明は、秘密情報を扱うプログラムをコンピュータシステム上で実行させる際の機 密性を向上させる技術に関する。
背景技術
[0002] 近年、コンピュータシステムに関し、デバッガや ICE (In— Circuit Emulator、登 録商標)等のプログラム解析ツールの機能が充実し、これらツールを用いたプロダラ ムの解析および改変が容易になって!/、る。
機密保護を強化するための技術として、例えば、プログラムを分割して暗号ィ匕して おき、実行時に必要な部分のみを復号して実行することで平文プログラムの収集およ びプログラムの解析を困難にする方法や、特許文献 1に記載のように、暗号化計算を 並列に実行できるように分割し、解析を分かりにくくする方法が提案されている。 特許文献 1 :特表 2002— 536911号公報
発明の開示
発明が解決しょうとする課題
[0003] し力しながら、秘密情報を用いて暗号ィ匕データを復号するようなプログラムについて 、上述のようにプログラムを分割、暗号ィ匕しても、実行時には当該プログラムは復元さ れ、復号鍵等の秘密情報がプログラム実行中にメモリ上に現れてしまうので、解析ッ ールによってメモリ上の前記秘密情報が取得されてしまう可能性がある。
上記の問題に鑑み、本発明は、秘密情報を用いて暗号化データを復号するような プログラムを、当該秘密情報をメモリ上に表すことなく実行できるようにし、プログラム 実行時の機密性を向上させるプログラム変換装置を提供することを目的とする。 課題を解決するための手段
[0004] 上記課題を解決するために、本発明は、プログラム変換装置であって、被演算情報 に対して秘密情報を用いた演算を行う秘密演算命令を含む原プログラムを記憶する
プログラム記憶手段と、前記秘密情報と所定の結合演算とを用いて、前記結合演算 を施すと前記秘密情報が得られるような複数の分割秘密情報を生成する分割秘密情 報生成手段と、それぞれの前記分割秘密情報について、前記被演算情報と当該分 割秘密情報とを用いた分割演算を行う分割演算命令を生成する分割演算命令生成 手段と、前記分割演算命令の処理の結果を前記結合演算を用いて結合することによ つて前記秘密演算命令と同一の結果を算出する結合命令を生成する結合命令生成 手段と、前記原プログラムにおける前記秘密演算命令を前記分割演算命令と前記結 合命令とに置き換える置き換え手段とを備える。
発明の効果
[0005] 本発明のプログラム変換装置は、上述の構成を備えることにより、原プログラムにお ける前記演算において、前記秘密情報を用いる代わりに、複数の前記分割秘密情報 を用い、かつ、原プログラムと比べ実行結果が同じとなるプログラムを生成することが できる。
よって、生成されたプログラムを、コンピュータシステム上で実行した場合には、前 記秘密情報がメモリ上に現れることがな!、ので、前記秘密情報の漏洩を防ぐことがで き、プログラムの機密性を向上させることができる。
[0006] また、偶然に分割秘密情報が秘密情報と同じ値である場合であっても、他の分割 秘密情報についても同様の演算が行われることとなるので、その分割秘密情報が秘 密情報と同じ値であることを分力りに《することができる。
また、前記結合演算は、ビット毎の自己双対関数による演算であることとしてもよい。 また、前記結合演算は、入力ビット値が全て 0の時は 0を出力し、入力ビット値が全 て 1である場合には 1を出力する演算であることとしてもよい。
[0007] この構成によれば、原プログラムにおける前記演算において、前記秘密情報を用い る代わりに、複数の前記分割秘密情報を用い、かつ、原プログラムと比べ実行結果が 同じとなるプログラムを生成することができる。
よって、生成されたプログラムを、コンピュータシステム上で実行した場合には、前 記秘密情報がメモリ上に現れることがな!、ので、前記秘密情報の漏洩を防ぐことがで き、プログラムの機密性を向上させることができる。
[0008] また、偶然に分割秘密情報が秘密情報と同じ値である場合であっても、他の分割 秘密情報についても同様の演算が行われることとなるので、その分割秘密情報が秘 密情報と同じ値であることを分力りに《することができる。
ここで、自己双対関数とは、 n (nは 2以上の自然数)個の変数 xl、x2、 xnを 入力とする n変数入力関数 f (xl, x2, · · · , xn)であって、〜 f (xl, x2, · · · , xn) =f ( 〜xl,〜x2, · · · ,〜xn)を満たす、即ち、関数 fに与える各入力値を全て否定 (NO T)した場合に、出力が、元の入力値に対する出力値の否定 (NOT)となるものである 。ただし、「〜」は否定を表す記号である。また、条件として f (0, 0, · ··, 0) =0かっ 1, 1, · ··, 1) = 1を満たすものとする。
[0009] また、前記秘密演算命令が行う演算は、ビット毎の論理演算であり、前記分割演算 は、前記秘密演算命令が行う演算と同一の演算であり、前記結合命令は、前記結合 演算と同一の演算を行う命令であることとしてもよい。
この構成によれば、原プログラムにおける前記秘密演算命令が行う演算であるビッ ト毎の論理演算について、前記秘密情報を用いる代わりに、複数の前記分割秘密情 報を用い、かつ、原プログラムと比べ実行結果が同じとなるプログラムを生成すること ができる。
[0010] また、前記秘密演算命令が行う演算は、前記被演算情報と前記秘密情報との同ビ ット桁毎の演算であり、前記分割秘密情報生成手段は、前記秘密情報のビット桁そ れぞれについて、当該ビット桁に対する自己双対関数の逆演算の結果である複数の ビット値を生成し、生成した複数のビット値それぞれを、複数の分割秘密情報の当該 ビット桁に割り当て、前記分割演算命令は、前記被演算情報と前記分割秘密情報の 同ビット桁毎に前記演算を行う命令であり、前記結合命令は、前記分割演算それぞ れにより算出される複数の結果について、同ビット桁のビット値に前記自己双対関数 を施し、その結果を当該ビット桁のビット値とすることにより、前記結合を行う命令であ ることとしてちよい。
[0011] この構成によれば、原プログラムにおける前記秘密演算命令が行う演算であるビッ ト毎の演算について、前記秘密情報を用いる代わりに、複数の前記分割秘密情報を 用い、かつ、原プログラムと比べ実行結果が同じとなるプログラムを生成することがで
きる。
ここで、自己双対関数の逆演算とは、演算対象であるデータ Xに対して、 X=f (xl, x2, · · · , xn)を満たす χ1、χ2 · · ·χηを算出して出力する演算をいう。また、 X=f (xl , x2, · · · , xn)を満たす (xl、 χ2 · · ·χη)の組力 複数存在する場合、これらの組か らランダムに 1の組を選出する。
[0012] また、前記自己双対関数は、複数の入力値のうち、過半数を占める入力値を出力 する多数決関数であり、前記分割秘密情報生成手段は、自己双対関数に係る複数 の入力値と、対応する出力値との対応表を予め保持しており、前記秘密情報のビット 桁それぞれについて、当該ビット桁のビット値と同値の出力値に対応する複数の入力 値を前記対応表から読み出し、前記複数の入力値を、前記複数の分割秘密情報そ れぞれの当該ビット桁のビット値とすることとしてもよい。
[0013] この構成によれば、前記分割秘密情報生成手段は、多数決の結果値が予め分か つて 、る場合に、多数決の結果が前記結果値となるような複数の値を決定することが できる。また、決定された複数の前記値それぞれを、複数の前記分割秘密情報の同 ビット桁に割り当てて 、るので、それぞれが前記秘密情報力 推定されにく 、複数の 分割秘密情報を生成することができる。
[0014] また、前記プログラム変換装置は、さらに、異なる複数の自己双対関数を記憶して いる演算記憶手段を含み、前記分割秘密情報生成手段は、前記結合演算として、前 記演算記憶手段に記憶された自己双対関数力 ランダムに自己双対関数を選出す ることとしてちよい。
この構成によれば、前記プログラム変換装置は、複数のうちから選出した自己双対 関数を使用したプログラムを生成することができるので、不正な解析をさらに困難にさ せることができ、プログラムの機密性を向上させることができる。
[0015] また、前記置き換え手段は、更に、それぞれの前記分割演算命令と、前記結合演 算命令とを、プログラムの実行結果に影響を及ぼさな 、範囲で並び替えることとして ちょい。
また、前記置き換え手段は、更に、並び替えられた各演算の配置を、プログラムの 実行結果に影響を及ぼさな 、範囲で分散させることとしてもよ!/、。
また、前記置き換え手段は、更に、プログラムの実行結果に影響を及ぼさない範囲 で、ダミーの演算処理を追加することとしてもよい。
[0016] この構成によれば、原プログラムにおける秘密演算が行われていた箇所と比べて、 複数の箇所に処理が拡散したプログラムを生成するので、さらに、不正な解析を困難 にし、プログラムの機密性を向上させることができる。
本発明のプログラム変換方法は、被演算情報に対して秘密情報を用いた演算を行 う秘密演算命令を含む原プログラムを変換するプログラム変換方法であって、前記秘 密情報と所定の結合演算とを用いて、前記結合演算を施すと前記秘密情報が得ら れるような複数の分割秘密情報を生成する分割秘密情報生成ステップと、それぞれ の前記分割秘密情報につ!、て、前記被演算情報と当該分割秘密情報とを用いた分 割演算を行う分割演算命令を生成する分割演算命令生成ステップと、前記分割演算 命令の処理の結果を前記結合演算を用いて結合することによって前記秘密演算命 令と同一の結果を算出する結合命令を生成する結合命令生成ステップと、前記原プ ログラムにおける前記秘密演算命令を前記分割演算命令と前記結合命令とに置き換 える置き換えステップとを含む。
[0017] 本発明のコンピュータプログラムは、被演算情報に対して秘密情報を用いた演算を 行う秘密演算命令を含む原プログラムを変換するプログラム変換装置に用いられるコ ンピュータプログラムであって、前記秘密情報と所定の結合演算とを用いて、前記結 合演算を施すと前記秘密情報が得られるような複数の分割秘密情報を生成する分割 秘密情報生成ステップと、それぞれの前記分割秘密情報について、前記被演算情 報と当該分割秘密情報とを用いた分割演算を行う分割演算命令を生成する分割演 算命令生成ステップと、前記分割演算命令の処理の結果を前記結合演算を用いて 結合することによって前記秘密演算命令と同一の結果を算出する結合命令を生成す る結合命令生成ステップと、前記原プログラムにおける前記秘密演算命令を前記分 割演算命令と前記結合命令とに置き換える置き換えステップとを含む。
[0018] 本発明の集積回路は、被演算情報に対して秘密情報を用いた演算を行う秘密演 算命令を含む原プログラムを変換するプログラム変換装置に用いられる集積回路で あって、前記秘密情報と所定の結合演算とを用いて、前記結合演算を施すと前記秘
密情報が得られるような複数の分割秘密情報を生成する分割秘密情報生成手段と、 それぞれの前記分割秘密情報につ ヽて、前記被演算情報と当該分割秘密情報とを 用いた分割演算を行う分割演算命令を生成する分割演算命令生成手段と、前記分 割演算命令の処理の結果を前記結合演算を用いて結合することによって前記秘密 演算命令と同一の結果を算出する結合命令を生成する結合命令生成手段と、前記 原プログラムにおける前記秘密演算命令を前記分割演算命令と前記結合命令とに 置き換える置き換え手段とを備える。
[0019] 本発明の記録媒体は、被演算情報に対して秘密情報を用いた演算を行う秘密演 算命令を含む原プログラムを変換するプログラム変換装置に用いられるコンピュータ プログラムを記憶するコンピュータ読み取り可能な記録媒体であって、前記コンビュ ータプログラムは、前記秘密情報と所定の結合演算とを用いて、前記結合演算を施 すと前記秘密情報が得られるような複数の分割秘密情報を生成する分割秘密情報 生成ステップと、それぞれの前記分割秘密情報について、前記被演算情報と当該分 割秘密情報とを用いた分割演算を行う分割演算命令を生成する分割演算命令生成 ステップと、前記分割演算命令の処理の結果を前記結合演算を用いて結合すること によって前記秘密演算命令と同一の結果を算出する結合命令を生成する結合命令 生成ステップと、前記原プログラムにおける前記秘密演算命令を前記分割演算命令 と前記結合命令とに置き換える置き換えステップとを含む。
[0020] この構成によれば、原プログラムにおける前記演算において、前記秘密情報を用い る代わりに、複数の前記分割秘密情報を用い、かつ、原プログラムと比べ実行結果が 同じとなるプログラムを生成することができる。
よって、生成されたプログラムを、コンピュータシステム上で実行した場合には、前 記秘密情報カ モリ上に現れることがないので、秘密情報の漏洩を防ぐことができ、 プログラムの機密性を向上させることができる。
[0021] また、偶然に分割秘密情報が秘密情報と同じ値である場合であっても、他の分割 秘密情報についても同様の演算が行われることとなるので、その分割秘密情報が秘 密情報と同じ値であることを分力りに《することができる。
本発明のセキュア処理装置は、被演算情報を保持する被演算情報保持手段と、複
数の分割秘密情報を保持する分割秘密情報保持手段と、前記複数の分割秘密情報 を結合する結合演算を示す結合演算式を保持する結合演算式保持手段と、前記複 数の分割秘密情報それぞれにつ!、て、前記被演算情報に対して当該分割秘密情報 を用いた第 1演算である分割演算を施す分割演算手段と、前記複数の分割演算の 結果を前記結合演算を用いて結合する結合手段とを備え、前記結合手段は、前記 複数の分割秘密情報を前記結合演算により結合すると得られる秘密情報を用いて前 記被演算情報に対して第 2演算を施した結果と同一となるよう、前記分割演算の結果 を前記結合演算を用いて結合する。
[0022] 本発明のコンピュータプログラムは、被演算情報と、複数の分割秘密情報と、前記 複数の分割秘密情報を結合可能な結合演算式とを備え、前記複数の分割秘密情報 それぞれについて、前記被演算情報に対して当該分割秘密情報を用いた第 1演算 である分割演算を施す分割演算ステップと、前記複数の分割演算ステップの結果を 前記結合演算を用いて結合する結合ステップとを有し、前記結合ステップは、前記複 数の分散秘密情報を前記結合演算により結合すると得られる秘密情報を用いて前記 被演算情報に対して第 2演算を施した結果と同一となるよう、前記分散演算ステップ の結果を前記結合演算を用いて結合する。
[0023] また、前記第 1演算と、前記第 2演算は、同じ演算であることとしてもよい。
この構成によれば、前記秘密情報を用いた演算の代わりに、複数の前記分割秘密 情報を用いた演算によって、前記秘密情報を用いた演算と同じ実行結果を得ること ができる。
よって、前記秘密情報がメモリ上に現れることがないので、秘密情報の漏洩を防ぐこ とができ、機密性を向上させることができる。
[0024] また、偶然に分割秘密情報が秘密情報と同じ値である場合であっても、他の分割 秘密情報についても同様の演算が行われることとなるので、その分割秘密情報が秘 密情報と同じ値であることを分力りに《することができる。
図面の簡単な説明
[0025] [図 1]本発明のプログラム変換装置が扱うプログラムの一例を示す図である。
[図 2]本発明の一実施形態に係る実行プログラム生成装置の内部構成を示すブロッ
ク図である。
圆 3]自己双対関数の一例を示す図である。
[図 4]自己双対関数の一例を示す図である。
[図 5]自己双対関数の一例を示す図である。
[図 6]分割秘密情報の生成処理を示すフローチャートである。
[図 7]プログラム変換処理を示すフローチャートである。
[図 8]本発明のプログラム変換装置が扱うプログラムの一例を示す図である。
圆 9]本発明の一実施形態に係る実行プログラム生成装置の内部構成を示すブロッ ク図である。
[図 10]関数 func ()の処理手順を示すフローチャートである。
[図 11]変形例に係る情報処理実行装置の構成を示すブロック図である。
符号の説明
10 実行プログラム生成装置
11 入力部
13 プログラム保持部
13 変換プログラム生成部
14 実行プログラム生成部
101 秘密演算指定部
102 分割秘密情報生成部
103 プログラム取得部
104 分割数指定部
105 結合関数保持部
106 プログラム変換部
107 結合関数生成部
1101 秘密演算指定部
1107 結合関数生成部
1106 プログラム変換部
1300 変換プログラム生成部
発明を実施するための最良の形態
[0027] <第 1実施形態 >
<概要 >
本発明の一実施形態に係る実行プログラム生成装置は、ユーザが作成した、暗号 化データを復号鍵を用いて復号するような秘匿性の要求される処理を含むプロダラ ムに対し、実行時に前記復号鍵力 Sメモリに現れないようにするなど秘匿性を向上させ る変換処理を行い、前記変換処理後のプログラムをコンパイルして、不正解析が困 難な実行プログラムを生成するものである。
[0028] ユーザが作成するプログラムは、一例として、暗号化された音楽データやビデオデ ータなどのコンテンツを、秘密情報である復号鍵を用いて復号し、再生するプレーヤ プログラムであり、図 1に示すプログラム 601のように、 C言語など所定のプログラム言 語の仕様に基づき作成される。
以下、プログラム 601を例にして説明を続ける。
[0029] プログラム 601は、複数行のテキストからなる。テキストの各行を、以下、コードという プログラム 601は、秘密情報を扱い秘匿性が要求されるコード 611「data2 = f_ xor (datal, KEY);」を含む。コード 611は、上述した暗号化データ或いはその一 部を復号し、復号結果を格納する演算の一例である。
[0030] datalは変数であって、復号される対象のデータである。
KEYは、プログラム中に埋め込まれている定数であって、データを復号するための 復号鍵である。
関数 f— xor (A, B)は、 8ビットの引数 Aと Bの各桁の排他的論理和を、戻り値の当 該桁の値とするものである。ここで、 8ビットの最下位桁力も順にビット 0、ビット 1、ビッ ト 2、… 'ビット 7と称し、変数 Xの jビット目の値を、 X:jと記載する。また、以下、 16進 数を OxYの様に記載する。 Oxはその数が 16進数であることを示す。 OxFは 10進数 の 15を示し、 OxFFは 10進数の 255を示す。
[0031] f xor (A, B)は、具体的には、引数 A、引数 Bそれぞれのビット 0について、排他
的論理和 (XOR)を算出して、算出結果を戻り値のビット 0とし、引数 A、引数 Bそれぞ れのビット 1について、 XORを算出して、算出結果を戻り値のビット 1とし、ビット 2〜ビ ット 7までについても同様の処理を行うことで、 8ビットの戻り値を計算する。例えば、 d atal = Ox03、 KEY=Ox03の場合であれば、 f_xor(datal, KEY)の戻り値は、 0 xOOとなる。
[0032] ここで、 f— xor (A, B)の引数 A、 Bの各桁を独立に排他的論理和処理するもので あるので、 A、 Bは 8ビット以外の、例えば、 1024ビット、 2048ビット等であってもよく、 この場合も 1024ビット、 2048ビット等の各桁についての排他的論理和の算出結果を 連結すればよい。また、引数 A, Bが 1ビット長である、即ち datalと KEYが共に 1ビッ ト長である場合は、コード 611は、「data2 = datal " KEY;」と同じである。ここ で、「'」は、 XORを示す演算子である。
[0033] また、 A、 Bが 2ビット長であれば、 data2 = f— xor (datal, KEY)は、下記の 2つの 式による処理がプログラム 601に記載されているのと同じとなる。
data2 : l = datal : 1 " KEY: 1 ;
data2 : 0 = datal : 0 " KEY: 0 ;
プログラム 601をそのままコンパイルして実行プログラムを生成し、コンピュータ上で 実行すると、実行プログラムのコード 611に該当する部分をコンピュータが実行する 際に、メモリ上に、復号鍵 KEYが現れてしまうので、デバッガや ICE (In— Circuit Emulator,登録商標)のような解析ツールで実行プログラムを実行中のメモリ上のデ ータを解析すると、復号鍵 KEYの即値を得ることが出来てしまう。
[0034] 本発明の実行プログラム生成装置は、プログラム 601から、一例として図 1に示すよ うなプログラム 605をー且生成し、プログラム 605をコンパイルして実行プログラムを 生成する。
プログラム 605の詳細は後述する力 プログラム 601中のコード 611が、プログラム 605においては複数のコード 612、コード 613、コード 614、コード 615に分けられて おり、コード 612、コード 613、コード 614、コード 615を実行すれば、コード 611と同 内容の処理が行われる。
[0035] ユーザの作成したプログラムにおいて、前述のように、同内容の処理に変換された
プログラムを変換プログラムという。前述したプログラム 605は、変換プログラムである また、プログラム 605から生成する実行プログラムを、コンピュータ上で実行しても、 メモリ上に復号鍵 KEYの直値が現れることなく KEYを使った演算と同一の結果が得 られるので、不正解析により容易に鍵が暴露されるのを避けることができる。
<構成>
以下、本発明の一実施形態である実行プログラム生成装置 10について、図面を用 いて説明する。
[0036] 実行プログラム生成装置 10は、図 2に示すように、入力部 11と、プログラム保持部 1 2と、変換プログラム生成部 13と、実行プログラム生成部 14とを含んで構成される。 実行プログラム生成装置 10は、具体的には、マイクロプロセッサ、 ROM、 RAM、 ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成される コンピュータシステムである。前記 RAM又は前記ハードディスクユニットには、コンビ ユータプログラムが記憶されている。前記マイクロプロセッサ力 前記コンピュータプロ グラムに従って動作することにより、実行プログラム生成装置 10は、その機能を達成 する。
く入力部 11、プログラム保持部 12、実行プログラム生成部 14 >
入力部 11は、ユーザがキーボード、マウス(図示せず)などの入力装置を用いて入 力する、実行プログラム生成装置 10に対する指示を受け付けて、前記指示の内容に 応じた処理部に、前記指示を送信する。
[0037] プログラム保持部 12は、ハードディスクなどの記憶装置であり、ユーザが作成した プログラムを保持する。プログラム保持部 12は、一例としてプログラム 601を保持して いる。
実行プログラム生成部 14は、 CPU及びコンパイラ力も成り、変換プログラム生成部 13により生成された変換プログラムを、コンピュータが実行可能な実行プログラムに 変換する。
<変換プログラム生成部 13 >
変換プログラム生成部 13は、 CPU及びその制御プログラム力 成り、ユーザが作
成したプログラムを変換プログラムに変換する。
[0038] 変換プログラム生成部 13は、図 2に示すように、秘密演算指定部 101と、分割秘密 情報生成部 102と、プログラム取得部 103と、分割数指定部 104と、結合関数保持部 105と、プログラム変換部 106と、結合関数生成部 107とを含んで構成される。
(プログラム取得部 103)
プログラム取得部 103は、入力部 11から、変換すべきプログラムの取得指示を受信 すると、プログラム保持部 12から前記取得指示により示されるプログラムを読み出し て、ディスプレイ(図示せず)に表示する。ここで、前記取得指示は、変換すべきプロ グラムが記録されたファイル名を含むものとする。
[0039] 一例として、プログラム取得部 103は、入力部 11から、プログラム 601が記録された ファイル名を含む取得指示を受信し、前記ファイル名で識別されるファイルに記録さ れたプログラム 601をプログラム保持部 12から読み出して、前記ディスプレイに表示 する。
(秘密演算指定部 101)
秘密演算指定部 101は、入力部 11から、プログラム中の秘密情報を特定するため の情報である秘密特定情報を取得し、前記秘密特定情報を分割秘密情報生成部 10 2に出力する。
[0040] 前記秘密特定情報は、一例として、秘密情報を含むコード (例えば、コード 611)の 位置を示す秘密位置情報、前記秘密情報を含む。
例えば、前記秘密位置情報は、プログラム 601におけるコード 611の行番号であり 、秘密情報は「KEY」である。
具体的な取得手順の一例としては、ユーザが、プログラム取得部 103がディスプレ ィに表示されているプログラム 601を見ながら、秘密情報を含み秘匿性の向上を希 望するコード (例えば、コード 611)を探し、前記秘密情報を指示するために前記秘 密特定情報を入力部 11に対し入力する。秘密演算指定部 101は、入力された前記 秘密特定情報を、入力部 11を介して取得する。
(分割数指定部 104)
分割数指定部 104は、ユーザが入力する分割数を、入力部 11を介して取得し、当
該分割数を結合関数生成部 107に対して出力する。
[0041] 前記分割数は、前記秘密情報を!、くつの分割秘密情報に分割するかを示す。
秘密情報の分割及び分割秘密情報につ!、ては、後述する。
(結合関数保持部 105)
結合関数保持部 105は、ハードディスクなどの記憶装置であり、 1以上の結合関数 を保持する。
[0042] 結合関数は、複数の分割秘密情報を結合して、秘密情報を生成するための関数で ある。
結合関数保持部 105は、結合関数 f ()を保持している。
第 1実施形態では、 f ()の一例として、結合関数 f— major(Pl, P2, P3)を保持し ているものとする。
f_major(Pl, P2, P3) ίま、 8ビットの引数 Pl、 Ρ2、 Ρ3の各析につ!/、て、多数決 演算を行い、その多数決結果を、戻り値の該当桁の値とするものである。
[0043] 前記多数決演算を行う関数 f ()の一例である関数 401を図 3に示す。
関数 401は、 X, y, zのうち、半数以上、すなわち 2つ以上が、値 1である場合に 1を 出力する多数決演算である。
関数 401は、 x、 y、 zの 3つの数が入力されると、図 3中の真理値表 402に従って、 結合結果を出力する。
[0044] 例えば、関数 401に、 x=0, y=0, z = 0力 ^入力されると真理値表 402に従って 0を 出力し、 x=0, y= l, z= lが入力されると真理値表 402に従って 1を出力する。 例えば、 f_major(0x03, 0x03, 0x02)は、 Pl = 0x03、 P2 = 0x03, P3 = 0x0 2について、 PIのビット 0である値 1を x、 P2のビット 0である値 1を y、 P3のビット 0であ る値 0を zとした f (l, 1, 0) = 1を、 f— major ()の戻り値のビット 0とする。
[0045] 同様に、 P1のビット 1である値 1を x、 P2のビット 1である値 1 、 P3のビット 1である 値 1を zとした f (l, 1, 1) = 1を、 f— major ()の戻り値のビット 1とし、ビット 2〜ビット 7 についても同様に処理して、 8ビットの戻り値を計算し、戻り値を返却する。
f_major(Pl, P2, P3)も、上述した f_xor (A, B)と同様に、 Pl、 P2、 P3の各桁 を独立に多数決演算処理するものであるので、 PI, P2, P3が 8ビット以外の、例えば
、 1024ビッ卜、 2048ビッ卜等であってもよく、この場合も 1024ビッ卜、 2048ビッ卜等の 各桁についての多数決演算の算出結果を連結すればよい。また、引数 Pl、 P2、 P3 が 1ビット長である場合、「data2=f— major (PI , P2, P3)」は、「data2=f (Pl, P 2, P3)」と同じである。
[0046] 結合関数保持部 105は、結合関数として、関数 f— major ()以外の関数も保持する 例えば、 f— major ()と同様に、入力される引数の各桁について図 4に示す関数 42 1を適用する関数や、入力される引数の各桁について、図 5に示す関数 441を適用 する関数などである。
[0047] ここで、関数 401、関数 421、関数 441中の記号「 |」は、論理和を示し、記号「&」 は論理積を示す。
また、図 4に、関数 fの一例である関数 421とその真理値表 422を示し、図 5に、関 数 fの一例である関数 441と、その真理値表 441を示す。
関数 421、関数 441中の記号「〜」は、否定の論理演算を示す。
[0048] 図 4、図 5ついては、図 3の説明と重複するので、詳細説明は割愛する。
(結合関数生成部 107)
結合関数生成部 107は、分割数指定部 104から前記分割数を受信すると、前記分 割数に適した結合関数のうちの 1つを、結合関数保持部 105に保持されている結合 関数の中からランダムに 1つ選択する。
[0049] 分割数が 3の場合であれば、結合関数保持部 105に保持されている結合関数であ つて 3入力を備えるもの、一例として結合関数 f— major ()を選択する。
結合関数生成部 107は、前記選択を行った後、選択した関数に係る情報であって 、鍵の分割方法を特定する情報、例えば、「多数決」を示す情報である分割方法情報 と、前記分割数とを、分割秘密情報生成部 102に出力し、選択した結合関数をプロ グラム変換部 106に通知する。
[0050] 本実施形態では、結合関数生成部 107は、結合関数保持部 105に記憶されている 結合関数力 ランダムに結合関数を選択することとしているが、結合関数を生成する こととしてちよい。
なお、結合関数生成部 107が保持若しくは生成する結合関数は、必ずしも多数決 演算を行う関数である必要はな 、が、 、ずれも所定の性質を満たして 、る必要があ る。その性質については後に詳細に述べるので、ここでの説明は省略する。
(分割秘密情報生成部 102)
分割秘密情報生成部 102は、秘密演算指定部 101から秘密特定情報を受信し、 結合関数生成部 107から分割方法情報と分割数とを受信して、前記分割方法情報 が示す分割方法に基づき、秘密情報を分割数に分割する。
[0051] 本実施形態では、分割数 Mは 3であり、分割方法情報が「多数決」を示すものとする 。また、分割数 Mは、多数決を行う必要があることから奇数が設定されるものとする。 分割秘密情報生成部 102は、受信した秘密特定情報に含まれる秘密情報「KEY」 に基づき、多数決の結果が「KEY」となるような 3個の分割秘密情報 Kl、 Κ2、 Κ3を 生成する。
[0052] 分割秘密情報生成部 102による、分割秘密情報の生成処理について、図 6のフロ 一チャートを用いて説明する。ここで、本フローチャートは、 ΚΕΥ、 Κ1〜Κ3のそれぞ れが 1ビットである場合についての処理を示すものであり、 ΚΕΥ、 Κ1〜Κ3のそれぞ れが、複数ビットから成る場合には、複数ビットの各桁について、当該フローチャート に示す処理を適用すれば、所望ビット長の KEYについて、所望ビット長の K1〜K3 を得ることができる。
[0053] 図 6中の変数 iは、値の設定の対象となっている分割秘密情報 Kiを示すためのもの である。
変数 jは、値が設定済みである分割秘密情報 Kl〜Kiのうち、「KEY」と同じ値が設 定された分割秘密情報の数を数えるためのものである。
分割秘密情報生成部 102は、まず、変数 iを 1で初期化し、変数 jを 0で初期化する( ステップ S 101)。
[0054] 次いで、 Mに関し、多数決において多数となる最低数 mを算出する (ステップ S 102 )o mは、式 Int(MZ2) + 1を用いて算出する。ここで Int (x)は、 xの整数部を示す。 次に、分割秘密情報生成部 102は、 jが m以上力否かを判定する (ステップ S103)
[0055] jが m以上である場合 (ステップ S103 :YES)、 K1〜KMの多数決を取ると「KEY」 になることが確定しているので、 Kiに関数 rand ()の戻り値を設定する(ステップ S 105
) o
ここで、関数 rand ()は、戻り値として 0か 1のいずれかをランダムに返却する関数で ある。
[0056] jが m未満である場合 (ステップ S 103: NO)、 KEYと同じ値を設定すべき分割秘密 情報の最低数である (m— j)が、値が未設定である分割秘密情報の数 (M+ 1— i)以 下であるか否かを判定する(ステップ S 104)。
(m— j)力 (Μ+ 1—i)以下である場合 (ステップ SI 04 : YES)、値が未設定である 分割秘密情報の全てに値 KEYを設定する必要があるので、 Kiに KEYを設定し (ス テツプ S 107)、ステップ S 108に移行する。
[0057] (m-j)が、(M+ 1— i)以下でない場合 (ステップ S104 :NO)、値が未設定の分割 秘密情報全てに KEYと同じ値を設定する必要はな 、ので、ステップ S105に移行し
、ランダムな値を分割秘密情報に設定する。
ステップ S105の終了後、分割秘密情報生成部 102は、 Kiが KEYと一致する力否 かを判定し (ステップ S 106)、一致しない場合には(ステップ S 106 : NO)、ステップ S
109に移行し、一致する場合 (ステップ S 106 : YES)には、 jを 1インクリメントして (ス テツプ S 108)、ステップ S 109に移行する。
[0058] 次に、分割秘密情報生成部 102は、 (i+ 1)が M以上である力否かを判定し (ステツ プ S109)、 M以上でない場合には (ステップ S109 :NO)、 iを 1インクリメントして (ステ ップ S 110)、ステップ S 103に移行し、 M以上である場合 (ステップ S 109 : YES)、処 理を終了する。
分割秘密情報生成部 102は、上記説明した手順によって、秘密情報 KEYに基づ いて、分割秘密情報 K1〜KMの多数決の結果が、 KEYになるような K1〜KMを生 成した後、生成した K1〜K3と、前記秘密特定情報とを、プログラム変換部 106に対 して出力する。
(プログラム変換部 106)
プログラム変換部 106は、分割秘密情報生成部 102から、前記秘密特定情報と前
記分割数個の前記分割秘密情報を取得し、結合関数生成部 107から結合関数の通 知を取得し、プログラム取得部 103からプログラムを取得し、取得したプログラムに対 し、(a)演算分割処理、(b)インターリーブ処理、(c)ダミー追加処理、(d)結合関数 追加処理を行う。
[0059] 以下、(a)〜(d)について、順に、再び図 1を参照しながら説明する。
(a)演算分割処理
演算分割処理は、プログラムに含まれる秘密演算を M個の分割秘密演算に分割す る処理である。
演算変換部 106は、プログラム 601における、秘密特定情報に含まれる行番号のコ ード 611「data2 = f— xor (datal, KEY);」に関し、秘密情報による演算を分割秘 密情報による演算に置き換えた、 M個の演算、すなわち、 3— 612「Pl =f—xor (d atal, K1);」、コード 613「P2=f— xor (datal, K2);」、コード 614「P3 =f— xor ( datal, K3);」を生成し、コード 611をコード 612、 613、 614に置き換える。
[0060] また、 KEYの値を定義するコード 631「:《£丫=(^03 ;」を1^1、 K2、 Κ3の値を定義 するコード 632「Κ1 =Οχ05 ;」、コード 633「Κ2 = Οχ03 ;」、コード 634「Κ3 = 0χ02 ; 」に置き換える。
コード 611力 Sコード 612、 613、 614に置き換えられ、コード 631力 Sコード 632、 633 、 634に置き換えられたプログラム力 プログラム 602である。
(b)インターリーブ処理
プログラム変換部 108は、プログラムの処理結果を変えることなぐプログラム 602に おけるコードの並び順を置き換える。
[0061] 図 1中の、プログラム 603は、プログラム 602がインターリーブ処理されたものである 具体的には、プログラム変換部 108は、プログラム 602において、プログラム 601力 ら置き換えられたコードであるコード 612、 613、 614の 3つ力 プログラム中の他のコ ードにより挟み込まれる (インターリーブされる)ように配置する。
[0062] 一例として、プログラムの先頭のコード「c = 100 ;」を、コード 613とコード 614の間 に挟み込み、コード「a=b + c;」、「b =b + l ;」を、コード 614と 612の間に挟み込ん
でいる。
また、コード 612、 613、 614は、それぞれ独立したコードであるため、並び順序を 変更しても結果は変わらないので、プログラム変換部 108は、これらコードの並び順 を変更する。
[0063] 但し、コード「datal = datalくく 2 ;」は、コード 612、 613、 614の前に配置してし まうと、コード 612、 613、 614の処理結果力 S変わってしまうので、コード 612、 613、 6 14より後に配置したままである。
このインターリーブ処理によって、各分割秘密情報を用いた演算処理の位置が一 箇所に固まらず、離れた場所に拡散されるため、不正解析をより困難にするという効 果がある。
[0064] (c)ダミー追加処理
プログラム変換部 106は、インターリーブ処理されたプログラム 603に対し、プロダラ ムの実行結果には影響を及ぼさないダミーの処理を示すコードを追加する。
プログラム変換部 106は、一例として、図 1のプログラム 604に示すように、プロダラ ム 603に対し、
3— 621「Templ = 0 ;」
コード 622「Temp2= 10;」
コード、 623「Templ = Tempi + Temp 2;」
コード 624「Temp 2 = data2 + Temp 1;」
の 4つのダミーのコードを追加する。
[0065] Tempi, Temp2は元々のプログラム 603には含まれていなかったダミーの変数で あり、このプログラムの実行結果には影響しない変数である。また、コード 621〜624 は、元々プログラム 603には存在していなかった新たなコードである。
コード 624は、プログラム 603中に存在していた data2を用いている力 プログラム の実行結果には影響を与えな 、ように用いられて 、る。
[0066] (d)結合関数追加処理
プログラム変換部 106は、結合関数生成部 107から取得する結合関数 f ()の引数 に、コード 612〜614の演算結果である P1〜P3を与える、コード 615「data2 =f
major (PI, P2, P3);」をプログラム 604に追加することによりプログラム 605を生成 する。
[0067] 以上説明した処理によって、プログラム変換部 106は、プログラム 601を、変換プロ グラムであるプログラム 605に変換し、前記変換プログラムを実行プログラム生成部 1 4に出力する。
<動作 >
実行プログラム生成装置 10の動作について、図 7に示すフローチャートを用いて説 明する。
[0068] ユーザは、ユーザ操作により、秘密情報を含むプログラム 601を作成し、プログラム 601を電子フアイルとしてプログラム保持部 12に保持させる。
ユーザは、キーボード等に対するユーザ操作によりプログラム 601を含む電子ファ ィルの表示を要求する。
入力部 11は、前記要求に基づき、前記電子ファイル名を含む取得指示を、プログ ラム取得部 103に送信する (ステップ S301)。
[0069] プログラム取得部 103は、電子ファイル名により識別される電子ファイルを、プロダラ ム保持部 12から取得し、前記ディスプレイ(図示せず)にプログラム 601を表示させる ユーザは、ディスプレイに表示されたプログラム 601を参照しながら、ユーザ操作に より、入力部 11に対し、プログラム 601中に含まれる秘密情報に係る秘密特定情報 を入力する。
[0070] 前記秘密特定情報は、コード 611のプログラム 601における行番号、秘密演算に 用いられている演算子 「"」、秘密情報「: KEY」を含む。
秘密演算指定部 101は、入力部 11を介して前記秘密特定情報を取得し、前記秘 密特定情報を分割秘密情報生成部 102に送信する (ステップ S302)。
次に、ユーザは、ユーザ操作により、入力部 11に対し、分割数を入力する。ここで は、分割数は 3である。
[0071] 分割数指定部 104は、入力部 11から、前記分割数を取得し (ステップ S303)、前 記分割数を結合関数生成部 107に送信する。
結合関数生成部 107は、前記分割数を受信し、前記分割数に基づき、結合関数保 持部 105に保持されている結合関数のうちの 1つを選出し (ステップ S304)、選出し た結合関数に係る情報であって、鍵の分割方法を特定する情報、例えば、「多数決」 を示す情報である分割方法情報と、前記分割数とを、分割秘密情報生成部 102に出 力し、選択した結合関数をプログラム変換部 106に通知する。
[0072] 分割秘密情報生成部 102は、前記分割方法情報と、前記分割数とを受信し、秘密 演算指定部 101から受信した秘密特定情報に含まれる秘密情報「KEY」に基づき、 多数決の結果が秘密情報「KEY」となるような前記分割数である 3個の分割秘密情 報 K1〜K3を生成し (ステップ S105)、生成した 3個の分割秘密情報である Κ1〜Κ3 を、プログラム変換部 106に対して出力する (ステップ S305)。
[0073] プログラム変換部 106は、分割秘密情報生成部 102から、前記秘密特定情報を取 得し、結合関数生成部 107から結合関数の通知を取得し、プログラム取得部 103か らプログラム 601を取得し、取得したプログラム 601に対し、演算分割処理を実行して プログラム 602を生成し (ステップ S306)、インターリーブ処理を実行してプログラム 6 03を生成し (ステップ S307)、ダミー追加処理を行ってプログラム 604を生成し (ステ ップ S308)、結合関数追加処理を行って、プログラム 605を生成し (ステップ S309) 、プログラム 605を実行プログラム生成部 14に対して出力する。
[0074] 実行プログラム生成部 14は、プログラム変換部 106から、変換プログラムであるプロ グラム 605を取得して、コンパイルし、実行プログラムを生成する。
<第 2実施形態 >
上述の第 1実施形態においては、秘密情報に係る処理、例えばコード 611「data2 = f_xor (datal, KEY);」は、入力される引数の各ビットについて論理演算を行う ものであった。論理演算とは、 AND (論理積)や OR (論理和)、 NOT (否定)、 XOR( 排他的論理和)、ビットシフト演算などである。
[0075] 論理演算は、暗号アルゴリズムなどのプログラムでは比較的良く使用される演算で あるため、プログラム中のこのような論理演算子は、解析者にとって暗号鍵のような秘 密情報を不正に取得する手がかりになり易 、ものである。
秘密情報に係る処理における演算が、論理演算である場合には第 1実施形態にて
説明した手法で処理できるのである力 演算が算術演算である場合には、既に述べ たような分割秘密情報を用いた演算への置き換えでは変換前と同じ演算結果が得ら れず、算術演算時に生じる各ビット毎の桁上がりや桁下力 ^を考慮した演算処理に変 換する必要がある。
[0076] ここで、算術演算とは、 + (加算)、 - (減算)、 X (積算)、 ÷ (除算)を指し、暗号ァ ルゴリズムでは比較的使用されることは少ないが、使用された場合はそれが特徴とな り、論理演算子と同様、解析の手がかりになり得るものである。
第 2実施形態は、算術演算子を含んだ秘密演算を含むプログラムを、算術演算時 に生じる各ビット毎の桁上がりや桁下がりを考慮した変換プログラムへと変換するもの である。
[0077] 以下、第 2実施形態について、第 1実施形態と差異のある部分についてのみ、図面 を用いて説明する。
第 2実施形態における実行プログラム生成装置は、図 8に示すように、ユーザが生 成するプログラム 701をプログラム 702に変換する。
プログラム 701は、プログラム 601の各ビット値を論理演算するコード 611「data2 = f— xor (datal, KEY);」が、算術演算を含むコード 711「data2 = datal +
KEY;」に置き換えられたものある。
[0078] プログラム 702は、コード 711に基づき生成されたコード 712「K[] = {dummy, Kl , Κ2, Κ3} ;」とコード 713「data2=func (datal, Κ);」を含む。
コード 712中の Kl、 Κ2、 Κ3は、第 1実施形態と同様に、秘密情報 KEYに基づき 生成された分割秘密情報である。
[0079] 関数 func (datal, K)は、引数として受け取る秘密演算 datalと、分割秘密情報の 格納アドレス Kとを用いて、 data2を生成する関数である。 func ()の詳細は後述する 第 2実施形態で扱う算術演算は、桁上がり(キャリー)が発生するため、第 1実施形 態のように単純に結合関数 f ()を適用するだけでは、適切な演算結果は得られない。 そこで、第 2実施形態では、結合関数 f ()を用いて data2を算出する関数 func Oを用 いる。
[0080] 第 2実施形態における実行プログラム生成装置 1100は、一例として図 9に示すよう に、入力部 11と、プログラム保持部 12と、変換プログラム生成部 1300と、実行プログ ラム生成部 14とを含んで構成される。
実行プログラム生成装置 1100は、具体的には、マイクロプロセッサ、 ROM、 RAM 、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成され るコンピュータシステムである。前記 RAM又は前記ハードディスクユニットには、コン ピュータプログラムが記憶されている。前記マイクロプロセッサ力 前記コンピュータプ ログラムに従って動作することにより、実行プログラム生成装置 1100は、その機能を 達成する。
[0081] 入力部 11、プログラム保持部 12、実行プログラム生成部 14については、第 1実施 形態にお 、て説明済みである。
変換プログラム生成部 1300は、ユーザが作成したプログラムを変換プログラムに変 換する。
変換プログラム生成部 1300は、図 9に示すように、秘密演算指定部 1101と、分割 秘密情報生成部 102と、プログラム取得部 103と、分割数指定部 104と、結合関数保 持部 105と、プログラム変換部 1106と、結合関数生成部 1107とを含んで構成される 。変換プログラム生成部 1300における、変換プログラム生成部 13と同様の構成要素 については、第 1実施形態と同符号を付しており、説明は省略する。
[0082] 秘密演算指定部 1101は、生成した秘密特定情報を分割秘密情報生成部 102の みでなぐ結合関数生成部 1107にも出力する以外は、秘密演算指定部 101と同様 である。
結合関数保持部 105は、演算子を示す演算子情報に対応づけて、結合関数 401 、 421、 441にカロえ、関数 func Oを保持している。
[0083] 例えば、結合関数保持部 105は、演算子「 +」と、関数 func ()とを対応づけて保持 し、演算子「Ίと、結合関数 401とを対応づけて保持し、演算子「Ίと、結合関数 421 とを対応づけて保持し、演算子「Ίと、結合関数 441とを対応づけて保持している。 結合関数 401、 421、 441、関数 func ()のそれぞれは、演算子を示す演算子情報 と対応付けられて記憶されて ヽる。
[0084] 結合関数生成部 1107は、分割数指定部 104から分割数を取得し、秘密演算指定 部 1101から秘密特定情報を取得する。
次に、結合関数生成部 1107は、取得した秘密特定情報に含まれる演算子情報が 、算術演算を示すか否かを判定し、算術演算 (特に「 +」)を示す場合には、結合関 数保持部 105から、前記算術演算及び前記分割数に対応する関数 func ()を選出し 、論理演算 (特に「Ί)を示す場合には、前記論理演算及び前記分割数に対応する 結合関数 401、 421、 441のいずれかをランダムに選出する。論理演算である場合 については、第 1実施形態において説明済みであるので、以下、演算子情報が算術 演算 (特に「 +」)を示し、関数 func ()が選出された場合について、説明する。
[0085] 結合関数生成部 1107は、プログラム変換部 1106に対し結合関数として func ()を 通知し、分割秘密情報生成部 102に対して前記秘密特定情報と、秘密情報の分割 方法を示す分割方法情報を通知する。
秘密情報は、第 1実施形態と同様に、結合関数 f ()を適用すると元の秘密情報が得 られるような形で分割される。
[0086] 以下の説明では、第 1実施形態と同様、結合関数 f 0は多数決演算を行う関数であ るものとして説明を行うので、分割方法情報は「多数決」を示すものとする。
なお、結合関数 f ()は、第 1実施形態と同様、所定の性質が満たされていれば、多 数決演算に限るものではないが、その性質については後述するので、ここでの説明 は省略する。
[0087] 分割秘密情報生成部 102は、結合関数生成部 1107から、前記秘密特定情報と、 前記分割方法情報とを受信すると、第 1実施形態に示したように、前記秘密特定情 報に含まれる秘密情報を、前記分割方法情報に基づき前記分割数に分割する。次 に、分割秘密情報生成部 102は、前記秘密特定情報と、前記分割によって生成され た分割秘密情報をプログラム変換部 1106に対し出力する。
[0088] プログラム変換部 1106は、分割秘密情報生成部 102から、前記秘密特定情報と、 前記分割数個の前記分割秘密情報を取得し、結合関数生成部 1107から結合関数 の通知を取得し、プログラム取得部 103からプログラムを取得し、取得したプログラム に対し、分割秘密情報と、結合関数とを追加する。
具体例としては、プログラム変換部 1106は、プログラム取得部 103からプログラム 7 01を取得し、プログラム 701に対し、分割秘密情報を定義するコード 712「K[] = {d ummy, Kl, K2, Κ3};」とコード 713「data2=func (datal, K);」を追カロする。
[0089] コード 712中の dummyは、 func ()力 説明の簡易化のため、配列 K[]の先頭を使 用しないこととしていることから挿入されたものであり、ダミーである以外の意味は特に 持たない。
(関数 func Oについての説明)
func ()は、 datal及び配列 K[] = {dummy, Kl, K2, Κ3}の先頭アドレスを引数 に受け取る。
[0090] 関数 func ()における処理について、図 10を用いて説明する。
まず、最終的に出力する戻り値となる Pを 0で初期化し、各桁のキャリーを示す Cl〜 Cnを 0で初期化する(ステップ S501)。
次に変数 mを復号鍵のビット長で初期化する (ステップ S502)。本実施形態では、 復号鍵 KEYのビット長は、 3である。
[0091] 次に、変数 tmpのそれぞれを 0で初期化する (ステップ S503)。
次に、変数 iを 1で初期化する (ステップ S504)。
次に、 iが分割数より大きいか否かを判定し (ステップ S 505)、大きい場合 (ステップ
S505 :YES)、後述するステップ S509に移行し、大きくない場合 (ステップ S505 :N
O)、 tmpに datal: Ki:jを代入する(ステップ S506)。
[0092] ここで、 X: jの記載はデータ Xの jビット目を示す。 datal: 0は、 datalの 0ビット目で あり、 i= l、 j = 0の場合、 Ki:jは K1の 0ビット目である。
次に、 f (tmp'Cl, tmp"C2, · · 'tmp 'Cn)の計算結果を Piに代入し (ステップ S 5
07)、 iを 1インクリメントし (ステップ S508)、ステップ S505に戻る。
[0093] ステップ S505において iが分割数より大きいと判定された場合、 f (Pl, P2, · · ·Ρη) を計算し、 Ptmpに代入し (ステップ S509)、 Ρを((Ptmpくく j) | P)で更新する(ス テツプ S 510)。
次に、 j + 1が mより大き 、か否かを判定し (ステップ S511)、大き 、場合 (ステップ S 511 : YES)には処理を終了し、大きくない場合 (ステップ S511 :NO)、キャリー Cl、
C2 · · 'Cnを更新する(ステップ S512)。
[0094] キャリーの更新には、関数 carry ()を用いて下式により行う。
C1 carry (datal :j, Kl :j, CI)
C2 carry (datal :j, K2 :j, C2)
Cn carry (data 1 j, Kn:j, Cn)
ここで、関数 carry (A, B, C)は、引数 A B Cを加算する時に発生するキャリーを 演算する関数である。
[0095] 具体的には、関数 carry(A, B, C)は、 A, B, Cのうち、 2つが値「1」である場合に 戻り値としてキャリー「1」を返却し、その他の場合、値「0」を返却する。上述した多数 決演算を行う関数 f 0で代用してもょ 、。
次に、 jを 1インクリメントして (ステップ S513)、ステップ S505に移行する。
[0096] 以上が、関数 func ()についての説明であるが、更に、具体的数字を当てはめた例 で説明する。
(関数 func ()の動作についての、具体的数字の例による補足説明)
func ()は、 datal及び配列 K[] = {dummy, Kl, K2, K3}の先頭アドレスを引数 に受け取る。
[0097] 以下、 datal = 0x03 ΚΕΥ=Οχ03 Κ1 = Οχ05 Κ2 = Οχ03 Κ3 = Οχ02であ る場合を例とする。
コード 711「data2 = datal +KEY;」によると、 data2は、 0x03 + 0x03 = 0x06と なるべきものであるので、 func ()の戻り値は、 0x06とならなければならない。
[0098] 次に、図 10のフローチャートに具体的数字を当てはめて、説明する。ただし、 Kl Κ2 Κ3におけるビット値がすべて 0である、上位 5ビットについては、説明を割愛す る。
まず、ステップ S501により、 P = 0 C1 = C2 = C3 = 0となる。
ステップ S502により、 m= 3となる。
[0099] ステップ S503により、 j = 0 tmp = 0となる。
(a) i = 0のループ
(i=lについてのノレープ)
ステップ S504により、 i=lとなる。
iは分割数 3より小さいのでステップ S505において NOに分岐する。
[0100] ステップ S506により、 tmpは、 datalのビット 0である 1と、 K1のビット 0である 1の排 他的論理和である 0となる。
ステップ S507により、 Pliま、 f(tmp'Cl, tmp"C2, tmp"C3, )=f(0"0, Ο'Ο, 0 '0)=0となる。
ステップ S508により、 iは 2となる。
[0101] (i= 2についてのループ)
iは分割数 3より小さいのでステップ S505において NOに分岐する。
ステップ S506により、 tmpは、 datalのビット 0である 1と、 K2のビット 0である 1の排 他的論理和である 0となる。
ステップ S507により、 Ρ2ίま、 f(tmp'Cl, tmp"C2, tmp"C3, )=f(0"0, Ο'Ο, 0 '0)=0となる。
[0102] ステップ S508により、 iは 3となる。
(i= 3についてのノレープ)
iは分割数 3と同値でありステップ S 505にお!/、て NOに分岐する。
ステップ S506により、 tmpは、 datalのビット 0である 1と、 K3のビット 0である 0の排 他的論理和である 1となる。
[0103] ステップ S507により、 Ρ3ίま、 f(tmp"Cl, tmp"C2, tmp"C3, ) =f(l"0, 1"0, 1
'0)=1となる。
ステップ S508により、 iは 4となり、ステップ S505において、 YESと判定されてステツ プ S509に移行する。
(Pの計算)
ステップ S509により、 Ptmpは f(0, 0, 1)=0となる。
[0104] ステップ S510により、 Pは 000となる。
(C1〜C3の計算)
ステップ S512により、 C1は、 carry (1, 1, 0)=1となり、 C2は、 carry (1, 1, 0)=
1となり、 C3は、 carry (1, 0, 0) =0となる。
(b)j = lのノレープ
(i=lについてのノレープ)
ステップ S 504により、 i=lとなる。
[0105] iは分割数 3より小さいのでステップ S505において NOに分岐する。
ステップ S506により、 tmpは、 datalのビット 1である 1と、 K1のビット 1である 0の 他的論理和である 1となる。
ステップ S507により、 P1は、 f(tmp'Cl, tmp"C2, tmp"C3, )=ί(Γΐ, Γΐ, 1 '0)=0となる。
[0106] ステップ S508により、 iは 2となる。
(i= 2についての/レープ)
iは分割数 3より小さいのでステップ S505において NOに分岐する。
ステップ S506により、 tmpは、 datalのビット 1である 1と、 K2のビット 1である 1の排 他的論理和である 0となる。
[0107] ステップ S507により、 Ρ2ίま、 f(tmp"Cl, tmp"C2, tmp"C3) =f(0"l, 0"1, 0" 0)=1となる。
ステップ S508により、 iは 3となる。
(i= 3についてのノレープ)
iは分割数 3と同値でありステップ S 505にお!/、て NOに分岐する。
[0108] ステップ S506により、 tmpは、 datalのビット 1である 1と、 K3のビット 1である 1の排 他的論理和である 0となる。
ステップ S507により、 P3は、 f(tmp'Cl, tmp"C2, tmp"C3, )=f(0"l, 0"1, 0 '0)=1となる。
ステップ S508により、 iは 4となり、ステップ S505において、 YESと判定されてステツ プ S509に移行する。
[0109] (Pの計算)
ステップ S509により、 Ptmpは f(0, 1, 1)=1となる。
ステップ S510により、 Pは 010となる。
(C1〜C3の計算)
ステップ S512により、 CIは、 carry (1, 0, 1)=1となり、じ2は、 carry (1, 1, 1)= 1となり、 C3は、 carry(l, 1, 0)=1となる。
(c)j = 2のループ
(i=lについてのノレープ)
ステップ S504により、 i=lとなる。
[0110] iは分割数 3より小さいのでステップ S505において NOに分岐する。
ステップ S506により、 tmpは、 datalのビット 2である 0と、 K1のビット 2である 1の 他的論理和である 1となる。
ステップ S507により、 P1は、 f(tmp'Cl, tmp"C2, tmp"C3, )=ί(Γΐ, Γΐ, 1 '1)=0となる。
[0111] ステップ S508により、 iは 2となる。
(i= 2についてのノレープ)
iは分割数 3より小さいのでステップ S505において NOに分岐する。
ステップ S506により、 tmpは、 datalのビット 2である 0と、 K2のビット 2である 0の 他的論理和である 0となる。
[0112] ステップ S507により、 P2は、 f (tmp'Cl, tmp"C2, tmp"C3, ) =f(0"l, 0"1, 0 '1)=1となる。
ステップ S508により、 iは 3となる。
(i= 3についてのノレープ)
iは分割数 3と同値でありステップ S 505にお!/、て NOに分岐する。
[0113] ステップ S506により、 tmpは、 datalのビット 2である 0と、 K3の 2ビット目である 0の 排他的論理和である 0となる。
ステップ S507により、 P3は、 f(tmp'Cl, tmp"C2, tmp"C3, )=f(0"l, 0"1, 0 '1)=1となる。
ステップ S508により、 iは 4となり、ステップ S505において、 YESと判定されてステツ プ S509に移行する。
[0114] (Pの計算)
ステップ S509により、 Ptmpは f(0, 1, 1)=1となる。
ステップ S510により、 Pは 0x06となる。
ステップ S511の判定に基づき、処理を終了する。
<結合関数 f 0が満たすべき必要十分条件 >
第 1及び第 2実施形態にて述べた手法で、分割秘密情報及び結合関数 f()を用い て、秘密情報を用いた演算結果と同じ演算結果を得るためには、結合関数 f()が以 下の 3つの条件を満たさなくてはならない。
[0115] (条件 l)f(0, 0, ···, 0)=0
(条件 2)f(l, 1, ···, 1)=1
(条件 3)〜f(xl, x2, ···, xn)=f(~xl,〜x2, ···,〜xn)
(ただし、〜は否定を表す論理演算である。 )
上記、関数 f 0が満たすべき条件についてさらに詳しく説明する。
[0116] (条件 1)と (条件 2)は式が示すように、全ての入力値が 0である場合、 f()の出力値 も 0となることと、全ての入力値が 1である場合、 f()の出力値も 1であることである。 また、(条件 3)は、一般的に自己双対関数と呼ばれる関数の条件であり、 f 0関数 に与える各入力値を全て否定 (NOT)した入力値による f ()の結果は、元の入力値の f 0による出力値の否定 (NOT)であることを示して 、る。
[0117] このような条件を満たす関数 f()の決め方は図 4、図 5の関数以外にも 2の X乗通り( 但し、 Xは 2の (n— 1)乗 1)通り存在する(nは分割数)。
結合関数保持部 105にこれらの条件を満たす関数を複数保持しておき、秘密情報 毎に結合関数を変えることで、解析をさらに困難にできる。
さらに本実施形態では、予め結合関数保持部 105が複数の関数を保持しておき、 結合関数生成部 107がその中から結合関数を指定すると!/、う方法を用いたが、結合 関数指定部 107が (条件 1)〜 (条件 3)を満たすような関数 f ()を毎回作成し、当該関 数 f()を入力引数の各桁に適用する結合関数を生成することで、結合関数保持部 10 5に予め結合関数を保持することなくプログラムを変化するようにしてもよい。
[0118] 例えば、(条件 1)〜(条件 3)を満たす関数 f()は、以下のようにして生成することが できる。
関数 f 0が取りうる引数の値の全パターンのエントリを持つ真理値表を用意し、まず
、条件 1及び条件 2を満たすため、引数が全て 0であるエントリに 0を、引数が全て 1で あるエントリに 1を代入する。
[0119] その後、他のエントリについて、ランダムに 0力 1の値を代入するとともに、そのェント リの各引数を否定した引数のエントリに、代入した値を否定した値を入れる。
具体的な例としては、引数が 3つの場合、「0, 1, 1」のエントリに「1」が代入されると 「1, 0, 0」のエントリには「0」を代入する。
上記の処理を全てのエントリに値が代入されるまで繰り返せば、(条件 1)〜(条件 3 )を満たす関数の真理値表が完成する。
[0120] その後は、公知の手法を用いて真理値表を元に論理式を生成してその論理式が 示す演算を行う関数を生成したり、生成した真理値表を参照するような関数を生成す れば、関数 f ()が得られる。
またこれらの関数 f ()は、耐タンパ一化された環境で実行されるように実装すること で、解析をさらに困難にすることができる。具体的には、特殊なハードウェアを使って 関数 fを実行する方法や、通常のプログラムとは隔離された環境で動作させる等、様 々な方法が考えられる。さらにソフトウェアで実装する場合においても、関数 fを一般 に知られて 、るプログラムを読みにくくするためのダミー変数を用 V、たダミー処理を追 加したり、プログラム中に分岐処理を追加する等、読みにくくする難読化方法で解析 しにくくしてもよい。
[0121] なお、上記の第 2実施形態では、 datalに K1〜K3を加算する処理と加算結果を 結合する処理とを関数 func ()を用いてまとめて行っていた力、これに限られるもので はない。
すなわち、第 1実施形態と同様に、まず、 datal +K1、 datal +K2、 datal +Κ3 の演算結果を算出し、その結果を、桁上がりを反映させつつ結合させるような関数 fu nc2 ()を用いて結合するとしてもよ 、。
<なお書き >
なお、本発明を上記の実施の形態に基づいて説明してきたが、本発明は、上記の 実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれ
る。
(1)論理演算子として、「Ίを用いて説明したが、これに限らず、論理演算を行う他の 演算子でもよい。
[0122] 例えば、論理演算子には、 AND (論理積)や OR (論理和)、 NOT (否定)、 XOR ( 排他的論理和)、ビットシフト演算などがある。暗号鍵を含む暗号アルゴリズムなどの プログラムでは比較的良く使用される演算であるため、プログラム中のこのような論理 演算子は、解析者にとって暗号鍵のような秘密情報を不正に取得する手がかりになり 易いものである。
[0123] また、算術演算子として「 +」を使用して説明したが、これに限らず他の算術演算子 であってもよい。
算術演算子とは、 + (加算)の他、 (減算)、 X (積算)、 ÷ (除算)を指し、暗号ァ ルゴリズムでは比較的使用されることは少ないが、使用された場合はそれが特徴とな り、論理演算子と同様、解析の手がかりになり得るものである。
[0124] なお、加算ではなく減算の場合には、桁上がりの代わりに桁下がりが発生するので 第 2実施形態において計算結果に桁上がりを反映させた処理と同様に桁下がりを反 映させる処理が必要になる。
(2)分割数指定部 104は、ユーザ操作により入力された分割数を入力部 11を介して 取得することとしていた力 他の方法によって、分割数を取得することとしてもよい。例 えば、分割数を、予め不揮発性メモリ等に保持しておき、保持されている分割数を読 み出して用いることとしてちよ!、。
(3)分割秘密情報生成部 102は、分割秘密情報の生成を行わず、他の方法により分 割秘密情報を生成することとしてもょ ヽ。
[0125] 例えば、真理値表 402を予め用意しておき、分割前の秘密情報に対応するエントリ を真理値表 (例えば真理値表 402)カゝらランダムに探し出して、エントリに対応する、 X 、 y、 zを分割秘密情報として出力することとしてもよい。
(4)インターリーブ処理は、必ずしも必要ではなぐ省略することとしてもよい。また、ィ ンターリーブ処理を第 2実施形態に追加してもよい。
(5)ダミー追加処理における、ダミーのコードは、プログラムの結果に影響を与えない
処理であれば新たに変数を追加して作成してもよ!/、し、元々プログラムに存在して!/ヽ た変数を使って作成してもよい。また、既に説明したインターリーブ処理と組み合わ せることにより分割秘密情報の位置がより拡散するようにダミーの演算処理を追加す ることでインターリーブの処理の効果を高めることに使用してもよい。
[0126] このように、プログラムの実行結果に影響を及ぼさないダミーの演算処理を追加す ることで、分割秘密情報の演算の解析がさらに困難になる。但し、これらダミーの演算 処理の追カ卩は必須ではな 、。
(6)秘密情報の分割秘密情報への分割方法は、分割秘密情報の多数決により復元 結果である秘密情報が得られるような分割方法に限らない。
[0127] 分割前の秘密情報を用いた演算と、分割秘密情報を用いた演算とが同じ結果が得 られれば他の分割方法であってもよ!/、。
(7)第 2実施形態において、コード 711「data2 = datal +KEY;」を、コード 713「da ta2=func (datal, K);」に置き換えている力 これには限らない。
[0128] 上述したように、関数 func ()は、複数のステップ力も構成されて 、るので、演算結 果が異なるものにならないように維持する限りにおいては、関数 func ()内の各ステツ プについて、第 1実施形態でおこなっているような、インターリーブ処理や、ダミー追 加処理や、結合関数追加処理を行うこととしてもよい。
(8)複数の分割秘密情報を結合する結合関数として、選択した一の結合関数を用い る例で説明したがこれに限らな 、。
[0129] 例えば、複数の分割秘密情報の各ビット桁毎に、用いる結合関数を変更することと してもよいし、複数桁毎に、用いる結合関数を変更することとしてもよい。
また、第 1及び第 2実施形態では、分割秘密情報の値を 1ビットずつ決定していく方 法を取って 、るが、これに限られるものではな!/、。
例えば、真理値表を結合関数 f ()の演算結果を参照して逆引きすることにより各引 数の値を決定することとしてもよい。具体的には、 KEYが「1」である場合には、真理 値表 402の f (x, y, z)の値が 1である行をランダムに選択し、選択した行に対応する X 、 y、 zの値を分散秘密情報のそれぞれに割り当てる。 KEYの値が「0」である場合も 同様である。
(9)第 1及び第 2実施形態では、実行プログラム生成装置に関する説明を行ったが、 これらの装置により生成された特徴あるプログラム自体や、そのプログラムの各部をノヽ 一ドウエアで実現した情報処理実行装置等も本発明に含まれる。
[0130] 例えば、図 1に示したプログラム 605を実行形式に変換した前記実行プログラムを、 ハードウェアで実現した情報処理実行装置 1300は、図 11に示すように、被演算情 報記憶部 1301と、分割秘密情報記憶部 1302と、分割演算実行部 1303〜1305と 、結合演算実行部 1306とから成る。
被演算情報記憶部 1301は、被演算情報として datal (1151)を記憶している。ここ で、前記被演算情報は、情報処理実行装置 1300の外部から取得することとしてもよ い。
[0131] 分割秘密情報記憶部 1302は、秘密情報が分割数に分割された分割秘密情報とし て、 K1 (1352)と、 K2 (1353)と、 K3 (1354)とを記'隐して ヽる。 Kl、 Κ2、 Κ3は、プ 口グラム 605における K1 (632)と、 Κ2 (633)と、 Κ3 (634)にネ目当する。
分割演算実行部 1303は、被演算情報記憶部 1301から datal (1351)を取得し、 分割秘密情報記憶部 1302から Kl ( 1352)を取得し、 Pl =f_xor (datal, K1)を 実行し、 PIを結合演算実行部 1306に出力する。
[0132] 分割演算実行部 1303と同様に、分割演算実行部 1304は、被演算情報記憶部 13 01から datal (1351)を取得し、分割秘密情報記憶部 1302から K2 (1353)を取得 し、 P2=f_xor (datal, K2)を実行し、 Ρ2を結合演算実行部 1306に出力する。 分割演算実行部 1305は、被演算情報記憶部 1301から datal (1351)を取得し、 分割秘密情報記憶部 1302から K3 ( 1354)を取得し、 P3=f_xor (datal, K3)を 実行し、 Ρ3を結合演算実行部 1306に出力する。
[0133] 分割演算実行部の数は、秘密情報に係る分割数と同じ数となる。
本変形例では、上述の実施形態と同じぐ秘密情報 KEYが分割数である 3個の分 割秘密情報 Kl、 Κ2、 Κ3に分割されていることとしているので、情報処理実行装置 1 300は、 3つの分割演算実行部 1302〜 1305を含んで!/、る。
結合演算実行部 1306は、分割演算実行部 1303から P1を取得し、分割演算実行 部 1304力ら Ρ2を取得し、分割演算実行部 1305から Ρ3を取得し、 data2=f_majo
r (Pl, P2, P3)を実行し、 data2を出力する。
(10)第 2実施形態では、関数 func Oは、結合関数保持部 105に保持されているも のとしたがこれに限られるものではない。結合関数保持部 105には結合関数 f ()を保 持しておき、結合関数保持部 105から得た結合関数 f ()を用いて結合関数 f 0を用い て結合関数生成部 1107が生成するものとしてもょ 、。
また、この場合、結合関数 f ()は、上述した 3つの性質が満たされている限り、結合 関数 401、 421、 441等の中力も選択するとしても構わない。
(11)第 1及び第 2実施形態では、分割秘密情報はランダムに生成するものとしたが、 これに限られるものではない。例えば、分割前の秘密情報と同じ値を除いた範囲でラ ンダムに選択するなどすれば、秘密情報そのものがメモリ〖こ現れること自体がなくなる ので、秘密情報をより安全に保護できる。
(12)上記実施形態においては、原プログラムを同結果が得られるプログラムへと変 換し、変換されたプログラムを、実行プログラムにコンパイルして実行する例で説明し た力 これに限らず、プログラムをコンピュータ上で実行できれば他の方法で実行し てもよい。例えば、原プログラムを同結果が得られる他のプログラムへと変換し、変換 されたプログラムを、インタープリンタが解釈できる中間コードに変換してもよい。前記 中間コードは、インタープリンタ上で実行される。
(13)上記の各装置は、具体的には、マイクロプロセッサ、 ROM、 RAM、ハードディ スクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュー タシステムである。前記 RAM又は前記ハードディスクユニットには、コンピュータプロ グラムが記憶されている。前記マイクロプロセッサ力 前記コンピュータプログラムに 従って動作することにより、各装置は、その機能を達成する。ここで、コンピュータプロ グラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コー ドが複数個組み合わされて構成されたものである。
(14)上記の各装置を構成する構成要素の一部又は全部は、 1個のシステム LSI (La rge Scale Integration:大規模集積回路)から構成されているとしてもよい。シス テム LSIは、複数の構成部を 1個のチップ上に集積して製造された超多機能 LSIであ り、具体的には、マイクロプロセッサ、 ROM、 RAMなどを含んで構成されるコンビュ
ータシステムである。前記 RAMには、コンピュータプログラムが記憶されている。前 記マイクロプロセッサ力 前記コンピュータプログラムに従って動作することにより、シ ステム LSIは、その機能を達成する。これらは個別に 1チップィ匕されても良いし、一部 又は全てを含むように 1チップ化されても良 、。
[0135] ここでは、 LSIとした力 集積度の違いにより、 IC、システム LSI、スーパー LSI、ゥ ノレ卜ラ LSIと呼称されることちある。
また、集積回路化の手法は LSIに限るものではなぐ専用回路又は汎用プロセサで 実現してもよい。 LSI製造後に、プログラムすることが可能な FPGA (Field Progra mmable Gate Array)や、 LSI内部の回路セルの接続や設定を再構成可能なリコ ンフィギユラブル ·プロセッサーを利用しても良 、。
[0136] さらには、半導体技術の進歩又は派生する別技術により LSIに置き換わる集積回 路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積ィ匕を行って もよい。バイオ技術の適応等が可能性としてありえる。
(15)上記の各装置を構成する構成要素の一部又は全部は、各装置に脱着可能な I Cカード又は単体のモジュール力 構成されて 、るとしてもよ 、。前記 ICカード又は 前記モジュールは、マイクロプロセッサ、 ROM, RAM,などから構成されるコンビュ ータシステムである。前記 ICカード又は前記モジュールは、上記の超多機能 LSIを 含むとしてもよい。マイクロプロセッサが、コンピュータプログラムに従って動作するこ とにより、前記 ICカード又は前記モジュールは、その機能を達成する。この ICカード 又はこのモジュールは、耐タンパ性を有するとしてもよ!/、。
(16)本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンビュ ータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプ ログラム力もなるデジタル信号であるとしてもよい。
[0137] また、本発明は、前記コンピュータプログラム又は前記デジタル信号をコンピュータ 読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、 CD— RO M、 MO、 DVD, DVD-ROM, DVD -RAM, BD (Blu— ray Disc)、半導体メ モリなど、〖こ記録したものとしてもよい。また、これらの記録媒体に記録されている前 記コンピュータプログラム又は前記デジタル信号であるとしてもよい。
[0138] また、本発明は、前記コンピュータプログラム又は前記デジタル信号を、電気通信 回線、無線又は有線通信回線、インターネットを代表とするネットワーク、データ放送 等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリとを備えたコンピュータシステムであって 、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサ は、前記コンピュータプログラムに従って動作するとしてもよい。
[0139] また、前記プログラム又は前記デジタル信号を前記記録媒体に記録して移送する ことにより、又は前記プログラム又は前記デジタル信号を前記ネットワーク等を経由し て移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい
(17)上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
産業上の利用可能性
[0140] 本発明のプログラム変換装置は、暗号ィ匕されたコンテンツを復号しつつ再生するプ レーヤーなどのプログラムの生成を行うものでありり、コンテンツの制作、配布等を行う コンテンツ産業において使用されるものである。