(57)【要約】【課題】演算時に使用されるレジスタに重要情報自身が保持されることを防ぐことを図る。【解決手段】入力演算式を示す入力演算式情報、及び、前記入力演算式に使用される難読化前演算前ベクトルが難読化された難読化後演算前ベクトルを入力する入力部１１と、前記難読化後演算前ベクトルから難読化後演算後ベクトルを難読化したままで計算する難読演算に使用される難読演算パラメータを、前記難読化前演算前ベクトルの要素の値が表れない難読演算パラメータ計算式を使用して計算する難読演算パラメータ計算部１２と、前記難読演算パラメータを使用して、前記難読化後演算前ベクトルから難読化後演算後ベクトルを計算する難読演算を行う難読演算部１３と、を備える。【選択図】図１
2015118439.tif 000002
【特許請求の範囲】
【請求項１】
入力演算式を示す入力演算式情報、及び、前記入力演算式に使用される難読化前演算前ベクトルが難読化された難読化後演算前ベクトルを入力する入力部と、
前記難読化後演算前ベクトルから難読化後演算後ベクトルを難読化したままで計算する難読演算に使用される難読演算パラメータを、前記難読化前演算前ベクトルの要素の値が表れない難読演算パラメータ計算式を使用して計算する難読演算パラメータ計算部と、
前記難読演算パラメータを使用して、前記難読化後演算前ベクトルから難読化後演算後ベクトルを計算する難読演算を行う難読演算部と、
を備えたことを特徴とする演算装置。
【請求項２】
前記難読演算パラメータ計算式は、前記難読化後演算前ベクトルを用いて表された前記入力演算式が、複数の排他的論理和と複数の排他的論理和をそれぞれ一項として前記入力演算式で示される二項演算子で演算する式で表されたときの、前記各一項に対して少なくとも１つの排他的論理和を残して計算されるように構成された、
ことを特徴とする請求項１に記載の演算装置。
【請求項３】
演算装置が、入力演算式を示す入力演算式情報、及び、前記入力演算式に使用される難読化前演算前ベクトルが難読化された難読化後演算前ベクトルを入力する入力ステップと、
前記演算装置が、前記難読化後演算前ベクトルから難読化後演算後ベクトルを難読化したままで計算する難読演算に使用される難読演算パラメータを、前記難読化前演算前ベクトルの要素の値が表れない難読演算パラメータ計算式を使用して計算する難読演算パラメータ計算ステップと、
前記演算装置が、前記難読演算パラメータを使用して、前記難読化後演算前ベクトルから難読化後演算後ベクトルを計算する難読演算を行う難読演算ステップと、
を含むことを特徴とする演算方法。
【請求項４】
コンピュータに、
入力演算式を示す入力演算式情報、及び、前記入力演算式に使用される難読化前演算前ベクトルが難読化された難読化後演算前ベクトルを入力する入力ステップと、
前記難読化後演算前ベクトルから難読化後演算後ベクトルを難読化したままで計算する難読演算に使用される難読演算パラメータを、前記難読化前演算前ベクトルの要素の値が表れない難読演算パラメータ計算式を使用して計算する難読演算パラメータ計算ステップと、
前記難読演算パラメータを使用して、前記難読化後演算前ベクトルから難読化後演算後ベクトルを計算する難読演算を行う難読演算ステップと、
を実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置、演算方法およびコンピュータプログラムに関する。
【背景技術】
【０００２】
近年、コンピュータでプログラムを実行する場合、プログラムで扱う重要情報を保護するために、ソースコードおよび変数を難読化する技術が知られている（例えば非特許文献１参照）。この難読化による情報の保護は逆アセンブルなどの静的解析に対しては有効であるが、プログラムを実行しながら解析を行う動的解析に対して効果は限定的であった。その動的解析に対して有効な技術として、例えば非特許文献２に記載される「Oblivious RAM」が知られている。しかしながら、「Oblivious RAM」はメモリに対する攻撃に対しては効果があるが、ＣＰＵのレジスタからデータを抜き取る攻撃に対しては安全性を保障できない。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】Boaz Barak, Oded Goldreich, Rusell Impagliazzo, Steven Rudich, Amit Sahai, Salil Vadhan, and Ke Yang, “On the (Im)possibility of Obfuscating Programs”, CRYPTO 2001, Lecture Notes in Computer Science Volume 2139, 2001, pp 1-18, 2001.
【非特許文献２】Oded Goldreich and Rafail Ostrovsky, “Software protection and simulation on oblivious rams”, J. ACM, 43(3): pp 431-473, 1996.
【発明の概要】
【発明が解決しようとする課題】
【０００４】
上述したように従来技術では、演算時に使用されるレジスタに重要情報自身が保持されると、攻撃者によってレジスタから重要情報を取得される可能性がある。
【０００５】
本発明は、このような事情を考慮してなされたもので、演算時に使用されるレジスタに重要情報自身が保持されることを防ぐことができる演算装置、演算方法およびコンピュータプログラムを提供することを課題とする。
【課題を解決するための手段】
【０００６】
（１）本発明に係る演算装置は、入力演算式を示す入力演算式情報、及び、前記入力演算式に使用される難読化前演算前ベクトルが難読化された難読化後演算前ベクトルを入力する入力部と、前記難読化後演算前ベクトルから難読化後演算後ベクトルを難読化したままで計算する難読演算に使用される難読演算パラメータを、前記難読化前演算前ベクトルの要素の値が表れない難読演算パラメータ計算式を使用して計算する難読演算パラメータ計算部と、前記難読演算パラメータを使用して、前記難読化後演算前ベクトルから難読化後演算後ベクトルを計算する難読演算を行う難読演算部と、を備えたことを特徴とする。
【０００７】
（２）本発明に係る演算装置は、上記（１）の演算装置において、前記難読演算パラメータ計算式は、前記難読化後演算前ベクトルを用いて表された前記入力演算式が、複数の排他的論理和と複数の排他的論理和をそれぞれ一項として前記入力演算式で示される二項演算子で演算する式で表されたときの、前記各一項に対して少なくとも１つの排他的論理和を残して計算されるように構成された、ことを特徴とする。
【０００８】
（３）本発明に係る演算方法は、演算装置が、入力演算式を示す入力演算式情報、及び、前記入力演算式に使用される難読化前演算前ベクトルが難読化された難読化後演算前ベクトルを入力する入力ステップと、前記演算装置が、前記難読化後演算前ベクトルから難読化後演算後ベクトルを難読化したままで計算する難読演算に使用される難読演算パラメータを、前記難読化前演算前ベクトルの要素の値が表れない難読演算パラメータ計算式を使用して計算する難読演算パラメータ計算ステップと、前記演算装置が、前記難読演算パラメータを使用して、前記難読化後演算前ベクトルから難読化後演算後ベクトルを計算する難読演算を行う難読演算ステップと、を含むことを特徴とする。
【０００９】
（４）本発明に係るコンピュータプログラムは、コンピュータに、入力演算式を示す入力演算式情報、及び、前記入力演算式に使用される難読化前演算前ベクトルが難読化された難読化後演算前ベクトルを入力する入力ステップと、前記難読化後演算前ベクトルから難読化後演算後ベクトルを難読化したままで計算する難読演算に使用される難読演算パラメータを、前記難読化前演算前ベクトルの要素の値が表れない難読演算パラメータ計算式を使用して計算する難読演算パラメータ計算ステップと、前記難読演算パラメータを使用して、前記難読化後演算前ベクトルから難読化後演算後ベクトルを計算する難読演算を行う難読演算ステップと、を実行させるためのコンピュータプログラムであることを特徴とする。
【発明の効果】
【００１０】
本発明によれば、演算時に使用されるレジスタに重要情報自身が保持されることを防ぐことができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態に係る演算装置１０の構成を示すブロック図である。
【図２】本発明の一実施形態に係るキャリー（ビット列Ｃ）を計算するプログラムの例を示す図である。
【図３】本発明の一実施形態に係る除算演算子の難読演算パラメータを計算するときのプログラムの例の一部を示す図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照し、本発明の実施形態について説明する。
【００１３】
はじめに本実施形態の概要を説明する。本実施形態に係る、難読化アルゴリズムを［数１］に、復号化アルゴリズムを［数２］に示す。
【００１４】
【数１】
2015118439.tif 000003
【００１５】
【数２】
2015118439.tif 000004
【００１６】
但し、ｘは難読化前の整数値ベクトルである。ｙは難読化後の整数値ベクトルである。整数値ベクトルｘ、ｙの要素は、整数値であり、例えばｘｉ、ｘｊ、ｘｋなどのように、添え字ｉ、ｊ、ｋなどを用いて表される。ｂは要素が０または１である任意のベクトルである。Ａは［数３］で示される行列である。Ａ−１は［数４］で示される、Ａの一般化逆行列である。なお、行列の計算に用いられる和は全て排他的論理和である。
【００１７】
【数３】
2015118439.tif 000005
【００１８】
【数４】
2015118439.tif 000006
【００１９】
本実施形態では、重要情報に対する演算を行う場合、重要情報を難読化したままの演算（難読演算）を行うことにより、該演算時に使用されるレジスタに重要情報自身が保持されることを防ぐ。難読化前後、演算前後の各変数の集合（ベクトル）の関係は［数５］で表される。
【００２０】
【数５】
2015118439.tif 000007
【００２１】
但し、各変数のベクトルは［数６］、［数７］、［数８］、［数９］で表される。
【００２２】
【数６】
2015118439.tif 000008
【００２３】
【数７】
2015118439.tif 000009
【００２４】
【数８】
2015118439.tif 000010
【００２５】
【数９】
2015118439.tif 000011
【００２６】
また、任意の二項演算子Ｏｐによる演算式は［数１０］で表される。
【００２７】
【数１０】
2015118439.tif 000012
【００２８】
［数１０］において、添え字のｉとｋが異なる値である場合に二項演算子Ｏｐを非代入演算子と称し、添え字のｉとｋが同じ値である場合に二項演算子Ｏｐを代入演算子と称する。例えば、［数１１］における「＋」は非代入演算子である。一方、［数１２］は［数１３］を意味するので、［数１２］における「＋＝」は代入演算子である。
【００２９】
【数１１】
2015118439.tif 000013
【００３０】
【数１２】
2015118439.tif 000014
【００３１】
【数１３】
2015118439.tif 000015
【００３２】
非代入演算子の場合、［数１０］のｘｋに対応する難読化後演算後ベクトルｙｎｅｗは［数１４］で表される。
【００３３】
【数１４】
2015118439.tif 000016
【００３４】
但し、Ｚは［数１５］で表される。
【００３５】
【数１５】
2015118439.tif 000017
【００３６】
代入演算子の場合も、［数１０］のｘｋに対応する難読化後演算後ベクトルｙｎｅｗは上記［数１４］で表される。但し、代入演算子の場合のＺは［数１６］で表される。
【００３７】
【数１６】
2015118439.tif 000018
【００３８】
上記した非代入演算子に係る［数１４］のＺと代入演算子に係る［数１６］のＺは、［数１７］のように一般化できる。
【００３９】
【数１７】
2015118439.tif 000019
【００４０】
ここで、［数１７］のＺの各項をそのまま計算すると［数１０］のｘｉ、ｘｊ、ｘｋの値がレジスタに保持されてしまうので難読化した意味がなくなる。このため、例えば［数１８］の値を計算する場合には、［数１９］のように２つの項になるまで計算してもよいが、［数１９］の値を計算してはならない。
【００４１】
【数１８】
2015118439.tif 000020
【００４２】
【数１９】
2015118439.tif 000021
【００４３】
そこで、本実施形態では、［数１４］により難読化後演算前ベクトルｙｏｌｄから難読化後演算後ベクトルｙｎｅｗを計算（難読演算）するときに、該難読演算に使用されるＺ（難読演算パラメータ）を計算する難読演算パラメータ計算を行う。この難読演算パラメータ計算では、［数１０］のｘｉ、ｘｊ、ｘｋの値がレジスタに保持されないようにする。
【００４４】
このために、難読演算パラメータＺを計算する難読演算パラメータ計算式は、難読化後演算前ベクトルｙｏｌｄを用いて表された入力演算式（［数１５］、［数１６］の二項演算子Ｏｐに関する項）が、複数の排他的論理和（［数１７］のαに関する排他的論理和）と複数の排他的論理和（［数１７］のβに関する排他的論理和）をそれぞれ一項として入力演算式で示される二項演算子Ｏｐで演算する式（［数１７］の二項演算子Ｏｐに関する項）で表されたときの、該各一項に対して少なくとも１つの排他的論理和を残して計算されるように構成される。
【００４５】
難読演算パラメータ計算に関する関係式として［数２０］が使用される。
【００４６】
【数２０】
2015118439.tif 000022
【００４７】
但し、αｎはαを２進展開したときのｎ番目の数である。＆は論理積（ＡＮＤ）を表す。＜＜は左シフトを表す。
【００４８】
次に本実施形態に係る演算装置について説明する。図１は、本発明の一実施形態に係る演算装置１０の構成を示すブロック図である。図１において、演算装置１０は、入力部１１と難読演算パラメータ計算部１２と難読演算部１３を備える。入力部１１は、入力演算式情報と難読化後演算前ベクトルｙｏｌｄを入力する。入力演算式情報は、［数１０］の二項演算子Ｏｐを示す情報である。難読化後演算前ベクトルｙｏｌｄは、［数１４］に使用されるものである。
【００４９】
難読演算パラメータ計算部１２は、入力部１１から入力された入力演算式情報および難読化後演算前ベクトルｙｏｌｄを使用して、該入力演算式情報で示される二項演算子Ｏｐに該当する難読演算パラメータＺを計算する。難読演算部１３は、入力部１１から入力された難読化後演算前ベクトルｙｏｌｄと、難読演算パラメータ計算部１２で計算された難読演算パラメータＺを使用して、［数１４］を計算する。［数１４］で使用される行列Ａは、予め、難読演算部１３に保持されている。難読演算部１３は、［数１４］の計算結果である難読化後演算後ベクトルｙｎｅｗを出力する。
【００５０】
以下、各二項演算子Ｏｐに該当する難読演算パラメータＺの計算方法の実施例を説明する。
【００５１】
まず、算術演算子について説明する。
【００５２】
［加算演算子（＋）］
加算演算子（非代入演算子）に該当する難読演算パラメータＺは［数１５］に対応する［数２１］で表される。
【００５３】
【数２１】
2015118439.tif 000023
【００５４】
但し、Ｎはビット列の桁数である。
【００５５】
そして、上記［数２１］において、［数２２］となる。
【００５６】
【数２２】
2015118439.tif 000024
【００５７】
上記［数２２］の難読演算パラメータＺは、以下の手順１、２で計算できる。
手順１：ＩとＪからビット列Ｃを作る。
手順２：［数２３］を計算する。
【００５８】
【数２３】
2015118439.tif 000025
【００５９】
上記ビット列Ｃを作る手順１の詳細は以下である。
手順１−１：ビット列Ｃの最初（最下位）のビットは０とする。その後、手順１−２の条件を満たさない場合には上位方向へずっと０とする。
手順１−２：ＩとＪのビット列を右（下位ビット）から左（上位ビット）へ見たときに、最初にＩ、Ｊともに１となっていたら、その隣（一つ上位）のビットを１とする。その後、手順１−３の条件を満たさない場合には上位方向へずっと１とする。
手順１−３：ＩとＪのビット列がともに０となっていたらその隣（一つ上位）のビットを０とする。
【００６０】
上記ビット列Ｃを作る手順１（手順１−１、１−２、１−３）は、排他的論理和を用いずに、整数型（ここではshort型）の変数Ｉ、Ｊの算術和のキャリー（ビット列Ｃ）を計算するものである。キャリー（ビット列Ｃ）は［数２４］を満たす。
【００６１】
【数２４】
2015118439.tif 000026
【００６２】
図２に、キャリー（ビット列Ｃ）を計算するＣ言語のプログラムの例を示す。
【００６３】
また、加算代入演算子に該当する難読演算パラメータＺは［数１６］に対応させて、上記手順２で［数２５］を計算すればよい。
【００６４】
【数２５】
2015118439.tif 000027
【００６５】
［減算演算子（−）］
減算演算子（非代入演算子）に該当する難読演算パラメータＺは［数１５］に対応する［数２６］で表される。
【００６６】
【数２６】
2015118439.tif 000028
【００６７】
上記［数２６］において、Ｚ’は［数２７］で表される。
【００６８】
【数２７】
2015118439.tif 000029
【００６９】
但し、Ｎはビット列の桁数である。
【００７０】
そして、上記［数２７］において、［数２８］となる。
【００７１】
【数２８】
2015118439.tif 000030
【００７２】
この［数２８］により、減算演算子（非代入演算子）に該当する難読演算パラメータＺを計算する。［数２８］においてビット列Ｃは、上記加算演算子の難読演算パラメータＺの計算の手順１と同様にして計算できる。
【００７３】
また、減算代入演算子に該当する難読演算パラメータＺは、［数１６］に対応させた［数２９］を計算すればよい。
【００７４】
【数２９】
2015118439.tif 000031
【００７５】
［乗算演算子（×）］
乗算演算子（非代入演算子）に該当する難読演算パラメータＺは［数１５］に対応する［数３０］で表される。
【００７６】
【数３０】
2015118439.tif 000032
【００７７】
上記［数３０］において、Ｚ’は［数３１］で表される。
【００７８】
【数３１】
2015118439.tif 000033
【００７９】
但し、Ｎはビット列の桁数である。
【００８０】
そして、上記［数３１］において、［数３２］となる。
【００８１】
【数３２】
2015118439.tif 000034
【００８２】
この［数３２］により、乗算演算子（非代入演算子）に該当する難読演算パラメータＺを計算する。［数３２］においてビット列Ｃは、上記加算演算子の難読演算パラメータＺの計算の手順１と同様にして計算できる。
【００８３】
また、乗算代入演算子に該当する難読演算パラメータＺは、［数１６］に対応させた［数３３］を計算すればよい。
【００８４】
【数３３】
2015118439.tif 000035
【００８５】
［除算演算子（／）］
除算演算子（非代入演算子）に該当する難読演算パラメータＺは［数１５］に対応する［数３４］で表される。
【００８６】
【数３４】
2015118439.tif 000036
【００８７】
また、除算代入演算子に該当する難読演算パラメータＺは［数１６］に対応する［数３５］で表される。
【００８８】
【数３５】
2015118439.tif 000037
【００８９】
上記［数３４］、［数３５］の難読演算パラメータＺは、以下の手順Ａ１〜Ａ５で計算できる。
手順Ａ１：［数３６］を設定する。
【００９０】
【数３６】
2015118439.tif 000038
【００９１】
手順Ａ２：「ｎ＝０」から開始し、最初に［数３７］を満たすｎを取得する。
【００９２】
【数３７】
2015118439.tif 000039
【００９３】
手順Ａ３：［数３８］を設定する。
【００９４】
【数３８】
2015118439.tif 000040
【００９５】
手順Ａ４：図３のループ処理を実行する。
手順Ａ５：除算演算子（非代入演算子）に該当する難読演算パラメータＺを求める場合には［数３９］を計算する。除算代入演算子に該当する難読演算パラメータＺを求める場合には［数４０］を計算する。
【００９６】
【数３９】
2015118439.tif 000041
【００９７】
【数４０】
2015118439.tif 000042
【００９８】
［剰余演算子（％）］
剰余演算子（非代入演算子）では［数４１］を計算する。
【００９９】
【数４１】
2015118439.tif 000043
【０１００】
ここでは、上記した除算演算子の計算アルゴリズムを使用して［数４２］を求める。
【０１０１】
【数４２】
2015118439.tif 000044
【０１０２】
［数４１］は［数４２］により［数４３］となる。
【０１０３】
【数４３】
2015118439.tif 000045
【０１０４】
但し、Ｎはビット列の桁数である。
【０１０５】
そして、上記［数４３］において、［数４４］となる。
【０１０６】
【数４４】
2015118439.tif 000046
【０１０７】
この［数４４］により、剰余演算子（非代入演算子）に該当する難読演算パラメータＺを計算する。［数４４］においてビット列Ｃは、上記加算演算子の難読演算パラメータＺの計算の手順１と同様にして計算できる。
【０１０８】
また、剰余代入演算子に該当する難読演算パラメータＺは、［数１６］に対応させた［数４５］を計算すればよい。
【０１０９】
【数４５】
2015118439.tif 000047
【０１１０】
次に、比較演算子について説明する。なお、比較演算子の計算においては、ｉＦ文による制御など、難読化したままでは出力を利用できない場合があるので、比較演算子の出力の難読化は行わないものとする。
【０１１１】
比較演算子の難読演算は以下のように行う。
ａとｂを比較する場合に、「ａ−ｂ」は［数４６］で表される。
【０１１２】
【数４６】
2015118439.tif 000048
【０１１３】
この［数４６］の値の正負を調べることによって、ａとｂの大小を判定できる。
【０１１４】
［小なり演算子（＜）］
「ａ−ｂ＜０」である場合に出力「１（真）」とし、そうではない場合に出力「０（偽）」とする。
【０１１５】
［小なりイコール演算子（＜＝）］
「ａ−ｂ＜＝０」である場合に出力「１（真）」とし、そうではない場合に出力「０（偽）」とする。
【０１１６】
［大なり演算子（＞）］
「ａ−ｂ＞０」である場合に出力「１（真）」とし、そうではない場合に出力「０（偽）」とする。
【０１１７】
［大なりイコール演算子（＞＝）］
「ａ−ｂ＞＝０」である場合に出力「１（真）」とし、そうではない場合に出力「０（偽）」とする。
【０１１８】
［ノットイコール演算子（！＝）］
「ａ−ｂ！＝０」である場合に出力「１（真）」とし、そうではない場合に出力「０（偽）」とする。
［イコール演算子（＝＝）］
「ａ−ｂ＝０」である場合に出力「１（真）」とし、そうではない場合に出力「０（偽）」とする。
【０１１９】
次に、ビット演算子について説明する。
【０１２０】
［左右シフト演算子（Ｓ（左シフト（＜＜）、右シフト（＞＞）））］
左右シフト演算子（非代入演算子）に該当する難読演算パラメータＺは［数１５］に対応する［数４７］で表される。
【０１２１】
【数４７】
2015118439.tif 000049
【０１２２】
また、左右シフト代入演算子（Ｓａ）に該当する難読演算パラメータＺは［数１６］に対応する［数４８］で表される。
【０１２３】
【数４８】
2015118439.tif 000050
【０１２４】
［ビット積演算子（＆）］
ビット積演算子（非代入演算子）に該当する難読演算パラメータＺは［数１５］に対応する［数４９］で表される。
【０１２５】
【数４９】
2015118439.tif 000051
【０１２６】
また、ビット積代入演算子に該当する難読演算パラメータＺは［数１６］に対応する［数５０］で表される。
【０１２７】
【数５０】
2015118439.tif 000052
【０１２８】
［ビット和演算子（｜）］
ビット和演算子は［数５１］で表される。
【０１２９】
【数５１】
2015118439.tif 000053
【０１３０】
この［数５１］により、ビット和演算子（非代入演算子）に該当する難読演算パラメータＺは［数１５］に対応する［数５２］で表される。
【０１３１】
【数５２】
2015118439.tif 000054
【０１３２】
また、ビット和代入演算子に該当する難読演算パラメータＺは［数１６］に対応する［数５３］で表される。
【０１３３】
【数５３】
2015118439.tif 000055
【０１３４】
［ビット排他的論理和演算子（XOR）］
ビット排他的論理和演算子（非代入演算子）の場合には、演算が可換であるので、単に演算の順序を交換すれば難読化できる。これにより、ビット排他的論理和演算子（非代入演算子）に該当する難読演算パラメータＺは［数１５］に対応する［数５４］で表される。
【０１３５】
【数５４】
2015118439.tif 000056
【０１３６】
一方、ビット排他的論理和代入演算子の場合には、［数１６］を適用できない。これは、［数１６］を適用すると［数５５］に表されるように、ｘｊがレジスタに保持されることになるからである。
【０１３７】
【数５５】
2015118439.tif 000057
【０１３８】
このため、行列Ａの要素ａｉｊが０又は１であることに着目し、［数５６］によりビット排他的論理和代入演算子の難読演算を行う。
【０１３９】
【数５６】
2015118439.tif 000058
【０１４０】
【数５７】
2015118439.tif 000059
【０１４１】
［数５６］において、［数５７］で示される部分を分割する。そして、その分割された部分に対して、上記したビット排他的論理和演算子（非代入演算子）の場合と同様に、演算の順序を交換する。これにより、ｘｊがレジスタに保持されることなく、演算できる。
【０１４２】
次に、その他の演算子として単純代入演算子を説明する。単純代入演算子の例として、ｘｊの値をｘｉに代入する「ｘｉ＝ｘｊ」を挙げる。この場合、難読演算パラメータＺは［数５８］で表される。
【０１４３】
【数５８】
2015118439.tif 000060
【０１４４】
よって、単純代入演算子「ｘｉ＝ｘｊ」に対応する難読演算パラメータＺを［数５９］により計算する。
【０１４５】
【数５９】
2015118439.tif 000061
【０１４６】
以上が、本実施形態に係る難読演算パラメータＺの計算方法の実施例の説明である。
【０１４７】
上述した実施形態によれば、演算装置１０の難読演算パラメータ計算部１２が、難読化後演算前ベクトルｙｏｌｄから難読化後演算後ベクトルｙｎｅｗを難読化したままで計算する難読演算に使用される難読演算パラメータＺを、難読化前演算前ベクトルｘｏｌｄの要素の値が表れない難読演算パラメータ計算式を使用して計算する。そして、難読演算部１３が、その難読演算パラメータＺを使用して、難読化後演算前ベクトルｙｏｌｄから難読化後演算後ベクトルｙｎｅｗを計算する難読演算を行う。これにより、演算時に使用されるレジスタに重要情報（難読化前演算前ベクトルｘｏｌｄの要素の値）自身が保持されることを防ぐことができる。これにより、演算装置１０を暗号化装置や認証装置などに使用することにより、セキュリティ上の重要情報である、暗号化に使用される鍵や認証に使用される個人情報などを保護することに寄与できる。
【０１４８】
なお、本実施形態に係る演算装置１０は、専用のハードウェアにより実現されるものであってもよく、或いは、メモリおよびＣＰＵ（中央処理装置）により構成され、演算装置１０の機能を実現するためのプログラムをＣＰＵが実行することによりその機能を実現させるものであってもよい。
【０１４９】
以上、本発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【０１５０】
例えば、本実施形態に係る演算装置１０は、様々なアプリケーションに対して適用可能である。例えば、暗号化処理や認証処理など、秘密情報を使用して演算処理を行うアプリケーションに対して、本実施形態に係る演算装置１０を適用することによって、該秘密情報の保護に寄与するという効果が得られる。
【０１５１】
また、上述した演算装置１０を実現するためのコンピュータプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行するようにしてもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものであってもよい。
【０１５２】
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、フラッシュメモリ等の書き込み可能な不揮発性メモリ、ＤＶＤ（Digital Versatile Disk）等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。
【０１５３】
さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（例えばＤＲＡＭ（Dynamic Random Access Memory））のように、一定時間プログラムを保持しているものも含むものとする。
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【符号の説明】
【０１５４】
１０…演算装置、１１…入力部、１２…難読演算パラメータ計算部、１３…難読演算部
【図１】
2015118439.tif 000062
【図２】
2015118439.tif 000063
【図３】
2015118439.tif 000064