(57)【特許請求の範囲】
【請求項１】
暗号化演算と復号化演算の暗号処理が実行可能な暗号演算処理部と、
乱数発生部と、
前記暗号処理される入力データもしくは前記暗号処理中の中間データである第１の値を第２の値に変換する第１の演算と、前記第２の値を前記第１の値に変換する第２の演算とを、前記乱数発生部において発生した乱数に基づいて、前記暗号処理において複数回実行される前記暗号化演算あるいは前記復号化演算の中に挿入する、前記第１及び前記第２の演算の位置を決定して、少なくとも１回連続して行わせるように、前記暗号演算処理部の実行を制御する制御部と、
前記乱数発生部の発生する乱数によって決定される前記第１及び前記第２の演算の実行確率を調整する確率調整部と、
を有することを特徴とする暗号処理装置。
【請求項２】
前記制御部は、前記第１の値と、前記第２の演算の演算結果の値とを比較し、その比較結果、前記第１の値と前記演算結果の値とが一致しない場合は、前記暗号演算処理部における前記暗号処理の実行を中止することを特徴とする請求項１に記載の暗号処理装置。
【請求項３】
前記制御部は、前記暗号演算処理部において実行される暗号処理中にダミー演算処理を挿入することを特徴とする請求項１又は２に記載の暗号処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、暗号処理装置に関する。
【背景技術】
【０００２】
従来より、暗号処理装置で消費される電力から暗号処理装置で用いられる秘密情報を取り出す電力解析という方法がある。このような解析方法への対策として、例えばDES（Data Encryption Standard）演算中にダミーのDES演算を挿入するという技術がある。ダミー演算処理を挿入することによって、暗号処理装置に電力解析の耐性を持たせるものである。
【０００３】
しかし、暗号処理装置において、演算の途中においてダミー演算処理を実行させるためには、ダミー演算のためのデータあるいはダミー鍵を保持するレジスタ回路が必要となる。また、ダミー演算サイクルでは、正規の途中結果を保存するレジスタの内容が変化しないことから消費電力は他のサイクルよりも小さくなる傾向があり、これによりこのサイクルがダミー演算サイクルであると識別されればダミー演算処理の挿入が無効化されてしまうため、ダミー演算処理の挿入以外にも電力解析攻撃への耐性を高めた暗号処理装置の開発が望まれている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−２５３６６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
そこで、本実施形態は、ダミー演算を用いなくても電力解析攻撃への耐性を有する暗号処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
実施形態の暗号処理装置は、暗号化演算と復号化演算の暗号処理が実行可能な暗号演算処理部と、乱数発生部と、制御部と、確率調整部と、を有する。制御部は、暗号処理される入力データもしくは暗号処理中の中間データである第１の値を第２の値に変換する第１の演算と、第２の値を第１の値に変換する第２の演算とを、乱数発生部において発生した乱数に基づいて、暗号処理において複数回実行される暗号化演算あるいは復号化演算の中に挿入する、第１及び第２の演算の位置を決定して、少なくとも１回連続して行わせるように、暗号演算処理部の実行を制御する。確率調整部は、乱数発生部の発生する乱数によって決定される第１及び第２の演算の実行確率を調整する。
【図面の簡単な説明】
【０００７】
【図１】第１の実施形態に係わる暗号処理装置１の構成を示す構成図である。
【図２】第１の実施形態に係わる暗号回路モジュール１５の構成を示すブロック図である。
【図３】従来のダミー処理を含まない場合の処理状況を示すタイミングチャートである。
【図４】従来のダミー処理を含む場合の処理状況を示すタイミングチャートである。
【図５】第１の実施形態の逆演算処理を用いた場合の処理状況を示すタイミングチャートである。
【図６】第１の実施形態の暗号処理のステップの時間に対する変化の例を示すグラフである。
【図７】第２の実施形態に係る暗号処理装置１Aの構成を示す構成図である。
【図８】第２の実施形態に係る、CPU１１が乱数RNに基づいて、暗号処理の実行ステップを決定して実行する場合の処理の流れの例を示すフローチャートである。
【図９】第３の実施形態に係る暗号処理装置１Ｂの構成を示す構成図である。
【図１０】第３の実施形態に係る暗号回路モジュール１５Ｂの構成を示すブロック図である。
【図１１】第３の実施形態に係わる比較器４２が比較するタイミングを説明するための図である。
【図１２】第４の実施形態の暗号処理装置の暗号回路モジュール１５Cの構成を示すブロック図である。
【図１３】第４の実施形態のDESのアルゴリズムを示す図である。
【図１４】第４の実施形態のDESのアルゴリズムの一部を示し、暗号化演算の中に逆演算が挿入された例を示す図である。
【図１５】図１４のS1〜S7までの処理の流れを示す図である。
【図１６】第１の変形例の動作を説明するための図である。
【図１７】第２の変形例に係る確率調整部１８ａからの確率調整信号Pcに基づいて、暗号処理の実行確率の変化の第１の例を示す図である。
【図１８】第２の変形例に係る確率調整部１８ａからの確率調整信号Pcに基づいて、暗号処理の実行確率の変化の第２の例を示す図である。
【図１９】第２の変形例に係る確率調整部１８ａからの確率調整信号Pcに基づいて、暗号処理の実行確率の変化の第３の例を示す図である。
【図２０】第２の変形例に係る暗号処理装置1Dの構成を示す図である。
【図２１】第３の変形例に係る逆演算処理とダミー演算処理が組み合わされた場合のステップの時間に対する変化の例を示すグラフである。
【発明を実施するための形態】
【０００８】
以下、図面を参照して実施形態を説明する。
【０００９】
（第１の実施形態）
（構成）
まず、図１に基づき、本実施形態に係わる暗号処理回路が搭載される暗号処理装置の構成を説明する。図１は、本実施形態に係わる暗号処理装置１の構成を示す構成図である。
【００１０】
暗号処理装置１は、中央処理装置（CPU）１１と、プログラム等を記憶したROM１２と、CPU１１の作業用記憶領域としてのRAM１３と、外部とのデータの送受信を行うための送受信インターフェース回路（以下、送受信I/Fと略す）１４と、暗号処理回路を含む暗号回路モジュール１５と、暗号回路モジュール１５とバス１６との暗号回路I/F１７と、乱数を発生する回路である乱数発生回路１８を含んで構成されている。CPU１１、ROM１２、RAM１３、送受信I/F１４及び暗号回路I/F１７は、バス１６を介して互いに接続されている。
【００１１】
暗号処理装置１は、例えば、IC（Integrated Circuit）カードであり、カードリーダ装置等の外部装置（図示せず）からのデータを受信すると、そのデータに対して所定の暗号処理を施し、その暗号処理結果のデータを出力又は送信する。暗号処理は、暗号化演算あるいは復号化演算を意味する。外部装置とのデータの送受信は、送受信I/F１４を介して、例えば、図示しない無線通信用の回路を介して無線通信により行われる。
【００１２】
また、CPU１１と暗号回路モジュール１５間で送受信されるデータも、暗号化される。  
暗号回路モジュール１５は、２つの暗号演算回路を含み、暗号化及び／又は復号化の演算を実行する。本実施形態の暗号演算回路は、AES（Advanced Encryption Standard）のラウンド関数を用いた回路である。AESのラウンド関数にはデータ入力の他に、各ラウンドに入力されるラウンド鍵（拡大鍵）が、鍵データとして入力される。  
乱数発生回路１８は、乱数を生成して出力する回路である。
【００１３】
図２は、暗号回路モジュール１５の構成を示すブロック図である。暗号回路モジュール１５は、暗号化回路２１と、復号化回路２２と、制御回路２３と、セレクタ２４，２５と、レジスタ２６とを含む暗号処理装置である。
【００１４】
暗号化回路２１は、入力されたデータに対して所定のAESの暗号化演算を実行する回路であり、復号化回路２２は、入力されたデータに対して所定のAESの復号化演算を実行する回路である。暗号化回路２１と復号化回路２２が、暗号化演算と復号化演算の暗号処理が実行可能な暗号演算処理部を構成する。
【００１５】
暗号化演算の場合、暗号化回路２１は、所定の回数だけ、例えば１１回、動作する。復号化処理の場合、復号化回路２２は、所定の回数だけ動作する。復号化回路２２による復号化演算は、暗号化回路２１による暗号化演算の逆演算に対応し、暗号化回路２１による暗号化演算は、復号化回路２２による復号化演算の逆演算に対応する。なお、暗号処理に用いられる鍵データ等の秘密情報は、図示しない不揮発性メモリに記憶されている。
【００１６】
制御回路２３は、暗号化回路２１と復号化回路２２を制御する制御部である。制御回路２３には、暗号化を行うのか復号化を行うのかを指示する信号が入力され、その指示に応じて、暗号化回路２１と復号化回路２２に暗号化演算あるいは復号化演算を実行させる。制御回路２３は、セレクタ２４に対して、暗号化回路２１の出力信号を用いるのか、復号化回路２２の出力信号を用いるのかを指示する選択信号SL1をセレクタ２４に供給する。制御回路２３は、セレクタ２５に対して、初期値INｄを用いるのか否かを指示する選択信号SL2をセレクタ２５に供給する。
【００１７】
暗号化回路２２と復号化回路２３の２つの出力信号は、セレクタ２４に入力される。セレクタ２４は、制御回路２３からの制御信号すなわち選択信号SL1に応じて、入力された２つの出力信号の一方を選択して出力する。例えば、暗号化演算が行われる場合、制御回路２３は、暗号化回路２２の出力を選択する。
【００１８】
セレクタ２４の出力信号は、セレクタ２５の一方の入力端に入力される。セレクタ２５の他方の入力端には、初期値INｄが入力される。初期値INｄは、暗号化する平文あるいは復号化する暗号文である。セレクタ２５は、暗号処理の初期値INｄに対する処理が行われるときのみに、初期値INｄを選択して出力する。
【００１９】
セレクタ２５の出力は、レジスタ２６に供給されて保持される。レジスタ２６に保持されるデータは、暗号化回路２１と復号化回路２２に、入力データとして供給される。  
I/F１７を介して入力された初期値INｄは、最初にレジスタ２６に格納された後に、暗号化演算あるいは復号化演算が開始されると、セレクタ２５では選択されない。暗号化演算あるいは復号化演算が開始されると、セレクタ２５は、セレクタ２４の出力を選択して、暗号化演算あるいは復号化演算の結果データを出力する。よって、レジスタ２６には、暗号化演算あるいは復号化演算の途中データ、あるいは最終的に暗号化された結果データあるいは復号化された結果データが格納される。レジスタ２６のその結果データは、暗号回路モジュール１５から、出力データとして、I/F１７を介してバス１６に出力されて、CPU１１により処理することができる。
【００２０】
制御回路２３は、ラウンド制御カウンタ３１と、ラウンド制御部３２を有している。さらに制御回路２３には、乱数発生部である乱数発生回路１８からの乱数RNが入力される。
【００２１】
ラウンド制御カウンタ３１は、次に実行すべきラウンドをカウントする回路である。例えば、暗号処理のステップに応じたラウンド番号が、ラウンド制御カウンタ３１に設定される。
【００２２】
ラウンド制御部３２は、乱数RNに応じて、ラウンド制御カウンタ３１の値を変更する制御を行う回路である。すなわち、ラウンド制御部３２は、入力された乱数RNの値に応じて、逆演算とその逆演算に対応する通常演算とを挿入する処理サイクル中の１以上の位置と、挿入する逆演算（及びその逆演算に対応する通常演算）の段数とを決定して、ラウンド制御カウンタ３１の値を変更する。
【００２３】
通常、ラウンド制御カウンタ３１では、AESの場合、ステップS1からS11に対応するカウント値が、１ずつインクリメントされる。具体的には、ラウンド制御カウンタ３１のカウンタ値は、１，２，３，４，５，６，７，８，９，１０，１１と変更するように、ラウンド制御部３２は、ラウンド制御カウンタ３１を制御する。
【００２４】
しかし、本実施形態の場合、ラウンド制御部３２は、入力された乱数RNに基づいて決定された１以上の位置と段数とに基づいて、ラウンド制御カウンタ３１を増減させる。例えば、ラウンド制御部３２は、ラウンド制御カウンタ３１のカウンタ値を、１，２，３，２，３，４，５，６，７，８，７，６，７，８，９，１０，１１と変更する。この場合、制御回路２３は、乱数RNを利用して、ラウンド３、８の後に、それぞれ１段と２段の逆演算と通常演算のセットが挿入されている。すなわち、制御回路２３は、暗号処理において複数回実行される暗号化演算あるいは復号化演算の処理ステップ中に逆演算と、その逆演算の結果データを逆演算の前の値に戻す通常演算とを挿入する１以上の位置と段数を決定して、暗号処理のラウンドすなわち処理ステップを制御する。段数は、挿入される逆演算とその逆演算に対応する通常演算のそれぞれの１以上の回数である。
【００２５】
（動作）
図３から図５は、本実施形態の暗号処理回路の動作を説明するための図である。図３は、従来のダミー処理を含まない場合の処理状況を示すタイミングチャートである。図４は、従来のダミー処理を含む場合の処理状況を示すタイミングチャートである。図５は、本実施形態の逆演算処理を用いた場合の処理状況を示すタイミングチャートである。図３から図５は、演算サイクル毎の演算の種類とレジスタに保存されるデータを示す。ここでは、１ラウンドの演算が１サイクルで実行される。
【００２６】
図３の従来の通常の暗号処理では、最初の演算のサイクル１の暗号処理の結果データD0は、次のサイクル２の入力データとなり、その入力データに対して所定の暗号処理（暗号化演算あるいは復号化演算）Opが実行され、その出力データD1は、所定のレジスタに格納され、次のサイクル３の入力データとなる。以下、同様な暗号処理が繰り返される。  
所定回数の暗号処理が実行されて、最終的に暗号されたデータあるいは復号化されたデータが、所定のレジスタに格納される。
【００２７】
図４の従来のダミー処理を含む場合の暗号処理では、図３の通常の暗号処理中にダミー演算が途中に挿入される。所定のレジスタには、ダミー演算が実行される前のデータがそのまま保持される。よって、ダミー処理を含む場合の暗号処理は、図４に示すように、ダミー演算の実行サイクル分だけ全体の処理時間は、延びる。
【００２８】
レジスタに保持されるデータは、図３の場合、各演算サイクルにおいて実行される暗号処理に対応するデータD1,D2,D3,D4,・・となるが、図４の場合は、データD0,D1,D1,D2,D2,D3,D4,D5,・・となる。
【００２９】
図５の場合、例えば、初期値INｄに対して、暗号化回路２１において暗号化演算が実行され、復号化回路２２において復号化演算が実行される。暗号化演算の場合、制御回路２３からの選択信号SL1に基づいて、セレクタ２４では、暗号化回路２１において生成された出力データが選択されて出力される。すなわち、サイクル１のタイミングで、暗号化回路２１の出力が選択される。最初のサイクル１の出力データD0は、レジスタ２６に保持され、次のサイクル２の入力データとなる。
【００３０】
サイクル２においても、レジスタ２６の出力データD0に対して、暗号化回路２１において暗号化演算が実行され、復号化回路２２において復号化演算が実行される。制御回路２３からの選択信号SL1に基づいて、セレクタ２４では、暗号化回路２１において生成された出力データD1が選択されて、出力される。すなわち、サイクル２のタイミングでも、暗号化回路２１の出力が選択される。出力データD1は、レジスタ２６に保持され、次のサイクル３の入力データとなる。
【００３１】
サイクル３においても、レジスタ２６の出力データD1に対して、暗号化回路２１において暗号化演算が実行され、復号化回路２２において復号化演算が実行される。サイクル３は、逆演算のサイクルである。よって、レジスタ２６のデータD1に対して、暗号化演算の逆演算を実行する復号化回路２２の出力データが、制御回路２３からの選択信号SL1に基づいて、セレクタ２４において選択されて、出力される。すなわち、サイクル３のタイミングで、復号化回路２２の出力が選択される。その出力データは、データD1に対する逆演算の結果データであるので、データD0である。データD0は、レジスタ２６に保持され、次のサイクル４の入力データとなる。すなわち、サイクル３は、逆演算のサイクルであるので、レジスタ２６に出力されるデータは、サイクル２の１つ前のサイクル１の結果データD0となる。
【００３２】
サイクル４においても、レジスタ２６の出力データD0に対して、暗号化回路２１において暗号化演算が実行され、復号化回路２２において復号化演算が実行される。制御回路２３からの選択信号SL1に基づいて、セレクタ２４では、暗号化回路２１において生成された出力データD1が選択されて、出力される。すなわち、サイクル４のタイミングで、暗号化回路２１の出力が選択される。出力データD1は、レジスタ２６に保持され、次のサイクル５の入力データとなる。
【００３３】
サイクル５においても、レジスタ２６の出力データD1に対して、暗号化回路２１において暗号化演算が実行され、復号化回路２２において復号化演算が実行される。制御回路２３からの選択信号SL1に基づいて、セレクタ２４では、暗号化回路２１において生成された出力データD2が選択されて、出力される。出力データD2は、レジスタ２６に保持され、次のサイクル６の入力データとなる。
【００３４】
同様に、サイクル６では、データD2に対して逆演算Op−１を実行する復号化演算のデータD1がレジスタ２６に格納される。サイクル７では、データD1に対して暗号化演算Opが実行されて、結果データとしてデータD2がレジスタ２６に出力される。サイクル８では、同様に、データD2に対して暗号化演算Opが実行されて、結果データとしてデータD3がレジスタ２６に出力される。
【００３５】
結果として、レジスタ２６に格納されるデータは、図５に示すように変化する。すなわち、レジスタ２６に格納されるデータは、D0,D1,D0,D1,D2,D1,D2,D3,・・というように、ここでは、サイクル２の後に、１段の逆演算Op−１と通常演算Opが挿入され、サイクル５の後にも、１段の逆演算Op−１と通常演算Opが挿入されている。
【００３６】
以上のように、暗号化処理の場合、あるデータDAに対して、暗号処理としての暗号化演算を実行すると、その結果データとしてデータDBが出力される。しかし、データDBに対して、暗号化演算の逆演算である復号化演算を実行すると、その結果データは、暗号化前のデータDAに戻る。そして、制御回路２３が、乱数RNに基づいてランダムに決定した、逆演算を挿入する１以上の位置と段数とに応じた選択信号SL1を出力することによって、図５のような処理が実現される。
【００３７】
以上は暗号化演算の場合で説明したが、復号化演算の場合も同様である。但し、復号化演算の場合の逆演算は、暗号化演算である。
【００３８】
図６は、本実施形態の暗号処理のステップの時間に対する変化の例を示すグラフである。図６において、横軸は時間、縦軸はステップを示し、右上がりは通常演算、右下がりは逆演算が行われたことを示す。暗号処理が暗号化演算の場合、通常演算は暗号化演算であり、逆演算は復号化演算であり、暗号処理が復号化演算の場合、通常演算は復号化演算であり、逆演算は暗号化演算である。図６に示すように、AESの場合、１１個の処理ステップが実行されるが、途中に、逆演算とその逆演算に対応する通常演算が挿入されている。よって、１１個の処理ステップが途中で戻りつつ、進んで行く。その結果、通常演算の結果データとは異なるようにして、結果データが変化する。
【００３９】
図６では、ステップ３の後、一旦ステップ２に戻ってからステップ３に戻っている。さらに、ステップ６の後、ステップ５に戻り、さらにステップ４まで戻ってから再びステップ５に戻り、さらにステップ６に戻るというように、処理が２段戻っている。ステップ８と１０の後も、ステップ３のときと同様に、処理が１段戻っている。すなわち、本実施形態の暗号処理装置では、通常演算の途中に、逆演算がランダムに挿入され、通常演算のタイミングが変化すると共にデータの値も変化する。すなわち、そのデータの値の変化は、暗号処理される入力データもしくは暗号処理中の中間データである第１の値を第２の値の変換する第１の演算と、その第２の値を第１の値に変換する第２の演算とを少なくとも１回連続して行わせる処理による変化である。
【００４０】
図６では、ステップ３に続くステップ２に戻る逆演算が、暗号処理中の中間データである第１の値を第２の値の変換する第１の演算であり、その逆演算に続くステップ３に戻る通常演算が、第２の値を第１の値に変換する第２の演算である。  
同様に、ステップ６から４に戻る２段の逆演算が、暗号処理中の中間データである第１の値を第２の値の変換する第１の演算であり、その逆演算に続くステップ４から６に戻る２段の通常演算が、第２の値を第１の値に変換する第２の演算である。すなわち、制御回路２３は、暗号演算処理部において実行される暗号処理が暗号化演算の場合は、逆演算である復号化演算を複数の回数連続して実行した後に、その複数の回と同じ回数の暗号化演算を実行するように暗号演算処理部を制御する。
【００４１】
以上の説明は、暗号処理が暗号化演算の場合であるが、暗号処理が復号化処理の場合も同様である。第１の演算は、暗号処理が暗号化演算の場合は、暗号化演算の逆演算である復号化演算であり、暗号処理が復号化演算の場合は、復号化演算の逆演算である暗号化演算である。そして、第２の演算は、暗号処理が暗号化演算の場合は、暗号化演算であり、暗号処理が復号化演算の場合は、復号化演算である。
【００４２】
以上のように、本実施形態によれば、ダミー演算のためのデータ及びダミー鍵を保持するレジスタ回路を用いることなく、暗号処理中に逆演算処理がランダムに挿入されて、実際の暗号処理のみで処理時間が変化するので、電力解析攻撃に対して、耐性を有する暗号処理回路を実現することができる。
【００４３】
（第２の実施形態）
次に第２の実施形態について説明する。第１の実施形態では、暗号処理は、ハードウエアである回路により実行されているが、第２の実施形態は、暗号処理がソフトウエアプログラム（以下、単にソフトウエアという）により実行される点が、第１の実施形態と異なる。
【００４４】
図７は、本実施形態に係る暗号処理装置１Aの構成を示す構成図である。図７において、図１と同じ構成要素については、同じ符号を付し説明は省略する。図７に示すように、暗号処理装置１Aは、図１の暗号処理装置１におけるI/F１７と暗号回路モジュール１５を含まない。
【００４５】
暗号処理装置１Aは、暗号処理をソフトウエアにより行うが、そのソフトウエアの実行は、制御部としてのCPU１１によって行われる。暗号処理結果を保持するレジスタ２６の代わりに、RAM１３の記憶領域が利用される。さらに、ラウンド制御カウンタ３１の代わりに、RAM１３の記憶領域が利用される。CPU１１は、乱数発生部である乱数発生回路１８からの乱数RNに基づいて、ラウンド制御カウンタのカウンタ値の増減制御を行いなから、暗号処理を実行する。暗号処理の結果データは、RAM１３の記憶領域に書き込まれる。
【００４６】
図８は、CPU１１が乱数RNに基づいて、暗号処理の実行ステップを決定して実行する場合の処理の流れの例を示すフローチャートである。CPU１１は、乱数RNに基づいて、AESの１１個のラウンドに相当する１１個の処理ステップ中に、逆演算処理及びその逆演算に対応する通常演算処理が、乱数RNに基づいて決定されたステップの１以上の位置に、乱数RNに基づいて決定された段数だけ挿入される。
【００４７】
図８では、ステップS1,S2,S3,S4,S5,・・・Snというｎ回（ｎは、整数）の暗号処理ステップが連続して実行されている。すなわち、N回（AESの場合、Nは１１）の暗号処理が実行されるが、そのN回の暗号処理ステップ中に、（ｎ−N）回の逆演算処理（その逆演算処理に対応する通常演算処理を含む）が、１つ以上の場所に挿入されている。図８では、ステップS2の後の位置に、１回の逆演算処理Op2−１が挿入され、その逆演算処理の後に、再びステップS2と同じ暗号演算処理（通常演算処理）Op2が挿入されている。ステップS3の処理が終了ときの結果データは、ステップS1の処理が終了したときの結果データと同じである。ステップS4が終了ときの結果データは、ステップS2の処理が終了したときの結果データと同じである。
【００４８】
図８において、例えば、ステップS2に続くステップS3における逆演算処理が、暗号処理中の中間データである第１の値を第２の値の変換する第１の演算であり、その逆演算に続くステップS4における演算処理が、第２の値を第１の値に変換する第２の演算である。  
このように、本実施形態では、CPU１１は、第１の実施形態と同様に、乱数RNに基づいて、N回の処理ステップ中に逆演算処理とその逆演算処理に対応する通常演算を挿入する１以上の位置と段数を決定して、暗号処理の処理ステップを制御する。
【００４９】
従って、本実施形態の暗号処理装置によれば、ダミー演算のためのデータ及びダミー鍵を保持するレジスタ回路を用いることなく、暗号処理中に逆演算処理がランダムに挿入されて、実際の暗号処理のみで処理時間が変化するので、電力解析攻撃に対して、耐性を有する暗号処理回路を実現することができる。
【００５０】
なお、以上の例は、AESの暗号処理で説明したが、暗号処理は、AES以外の暗号処理でもよく、さらに、以上の例では、各ステップの処理内容は同じであるが、各ステップの処理内容が異なっていてもよい。
【００５１】
（第３の実施形態）
次に第３の実施形態について説明する。第１及び第２の実施形態では、電力解析攻撃の耐性を有する暗号処理装置が開示されたが、本実施形態の暗号処理装置は、電力解析攻撃の耐性を有するだけでなく、故障印加攻撃の耐性も有する。すなわち、本実施形態によれば、暗号処理のステップすなわちラウンド中に、逆演算処理をランダムに挿入することによって電力解析攻撃の耐性を有すると共に、ICチップにレーザ照射、ノイズ供給等を与える故障印加攻撃の耐性を有する暗号処理装置が提供される。
【００５２】
故障印加攻撃は、暗号処理の途中に何らかの故障を引き起こし、処理途中の結果に誤りを起こさせる。その解析方法は、誤ったデータに対して暗号処理が行われた結果を取り出して多数収集し、その多数のデータを解析することによって暗号鍵を取り出す方法である。
【００５３】
従来のダミー演算を行う暗号演算装置では、ダミー処理中に故障が印加された場合は、演算結果に影響を及ぼさないが、ダミー演算ではない通常の暗号処理中に故障が印加された場合は、誤ったデータを用いて暗号処理が行われる。よって、ダミー演算の挿入は、ダミーデータ等の処理中に故障印加がされる場合があるので、故障印加攻撃に対しては、故障の発生確率を低下させることができるという効果はある。しかし、故障印加の回数を増やすことにより、多数の演算結果を得れば、秘密情報の解析が可能になるという問題がある。
【００５４】
故障印加攻撃の場合、暗号処理装置による最終的に出力された結果データが利用される。そこで、本実施形態の暗号処理装置は、故障印加攻撃を受けたことを検出して、例えば暗号処理を中止するように構成される。その結果、解析者は、暗号処理の結果データが出力されないため、暗号鍵等を取り出して解析することができない。
【００５５】
図９は、本実施形態に係る暗号処理装置１Ｂの構成を示す構成図である。図９において、図１と同じ構成要素については、同じ符号を付し説明は省略する。図９に示すように、I/F１７に、アラームデータとしてのフラグデータを保持するフラグレジスタ１７ａが設けられている。
【００５６】
なお、本実施形態では、レジスタ１７ａは、I/F１７に設けられているが、I/F１７以外の箇所に設けてもよいし、RAM１３内の所定の領域をそのレジスタの代わりに利用してもよい。
【００５７】
図１０は、本実施形態に係る暗号回路モジュール１５Ｂの構成を示すブロック図である。図１０において、図２の暗号処理モジュール１５と同じ構成要素については同じ符号を付して説明は省略する。
【００５８】
暗号処理モジュール１５Ｂの制御回路２３Bは、ラウンドレジスタ３３を有する。ラウンドレジスタ３３は、逆演算が挿入される直前のラウンドすなわちステップを記憶するレジスタである。制御部としての制御回路２３Bは、逆演算が挿入されると、その直前のラウンド値をラウンドレジスタ３３に記憶する。例えば、ラウンド３の後に、逆演算処理が挿入された場合、制御回路２３Bは、ラウンド３の値「３」をラウンドレジスタ３３に格納する。
【００５９】
さらに、暗号処理モジュール１５Ｂは、レジスタ４１と比較器４２を含む。レジスタ４１には、セレクタ２５の出力が入力され、制御回路２３Bからの制御信号CS1に応じて、セレクタ２５の出力データが格納される。
【００６０】
制御部としての制御回路２３Bは、乱数発生回路１８において発生した乱数RNに基づいて、暗号処理において複数回実行される暗号化演算あるいは復号化演算の中に挿入する、１以上の逆演算とそれに対応する通常演算の位置と段数を決定し、暗号化回路２１と復号化回路２２の実行を制御する。
【００６１】
制御信号CS1は、逆演算処理の挿入のタイミングに基づいて生成され、セレクタ２５のデータは、その制御信号CS1のタイミングに応じて、レジスタ４１に格納される。例えば、ラウンド３の後に、逆演算処理が挿入される場合、逆演算処理が実行される前のラウンド３の結果データが記憶されるように、制御信号CS1が出力される。
【００６２】
制御部としての制御回路２３Bは、ラウンド制御カウンタ（RCNT）３１の値とラウンドカウンタ３３の値とを比較する比較する回路を有する。制御回路２３Bでは、そのラウンドカウンタ（RR）３３にラウンドの値が保持されると、その後、ラウンド制御カウンタ（RCNT）３１の値と、ラウンドカウンタ３３の値とを比較し、一致するか否かを判定する。
【００６３】
また、比較器４２は、制御回路２３Bからの制御信号CS2に基づいて、２つのレジスタ２６と４１に格納されている２つのデータを比較する。比較器４２は、２つのデータが不一致の場合、アラーム信号としての不一致検出信号IDSを出力する。
【００６４】
比較器４２が２つのデータを比較するタイミング、すなわち制御信号CS2が出力されるタイミングは、ラウンドレジスタ３３とラウンド制御レジスタ３１の値が一致したときである。すなわち、制御回路２３Bは、逆演算が始まったときにレジスタ４１に保存された、その逆演算の前のラウンドの結果データと、その保存した結果データのラウンドと同じラウンドが実行されたときの結果データとが比較されるように、制御信号CS2を出力する。
【００６５】
比較器４２の検出信号IDSは、I/F１７のフラグレジスタ１７ａに例えばフラグデータとして「１」を書き込む信号として出力される。そのフラグレジスタ１７ａのデータは、CPU１１によって監視される。CPU１１は、フラグデータが「１」となると、暗号回路モジュール１５Bをその動作を停止するように制御する。あるいは、CPU１１は、暗号回路モジュール１５Bの実行後に、フラグレジスタ１７ａ又はRAM１３内のフラグデータの値を確認することによって、故障印加攻撃があったか否かを判断することができる。
【００６６】
図１１は、本実施形態の比較器４２が比較するタイミングを説明するための図である。図１１において、時刻t1、t2、t3、t5、t6、t7、t10において通常演算が実行され、時刻t4、t8、t9において逆演算が実行されている。例えば、ラウンドに対応するステップ３の後に、時刻t4のタイミングで、１回の逆演算処理が挿入され、ステップは、その逆演算処理の後に時刻t5のタイミングでステップ３に戻っている。ステップ３の結果データは、時刻t3、t5、t9の実行結果に現れ、ステップ４の結果は、時刻t6、t8、t10の実行結果に現れている。
【００６７】
よって、後述するように、例えば、時刻t3のステップ３の結果データをレジスタ４１に格納しておき、同じステップ３の結果が現れたときの結果データと比較することによって、その間に故障が発生していなければ両者は一致し、故障が発生していれば両者は一致しない。すなわち、両者を比較することによって、故障が検知される。
【００６８】
ラウンド制御カウンタ（RCNT）３３の値は、１，２，３，２，３，・・と変化している。ラウンドカウンタ（RR）３３は、最初の逆演算処理が挿入される直前のステップ（ここでは最初のステップ３）の値が保持される。
【００６９】
制御回路２３Bは、時刻t5のタイミングで、ラウンド制御カウンタ（RCNT）３１の値とラウンドカウンタ３３の値とが一致したことを検出し、そのタイミングで、制御信号CS2を生成して比較器４２に出力する。
【００７０】
例えば、時刻t3とt5の間に、暗号処理装置１Bが故障印加攻撃を受けていた場合、１回目と２回目のステップ３の暗号処理の結果データは異なる場合がある。よって、比較器４２は、その不一致を検出して、検出信号IDSを出力する。
【００７１】
図１１の場合、最初のステップ５の後に、２段の逆演算処理が挿入されている。この場合は、時刻t7のタイミングでラウンドカウンタ（RR）３３がラウンドの値「５」を保持し、その後ラウンド制御カウンタ（RCNT）３１が「５」になったときに、レジスタ２６とレジスタ４１の値が、同様に比較される。よって、この場合も、時刻t7からt11の間に、暗号処理装置１Bが故障印加攻撃を受けて、１回目と２回目のステップ５の暗号処理の演算結果データは異なっていれば、比較器４２は、その不一致を検出して、検出信号IDSを出力する。
【００７２】
比較器４２の検出信号IDSは、例えば、制御回路２３Bに供給され、あるいはI/F１７を介してCPU１１に供給される。制御回路２３BあるいはCPU１１は、検出信号IDSを受信すると、暗号回路モジュール１５Bにおける暗号処理を中止させることができる。そのようにすれば、暗号処理の最終結果が出力されない。よって、暗号処理装置において最終結果が出力されなければ、故障印加攻撃に対して有効である。  
なお、検出信号IDSは、CPU１１への割り込み信号として供給するようにしてもよい。
【００７３】
さらになお、以上の例では、逆演算の挿入タイミングに応じて、ラウンドの値を保持し、かつ結果データも記憶するようにしていたが、ラウンド毎の結果データを全てあるいはランダムに保持するようにして、保持した結果データの中において、同じラウンドにおける結果データに不一致があるか否かを検出するようにしてもよい。
【００７４】
例えば、図１１において、ラウンド２は２回発生している。また、ラウンド３と４は、３回発生している。よって、ランダムに保持された結果データの中で、同じラウンドの結果データが２つ以上あれば、それらの結果データを比較し不一致があるか否かを検出するようにしてもよい。例えば、図１１では、ランダムに保持された結果データの中に、ラウンド３の結果データとして、時刻t3とt9の結果データがあれば、それらが比較される。
【００７５】
あるいは、乱数によって決定したラウンドの結果データを保持し、その後、その決定されたラウンドと同じラウンドが現れたら、そのデータと保持された結果データとの比較を行うようにしてもよい。
【００７６】
以上のように、本実施形態の暗号処理装置は、レジスタ４１に暗号処理の途中データを保持しておき、再びそのステップを実行したときに、その結果データとその途中データとを比較することによって、暗号処理中に故障が発生したことを検出する。すなわち、制御回路２３Bは、逆演算の直前の値と、逆演算（及びその逆演算に対応する通常演算）の演算結果の値とを比較し、両者が一致しない場合は、暗号演算処理部における暗号処理の実行を中止する。
【００７７】
従って、本実施形態の暗号処理装置は、ダミー演算のためのデータ及びダミー鍵を保持するレジスタ回路を用いることなく、暗号処理中に逆演算処理がランダムに挿入されて、実際の暗号処理のみで処理時間が変化するので、電力解析攻撃に対して、耐性を有することができる。
【００７８】
さらに、本実施形態の暗号処理装置は、同じラウンドの暗号処理の２つの結果データが異なるか否かを検出する。それら２つの結果データが異なる場合、暗号処理演算を中止させるようにすれば、暗号処理の最終結果が、すなわち例えば平文に対する暗号文が、出力されないので、本実施形態の暗号処理装置は、故障印加攻撃に対して耐性を有することができる。
【００７９】
なお、本実施形態は、ハードウエア回路で実現する例で説明したが、第２の実施形態のように、暗号演算がソフトウエアによって実現される場合は、上述した比較器等の機能はソフトウエアにより実現することができる。従って、本実施形態の暗号処理装置は、ソフトウエアによっても実現することが可能である。
【００８０】
（第４の実施形態）
本実施形態は、１つの暗号処理部を有する暗号処理装置の例である。ここでは、DESを用いた暗号処理部の例で説明する。  
図１２は、本実施形態の暗号処理装置の暗号回路モジュール１５Cの構成を示すブロック図である。図１２において、図１０の暗号処理装置と同じ構成要素については同じ符号を付し説明は省略する。  
暗号回路モジュール１５Cは、制御回路２３Cと、暗号処理回路５１と、２つのレジスタ２６，４１と、比較器４２とを含む。
【００８１】
暗号処理回路５１は、制御回路２３Cからの制御信号CS11に基づいて、暗号化演算あるいは復号化演算のいずれかの暗号処理を実行する。暗号処理回路５１が、暗号化演算と復号化演算の暗号処理が実行可能な暗号演算処理部を構成する。暗号処理回路５１は、DESのラウンド関数部を含み、そのラウンド関数部は、スクランブル部と鍵スケジュール部を含む。スクランブル部は、ｆ関数部及び排他的論理和部を含む。暗号処理回路５１の出力は、レジスタ２６に出力され、レジスタ２６に保持された結果データが再び暗号処理回路５１の入力データとなって、１６回のラウンド処理が繰り返される。
【００８２】
制御部としての制御回路２３Cは、ラウンド制御カウンタ３１、ラウンド制御部３２及びラウンドカウンタ３３を含む。制御回路２３Cは、ラウンド制御部３２によってラウンド制御カウンタ３１を増減させながら、暗号処理回路５１に対して、暗号化演算あるいは復号化演算の暗号処理を実行させる。制御回路２３Cは、入力された乱数RNに基づいて、その途中に、逆演算である復号化演算あるいは暗号化演算を挿入するための鍵の挿入指示信号と、ｆ関数部と排他的論理和部への２つの入力データの入れ替えを行わないように切り替える切替制御信号を出力する。
【００８３】
すなわち、制御回路２３Bは、暗号処理回路５１に、逆演算処理のための鍵の挿入指示信号と、切替制御信号とを含む制御信号CS11を供給することによって、暗号処理回路５１に、途中に逆演算を挿入しながら暗号化演算と復号化演算のいずれかの暗号処理を実行させる。
【００８４】
レジスタ４１には、逆演算の直前のラウンドの結果データが保持される。制御回路２３Bは、ラウンド制御カウンタ３１の値が、ラウンドレジスタ３３の値と一致すると、制御信号CS2を比較器４２に出力する。比較器４２は、逆演算直前の結果データと、そのラウンドが逆演算直前のラウンドと同じラウンドに戻ったとき結果データ（レジスタ２６のデータ）とを比較して、不一致があれば、不一致信号IDSを出力するようになっている。
【００８５】
図１３は、DESのアルゴリズムを示す図である。DESアルゴリズムは、初期転置（ＩＰ）、最終転置（ＦＰ）、鍵演算（右側）とデータ演算（左側）とで構成される。初期転置と最終転置は、お互いに逆演算の関係にある。データ演算は、同一の演算が繰り返し実行される。図１３では、ラウンド１（R1）から１６（R16）までが示されている。DESの復号化演算では、データ演算は、同じ演算であるが、鍵演算が暗号化演算の過程とは逆の過程で実行される。すなわち、鍵データKは、暗号化演算の場合は、ラウンド１からラウンド１６まで、K1,K2,K3,・・・,K16の順で生成されてｆ関数部に与えられるが、復号化演算の場合は、ラウンド１からラウンド１６まで、K16,K15,K14,・・・,K1の順で生成されてｆ関数部に与えられる。
【００８６】
通常の演算では、図１３に示すように、ｆ関数部の左右の２つのデータを入れ替える操作が行われるが、暗号演算から復号演算に変化するときに、左右の入力データの入れ替えを行わずに処理することで逆演算を実現することができる。
【００８７】
図１４は、DESのアルゴリズムの一部を示し、暗号化演算の中に逆演算が挿入された例を示す図である。図１４において、あるラウンドに相当するステップ１（S1）から、そのステップ１に続くステップ２（S2）、ステップ３（S3）、・・・ステップ７（S7）が示されている。ここでは、S3の後に、２段の逆演算が挿入されている。
【００８８】
S1,S2,S3,S6,S7は暗号処理（(Enc)が、そしてS4,S5は復号処理（Dec）が行われている。S4において、S3と同じ鍵データKI+2が使用された結果、S4の結果データは、S2の結果データと同じになっている。
【００８９】
さらに、S4に続くS5において、S2と同じ鍵データKI+1が使用された結果、S5の結果データは、S1の結果データと同じになっている。S5に続くS6において、S2と同じ鍵データKI+1が使用された結果、S6の結果データは、S4及びS2の結果データと同じになっている。
【００９０】
そして、S7において、S3と同じ鍵データKI+2が使用されるので、S7の結果データは、S3の結果データと同じになっている。
【００９１】
ここで、S4とS6では、切替制御信号によって、ｆ関数部と排他的論理和部への入力データの入れ替えが行わないように切り替えられている。
【００９２】
図１５は、図１４のS1〜S7までの処理の流れを示す図である。ここでは、２段の逆演算が挿入され、鍵データは、KI,KI+1,KI+2,KI+2,KI+1,KI+1，KI+2というように変化している。
【００９３】
以上のように、本実施形態の暗号処理装置は、DES演算において、暗号化演算中に逆演算（復号化演算）を挿入でき、あるいは復号化演算中に逆演算（暗号化演算）を挿入でき、その結果、処理時間が変化し、電力解析に対して耐性を持たせることが可能となる。
【００９４】
さらに、第３の実施形態と同様に、逆演算を挿入する直前のラウンドとそのときのデータを保持し、その後の同じラウンドのデータと比較して、不一致の検出信号IDSを出力するので、故障印加攻撃に対して耐性を有する暗号処理装置を実現することができる。
【００９５】
なお、逆演算後、逆演算直前の結果データに戻る処理が行われればよいので、逆演算に用いる鍵データは、逆演算直前のステップに用いられた鍵データと同じもでなくてもよい。
【００９６】
図１４の例では、暗号処理部５１のｆ関数部への鍵データの供給の方法は、２段の逆演算が１回挿入されている。そして、逆演算のための鍵データは、その逆演算直前のステップの結果データに戻るように、逆演算直前のステップに用いられた鍵データである。図１４の場合であれば、S4の鍵データは、S3で用いられた鍵データと同じである。さらに、そのS4の結果データは、S2の結果データと同じになるので、S5の鍵データは、S2で用いられた鍵データと同じである。そして、S6の結果データが、S4の結果データと同じとなり、S7の結果データが、S3の結果データと同じとなるように、S6とS7の鍵データは、それぞれS5とS4の鍵データと同じである。
【００９７】
また、１段の逆演算処理が１回挿入される場合、上記のように逆演算処理直前のステップの演算処理の前の結果データに戻るようにするには、逆演算処理のための鍵データとそれに続く演算処理のための鍵データは共に、逆演算直前のステップに用いられた鍵データとなる。例えばS2の後に逆演算処理を挿入する場合、鍵データは、K1,K2,K2,K2,K3,K4、・・となる。
【００９８】
しかし、逆演算処理のための鍵データとそれに続く演算処理のための鍵データが同じであれば、逆演算処理直前のステップに用いられた鍵データと異なっていてもよい。例えば、S2の後に逆演算処理を挿入する場合、鍵データは、K1,K2,K5,K5,K3,K4、・・でもよい。このように鍵データを挿入しても、逆演算処理直前おステップの結果データに戻るので、問題はない。
【００９９】
（変形例）
次に上述した３つの実施形態の変形例を説明する。  
上述した各実施形態では、入力された初期値INｄに対する暗号処理を実行する場合に、その暗号処理の中に、１以上の逆演算が１以上の段数をもって挿入されている。しかし、本第１の変形例では、入力された初期値INｄに対する暗号処理の前に、入力された初期値INｄに対して、通常演算とその逆演算を組み合わせた前処理が挿入される。
【０１００】
本変形例の前処理では、乱数RNに基づいて決定された鍵データと、乱数RNに基づいて決定された通常演算と逆演算を組み合わせた処理が実行され、その実行結果が入力された初期値INｄと同じになったら、暗号処理装置は、前処理を終了して、上述した各実施形態の暗号処理を実行する。
【０１０１】
さらに、加えて、上述した各実施形態の暗号処理が終了したら、その時の結果データ（最終結果データ）に対して、通常演算とその逆演算を組み合わせた処理である後処理が挿入される。後処理では、乱数RNに基づいて決定された鍵データと、乱数RNに基づいて決定された通常演算と逆演算の組み合わせた処理が実行され、その実行結果が、最終結果データと同じになったら、暗号処理装置は、後処理を終了する。
【０１０２】
図１６は、第１の変形例の動作を説明するための図である。図１６では、DESの暗号処理の前処理において、入力された初期値INｄに対して、乱数RNに基づいて決定された鍵データK8,K9と、乱数RNに基づいて決定された通常演算と逆演算の組み合わせた処理が実行されている。そして６回のステップの後に、初期値INｄと同じデータになったので、前処理は終了して、暗号処理が実行されている。
【０１０３】
具体的には、図１６において、鍵データK8は、第８ラウンドで用いられるラウンド鍵である。また、右上がりの矢印は通常演算である暗号演算、右下がりの矢印は逆演算である復号演算を実行していることを表している。点線で囲まれた部分は、暗号処理とは異なる演算が実行されている部分を表している。左側の点線で囲まれた部分は、暗号処理開始前に行われる前処理部分、中央部下の点線で囲まれた部分は、暗号処理中に行われる逆演算と通常演算の挿入部分、右側上部の点線で囲まれた部分は、暗号処理終了時に行われる後処理部分、右側下部の点線で囲まれた部分は、暗号処理終了後に行われる後処理部分である。
【０１０４】
電力解析では、一般的に最初のラウンドと最後のラウンドが解析の対象となる。よって、本変形例では、最初と最後のラウンドに関して、開始あるいは終了の状態が変化する。通常の暗号処理は、同じ演算（ラウンド）の繰り返しで実現されているが、このとき、各ラウンドでは、別々の鍵（ラウンド鍵）が用いられている。
【０１０５】
図１６では、暗号処理において、第一のラウンドで用いられる鍵として、他の鍵を用いて演算を行う。図１６に示した動作例では、最初にラウンド８の鍵を用いて通常演算（暗号化演算）を行い、続いて、ラウンド９の鍵で通常演算、ラウンド９の鍵で逆演算（復号化演算）、ラウンド９の鍵で通常演算、ラウンド９の鍵で逆演算、ラウンド８の鍵で逆演算が行われている。これらの処理の結果、結果データは元のデータに戻る。次の演算で、ラウンド１の鍵を用いて通常演算（暗号化演算）を開始して、暗号処理が開始される。すなわち、ラウンド１の鍵を用いる前に、鍵が異なるだけで、鍵以外の処理は同じ演算が行われるため、ラウンド１の鍵を用いた暗号処理の開始時の結果データを変化させることができる。
【０１０６】
暗号処理が終了した後、後処理において、最終結果データに対して、乱数RNに基づいて決定された鍵データK17,K16,K7,K6,K5と、乱数RNに基づいて決定された演算処理と逆演算処理の組み合わせ処理が実行されている。そして１０回のステップの後に、最終結果データと同じデータになったので、後処理は終了している。
【０１０７】
具体的には、暗号処理終了時にも、本来の鍵とは異なる鍵で通常演算と逆演算を同じ回数繰り返すことによって、最終ラウンドの終了時の結果データを変化させることが可能となる。さらに最終ラウンドの処理に続いて、暗号アルゴリズムには定義されていないラウンド鍵を用いて通常演算とその後に逆演算を行うことにより、さらに処理時間を可変にすることが可能となる。
【０１０８】
以上のように、第１の変形例では、制御部は、暗号処理の前と後の少なくとも一方に、少なくとも１回の連続した逆演算（及びその逆演算に対応する通常演算）を挿入する。
【０１０９】
これによって、暗号処理の処理時間が変化するとともに、前処理と後処理を挿入することによって、暗号処理の開始時刻および終了時刻を可変にすることができ、電力解析に対してより耐性を高めることが可能となる。
【０１１０】
次に、第２の変形例について説明する。上述した各実施形態の暗号処理装置は、乱数発生回路１８を有しているが、本変形例暗号処理装置は、乱数発生回路が発生する乱数RNにより決定される通常演算の実行される確率が調整される確率調整部を有する。
【０１１１】
上述した各実施形態の暗号処理装置の乱数発生回路は、逆演算処理が挿入される確率は、５０％となる。例えば、乱数を発生させて、その乱数に基づいて「１」と「０」のそれぞれの発生確率が、５０％とすると、暗号処理中に逆演算がランダムに挿入されるため、暗号処理装置の要求される処理時間内に暗号処理が終了しない場合が発生する虞がある。
【０１１２】
そこで、本第２の変形例では、逆演算が実行される確率よりも、暗号処理が実行される確率を上げるようにして、暗号処理装置の実行時間を所定の時間内に収めることができるようにした。
【０１１３】
そのため、乱数発生回路の発生する乱数の発生確率を調整するための確率調整部が、乱数発生回路内に、あるいは乱数発生回路とは別に設けられる。  
図１７から図１９は、確率調整部１８ａからの確率調整信号Pcに基づいて、暗号処理の実行確率の変化を示す図である。図２０は、本第２の変形例に係る暗号処理装置1Dの構成を示す図である。図２０において、図１と同じ構成要素については、同じ符号を付し説明は省略する。図２０では、確率調整部１８ａは、乱数発生回路１８に接続されて、確率調整信号Pcを供給している。確率調整部１８ａからの確率調整信号Pcに基づいて、乱数発生回路１８の発生する乱数RNの逆演算の発生確率あるいは暗号処理の実行確率が変更される。言い換えれば、確率調整部１８ａは、乱数発生回路１８の発生する乱数RNによって決定される第１の演算（逆演算）及び第２の演算（その逆演算に対応する通常演算）の実行確率を調整する。
【０１１４】
図１７は、確率調整信号Pcに基づいて、暗号処理の実行確率が、点線で示す０．５よりも、所定の量だけ高い一定値になっていることを示している。乱数RNによって決定される所定の値に応じて、暗号処理が実行されるか、あるいは逆演算（およびその逆演算に対応する通常演算）が実行されるとする。その場合、例えば、所定の値が「１」のときには、暗号演算の実行が指示され、所定の値が「０」のときには、逆演算の挿入が指示されるとする。この場合に、所定の値「１」の発生確率を、０．５よりも高くすると、暗号処理の実行確率が、０．５よりも高くなるので、暗号処理装置の暗号処理が所定の時間内に終了する確率が高くなる。所定の値「１」の発生確率は、暗号処理の要求される処理時間が短くなればなるほど、高く設定される。このような方法を用いれば、暗号処理装置は、終了時間が確率的に変化するため、電力解析に対して耐性が高くなる。
【０１１５】
図１８は、確率調整信号Pcに基づいて、暗号処理の実行確率が、点線で示す０．５よりも、所定の量だけ高く、かつ所定の制限時間に近くなると、高くなっていることを示している。特に、暗号処理の実行確率が、その制限時間の直前のある期間では、１．０になっている。このように、暗号処理の実行確率が、所定の制限時間に近づくにつれて高くなり、さらに制限時間の直前では、１．０になっているので、暗号処理装置の暗号処理を、所定の時間内に確実に終了させることができる。
【０１１６】
このように、暗号処理装置の処理時間に制限値を設けられている場合、その制限時間に近づくに従って、発生確率を大きくすると、制限時間に近づくにつれて、暗号処理の発生確率が大きくなるため、終了時間を制限時間に近づけることが可能となる。また、残りステップ数が制限時間で処理できる限界に達したときに発生確率を１．０とすれば、処理時間を確実に制限時間以内に収めることが可能となる。
【０１１７】
図１９は、確率調整信号Pcに基づいて、暗号処理の実行確率が、点線で示す０．５よりも、所定の量だけ高く、かつ暗号処理の前半と後半の間の途中期間において、高くなっていることを示している。特に、暗号処理の実行確率が、その途中期間では、１．０になっている。このように、暗号処理の実行確率が、途中期間で高くなっているので、暗号処理装置の暗号処理を、所定の時間内に確実に終了させることができ、かつ前半と後半では逆演算処理が実行される確率が比較的高くなるので、電力解析に対する耐性も高めることができる。
【０１１８】
具体的には、暗号処理の開始時および演算終了時は、暗号処理の実行確率を小さくし、それ以外のときでは、０．５より大きくなっている。通常、暗号処理に対する電力解析においては、暗号処理の開始時と終了時が攻撃の対象となる。従って、開始時と終了時には暗号処理の実行確率を０．５に近づけることで、開始時と終了時の逆演算の発生確率を高くし、暗号処理の開始時及び終了時をわかりにくくすることが可能となる。
【０１１９】
以上のように、確率調整部１８ａは、暗号処理の処理時間が所定の時間内に終了するように、暗号演算処理部において実行される暗号処理が暗号化演算の場合は、暗号化演算の実行確率が、逆演算である復号化演算（及びその逆演算に対応する通常演算）の実行確率よりも高くなるように、暗号処理が復号化演算の場合は、復号化演算の実行確率が、逆演算である暗号化演算（及びその逆演算に対応する通常演算）の実行確率よりも高くなるように、暗号処理の実行確率あるいは逆演算（及びその逆演算に対応する通常演算）の実行確率を調整する。
【０１２０】
次に第３の変形例について説明する。  
上述した各実施形態及び各変形例によれば、暗号処理中に逆演算処理を挿入することによって、ダミー演算を用いなくても電力解析攻撃への耐性を有する暗号処理装置を実現することができる。従って、従来のようなダミー演算のためのレジスタ回路を設けなくても、暗号処理時間が変化し、電力解析に対して耐性を持たせることが可能となる。
【０１２１】
しかし、チップ上にレジスタ回路を搭載する余裕があって回路規模が問題にならない場合もある。  
そのような場合には、ダミー演算用のレジスタ回路を設け、かつ上述した各実施形態及び各変形例に係る暗号処理にダミー演算も加えるようにすれば、より電力解析に対する耐性を高めることができる。
【０１２２】
その場合、図２０において点線で示すように、暗号回路モジュール１５内に、レジスタ回路１５ａが設けられる。そして、乱数RNに基づいて、逆演算（及びその逆演算に対応する通常演算）の挿入と、ダミー演算の挿入とが行われる。
【０１２３】
図２１は、逆演算とダミー演算が組み合わされた場合のステップの時間に対する変化の例を示すグラフである。図２１に示すように、ランダムに、逆演算とダミー演算が挿入されるので、より電力解析に対する耐性を高めることができる。図６と同様に、図２１において、横軸は時間、縦軸はステップを示し、右上がりは通常演算、右下がりは逆演算が行われたことを示し、黒丸はダミー演算が行われたことを示す。
【０１２４】
なお、上述した実施の形態及び各変形例では、各暗号処理装置として、ICカードの例を挙げて説明したが、他の機器でもよい。  
本発明は、上述した実施の形態に限定されるものではなく、本発明の要旨を変えない範囲において、種々の変更、改変等が可能である。
【符号の説明】
【０１２５】
１、１B、１D  暗号処理装置、１１  CPU、１２  ROM、１３  RAM、１４，１７  インターフェース、１５、１５B、１５C  暗号回路モジュール、１６  バス、１８  乱数発生回路、１８ａ  確率調整部、２１  暗号化回路、２２  復号化回路、２３，２３Ｂ、２３Ｃ  制御回路、２４，２５  セレクタ、１５ａ、２６，４１  レジスタ、３１  ラウンドカウンタ、３２  ラウンド制御部、３３  ラウンド制御カウンタ、４２  比較器
【図１】
0005433498.tif 000002
【図２】
0005433498.tif 000003
【図３】
0005433498.tif 000004
【図４】
0005433498.tif 000005
【図５】
0005433498.tif 000006
【図６】
0005433498.tif 000007
【図７】
0005433498.tif 000008
【図８】
0005433498.tif 000009
【図９】
0005433498.tif 000010
【図１０】
0005433498.tif 000011
【図１１】
0005433498.tif 000012
【図１２】
0005433498.tif 000013
【図１３】
0005433498.tif 000014
【図１４】
0005433498.tif 000015
【図１５】
0005433498.tif 000016
【図１６】
0005433498.tif 000017
【図１７】
0005433498.tif 000018
【図１８】
0005433498.tif 000019
【図１９】
0005433498.tif 000020
【図２０】
0005433498.tif 000021
【図２１】
0005433498.tif 000022