(57)【特許請求の範囲】
【請求項１】
平文または暗号文に対して乗算を用いた非線形処理を含む複数の処理を行って前記平文
を暗号化または前記暗号文を復号する暗号処理装置であって、前記複数の処理の途中のデ
ータである中間値を、該中間値を隠蔽する値であるマスク値を用いて隠蔽した状態で処理
を行う暗号処理装置において、
前記中間値と第１マスク値との積と、第２マスク値と、の排他的論理和である第１デー
タを入力し、前記中間値に対する前記非線形処理により得られる値と前記第１マスク値に
対する前記非線形処理により得られる値との積と、前記第２マスク値との対応関係が予め
定められた第３マスク値と、の排他的論理和である第２データを出力する非線形処理手段
と、
前記中間値と第４マスク値との排他的論理和である第３データと、前記第４マスク値と
、を入力し、前記第１マスク値と前記第２マスク値と前記第４マスク値とを用いて、前記
第３データを前記第１データに変換して前記非線形処理手段に入力する第１変換手段と、
前記第１マスク値を用いて、前記非線形処理手段が出力する前記第２データを、前記中
間値に対する前記非線形処理により得られる値と第５マスク値との排他的論理和である第
４データに変換して出力するとともに、前記第１マスク値と前記第３マスク値とを用いて
、前記第５マスク値を演算して出力する第２変換手段と
を備える暗号処理装置。
【請求項２】
前記第１変換手段は、
前記第４マスク値に対して逆元計算を行う第１演算部と、
前記第１演算部の逆元計算により得られる値と前記第２マスク値とを乗算して前記第１
マスク値を算出する第２演算部と、
前記第３データと前記第２演算部が算出した前記第１マスク値とを乗算して前記第１デ
ータを求める第３演算部と、を有する請求項１に記載の暗号処理装置。
【請求項３】
前記非線形処理手段は、前記第２マスク値と前記第３マスク値との対応関係を定めた複
数のテーブルのうちの１つを選択し、選択したテーブルに基いて前記第１データを前記第
２データに変換するものであり、
前記第１演算部は、前記複数のテーブルのうち、前記非線形処理手段が選択したテーブ
ルとは異なるテーブルに基づいて、前記第４マスク値に対する逆元計算を行う請求項２に
記載の暗号処理装置。
【請求項４】
前記非線形処理は、逆元計算である請求項１に記載の暗号処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施の形態は、暗号化または復号を行う暗号処理装置に関する。
【背景技術】
【０００２】
暗号処理装置は、平文／暗号文を特定のアルゴリズムを用いて暗号化／復号する。暗号処理装置に対しては、動作中における消費電力や電磁波を測定するだけで内部秘密鍵を導き出すパッシブな攻撃であるＳＰＡ（Simple  Power  Analysis）やＤＰＡ（Differential  Power  Analysis）などのサイドチャネル攻撃が報告されている。サイドチャネル攻撃は、攻撃の痕跡が残らないため、対策技術が必要かつ重要である。
【０００３】
サイドチャネル攻撃は、暗号化処理や復号処理の演算中に測定することが可能な消費電力や電磁波と、推測する秘密鍵から計算することのできる中間値（暗号処理の途中のデータ）との類似度が高い秘密鍵を導き出すことにより実現されている。このようなサイドチャネル攻撃に対する対策としては、乱数を用いて暗号処理の中間値を隠蔽し、類似度の高さ判定を困難にすることで、サイドチャネル攻撃を無効化する対策方法（マスク対策）が知られている。
【０００４】
ＡＥＳ（Advanced  Encryption  Standard）などのブロック暗号方式では、マスク対策として、中間値に対して乱数との排他的論理和（ＸＯＲ）をとる方法と、乱数を乗算する方法とが知られている。ここで、暗号処理に含まれる非線形処理に対してマスク対策を適用する場合、非線形処理の性質上、ランダムに生成した乱数との排他的論理和によるマスク対策をそのまま適用することができない。そのため、非線形処理の入出力の対応関係を定めたテーブルを用いて非線形処理におけるマスク対策を実現する方法がある。しかし、テーブルを用いたマスク対策では、回路規模の大幅な増加を生じさせないために利用するテーブル数が限定されるため、乱数性が低下する。
【０００５】
一方、乱数の乗算によるマスク対策は、ＡＥＳの逆元計算のように乗算を用いた非線形処理に対しては、その数学的性質により相性に優れるが、サイドチャネル攻撃に対する脆弱性が報告されている。
【０００６】
このように、従来の暗号処理装置では、特に非線形処理においてサイドチャネル攻撃に対して十分な対策を講じることが難しく、サイドチャネル攻撃に対する安全性の向上が求められていた。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特許第３６００４５４号公報
【非特許文献】
【０００８】
【非特許文献１】P.  C.  Kocher,  J.  Jaffe,  and  B.  Jun,  Differential  Power  Analysis,  Crypto  '99,  Lecture  Notes  in  Computer  Science,  Vol.  1666  (1999),  pp.388-397.
【非特許文献２】AES  (Advanced  Encryption  Standard)  :  FIPS-197,  http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
【非特許文献３】M.  Akkar  and  C.  Giraud,  An  implementation  of  DES  and  AES,  secure  against  some  attacks,  CHES  2001,  Lecture  Notes  in  Computer  Science,  Vol.  2162  (2001),  pp.309-318.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
本発明が解決しようとする課題は、サイドチャネル攻撃に対して安全性を高めた暗号処理装置を提供することである。
【課題を解決するための手段】
【００１０】
実施形態の暗号処理装置は、平文または暗号文に対して乗算を用いた非線形処理を含む複数の処理を行って前記平文を暗号化または前記暗号文を復号する暗号処理装置であって、前記複数の処理の途中のデータである中間値を、該中間値を隠蔽する値であるマスク値を用いて隠蔽した状態で処理を行う。この暗号処理装置は、非線形処理手段を備える。非線形処理手段は、前記中間値と第１マスク値との積と、第２マスク値と、の排他的論理和である第１データを入力し、該第1データに対して前記非線形処理を行って、前記中間値の逆元と前記第１マスク値の逆元との積と、前記第２マスク値との対応関係が予め定められた第３マスク値と、の排他的論理和である第２データを出力する。
【図面の簡単な説明】
【００１１】
【図１】ＡＥＳの一般的な処理手順の一例を説明する図。
【図２】ＳｕｂＢｙｔｅｓの一例を説明する概念図。
【図３】Ｓ−Ｂｏｘを説明する概念図。
【図４】暗号処理部の概要を示すブロック図。
【図５】実施形態の暗号処理装置の概略構成を示すブロック図。
【図６】暗号処理部の概要を示すブロック図。
【図７】変形データ処理部の概要を示すブロック図。
【図８】第１比較例の変形逆元計算部を示すブロック図。
【図９】第２比較例の変形逆元計算部を示すブロック図。
【図１０】第１実施例の変形逆元計算部を示すブロック図。
【図１１】第２実施例の変形逆元計算部を示すブロック図。
【図１２】第３実施例の変形逆元計算部を示すブロック図。
【発明を実施するための形態】
【００１２】
本実施形態の暗号処理装置は、ブロック暗号方式により暗号化／復号を行う暗号処理装置であり、特にＡＥＳを用いる暗号処理装置への適用例である。なお、適用可能な暗号処理装置はＡＥＳを用いる暗号処理装置に限定されるものではなく、暗号処理において乗算を用いた非線形処理を行う暗号処理装置に対して広く適用可能である。
【００１３】
（ＡＥＳの概要）
まず、ＡＥＳの概要について説明する。ブロック暗号方式であるＡＥＳでは、１２８ビットのデータブロックに対して、ラウンド関数を用いたラウンド処理をＡＥＳ鍵長に応じた規定のラウンド数分繰り返す。ＡＥＳのラウンド関数は、ＡｄｄＲｏｕｎｄＫｅｙ、ＳｕｂＢｙｔｅｓ、ＳｈｉｆｔＲｏｗｓ、およびＭｉｘＣｏｌｕｍｎｓを含む。
【００１４】
ＡｄｄＲｏｕｎｄＫｅｙは、ＡＥＳ鍵長に応じた処理を実行する鍵スケジュールで更新される１２８ビットの拡大鍵と、１２８ビットの入力データとの排他的論理和である１２８ビットのデータを出力するビットごとの演算処理である。ＳｕｂＢｙｔｅｓは、１２８ビットの入力データを１６個の８ビットデータに区切り、８ビットデータ単位で例えばＳ−Ｂｏｘによる非線形処理を行う演算処理である。ＳｈｉｆｔＲｏｗｓは、１２８ビットの入力データを１６個の８ビットデータに分割して並び替える演算処理である。ＭｉｘＣｏｌｕｍｎｓは、１２８ビットの入力データを４個の３２ビットデータに分けて３２ビット単位に線形処理を行う演算処理である。
【００１５】
図１は、ＡＥＳの一般的な処理手順の一例を説明する図である。ＡＥＳでは、図１に示すように、まず１２８ビットの平文を入力し、例えば、第１ラウンドから最終ラウンドの１つ前のラウンドまで、ＡｄｄＲｏｕｎｄＫｅｙ→ＳｕｂＢｙｔｅｓ→ＳｈｉｆｔＲｏｗｓ→ＭｉｘＣｏｌｕｍｎｓを繰り返す。そして、最終ラウンドでは、ＡｄｄＲｏｕｎｄＫｅｙ→ＳｕｂＢｙｔｅｓ→ＳｈｉｆｔＲｏｗｓを行った後、ＭｉｘＣｏｌｕｍｎｓをスキップして、後処理として再度ＡｄｄＲｏｕｎｄＫｅｙを行い、暗号文を出力する。なお、図１は暗号化処理の手順を示しているが、復号処理の場合も同様な手順で実行される。ただし、復号処理の場合は、暗号文を入力として、ＳｕｂＢｙｔｅｓ、ＳｈｉｆｔＲｏｗｓ、およびＭｉｘＣｏｌｕｍｎｓにおいて暗号化処理の逆変換が行われ、平文を出力する。また、鍵スケジュールでの処理は図への記載を割愛している。
【００１６】
ＡＥＳのラウンド処理は、ＳｕｂＢｙｔｅｓの非線形処理と、ＳｕｂＢｙｔｅｓ以外の線形処理とに分けることができる。
【００１７】
図２は、ＳｕｂＢｙｔｅｓの一例を説明する概念図である。ＳｕｂＢｙｔｅｓは、例えば図２に示すように、ＡｄｄＲｏｕｎｄＫｅｙの出力１２８ビットを８ビットずつに分割し、各８ビットデータに対してＳ−Ｂｏｘを行って、ＳｈｉｆｔＲｏｗｓの入力とする。
【００１８】
図３は、Ｓ−Ｂｏｘを説明する概念図である。Ｓ−Ｂｏｘは、図３に示すように、ＡｄｄＲｏｕｎｄＫｅｙの出力８ビット分のデータを入力し、入力した８ビットデータに対して、非線形処理である逆元計算と、線形処理であるＡｆｆｉｎｅ変換とを行い、ＳｈｉｆｔＲｏｗｓの入力８ビット分のデータを出力する。
【００１９】
逆元計算は、入力データＸを拡大体ＧＦ２８上の逆数Ｘ−１に変換する非線形処理であり、拡大体ＧＦ２８上の乗算の繰り返し演算によっても実現できる。
逆元計算：Ｘ−１←  Ｆ（Ｘ）
ここで、ＸからＸ−１への対応関係は一意に定義されており、その対応関係はテーブルとして表現されることが一般的であるため、本実施形態でも、逆元計算はテーブルを用いて行うものとして説明する。逆元計算は、ＡＥＳの暗号化処理および復号処理で共通して使用されるため、逆元計算を用いてＳ−Ｂｏｘを実装することで、ハードウェア実装の場合は回路規模の削減、ソフトウェア実装の場合はメモリの削減が可能である。
【００２０】
図４は、ＡＥＳの暗号化処理および復号処理を実行する暗号処理部１００の概要を示すブロック図である。図４の例では、ＡＥＳの暗号化処理を、線形処理と非線形処理（逆元計算）で模式的に表している。
【００２１】
暗号処理部１００は、入力した平文をデータ処理部１１０で処理し、暗号文として出力する。データ処理部１１０は、入力されたデータｄ１をデータｄ２に変換して出力する。データ処理部１１０は、第１線形処理部１１１と、逆元計算部１１２と、第２線形処理部１１３とを有する。第１線形処理部１１１は、データｄ１をデータＤに変換する線形処理Ｌ１（Ｄ＝Ｌ１（ｄ１））を行って、データＤを出力する。逆元計算部１１２は、データＤを拡大体ＧＦ２８上の逆数Ｄ−１に変換する非線形処理Ｆ（Ｄ−１＝Ｆ（Ｄ））を行って、データＤ−１を出力する。第２線形処理部１１３は、データＤ−１をデータｄ２に変換する線形処理Ｌ２（ｄ２＝Ｌ２（Ｄ−１））を行って、データｄ２を出力する。
【００２２】
第１線形処理部１１１による線形処理Ｌ１は、ＡＥＳのラウンド関数のＡｄｄＲｏｕｎｄＫｅｙである。逆元計算部１１２による非線形処理Ｆは、ＳｕｂＢｙｔｅｓを行うＳ−Ｂｏｘの逆元計算である。第２線形処理部１１３による線形処理Ｌ２は、第１ラウンドから最終ラウンドの１つ前のラウンドまでは、Ｓ−ＢｏｘのＡｆｆｉｎｅ変換→ＳｈｉｆｔＲｏｗｓ→ＭｉｘＣｏｌｕｍｎｓであり、最終ラウンドでは、Ｓ−ＢｏｘのＡｆｆｉｎｅ変換→ＳｈｉｆｔＲｏｗｓ→ＡｄｄＲｏｕｎｄＫｅｙである。
【００２３】
暗号処理部１００は、第１ラウンドでは、入力した平文をデータｄ１としてデータ処理部１１０に入力する。その後、第２ラウンドから最終ラウンドまで、前のラウンドでデータ処理部１１０が出力したデータｄ２をデータｄ１としてデータ処理部１１０に入力する。そして、最終ラウンドでデータ処理部１１０から出力されるデータｄ２を、暗号文として出力する。
【００２４】
暗号処理部１００による処理の流れを纏めると、以下の（１）〜（５）ようになる。
（１）平文を入力
（２）第１ラウンド
ｄ１←平文
線形処理Ｌ１（ＡｄｄＲｏｕｎｄＫｅｙ）
非線形処理Ｆ（逆元計算）
線形処理Ｌ２（Ａｆｆｉｎｅ変換→ＳｈｉｆｔＲｏｗｓ→ＭｉｘＣｏｌｕｍｎｓ）
（３）第２ラウンド〜最終ラウンドの１つ前のラウンド
ｄ１←ｄ２
線形処理Ｌ１（ＡｄｄＲｏｕｎｄＫｅｙ）
非線形処理Ｆ（逆元計算）
線形処理Ｌ２（Ａｆｆｉｎｅ変換→ＳｈｉｆｔＲｏｗｓ→ＭｉｘＣｏｌｕｍｎｓ）
（４）最終ラウンド
ｄ１←ｄ２
線形処理Ｌ１（ＡｄｄＲｏｕｎｄＫｅｙ）
非線形処理Ｆ（逆元計算）
線形処理Ｌ２（Ａｆｆｉｎｅ変換→ＳｈｉｆｔＲｏｗｓ→ＡｄｄＲｏｕｎｄＫｅｙ）
暗号文←ｄ２
（５）暗号文を出力
【００２５】
（実施形態の暗号処理装置）
次に、実施形態の暗号処理装置について説明する。実施形態の暗号処理装置は、サイドチャネル攻撃に対して安全性を高めた暗号処理装置である。サイドチャネル攻撃に対する典型的な対策では、暗号化処理ないし復号処理を行っている途中のデータＸ（上記のデータｄ１，ｄ２，Ｄなど。以下、これらの処理途中のデータを中間値と呼ぶ。）を常に乱数などのマスク値で隠蔽（マスク）する処理を行う。平文をマスク値でマスクしてから暗号化処理を実行し、最後にマスク値を剥がして（アンマスクして）暗号文を出力する方法は、マスク対策と呼ばれる。なお、ここでマスク値とは、データを隠蔽（マスク）するために用いるデータを意味する。つまり、乱数に限らず、マスク対策に用いるデータ全般をマスク値と呼ぶ。
【００２６】
以下では、中間値Ｘに対してマスク値Ｒを排他的論理和（ＸＯＲ）した状態をＸ（＋）Ｒと記述し、このときのマスク値ＲをＸＯＲマスクと呼ぶ。中間値Ｘのマスクに用いるマスク値Ｒのビット長は、中間値Ｘのビット長と等しくとることが一般的である。
【００２７】
ＸＯＲマスクによるマスク対策は、線形処理Ｌに対してはＬ（Ｘ（＋）Ｒ）＝Ｌ（Ｘ）（＋）Ｌ（Ｒ）の関係が成り立つため、線形処理Ｌとの相性がよい。すなわち、ＸＯＲマスクによりマスクされた中間値に対する演算Ｌ（Ｘ（＋）Ｒ）と、ＸＯＲマスクに対する演算Ｌ（Ｒ）とを別々に実行しておき、最終的にＸＯＲマスクを剥がす際には両者の演算で得られる値の排他的論理和をとることで、正しい結果を得ることができる。このとき、Ｌ（Ｘ）を直接計算する必要がない（つまり、マスクがかかっていない真の中間値Ｘに対する計算を実行しない）ため、中間値Ｘを常にマスク値で隠蔽した状態で暗号化処理ないし復号処理を実行できる。
【００２８】
一方、非線形処理Ｆは、Ｆ（Ｘ（＋）Ｒ）≠Ｆ（Ｘ）（＋）Ｆ（Ｒ）であることから、非線形処理Ｆの実行後にＸＯＲマスクを剥がすことができない。すなわち、中間値Ｘとマスク値Ｒとの排他的論理和であるＸ（＋）Ｒを、非線形処理Ｆにそのまま入力することができないという問題がある。これを解決する方法の１つとして、以下に示すようなＴｍｉ，ｍｏを、Ｆの代わりに用いる方法が知られている。
Ｆ（Ｘ）（＋）ｍｏ←Ｔｍｉ，ｍｏ（Ｘ（＋）ｍｉ）
【００２９】
Ｔｍｉ，ｍｏは、ｍｉと、ｍｉに対する対応関係が予め定められたｍｏとをＸＯＲマスクとして用い、Ｘ（＋）ｍｉの入力に対して、Ｆ（Ｘ）（＋）ｍｏを出力する非線形処理である。以下、このような非線形処理を、ＸＯＲマスク付き非線形処理という。なお、ｍｉ，ｍｏはＸＯＲマスクであるが、非線形処理に用いるマスク値であるため、本実施形態ではテーブルマスクと呼び、通常のＸＯＲマスクと区別する。
【００３０】
８ビット入力値を８ビット出力値に変換する非線形処理Ｆは、８ビット×２５６サイズのテーブルを要する。テーブルマスクｍｉ，ｍｏの値を固定とした場合のＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏのテーブルサイズは、非線形処理Ｆと同様に８ビット×２５６サイズである。ただし、テーブルマスクｍｉ，ｍｏが取り得る値の全ての組み合わせに対してＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏのテーブルを用意する場合は、８ビット×２５６サイズのテーブルが、６５，５３６（＝２５６×２５６）個必要となる。
【００３１】
ソフトウェア実装では、非線形処理Ｆの実行ごとにテーブルマスクｍｉ，ｍｏをランダムに選択し、ＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏのテーブルを再作成して処理を行うことも可能である。ハードウェア実装では、通常、テーブルマスクｍｉ，ｍｏの値ごとにＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏを組み合わせ回路として実装するため、テーブルマスクｍｉ，ｍｏの全ての組み合わせに対するＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏのテーブルを用意しておくことは、回路規模の大幅な増大を招く。そのため、６５，５３６個よりも十分に小さいｎ個のテーブルのみを用意しておき、非線形処理Ｆの実行ごとにｎ個のテーブルの中から１個を選択して使用する。これは、非線形処理Ｆ用に使用可能なテーブルマスクｍｉ，ｍｏのペアがｎ個に限定されることを意味する。ソフトウェア実装においても、非線形処理Ｆの実行ごとにＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏのテーブルを再作成する実装は処理時間が増大するため、テーブル数を限定する方法の適用は有効である。
【００３２】
しかし、ＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏのテーブル数を限定すると、テーブルマスクｍｉ，ｍｏの取り得る値が限定されるため、乱数性が低下し、サイドチャネル攻撃に対して脆弱になる懸念がある。そこで、本実施形態の暗号処理装置では、ＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏに対して乱数の乗算によるマスク対策を導入することで、ＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏにおける乱数性の低下を補い、サイドチャネル攻撃に対する安全性を高めるようにしている。
【００３３】
図５は、実施形態の暗号処理装置の概略構成を示すブロック図である。実施形態の暗号処理装置は、暗号処理部１と、乱数生成器２と、記憶装置３と、を備える。暗号処理部１は、暗号化処理の場合は平文を暗号化して暗号文を出力し、復号処理の場合は暗号文を復号して平文を出力する。このとき、暗号処理部１は、乱数生成器２が生成する乱数、および記憶装置３が記憶するテーブルマスクｍｉ，ｍｏを用いて、暗号処理における中間値をマスクする。なお、実施形態の暗号処理装置は、ＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏのテーブルを回路として組み込む場合は、記憶装置３を備えない構成とすることもできる。
【００３４】
図６は、暗号処理部１の概要を示すブロック図である。実施形態の暗号処理装置が備える暗号処理部１は、図４に示した暗号処理部１００に対してマスク対策を適用したものである。
【００３５】
暗号処理部１は、乱数生成器２が生成した乱数をＸＯＲマスクｒ１として用いて平文との排他的論理和をとり、ＸＯＲマスクｒ１でマスクされた中間値ｄ１（＋）ｒ１とＸＯＲマスクｒ１を変形データ処理部１０に入力する。変形データ処理部１０からは、ＸＯＲマスクｒ２でマスクされた中間値ｄ２（＋）ｒ２とＸＯＲマスクｒ２が出力される。暗号処理部１は、規定のラウンド回数の繰り返しが終了するまでは、前のラウンドで変形データ処理部１０から出力されたｄ２（＋）ｒ２とｒ２を、次のラウンドの変形データ処理部１０への入力（ｄ１（＋）ｒ１←ｄ２（＋）ｒ２、ｒ１←ｒ２）として、変形データ処理部１０での処理を繰り返す。そして、暗号処理部１は、最終ラウンドの変形データ処理部１０での処理が終了したら、変形データ処理部１０から出力されたｄ２（＋）ｒ２とｒ２との排他的論理和をとることでマスクを剥がし、ｄ２を暗号文として出力する。
【００３６】
図７は、変形データ処理部１０の概要を示すブロック図である。変形データ処理部１０は、第１線形処理部１１と、変形逆元計算部１２と、第２線形処理部１３と、第３線形処理部１４と、第４線形処理部１５とを有する。
【００３７】
第１線形処理部１１は、変形データ処理部１０に入力されたｄ１（＋）ｒ１に対して線形処理Ｌ１を行って、Ｄ（＋）Ｒ１を出力する。また、第３線形処理部１４は、変形データ処理部１０に入力されたｒ１に対して線形処理Ｌ１を行って、Ｒ１を出力する。ここで、Ｄ＝Ｌ１（ｄ１）、Ｒ１＝Ｌ１（ｒ１）である。
【００３８】
変形逆元計算部１２は、第１線形処理部１１から出力されたＤ（＋）Ｒ１および第３線形処理部１４から出力されたＲ１を入力し、Ｄ−１（＋）Ｒ２およびＲ２を出力する。変形逆元計算部１２は、乱数を乗算するマスク対策を導入したＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏを用いて構成される。なお、変形逆元計算部１２の具体例については、詳細を後述する。
【００３９】
第２線形処理部１３は、変形逆元計算部１２から出力されたＤ−１（＋）Ｒ２に対して線形処理Ｌ２を行って、ｄ２（＋）ｒ２を出力する。また、第４線形処理部１５は、変形逆元計算部１２から出力されたＲ２に対して線形処理Ｌ２を行って、ｒ２を出力する。ここで、ｄ２＝Ｌ２（Ｄ−１）、ｒ２＝Ｌ２（Ｒ２）である。
【００４０】
次に、本実施形態の変形逆元計算部１２の具体例（第１実施例１〜第３実施例）について、乱数を乗算するマスク対策を導入しない構成例（第１比較例）、および乱数を乗算するマスク対策のみを適用した構成例（第２比較例）と対比しながら説明する。なお、以下では、ＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏのｎ個のテーブルを区別するためにテーブル番号ｓ（ｓ＝１，２，・・・，ｎ）を用い、テーブル番号ｓに対応するＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏをＴｍｉ，ｍｏ［ｓ］、テーブル番号ｓに対応するテーブルマスクｍｉ，ｍｏをｍｉ［ｓ］，ｍｏ［ｓ］と表記する。
【００４１】
＜第１比較例＞
図８は、第１比較例の変形逆元計算部２００を示すブロック図である。第１比較例の変形逆元計算部２００は、ＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏを行うＸＯＲマスク付き非線形処理部２１０を備える。第１比較例の変形逆元計算部２００では、テーブル番号ｓ＝１を選択した場合、記憶装置２２０からテーブルマスクｍｉ［１］を読み出し、Ｄ（＋）Ｒ１に対して、ＸＯＲマスクＲ１からテーブルマスクｍｉ［１］へのマスク値の付け替えを行った後、Ｄ（＋）ｍｉ［１］をＸＯＲマスク付き非線形処理部２１０に入力する。そして、乱数生成器２３０から新たなＸＯＲマスクとなる乱数Ｒ２を入力するとともに、記憶装置２２０からテーブルマスクｍｏ［１］を読み出し、ＸＯＲマスク付き非線形処理部２１０から出力されるＤ−１（＋）ｍｏ［１］に対して、テーブルマスクｍｏ［１］からＸＯＲマスクＲ２へのマスク値の付け替えを行い、Ｄ−１（＋）Ｒ２とＲ２とを出力する。
【００４２】
第１比較例の変形逆元計算部２００の処理の流れを纏めると、以下の（１）〜（５）のようになる。
（１）Ｄ（＋）Ｒ１，Ｒ１を入力
（２）マスク値付け替え
テーブル番号ｓを選択
Ｄ（＋）ｍｉ［ｓ］←（Ｄ（＋）Ｒ１）（＋）Ｒ１（＋）ｍｉ［ｓ］
（３）ＸＯＲマスク付き非線形変換処理Ｔｍｉ，ｍｏ（逆元計算）
Ｄ−１（＋）ｍｏ［ｓ］←Ｔｍｉ，ｍｏ［ｓ］（Ｄ（＋）ｍｉ［ｓ］）
（４）マスク値付け替え
乱数Ｒ２を入力
Ｄ−１（＋）Ｒ２←（Ｄ−１（＋）ｍｏ［ｓ］）（＋）Ｒ２（＋）ｍｏ［ｓ］
（５）Ｄ−１（＋）Ｒ２，Ｒ２を出力
【００４３】
第１比較例の変形逆元計算部２００では、ＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏ[ｓ]を行うＸＯＲマスク付き非線形処理部２１０の入力および出力がテーブルマスクｍｉ[ｓ]，ｍｏ［ｓ］によりマスクされているが、選択可能なテーブル番号ｓが１〜ｎに限定されており、ｍｉ[ｓ]，ｍｏ［ｓ］も限定されるため、乱数性が低下している。これは、ＤＰＡなどのサイドチャネル攻撃が成功するリスクが高まることを意味する。また、選択されたテーブル番号ｓに対応するＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏ[ｓ]が行われる間、テーブルマスクｍｉ，ｍｏはｍｉ[ｓ]，ｍｏ［ｓ］に固定されるため、テーブルマスクｍｉ，ｍｏのみのマスク対策では、局所的な電磁波を測定してＤＰＡと同様に秘密鍵を推定するＤＥＭＡ（Differential  Electro-Magnetic  Analysis）や、それらのより強力な攻撃である高次ＤＰＡや高次ＤＥＭＡなどのサイドチャネル攻撃に対して、十分な安全性を確保できない懸念がある。
【００４４】
＜第２比較例＞
第２比較例の変形逆元計算部は、ＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏを用いず、非線形処理Ｆ（逆元計算）に対してマスク値（乱数）を乗算するマスク対策のみを適用した構成例である。以下では、中間値Ｘに対してマスク値Ｒを乗算した状態をＸ（＊）Ｒと記述し、このときのマスク値Ｒを乗算マスクと呼ぶ。
【００４５】
図９は、第２比較例の変形逆元計算部３００を示すブロック図である。第２比較例の変形逆元計算部３００は、非線形処理Ｆ（逆元計算）を行う非線形処理部３１０を備える。第２比較例の変形逆元計算部３００では、乱数生成器３２０から乗算マスクとなる乱数Ａを入力し、Ｄ（＋）Ｒ１に対して、ＸＯＲマスクＲ１から乗算マスクＡへのマスク値の付け替えを行った後、Ｄ（＊）Ａを非線形処理部３１０に入力する。そして、乱数生成器３２０から乱数ｒを入力して新たなＸＯＲマスクＲ２を生成するとともに、非線形処理部３１０から出力されるＤ−１（＊）Ａ−１に対して、逆元計算された乗算マスクＡからＸＯＲマスクＲ２へのマスク値の付け替えを行い、Ｄ−１（＋）Ｒ２とＲ２とを出力する。
【００４６】
第２比較例の変形逆元計算部３００の処理の流れを纏めると、以下の（１）〜（５）のようになる。
（１）Ｄ（＋）Ｒ１，Ｒ１を入力
（２）マスク値付け替え
乱数Ａ（乗算マスク）を入力
Ｒａ←Ｒ１（＊）Ａ
Ｄ（＊）Ａ←（（Ｄ（＋）Ｒ１）（＊）Ａ）（＋）Ｒａ
（３）非線形処理Ｆ（逆元計算）
Ｄ−１（＊）Ａ−１←Ｆ（Ｄ（＊）Ａ）
（４）マスク値付け替え
乱数ｒを入力
Ｄ−１（＋）Ｒ２←（（Ｄ−１（＊）Ａ−１）（＋）ｒ）（＊）Ａ
Ｒ２←ｒ（＊）Ａ
（５）Ｄ−１（＋）Ｒ２，Ｒ２を出力
【００４７】
第２比較例の変形逆元計算部３００では、逆元計算を行う非線形処理部３１０の入力および出力が乗算マスクＡによりマスクされているが、乗算マスクＡによるマスク対策のみでは、例えば、平文を操作して中間値Ｄ＝０となるような演算が実行された場合に乗算マスクＡが施された中間値  Ｄ（＊）Ａも必ずゼロになることを利用して秘密鍵を特定する攻撃が行われた場合に、秘密鍵が漏洩する懸念がある。
【００４８】
＜第１実施例＞
図１０は、第１実施例の変形逆元計算部１２Ａを示すブロック図である。第１実施例の変形逆元計算部１２Ａは、第１変換部２１Ａと、ＸＯＲマスク付き非線形処理部２２と、第２変換部２３と、を備える。
【００４９】
第１変換部２１Ａは、ＸＯＲマスクＲ１でマスクされた中間値であるＤ（＋）Ｒ１（第３データ）と、ＸＯＲマスクＲ１（第４マスク値）と、乱数生成器２が生成した乗算マスクとなる乱数Ａ（第１マスク値）とを入力し、乗算マスクＡと、記憶装置３から読み出したテーブルマスクｍｉ［ｓ］（第２マスク値）と、ＸＯＲマスクＲ１とを用いて、Ｄ（＋）Ｒ１をＤ（＊）Ａ（＋）ｍｉ［ｓ］（第１データ）に変換する。つまり、第１変換部２１Ａは、Ｄ（＋）Ｒ１に対して、ＸＯＲマスクＲ１から乗算マスクＡおよびテーブルマスクｍｉ［ｓ］へのマスク値の付け替えを行う。
【００５０】
具体的には、第１変換部２１Ａは、例えば、乱数生成器２が生成した乱数ＡとＸＯＲマスクＲ１とを演算部３１で乗算し、その乗算により得られる値をＲａとする。また、第１変換部２１Ａは、ＸＯＲマスクＲ１でマスクされた中間値であるＤ（＋）Ｒ１と乱数Ａとを演算部３２で乗算し、その乗算により得られる値と、演算部３１の乗算により得られるＲａとの排他的論理和を演算部３３で演算し、さらに、演算部３３の演算により得られる値と、記憶装置３から読み出したテーブルマスクｍｉ［ｓ］との排他的論理和を演算部３４で演算することで、Ｄ（＋）Ｒ１をＤ（＊）Ａ（＋）ｍｉ［ｓ］に変換する。
【００５１】
ＸＯＲマスク付き非線形処理部２２は、第１変換部２１ＡによってＤ（＋）Ｒ１から変換されたＤ（＊）Ａ（＋）ｍｉ［ｓ］を入力し、Ｄ（＊）Ａ（＋）ｍｉ［ｓ］に対してＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏ［ｓ］を行い、Ｄ−１（＊）Ａ−１（＋）ｍｏ［ｓ］（第２データ）を出力する。非線形処理Ｆ（逆元計算）の数学的性質から、Ｄ−１（＊）Ａ−１←Ｆ（Ｄ（＊）Ａ）であり、非線形処理ＦをＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏに置き換えた場合、Ｄ−１（＊）Ａ−１（＋）ｍｏ←Ｔｍｉ，ｍｏ（Ｄ（＊）Ａ（＋）ｍｉ）が成り立つ。ここで、（＊）は拡大体ＧＦ２８上の乗算を表す。ｍｏ［ｓ］（第３マスク値）は、テーブル番号ｓのテーブルによりテーブルマスクｍｉ［ｓ］に対応付けられている。
【００５２】
第２変換部２３は、ＸＯＲマスク付き非線形処理部２２から出力されるＤ−１（＊）Ａ−１（＋）ｍｏ［ｓ］と、乗算マスクＡと、乱数生成器２が生成した乱数ｒとを入力し、乗算マスクＡと、乱数ｒとを用いて、Ｄ−１（＊）Ａ−１（＋）ｍｏ［ｓ］をＤ−１（＋）Ｒ２（第４データ）に変換して出力するとともに、乱数ｒと、記憶装置３から読み出したテーブルマスクｍｏ［ｓ］と、乗算マスクＡとを用いて、ＸＯＲマスクＲ２（第５マスク値）を演算して出力する。つまり、第２変換部２３は、新たなＸＯＲマスクＲ２を生成するとともに、Ｄ−１（＊）Ａ−１（＋）ｍｏ［ｓ］に対して、逆元計算された乗算マスクＡ−１およびテーブルマスクｍｏ［ｓ］からＸＯＲマスクＲ２へのマスク値の付け替えを行う。
【００５３】
具体的には、第２変換部２３は、例えば、ＸＯＲマスク付き非線形処理部２２から出力されるＤ−１（＊）Ａ−１（＋）ｍｏ［ｓ］と乱数生成器２が生成した乱数ｒとの排他的論理和を演算部３５で演算し、その演算により得られる値に対して、乱数Ａを演算部３６で乗算することで、Ｄ−１（＊）Ａ−１（＋）ｍｏ［ｓ］をＤ−１（＋）Ｒ２に変換する。また、第２変換部２３は、乱数ｒと記憶装置３から読み出したテーブルマスクｍｏ［ｓ］との排他的論理和を演算部３７で演算し、その演算により得られる値に対して、乱数Ａを演算部３８で乗算することで、新たなＸＯＲマスクＲ２を生成する。なお、第２変換部２３での演算に用いる乱数ｒは、変形逆元計算部１２Ａの出力の乱数性をさらに高めるために用いられるものであり、乱数ｒを用いない構成とすることもできる。この場合、新たなＸＯＲマスクＲ２は、乱数Ａとテーブルマスクｍｏ［ｓ］との乗算により生成される。
【００５４】
第１実施例の変形逆元計算部１２Ａの処理の流れを纏めると、以下の（１）〜（５）のようになる。
（１）Ｄ（＋）Ｒ１，Ｒ１を入力
（２）マスク値付け替え
テーブル番号ｓを選択
乱数Ａ（乗算マスク）を入力
Ｒａ←Ｒ１（＊）Ａ
Ｄ（＊）Ａ（＋）ｍｉ［ｓ］←（（Ｄ（＋）Ｒ１）（＊）Ａ）（＋）Ｒａ（＋）ｍｉ［ｓ］
（３）ＸＯＲマスク付き非線形変換処理Ｔｍｉ，ｍｏ（逆元計算）
Ｄ−１（＊）Ａ−１（＋）ｍｏ［ｓ］←Ｔｍｉ，ｍｏ［ｓ］（Ｄ（＊）Ａ（＋）ｍｉ［ｓ］）
（４）マスク値付け替え
乱数ｒを入力
Ｄ−１（＋）Ｒ２←（（Ｄ−１（＊）Ａ−１（＋）ｍｏ［ｓ］）（＋）ｒ）（＊）Ａ
Ｒ２←（ｍｏ［ｓ］（＋）ｒ）（＊）Ａ
（５）Ｄ−１（＋）Ｒ２，Ｒ２を出力
【００５５】
以上のように、第１実施例の変形逆元計算部１２Ａでは、ＸＯＲマスク付き非線形処理部２２の入出力が、テーブルマスクｍｉ［ｓ］，ｍｏ［ｓ］だけでなく乗算マスクＡも用いてマスクされる。ここで、乗算マスクＡはゼロ以外の任意の値（８ビット変数）を取り得るため、ＸＯＲマスク付き非線形処理部２２での乱数性が高められることになる。したがって、第１実施例の変形逆元計算部１２Ａを備える暗号処理装置は、サイドチャネル攻撃に対して高い安全性を確保することができる。また、第１実施例の変形逆元計算部１２Ａを備える暗号処理装置は、ＸＯＲマスク付き非線形処理部２２での乱数性が高められるため、局所的な電磁波を測定してＤＰＡと同様に秘密鍵を推定するＤＥＭＡや、それらのより強力な攻撃である高次ＤＰＡや高次ＤＥＭＡなどのサイドチャネル攻撃に対しても、十分な安全性を確保することができる。さらに、第１実施例の変形逆元計算部１２Ａを備える暗号処理装置は、乗算マスクＡのみで非線形処理の入出力をマスクする場合に懸念される攻撃に対しても、十分な安全性を確保することができる。
【００５６】
なお、第１実施例の変形逆元計算部１２Ａでの処理は、ＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏ［ｓ］（逆元計算）、排他的論理和、および乗算で構成されるが、そのうち排他的論理和は軽い演算であるため、主な処理コストは、逆元計算１回、乗算４回であり、第１比較例の変形逆元計算部２００に対する処理コストの増加分は、乗算４回である。
【００５７】
＜第２実施例＞
図１１は、第２実施例の変形逆元計算部１２Ｂを示すブロック図である。第２実施例の変形逆元計算部１２Ｂは、第１変換部２１Ｂと、ＸＯＲマスク付き非線形処理部２２と、第２変換部２３と、を備える。ＸＯＲマスク付き非線形処理部２２および第２変換部２３は第１実施例と同様であるため、以下では説明を省略する。
【００５８】
第１変換部２１Ｂは、第１実施例の変形逆元計算部１２Ａが備える第１変換部２１Ａと同様に、乗算マスクＡと、記憶装置３から読み出したテーブルマスクｍｉ［ｓ］と、ＸＯＲマスクＲ１とを用いて、Ｄ（＋）Ｒ１をＤ（＊）Ａ（＋）ｍｉ［ｓ］に変換する。ただし、第１変換部２１Ｂは、乱数生成器２が生成した乱数を乗算マスクＡとして用いるのではなく、乗算マスクＡを演算により求める。
【００５９】
具体的には、第１変換部２１Ｂは、例えば、ＸＯＲマスクＲ１に対して、逆元計算部４１（第１演算部）により逆元計算を行い、ＸＯＲマスクＲ１の拡大体ＧＦ２８上の逆数Ｒ１−１を求める。そして、第１変換部２１Ｂは、逆元計算部４１の逆元計算で求めたＲ１−１と記憶装置３から読み出したテーブルマスクｍｉ［ｓ］とを演算部４２（第２演算部）で乗算し、その乗算により得られる値を乗算マスクＡとする。そして、第１変換部２１Ｂは、ＸＯＲマスクＲ１でマスクされた中間値であるＤ（＋）Ｒ１と演算部４２の乗算により得られる乗算マスクＡとを演算部４３（第３演算部）で乗算することで、Ｄ（＋）Ｒ１をＤ（＊）Ａ（＋）ｍｉ［ｓ］に変換する。
【００６０】
第２実施例の変形逆元計算部１２Ｂの処理の流れを纏めると、以下の（１）〜（５）のようになる。
（１）Ｄ（＋）Ｒ１，Ｒ１を入力
（２）マスク値付け替え
テーブル番号ｓを選択
Ｒ１−１←逆元計算（Ｒ１）
Ａ←Ｒ１−１（＊）ｍｉ［ｓ］
Ｄ（＊）Ａ（＋）ｍｉ［ｓ］←（Ｄ（＋）Ｒ１）（＊）Ａ
（３）ＸＯＲマスク付き非線形変換処理Ｔｍｉ，ｍｏ（逆元計算）
Ｄ−１（＊）Ａ−１（＋）ｍｏ［ｓ］←Ｔｍｉ，ｍｏ［ｓ］（Ｄ（＊）Ａ（＋）ｍｉ［ｓ］）
（４）マスク値付け替え
乱数ｒを入力
Ｄ−１（＋）Ｒ２←（（Ｄ−１（＊）Ａ−１（＋）ｍｏ［ｓ］）（＋）ｒ）（＊）Ａ
Ｒ２←（ｍｏ［ｓ］（＋）ｒ）（＊）Ａ
（５）Ｄ−１（＋）Ｒ２，Ｒ２を出力
【００６１】
以上のように、第２実施例の変形逆元計算部１２Ｂでは、ＸＯＲマスク付き非線形処理部２２の入出力が、テーブルマスクｍｉ［ｓ］，ｍｏ［ｓ］だけでなく乗算マスクＡも用いてマスクされるため、第１実施例の変形逆元計算部１２Ａと同様に、ＸＯＲマスク付き非線形処理部２２での乱数性が高められることになる。したがって、第２実施例の変形逆元計算部１２Ｂを備える暗号処理装置は、第１実施例の変形逆元計算部１２Ａを備える暗号処理装置と同様の効果を得ることができる。
【００６２】
また、第２実施例の変形逆元計算部１２Ｂでは、ＸＯＲマスクＲ１とテーブルマスクｍｉ［ｓ］から求めたＲ１−１（＊）ｍｉ［ｓ］を乗算マスクＡとして用いるため、ＸＯＲマスクＲ１でマスクされた中間値Ｄ（＋）Ｒ１に対するマスク値の付け替えの処理が乗算１回のみとなり、マスク値の付け替え処理を簡略化することができる。サイドチャネル攻撃では中間値Ｄに対する演算処理から秘密鍵が漏洩することから、マスク値の付け替えの処理の簡略化はサイドチャネル攻撃に対する耐性を向上させることに繋がる。
【００６３】
また、乗算マスクＡを生成するための演算部４２の演算は、ＸＯＲマスクＲ１とテーブルマスクｍｉ［ｓ］との乗算であるため、通常の乗算を、予め定められた値ｍｉ［ｓ］に依存した軽量演算で置き換えることができる。この演算部４２の軽量化は、ハードウェア実装では回路規模やデータパス長の削減、ソフトウェア実装では処理時間の削減に繋がる。
【００６４】
また、第２実施例の変形逆元計算部１２Ｂでは、乗算マスクＡを演算により求めるようにしているので、第１実施例と比較して、乱数生成器２による乱数の生成コストを削減することができる。これにより、乗算マスクによるマスク対策を導入した場合であっても、必要とする乱数のビット長を、乗算マスクによるマスク対策を導入しない第１比較例と同等とすることができる。
【００６５】
なお、第２実施例の変形逆元計算部１２Ｂでの主な処理コストは、逆元計算２回、乗算３回（軽量演算を除く）であり、第１比較例の変形逆元計算部２００に対する処理コストの増加分は、逆元計算１回、乗算３回である。
【００６６】
＜第３実施例＞
図１２は、第３実施例の変形逆元計算部１２Ｃを示すブロック図である。第３実施例の変形逆元計算部１２Ｃは、第１変換部２１Ｃと、ＸＯＲマスク付き非線形処理部２２と、第２変換部２３と、を備える。ＸＯＲマスク付き非線形処理部２２および第２変換部２３は第１実施例および第２実施例と同様であるため、以下では説明を省略する。
【００６７】
第１変換部２１Ｃは、第２実施例の変形逆元計算部１２Ｂが備える第１変換部２１Ｂと同様に、乗算マスクＡを演算により求める構成である。ただし、第１変換部２１Ｃは、ＸＯＲマスク付き非線形処理部２２が、複数（ｎ個）のテーブルのうちの１つ（テーブル番号ｓ）を使用してＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏ［ｓ］（逆元計算）を行う構成であることを利用し、ＸＯＲマスク付き非線形処理部２２が使用していない他のテーブル（テーブル番号ｓ’）を用いて、逆元計算の代わりにＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏ［ｓ’］を行うことで、第２実施例の変形逆元計算部１２Ｂが備える第１変換部２１Ｂの逆元計算部４１を不要としている。
【００６８】
具体的には、第１変換部２１Ｃは、例えば、ＸＯＲマスクＲ１と記憶装置３から読み出したテーブルマスクｍｉ［ｓ’］との排他的論理和を演算部５１で演算し、その演算により得られる値に対して、ＸＯＲマスク付き非線形処理部５２においてＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏ［ｓ’］を行う。そして、第１変換部２１Ｃは、ＸＯＲマスク付き非線形処理部５２の演算により得られる値と記憶装置３から読み出したテーブルマスクｍｏ［ｓ’］との排他的論理和を演算部５３で演算し、ＸＯＲマスクＲ１の拡大体ＧＦ２８上の逆数Ｒ１−１を求める。その後、第１変換部２１Ｃは、第２実施例の変形逆元計算部１２Ｂが備える第１変換部２１Ｂと同様に、求めたＲ１−１と記憶装置３から読み出したテーブルマスクｍｉ［ｓ］とを演算部５４で乗算し、その乗算により得られる値を乗算マスクＡとする。そして、第１変換部２１Ｃは、ＸＯＲマスクＲ１でマスクされた中間値であるＤ（＋）Ｒ１と演算部５４の乗算により得られる乗算マスクＡとを演算部５５で乗算することで、Ｄ（＋）Ｒ１をＤ（＊）Ａ（＋）ｍｉ［ｓ］に変換する。
【００６９】
第３実施例の変形逆元計算部１２Ｃの処理の流れを纏めると、以下の（１）〜（５）のようになる。
（１）Ｄ（＋）Ｒ１，Ｒ１を入力
（２）マスク値付け替え
テーブル番号ｓ，ｓ’を選択
Ｒ１−１←Ｔｍｉ，ｍｏ［ｓ’］（Ｒ１（＋）ｍｉ［ｓ’］）（＋）ｍｏ［ｓ’］
Ａ←Ｒ１−１（＊）ｍｉ［ｓ］
Ｄ（＊）Ａ（＋）ｍｉ［ｓ］←（Ｄ（＋）Ｒ１）（＊）Ａ
（３）ＸＯＲマスク付き非線形変換処理Ｔｍｉ，ｍｏ（逆元計算）
Ｄ−１（＊）Ａ−１（＋）ｍｏ［ｓ］←Ｔｍｉ，ｍｏ［ｓ］（Ｄ（＊）Ａ（＋）ｍｉ［ｓ］）
（４）マスク値付け替え
乱数ｒを入力
Ｄ−１（＋）Ｒ２←（（Ｄ−１（＊）Ａ−１（＋）ｍｏ［ｓ］）（＋）ｒ）（＊）Ａ
Ｒ２←（ｍｏ［ｓ］（＋）ｒ）（＊）Ａ
（５）Ｄ−１（＋）Ｒ２，Ｒ２を出力
【００７０】
以上のように、第３実施例の変形逆元計算部１２Ｃでは、ＸＯＲマスク付き非線形処理部２２の入出力が、テーブルマスクｍｉ［ｓ］，ｍｏ［ｓ］だけでなく乗算マスクＡも用いてマスクされるため、第１実施例の変形逆元計算部１２Ａや第２実施例の変形逆元計算部１２Ｂと同様に、ＸＯＲマスク付き非線形処理部２２での乱数性が高められることになる。したがって、第３実施例の変形逆元計算部１２Ｃを備える暗号処理装置は、第１実施例の変形逆元計算部１２Ａを備える暗号処理装置や、第２実施例の変形逆元計算部１２Ｂを備える暗号処理装置と同様の効果を得ることができる。
【００７１】
また、第３実施例の変形逆元計算部１２Ｃでは、ＸＯＲマスクＲ１とテーブルマスクｍｉ［ｓ］から求めたＲ１−１（＊）ｍｉ［ｓ］を乗算マスクＡとして用いるため、第２実施例の変形逆元計算部１２Ｂを備える暗号処理装置と同様の効果を得ることができる。
【００７２】
さらに、第３実施例の変形逆元計算部１２Ｃでは、ＸＯＲマスク付き非線形処理部２２が使用していない他のテーブル（テーブル番号ｓ’）を用いて、第２実施例の変形逆元計算部１２Ｂの第１変換部２１Ｂが行う逆元計算の代わりに、ＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏ［ｓ’］を行うため、第２実施例の変形逆元計算部１２Ｂよりも処理コストを軽減することができる。すなわち、サイドチャネル攻撃に対する対策では、ＸＯＲマスク付き非線形処理Ｔｍｉ，ｍｏに用いるｎ個のテーブルのうち、選択されていないテーブルを停止させる制御を行うと攻撃が成功する危険性が高まるため、選択されていないテーブルを用いたダミー処理を行うことが多い。第３実施例の変形逆元計算部１２Ｃでは、このダミー処理のうちの１つをＸＯＲマスク付き非線形処理部５２で行うようにすればよい。このため、第１比較例の変形逆元計算部２００がダミー処理を行うものと考えると、第１比較例の変形逆元計算部２００に対する処理コストの増加分は、乗算３回である。
【００７３】
なお、上述した実施形態の暗号処理装置は、通常のコンピュータを利用したハードウェア構成とし、コンピュータによって実行されるプログラムにより、上述した各構成要素の全部または一部を実現することができる。
【００７４】
上述した暗号処理装置の各構成要素を実現するプログラムは、例えば、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Digital  Versatile  Disc）などのコンピュータで読み取り可能な記録媒体に記録されて提供される。
【００７５】
また、上述した暗号処理装置の各構成要素を実現するプログラムを、インターネットなどのネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、上述した暗号処理装置の各構成要素を実現するプログラムを、インターネットなどのネットワーク経由で提供または配布するように構成してもよい。さらに、上述した暗号処理装置の各構成要素を実現するプログラムを、ＲＯＭなどに予め組み込んで提供するように構成してもよい。
【００７６】
上述した暗号処理装置の各構成要素を実現するプログラムは、各構成要素に対応するコンポーネントを含むモジュール構成となっており、実際のハードウェアとしてはＣＰＵ（プロセッサ）が上記記憶媒体からプログラムを読み出して実行することにより上記各コンポーネントが主記憶装置上にロードされ、暗号処理装置の各構成要素が主記憶装置上に生成されるようになっている。
【００７７】
以上、具体的な例を挙げながら詳細に説明したように、実施形態の暗号処理装置によれば、サイドチャネル攻撃に対して高い安全性を確保することができる。
【００７８】
なお、以上説明した実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。上記の新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。上記の実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００７９】
１  暗号処理部
２  乱数生成器
３  記憶装置
１０  変形データ処理部
１２，１２Ａ，１２Ｂ，１２Ｃ  変形逆元計算部
２１Ａ，２１Ｂ，２１Ｃ  第１変換部
２２  ＸＯＲマスク付き非線形処理部
２３  第２変換部
４１  逆元計算部
５２  ＸＯＲマスク付き非線形処理部
【図１】
0005711681.tif 000002
【図２】
0005711681.tif 000003
【図３】
0005711681.tif 000004
【図４】
0005711681.tif 000005
【図５】
0005711681.tif 000006
【図６】
0005711681.tif 000007
【図７】
0005711681.tif 000008
【図８】
0005711681.tif 000009
【図９】
0005711681.tif 000010
【図１０】
0005711681.tif 000011
【図１１】
0005711681.tif 000012
【図１２】
0005711681.tif 000013