(57)【特許請求の範囲】
【請求項１】
ラウンド鍵を用いて暗号演算を行う暗号演算装置であって、
Ｒ，Ｃ及びＷを１以上の整数の定数とし、ｎを１以上の整数の変数とした場合における、ｎ−１ラウンド目のＬ＝Ｗ・（Ｃ＋１）・（Ｒ＋１）ビット長のラウンド鍵Ｋｎ−１∈｛０，１｝Ｌを格納する記憶部と、
０以上Ｒ以下の整数ｒを選択する選択部と、
ｃを０以上Ｃ以下の整数の変数とし、ラウンド鍵Ｋｎ−１の上位Ｗ｛（Ｒ＋１）・ｃ＋ｒ｝＋１ビット目からＷ｛（Ｒ＋１）・ｃ＋ｒ＋１｝ビット目までからなるＷビットのビット列をＢＩＳｎ−１，ｒ，ｃとし、ＢＩＳｎ−１，ｒ（０）＝ＢＩＳｎ−１，ｒ，０｜ＢＩＳｎ−１，ｒ，１｜…｜ＢＩＳｎ−１，ｒ，Ｃとし、ｉを０以上Ｃ−１以下の各整数とした場合における、ビット列ＢＩＳｎ−１，ｒ（ｉ）を下位にＷビットシフトさせたビット列ＢＩＳｎ−１，ｒ（ｉ＋１）を生成する右シフト部と、
０以上Ｃ以下の各ｊにそれぞれ対応する各ビット列ＢＩＳｎ−１，ｒ（ｊ）の排他的論理和であるビット列ＸＯＲＢＩＳｎ−１，ｒ（Ｃ）を求める第１排他的論理和演算部と、
ｋを−Ｒ以上Ｒ以下の整数の定数とし、前記記憶部に格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃに対して一義的に定まるＷビットのビット列をＣＢＩＳｎ−１，ｒ，Ｃとし、ＸＯＲＢＩＳｎ−１，ｒ（Ｃ）＝ＸＯＲＢＩＳｎ−１，ｒ，０｜ＸＯＲＢＩＳｎ−１，ｒ，１｜...｜ＸＯＲＢＩＳｎ−１，ｒ，Ｃを満たすＷビットの各ビット列をＸＯＲＢＩＳｎ−１，ｒ，ｃとした場合における、ＣＢＩＳｎ−１，ｒ，ＣとＸＯＲＢＩＳｎ−１，ｒ，ｃとの排他的論理和を各ｃについて計算し、各ｃに対応する各演算結果をｎラウンド目のラウンド鍵Ｋｎ∈｛０，１｝Ｌの上位Ｗ｛（Ｒ＋１）・ｃ＋ｒ｝＋１ビット目からＷ｛（Ｒ＋１）・ｃ＋ｒ＋１｝ビット目までのビット列ＢＩＳｎ，ｒ，ｃとして出力する第２排他的論理和演算部と、
０以上Ｒ以下のすべての整数ｒについてラウンド鍵Ｋｎの各ビット列ＢＩＳｎ，ｒ，ｃが得られるまで、前記選択部、前記右シフト部、前記第１排他的論理和演算部、及び前記第２排他的論理和演算部の各処理を繰返し実行させる制御部と、
を有する暗号演算装置。
【請求項２】
請求項１の暗号演算装置であって、
前記選択部は、０以上Ｒ以下のランダムな整数ｒを選択する、
ことを特徴とする暗号演算装置。
【請求項３】
請求項２の暗号演算装置であって、
前記制御部は、前記選択部で選択された整数ｒに対するビット列ＢＩＳｎ，ｒ，ｃが既に得られている場合には、当該整数ｒに対応する前記右シフト部、前記第１排他的論理和演算部、及び前記第２排他的論理和演算部の各処理を繰返し実行させることなく、前記選択部に新たなランダムな整数ｒを選択させる、
ことを特徴とする暗号演算装置。
【請求項４】
請求項２の暗号演算装置であって、
前記制御部は、前記選択部で選択された整数ｒに対するビット列ＢＩＳｎ，ｒ，ｃが既に得られているか否かにかかわらず、当該整数ｒに対応する前記右シフト部、前記第１排他的論理和演算部、及び前記第２排他的論理和演算部の各処理を実行させる、
ことを特徴とする暗号演算装置。
【請求項５】
請求項１の暗号演算装置であって、
前記記憶部に格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃから所定の規則に従ってビット列ＣＢＩＳｎ−１，ｒ，Ｃを生成する置換部をさらに有し、
前記制御部は、前記選択部の処理、前記置換部の処理、前記右シフト部の処理、前記第１排他的論理和演算部の処理、前記第２排他的論理和演算部の処理の順序で各処理を繰り返し実行させ、
前記第２排他的論理和演算部から出力されたビット列ＢＩＳｎ，ｒ，ｃは、前記記憶部のビット列ＢＩＳｎ−１，ｒ，ｃが格納されていた領域に上書きされ、
ｋは１又は−１であり、
前記選択部、前記置換部、前記右シフト部、前記第１排他的論理和演算部、及び前記第２排他的論理和演算部の各処理が繰り返されるたびに、前記選択部は（ｒ＋ｋ）ｍｏｄ（Ｒ＋１）を新たな整数ｒとして選択する、
ことを特徴とする暗号演算装置。
【請求項６】
請求項１から５の何れかの暗号演算装置であって、
Ｒ及びＣは３であり、Ｗは８であり、Ｌは１２８であり、ｋは１であり、ＣＢＩＳｎ−１，ｒ，３は、前記記憶部に格納されたビット列ＢＩＳｎ−１，（ｒ＋1）ｍｏｄ４，３を所定の置換規則に従って置換した８ビットのビット列であり、ビット列ＣＢＩＳｎ−１，ｒ，３とビット列ＢＩＳｎ−１，（ｒ＋1）ｍｏｄ４，３とは一対一で対応する、
ことを特徴とする暗号演算装置。
【請求項７】
ラウンド鍵を用いて暗号演算を行う暗号演算方法であって、
(a)Ｒ，Ｃ及びＷを１以上の整数の定数とし、ｎを１以上の整数の変数とした場合における、ｎ−１ラウンド目のＬ＝Ｗ・（Ｃ＋１）・（Ｒ＋１）ビット長のラウンド鍵Ｋｎ−１∈｛０，１｝Ｌを記憶部に格納するステップと、
(b)選択部が、０以上Ｒ以下の整数ｒを選択するステップと、
(c)右シフト部が、ｃを０以上Ｃ以下の整数の変数とし、ラウンド鍵Ｋｎ−１の上位Ｗ｛（Ｒ＋１）・ｃ＋ｒ｝＋１ビット目からＷ｛（Ｒ＋１）・ｃ＋ｒ＋１｝ビット目までからなるＷビットのビット列をＢＩＳｎ−１，ｒ，ｃとし、ＢＩＳｎ−１，ｒ（０）＝ＢＩＳｎ−１，ｒ，０｜ＢＩＳｎ−１，ｒ，１｜…｜ＢＩＳｎ−１，ｒ，Ｃとし、ｉを０以上Ｃ−１以下の整数とした場合における、ビット列ＢＩＳｎ−１，ｒ（ｉ）を下位にＷビットシフトさせたビット列ＢＩＳｎ−１，ｒ（ｉ＋１）を生成するステップと、
(d)第１排他的論理和演算部が、ＸＯＲＢＩＳｎ−１，ｒ（０）＝ＢＩＳｎ−１，ｒ（０）とした場合における、ＸＯＲＢＩＳｎ−１，ｒ（ｉ）とビット列ＢＩＳｎ−１，ｒ（ｉ＋１）との排他的論理和値ＸＯＲＢＩＳｎ−１，ｒ（ｉ＋１）を計算するステップと、
(e)第２排他的論理和演算部が、ｋを−Ｒ以上Ｒ以下の整数の定数とし、前記記憶部に格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃに対して一義的に定まるＷビットのビット列をＣＢＩＳｎ−１，ｒ，Ｃとし、前記ステップ(c)(d)を０以上Ｃ−１以下の各整数ｉについて実行して得られた排他的論理和値ＸＯＲＢＩＳｎ−１，ｒ（Ｃ）に対してＸＯＲＢＩＳｎ−１，ｒ（Ｃ）＝ＸＯＲＢＩＳｎ−１，ｒ，０｜ＸＯＲＢＩＳｎ−１，ｒ，１｜...｜ＸＯＲＢＩＳｎ−１，ｒ，Ｃを満たすＷビットの各ビット列をＸＯＲＢＩＳｎ−１，ｒ，ｃとした場合における、ＣＢＩＳｎ−１，ｒ，ＣとＸＯＲＢＩＳｎ−１，ｒ，ｃとの排他的論理和を各ｃについて計算し、各ｃに対応する各演算結果をｎラウンド目のラウンド鍵Ｋｎ∈｛０，１｝Ｌの上位Ｗ｛（Ｒ＋１）・ｃ＋ｒ｝＋１ビット目からＷ｛（Ｒ＋１）・ｃ＋ｒ＋１｝ビット目までのビット列ＢＩＳｎ，ｒ，ｃとして出力するステップと、を有し、
前記ステップ(b)から(e)は、０以上Ｒ以下のすべての整数ｒについてラウンド鍵Ｋｎの各ビット列ＢＩＳｎ，ｒ，ｃが得られるまで繰返し実行されるステップである、
ことを特徴とする暗号演算方法。
【請求項８】
請求項７の暗号演算方法であって、
前記ステップ(b)は、０以上Ｒ以下のランダムな整数ｒを選択するステップである、
ことを特徴とする暗号演算方法。
【請求項９】
請求項７の暗号演算方法であって、
(f)置換部が、前記記憶部に格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃから所定の規則に従ってビット列ＣＢＩＳｎ−１，ｒ，Ｃを生成するステップをさらに有し、
前記ステップ(b)から(f)は、ステップ(b)、ステップ(f)、ステップ(c)、ステップ(d)、ステップ(e)の順序で繰返し実行されるステップであり、
ステップ(e)で生成されたビット列ＢＩＳｎ，ｒ，ｃは、前記記憶部のビット列ＢＩＳｎ−１，ｒ，ｃが格納されていた領域に上書きされ、
ｋは１又は−１であり、
前記ステップ(b)から(f)の処理が繰り返されるたびに、前記ステップ(b)において（ｒ＋ｋ）ｍｏｄ（Ｒ＋１）が新たな整数ｒとして選択される、
ことを特徴とする暗号演算方法。
【請求項１０】
請求項８の暗号演算方法であって、
前記ステップ(b)で選択された整数ｒに対するビット列ＢＩＳｎ，ｒ，ｃが既に得られているか否かにかかわらず、当該整数ｒに対応する前記ステップ(c),(d),(e)の各処理を実行する、
ことを特徴とする暗号演算方法。
【請求項１１】
請求項７から１０の何れかの暗号演算方法であって、
Ｒ及びＣは３であり、Ｗは８であり、Ｌは１２８であり、ｋは１であり、ＣＢＩＳｎ−１，ｒ，３は、前記記憶部に格納されたビット列ＢＩＳｎ−１，（ｒ＋1）ｍｏｄ４，３を所定の置換規則に従って置換した８ビットのビット列であり、ビット列ＣＢＩＳｎ−１，ｒ，３とビット列ＢＩＳｎ−１，（ｒ＋1）ｍｏｄ４，３とは一対一で対応する、
ことを特徴とする暗号演算方法。
【請求項１２】
請求項１から６の何れかの暗号演算装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ラウンド鍵を用いて暗号演算を行うための演算技術に関し、特に、ＤＦＡ攻撃対策が施された演算技術に関する。
【背景技術】
【０００２】
ＩＣカード等の暗号演算装置の暗号演算中に故障を発生させ、正しい演算結果と故障が発生したときの演算結果との差を利用して、秘密鍵を不正に取得する差分故障利用解析攻撃（ＤＦＡ攻撃：Differential Fault Analysis）が知られている（例えば、非特許文献１参照）。特に、近年、共通鍵暗号方式ＡＥＳ（Advanced Encryption Standard）の拡大鍵生成部へのＤＦＡ攻撃が提案されている（例えば、非特許文献２参照）。
【０００３】
ＡＥＳの暗号化処理では、１２８ビット（１６バイト）の平文データを１２８ビットの秘密鍵を用いて暗号化する。その暗号化処理は複数のラウンドから構成され、ラウンドごとに、拡大鍵生成部での秘密鍵に基づいた拡大鍵（ラウンド鍵）の更新と、暗号演算部での暗号対象データのSubBytes（バイトごとの置換）処理、ShiftRows（行のシフト）処理、MixColumns（列の混合）処理及びAddRoundKey（ラウンド鍵との排他的論理和）処理とが行われる。また、復号処理は暗号化処理を逆向きに実行する処理となる。
【０００４】
図１は、従来の拡大鍵生成部の処理を説明するための図である。また、図２は、９ラウンド目で故障が発生した場合の従来の拡大鍵生成部の処理を説明するための図である。なお、図１及び図２のＢＩＳｎ−１，ｒ，ｃ（ｎは１以上１１以下の整数、ｃ及びｒは０以上３以下の整数）は、ｎ−１ラウンド目のラウンド鍵Ｋｎ−１∈｛０，１｝１２８（ラウンド鍵Ｋ０は秘密鍵）の８（４・ｃ＋ｒ）＋１ビット目から８（４・ｃ＋ｒ＋１）ビット目までからなる８ビット（１バイト）のビット列を意味する。また、Ｒｃｏｎｎ−１は３２ビットの定数である。
【０００５】
図１に示すように、従来の拡大鍵生成部では、鍵長１２８ビットの鍵を連続する３２ビットずつ４列のブロックに区切って計１０ラウンドの演算を行い、１１個の１２８ビットのラウンド鍵Ｋ０，…，Ｋ１０が生成される。例えば、ｎラウンド目の処理では、ラウンド鍵Ｋｎ−１の４列目のブロックであるビット列ＢＩＳｎ−１，０，３，…，ＢＩＳｎ−１，３，３をバイト単位でローテーション（RotWord）し、それをバイト単位で置換した（SubWord）ビット列と定数Ｒｃｏｎｎとの排他的論理和を行い、その演算結果とラウンド鍵Ｋｎ−１の１列目のブロックであるビット列ＢＩＳｎ−１，０，０，…，ＢＩＳｎ−１，３，０との排他的論理和をラウンド鍵Ｋｎの１列目のブロックであるビット列ＢＩＳｎ，０，０，…，ＢＩＳｎ，３，０とする。そして、ラウンド鍵Ｋｎ−１のｃ＋１列目のブロックであるビット列ＢＩＳｎ−１，０，ｃ＋１，…，ＢＩＳｎ―１，３，ｃ＋１と、ラウンド鍵Ｋｎのｃ列目のブロックであるビット列ＢＩＳｎ，０，ｃ，…，ＢＩＳｎ，３，ｃとの排他的論理和を、ラウンド鍵Ｋｎのｃ＋１列目のブロックであるビット列ＢＩＳｎ，０，ｃ＋１，…，ＢＩＳｎ，３，ｃ＋１とする。
【０００６】
ここで、図２に示すように、攻撃者がある時点で故意に発生させた故障により、９ラウンド目の０列目３２ビットのブロックを構成するビット列ＢＩＳ９，０，０，…，ＢＩＳ９，３，０に誤りが生じたとする。この故障には、演算途中に発生するものや、演算結果が格納された記憶部に発生するものが含まれる。従来のアルゴリズムの場合、この誤りは９ラウンド目のラウンド鍵の１列目から３列目のすべてのビット列に伝播し、さらに、１０ラウンド目の０列目から３列目のすべてのビット列にも伝播する。その結果、９，１０ラウンド目のラウンド鍵Ｋ９，Ｋ１０のすべてのビット列に攻撃者の故意に発生させた故障の影響が及ぶ。その結果、９，１０ラウンド目にラウンド鍵Ｋ９，Ｋ１０を用いて行われるAddRoundKey（ラウンド鍵との排他的論理和）処理の結果得られるすべてのビット列にも攻撃者の故意に発生させた故障の影響が及ぶ。１０ラウンド目のAddRoundKeyの処理結果は暗号文として攻撃者が取得可能である。ＤＦＡ攻撃では、攻撃者が故障を発生させた場合の暗号文と故障を発生させない場合の暗号文とを取得し、それらの差分を用い、差分が生じたバイト位置に対応する共通鍵の情報を取得する。従来の構成では、攻撃者がある時点で故意に発生させた故障の影響がその後に演算されるすべてのビット列の演算結果に及ぶため、ＤＦＡ攻撃によって攻撃者に多くの情報を与えてしまう。
【０００７】
このような攻撃に対抗する従来の手段として、暗号演算部の他にエラー検知コードを生成する処理部を設け、暗号演算結果とエラー検知コードとを用いて暗号演算中のエラーの有無を判定したり、エラー訂正を行ったりする方法がある（例えば、非特許文献３，４参照）。
【非特許文献１】E. Biham and A. Shamir, "Differential Fault Analysis of Secret Key Cryptosystems," Advances in Cryptology, CRYPTO'97, LNCS 1294, Springer-Verlag, pp. 513-525, 1997.
【非特許文献２】J. Takahashi, T. Fukunaga and K. Yamakoshi, "DFA Mechanism on the AES Key Schedule", Fourth International Workshop on Fault Diagnosis and Tolerance in Cryptography -- FDTC 2007.
【非特許文献３】G. Bertoni, L. Breveglieri, I. Koren, P. Maistri and V. Piuri, "Error analysis and detection procedures for a hardware implementation of the advanced encryption standard", IEEE Transactions on Computers, Vol. 52, No.4, 2003.
【非特許文献４】M. Karpovsky, K.J. Kulikowski and A. Taubin, "Robust protection against fault-injection attacks on smart cards implementing the advanced encryption standard", International Conference on Dependable Systems and Networks -- DSN'04.
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかし、従来のＤＦＡ攻撃への対抗方法では、暗号演算とは別にエラー検知やエラー訂正を行う必要があるため、暗号演算をハードウェア実装した場合には暗号回路の規模が増大してしまい、ソフトウェア実装した場合には暗号演算処理時間が増大してしまうという問題がある。このような問題は、鍵長１２８ビットのＡＥＳに限らず、ラウンド鍵を連続するビット列からなる複数のブロックに分断し、ブロック単位で排他的論理和演算を行ってラウンド鍵を更新し、暗号処理を行う方式に共通する問題である。
【０００９】
本発明はこのような点に鑑みてなされたものであり、エラー検知やエラー訂正に伴う回路規模や演算時間の増大を抑制しつつ、ＤＦＡ攻撃に対する安全性を向上させることが可能な技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明では上記課題を解決するために、ラウンド鍵を用いて暗号演算を行う暗号演算装置であって、Ｒ，Ｃ及びＷを１以上の整数の定数とし、ｎを１以上の整数の変数とした場合における、ｎ−１ラウンド目のＬ＝Ｗ・（Ｃ＋１）・（Ｒ＋１）ビット長のラウンド鍵Ｋｎ−１∈｛０，１｝Ｌを格納する記憶部と、０以上Ｒ以下の整数ｒを選択する選択部と、ｃを０以上Ｃ以下の整数の変数とし、ラウンド鍵Ｋｎ−１の上位Ｗ｛（Ｒ＋１）・ｃ＋ｒ｝＋１ビット目からＷ｛（Ｒ＋１）・ｃ＋ｒ＋１｝ビット目までからなるＷビットのビット列をＢＩＳｎ−１，ｒ，ｃとし、ＢＩＳｎ−１，ｒ（０）＝ＢＩＳｎ−１，ｒ，０｜ＢＩＳｎ−１，ｒ，１｜…｜ＢＩＳｎ−１，ｒ，Ｃとし、ｉを０以上Ｃ−１以下の各整数とした場合における、ビット列ＢＩＳｎ−１，ｒ（ｉ）を下位にＷビットシフトさせたビット列ＢＩＳｎ−１，ｒ（ｉ＋１）を生成する右シフト部と、０以上Ｃ以下の各ｊにそれぞれ対応する各ビット列ＢＩＳｎ−１，ｒ（ｊ）の排他的論理和であるビット列ＸＯＲＢＩＳｎ−１，ｒ（Ｃ）を求める第１排他的論理和演算部と、ｋを−Ｒ以上Ｒ以下の整数の定数とし、記憶部に格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃに対して一義的に定まるＷビットのビット列をＣＢＩＳｎ−１，ｒ，Ｃとし、ＸＯＲＢＩＳｎ−１，ｒ（Ｃ）＝ＸＯＲＢＩＳｎ−１，ｒ，０｜ＸＯＲＢＩＳｎ−１，ｒ，１｜...｜ＸＯＲＢＩＳｎ−１，ｒ，Ｃを満たすＷビットの各ビット列をＸＯＲＢＩＳｎ−１，ｒ，ｃとした場合における、ＣＢＩＳｎ−１，ｒ，ＣとＸＯＲＢＩＳｎ−１，ｒ，ｃとの排他的論理和を各ｃについて計算し、各ｃに対応する各演算結果をｎラウンド目のラウンド鍵Ｋｎ∈｛０，１｝Ｌの上位Ｗ｛（Ｒ＋１）・ｃ＋ｒ｝＋１ビット目からＷ｛（Ｒ＋１）・ｃ＋ｒ＋１｝ビット目までのビット列ＢＩＳｎ，ｒ，ｃとして出力する第２排他的論理和演算部と、０以上Ｒ以下のすべての整数ｒについてラウンド鍵Ｋｎの各ビット列ＢＩＳｎ，ｒ，ｃが得られるまで、選択部、右シフト部、第１排他的論理和演算部、及び第２排他的論理和演算部の各処理を繰返し実行させる制御部と、を有する暗号演算装置が提供される。
【００１１】
ここで、右シフト部、第１排他的論理和演算部及び第２排他的論理和演算部の各処理は、連続するビット列からなる列方向（縦方向）のブロック単位で実行されるのではなく、ラウンド鍵の上位Ｗ｛（Ｒ＋１）・ｃ＋ｒ｝＋１ビット目からＷ｛（Ｒ＋１）・ｃ＋ｒ＋１｝ビット目までのビット列（ｃ＝０，…，Ｃ）からなる行方向（横方向）のブロック単位で実行される。そのため、攻撃者がある時点で故意に故障を発生させた場合であっても、その影響は故障を発生させたビット列と同じ行にしか及ばない。そのため、ＤＦＡ攻撃によって攻撃者が得ることができる情報は、故障を発生させたビット列と同じ行に対応する部分に限られる。その結果、ＤＦＡ攻撃に対する安全性が向上する。
【００１２】
また、本発明において好ましくは、選択部は０以上Ｒ以下のランダムな整数ｒを選択する。ここで、整数ｒをランダムな値とすることにより、右シフト部、第１排他的論理和演算部及び第２排他的論理和演算部の各処理が実行される行方向のブロック単位の選択がランダムとなる。その結果、攻撃者はラウンド鍵の生成手順を予測することが困難となり、ラウンド鍵生成手順中の所望の演算結果に故意に故障を発生させることが困難となる。その結果、ＤＦＡ攻撃に対する安全性がより向上する。
【００１３】
また、整数ｒをランダムな値とする場合において、選択部で選択された整数ｒに対するビット列ＢＩＳｎ，ｒ，ｃが既に得られている場合には、当該整数ｒに対応する右シフト部、第１排他的論理和演算部、及び第２排他的論理和演算部の各処理を繰返し実行させることなく、選択部に新たなランダムな整数ｒを選択させる構成としてもよい。これにより、ラウンド鍵の生成過程において同じ行に対応する演算が重複して行われることを防止できるため、演算効率が向上する。
【００１４】
また、整数ｒをランダムな値とする場合において、選択部で選択された整数ｒに対するビット列ＢＩＳｎ，ｒ，ｃが既に得られているか否かにかかわらず、当該整数ｒに対応する右シフト部、第１排他的論理和演算部、及び第２排他的論理和演算部の各処理を実行させる構成としてもよい。この場合には、整数ｒの値に応じて繰り返し処理の有無が変化しないため、演算内容の変化に伴う消費電力の変化等によって攻撃者に演算順序等の情報が漏洩することを防止できる。その結果、安全性が向上する。
【００１５】
また、本形態において、記憶部に格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃから所定の規則に従ってビット列ＣＢＩＳｎ−１，ｒ，Ｃを生成する置換部をさらに有し、制御部が、選択部の処理、置換部の処理、右シフト部の処理、第１排他的論理和演算部の処理、第２排他的論理和演算部の処理の順序で各処理を繰り返し実行させ、第２排他的論理和演算部から出力されたビット列ＢＩＳｎ，ｒ，ｃが、記憶部のビット列ＢＩＳｎ−１，ｒ，ｃが格納されていた領域に上書きされる構成でもよい。この場合、ｋを１又は−１とし、選択部、置換部、右シフト部、第１排他的論理和演算部、及び第２排他的論理和演算部の各処理が繰り返されるたびに、選択部が（ｒ＋ｋ）ｍｏｄ（Ｒ＋１）を新たな整数ｒとして選択する構成とすることが望ましい。このようにした場合、置換部がビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃからビット列ＣＢＩＳｎ−１，ｒ，Ｃを生成するときまでに、ビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃがビット列ＢＩＳｎ，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃによって上書きされる状況を１回のみとすることができる。そのため、置換部での処理を行うために別の領域に複製しておくビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃの数を１個のみとすることができ、演算に必要な記憶領域を削減できる。
【発明の効果】
【００１６】
本発明では、エラー検知やエラー訂正に伴う回路規模や演算時間の増大を抑制しつつ、ＤＦＡ攻撃に対する安全性を向上させることが可能となる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照して本発明の実施形態を説明する。
【００１８】
〔記号の定義〕
まず、本発明の実施形態で用いる記号を定義する。
α｜β：αとβとのビット結合。
α（＋）β：αとβとの排他的論理和。
Ｒ：予め設定された１以上の整数の定数。ラウンド鍵の行番号の最大値。ＡＥＳの例ではＲ＝３。
Ｃ：予め設定された１以上の整数の定数。ラウンド鍵の列番号の最大値。ＡＥＳの例ではＣ＝３。
Ｗ：予め設定された１以上の整数の定数。演算処理単位となるビット長。ＡＥＳの例ではＷ＝８。
Ｎ：予め設定されたラウンド数。ＡＥＳの例ではＮ＝１０。
ｒ：０以上Ｒ以下の整数。
ｃ：０以上Ｃ以下の整数の変数。
ｎ：１以上Ｎ以下の整数の変数。
ｋ：予め設定された−Ｒ以上Ｒ以下の整数の定数。RotWordのローテーション方向とローテーション量に対応。ＡＥＳの例ではｋ＝１。
【００１９】
ｐ：ｒ＋ｋ  ｍｏｄ  （Ｒ＋１）を除く０以上Ｒ以下の各整数。
Ｋｎ−１∈｛０，１｝Ｌ：ｎ−１ラウンド目のラウンド鍵。
Ｌ：ラウンド鍵のビット長Ｌ＝Ｗ・（Ｃ＋１）・（Ｒ＋１）。ＡＥＳの例ではＬ＝１２８。
ＢＩＳｎ−１，ｒ，ｃ：ラウンド鍵Ｋｎ−１の上位Ｗ｛（Ｒ＋１）・ｃ＋ｒ｝＋１ビット目からＷ｛（Ｒ＋１）・ｃ＋ｒ＋１｝ビット目までからなるＷビットのビット列。
ＢＩＳｎ−１，ｒ（０）：ＢＩＳｎ−１，ｒ，０｜ＢＩＳｎ−１，ｒ，１｜…｜ＢＩＳｎ−１，ｒ，Ｃからなるビット列。
ＢＩＳｎ−１，ｒ（ｉ＋１）：ビット列ＢＩＳｎ−１，ｒ（ｉ）を下位にＷビットシフトさせたビット列。
【００２０】
ｉ：０以上Ｃ−１以下の各整数。
ＸＯＲＢＩＳｎ−１，ｒ（ｉ＋１）：ＸＯＲＢＩＳｎ−１，ｒ（ｉ）とビット列ＢＩＳｎ−１，ｒ（ｉ＋１）との排他的論理和値。ＸＯＲＢＩＳｎ−１，ｒ（０）＝ＢＩＳｎ−１，ｒ（０）。
ＣＢＩＳｎ−１，ｒ，Ｃ：ビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃから所定の規則に従って生成されたＷビットのビット列。ＣＢＩＳｎ−１，ｒ，ＣとＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃとは一対一で対応する。
ＸＯＲＢＩＳｎ−１，ｒ，ｃ：ＸＯＲＢＩＳｎ−１，ｒ（Ｃ）＝ＸＯＲＢＩＳｎ−１，ｒ，０｜ＸＯＲＢＩＳｎ−１，ｒ，１｜...｜ＸＯＲＢＩＳｎ−１，ｒ，Ｃを満たすＷビットの各ビット列。
【００２１】
〔第１実施形態〕
次に、本発明の第１実施形態について説明する。本形態は、暗号演算が記述されたソフトウェアをＣＰＵに実行させることにより、本形態の暗号演算を実装する形態である。
＜構成＞
図３（ａ）は、第１実施形態の暗号演算装置１０のハードウェア構成を説明するためのブロック図である。
【００２２】
図３（ａ）に示すように、本形態の暗号演算装置１０は、ＣＰＵ（central processing unit）１１と、ＲＡＭ（random-access memory）１２と、ＲＯＭ（read-only memory）１３と、ＥＥＰＲＯＭ１４と、乱数生成器１５と、入力インタフェース（ＩＦ）１６と、出力インタフェース（ＩＦ）１７と、データバス１８を有する。ここで、乱数生成器１５は、真性乱数を生成する集積回路であってもよいし、擬似乱数生成アルゴリズムが記述されたソフトウェアをハードウェアで実行して構築されるものであってもよい。また、ＥＥＰＲＯＭ１４には、所定のプログラムと０ラウンド目のラウンド鍵Ｋ０∈｛０，１｝Ｌとが格納されている。これらのプログラム及びラウンド鍵Ｋ０はそれぞれＲＡＭ１２に書き込まれ、さらにＣＰＵ１１がＲＡＭ１２に書き込まれたプログラムを実行し、ラウンド鍵Ｋ０を用いた暗号演算処理を行うことにより、本形態の暗号演算装置１０が構築される。
【００２３】
図３（ｂ）は、図３（ａ）のＣＰＵ１１がＲＡＭ１２に書き込まれたプログラムを実行し、ラウンド鍵Ｋ０を用いた暗号演算処理を行うことによって構築される暗号演算装置１０の機能構成を説明するためのブロック図である。
【００２４】
図３（ｂ）に示すように、本形態の暗号演算装置１０の機能構成は、記憶部１０ａと、一時記憶部１０ｂと、制御部１０ｃと、入力部１０ｄと、出力部１０ｅと、選択部１０ｆと、右シフト部１０ｇと、排他的論理和演算部１０ｈ（第１排他的論理和演算部）と、置換部１０ｉと、排他的論理和演算部１０ｊ（第２排他的論理和演算部）と、暗号演算部１０ｋとを有する。なお、記憶部１０ａは、例えば、ＲＡＭ１２やＥＥＰＲＯＭ１４やレジスタなどによって構成される記憶領域であり、一時記憶部１０ｂは、例えば、レジスタやキャッシュメモリなどによって構成される記憶領域である。また、制御部１０ｃ、右シフト部１０ｇ、排他的論理和演算部１０ｈ、置換部１０ｉ、排他的論理和演算部１０ｊ、及び暗号演算部１０ｋは、例えば、ＣＰＵ１１に所定のプログラムが読み込まれて構成される処理手段である。また、選択部１０ｆは、例えば、乱数生成器１５や所定のプログラムが読み込まれたＣＰＵ１１によって構成される処理手段である。また、入力部１０ｄや出力部１０ｅは、入力ＩＦ１６や出力ＩＦ１７によって構成される。また、本形態の暗号演算装置１０は、制御部１０ｃの制御のもと各処理を実行する。また、各演算に必要な各データは、記憶部１０ａから読み出された後、一時記憶部１０ｂに格納され、その演算結果は一時記憶部１０ｂに格納された後、記憶部１０ａに格納される。しかし、以下ではその説明を省略する。
【００２５】
＜処理＞
次に、本形態の処理について説明する。以下では、本形態の処理を一般化して説明した後、本形態をＡＥＳに適用した場合の処理を具体的に例示する。また、以下では、暗号演算装置１０が暗号化装置であり、暗号演算部１０ｋがラウンド鍵を用いて暗号化を行う場合を説明する。しかし、ラウンド鍵の生成処理は暗号化を行う場合と復号を行う場合とで同じであり、以下の説明を暗号演算装置１０が復号装置であり、暗号演算部１０ｋがラウンド鍵を用いて復号を行う場合に拡張するのは容易である。
【００２６】
［一般化した処理内容］
図４及び図５は、第１実施形態のｎラウンド目におけるラウンド鍵の生成処理を説明するためのフローチャートである。以下、これらの図を用いて本形態の一般化した処理を説明する。
【００２７】
まず、入力部１０ｄに入力されたＬ＝Ｗ・（Ｃ＋１）・（Ｒ＋１）ビットの平文Ｍが記憶部１０ａの領域１０ａａに格納される。また、ｎ−１ラウンド目のＬ＝Ｗ・（Ｃ＋１）・（Ｒ＋１）ビット長のラウンド鍵Ｋｎ−１∈｛０，１｝Ｌが記憶部１０ａの領域１０ａａに格納される（ステップＳ１）。すなわち、ラウンド鍵Ｋｎ−１の上位Ｗ｛（Ｒ＋１）・ｃ＋ｒ｝＋１ビット目からＷ｛（Ｒ＋１）・ｃ＋ｒ＋１｝ビット目までからなるＷビットのビット列ＢＩＳｎ−１，ｒ，ｃが、０以上Ｒ以下のすべての整数ｒ及び０以上Ｃ以下のすべての整数ｃについて、領域１０ａａに格納される。さらに、制御部１０ｃが、このラウンド鍵Ｋｎ−１を複製して記憶部１０ａの領域１０ａｂに格納する（ステップＳ２）。次に、選択部１０ｆが、０以上Ｒ以下のランダムな整数ｒを選択する（ステップＳ３）。この選択は、そのつど発生させた乱数や擬似乱数に基づき選択されてもよいし、予め生成或いは設定された乱数表から選択されてもよい。選択された整数ｒは一時記憶部１０ｂに格納され、以後必要に応じて各処理部に読み出される。次に、制御部１０ｃが、ｒ＋ｋ  ｍｏｄ  （Ｒ＋１）を除く０以上Ｒ以下の各整数ｐに対応する各ビット列ＢＩＳｎ−１，ｐ，Ｃを領域１０ａａから読み込み、それらを複製してＲ・Ｗビットの領域１０ａｃに格納する（ステップＳ４）。
【００２８】
次に、置換部１０ｉが、領域１０ａａ又は領域１０ａｃに格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃから所定の規則に従ってＷビットのビット列ＣＢＩＳｎ−１，ｒ，Ｃを生成し、生成したビット列ＣＢＩＳｎ−１，ｒ，Ｃによって、その領域１０ａａ又は領域１０ａｃを更新する（ステップＳ５）。なお、所定の規則とは、ビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃを、それと一対一に対応するビット列ＣＢＩＳｎ−１，ｒ，Ｃに置換する規則をいう。すなわち、ビット列ＣＢＩＳｎ−１，ｒ，Ｃはビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃに対して一義的に定まる。また、置換部１０ｉの具体的な処理の例は、予め設定された置換テーブルに従ってビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃをビット列ＣＢＩＳｎ−１，ｒ，Ｃに置換する処理や、予め設定された演算式に従ってビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃをビット列ＣＢＩＳｎ−１，ｒ，Ｃに置換する処理である。また、ｎラウンド目で初めてステップＳ５の処理を行う場合には、ビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃは必ず領域１０ａａに格納されているため、置換部１０ｉは領域１０ａａに格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃを用いて本ステップの処理を行う。一方、ｎラウンド目でステップＳ５の処理を２回目以降に行う場合には、ビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃが領域１０ａａに格納されているとは限らないため、置換部１０ｉは領域１０ａｃに格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃを用いて本ステップの処理を行う。ただし、ｎラウンド目でステップＳ５の処理を２回目以降に行う場合にビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃが領域１０ａａに格納されていることが判定できる場合には、置換部１０ｉが領域１０ａａに格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃを用いて本ステップの処理を行う処理も可能である。また、攻撃者がステップＳ５の処理に故障を発生させることも想定されるため、ステップＳ５で正しい処理が行われたことを確認する検算処理を追加すると好適である。検算処理の例は、置換部１０ｉがビット列ＣＢＩＳｎ−１，ｒ，Ｃの逆演算（逆変換）を実行し、その結果がビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃになることを確認する処理や、置換部１０ｉがビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃをビット列ＣＢＩＳｎ−１，ｒ，Ｃに変換する処理を複数回繰り返し、それらが同一の結果となることを確認する処理などである。
【００２９】
次に、制御部１０ｃが、変数ｉを０に設定し、それを一時記憶部１０ｂに格納する（ステップＳ６）。その後、右シフト部１０ｇが、領域１０ａａに格納されたビット列ＢＩＳｎ−１，ｒ（ｉ）を下位に（右に）Ｗビットシフトさせたビット列ＢＩＳｎ−１，ｒ（ｉ＋１）を生成する。なお、ＢＩＳｎ−１，ｒ（０）＝ＢＩＳｎ−１，ｒ，０｜ＢＩＳｎ−１，ｒ，１｜…｜ＢＩＳｎ−１，ｒ，Ｃである。また、ビット列ＢＩＳｎ−１，ｒ（ｉ）を下位にＷビットシフトさせるとは、ビット列ＢＩＳｎ−１，ｒ（ｉ）の下位Ｗビットが削除され、残りのビットが下位へＷビットシフトされ、上位にＷビットの０が付加されたビット列を生成する処理を意味する（具体例は後述する）。ＣＰＵ１１がこのような演算機能を備えている場合には、その演算命令によってこの処理を行ってもよいし、また、ビット列ＢＩＳｎ−１，ｒ（ｉ）の下位Ｗビット以外のビットを複製し、複製されたビット列の上位にＷビットの０を付加することによってこの処理を行ってもよい。このように生成されたビット列ＢＩＳｎ−１，ｒ（ｉ＋１）は、領域１０ａａのビット列ＢＩＳｎ−１，ｒ（ｉ）が格納されていた位置に上書きされ、領域１０ａａが更新される（ステップＳ７）。
【００３０】
次に、排他的論理和演算部１０ｈが、領域１０ａｂに格納されたビット列ＸＯＲＢＩＳｎ−１，ｒ（ｉ）と、領域１０ａａに格納されたビット列ＢＩＳｎ−１，ｒ（ｉ＋１）との排他的論理和値ＸＯＲＢＩＳｎ−１，ｒ（ｉ＋１）＝ＸＯＲＢＩＳｎ−１，ｒ（ｉ）（＋）ＢＩＳｎ−１，ｒ（ｉ＋１）を計算する。なお、ＸＯＲＢＩＳｎ−１，ｒ（０）＝ＢＩＳｎ−１，ｒ（０）である。算出されたビット列ＸＯＲＢＩＳｎ−１，ｒ（ｉ＋１）は、領域１０ａｂのビット列ＸＯＲＢＩＳｎ−１，ｒ（ｉ）が格納されていた位置に上書きされ、領域１０ａｂが更新される（ステップＳ８）。
【００３１】
次に、制御部１０ｃが、一時記憶部１０ｂに格納しておいた変数ｉの値を参照し、ｉ＝Ｃ−１であるか否かを判定する（ステップＳ９）。ここで、ｉ＝Ｃ−１でないと判定された場合、制御部１０ｃは、ｉ＋１を新たな変数ｉの値として変数ｉを更新し、この変数ｉを一時記憶部１０ｂに格納して、処理をステップＳ７に戻す（ステップＳ１０）。
【００３２】
一方、ステップＳ９でｉ＝Ｃ−１であると判定された場合には、排他的論理和演算部１０ｊが、領域１０ａａ又は領域１０ａｃに格納されたビット列ＣＢＩＳｎ−１，ｒ，Ｃと、領域１０ａｂに格納されたＷビットのビット列ＸＯＲＢＩＳｎ−１，ｒ，ｃとを読み込み、それらの排他的論理和を各ｃ＝０，１，…，Ｃについて計算し、各ｃに対応する各演算結果をｎラウンド目のラウンド鍵Ｋｎ∈｛０，１｝Ｌの上位Ｗ｛（Ｒ＋１）・ｃ＋ｒ｝＋１ビット目からＷ｛（Ｒ＋１）・ｃ＋ｒ＋１｝ビット目までのビット列ＢＩＳｎ，ｒ，ｃ＝ＣＢＩＳｎ−１，ｒ，Ｃ（＋）ＸＯＲＢＩＳｎ−１，ｒ，ｃとし、ビット列ＢＩＳｎ，ｒ，ｃで領域１０ａｂを更新する（ステップＳ１１）。なお、ビット列ＸＯＲＢＩＳｎ−１，ｒ，ｃは、それぞれ、ＸＯＲＢＩＳｎ−１，ｒ（Ｃ）＝ＸＯＲＢＩＳｎ−１，ｒ，０｜ＸＯＲＢＩＳｎ−１，ｒ，１｜．．．｜ＸＯＲＢＩＳｎ−１，ｒ，Ｃを満たすＷビットのビット列である。
【００３３】
次に、制御部１０ｃが、０以上Ｒ以下のすべての整数ｒにそれぞれ対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みであるか否かを判定する（ステップＳ１２）。ここで、０以上Ｒ以下のすべての整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃがそれぞれ生成済みであると判定された場合には、ｎラウンド目のラウンド鍵生成処理が終了する。
【００３４】
一方、０以上Ｒ以下の何れかの整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みでないと判定された場合には、選択部１０ｆがステップＳ３と同様に０以上Ｒ以下の新たな整数ｒを選択する。選択された整数ｒは一時記憶部１０ｂに格納され、これによって一時記憶部１０ｂに格納された整数ｒが更新され、以後必要に応じて各処理部に読み出される。次に、制御部１０ｃが、ステップＳ１３で選択された整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みであるか否かを判定する（ステップＳ１４）。ここで、ステップＳ１３で選択された整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みであると判定された場合には、ステップＳ１３の処理に戻る。一方、ステップＳ１３で選択された整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みでないと判定された場合には、制御部１０ｃが、領域１０ａｂのビット列を複製して領域１０ａａに格納し（ステップＳ１５）、処理をステップＳ５に戻す。
【００３５】
以上のように生成された各ラウンドのラウンド鍵Ｋ０，Ｋ１，…，ＫＮと平文Ｍとは暗号演算部１０ｋに読み込まれ、暗号演算部１０ｋは、ＡＥＳ等の所定の暗号化手順に従い、ラウンド鍵Ｋ０，Ｋ１，…，ＫＮを用いて平文Ｍを暗号化し、その暗号文ｅｎｃ（Ｍ）を領域１０ａｄに格納する。当該暗号演算部１０ｋの暗号演算処理は、すべてのラウンド鍵Ｋ０，Ｋ１，…，ＫＮが生成された後にまとめて実行されてもよいし、ラウンド鍵Ｋ１を生成したら１ラウンド目の暗号演算を行い、ラウンド鍵Ｋ２を生成したら２ラウンド目の暗号演算を行いというように、各ラウンド鍵が生成されるたびにそのラウンドの暗号演算処理が実行されてもよい。領域１０ａｄに格納された暗号文ｅｎｃ（Ｍ）は出力部１０ｅに送られ、そこから出力される。
【００３６】
［本形態をＡＥＳに適用した場合の処理内容］
次に、第１実施形態をＡＥＳに適用した場合の処理を説明する。この場合、Ｒ及びＣは３であり、Ｗは８であり、Ｌは１２８であり、ｋは１であり、ＣＢＩＳｎ−１，ｒ，Ｃは、ビット列ＢＩＳｎ−１，（ｒ＋１）ｍｏｄ４，３を所定の置換規則に従って置換した８ビットのビット列である。
【００３７】
図６は、第１実施形態をＡＥＳに適用した場合のｒ＝２における処理の全体を示す図である。また、図７から図１１は、第１実施形態をＡＥＳに適用した場合に、記憶部１０ａの各領域１０ａａ〜１０ａｃに格納されるビット列を例示した図である。また、図１２（ａ）は、第１実施形態をＡＥＳに適用した場合に選択部１０ｆで選択される整数ｒの一例を説明するための図であり、図１２（ｂ）から図１２（ｅ）は、選択された各整数ｒに対応する処理対象を示す図である。以下、これらの図を用いて本形態をＡＥＳに適用した場合における、ｎラウンド目のラウンド鍵の生成処理を説明する。
【００３８】
このラウンド鍵の生成処理の例では、まず、ｎ−１ラウンド目の１２８ビット長のラウンド鍵Ｋｎ−１∈｛０，１｝１２８が記憶部１０ａの領域１０ａａに格納される（ステップＳ１）。すなわち、ラウンド鍵Ｋｎ−１の上位８（４・ｃ＋ｒ）＋１ビット目から８（４・ｃ＋ｒ＋１）ビット目までからなる８ビットのビット列ＢＩＳｎ−１，ｒ，ｃが、０以上３以下のすべての整数ｒ及び０以上３以下のすべての整数ｃについて、領域１０ａａに格納される（図６、図７（ａ））。さらに、制御部１０ｃが、このラウンド鍵Ｋｎ−１を複製して記憶部１０ａの領域１０ａｂに格納する（ステップＳ２、図７（ａ））。次に、選択部１０ｆが、０以上３以下のランダムな整数ｒを選択する（ステップＳ３）。この例ではｒ＝２が選択されたとする（図１２（ａ））。次に、制御部１０ｃが、２＋１  ｍｏｄ  （３＋１）＝３を除く０以上３以下の各整数ｐ＝０，１，２に対応する各ビット列ＢＩＳｎ−１，ｐ，３を領域１０ａａから読み込み、それらを複製して２４ビットの領域１０ａｃに格納する（ステップＳ４、図７（ａ））。
【００３９】
次に、置換部１０ｉが、領域１０ａａに格納されたビット列ＢＩＳｎ−１，（２＋１）ｍｏｄ（３＋１），３＝ＢＩＳｎ−１，３，３から所定の置換規則に従って８ビットのビット列ＣＢＩＳｎ−１，２，３を生成し（SubWord処理）、生成したビット列ＣＢＩＳｎ−１，２，３によって、その領域１０ａａを更新する（ステップＳ５、図６、図７（ｂ））。
【００４０】
次に、制御部１０ｃが、変数ｉを０に設定し、それを一時記憶部１０ｂに格納する（ステップＳ６）。その後、右シフト部１０ｇが、領域１０ａａに格納されたビット列ＢＩＳｎ−１，２（０）＝ＢＩＳｎ−１，２，０｜ＢＩＳｎ−１，２，１｜…｜ＢＩＳｎ−１，２，３（図１２（ｂ））を下位に８ビットシフトさせたビット列ＢＩＳｎ−１，２（１）を生成する（図６）。このように生成されたビット列ＢＩＳｎ−１，ｒ（１）は、領域１０ａａのビット列ＢＩＳｎ−１，ｒ（０）が格納されていた位置に上書きされ、領域１０ａａが更新される（ステップＳ７、図７（ｂ））。
【００４１】
次に、排他的論理和演算部１０ｈが、領域１０ａｂに格納されたビット列ＸＯＲＢＩＳｎ−１，２（０）＝ＢＩＳｎ−１，２（０）と、領域１０ａａに格納されたビット列ＢＩＳｎ−１，２（１）との排他的論理和値ＸＯＲＢＩＳｎ−１，２（１）＝ＢＩＳｎ−１，２（０）（＋）ＢＩＳｎ−１，２（１）を計算する（図６）。算出されたビット列ＸＯＲＢＩＳｎ−１，２（１）は、領域１０ａｂのビット列ＸＯＲＢＩＳｎ−１，２（０）＝ＢＩＳｎ−１，２（０）が格納されていた位置に上書きされ、領域１０ａｂが更新される（ステップＳ８、図７（ｂ））。
【００４２】
次に、制御部１０ｃが、一時記憶部１０ｂに格納しておいた変数ｉの値を参照し、ｉ＝２であるか否かを判定する（ステップＳ９）。ここで、ｉ＝２でないため、１を新たな変数ｉの値として変数ｉを更新し、この変数ｉを一時記憶部１０ｂに格納して、処理をステップＳ７に戻す（ステップＳ１０）。その後、ｉ＝１，２についてステップＳ７、Ｓ８の処理が繰り返された後（図６、図８、図９）、ステップＳ９でｉ＝２であると判定される。これにより、排他的論理和演算部１０ｊが、領域１０ａａに格納されたビット列ＣＢＩＳｎ−１，２，３と、領域１０ａｂに格納された８ビットのビット列ＸＯＲＢＩＳｎ−１，２，ｃとを読み込み、それらの排他的論理和を各ｃ＝０，１，２，３について計算し、各ｃに対応する各演算結果をｎラウンド目のラウンド鍵Ｋｎ∈｛０，１｝１２８の上位８（４・ｃ＋２）＋１ビット目から８（４・ｃ＋２＋１）ビット目までのビット列ＢＩＳｎ，２，ｃ＝ＣＢＩＳｎ−１，２，３（＋）ＸＯＲＢＩＳｎ−１，２，ｃとし、ビット列ＢＩＳｎ，２，ｃで領域１０ａｂを更新する（ステップＳ１１、図６、図１０）。
【００４３】
次に、０以上３以下のすべての整数ｒにそれぞれ対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みではないため（ステップＳ１２）、選択部１０ｆがステップＳ３と同様に０以上３以下の新たな整数ｒを選択する。ここでは、ｒ＝０が選択されたとする（図１２（ａ））。ここで、ステップＳ１３で選択された整数ｒ＝０に対応するビット列ＢＩＳｎ，０，ｃは生成済みではないため（ステップＳ１４）、制御部１０ｃが、領域１０ａｂのビット列を複製して領域１０ａａに格納し（ステップＳ１５、図１１）、処理をステップＳ５に戻す。
【００４４】
その後、ｒ＝０（図１２（ｃ））についてステップＳ５からＳ１５の処理が行われ、さらに、ｒ＝１（図１２（ｄ））についてステップＳ５からＳ１３の処理が行われる。ここで、ｒ＝１についてのステップＳ１３でｒ＝０が選択されたため、ステップＳ１３の処理がやり直され、次に選択されたｒ＝３（図１２（ｅ））についてステップＳ５からＳ１２の処理が実行され、０以上３以下のすべての整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みとなり、ｎラウンド目のラウンド鍵生成処理が終了する。
【００４５】
＜本形態の特徴＞
図１３及び図１４は、第１実施形態をＡＥＳに適用した場合のラウンド鍵生成過程に誤りが混入された様子を例示する図である。
【００４６】
［３２ビットの誤りの混入］
９ラウンド目のラウンド鍵の生成中に、攻撃者が外部から暗号演算装置１０の電源電圧を故意に変動させ、図１３に示すように９ラウンド目のｒ＝１の行の３２ビットに故障が起きたとする。しかし、本形態での処理は列単位で行われ、処理時に記憶部１０ａに格納されるデータも列単位であるため（図７から図１１）、これによって９ラウンド目では列方向に同じ誤り値が伝播することはないため、この誤り値の情報を得ることができるバイト数が減少する。このことにより攻撃時の解析が困難となるため、ＤＦＡ攻撃に対する安全性が向上する。
【００４７】
［１６ビットの誤りの混入］
９ラウンド目のラウンド鍵の生成中に、攻撃者が外部から暗号演算装置１０の電源電圧を故意に変動させ、図１３に示すように９ラウンド目のｒ＝１の行のビット列ＢＩＳ９，１，０及びＢＩＳ９，１，１の１６ビットに故障が起きたとする。しかし、本形態での処理は列単位で行われ、処理時に記憶部１０ａに格納されるデータも列単位であるため（図７から図１１）、これによって挿入された１６ビットの誤りは１０ラウンド目のｒ＝１の行のみに伝播し、列方向に伝播することはない。よって、１０ラウンド目のラウンド鍵に伝播する誤りはｒ＝１の行のみであり、その他の行には誤りが生じない。そのため、このＤＦＡ攻撃によって攻撃者が得ることができる情報は、故障を発生させたｒ＝１の行に対応する部分に限られる。その結果、１度の故障の挿入によって攻撃者が得ることができる情報量が小さくなり、攻撃時の解析が困難となるため、ＤＦＡ攻撃に対する安全性が向上する。
【００４８】
［ランダムな整数ｒを選択することによる特徴］
本形態では、処理対象の行を特定する整数ｒをランダムな整数とした。これにより、ラウンド鍵の生成時におけるラウンド鍵の各行の処理順序がランダムになり、攻撃者が狙う特定の位置のビットに故障を起こさせることが困難となる。その結果、攻撃者はＤＦＡ攻撃によって秘密鍵を取得することが困難となる。
【００４９】
以上のように、本形態の方法では、エラー検知やエラー訂正を行うことなくＤＦＡ攻撃を抑制することができるため、本形態のようなソフトウェア実装では、エラー検知やエラー訂正に伴う演算処理の増加をまねくことなく、ＤＦＡ攻撃に対する安全性を向上させることができる。
【００５０】
〔第２実施形態〕
次に、本発明の第２実施形態について説明する。
第１実施形態と同様、本形態でもｎラウンド目に生成されたビット列ＢＩＳｎ，ｒ，ｃは、記憶部１０ａのビット列ＢＩＳｎ−１，ｒ，ｃが格納されていた領域１０ａａに上書きされる。また、ビット列ＢＩＳｎ，ｒ，ｃを求めるためには、ビット列ＢＩＳｎ−１，ｒ，ｃとビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃとが必要である。ここで、例えば、ｋ＝１であり、ビット列ＢＩＳｎ，１，ｃを求め、それらをビット列ＢＩＳｎ−１，ｒ，ｃが格納されていた領域１０ａａに上書きした後、ｒ＝０が選択され、ビット列ＢＩＳｎ，０，ｃを求める処理を実行する場合を想定する。この場合、ビット列ＢＩＳｎ，０，ｃを求めるためにビット列ＢＩＳｎ−１，０，ｃとビット列ＢＩＳｎ−１，１，Ｃとが必要であるが、領域１０ａａのビット列ＢＩＳｎ−１，１，Ｃはビット列ＢＩＳｎ，１，Ｃによって上書きされている。そのため、第１実施形態では、別の領域１０ａｃを確保し、そこにビット列ＢＩＳｎ−１，１，Ｃ等を格納していた。
【００５１】
本形態では、ｋ＝１又は−１とし、選択部１０ｆ、置換部１０ｉ、右シフト部１０ｇ、排他的論理和演算部１０ｈ，１０ｊの各処理が繰り返されるたびに、選択部１０ｆは（ｒ＋ｋ）ｍｏｄ（Ｒ＋１）を新たな整数ｒとして選択する。これにより、各ラウンドの最後の行を除き、ビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），ＣがＢＩＳｎ，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃによって上書きされる前にビット列ＢＩＳｎ，ｒ，ｃの生成に利用される。その結果、領域１０ａｃに格納するデータ量を削減できる。以下では、第１実施形態との相違点のみを説明する。
【００５２】
図１５は、第２実施形態のｎラウンド目におけるラウンド鍵の生成処理を説明するためのフローチャートである。また、図１６は、第２実施形態のｎラウンド目における各処理対象を説明するための図である。以下、これらの図を用い、第２実施形態の第１実施形態との相違点を説明する。
【００５３】
図１５に示すように、本形態では第１実施形態のステップＳ１からＳ３の処理を実行し、制御部１０ｃが、ビット列ＢＩＳｎ−１，ｒ，Ｃを複製し、それを記憶部１０ａのＷビットの領域１０ａｃに格納する（ステップＳ１０４）。次に、第１実施形態のステップＳ５と同様の処理を実行する。ただし、本形態の置換部１０ｉは、原則、領域１０ａａに格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃから所定の規則に従ってＷビットのビット列ＣＢＩＳｎ−１，ｒ，Ｃを生成し、生成したビット列ＣＢＩＳｎ−１，ｒ，Ｃによって、その領域１０ａａを更新する（ステップＳ５）。そして、領域１０ａａにビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃが存在しない最後の列の処理時にのみ、置換部１０ｉは、領域１０ａａに格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃからビット列ＣＢＩＳｎ−１，ｒ，Ｃを生成する。
【００５４】
その後、第１実施形態のステップＳ６からＳ１２の処理が実行され、ステップＳ１２で０以上Ｒ以下のすべての整数ｒにそれぞれ対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みであると判定された場合には、ｎラウンド目のラウンド鍵生成処理が終了し、生成済みでないと判定された場合には、選択部１０ｆが（ｒ＋ｋ）ｍｏｄ（Ｒ＋１）を新たな整数ｒとして選択する（ステップＳ１１３）。選択された整数ｒは一時記憶部１０ｂに格納され、これによって一時記憶部１０ｂに格納された整数ｒが更新され、以後必要に応じて各処理部に読み出される。次に、制御部１０ｃが、領域１０ａｂのビット列を複製して領域１０ａａに格納し（ステップＳ１５）、処理をステップＳ５に戻す。
【００５５】
以上の処理により、領域１０ａｃに格納すべきデータ量を削減することができる。例えば、図１６に例示するように、ｋ＝１、Ｃ＝Ｒ＝３であり、ステップＳ３でｒ＝１が選択された場合には、処理対象の列はｒ＝１、２、３、０の順序で変化する。この場合、各ｒ＝１、２、３に対応するビット列ＢＩＳｎ，ｒ，ｃを求める時点（図１６（ａ）から（ｃ））では、それらを求めるために必要な領域１０ａａのビット列ＢＩＳｎ−１，（ｒ＋１）ｍｏｄ  ４，３は、ＢＩＳｎ，（ｒ＋１）ｍｏｄ  ４，ｃによって上書きされておらず、利用可能な状態にある。一方、各ｒ＝０に対応するビット列ＢＩＳｎ，０，ｃを求める時点（図１６（ｄ））では、それらを求めるために必要な領域１０ａａのビット列ＢＩＳｎ−１，１，３は、図１６（ａ）の処理結果であるＢＩＳｎ，１，ｃによって上書きされており、利用できない。よって、最後の行に対応するビット列ＢＩＳｎ，０，ｃを求める際には、ステップＳ１０４で領域１０ａｃに格納しておいたビット列ＢＩＳｎ−１，１，３を用いる。すなわち、この場合に領域１０ａｃに格納しておく必要があるのはビット列ＢＩＳｎ−１，１，３のみである。
【００５６】
〔第３実施形態〕
次に、本発明の第３実施形態について説明する。本形態は、第１実施形態の変形例であり、選択された整数ｒに対するビット列ＢＩＳｎ，ｒ，ｃが既に得られているか否かにかかわらず、当該整数ｒに対応する各処理を実行する点が第１実施形態との相違点である。すなわち、ステップＳ１４の判定を行わない。以下では、第１実施形態との相違点のみを説明する。
【００５７】
図１７は、第３実施形態のｎラウンド目におけるラウンド鍵の生成処理を説明するためのフローチャートである。また、図１８から図２２は、第３実施形態をＡＥＳに適用した場合に、記憶部１０ａの各領域１０ａａ〜１０ａｃに格納されるビット列を例示した図である。第３実施形態をＡＥＳに適用した場合、Ｒ及びＣは３であり、Ｗは８であり、Ｌは１２８であり、ｋは１であり、ＣＢＩＳｎ−１，ｒ，Ｃは、ビット列ＢＩＳｎ−１，（ｒ＋１）ｍｏｄ４，３を所定の置換規則に従って置換した８ビットのビット列である。
【００５８】
本形態におけるｎラウンド目のラウンド鍵の生成処理では、まず、ｎ−１ラウンド目のＬ＝Ｗ・（Ｃ＋１）・（Ｒ＋１）ビット長のラウンド鍵Ｋｎ−１∈｛０，１｝Ｌが記憶部１０ａの領域１０ａｃに格納される（ステップＳ２０１）。また、制御部１０ｃが、このラウンド鍵Ｋｎ−１を複製して記憶部１０ａの領域１０ａａ，１０ａｂに格納する（ステップＳ３０２，Ｓ２、図１８（ａ））。
【００５９】
次に、選択部１０ｆが、０以上Ｒ以下のランダムな整数ｒを選択する（ステップＳ３）。なお、図１８から図２２の例ではｒ＝２が選択されている。
【００６０】
次に、置換部１０ｉが、領域１０ａｃに格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃから所定の規則に従ってＷビットのビット列ＣＢＩＳｎ−１，ｒ，Ｃを生成し、生成したビット列ＣＢＩＳｎ−１，ｒ，Ｃによって、その領域１０ａａを更新する（ステップＳ２０５、図１８（ｂ））。
【００６１】
その後、第１実施形態のステップＳ６からＳ１１が実行された後（図１８（ｂ）〜図２１）、制御部１０ｃが、０以上Ｒ以下のすべての整数ｒにそれぞれ対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みであるか否かを判定する（ステップＳ１２）。ここで、０以上Ｒ以下のすべての整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃがそれぞれ生成済みであると判定された場合には、ｎラウンド目のラウンド鍵生成処理が終了する。
【００６２】
一方、０以上Ｒ以下の何れかの整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みでないと判定された場合には、制御部１０ｃが、領域１０ａｂのビット列を複製して領域１０ａａに格納し（ステップＳ１５、図２２）、処理をステップＳ３に戻す。
【００６３】
＜本形態の特徴＞
以上のように、本形態は、選択された整数ｒに対するビット列ＢＩＳｎ，ｒ，ｃが既に得られているか否かにかかわらず、０以上Ｒ以下のすべての整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃが生成されていない限り、当該整数ｒに対応する各処理を実行することとした。この場合、整数ｒの値に応じて繰り返し処理の有無が変化しないため、演算内容の変化に伴う消費電力の変化等によって攻撃者に演算順序等の情報が漏洩することを防止できる。その結果、安全性が向上する。
【００６４】
〔第４実施形態〕
次に、本発明の第４実施形態について説明する。本形態は、第１実施形態の変形例であり、記憶部へのデータの格納方法を工夫することにより、ランダムな整数ｒを用いつつ、使用する記憶領域を第１実施形態よりも削減可能な形態である。以下では、第１実施形態との相違点を中心に説明する。
【００６５】
図２３及び図２４は、第４実施形態のｎラウンド目におけるラウンド鍵の生成処理を説明するためのフローチャートである。また、図２５から図２８は、第４実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【００６６】
本形態では、まず、第１実施形態のステップＳ１からＳ３の処理を実行した後、制御部１０ｃが、領域１０ａａに格納されたビット列ＢＩＳｎ−１，ｒ，Ｃを複製し、それをＷビットの領域１０ａｃに格納する（図２５（ａ））。その後、第１実施形態のステップＳ６からＳ１０の処理を実行する（図２５（ｂ）から図２７）。ここで、ステップＳ９でｉ＝Ｃ−１と判定された場合には、置換部１０ｉが、領域１０ａａ又は領域１０ａｃに格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃから所定の規則に従ってＷビットのビット列ＣＢＩＳｎ−１，ｒ，Ｃを生成し、最初に何れかのビット列ＢＩＳｎ−１，ｒ，ｃが格納されていた領域１０ａａの領域に上書きする（ステップＳ２５５、図２８）。そして、排他的論理和演算部１０ｊが、領域１０ａａに格納されたビット列ＣＢＩＳｎ−１，ｒ，Ｃと、領域１０ａｂに格納されたＷビットのビット列ＸＯＲＢＩＳｎ−１，ｒ，ｃとを読み込み、それらの排他的論理和を各ｃ＝０，１，…，Ｃについて計算し、各ｃに対応する各演算結果をｎラウンド目のラウンド鍵Ｋｎ∈｛０，１｝Ｌの上位Ｗ｛（Ｒ＋１）・ｃ＋ｒ｝＋１ビット目からＷ｛（Ｒ＋１）・ｃ＋ｒ＋１｝ビット目までのビット列ＢＩＳｎ，ｒ，ｃ＝ＣＢＩＳｎ−１，ｒ，Ｃ（＋）ＸＯＲＢＩＳｎ−１，ｒ，ｃとし、ビット列ＢＩＳｎ，ｒ，ｃで領域１０ａｂを更新する（ステップＳ２６１、図２８）。その後、第１実施形態のステップＳ１２からＳ１４までの処理を実行し、ステップＳ１４でステップＳ１３で選択された整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みでないと判定された場合には、制御部１０ｃが、ビット列ＢＩＳｎ−１，ｒ，Ｃを複製し、それを領域１０ａａの使用済みの領域に上書きし、処理をステップＳ６に戻す。なお、領域１０ａａの使用済みの領域とは、ステップＳ７からＳ１０の処理で既に使用された領域１０ａａの領域を意味する。このように、シフト演算の終了後にビット列ＣＢＩＳｎ−１，ｒ，Ｃを生成し、領域１０ａａの使用済みの領域を利用することにより、必要な領域１０ａｃのビット数をＷビットに削減することができる。
【００６７】
〔第５実施形態〕
次に、本発明の第５実施形態について説明する。本形態は、第１，２実施形態の変形例であり、暗号演算を実行する暗号プロセッサによって本形態の暗号演算を実装し、さらに、第２実施形態と同様に、ｋ＝１又は−１とし、選択部１０ｆ、置換部１０ｉ、右シフト部１０ｇ、排他的論理和演算部１０ｈ，１０ｊの各処理が繰り返されるたびに、選択部１０ｆは（ｒ＋ｋ）ｍｏｄ（Ｒ＋１）を新たな整数ｒとして選択する形態である。以下では、第１，２実施形態との相違点を中心に説明する。
【００６８】
＜構成＞
図２９は、第５実施形態の暗号演算装置１１０のハードウェア構成を説明するためのブロック図である。
図２９に示すように、本形態の暗号演算装置１１０は、ＣＰＵ（central processing unit）１１と、ＲＡＭ（random-access memory）１２と、ＲＯＭ（read-only memory）１３と、ＥＥＰＲＯＭ１４と、乱数生成器１５と、入力インタフェース（ＩＦ）１６と、出力インタフェース（ＩＦ）１７と、データバス１８と暗号プロセッサ１１１とを有する。また、ＥＥＰＲＯＭ１４には、所定のプログラムと０ラウンド目のラウンド鍵Ｋ０∈｛０，１｝Ｌとが格納されている。これらのプログラム及びラウンド鍵Ｋ０はそれぞれＲＡＭ１２に書き込まれ、さらにＣＰＵ１１がＲＡＭ１２に書き込まれたプログラムを実行し、ラウンド鍵Ｋ０を用いた暗号演算処理を行うことにより、本形態の暗号演算装置１１０が構築される。なお、本形態の暗号演算装置１１０によって構築される機能構成は図３（ｂ）に示したのと同様である。
【００６９】
＜処理＞
次に、本形態の処理について説明する。以下では、本形態の処理を一般化して説明した後、本形態をＡＥＳに適用した場合の処理を具体的に例示する。
［一般化した処理内容］
図３０は、第５実施形態のｎラウンド目におけるラウンド鍵の生成処理を説明するためのフローチャートである。以下、この図を用いて本形態の一般化した処理を説明する。
本形態のｎラウンド目のラウンド鍵の生成処理では、まず、ｎ−１ラウンド目のＬ＝Ｗ・（Ｃ＋１）・（Ｒ＋１）ビット長のラウンド鍵Ｋｎ−１∈｛０，１｝Ｌが記憶部１０ａの領域１０ａａに格納される（ステップＳ１）。次に、選択部１０ｆが、０以上Ｒ以下のランダムな整数ｒを選択する（ステップＳ３）。次に、制御部１０ｃが、ビット列ＢＩＳｎ−１，ｒ，Ｃを複製し、それを記憶部１０ａのＷビットの領域１０ａｃに格納し（ステップＳ１０４）、さらに、ビット列ＢＩＳｎ−１，ｒ，０，  ＢＩＳｎ−１，ｒ，１，…，ＢＩＳｎ−１，ｒ，Ｃを複製し、それらを領域１０ａｂに格納する（ステップＳ３０４）。
【００７０】
次に、置換部１０ｉが、領域１０ａａ又は領域１０ａｃに格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃから所定の規則に従ってＷビットのビット列ＣＢＩＳｎ−１，ｒ，Ｃを生成し、生成したビット列ＣＢＩＳｎ−１，ｒ，Ｃを領域１０ａｃに格納する（ステップＳ３０５）。なお、ｎラウンド目で最後にステップＳ３０５の処理を行う場合以外には、ビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃは必ず領域１０ａａに格納されているため、置換部１０ｉは領域１０ａａに格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃを用いて本ステップの処理を行う。一方、ｎラウンド目で最後にステップＳ３０５の処理を行う場合には、ビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃが領域１０ａａに格納されていないため、置換部１０ｉは領域１０ａｃに格納されたビット列ＢＩＳｎ−１，（ｒ＋ｋ）ｍｏｄ（Ｒ＋１），Ｃを用いて本ステップの処理を行う。また、攻撃者がステップＳ３０５の処理に故障を発生ることも想定されるため、ステップＳ３０５で正しい処理が行われたことを確認する検算処理を追加すると好適である。
【００７１】
次に、制御部１０ｃが、変数ｉを０に設定し、それを一時記憶部１０ｂに格納する（ステップＳ６）。その後、右シフト部１０ｇが、領域１０ａｂに格納されたビット列ＢＩＳｎ−１，ｒ（ｉ）を下位にＷビットシフトさせたビット列ＢＩＳｎ−１，ｒ（ｉ＋１）を生成する。このように生成されたビット列ＢＩＳｎ−１，ｒ（ｉ＋１）は、領域１０ａｂのビット列ＢＩＳｎ−１，ｒ（ｉ）が格納されていた位置に上書きされ、領域１０ａｂが更新される（ステップＳ３０７）。
【００７２】
次に、排他的論理和演算部１０ｈが、領域１０ａａに格納されたビット列ＸＯＲＢＩＳｎ−１，ｒ（ｉ）と、領域１０ａｂに格納されたビット列ＢＩＳｎ−１，ｒ（ｉ＋１）との排他的論理和値ＸＯＲＢＩＳｎ−１，ｒ（ｉ＋１）＝ＸＯＲＢＩＳｎ−１，ｒ（ｉ）（＋）ＢＩＳｎ−１，ｒ（ｉ＋１）を計算する。算出されたビット列ＸＯＲＢＩＳｎ−１，ｒ（ｉ＋１）は、領域１０ａａのビット列ＸＯＲＢＩＳｎ−１，ｒ（ｉ）が格納されていた位置に上書きされ、領域１０ａａが更新される（ステップＳ３０８）。
【００７３】
次に、制御部１０ｃが、一時記憶部１０ｂに格納しておいた変数ｉの値を参照し、ｉ＝Ｃ−１であるか否かを判定する（ステップＳ９）。ここで、ｉ＝Ｃ−１でないと判定された場合、制御部１０ｃは、ｉ＋１を新たな変数ｉの値として変数ｉを更新し、この変数ｉを一時記憶部１０ｂに格納して、処理をステップＳ３０７に戻す（ステップＳ１０）。
【００７４】
一方、ステップＳ９でｉ＝Ｃ−１であると判定された場合には、排他的論理和演算部１０ｊが、領域１０ａｃに格納されたビット列ＣＢＩＳｎ−１，ｒ，Ｃと、領域１０ａａに格納されたＷビットのビット列ＸＯＲＢＩＳｎ−１，ｒ，ｃとを読み込み、それらの排他的論理和を各ｃ＝０，１，…，Ｃについて計算し、各ｃに対応する各演算結果をｎラウンド目のラウンド鍵Ｋｎ∈｛０，１｝Ｌの上位Ｗ｛（Ｒ＋１）・ｃ＋ｒ｝＋１ビット目からＷ｛（Ｒ＋１）・ｃ＋ｒ＋１｝ビット目までのビット列ＢＩＳｎ，ｒ，ｃ＝ＣＢＩＳｎ−１，ｒ，Ｃ（＋）ＸＯＲＢＩＳｎ−１，ｒ，ｃとし、ビット列ＢＩＳｎ，ｒ，ｃで領域１０ａａを更新する（ステップＳ３１１）。
【００７５】
次に、制御部１０ｃが、０以上Ｒ以下のすべての整数ｒにそれぞれ対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みであるか否かを判定する（ステップＳ１２）。ここで、０以上Ｒ以下のすべての整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃがそれぞれ生成済みであると判定された場合には、ｎラウンド目のラウンド鍵生成処理が終了する。一方、０以上Ｒ以下の何れかの整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みでないと判定された場合には、選択部１０ｆが（ｒ＋ｋ）ｍｏｄ（Ｒ＋１）を新たな整数ｒとして選択し（ステップＳ１１３）、処理がステップＳ３０４に戻される。
【００７６】
［本形態をＡＥＳに適用した場合の処理内容］
次に、第５実施形態をＡＥＳに適用した場合の処理を説明する。この場合、Ｒ及びＣは３であり、Ｗは８であり、Ｌは１２８であり、ｋは１であり、ＣＢＩＳｎ−１，ｒ，Ｃは、ビット列ＢＩＳｎ−１，（ｒ＋１）ｍｏｄ４，３を所定の置換規則に従って置換した８ビットのビット列である。
【００７７】
図３１から図３４は、第５実施形態をＡＥＳに適用した場合に、記憶部１０ａの各領域１０ａａ〜１０ａｃに格納されるビット列を例示した図である。以下、これらの図を用いて本形態をＡＥＳに適用した場合における、ｎラウンド目のラウンド鍵の生成処理を説明する。
【００７８】
このラウンド鍵の生成処理の例では、まず、ｎ−１ラウンド目の１２８ビット長のラウンド鍵Ｋｎ−１∈｛０，１｝１２８が記憶部１０ａの領域１０ａａに格納される（ステップＳ１）。すなわち、ビット列ＢＩＳｎ−１，ｒ，ｃ（０≦ｒ，ｃ≦３を満たすすべてのｒ，ｃ）が領域１０ａａに格納される（図３１（ａ））。次に、選択部１０ｆが、０以上３以下のランダムな整数ｒを選択する（ステップＳ３）。この例ではｒ＝１が選択されたとする。
【００７９】
次に、制御部１０ｃが、ビット列ＢＩＳｎ−１，１，３を複製し、それを記憶部１０ａの８ビットの領域１０ａｃに格納し（ステップＳ１０４）、さらに、ビット列ＢＩＳｎ−１，１，０，  ＢＩＳｎ−１，１，１，ＢＩＳｎ−１，１，２，ＢＩＳｎ−１，１，３を複製し、それらを領域１０ａｂに格納する（ステップＳ３０４、図３１（ａ））。
【００８０】
次に、置換部１０ｉが、領域１０ａａに格納されたビット列ＢＩＳｎ−１，２，３から所定の規則に従って８ビットのビット列ＣＢＩＳｎ−１，１，３を生成し、生成したビット列ＣＢＩＳｎ−１，１，３を領域１０ａｃに格納する（ステップＳ３０５、図３１（ａ））。
【００８１】
次に、制御部１０ｃが、変数ｉを０に設定し、それを一時記憶部１０ｂに格納する（ステップＳ６）。その後、右シフト部１０ｇが、領域１０ａｂに格納されたビット列ＢＩＳｎ−１，１（０）＝ＢＩＳｎ−１，１，０｜ＢＩＳｎ−１，１，１｜ＢＩＳｎ−１，１，２｜ＢＩＳｎ−１，１，３を下位に８ビットシフトさせたビット列ＢＩＳｎ−１，１（１）＝０｜ＢＩＳｎ−１，１，０｜ＢＩＳｎ−１，１，１｜ＢＩＳｎ−１，１，２を生成する。このように生成されたビット列ＢＩＳｎ−１，１（１）は、領域１０ａｂのビット列ＢＩＳｎ−１，１（０）が格納されていた位置に上書きされ、領域１０ａｂが更新される（ステップＳ３０７、図３１（ｂ））。
【００８２】
次に、排他的論理和演算部１０ｈが、領域１０ａａに格納されたビット列ＸＯＲＢＩＳｎ−１，１（０）＝ＢＩＳｎ−１，１，０｜ＢＩＳｎ−１，１，１｜ＢＩＳｎ−１，１，２｜ＢＩＳｎ−１，１，３と、領域１０ａｂに格納されたビット列ＢＩＳｎ−１，ｒ（１）＝０｜ＢＩＳｎ−１，１，０｜ＢＩＳｎ−１，１，１｜ＢＩＳｎ−１，１，２との排他的論理和値ＸＯＲＢＩＳｎ−１，１（１）＝ＸＯＲＢＩＳｎ−１，１（０）（＋）ＢＩＳｎ−１，１（１）を計算する。算出されたビット列ＸＯＲＢＩＳｎ−１，１（１）は、領域１０ａａのビット列ＸＯＲＢＩＳｎ−１，１（０）が格納されていた位置に上書きされ、領域１０ａａが更新される（ステップＳ３０８、図３１（ｂ））。
【００８３】
次に、制御部１０ｃが、一時記憶部１０ｂに格納しておいた変数ｉの値を参照し、ｉ＝２であるか否かを判定する（ステップＳ９）。ここで、ｉ＝２でないため、制御部１０ｃは、１を新たな変数ｉの値として変数ｉを更新し、この変数ｉを一時記憶部１０ｂに格納して、処理をステップＳ３０７に戻す（ステップＳ１０）。その後、ｉ＝１，２についてステップＳ３０７、Ｓ３０８の処理が繰り返された後（図３２、図３３）、ステップＳ９でｉ＝２であると判定される。これにより、排他的論理和演算部１０ｊが、領域１０ａｃに格納されたビット列ＣＢＩＳｎ−１，１，３と、領域１０ａａに格納されたＷビットのビット列ＸＯＲＢＩＳｎ−１，１，３とを読み込み、それらの排他的論理和を各ｃ＝０，１，２，３について計算し、各ｃに対応する各演算結果をｎラウンド目のラウンド鍵Ｋｎ∈｛０，１｝Ｌのビット列ＢＩＳｎ，１，ｃとし、領域１０ａａを更新する（ステップＳ３１１、図３４）。
【００８４】
次に、制御部１０ｃが、０以上Ｒ以下のすべての整数ｒにそれぞれ対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みであるか否かを判定する（ステップＳ１２）。ここで、０以上３以下のすべての整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃがそれぞれ生成済みであると判定された場合には、ｎラウンド目のラウンド鍵生成処理が終了する。一方、０以上３以下の何れかの整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みでないと判定された場合には、選択部１０ｆが２を新たな整数ｒとして選択し（ステップＳ１１３）、処理がステップＳ３０４に戻される。
【００８５】
その後、ｒ＝２，３，０についてステップＳ３０４からＳ３１１の処理が行われ、０以上３以下のすべての整数ｒに対応するビット列ＢＩＳｎ，ｒ，ｃが生成済みとなり、ｎラウンド目のラウンド鍵生成処理が終了する。
【００８６】
＜本形態の特徴＞
本形態の方法では、エラー検知やエラー訂正を行うことなくＤＦＡ攻撃を抑制することができるため、本形態のようなハードウェア実装では、エラー検知やエラー訂正を行うための回路を増設することに伴う回路規模の増大をまねくことなく、ＤＦＡ攻撃に対する安全性を向上させることができる。
【００８７】
なお、本発明は上述の実施の形態に限定されるものではない。例えば、ラウンド鍵が生成されるまで各データを上書きすることなく記憶部に格納するなど、上述した以外の方法によって各データを記憶部に格納することとしてもよい。また、上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
【００８８】
また、上述の構成をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。
【００８９】
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよい。
【００９０】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【００９１】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【産業上の利用可能性】
【００９２】
本発明は、例えば、ＡＥＳのＤＦＡ防止対策に利用できる。
【図面の簡単な説明】
【００９３】
【図１】図１は、従来の拡大鍵生成部の処理を説明するための図である。
【図２】図２は、９ラウンド目で故障が発生した場合の従来の拡大鍵生成部の処理を説明するための図である。
【図３】図３（ａ）は、第１実施形態の暗号演算装置のハードウェア構成を説明するためのブロック図である。図３（ｂ）は、図３（ａ）のＣＰＵ１１がＲＡＭに書き込まれたプログラムを実行し、ラウンド鍵Ｋ０を用いた暗号演算処理を行うことによって構築される暗号演算装置の機能構成を説明するためのブロック図である。
【図４】図４は、第１実施形態のｎラウンド目におけるラウンド鍵の生成処理を説明するためのフローチャートである。
【図５】図５は、第１実施形態のｎラウンド目におけるラウンド鍵の生成処理を説明するためのフローチャートである。
【図６】図６は、第１実施形態をＡＥＳに適用した場合のｒ＝２における処理の全体を示す図である。
【図７】図７は、第１実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図８】図８は、第１実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図９】図９は、第１実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図１０】図１０は、第１実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図１１】図１１は、第１実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図１２】図１２（ａ）は、第１実施形態をＡＥＳに適用した場合に選択部で選択される整数ｒの一例を説明するための図であり、図１２（ｂ）から図１２（ｅ）は、選択された各整数ｒに対応する処理対象を示す図である。
【図１３】図１３は、第１実施形態をＡＥＳに適用した場合のラウンド鍵生成過程に誤りが混入された様子を例示する図である。
【図１４】図１４は、第１実施形態をＡＥＳに適用した場合のラウンド鍵生成過程に誤りが混入された様子を例示する図である。
【図１５】図１５は、第２実施形態のｎラウンド目におけるラウンド鍵の生成処理を説明するためのフローチャートである。
【図１６】図１６は、第２実施形態のｎラウンド目における各処理対象を説明するための図である。
【図１７】図１７は、第３実施形態のｎラウンド目におけるラウンド鍵の生成処理を説明するためのフローチャートである。
【図１８】図１８は、第３実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図１９】図１９は、第３実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図２０】図２０は、第３実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図２１】図２１は、第３実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図２２】図２２は、第３実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図２３】図２３は、第４実施形態のｎラウンド目におけるラウンド鍵の生成処理を説明するためのフローチャートである。
【図２４】図２４は、第４実施形態のｎラウンド目におけるラウンド鍵の生成処理を説明するためのフローチャートである。
【図２５】図２５は、第４実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図２６】図２６は、第４実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図２７】図２７は、第４実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図２８】図２８は、第４実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図２９】図２９は、第５実施形態の暗号演算装置のハードウェア構成を説明するためのブロック図である。
【図３０】図３０は、第５実施形態のｎラウンド目におけるラウンド鍵の生成処理を説明するためのフローチャートである。
【図３１】図３１は、第５実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図３２】図３２は、第５実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図３３】図３３は、第５実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【図３４】図３４は、第５実施形態をＡＥＳに適用した場合に、記憶部の各領域に格納されるビット列を例示した図である。
【符号の説明】
【００９４】
１０，１１０  暗号演算装置
【図１】
0004990843.tif 000002
【図２】
0004990843.tif 000003
【図３】
0004990843.tif 000004
【図４】
0004990843.tif 000005
【図５】
0004990843.tif 000006
【図６】
0004990843.tif 000007
【図７】
0004990843.tif 000008
【図８】
0004990843.tif 000009
【図９】
0004990843.tif 000010
【図１０】
0004990843.tif 000011
【図１１】
0004990843.tif 000012
【図１２】
0004990843.tif 000013
【図１３】
0004990843.tif 000014
【図１４】
0004990843.tif 000015
【図１５】
0004990843.tif 000016
【図１６】
0004990843.tif 000017
【図１７】
0004990843.tif 000018
【図１８】
0004990843.tif 000019
【図１９】
0004990843.tif 000020
【図２０】
0004990843.tif 000021
【図２１】
0004990843.tif 000022
【図２２】
0004990843.tif 000023
【図２３】
0004990843.tif 000024
【図２４】
0004990843.tif 000025
【図２５】
0004990843.tif 000026
【図２６】
0004990843.tif 000027
【図２７】
0004990843.tif 000028
【図２８】
0004990843.tif 000029
【図２９】
0004990843.tif 000030
【図３０】
0004990843.tif 000031
【図３１】
0004990843.tif 000032
【図３２】
0004990843.tif 000033
【図３３】
0004990843.tif 000034
【図３４】
0004990843.tif 000035