(57)【要約】【課題】演算時に使用されるレジスタに秘密情報自身が保持されることを防ぐことを図る。【解決手段】入力演算式を示す入力演算式情報、前記入力演算式に使用される元入力値がマスク値によりマスク処理されたマスク入力値、及び前記マスク値を入力する入力部１１と、前記マスク入力値、又は、前記マスク入力値と前記マスク値の両方を使用して、前記入力演算式情報で示される入力演算式に対応するマスク付き演算式を計算し、マスク付き演算結果値と前記入力演算式情報で示される入力演算式の演算結果値を前記マスク付き演算結果値から得るマスク解除処理に使用される解除マスク値、又は、前記入力演算式情報で示される入力演算式の演算結果値、を出力するマスク付き演算部１２と、を備える。【選択図】図１
2015102639.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.
【非特許文献３】S. Kiyomoto, T. Tanaka, and K. Sakurai, “K2: A stream cipher algorithm using dynamic feedback control”, in SECRYPT, 2007, pp. 204-213.
【発明の概要】
【発明が解決しようとする課題】
【０００５】
上述したように従来技術では、演算時に使用されるレジスタに秘密情報自身が保持されると、攻撃者によってレジスタから秘密情報を取得される可能性がある。
【０００６】
本発明は、このような事情を考慮してなされたもので、演算時に使用されるレジスタに秘密情報自身が保持されることを防ぐことができる演算装置、演算方法、コンピュータプログラムを提供することを課題とする。
また、本発明に係る演算装置を備えたストリーム暗号化装置を提供することを課題とする。
【課題を解決するための手段】
【０００７】
（１）本発明に係る演算装置は、入力演算式を示す入力演算式情報、前記入力演算式に使用される元入力値がマスク値によりマスク処理されたマスク入力値、及び前記マスク値を入力する入力部と、前記マスク入力値、又は、前記マスク入力値と前記マスク値の両方を使用して、前記入力演算式情報で示される入力演算式に対応するマスク付き演算式を計算し、マスク付き演算結果値と前記入力演算式情報で示される入力演算式の演算結果値を前記マスク付き演算結果値から得るマスク解除処理に使用される解除マスク値、又は、前記入力演算式情報で示される入力演算式の演算結果値、を出力するマスク付き演算部と、を備えたことを特徴とする。
【０００８】
（２）本発明に係るストリーム暗号化装置は、ストリーム暗号化装置において、入力演算式情報で示される入力演算式に使用される元入力値をマスク値によりマスク処理し、マスク入力値を出力するマスク処理部と、前記入力演算式情報、前記マスク入力値および前記マスク値を使用する上記（１）の演算装置と、前記演算装置から出力されたマスク付き演算結果値および解除マスク値を使用して、前記マスク付き演算結果値に対するマスク解除処理を行うマスク解除処理部と、を備え、前記入力演算式であるストリーム暗号の内部状態更新演算式に対応するマスク付き演算式を前記演算装置により計算することを特徴とする。
【０００９】
（３）本発明に係る演算方法は、演算装置が、入力演算式を示す入力演算式情報、前記入力演算式に使用される元入力値がマスク値によりマスク処理されたマスク入力値、及び前記マスク値を入力する入力ステップと、前記演算装置が、前記マスク入力値、又は、前記マスク入力値と前記マスク値の両方を使用して、前記入力演算式情報で示される入力演算式に対応するマスク付き演算式を計算し、マスク付き演算結果値と前記入力演算式情報で示される入力演算式の演算結果値を前記マスク付き演算結果値から得るマスク解除処理に使用される解除マスク値、又は、前記入力演算式情報で示される入力演算式の演算結果値、を出力するマスク付き演算ステップと、を含むことを特徴とする。
【００１０】
（４）本発明に係るコンピュータプログラムは、コンピュータに、入力演算式を示す入力演算式情報、前記入力演算式に使用される元入力値がマスク値によりマスク処理されたマスク入力値、及び前記マスク値を入力する入力ステップと、前記マスク入力値、又は、前記マスク入力値と前記マスク値の両方を使用して、前記入力演算式情報で示される入力演算式に対応するマスク付き演算式を計算し、マスク付き演算結果値と前記入力演算式情報で示される入力演算式の演算結果値を前記マスク付き演算結果値から得るマスク解除処理に使用される解除マスク値、又は、前記入力演算式情報で示される入力演算式の演算結果値、を出力するマスク付き演算ステップと、を実行させるためのコンピュータプログラムであることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、演算時に使用されるレジスタに秘密情報自身が保持されることを防ぐことができる。また、本発明に係る演算装置を備えたストリーム暗号化装置を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態に係る演算装置１０の構成を示すブロック図である。
【図２】本発明の一実施形態に係る符号無し剰余演算（ｍｏｄ）に対応するマスク付き演算のプログラムの例を示す図である。
【図３】本発明の一実施形態に係る符号無し除算（／）に対応するマスク付き演算のプログラムの例を示す図である。
【図４】本発明に係るストリーム暗号化装置３０の実施例の構成を示すブロック図である。
【図５】ストリーム暗号の初期化処理のアルゴリズムの例を示す図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照し、本発明の実施形態について説明する。
図１は、本発明の一実施形態に係る演算装置１０の構成を示すブロック図である。図１において、演算装置１０は、入力部１１とマスク付き演算部１２を備える。
【００１４】
入力部１１は、入力演算式を示す入力演算式情報、該入力演算式に使用される元入力値がマスク値によりマスク処理されたマスク入力値、及び該マスク値を入力する。マスク付き演算部１２は、入力部１１から入力された、入力演算式情報と、マスク入力値、又は、マスク入力値とマスク値の両方とを使用する。マスク付き演算部１２は、マスク入力値、又は、マスク入力値とマスク値の両方を使用して、入力演算式情報で示される入力演算式に対応するマスク付き演算式を計算し、マスク付き演算結果値と解除マスク値、又は、入力演算式情報で示される入力演算式の演算結果値、を出力する。解除マスク値は、入力演算式情報で示される入力演算式の演算結果値をマスク付き演算結果値から得るマスク解除処理に使用されるものである。
【００１５】
以下、本実施形態に係る演算装置１０について具体的に説明する。
【００１６】
まず、本実施形態で使用される記号を［表１］に定義する。
【００１７】
【表１】
2015102639.tif 000003
【００１８】
元入力値ｘに対するマスク処理は、マスク値ｒｘを使用して［数１］により表される。［数１］によりマスク処理された結果がマスク入力値である。
【００１９】
【数１】
2015102639.tif 000004
【００２０】
本実施形態に係るアプリケーション（例えば、暗号化プログラム、認証プログラム等）では、演算前の秘密情報（元入力値）を使用せずに、マスク入力値およびマスク値を使用する。これにより、演算時に使用されるレジスタに演算前の秘密情報（元入力値）自身が保持されることを防ぐ。
【００２１】
本実施形態では、元入力値x、yを使用する入力演算式の演算結果値zを得たいとする。このために、本実施形態では、入力演算式を示す入力演算式情報と、元入力値xのマスク入力値「xとｒｘのＸＯＲ」および該マスク値ｒｘと、元入力値ｙのマスク入力値「ｙとｒｙのＸＯＲ」および該マスク値ｒｙと、を演算装置１０に入力する。これにより、演算装置１０のマスク付き演算部１２は、該入力されたデータを使用して、入力演算式情報の入力演算式に対応するマスク付き演算式を計算し、入力演算式の演算結果値zを得るためのマスク付き演算結果値および解除マスク値を出力する、又は、入力演算式の演算結果値ｚを出力する。入力演算式の演算結果値z、マスク付き演算結果値および解除マスク値ｒｚは［数２］により表される。
【００２２】
【数２】
2015102639.tif 000005
【００２３】
このマスク付き演算結果値「ｚとｒｚのＸＯＲ」に対して解除マスク値ｒｚによりマスク解除処理を行うことによって、入力演算式の演算結果値zが得られる。
【００２４】
次に、本実施形態に係る入力演算式に対応するマスク付き演算式、解除マスク値の実施例を説明する。
【００２５】
まず、本実施形態で使用される演算の記号として、［表２］にビット演算の記号、［表３］に四則演算の記号、［表４］に比較演算の記号を定義する。
【００２６】
【表２】
2015102639.tif 000006
【００２７】
【表３】
2015102639.tif 000007
【００２８】
【表４】
2015102639.tif 000008
【００２９】
［最上位ビットの判定］
ビット演算および四則演算では、最上位ビットの判定が必要となる。最上位ビットの値は、［数３］により算出できる。
【００３０】
【数３】
2015102639.tif 000009
【００３１】
［数３］により、符号あり整数値の場合に負の数かどうかの判定が可能となる。但し、［数３］では、ゼロの判定はできないので、正の数かどうかの判定はできない。
【００３２】
［マスク値の引き算］
乗算において、マスク値の引き算が必要となる。マスク値の引き算は［数４］で表される。
【００３３】
【数４】
2015102639.tif 000010
【００３４】
［ビット演算に係るマスク付き演算式、解除マスク値］
ビット演算に関して、入力演算式に対応するマスク付き演算式、解除マスク値は［表５］で定義される。
【００３５】
【表５】
2015102639.tif 000011
【００３６】
但し、ｒ０は正の乱数である。ｒ’は乱数である。なお、右シフト演算（＞＞）では、計算の途中でｘの上位１ビットの値が現れることに注意する。
【００３７】
［四則演算に係るマスク付き演算式、解除マスク値］
四則演算に関して、入力演算式に対応するマスク付き演算式、解除マスク値は［表６］で定義される。
【００３８】
【表６】
2015102639.tif 000012
【００３９】
なお、加算、減算、乗算では、計算の途中で、計算結果の２倍（２ｚ）の値が現れることに注意する。
【００４０】
また、剰余演算（ｍｏｄ）に対応するマスク付き演算式は、以下に示されるように、符号の有りと無しの場合に分けて定義される。なお、
入力演算式：ｚ＝ｘ（ｍｏｄ  ｙ）
ｘのマスク入力値：ｘ＿ｍａｓｋ
ｙのマスク入力値：ｙ＿ｍａｓｋ
とする。
また、剰余演算（ｍｏｄ）に対応するマスク付き演算では、マスク付き演算部１２から、入力演算式の演算結果値ｚが出力される。
【００４１】
［剰余演算（ｍｏｄ）、符号有り］
符号有りの場合には、以下の手順で剰余演算（ｍｏｄ）に対応するマスク付き演算を行う。
手順１：ｘ＿ｍａｓｋが負の数である場合には、「ｘ＿ｍａｓｋ＿Ａ＝−１  ×  ｘ＿ｍａｓｋ」とする。そうでない場合には、「ｘ＿ｍａｓｋ＿Ａ＝ｘ＿ｍａｓｋ」とする。
手順２：ｙ＿ｍａｓｋが負の数である場合には、「ｙ＿ｍａｓｋ＿Ａ＝−１  ×  ｙ＿ｍａｓｋ」とする。そうでない場合には、「ｙ＿ｍａｓｋ＿Ａ＝ｙ＿ｍａｓｋ」とする。
手順３：「ｚ＿Ｂ＝ｘ＿ｍａｓｋ＿Ａ（ｍｏｄ  ｙ＿ｍａｓｋ＿Ａ）」を計算する。
手順４：ｘ＿ｍａｓｋが負の数である場合には、「ｚ＝−１  ×  ｚ＿Ｂ」とする。そうでない場合には、「ｚ＝ｚ＿Ｂ」とする。
手順５：手順４の結果であるｚが入力演算式の演算結果値である。
【００４２】
［剰余演算（ｍｏｄ）、符号無し］
符号無しの場合には、以下の手順で剰余演算（ｍｏｄ）に対応するマスク付き演算を行う。ｎは変数である。
手順１：ｎ＝１とする。
手順２：「ｎ  ×  ｙ＿ｍａｓｋ」の最上位ビットが１である場合には、手順５へ進む。
手順３：「ｎ＝２  ×  ｎ」とする。
手順４：手順２へ戻る。
手順５：「ｚ＝ｘ＿ｍａｓｋ」とする。
手順６：ｚが「ｎ  ×  ｙ＿ｍａｓｋ」以上である場合には、「ｚ＝ｚ  −  （ｎ  ×  ｙ＿ｍａｓｋ）」とする。
手順７：「ｎ＝ｎ／２」とする。
手順８：ｎが１以上である場合には、手順６に戻る。
手順９：ｚが入力演算式の演算結果値である。
図２に、符号無し剰余演算（ｍｏｄ）に対応するマスク付き演算のプログラムの例を示す。
【００４３】
また、除算（／）に対応するマスク付き演算式は、以下に示されるように、符号の有りと無しの場合に分けて定義される。なお、
入力演算式：ｚ＝ｘ／ｙ
ｘのマスク入力値：ｘ＿ｍａｓｋ
ｙのマスク入力値：ｙ＿ｍａｓｋ
とする。
また、除算（／）に対応するマスク付き演算では、マスク付き演算部１２から、入力演算式の演算結果値ｚが出力される。
【００４４】
［除算（／）、符号有り］
符号有りの場合には、以下の手順で除算（／）に対応するマスク付き演算を行う。
手順１：ｘ＿ｍａｓｋが負の数である場合には、「ｘ＿ｍａｓｋ＿Ａ＝−１  ×  ｘ＿ｍａｓｋ」とする。そうでない場合には、「ｘ＿ｍａｓｋ＿Ａ＝ｘ＿ｍａｓｋ」とする。
手順２：ｙ＿ｍａｓｋが負の数である場合には、「ｙ＿ｍａｓｋ＿Ａ＝−１  ×  ｙ＿ｍａｓｋ」とする。そうでない場合には、「ｙ＿ｍａｓｋ＿Ａ＝ｙ＿ｍａｓｋ」とする。
手順３：「ｚ＿Ｂ＝ｘ＿ｍａｓｋ＿Ａ  ／  ｙ＿ｍａｓｋ＿Ａ」を計算する。
手順４：「ｘ＿ｍａｓｋ  ×  ｙ＿ｍａｓｋ」が負の数である場合には、「ｚ＝−１  ×  ｚ＿Ｂ」とする。そうでない場合には、「ｚ＝ｚ＿Ｂ」とする。
手順５：手順４の結果であるｚが入力演算式の演算結果値である。
なお、手順４、５に関し、ｚの符号は、ｘ＿ｍａｓｋ、ｙ＿ｍａｓｋの符号から、［表７］で表される。
【００４５】
【表７】
2015102639.tif 000013
【００４６】
［除算（／）、符号無し］
符号無しの場合には、以下の手順で除算（／）に対応するマスク付き演算を行う。ｎは変数である。
手順１：ｎ＝１とする。
手順２：「ｎ  ×  ｙ＿ｍａｓｋ」の最上位ビットが１である場合には、手順５へ進む。
手順３：「ｎ＝２  ×  ｎ」とする。
手順４：手順２へ戻る。
手順５：「ｔ＿ｘ＿ｍａｓｋ＝ｘ＿ｍａｓｋ」、「ｚ＝０」とする。
手順６：ｔ＿ｘ＿ｍａｓｋが「ｎ  ×  ｙ＿ｍａｓｋ」以上である場合には、「ｔ＿ｘ＿ｍａｓｋ＝ｔ＿ｘ＿ｍａｓｋ  −  （ｎ  ×  ｙ＿ｍａｓｋ）」、「ｚ＝ｚ  ＋  ｎ」とする。
手順７：「ｎ＝ｎ／２」とする。
手順８：ｎが１以上である場合には、手順６に戻る。
手順９：ｚが入力演算式の演算結果値である。
図３に、符号無し除算（／）に対応するマスク付き演算のプログラムの例を示す。
【００４７】
［比較演算に係るマスク付き演算式、解除マスク値］
比較演算に関して、入力演算式に対応するマスク付き演算式、解除マスク値は［表８］で定義される。比較演算に対応するマスク付き演算では、マスク付き演算部１２から、入力演算式の演算結果値ｚが出力される。入力演算式である比較演算の演算結果値ｚは１（真）または０（偽）である。
【００４８】
【表８】
2015102639.tif 000014
【００４９】
また、小なり演算（＜）に対応するマスク付き演算式は、理論上では［数５］で表される。
【００５０】
【数５】
2015102639.tif 000015
【００５１】
但し、［数５］の演算式では、オーバーフローが発生する場合には正常に計算が行われない。これに対処するために、以下に示されるように、符号の有りと無しの場合に分けて、小なり演算（＜）に対応するマスク付き演算式を定義する。なお、
入力演算式：ｘ＜ｙ
ｘのマスク入力値：ｘ＿ｍａｓｋ
ｙのマスク入力値：ｙ＿ｍａｓｋ
入力演算式の演算結果値：ｚ（１（真）または０（偽））
とする。
【００５２】
［小なり演算（＜）、符号有り］
符号有りの場合には、以下の手順で小なり演算（＜）に対応するマスク付き演算を行う。
手順１：「ｚ＿Ａ＝ｘ＿ｍａｓｋ  −  ｙ＿ｍａｓｋ」を計算する。
手順２：「ｘ＿ｍａｓｋ  ＞＝  ０」且つ「ｙ＿ｍａｓｋ  ＜  ０」である場合には、「ｚ＝０（偽）」とする。
手順３：「ｘ＿ｍａｓｋ  ＜  ０」且つ「ｙ＿ｍａｓｋ  ＞＝  ０」である場合には、「ｚ＝１（真）」とする。
手順４：「ｚ＿Ａ  ＞＝  ０」である場合には、「ｚ＝０（偽）」とする。
手順５：「ｚ＿Ａ  ＜  ０」である場合には、「ｚ＝１（真）」とする。
［表９］に、符号有り小なり演算（＜）のマスク付き演算式の定義を示す。
【００５３】
【表９】
2015102639.tif 000016
【００５４】
［小なり演算（＜）、符号無し］
符号無しの場合には、以下の手順で小なり演算（＜）に対応するマスク付き演算を行う。
手順１：ｘ＿ｍａｓｋを符号有り変数ｘ＿ｍａｓｋ＿Ａに設定し、ｙ＿ｍａｓｋを符号有り変数ｙ＿ｍａｓｋ＿Ａに設定する。
手順２：：「ｚ＿Ａ＝ｘ＿ｍａｓｋ＿Ａ  −  ｙ＿ｍａｓｋ＿Ａ」を計算する。ｚ＿Ａは符号有り変数である。
手順３：「ｘ＿ｍａｓｋ＿Ａ  ＞＝  ０」且つ「ｙ＿ｍａｓｋ＿Ａ  ＜  ０」である場合には、「ｚ＝０（偽）」とする。
手順４：「ｘ＿ｍａｓｋ＿Ａ  ＜  ０」且つ「ｙ＿ｍａｓｋ＿Ａ  ＞＝  ０」である場合には、「ｚ＝１（真）」とする。
手順５：「ｚ＿Ａ  ＞＝  ０」である場合には、「ｚ＝０（偽）」とする。
手順６：「ｚ＿Ａ  ＜  ０」である場合には、「ｚ＝１（真）」とする。
［表１０］に、符号無し小なり演算（＜）のマスク付き演算式の定義を示す。
【００５５】
【表１０】
2015102639.tif 000017
【００５６】
なお、秘密情報でない整数値Ａとの小なり演算（＜）である入力演算式「ｘ＜Ａ」に対応するマスク付き演算式は、理論上では［数６］で表される。
【００５７】
【数６】
2015102639.tif 000018
【００５８】
但し、［数６］の演算式では、［数５］と同様に、オーバーフローが発生する場合には正常に計算が行われない。これに対処するためには、上記［数５］に関する対処と同様に、符号の有りと無しの場合に分けて、秘密情報でない整数値Ａとの小なり演算（＜）に対応するマスク付き演算式を定義すればよい。
【００５９】
［小なりイコール演算（＜＝）］
入力演算式：ｘ＜＝ｙ
ｘのマスク入力値：ｘ＿ｍａｓｋ
ｙのマスク入力値：ｙ＿ｍａｓｋ
入力演算式の演算結果値：ｚ（１（真）または０（偽））
とする。
【００６０】
以下の手順で小なりイコール演算（＜＝）に対応するマスク付き演算を行う。
手順１：「ｙ＿ｍａｓｋ  ＜  ｘ＿ｍａｓｋ」が「１（真）」である場合には「ｚ＝０（偽）」とする。
手順２：「ｙ＿ｍａｓｋ  ＜  ｘ＿ｍａｓｋ」が「０（偽）」である場合には「ｚ＝１（真）」とする。
【００６１】
なお、秘密情報でない整数値Ａとの小なりイコール演算（＜＝）である入力演算式「ｘ＜＝Ａ」に対応するマスク付き演算は、以下の手順で行う。
手順１：「ｘ＿ｍａｓｋ  ＝  Ａ」である場合には「ｚ＝１（真）」とする。
手順２：「ｘ＿ｍａｓｋ  ！＝  Ａ」且つ「ｘ＿ｍａｓｋ  ＜  Ａ」が「１（真）」である場合には「ｚ＝１（真）」とする。
手順３：「ｘ＿ｍａｓｋ  ！＝  Ａ」且つ「ｘ＿ｍａｓｋ  ＜  Ａ」が「０（偽）」である場合には「ｚ＝０（偽）」とする。
【００６２】
［大なり演算（＞）］
入力演算式：ｘ＞ｙ
ｘのマスク入力値：ｘ＿ｍａｓｋ
ｙのマスク入力値：ｙ＿ｍａｓｋ
入力演算式の演算結果値：ｚ（１（真）または０（偽））
とする。
【００６３】
以下の手順で大なり演算（＞）に対応するマスク付き演算を行う。
手順１：「ｘ＿ｍａｓｋ  ＜＝  ｙ＿ｍａｓｋ」が「１（真）」である場合には「ｚ＝０（偽）」とする。
手順２：「ｘ＿ｍａｓｋ  ＜＝  ｙ＿ｍａｓｋ」が「０（偽）」である場合には「ｚ＝１（真）」とする。
【００６４】
なお、秘密情報でない整数値Ａとの大なり演算（＞）である入力演算式「ｘ＞Ａ」に対応するマスク付き演算は、以下の手順で行う。
手順１：「ｘ＿ｍａｓｋ  ＜＝  Ａ」が「１（真）」である場合には「ｚ＝０（偽）」とする。
手順２：「ｘ＿ｍａｓｋ  ＜＝  Ａ」が「０（偽）」である場合には「ｚ＝１（真）」とする。
【００６５】
［大なりイコール演算（＞＝）］
入力演算式：ｘ＞＝ｙ
ｘのマスク入力値：ｘ＿ｍａｓｋ
ｙのマスク入力値：ｙ＿ｍａｓｋ
入力演算式の演算結果値：ｚ（１（真）または０（偽））
とする。
【００６６】
以下の手順で大なりイコール演算（＞＝）に対応するマスク付き演算を行う。
手順１：「ｘ＿ｍａｓｋ  ＜  ｙ＿ｍａｓｋ」が「１（真）」である場合には「ｚ＝０（偽）」とする。
手順２：「ｘ＿ｍａｓｋ  ＜  ｙ＿ｍａｓｋ」が「０（偽）」である場合には「ｚ＝１（真）」とする。
【００６７】
なお、秘密情報でない整数値Ａとの大なりイコール演算（＞＝）である入力演算式「ｘ＞＝Ａ」に対応するマスク付き演算は、以下の手順で行う。
手順１：「ｘ＿ｍａｓｋ  ＜  Ａ」が「１（真）」である場合には「ｚ＝０（偽）」とする。
手順２：「ｘ＿ｍａｓｋ  ＜  Ａ」が「０（偽）」である場合には「ｚ＝１（真）」とする。
【００６８】
以上が、本実施形態に係る入力演算式に対応するマスク付き演算式、解除マスク値の実施例の説明である。
上述した実施形態によれば、演算装置１０のマスク付き演算部１２は、演算前の秘密情報（元入力値）を使用することなく、マスク付き演算を行う。よって、演算装置１０において、演算時に使用されるレジスタに演算前の秘密情報（元入力値）自身が保持されることを防ぐことができる。これにより、演算装置１０を暗号化装置や認証装置などに使用することにより、セキュリティ上の重要な秘密情報である、暗号化に使用される鍵や認証に使用される個人情報などを保護することに寄与できる。
【００６９】
なお、本実施形態に係る演算装置１０は、専用のハードウェアにより実現されるものであってもよく、或いは、メモリおよびＣＰＵ（中央処理装置）により構成され、演算装置１０の機能を実現するためのプログラムをＣＰＵが実行することによりその機能を実現させるものであってもよい。
【実施例】
【００７０】
次に、本実施形態に係る演算装置１０を備えたストリーム暗号化装置の実施例を説明する。図４は、本発明に係るストリーム暗号化装置３０の実施例の構成を示すブロック図である。図４において、ストリーム暗号化装置３０は、暗号化部３１と初期化部３２を備える。初期化部３２は、鍵ロード部３３と内部状態更新部３４を有する。内部状態更新部３４は、本実施形態に係る演算装置１０とマスク処理部３５とマスク解除処理部３６を有する。
【００７１】
暗号化部３１は、入力データに対してストリーム暗号化を行い、暗号化データを出力する。初期化部３２は、暗号化部３１に対して、ストリーム暗号化に使用される暗号化パラメータを出力する。暗号化部３１は、初期化部３２から入力された暗号化パラメータを使用して、入力データに対するストリーム暗号化を行う。
【００７２】
鍵ロード部３３は、鍵と初期ベクトルを内部状態更新部３４へ出力する。内部状態更新部３４は、鍵ロード部３３から入力された鍵と初期ベクトルを撹拌し、撹拌によって得られた暗号化パラメータを出力する。
【００７３】
内部状態更新部３４における鍵と初期ベクトルの撹拌において、鍵がそのまま使用されると、鍵自身がレジスタに保持されるので、レジスタに保持された鍵が攻撃者によって取得される可能性がある。これに対処するために、内部状態更新部３４において、マスク処理部３５によって鍵（元入力値）に対してマスク値によりマスク処理してマスク入力値を生成し、該マスク入力値およびマスク値を演算装置１０へ入力する。そして、演算装置１０は、該マスク入力値およびマスク値を使用して、入力演算式である内部状態更新演算式に対応するマスク付き演算式を計算する。そして、マスク解除処理部３６は、演算装置１０から出力されたマスク付き演算結果値および解除マスク値を使用して、該マスク付き演算結果値に対するマスク解除処理を行う。このマスク解除処理の結果として、暗号化パラメータが得られる。
【００７４】
図５に、ストリーム暗号の初期化処理のアルゴリズムの例を示す。この図５の例は、ストリーム暗号「KCipher-2」の初期化処理のアルゴリズム（Algorithm 1）の定義である。ストリーム暗号「KCipher-2」については、例えば非特許文献３に開示されている。図５において、鍵ロードステップ（Key loading step）で鍵と初期ベクトルが各レジスタに設定される。本実施形態では、その鍵をマスク処理部３５でマスク処理した結果であるマスク入力値をレジスタに設定する。そして、内部状態更新ステップ（Internal state update step）では、該レジスタに設定されたマスク入力値を使用して、内部状態更新演算に対応するマスク付き演算を行う。これにより、内部状態更新演算において、鍵自身がレジスタに保持されることを防ぐことができるので、鍵の保護に寄与できる。
【００７５】
なお、図５に示されるストリーム暗号「KCipher-2」の初期化処理のアルゴリズム（Algorithm 1）において、Ｓｕｂは非線形関数であり、Ｓｕｂ関数内で３２ビット演算と８ビット演算が行われる。その８ビット演算については、高速化のために表参照を用いることが一般的である。その表参照を用いる場合には、マスク付き演算に対応させるため、マスク付き演算に該当する表を事前に準備しておく。
【００７６】
以上、本発明の実施形態について図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【００７７】
例えば、本実施形態に係る演算装置１０は、様々なアプリケーションに対して適用可能である。例えば、暗号化処理や認証処理など、秘密情報を使用して演算処理を行うアプリケーションに対して、本実施形態に係る演算装置１０を適用することによって、該秘密情報の保護に寄与するという効果が得られる。
【００７８】
また、上述した演算装置１０を実現するためのコンピュータプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行するようにしてもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものであってもよい。
【００７９】
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、フラッシュメモリ等の書き込み可能な不揮発性メモリ、ＤＶＤ（Digital Versatile Disk）等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。
【００８０】
さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（例えばＤＲＡＭ（Dynamic Random Access Memory））のように、一定時間プログラムを保持しているものも含むものとする。
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【符号の説明】
【００８１】
１０…演算装置、１１…入力部、１２…マスク付き演算部、３０…ストリーム暗号化装置、３１…暗号化部、３２…初期化部、３３…鍵ロード部、３４…内部状態更新部、３５…マスク処理部、３６…マスク解除処理部
【図１】
2015102639.tif 000019
【図２】
2015102639.tif 000020
【図３】
2015102639.tif 000021
【図４】
2015102639.tif 000022
【図５】
2015102639.tif 000023