(57)【要約】【課題】ラウンド鍵配列へのマスク値が０になることを阻止し、且つマスク管理の複雑化を低減させる。【解決手段】７種類のマスク状態から、Ｓボックス入力保護マスク、Ｓボックス出力保護マスク、ラウンド鍵保護マスクの１列目のマスク状態を選択し、Ｓボックス出力保護マスクのマスク状態、１列目のマスク状態、及び「当該Ｓボックス出力保護マスクのマスク状態と当該１列目のマスク状態との排他的論理和の演算結果」とは異なるマスク状態を、ラウンド鍵保護マスクの２列目のマスク状態として選択し、３列目と４列目のマスク状態を選択し、ラウンド鍵更新後の１列目から４列目までのマスク状態を計算し、このマスク状態に禁止状態“０００”が含まれないとき、選択された各マスク状態に対応して各基本マスク値同士を排他的論理和し、各マスク状態に対応する合成マスク値を計算する。【選択図】      図５
2008233683.tif 000002
【特許請求の範囲】
【請求項１】
ラウンド鍵保護マスク、Ｓボックス入力保護マスク及びＳボックス出力保護マスクを用いてＡＥＳ暗号方式を実行する暗号処理装置であって、
前記Ｓボックス入力保護マスクのマスク状態を“００１”，“０１０”，“０１１”，“１００”，“１０１”，“１１０”及び“１１１”の７種類のマスク状態から選択する入力選択手段と、
前記選択されたＳボックス入力保護マスクのマスク状態とは異なるマスク状態を、前記Ｓボックス出力保護マスクのマスク状態として前記７種類のマスク状態から選択する出力選択手段と、
前記選択されたＳボックス出力保護マスクのマスク状態とは異なるマスク状態を、前記ラウンド鍵保護マスクの１列目のマスク状態として前記７種類のマスク状態から選択する１列目選択手段と、
前記選択されたＳボックス出力保護マスクのマスク状態、前記選択された１列目のマスク状態、及び「当該Ｓボックス出力保護マスクのマスク状態と当該１列目のマスク状態との排他的論理和の演算結果」とは異なるマスク状態を、前記ラウンド鍵保護マスクの２列目のマスク状態として前記７種類のマスク状態から選択する２列目手段と、
前記ラウンド鍵保護マスクの３列目及び４列目のマスク状態を前記７種類のマスク状態からそれぞれ選択する３・４列目選択手段と、
前記選択されたＳボックス出力保護マスクのマスク状態、前記選択された１列目から４列目までのマスク状態を用いて、前記ＡＥＳ暗号方式によるラウンド鍵更新後の１列目から４列目までのマスク状態を計算するマスク状態計算手段と、
前記計算されたマスク状態に禁止状態“０００”が含まれるか否かを判定する禁止状態判定手段と、
前記７種類のマスク状態のうち、“００１”，“０１０”及び“１００”にそれぞれ対応する３個の基本マスク値が記憶された基本マスク値記憶手段と、
前記禁止状態が含まれないとき、前記選択された各マスク状態に対応して前記各基本マスク値同士を排他的論理和により合成することにより、当該選択された各マスク状態に対応するそれぞれの合成マスク値を計算するマスク値計算手段と
を備えたことを特徴とする暗号処理装置。
【請求項２】
請求項１に記載の暗号処理装置において、
前記ラウンド鍵として２５６ビット鍵を用いる場合、前記１列目選択手段、前記２列目選択手段、前記３・４列目選択手段、前記マスク状態計算手段、前記禁止状態判定手段、前記マスク値計算手段を再度実行することにより、前記ラウンド鍵保護マスクの５列目から８列目のマスク値を得る手段を備えたことを特徴とする暗号処理装置。
【請求項３】
請求項１に記載の暗号処理装置において、
前記ラウンド鍵として１９２ビット鍵を用いる場合、前記ラウンド鍵保護マスクの５列目及び６列目のマスク状態を“１０００”，“１００１”，“１０１０”，“１０１１”，“１１００”，“１１０１”，“１１１０”及び“１１１１”の８種類のマスク状態からそれぞれ選択する５・６列目選択手段と、
前記計算された４列目のマスク状態を用いて、前記ＡＥＳ暗号方式によるラウンド鍵更新後の５列目及び６列目のマスク状態を計算する第２のマスク状態計算手段と、
前記計算された５列目及び６列目のマスク状態に禁止状態“００００”が含まれるか否かを判定する第２の禁止状態判定手段と、
前記８種類のマスク状態のうち、“１０００”に対応する基本マスク値が記憶された第２の基本マスク値記憶手段と、
前記禁止状態“００００”が含まれないとき、前記選択された５列目及び６列目の各マスク状態に対応して前記各基本マスク値同士を排他的論理和により合成することにより、当該５列目及び６列目の各マスク状態に対応するそれぞれの合成マスク値を計算する第２のマスク値計算手段と
を備えたことを特徴とする暗号処理装置。
【請求項４】
請求項１乃至請求項３のいずれか１項に記載の暗号処理装置において、
前記基本マスク値のビット数“８”と同一ビット数の乱数ｒを生成する手段と、
前記ビット数と同一値の次数である８次の既約多項式を選択する手段とを備えており、
前記基本マスク値は、前記乱数ｒと、前記乱数ｒをそれぞれ２倍及び４倍した値２ｒ，４ｒとであり、
前記マスク値計算手段は、前記既約多項式を用いたガロア体ＧＦ（２8）のベクトル表現を前記マスク状態に対応させることにより、前記マスク値を計算することを特徴とする暗号処理装置。
【請求項５】
請求項１乃至請求項４のいずれか１項に記載の暗号処理装置であって、
前記Ｓボックス入力保護マスク及び前記Ｓボックス出力保護マスクのマスク状態と、当該マスク状態の各ビット値“０”に対応する第１マスク値と、当該マスク状態の各ビット値“１”に対応する第２マスク値とを互いに関連付けて記憶したマスク値対応情報記憶手段と、
前記入力選択手段及び前記出力選択手段により選択されたマスク状態に基づいて、前記マスク値対応情報記憶手段を参照し、当該マスク状態の各ビット値“０”又は“１”に対応して前記第１マスク値又は第２マスク値を選択するマスク値選択手段と
を備えたことを特徴とする暗号処理装置。
【請求項６】
Ｓボックス入力保護マスク及びＳボックス出力保護マスクを用い、ＩＳＯ／ＩＥＣ １０１１８−３に記載のワープールWhirlpoolを実行する暗号処理装置であって、
前記Ｓボックス入力保護マスクのマスク状態を“００１”，“０１０”，“０１１”，“１００”，“１０１”，“１１０”及び“１１１”の７種類のマスク状態から選択する入力選択手段と、
前記選択されたＳボックス入力保護マスクのマスク状態とは異なるマスク状態を、前記Ｓボックス出力保護マスクのマスク状態として前記７種類のマスク状態から選択する出力選択手段と、
前記Ｓボックス入力保護マスク及び前記Ｓボックス出力保護マスクのマスク状態と、当該マスク状態の各ビット値“０”に対応する第１マスク値と、当該マスク状態の各ビット値“１”に対応する第２マスク値とを互いに関連付けて記憶したマスク値対応情報記憶手段と、
前記入力選択手段及び前記出力選択手段により選択されたマスク状態に基づいて、前記マスク値対応情報記憶手段を参照し、当該マスク状態の各ビット値“０”又は“１”に対応して前記第１マスク値又は第２マスク値を選択するマスク値選択手段と
を備えたことを特徴とする暗号処理装置。
【請求項７】
ラウンド鍵保護マスク、Ｓボックス入力保護マスク及びＳボックス出力保護マスクを用いてＡＥＳ暗号方式を実行する暗号処理装置のプログラムであって、
前記暗号処理装置のコンピュータを、
前記Ｓボックス入力保護マスクのマスク状態を“００１”，“０１０”，“０１１”，“１００”，“１０１”，“１１０”及び“１１１”の７種類のマスク状態から選択する入力選択手段、
前記選択されたＳボックス入力保護マスクのマスク状態とは異なるマスク状態を、前記Ｓボックス出力保護マスクのマスク状態として前記７種類のマスク状態から選択する出力選択手段、
前記選択されたＳボックス出力保護マスクのマスク状態とは異なるマスク状態を、前記ラウンド鍵保護マスクの１列目のマスク状態として前記７種類のマスク状態から選択する１列目選択手段、
前記選択されたＳボックス出力保護マスクのマスク状態、前記選択された１列目のマスク状態、及び「当該Ｓボックス出力保護マスクのマスク状態と当該１列目のマスク状態との排他的論理和の演算結果」とは異なるマスク状態を、前記ラウンド鍵保護マスクの２列目のマスク状態として前記７種類のマスク状態から選択する２列目手段、
前記ラウンド鍵保護マスクの３列目及び４列目のマスク状態を前記７種類のマスク状態からそれぞれ選択する３・４列目選択手段、
前記選択されたＳボックス出力保護マスクのマスク状態、前記選択された１列目から４列目までのマスク状態を用いて、前記ＡＥＳ暗号方式によるラウンド鍵更新後の１列目から４列目までのマスク状態を計算するマスク状態計算手段、
前記計算されたマスク状態に禁止状態“０００”が含まれるか否かを判定する禁止状態判定手段、
前記７種類のマスク状態のうち、“００１”，“０１０”及び“１００”にそれぞれ対応する３個の基本マスク値を前記コンピュータのメモリに書き込む手段、
前記禁止状態が含まれないとき、前記選択された各マスク状態に対応して前記各基本マスク値同士を排他的論理和により合成することにより、当該選択された各マスク状態に対応するそれぞれの合成マスク値を計算するマスク値計算手段、
として機能させるためのプログラム。
【請求項８】
請求項７に記載のプログラムにおいて、
前記コンピュータを、
前記ラウンド鍵として２５６ビット鍵を用いる場合、前記１列目選択手段、前記２列目選択手段、前記３・４列目選択手段、前記マスク状態計算手段、前記禁止状態判定手段、前記マスク値計算手段を再度実行することにより、前記ラウンド鍵保護マスクの５列目から８列目のマスク値を得る手段として機能させるためのプログラム。
【請求項９】
請求項７に記載のプログラムにおいて、
前記コンピュータを、
前記ラウンド鍵として１９２ビット鍵を用いる場合、前記ラウンド鍵保護マスクの５列目及び６列目のマスク状態を“１０００”，“１００１”，“１０１０”，“１０１１”，“１１００”，“１１０１”，“１１１０”及び“１１１１”の８種類のマスク状態からそれぞれ選択する５・６列目選択手段、
前記計算された４列目のマスク状態を用いて、前記ＡＥＳ暗号方式によるラウンド鍵更新後の５列目及び６列目のマスク状態を計算する第２のマスク状態計算手段、
前記計算された５列目及び６列目のマスク状態に禁止状態“００００”が含まれるか否かを判定する第２の禁止状態判定手段、
前記８種類のマスク状態のうち、“１０００”に対応する基本マスク値を前記メモリに書き込む手段、
前記禁止状態“００００”が含まれないとき、前記選択された５列目及び６列目の各マスク状態に対応して前記各基本マスク値同士を排他的論理和により合成することにより、当該５列目及び６列目の各マスク状態に対応するそれぞれの合成マスク値を計算する第２のマスク値計算手段、
として機能させるためのプログラム。
【請求項１０】
請求項７乃至請求項９のいずれか１項に記載のプログラムにおいて、
前記コンピュータを、
前記基本マスク値のビット数“８”と同一ビット数の乱数ｒを生成する手段、
前記ビット数と同一値の次数である８次の既約多項式を選択する手段、として機能させ、
前記基本マスク値は、前記乱数ｒと、前記乱数ｒをそれぞれ２倍及び４倍した値２ｒ，４ｒとであり、
前記マスク値計算手段は、前記既約多項式を用いたガロア体ＧＦ（２8）のベクトル表現を前記マスク状態に対応させることにより、前記マスク値を計算することを特徴とするプログラム。
【請求項１１】
請求項７乃至請求項１０のいずれか１項に記載のプログラムであって、
前記暗号処理装置のコンピュータを、
前記Ｓボックス入力保護マスク及び前記Ｓボックス出力保護マスクのマスク状態と、当該マスク状態の各ビット値“０”に対応する第１マスク値と、当該マスク状態の各ビット値“１”に対応する第２マスク値とを互いに関連付けた参照表データを前記コンピュータのメモリに書き込む手段、
前記入力選択手段及び前記出力選択手段により選択されたマスク状態に基づいて、前記メモリ内の参照表データを参照し、当該マスク状態の各ビット値“０”又は“１”に対応して前記第１マスク値又は第２マスク値を選択するマスク値選択手段、
として機能させるためのプログラム。
【請求項１２】
Ｓボックス入力保護マスク及びＳボックス出力保護マスクを用い、ＩＳＯ／ＩＥＣ １０１１８−３に記載のワープールWhirlpoolを実行する暗号処理装置のプログラムであって、
前記暗号処理装置のコンピュータを、
前記Ｓボックス入力保護マスクのマスク状態を“００１”，“０１０”，“０１１”，“１００”，“１０１”，“１１０”及び“１１１”の７種類のマスク状態から選択する入力選択手段、
前記選択されたＳボックス入力保護マスクのマスク状態とは異なるマスク状態を、前記Ｓボックス出力保護マスクのマスク状態として前記７種類のマスク状態から選択する出力選択手段、
前記Ｓボックス入力保護マスク及び前記Ｓボックス出力保護マスクのマスク状態と、当該マスク状態の各ビット値“０”に対応する第１マスク値と、当該マスク状態の各ビット値“１”に対応する第２マスク値とを互いに関連付けた参照表データを前記コンピュータのメモリに書き込む手段、
前記入力選択手段及び前記出力選択手段により選択されたマスク状態に基づいて、前記メモリ内の参照表データを参照し、当該マスク状態の各ビット値“０”又は“１”に対応して前記第１マスク値又は第２マスク値を選択するマスク値選択手段、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理装置及びプログラムに係り、例えば電力解析による解読に対する耐性を向上し得る暗号処理装置及びプログラムに関する。
【背景技術】
【０００２】
一般に、データの暗号化や認証などの暗号処理を実行するコンピュータとしては、パーソナルコンピュータが広く知られており、他には、スマートカードあるいはＩＣカードと呼ばれ、ＩＣモジュールを搭載したカード形状のデバイスが知られている。
【０００３】
この種の暗号処理には、ＤＥＳ(data encryption standard)及びトリプル(triple)ＤＥＳ（例えば、非特許文献１参照。）や、非特許文献２に挙げられるＡＥＳ(advance encryption standard)（例えば、非特許文献２参照。）などの共通鍵暗号アルゴリズムや、任意の公開鍵暗号アルゴリズムが用いられる。
【０００４】
これらの暗号技術に対する暗号解読の方法として、暗号文等の入手可能な情報から、平文や秘密鍵等の秘密情報を回復する技術がある。係る暗号解読の技術では、秘密鍵の回復が可能であるか否かが安全性評価の指標としてよく用いられる。暗号解読に用いる情報としては、暗号文等の入手可能な情報に限らず、特定したい秘密鍵とは値が異なる鍵を用いた情報も使用可能である。すなわち、重要な秘密鍵の値を特定するため、ユーザが任意の鍵の組み合わせで暗号処理装置を使用し、得られた情報から目的の秘密鍵を特定するという解読手法も考えられる。
【０００５】
この解読手法の一例としては、電力解析攻撃が知られている（例えば、非特許文献３参照。）。電力解析攻撃は、パーソナルコンピュータ又はＩＣカード等のデバイスに搭載された暗号処理装置のハードウェア又はソフトウェアが暗号処理の内容と消費電力との間に相関を持つことに着目し、観測した消費電力の情報から内部の秘密鍵や平文に関する情報を推定する手法である。電力解析には、単純電力解析（以下、ＳＰＡという）と差分電力解析（以下、ＤＰＡという）が含まれる。ＳＰＡは暗号処理の電力消費の特徴を抽出して解読に役立てる方法であり、ＤＰＡはデータ毎に僅かに異なる暗号処理中の消費電力間の差分や相関を利用して解読する方法である。
【０００６】
従来の電力解析への対策法としては、ノイズ発生器により暗号処理の電力消費量の測定を撹乱し、測定精度を悪化させる方法や、トランジスタや配線の改良により処理に関する電力消費の変動を測定困難なレベルに抑える方法や、暗号アルゴリズムの実装に対策を施し電力解析による解読を困難にする方法などが提案されている。
【０００７】
暗号アルゴリズムの実装に対策を施した手法としては、いわゆるマスキング法が広く知られている（例えば非特許文献４参照。）。マスキング法とは、処理内容と消費電力との相関を利用する電力解析の原理に着目し、処理するデータにマスクと呼ばれる乱数Ｒを適用し、消費電力を擾乱して解析を困難にする方法である。具体的には、暗号処理装置は、内部データＤに乱数Ｒを排他的論理和演算（ＸＯＲ）して得られた内部データＤ’＝Ｄ xor Ｒを暗号処理することにより、消費電力を擾乱する。また、Ｓボックス（以下、S-boxともいう）と呼ばれる非線形置換においては、入力と出力にそれぞれマスクを適用して変形された置換テーブルが用いられる。
【０００８】
なお、マスキング法は、マスクによる方法に限らず、例えば加減算による手法や、内部データに冗長な表現を用い、一部のビットを乱数で置換して暗号処理と消費電力との相関を撹乱する手法などもある。
【０００９】
また、暗号解読の分野では、消費電力を観測する電力解析攻撃を含む概念として、消費電力等の暗号処理に関する情報を観測する攻撃方法を総称してサイドチャネル攻撃と呼ぶ。観測される情報は、サイドチャネル情報とも呼ばれ、例えば消費電力以外にも、処理時間のわずかな変動や、デバイスから放出される熱線量の変動、放射される電界や磁界など、さまざまなものがある。
【００１０】
また、マスキング法は内部データを秘匿してサイドチャネル情報を擾乱するため、暗号処理装置に異常を与えて誤動作させた結果からサイドチャネル情報を得る故障利用攻撃あるいは差分的故障利用攻撃に対する対策として有効な場合もある。
【００１１】
このようなマスキング法は、ＤＥＳ及びトリプルＤＥＳに対しては、比較的容易に適用可能である。例えば、ＤＥＳ及びトリプルＤＥＳにおいては、秘密の鍵から副鍵を生成する鍵スケジュール部ではビット間の演算が行われず、一度マスクを適用すると、意図的に除去するまで適用されたままとなるので、マスクの管理が容易である。一方、平文に副鍵を適用して暗号文を計算するデータ暗号化部については、８種類の異なるＳボックスを使用するものの、１つあたり６ビット入力４ビット出力と、規模が小さいためそれぞれに別々の乱数によるマスクを用いたマスキング法の適用が容易である。
【００１２】
しかしながら、ＤＥＳ及びトリプルＤＥＳの後継技術であるＡＥＳの場合、鍵スケジュール部、データ暗号化部のいずれにおいても回路規模あるいは使用リソースの増大・制御の複雑さといったことから、マスクの管理が複雑となる問題がある。
【００１３】
（一般的なＡＥＳ暗号化処理：図２１）
図２１はＡＥＳ暗号方式による一般的な暗号化処理を説明するためのフローチャートである。いま、暗号処理装置では、操作者の操作により、ＡＥＳ暗号化処理プログラムが起動され、不揮発性メモリに記憶されていたラウンド鍵がラウンド鍵配列に書き込まれたとする（ＳＴ１）。また、暗号処理装置では、操作者の操作により、１２８ビットの平文データがＲＡＭに書き込まれた後（ＳＴ２）、暗号化要求が入力されたとする。
【００１４】
暗号処理装置は、この暗号化要求を受けると、段数（ラウンド数）Ｎを１に設定し（ＳＴ３）、ＡＥＳ暗号方式の仕様に基づいた繰り返し処理として、Ｎ段目の暗号化処理を開始する（ＳＴ４）。ＡＥＳ暗号方式では、１２８ビット鍵の場合には１０回の繰り返し処理を実行し、１９２ビット鍵の場合には１２回の繰り返し処理を実行し、２５６ビット鍵の場合には１４回の繰り返し処理を実行する。繰り返される処理の一単位は、一般に、「段」又は「ラウンド」と呼ばれる。
【００１５】
１段の処理においては、暗号処理装置は内部状態配列の記憶内容に対し、ラウンド鍵配列内のラウンド鍵を加算する鍵加算(AddRoundKey)処理を実行する（ＳＴ５）。
【００１６】
鍵加算処理の後、暗号処理装置は、４行４列の内部状態配列の記憶内容に対し、Ｓボックスを参照しながらバイト換字変換（SubByte）処理を実行して１６個のバイト換字変換結果を得ると（ＳＴ６）、バイト換字変換結果をＲＡＭの内部状態配列に書き込む。
【００１７】
続いて、暗号処理装置は、内部状態配列の記憶内容を並べ替え（ShiftRow）処理し（ＳＴ７）、得られた内部データの列毎にミックスカラム変換処理を実行する（ＳＴ８）。
【００１８】
全ての列にミックスカラム変換処理を実行すると、暗号処理装置は、Ｎ段目の暗号化処理を終了し（ＳＴ９）、段数Ｎを＋１増加し（ＳＴ１０）、ＡＥＳ暗号方式の仕様に定められた最後の段か否かの判定を行い（ＳＴ１１）、最後の段でない場合にはステップＳＴ４に戻って暗号化処理を繰り返す。
【００１９】
一方、最後の段の場合には、ラウンド鍵更新及び鍵加算処理を実行した後、得られた暗号文データを出力して暗号化処理を終了する。
【００２０】
以上が一般的なＡＥＳ暗号化処理の手順であるが、データの整合性に矛盾を来たさない範囲で処理の順序も入れ替え可能である。例えば、ステップＳＴ１とＳＴ２とは入れ替え可能である。
【００２１】
また、ＡＥＳ暗号方式による復号処理は、図２１に示したフローチャートの各部において逆の変換を行いつつ、逆の手順で実行し、入力された鍵と暗号文に対応した平文を出力する。
【００２２】
次に、図２２乃至図２４を用い、１２８ビット鍵、１９２ビット鍵及び２５６ビット鍵の鍵長におけるＡＥＳの暗号化処理のラウンド鍵更新の処理を説明する。
【００２３】
（１２８ビット鍵の更新処理：図２２）
暗号処理装置は、１２８ビットの鍵を４行４列のラウンド鍵配列に書き込み（ＳＴ２１）、段数Ｎを１に設定し（ＳＴ２２）、Ｎ段目のラウンド鍵の更新処理を開始する（ＳＴ２３）。
【００２４】
暗号処理装置は、ラウンド鍵配列の４列目の４バイトにＡＥＳの仕様で定められた並べ替え(RotWord)処理、Ｓボックス情報によるバイト換字(SubByte)処理、鍵定数とのＸＯＲ（排他的論理和演算）処理、を実行し、作業変数Ｖを作成する（ＳＴ２４）。
【００２５】
しかる後、暗号処理装置は、作業変数Ｖをラウンド鍵配列の１列目にＸＯＲ処理して当該１列目の４バイトを更新する（ＳＴ２５）。そして、暗号処理装置は、更新された１列目の４バイトをラウンド鍵配列の２列目にＸＯＲ処理して当該２列目を更新し（ＳＴ２６）、以下、順次同様に、更新後の２列目の４バイトを３列目にＸＯＲ処理して当該３列目を更新し（ＳＴ２７）、更新された３列目の４バイトを４列目にＸＯＲ処理して当該４列目を更新する（ＳＴ２８）。
【００２６】
全ての列にＸＯＲ処理を実行すると、暗号処理装置は、Ｎ段目の暗号化処理を終了し（ＳＴ２９）、段数Ｎを＋１増加し（ＳＴ３０）、ＡＥＳ暗号方式の仕様に定められた最後の段か否かの判定を行い（ＳＴ３１）、最後の段でない場合にはステップＳＴ２３に戻ってラウンド鍵の更新処理を繰り返す。  
一方、最後の段の場合には、ラウンド鍵の更新処理を終了する。
【００２７】
１２８ビット鍵のＡＥＳの暗号処理は１０ラウンドでラウンド鍵を１１回使用する。ラウンド鍵更新は２回目以降のラウンド鍵使用の前に必要なため、１０回のラウンド鍵更新が行われる。
【００２８】
（１９２ビット鍵の更新処理：図２３）
暗号処理装置は、１９２ビットの鍵を４行６列のラウンド鍵配列に書き込み（ＳＴ４１）、段数Ｎを１に設定し（ＳＴ４２）、Ｎ段目のラウンド鍵の更新処理を開始する（ＳＴ４３）。
【００２９】
暗号処理装置は、ラウンド鍵配列の６列目の４バイトにＡＥＳの仕様で定められた並べ替え(RotWord)処理、バイト換字(SubByte)処理、鍵定数とのＸＯＲ（排他的論理和演算）処理、を実行し、作業変数Ｖを作成する（ＳＴ４４）。
【００３０】
しかる後、暗号処理装置は、作業変数Ｖをラウンド鍵配列の１列目にＸＯＲ処理して当該１列目の４バイトを更新する（ＳＴ４５）。そして、暗号処理装置は、更新された１列目の４バイトをラウンド鍵配列の２列目にＸＯＲ処理して当該２列目を更新し（ＳＴ４６）、以下、順次同様に、更新後の２列目の４バイトを３列目にＸＯＲ処理して当該３列目を更新し（ＳＴ４７）、更新された３列目の４バイトを４列目にＸＯＲ処理して当該４列目を更新し（ＳＴ４８）、更新後の４列目の４バイトを５列目にＸＯＲ処理して当該５列目を更新し（ＳＴ４９）、更新後の５列目の４バイトを６列目にＸＯＲ処理して当該６列目を更新する（ＳＴ５０）。
【００３１】
全ての列にＸＯＲ処理を実行すると、暗号処理装置は、Ｎ段目の暗号化処理を終了し（ＳＴ５１）、段数Ｎを＋１増加し（ＳＴ５２）、ＡＥＳ暗号方式の仕様に定められた最後の段か否かの判定を行い（ＳＴ５３）、最後の段でない場合にはステップＳＴ４３に戻ってラウンド鍵の更新処理を繰り返す。  
一方、最後の段の場合には、ラウンド鍵の更新処理を終了する。
【００３２】
なお、ラウンド鍵配列は４行６列であるが、ＡＥＳの暗号化処理の１ラウンドでは４行４列しか用いないため、暗号化処理の３ラウンドにつき２回のラウンド鍵更新処理を行い、ラウンド鍵を分配する。
【００３３】
１９２ビット鍵のＡＥＳの暗号処理は１２ラウンドでラウンド鍵を１３回使用する。ラウンド鍵更新は２ラウンド目以降のラウンド鍵使用の前に必要であり、８回のラウンド鍵更新が行われる。
【００３４】
（２５６ビット鍵の更新処理：図２４）
暗号処理装置は、２５６ビットの鍵を４行８列のラウンド鍵配列に書き込み（ＳＴ６１）、段数Ｎを１に設定し（ＳＴ６２）、Ｎ段目のラウンド鍵の更新処理を開始する（ＳＴ６３）。
【００３５】
暗号処理装置は、ラウンド鍵配列の８列目の４バイトにＡＥＳの仕様で定められた並べ替え(RotWord)処理、バイト換字(SubByte)処理、鍵定数とのＸＯＲ（排他的論理和演算）処理、を実行し、作業変数Ｖを作成する（ＳＴ６４）。
【００３６】
しかる後、暗号処理装置は、作業変数Ｖをラウンド鍵配列の１列目にＸＯＲ処理して当該１列目の４バイトを更新する（ＳＴ６５）。そして、暗号処理装置は、更新された１列目の４バイトをラウンド鍵配列の２列目にＸＯＲ処理して当該２列目を更新し（ＳＴ６６）、以下、順次同様に、更新後の２列目の４バイトを３列目にＸＯＲ処理して当該３列目を更新し（ＳＴ６７）、更新後の３列目をバイト換字(SubByte)処理してから４列目にＸＯＲ処理して当該４列目を更新し（ＳＴ６８）、更新後の４列目を５列目にＸＯＲ処理して当該５列目を更新し（ＳＴ６９）、更新後の５列目を６列目にＸＯＲ処理して当該６列目を更新し（ＳＴ７０）、更新後の６列目を７列目にＸＯＲ処理して当該７列目を更新し（ＳＴ７１）、更新後の７列目を８列目にＸＯＲ処理して当該８列目を更新する（ＳＴ７２）。
【００３７】
全ての列にＸＯＲ処理を実行すると、暗号処理装置は、Ｎ段目の暗号化処理を終了し（ＳＴ７３）、段数Ｎを＋１増加し（ＳＴ７４）、ＡＥＳ暗号方式の仕様に定められた最後の段か否かの判定を行い（ＳＴ７５）、最後の段でない場合にはステップＳＴ６３に戻ってラウンド鍵の更新処理を繰り返す。  
一方、最後の段の場合には、ラウンド鍵の更新処理を終了する。
【００３８】
なお、ラウンド鍵配列は４行８列であるが、ＡＥＳの暗号化処理の１ラウンドでは４行４列しか用いないため、暗号化処理の２ラウンドにつき１回のラウンド鍵更新処理を行い、ラウンド鍵を分配する。
【００３９】
２５６ビット鍵のＡＥＳの暗号処理は１４ラウンドでラウンド鍵を１５回使用する。ラウンド鍵更新は３ラウンド目以降、２段ごとのラウンド鍵使用の前に必要であり、７回のラウンド鍵更新が行われる。
【００４０】
（マスキング法によるＡＥＳ暗号化処理：図２５）
続いて、マスキング法を用いたＡＥＳ暗号化処理について説明する。
【００４１】
マスキング法を用いた暗号化処理は、図２１に示した暗号化処理に対し、ステップＳＴ２で書き込んだ内部状態配列にＡＥＳ内部データ保護マスクをＸＯＲ（により付加）する処理（ＳＴ２−２）を有する点と、前述したバイト換字処理に代えて、マスク付バイト換字(SubByte)処理（ＳＴ６’）を用いる点と、前述したミックスカラム変換処理に代えて、マスク付ミックスカラム(SubByte)変換処理（ＳＴ８’）を用いる点と、出力する暗号化データからＡＥＳ内部データ保護マスクをＸＯＲ（により除去）する処理（ＳＴ１２）を有する点とが異なる。
【００４２】
なお、ステップＳＴ６’のマスク付バイト換字処理は、４行４列のＳボックス入力保護マスクをＸＯＲ（により付加）する処理と、４行４列のラウンド鍵保護マスクをＸＯＲ（により除去）する処理と、マスク付Ｓボックス情報を参照したバイト換字(SubByte)処理と、４行４列のＡＥＳ内部データ保護マスクをＸＯＲ（により付加）する処理と、４行４列のＳボックス保護マスクをＸＯＲ（により除去）する処理とを順次、実行するものである。ここで、マスク付Ｓボックス情報は、図２６に示すように、通常のＳボックス情報の前段にＳボックス入力保護マスクがＸＯＲにより付加され、且つ当該Ｓボックス情報の後段にＳボックス出力保護マスクがＸＯＲにより付加されるように、通常のＳボックス情報が変形されてなるＳボックス情報である。なお、Ｓボックス入力保護マスク及びＳボックス出力保護マスクは、それぞれ４行４列の各要素にて互いに同一のマスク値が用いられている。
【００４３】
ステップＳＴ６’のマスク付バイト換字(SubByte)処理は、４行４列のＳボックス入力保護マスクをＸＯＲ（により付加）する処理と、４行４列のラウンド鍵保護マスクをＸＯＲ（により除去）する処理と、マスク付Ｓボックス情報を参照したバイト換字(SubByte)処理と、４行４列のＡＥＳ内部データ保護マスクをＸＯＲ（により付加）する処理と、４行４列のＳボックス保護マスクをＸＯＲ（により除去）する処理とを順次、実行するものである。
【００４４】
ステップＳＴ８’のマスク付ミックスカラム(MixColumn)変換処理は、４行４列のミックスカラム入力保護マスクをＸＯＲ（により付加）する処理と、４行４列のラウンド鍵保護マスクをＸＯＲ（により除去）する処理と、ミックスカラム(MixColumn)変換処理と、４行４列のミックスカラム出力をＸＯＲ（により付加）する処理と、４行４列のＡＥＳ内部データ保護マスクをＸＯＲ（により除去９する処理とを順次、実行するものである。
【００４５】
以上のように、マスキング法を用いたＡＥＳ暗号化処理においては、マスクが付加された状態で内部データが暗号化されている。また、ステップＳＴ１のラウンド鍵にもマスキング法により、マスクが付加されている。続いて、このマスキング法によるラウンド鍵の更新処理について、１２８ビット鍵、１９２ビット鍵及び２５６ビット鍵の順に述べる。
【００４６】
（マスキング法による１２８ビット鍵の更新処理：図２７、図２８）
マスキング法による１２８ビット鍵の更新処理は、図２２に示した更新処理に対し、ステップＳＴ２１で書き込んだラウンド鍵配列にラウンド鍵保護マスクをＸＯＲ（により付加）する処理（ＳＴ２１−２）を有する点と、前述した作業変数Ｖ作成処理に代えて、マスク付作業変数Ｖ作成処理（ＳＴ２４’）を用いる点と、列毎の更新処理（ＳＴ２５，ＳＴ２６，ＳＴ２７，ＳＴ２８）の後段にそれぞれマスク変更処理（ＳＴ２５−２，ＳＴ２６−２，ＳＴ２７−２，ＳＴ２８−２）を有する点とが異なる。
【００４７】
なお、ステップＳＴ２４’のマスク付作業変数作成処理は、ラウンド鍵の４列目に対し、Ｓボックス入力保護マスクの４列目をＸＯＲ（により付加）する処理と、ラウンド鍵保護マスクの４列目をＸＯＲ（により除去）する処理と、マスク付Ｓボックス情報を参照したバイト換字(SubByte)処理により１列の作業変数Ｖを作成する処理とを順次、実行するものである。
【００４８】
ステップＳＴ２５−２のマスク変更処理は、ラウンド鍵の更新後の１列目に対し、ラウンド鍵保護マスクの１列目をＸＯＲ（により付加）する処理と、Ｓボックス出力保護マスクの１列目をＸＯＲ（により除去）する処理とを順次、実行するものである。
【００４９】
ステップＳＴ２６−２のマスク変更処理は、ラウンド鍵の更新後の２列目に対し、乱数Ｒ１をＸＯＲ（により付加）する処理と、ラウンド鍵保護マスクの１列目をＸＯＲ（により除去）する処理と、乱数Ｒ１をＸＯＲ（により除去）する処理とを順次、実行するものである。
【００５０】
以下同様に、ステップＳＴ２７−２，ＳＴ２８−２のマスク変更処理は、ラウンド鍵の更新後のｎ列目に対し、乱数Ｒ(ｎ−１)をＸＯＲ（により付加）する処理と、ラウンド鍵保護マスクの（ｎ−１）列目をＸＯＲ（により除去）する処理と、乱数Ｒ(ｎ−１)をＸＯＲ（により除去）する処理とを順次、実行するものである。
【００５１】
以上のように、マスキング法を用いた１２８ビット鍵の更新処理においては、マスクが付加された状態でラウンド鍵が更新されている。
【００５２】
（マスキング法による１９２ビット鍵の更新処理：図２９）
マスキング法による１９２ビット鍵の更新処理は、図２３に示した更新処理に対し、ステップＳＴ４１で書き込んだラウンド鍵配列にラウンド鍵保護マスクをＸＯＲ（により付加）する処理（ＳＴ４１−２）を有する点と、前述した作業変数Ｖ作成処理に代えて、マスク付作業変数Ｖ作成処理（ＳＴ４４’）を用いる点と、列毎の更新処理（ＳＴ４５〜ＳＴ５０）の後段にそれぞれマスク変更処理（ＳＴ４５−２〜ＳＴ５０−２）を有する点とが異なる。
【００５３】
ステップＳＴ４４’のマスク付作業変数作成処理は、ラウンド鍵の６列目に対し、Ｓボックス入力保護マスクの６列目をＸＯＲ（により付加）する処理と、ラウンド鍵保護マスクの６列目をＸＯＲ（により除去）する処理と、マスク付Ｓボックス情報を参照したバイト換字(SubByte)処理により１列の作業変数Ｖを作成する処理とを順次、実行するものである。
【００５４】
ステップＳＴ４５−２のマスク変更処理は、ラウンド鍵の更新後の１列目に対し、ラウンド鍵保護マスクの１列目をＸＯＲ（により付加）する処理と、Ｓボックス出力保護マスクの１列目をＸＯＲ（により除去）する処理とを順次、実行するものである。
【００５５】
ステップＳＴ４６−２のマスク変更処理は、ラウンド鍵の更新後の２列目に対し、乱数Ｒ１をＸＯＲ（により付加）する処理と、ラウンド鍵保護マスクの１列目をＸＯＲ（により除去）する処理と、乱数Ｒ１をＸＯＲ（により除去）する処理とを順次、実行するものである。
【００５６】
以下同様に、ステップＳＴ４７−２〜ＳＴ５０−２のマスク変更処理は、ラウンド鍵の更新後のｎ列目に対し、乱数Ｒ(ｎ−１)をＸＯＲ（により付加）する処理と、ラウンド鍵保護マスクの（ｎ−１）列目をＸＯＲ（により除去）する処理と、乱数Ｒ(ｎ−１)をＸＯＲ（により除去）する処理とを順次、実行するものである。
【００５７】
以上のように、マスキング法を用いた１９２ビット鍵の更新処理においては、マスクが付加された状態でラウンド鍵が更新されている。
【００５８】
（マスキング法による２５６ビット鍵の更新処理：図３０）
マスキング法による１９２ビット鍵の更新処理は、図２４に示した更新処理に対し、ステップＳＴ６１で書き込んだラウンド鍵配列にラウンド鍵保護マスクをＸＯＲ（により付加）する処理（ＳＴ６１−２）を有する点と、前述した作業変数Ｖ作成処理に代えて、マスク付作業変数Ｖ作成処理（ＳＴ６４’）を用いる点と、列毎の更新処理（ＳＴ６５〜ＳＴ７２）の後段にそれぞれマスク変更処理（ＳＴ６５−２〜ＳＴ７２−２）を有する点とが異なる。
【００５９】
ステップＳＴ６４’のマスク付作業変数作成処理は、ラウンド鍵の８列目に対し、Ｓボックス入力保護マスクの８列目をＸＯＲ（により付加）する処理と、ラウンド鍵保護マスクの８列目をＸＯＲ（により除去）する処理と、マスク付Ｓボックス情報を参照したバイト換字(SubByte)処理により１列の作業変数Ｖを作成する処理とを順次、実行するものである。
【００６０】
ステップＳＴ６５−２のマスク変更処理は、ラウンド鍵の更新後の１列目に対し、ラウンド鍵保護マスクの１列目をＸＯＲ（により付加）する処理と、Ｓボックス出力保護マスクの１列目をＸＯＲ（により除去）する処理とを順次、実行するものである。
【００６１】
ステップＳＴ６６−２のマスク変更処理は、ラウンド鍵の更新後の２列目に対し、乱数Ｒ１をＸＯＲ（により付加）する処理と、ラウンド鍵保護マスクの１列目をＸＯＲ（により除去）する処理と、乱数Ｒ１をＸＯＲ（により除去）する処理とを順次、実行するものである。
【００６２】
以下同様に、ステップＳＴ６７−２〜ＳＴ７２−２のマスク変更処理は、ラウンド鍵の更新後のｎ列目に対し、乱数Ｒ(ｎ−１)をＸＯＲ（により付加）する処理と、ラウンド鍵保護マスクの（ｎ−１）列目をＸＯＲ（により除去）する処理と、乱数Ｒ(ｎ−１)をＸＯＲ（により除去）する処理とを順次、実行するものである。
【００６３】
以上のように、マスキング法を用いた２５６ビット鍵の更新処理においては、マスクが付加された状態でラウンド鍵が更新されている。
【００６４】
（マスキング法によるマスク値）
次に、以上のようなラウンド鍵へのマスキング法の適用について説明する。図３１は、従来のマスキング法によるマスクを付加された後（ＳＴ２１−２の後）のラウンド鍵配列の状態を表す。１２８ビット鍵のＡＥＳの暗号処理のラウンド鍵更新処理において、ラウンド鍵配列の１行２列目の要素をy(1,2)からy’(1,2)に更新する場合を例とすると、y’(1,2)は、y(1,1)とy(1,2)を用いて、y’(1,2) ＝ y(1,1) XOR y(1,2)により更新される。
【００６５】
マスキング法によりラウンド鍵配列ｉ行ｊ列目の各要素の真の値y(i,j)に乱数r(i,j)が用いられていたとすると、ラウンド鍵配列の１行１列目と１行２列目の各要素のマスクが付加された値は、それぞれ y(1,1) XOR r(1,1) と y(1,2) XOR r(1,2) であり、更新結果は、y’(1,2) XOR r(1,1) XOR r(1,2) ＝ (y(1,1) XOR r(1,1)) XOR (y(1,2) XOR r(1,2)) となり、更新前の１行１列目と１行２列目のマスクのＸＯＲされた結果が、更新後の１行２列目の要素へのマスクとなる。同様に、ｉ×ｊ個の各要素について更新処理が行われる。
【００６６】
ここで、ＡＥＳの処理は８ビットを処理単位とするため、マスクを同様に８ビットで考えると、マスク値は２５６通りである。１２８ビット鍵を用いたＡＥＳのラウンド鍵更新では上述の更新処理が４×４＝１６回行われる。マスク値が一様ランダムであると仮定すると、パースデーパラドックスの定理により、約５０％の確率で更新されたマスク値が０となる問題が知られている。
【００６７】
この対策として、ＡＥＳ処理の前にラウンド鍵更新の方法に従って、マスク値をそれぞれ計算し、マスク値が０とならないことを保証する方式が考えられる。しかしながら、この方式は、ランダムかつ重複なくマスク値を選択した場合、１０回繰り返しても、無視できない５〜１０％以上の確率でマスク値０が発生するため、検査に時間を要する問題がある。
【００６８】
マスキング法の別の方式として、１行２列目の要素のマスクをr(1,2)のまま変更しないで更新する方法が知られている。この場合には、y’(1,2) XOR r(1,2) ＝ (y(1,1) XOR r(1,1)) XOR (y(1,2) XOR r(1,2)) XOR r(1,1)の演算を行う。この方法では、上述のマスク値が０となる可能性をかなり低減できるが、ラウンド鍵配列の各要素の更新時にそれぞれ１回のＸＯＲ演算が増加してしまう。
【００６９】
また一方、ＡＥＳの場合、前述したように、回路規模あるいは使用リソースの増大・制御の複雑さといったことから、マスクの管理が複雑となる問題がある。例えばデータ暗号化部では１段の処理で８ビット入力８ビット出力のＳボックスが１６個使用される。それぞれ別々の乱数によりマスクを用いると、回路規模あるいは実現ソフトウェアのコード規模と使用メモリ量の増大が見込まれる。一般的な見積もりでは、ＤＥＳ及びトリプルＤＥＳと比較すると１６倍のメモリ量が必要となる。また、鍵スケジュール部においては、最大で４段カスケード接続ＸＯＲあるいは４入力１出力のＸＯＲ演算が必要となる。
【００７０】
このように、ＡＥＳの場合、それぞれ別々の乱数によるマスクを用いると、マスクの管理が複雑となる問題が発生する。
【非特許文献１】米国標準技術研究所 (National Institute of Standards and Technology): "Data Encryption Standard(DES)", Federal Information Processing Standards 46-3, 1999
【非特許文献２】米国標準技術研究所 (National Institute of Standards and Technology): "Advanced Encryption Standard", Federal Information Processing Standards 197, 2001
【非特許文献３】Paul Kocher, Joshua Jaffe, and Benjamin Jun, "Differential Power Analysis" in proceedings of Advances in Cryptology -- CRYPTO'99, Springer-Verlag, pp.388-397, 1999
【非特許文献４】Tomas Messerges, "Securing the AES Finalists Against Power Analysis Attacks," in proceedings of Fast Software Encryption Workshop 2000, Springer-Verlag, 2000.
【非特許文献５】ISO/IEC 10118-3
【非特許文献６】“WHIRLPOOL”, 英語版Wikipedia, http://en.wikipedia.org/wiki/WHIRLPOOL
【発明の開示】
【発明が解決しようとする課題】
【００７１】
以上説明したように、従来のマスキング法をＡＥＳ暗号方式にそのまま適用した場合、ラウンド鍵配列へのマスク値が０となる問題や、マスク管理が複雑になる問題が生じてしまう。このような問題は、ＡＥＳ暗号方式に限らず、例えばＡＥＳの４×４の内部状態に類似した８×８の内部状態をもつワープール（Whirlpool）（例えば、非特許文献５，６参照。）にも同様に存在すると考えられる。
【００７２】
本発明は上記実情を考慮してなされたもので、ラウンド鍵配列へのマスク値が０になることを阻止でき、且つマスク管理の複雑化を低減し得る暗号処理装置及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００７３】
第１の発明は、ラウンド鍵保護マスク、Ｓボックス入力保護マスク及びＳボックス出力保護マスクを用いてＡＥＳ暗号方式を実行する暗号処理装置であって、前記Ｓボックス入力保護マスクのマスク状態を“００１”，“０１０”，“０１１”，“１００”，“１０１”，“１１０”及び“１１１”の７種類のマスク状態から選択する入力選択手段と、前記選択されたＳボックス入力保護マスクのマスク状態とは異なるマスク状態を、前記Ｓボックス出力保護マスクのマスク状態として前記７種類のマスク状態から選択する出力選択手段と、前記選択されたＳボックス出力保護マスクのマスク状態とは異なるマスク状態を、前記ラウンド鍵保護マスクの１列目のマスク状態として前記７種類のマスク状態から選択する１列目選択手段と、前記選択されたＳボックス出力保護マスクのマスク状態、前記選択された１列目のマスク状態、及び「当該Ｓボックス出力保護マスクのマスク状態と当該１列目のマスク状態との排他的論理和の演算結果」とは異なるマスク状態を、前記ラウンド鍵保護マスクの２列目のマスク状態として前記７種類のマスク状態から選択する２列目手段と、前記ラウンド鍵保護マスクの３列目及び４列目のマスク状態を前記７種類のマスク状態からそれぞれ選択する３・４列目選択手段と、前記選択されたＳボックス出力保護マスクのマスク状態、前記選択された１列目から４列目までのマスク状態を用いて、前記ＡＥＳ暗号方式によるラウンド鍵更新後の１列目から４列目までのマスク状態を計算するマスク状態計算手段と、前記計算されたマスク状態に禁止状態“０００”が含まれるか否かを判定する禁止状態判定手段と、前記７種類のマスク状態のうち、“００１”，“０１０”及び“１００”にそれぞれ対応する３個の基本マスク値が記憶された基本マスク値記憶手段と、前記禁止状態が含まれないとき、前記選択された各マスク状態に対応して前記各基本マスク値同士を排他的論理和により合成することにより、当該選択された各マスク状態に対応するそれぞれの合成マスク値を計算するマスク値計算手段とを備えた暗号処理装置である。
【００７４】
なお、第１の発明は、「装置」として表現したが、これに限らず、「プログラム」、「プログラムを記憶したコンピュータ読取り可能な記憶媒体」又は「方法」として表現してもよい。
【００７５】
（作用）
第１の発明によれば、従来のマスキング法と同等のサイドチャネル攻撃への耐性を実現しつつ、列毎に異なるマスク状態を選択する構成により、ラウンド鍵配列へのマスク値が０になることを阻止でき、且つ基本マスク値から合成マスク値を生成する構成により、マスク管理の複雑さを低減することができる。
【発明の効果】
【００７６】
以上説明したように本発明によれば、ラウンド鍵配列へのマスク値が０になることを阻止でき、且つマスク管理の複雑化を低減できる。
【発明を実施するための最良の形態】
【００７７】
以下、本発明の各実施形態について図面を用いて説明する。なお、以下の各装置は、各装置毎に、ハードウェア構成、又はハードウェア資源とソフトウェアとの組合せ構成のいずれでも実施可能となっている。組合せ構成のソフトウェアとしては、予めネットワーク又は記憶媒体から対応する装置のコンピュータにインストールされ、対応する装置の機能を実現させるためのプログラムが用いられる。
【００７８】
以下、本発明の実施形態について図面を参照しつつ詳細に説明する。
【００７９】
（第１の実施形態）
図１は本発明の第１の実施形態に係る暗号処理装置の構成を示す模式図である。この暗号処理装置１０は、マスキング法を適用したＡＥＳ暗号方式を実行する装置であり、ＩＣカード又はパーソナルコンピュータのいずれで実現してもよい。
【００８０】
具体的には、暗号処理装置１０は、ＲＯＭ１、ＲＡＭ２、不揮発性メモリ３、ＣＰＵ４及び入出力部５が互いにバス６を介して接続された構成となっている。
【００８１】
ここで、ＲＯＭ１は、ＣＰＵ５から読出可能な読出専用メモリであり、暗号処理装置１０のＯＳが予め記憶されている。
【００８２】
ＲＡＭ２は、ＣＰＵ５から読出／書込可能なランダムアクセスメモリであり、不揮発性メモリ３の記憶内容が読み出され、ラウンド鍵更新処理中及びＡＥＳ暗号処理中に暗号文、鍵、マスク状態、マスク値、カウント値、処理中データ、復号された平文等を一時的に保存するために用いられる。ラウンド鍵配列、内部状態配列(State array)は、ＲＡＭ２の一部の領域に形成されており、１２８ビット鍵の場合には４行４列の配列であり、１９２ビット鍵の場合には４行６列の配列であり、２５６ビット鍵の場合には４行８列の配列である。
【００８３】
不揮発性メモリ３は、ＣＰＵ５から読出／書込可能で電源オフ時にも記憶内容が消去されないメモリであり、例えば、外部の記憶媒体からインストールされたＡＥＳ暗号処理の動作プログラム、マスク付Ｓボックス(S-box)情報、ラウンド鍵保護マスク生成用の基本マスク値Ａ，Ｂ，Ｃ、などが予め記憶され、また、外部のＡＥＳ復号装置（図示せず）と共有する共通鍵、などが適宜、記憶される。但し、マスク付Ｓボックス(S-box)情報、基本マスク値Ａ，Ｂ，Ｃ、及び共通鍵は、予め不揮発性メモリ３に記憶される場合に限らず、ＡＥＳ暗号処理の際に、その都度作成する場合もある。暗号処理の都度作成する場合、マスク付Ｓボックス(S-box)情報、基本マスク値Ａ，Ｂ，Ｃ、及び共通鍵は、ＲＡＭ２に記憶される一方、不揮発性メモリ３には記憶されない。なお、共有する鍵（共通鍵）の鍵長は、ＡＥＳ暗号の仕様の通り、１２８ビット、１９２ビット又は２５６ビットのいずれでもよい。
【００８４】
ＣＰＵ４は、入出力部５から入力された平文データに対してＡＥＳ暗号処理を実行し、得られた暗号文データを入出力部５から出力するＡＥＳ暗号処理を実行するものであり、具体的にはメモリ１〜３を参照しながら、図２乃至図８に示す如き、マスク状態更新処理、ラウンド鍵更新処理及びＡＥＳ暗号処理を実行する機能をもっている。
【００８５】
例えばＣＰＵ４は、Ｓボックス入力保護マスクのマスク状態を“００１”，“０１０”，“０１１”，“１００”，“１０１”，“１１０”及び“１１１”の７種類のマスク状態から選択する機能と、選択したＳボックス入力保護マスクのマスク状態とは異なるマスク状態を、Ｓボックス出力保護マスクのマスク状態として７種類のマスク状態から選択する機能と、選択したＳボックス出力保護マスクのマスク状態とは異なるマスク状態を、ラウンド鍵保護マスクの１列目のマスク状態として７種類のマスク状態から選択する機能と、選択したＳボックス出力保護マスクのマスク状態、選択した１列目のマスク状態、及び「当該Ｓボックス出力保護マスクのマスク状態と当該１列目のマスク状態との排他的論理和の演算結果」とは異なるマスク状態を、ラウンド鍵保護マスクの２列目のマスク状態として７種類のマスク状態から選択する機能と、ラウンド鍵保護マスクの３列目及び４列目のマスク状態を７種類のマスク状態からそれぞれ選択する機能と、選択したＳボックス出力保護マスクのマスク状態、選択した１列目から４列目までのマスク状態を用いて、ＡＥＳ暗号方式によるラウンド鍵更新後の１列目から４列目までのマスク状態を計算する機能と、計算したマスク状態に禁止状態“０００”等が含まれるか否かを判定する機能と、７種類のマスク状態のうち、“００１”，“０１０”及び“１００”にそれぞれ対応する３個の基本マスク値Ａ，Ｂ，ＣをＲＡＭ２に書き込む機能と、禁止状態が含まれないとき、選択した各マスク状態に対応して各基本マスク値Ａ，Ｂ，Ｃ同士を排他的論理和により合成することにより、当該選択した各マスク状態に対応するそれぞれの合成マスク値を計算する機能とをもっている。
【００８６】
入出力部５は、図示しない外部装置と暗号処理装置１０との間のデータ等の入出力機能を有し、さらに、暗号処理装置１０がＩＣカードの場合には外部から暗号処理装置１０内への電源の入力機能などをもっている。
【００８７】
次に、以上のように構成された暗号処理装置の動作を図２のフローチャートを用いて説明する。なお、暗号処理装置１０では、操作者の操作により、ＡＥＳの暗号処理プログラムが起動され、不揮発性メモリ３の記憶内容がＲＡＭ２に書き込まれたとする。また、暗号処理装置１０では、操作者の操作により、平文データが入出力部５を介してＲＡＭ２に書き込まれた後、暗号処理要求が入出力部５を介して入力されたとする。
【００８８】
（マスク状態選択の全体動作：図２）
始めに、ＣＰＵ４は、ラウンド鍵配列各要素のマスク状態を選択し（ＳＴ８１）、ＲＡＭ２にマスク状態を書き込む。次に、ＣＰＵ４は、段（ラウンド）数のカウント値ＮをＮ＝１で初期化する。なお、段数は、ここでは１２８ビット鍵に対応した値１０が用いられるが、１９２又は２５６ビット鍵の場合には、段数に１２あるいは１４が用いられる。
【００８９】
続いて、ＣＰＵ４は、図３に示すように、ラウンド鍵更新後のラウンド鍵配列各要素のマスク状態を計算する（ＳＴ８３）。ステップＳＴ８３の処理は、図２２のステップＳＴ２１で格納するラウンド鍵として、図３中の使用段１のラウンド鍵保護マスクのマスク状態を用い、図２２のステップＳＴ２４に含まれるバイト換字(SubByte)処理に図３中のＳボックス出力保護マスクのマスク状態を用いることにより実行できる。
【００９０】
次に、ＣＰＵ４は、ラウンド鍵配列の各要素にマスク状態の禁止状態が含まれているか否かを判定し（ＳＴ８４）、含まれていた場合にはステップＳＴ８１に戻り、含まれていない場合にはステップＳＴ８５に進む。ここで、マスク状態の禁止状態とは、例えばマスク値の全てのビットが０である場合や全てのビットが１である場合など、マスキング法を適用する上で望ましくないマスクの値に対応するマスク状態である。なお、図２中、ステップＳＴ８３及びＳＴ８４は、それぞれ１回の処理として示したが、実際には図４に示すように、列毎に、マスク状態の更新と禁止状態の判定とを繰り返して実行する（ＳＴ８３−１，ＳＴ８４−１，…，ＳＴ８３−４，ＳＴ８４−４）。
【００９１】
ステップＳＴ８４の結果、マスク状態の禁止状態が含まれない場合、ＣＰＵ４は、段数Ｎのカウント値Ｎに１を加算し（ＳＴ８５）、最後の段か否かを判定し（ＳＴ８６）、最後の段でなければステップＳＴ８３に戻り、最後の段であれば、ＲＡＭ２を参照して選択したマスク状態を出力する（ＳＴ８７）。
【００９２】
（ステップＳＴ８１の詳細：図５）
ここで、ステップＳＴ８１におけるマスク状態の選択を詳細に説明する。
【００９３】
ＣＰＵ４は、ＡＥＳのラウンド鍵更新におけるバイト換字(SubByte)処理で用いるＳボックス入力保護マスクのマスク状態を７種のマスク状態の中から１つ選択する（ＳＴ８１−１）。なお、７種のマスク状態とは、001,010,011,100,101,110,111の状態である。Ｓボックス入力保護マスクは、４行１列の各要素が同じマスク状態をもつ。
【００９４】
また、ＣＰＵ４は、ＡＥＳのラウンド鍵更新におけるバイト換字処理で用いるＳボックス出力保護マスクのマスク状態を７種のマスク状態の中から１つ選択する（ＳＴ８１−２）。Ｓボックス出力保護マスクは、４行１列の各要素が同じマスク状態をもつ。
【００９５】
さらに、ＣＰＵ４は、ラウンド鍵保護マスクにおける１列目のマスク状態として、ステップＳＴ８１−２で選択したマスク状態と重複しないマスク状態を１つ選択する（ＳＴ８１−３）。
【００９６】
また、ＣＰＵ４は、ラウンド鍵保護マスクにおける２列目のマスク状態として、「Ｓボックス出力保護マスク」、「ラウンド鍵保護マスクの１列目」及び「Ｓボックス出力保護マスクとラウンド鍵保護マスクの１列目とのＸＯＲ演算の結果」の合計３種のマスク状態を除く４種のマスク状態から１つ選択する（ＳＴ８１−４）。
【００９７】
さらに、ＣＰＵ４は、ラウンド鍵保護マスクにおける３列目と４列目のマスク状態を７種のマスク状態の中からそれぞれ選択する（ＳＴ８１−５）。ラウンド鍵保護マスクは、４行４列の各要素が列毎に異なるマスク状態となる。
【００９８】
また、ＣＰＵ４は、ステップＳＴ８１−２からＳＴ８１−５までで決定したＳボックス出力保護マスク及びラウンド鍵保護マスクの１〜４列目までの各マスク状態を用いて、ラウンド鍵更新処理後の１〜４列目までのマスク状態をそれぞれ計算する（ＳＴ８１−６）。なお、ステップＳＴ８１−６の処理は、前述したステップＳＴ８３と同様にして実行できる。
【００９９】
さらに、ＣＰＵ４は、ステップＳＴ８１−６で得られたマスク状態に禁止状態が含まれているか否かを判定し（ＳＴ８１−７）、含まれている場合にはステップＳＴ８１−５に戻り、含まれていない場合には処理を終了してステップＳＴ８２に進む。
【０１００】
（マスキング法によるＡＥＳ暗号処理：図６）
ＣＰＵ４は、図２に示したように、最初のラウンド鍵配列各要素のマスク状態を決定する（ＳＴ８１〜ＳＴ８７）。続いて、ＣＰＵ４は、少なくとも７乃至それ以上の種別のマスク状態に対応したマスク値を選択し（ＳＴ９１）、ＲＡＭ２にマスク状態及びマスク値を格納する。ここで、マスク値の選択は、図７に示すように、基本マスク値Ａ，Ｂ，Ｃをマスク状態に基づいてＸＯＲ演算し、得られた合成マスク値を選択するように実行している。ここで、マスク状態をｃｂａとすると、100,010,001に対応する基本マスク値Ｃ，Ｂ，Ａと、合成マスク値Ｍとの間には以下の関係がある。  
Ｍ＝ｃ・Ｃ(＋)ｂ・Ｂ(＋)ａ・Ａ  
但し、(＋)：排他的論理和、ｃｂａ：001〜111のいずれかの値（ｃ,ｂ,ａは、それぞれ0又は1）。
【０１０１】
続いて、ＣＰＵ４は、選択したマスク値が禁止状態を含むか否かを判定し（ＳＴ９２）、禁止状態を含む場合にはステップＳＴ８１に戻り、含まない場合にはＡＥＳの暗号処理（ＳＴ９３）及びラウンド鍵更新処理（ＳＴ９４）を実行する。
【０１０２】
（マスク状態の更新結果）
前述した図３中、001,010,011,100,101,110,111はそれぞれ３つの独立な基本マスク値のＸＯＲで合成されたＳボックス出力保護マスク及びラウンド鍵保護マスクのマスク状態を表す。ラウンド鍵保護マスクでは、例えば、それぞれ0x02, 0x10, 0x12, 0x40, 0x42, 0x50, 又は0x52のマスク値が列毎に割り当てられる。
【０１０３】
図３のマスク状態の表には、マスク値が0x00に対応する000や、その他0xffなどのマスキング法に適切でないマスク値に対応するマスク状態が登場しない。このため、マスキング法がサイドチャネル攻撃への対策として適切に動作できる。また、ラウンド鍵更新処理において、ラウンド鍵配列の各要素に適用されているマスク値がラウンド鍵配列の更新操作により図３に示すマスク状態に従って自動的に遷移する。ラウンド鍵配列の各要素のマスク値を明示的に変更する従来の方法では、各要素のマスク値の参照が必要である。一方、本実施形態によれば、ラウンド鍵配列更新処理のたびにマスク値を参照する必要がないが、各要素には適切なマスク値が適用されており、従来の方法と同等以上のサイドチャネル攻撃への対策の効果を得ることができる。
【０１０４】
上述したように本実施形態によれば、従来のマスキング法と同等のサイドチャネル攻撃への耐性を実現しつつ、少ない個数の乱数によりマスクを生成することから、マスク管理の複雑さを低減でき、列毎に異なるマスク状態を用いることから、ラウンド鍵配列へのマスク値が０になることを阻止することができる。
【０１０５】
（第２の実施形態）
図８は本発明の第２の実施形態に係る暗号処理装置の動作を説明するためのフローチャートであり、前述した図面と同一部分には同一符号を付してその詳しい説明は省略し、ここでは異なる部分について主に述べる。なお、以下の各実施形態も同様にして重複した説明を省略する。
【０１０６】
すなわち、本実施形態は、第１の実施形態におけるマスク状態からマスク値を生成するステップＳＴ９１の変形例である。
【０１０７】
具体的にはＣＰＵ４は、３つの基本マスク値Ａ，Ｂ，Ｃに代えて、１つの基本マスク値としての乱数ｒを生成する機能と、乱数ｒから残り２つの基本マスク値２ｒ，４ｒを算出する機能とを有し、これら３つの基本マスク値ｒ，２ｒ，４ｒからマスク状態に基づくＸＯＲ演算により合成マスク値を生成する機能をもっている。
【０１０８】
補足すると、ＣＰＵ４は、マスク値のビット数“ｎ”と同一ビット数の乱数ｒを生成する機能と、このビット数と同一値の次数であるｎ次の既約多項式を選択する機能とを備えている。基本マスク値は、乱数ｒと、乱数ｒをそれぞれ２倍及び４倍した値２ｒ，４ｒとである。また、ＣＰＵ４は、多項式を用いたガロア体ＧＦ（２ｎ）のベクトル表現をマスク状態に対応させることにより、合成マスク値を計算する。なお、ここではｎ＝８ビットの場合を例に挙げて述べるが、ビット数ｎは３≦ｎ≦３２の範囲で任意に選択可能である。
【０１０９】
次に、以上のように構成された暗号処理装置の動作を図８のフローチャートを用いて説明する。
【０１１０】
いま、前述同様に、図３に示したように、最初のラウンド鍵配列の各要素のマスク状態が決定されたとする（ＳＴ８１〜ＳＴ８７）。
【０１１１】
ＣＰＵ４は、ｎビットのマスク用乱数ｒを生成し（ＳＴ９１’−１）、ｎ次の既約な多項式を選択する（ＳＴ９１’−２）。
【０１１２】
しかる後、ＣＰＵ４は、この既約多項式を用いて、図９に示すように、少なくとも７乃至それ以上の種別のマスク状態に対応したマスク値を計算し（ＳＴ９１’−３）、ＲＡＭ２にマスク状態及びマスク値を格納する。
【０１１３】
以下、前述同様に、ＡＥＳ暗号処理（ＳＴ９３）及びラウンド鍵更新処理（ＳＴ９４）が実行される。
【０１１４】
（マスク値の生成について）
第１の実施形態では７乃至それ以上の種類のマスク状態のマスク値を生成するためには、少なくとも３種類の異なるマスク値が必要であったのに対して、本実施形態では１種類のマスク値から既約多項式を用いたＧＦ（２n）の多項式計算により、マスク状態に対応するマスク値を生成できる。
【０１１５】
すなわち、本実施形態では、図３に示したマスク状態を、任意の既約多項式を用いたガロア体ＧＦ（２n）のベクトル表現に対応させてマスク値を生成している。この場合、マスク状態001, 010,011, 100, 101, 110, 111は、多項式表現でいえば、それぞれ1,x,x+1,x^2,x^2+1,x^2+x,x^2+x+1に対応する。例えば、８ビットのデータマスクを生成する場合、乱数rが既約多項式 (x^8+x^7+x^5+x^3+x+1) を用いた拡大体ＧＦ（２8）のベクトル表現に対応させると、乱数ｒのベクトル表現の１６進数表記が0x2C（以下、１６進表記の場合には、先頭に0xを用いる）ならば、乱数ｒに基づき、マスク状態001, 010, 011, 100, 101, 110, 111に対応して生成されるマスク値は、図９に示したように、それぞれ0x2C, 0x58, 0x74, 0xB0, 0x9C, 0xE8, 0xC4となる。
【０１１６】
また、図３のマスク状態の表には、前述した通り、マスキング法に適切でないマスク状態が登場しないため、マスキング法がサイドチャネル攻撃への対策として適切に動作できる。また同様に、ラウンド鍵更新処理において、ラウンド鍵保護マスクのマスク値が図３に示すマスク状態に従って自動的に遷移する。このため、本実施形態によれば、従来とは異なり、ラウンド鍵配列更新処理のたびにマスク値を参照する必要がない。また、本実施形態によれば、各要素に適切なマスク値が適用されており、従来の方法と同等以上のサイドチャネル攻撃への対策の効果を得ることができる。
【０１１７】
上述したように本実施形態によれば、第１の実施形態の効果に加え、乱数ｒからマスク値を算出するので、第１の実施形態と比較してマスク値の選択が容易となる。
【０１１８】
また、マスク状態からマスク値を生成する場合、マスク状態とマスク値との関係式を計算して両者の対応表を作成し、７通りのマスク状態に対応するマスク値を参照すればよい。この場合、マスク値そのものを直接計算する場合に比べて、マスクの値にかかわらず処理が同じになるのでサイドチャネル情報の漏洩を抑制でき、サイドチャネル攻撃に対する耐性が高まる。
【０１１９】
なお、各実施形態における、図３のマスク状態の表は、図８のラウンド鍵更新処理（ＳＴ９４）において逐次計算する手法や、ＡＥＳ暗号処理（ＳＴ９３）に先立って暗号化処理を行う鍵長に応じたラウンド鍵のマスク状態の表を作成する手法や、予め暗号処理装置ごとの個別あるいは共通のマスク状態の表を作成しＡＥＳの暗号処理中では該表を参照する手法のうち、任意の手法で実現できる。
【０１２０】
また、各実施形態において、８ビットのデータを説明に用いたが、本発明によるマスキング法は８ビットに限定されない。ＡＥＳにおいては、ラウンド鍵配列の各要素が８ビットであるため、ｎ＝８が適しているが、ｎは３以上３２以下の範囲であれば任意に選択可能である。
【０１２１】
（第３の実施形態）
次に、本発明の第３の実施形態に係る暗号処理装置について説明する。
【０１２２】
本実施形態は、第１又は第２の実施形態の変形例であり、ラウンド鍵配列の各要素へのマスク状態の適用方法を複雑にし、サイドチャネル攻撃への耐性の向上を図るものである。
【０１２３】
具体的には、図１０に示すように、使用段１から使用段５までは、Ｓボックス出力保護マスクのマスク状態に“１０１”を使用し、使用段６から最終の使用段までは、Ｓボックス出力保護マスクのマスク状態に“１１１”を使用する構成となっている。
【０１２４】
補足すると、本実施形態は、第１又は第２の実施形態を使用段１から使用段５までの１回と、使用段６から最終の使用段までの１回との計２回実行する構成である。このとき、ＣＰＵ４は、使用段１から使用段５までのＳボックス出力保護マスクのマスク状態と、使用段６から最終の使用段までのＳボックス出力保護マスクのマスク状態とを互いに異なるマスク状態とするように選択する。但し、前述した２つのマスク状態“１０１”及び“１１１”は、一例であってこれに限るものではなく、互いに異なる値であれば、任意のマスク状態をＳボックス出力保護マスクに使用可能となっている。
【０１２５】
マスキング法においては、Ｓボックス入力保護マスクあるいはＳボックス出力保護マスクが異なれば、異なる内容のマスク付Ｓボックス情報（参照テーブル）が必要となり、記憶領域の必要量が増大するが、サイドチャネル攻撃の適用がより一層困難となり、サイドチャネル攻撃対策としての効果が向上すると考えられる。
【０１２６】
従って、以上のような構成によれば、第１又は第２の実施形態の効果に加え、サイドチャネル攻撃への耐性を向上させることができる。
【０１２７】
（第４の実施形態）
次に、本発明の第４の実施形態に係る暗号処理装置について図１１を用いて説明する。本実施形態は、第１又は第２の実施形態を１９２ビット鍵に適用した形態となっている。
【０１２８】
なお、１９２ビット鍵のＡＥＳでは、図１１に示すように、ラウンド鍵配列は４行６列の配列で表現される。これに伴い、ＣＰＵ４は、ラウンド鍵として１９２ビット鍵を用いる場合、前述した機能に加え、ラウンド鍵保護マスクの５列目及び６列目のマスク状態を“１０００”，“１００１”，“１０１０”，“１０１１”，“１１００”，“１１０１”，“１１１０”及び“１１１１”の８種類のマスク状態からそれぞれ選択する機能と、計算した４列目のマスク状態を用いて、ＡＥＳ暗号方式によるラウンド鍵更新後の５列目及び６列目のマスク状態を計算する機能と、計算した５列目及び６列目のマスク状態に禁止状態“００００”等が含まれるか否かを判定する機能と、８種類のマスク状態のうち、“１０００”に対応する基本マスク値をＲＡＭ２に書き込む機能と、禁止状態“００００”等が含まれないとき、選択した５列目及び６列目の各マスク状態に対応して各基本マスク値同士を排他的論理和により合成することにより、当該５列目及び６列目の各マスク状態に対応するそれぞれの合成マスク値を計算する機能とを更に備えている。
【０１２９】
ここで、マスク状態をｄｃｂａとすると、1000,0100,0010,0001に対応する基本マスク値Ｄ，Ｃ，Ｂ，Ａと、合成マスク値Ｍとの間には以下の関係がある。  
Ｍ＝ｄ・Ｄ(＋)ｃ・Ｃ(＋)ｂ・Ｂ(＋)ａ・Ａ  
但し、(＋)：排他的論理和、ｄｃｂａ：0001〜1111のいずれかの値（ｄ,ｃ,ｂ,ａは、それぞれ0又は1）。
【０１３０】
また、最終の使用段の５列目及び６列目は、使用されないラウンド鍵に対するマスク状態であり、実装形態によっては必要ない。
【０１３１】
図１１中、0001, 0010,0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111は、それぞれ４つの独立な基本マスク値のＸＯＲで合成されたＳボックス出力保護マスク及びラウンド鍵保護マスクのマスク状態を表している。ラウンド鍵保護マスクでは、例えば図１２に示すように、それぞれ0x02, 0x10, 0x12, 0x40, 0x42, 0x50, 0x52, 0x60, 0x62, 0x70, 0x72, 0xA0, 0xA2, 0xB0,又は0xB2のマスク値が列毎に割り当てられる。
【０１３２】
図１１のマスク状態の表には、マスク値が0x00に対応する0000や、その他0xffなどのマスキング法に適切でないマスク値に対応するマスク状態が登場しない。このため、マスキング法がサイドチャネル攻撃への対策として適切に動作できる。また、ラウンド鍵更新処理において、ラウンド鍵配列の各要素に適用されているマスク値がラウンド鍵配列の更新操作により図１１に示すマスク状態に従って自動的に遷移する。ラウンド鍵配列の各要素のマスク値を明示的に変更する従来の方法では、各要素のマスク値の参照が必要である。本実施形態によれば、ラウンド鍵配列更新処理のたびにマスク値を参照する必要がないが、各要素には適切なマスク値が適用されており、従来の方法と同等以上のサイドチャネル攻撃への対策の効果を得ることができる。
【０１３３】
また、第２の実施形態で示したように、0001から1111までの１５個のマスク状態に対応したマスクの生成方法の一例としては、任意の既約多項式を用いたガロア体ＧＦ（２n）のベクトル表現に対応させることもできる。この場合、多項式表現でいえば、それぞれ1,x,x+1,x^2,x^2+1,x^2+x,x^2+x+1に対応する。例えば、８ビットのデータマスクを生成する場合、乱数rが既約多項式 (x^8+x^7+x^5+x^3+x+1) を用いた拡大体ＧＦ（２n）のベクトル表現に対応させると、乱数ｒのベクトル表現の１６進数表記が0x2Cならば、乱数ｒに基づき、マスク状態0001, 0010,0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111に対応して生成されるマスク値は、図１３に示すように、それぞれ0x2C, 0x58, 0x74, 0xB0, 0x9C, 0xE8, 0xC4, 0x4B, 0x67, 0x13, 0x3F, 0xFB, 0xD7, 0xA3, 0x8Fとなる。なお、図１３中、基本マスク値には、乱数ｒと、乱数ｒをそれぞれ２倍、４倍及び８倍した値２ｒ，４ｒ，８ｒとを用いている。
【０１３４】
いずれにしても、暗号処理装置１０は、図１２又は図１３に示した如き４つの相異なるマスク値に基づき、図１１のマスク状態に対応した１５種類のマスク値を用いることにより、適切でないマスク値を排除しつつ、効果的なマスキング法を提供することができる。また、図１１によるマスク状態の遷移は、図１４に示すように、Ｓボックス出力保護マスク及びラウンド鍵保護マスクの１列目から４列目までは３種類のマスク値から合成されるマスク状態を使用するため、１２８ビット鍵のＡＥＳ処理との整合性も高く、複数の鍵長をサポートする暗号処理装置に用いる場合、実装性に優れている。
【０１３５】
上述したように本実施形態によれば、第１又は第２の実施形態の効果を、４行６列の１９２ビット鍵においても得ることができる。
【０１３６】
（第５の実施形態）
次に、本発明の第５の実施形態に係る暗号処理装置について図１５を用いて説明する。本実施形態は、第１又は第２の実施形態を２５６ビット鍵に適用した形態となっている。
【０１３７】
これに伴い、ＣＰＵ４は、ラウンド鍵として２５６ビット鍵を用いる場合、前述したステップＳＴ８１−３〜ＳＴ８１−７の処理と、ステップＳＴ９１，ＳＴ９２の処理を再度実行することにより、ラウンド鍵保護マスクの５列目から８列目のマスク値を得る機能をもっている。
【０１３８】
なお、２５６ビット鍵のＡＥＳでは、図１５に示すように、ラウンド鍵配列は４行８列の配列で表現される。先に述べたように、２５６ビット鍵のラウンド鍵更新において５列目の鍵配列の更新には、４列目の鍵配列にバイト換字(SubByte)処理を適用した結果が用いられるため、４列目のマスク状態と５列目のマスク状態との間に、バイト換字(SubByte)処理で使用されるＳボックス出力保護マスクのマスク状態を記述する。
【０１３９】
図１５中、001,010,011,100,101,110,111はそれぞれ３つの独立な基本マスク値のＸＯＲで合成されたＳボックス出力保護マスク及びラウンド鍵保護マスクのマスク状態を表している。ラウンド鍵保護マスクでは、例えば図７又は図９に示したように、それぞれのマスク状態に対応するマスク値が列毎に割り当てられる。
【０１４０】
また前述同様に、図１５のマスク状態の表には、適切でないマスク値に対応するマスク状態が登場しないため、サイドチャネル攻撃への対策として適切に動作できる。また同様に、ラウンド鍵更新処理において、ラウンド鍵保護マスクのマスク値が図１５に示すマスク状態に従って自動的に遷移する。このため、本実施形態によれば、従来とは異なり、ラウンド鍵配列更新処理のたびにマスク値を参照する必要がない。また、本実施形態によれば、各要素には適切なマスク値が適用されており、従来の方法と同等以上のサイドチャネル攻撃への対策の効果が得られる。
【０１４１】
また、図１５によるマスク状態の遷移は、Ｓボックス出力保護マスク及びラウンド鍵保護マスクには３種類のマスク値から合成されるマスク状態を使用するため、１２８ビット鍵のＡＥＳ処理との整合性も高く、複数の鍵長をサポートする暗号処理装置に用いる場合、実装性に優れている。
【０１４２】
上述したように本実施形態によれば、第１又は第２の実施形態の効果を、４行８列の２５６ビット鍵においても得ることができる。なお、本実施形態では、３つの相異なるマスク値を用いて各マスク状態に対応したマスク値を生成したが、３つ以上の相異なるマスク値であれば同様の方法により各マスク状態を生成でき、例えば第４の実施形態で例示した４つの相異なるマスクによる生成も、この手法の範疇であることは明らかである。
【０１４３】
（第６の実施形態）
次に、本発明の第６の実施形態に係る暗号処理装置について図１６乃至図１８を用いて説明する。本実施形態は、１２８ビット鍵の場合を代表例に挙げた第１乃至第５の各実施形態の変形例であり、図１６及び図１７に示すように、使用段１から最終の使用段までのＳボックス出力保護マスク（４行１列）の１行目〜４行目のマスク状態を互いに変更すると共に、ラウンド鍵保護マスクの列毎の１行目から４行目のマスク状態を互いに変更した構成となっている。これに伴い、ＣＰＵ４は、前述したステップＳＴ８１−２において、Ｓボックス出力保護マスクの１行目〜４行目のマスク状態を互いに異なる状態として選択する機能と、前述したステップＳＴ８１−３〜ＳＴ８１−５において、ラウンド鍵保護マスクの列毎に１行目から４行目のマスク状態を互いに異なる状態として選択する機能とをもっている。なお、図１８は図１６及び図１７に示すマスク状態に対応したマスク値を表している。
【０１４４】
第１乃至第５の実施形態においては、マスク値の例として、８ビットのマスク値を４つ繰り返し１列に拡大した３２ビットマスク値を用いたが、0x00のマスク値を除くと、８ビットのマスク値は２５５通りに限られ、マスク値のランダム性あるいは多様性が限られている。
【０１４５】
しかしながら、第６の実施形態によれば、鍵配列の各行ごとに独立な４つのマスク値を選択することにより、マスク値の組み合わせを２５５4 通り、すなわち１６５８万１３７５通りまで増加させることができ、マスキング法によるサイドチャネル攻撃への用途としては十分な多様性を提供できる。
【０１４６】
上述したように本実施形態によれば、第１乃至第５の各実施形態の効果に加え、Ｓボックス出力保護マスク及びラウンド鍵保護マスクのマスク値の組み合わせを増加できるため、サイドチャネル攻撃に対する耐性を向上させることができる。
【０１４７】
なお、Ｓボックス出力保護マスクのマスク値の４バイトは独立な値のため、そのまま実装すると４倍の数のマスク付Ｓボックス情報が必要となるが、図１６及び図１７のＳボックス出力保護マスクのマスク値とは異なる８ビットのマスク値を４つ繰り返すマスク値をＳボックス出力保護マスクに用い、その出力に固有のマスク値をそれぞれ適用することにより、図１６乃至図１８に示すＳボックス出力保護マスクのマスク値に変換する実装も、本実施形態の範囲内にある。
【０１４８】
（第７の実施形態）
次に、本発明の第７の実施形態に係る暗号処理装置について図１９及び図２０を用いて説明するが、その前に背景技術を述べる。
【０１４９】
ＡＥＳ暗号方式のデータ暗号化部においては、４行４列で表される中間状態を各列単位でバイト換字(SubByte)処理、ミックスカラム(MixColumn)処理を行い、新しい中間状態の１列を計算する処理を繰り返し、４列の変換を実現する。
【０１５０】
ここで、サイドチャネル攻撃においては、相似関係にある処理を異なる値を用いて実行する場合、特に攻撃が容易となることが知られている。
【０１５１】
従来の技術によれば、４行４列の内部状態をそれぞれ異なるマスク値で撹乱することにより、サイドチャネル攻撃への対策を行う。従来の技術を図３１により説明すると、内部状態行列のy(i,j) (+) r(i,j)は、ＡＥＳの内部状態のｉ行ｊ列目に格納されているデータであり、記号（＋）は排他的論理和であり、y(i,j)はｉ行ｊ列目の真の内部状態の成分に、r(i,j)は、ｉ行ｊ列目のマスク値の成分にそれぞれ対応する。
【０１５２】
バイト換字処理においては、４行４列の内部状態の要素毎に異なるマスク値が使用されているため、延べ１６個のＳボックス情報に個別のマスク値を使用したマスク付きＳボックス情報が必要となる。この場合、１６種類の異なるマスクのＳボックス情報を実現するためには、例えば、ＲＡＭに格納すると８キロバイトの記憶容量が必要になり、ハードウェア規模の増大が課題となる。以上が本実施形態の背景技術である。
【０１５３】
本実施形態は、第１〜第６の各実施形態と同時に実行可能であって、マスク付バイト換字(SubByte)処理に必要な記憶容量の低減を図るものであり、図１９に示すように、Ｓボックス入力保護マスク及びＳボックス出力保護マスクをそれぞれ２種類のマスク値ｒＡ，ｒＢから構成し、図２０に示すように、ＣＰＵ４がマスク状態に基づいてＳボックス入力保護マスクの付加及びＳボックス出力保護マスクの除去を各マスク値ｒＡ，ｒＢのＸＯＲ演算により実行する構成となっている。
【０１５４】
補足すると、ＲＡＭ２には、図１９に示す如き、Ｓボックス入力保護マスク及びＳボックス出力保護マスクのマスク状態と、当該マスク状態の各ビット値“０”に対応する第１マスク値ｒＡと、当該マスク状態の各ビット値“１”に対応する第２マスク値ｒＢとを互いに関連付けた参照表データが記憶されている。
【０１５５】
ＣＰＵ４は、選択したＳボックス入力保護マスク及びＳボックス出力保護マスクのマスク状態に基づいて、ＲＡＭ２内の参照表データを参照し、当該マスク状態の各ビット値“０”又は“１”に対応して第１マスク値ｒＡ又は第２マスク値ｒＢを選択する機能とをもっている。
【０１５６】
ここで、図２０に示す内部状態行列のy(i,j) (+) r(j)は、ＡＥＳの内部状態のｉ行ｊ列目に格納されているデータであり、記号（＋）は排他的論理和であり、y(i,j)はｉ行ｊ列目の真の内部状態の成分に、r(j)は、ｊ列目のマスク値の成分にそれぞれ対応する。
【０１５７】
マスク値は、ＣＰＵ４がマスク状態に基づいて図１９の参照表データを参照することにより、決定される。具体的には、ＣＰＵ４は、マスク状態0000から1111までの１６種類のマスク状態に対応して、r(1)からr(4)までの各列の４つのマスク値にｒＡ又はｒＢを選択し、列毎にＳボックス入力保護マスク及び／又はＳボックス出力保護マスクのマスク値を変更する。これにより、相似した処理で参照されるマスクされたＳボックス情報の表が、列毎に２種類の表から選択されるため、任意の列の間においてＳボックス情報のマスク値が一致する確率が２分の１となる。
【０１５８】
第２から第６の実施形態においては、３つ又は４つの基本マスク値から合成された７種類又は１５種類のマスク値をラウンド鍵へのマスキング法に用いている。一方、ＡＥＳの暗号処理においては、マスク付バイト換字処理のＳボックス情報の参照において図１９のマスク状態に対応したマスク値に変更する。
【０１５９】
上述したように本実施形態によれば、１つ又は２つの基本マスク値ｒＡ，ｒＢをＳボックス入力保護マスクあるいはＳボックス出力保護マスクのマスク値に用い、ＣＰＵ４による選択処理で切り替えることにより、処理あるいはラウンド毎に且つ列毎にＳボックス保護マスクのマスク値を変化させることができ、サイドチャネル攻撃に有効な情報の漏洩を低減でき、安全性が高まる効果がある。
【０１６０】
以上説明した各実施形態ではＡＥＳの暗号化処理の処理手順をもって説明したが、暗号化処理と対称をなす復号処理に対しても、当業者であれば上述の実施形態の種々の変形を行えることは明らかである。
【０１６１】
また、各実施形態のうち、データ暗号化部に関する第７の実施形態は、ＡＥＳ暗号方式に限らず、例えばＩＳＯ／ＩＥＣ １０１１８−３に記載のワープールWhirlpoolのように、ＡＥＳ暗号方式と類似したアルゴリズムについても適用可能となっている。ここで、ワープールWhirlpoolは、ＡＥＳ暗号方式に類似したデータ暗号化部を有しており、鍵スケジュール部が無い構成となっている。これに伴い、第７の実施形態は、ワープールWhirlpoolにも適用可能となっている。
【０１６２】
ワープールWhirlpoolに関する変形例は、図１に示す暗号処理プログラムを、Ｓボックス入力保護マスク及びＳボックス出力保護マスクを用い、ＩＳＯ／ＩＥＣ １０１１８−３に記載のワープールWhirlpoolを実行する暗号処理装置のプログラムとすればよい。このプログラムの実行により、ＣＰＵ４は、Ｓボックス入力保護マスクのマスク状態を“００１”，“０１０”，“０１１”，“１００”，“１０１”，“１１０”及び“１１１”の７種類のマスク状態から選択する入力選択機能と、選択されたＳボックス入力保護マスクのマスク状態とは異なるマスク状態を、Ｓボックス出力保護マスクのマスク状態として７種類のマスク状態から選択する出力選択機能と、Ｓボックス入力保護マスク及びＳボックス出力保護マスクのマスク状態と、当該マスク状態の各ビット値“０”に対応する第１マスク値と、当該マスク状態の各ビット値“１”に対応する第２マスク値とを互いに関連付けた参照表データをＲＡＭ２に書き込む機能と、入力選択機能及び出力選択機能により選択したマスク状態に基づいて、ＲＡＭ２内の参照表データを参照し、当該マスク状態の各ビット値“０”又は“１”に対応して第１マスク値又は第２マスク値を選択するマスク値選択機能とを備えている。このワープールWhirlpoolに関する変形例によれば、第７の実施形態と同様に、処理あるいはラウンド毎に且つ列毎にＳボックス保護マスクのマスク値を変化させることができ、サイドチャネル攻撃に有効な情報の漏洩を低減でき、安全性が高まる効果がある。
【０１６３】
また、各実施形態は、暗号処理を実行するデバイス、例えば暗号処理モジュールを持つＩＣカードあるいはその他の暗号処理装置に適用可能である。また、各実施形態の構成を適用することにより、電力解析によるＩＣモジュール内の暗号処理鍵やアルゴリズムの漏洩が困難となるので、セキュリティレベルの高い暗号処理実行機能を持つデバイスあるいは装置を提供することができる。
【０１６４】
なお、上記実施形態に記載した手法は、コンピュータに実行させることのできるプログラムとして、磁気ディスク（フロッピー（登録商標）ディスク、ハードディスクなど）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤなど）、光磁気ディスク（ＭＯ）、半導体メモリなどの記憶媒体に格納して頒布することもできる。
【０１６５】
また、この記憶媒体としては、プログラムを記憶でき、かつコンピュータが読み取り可能な記憶媒体であれば、その記憶形式は何れの形態であっても良い。
【０１６６】
また、記憶媒体からコンピュータにインストールされたプログラムの指示に基づきコンピュータ上で稼働しているＯＳ（オペレーティングシステム）や、データベース管理ソフト、ネットワークソフト等のＭＷ（ミドルウェア）等が上記実施形態を実現するための各処理の一部を実行しても良い。
【０１６７】
さらに、本発明における記憶媒体は、コンピュータと独立した媒体に限らず、ＬＡＮやインターネット等により伝送されたプログラムをダウンロードして記憶又は一時記憶した記憶媒体も含まれる。
【０１６８】
また、記憶媒体は１つに限らず、複数の媒体から上記実施形態における処理が実行される場合も本発明における記憶媒体に含まれ、媒体構成は何れの構成であっても良い。
【０１６９】
尚、本発明におけるコンピュータは、記憶媒体に記憶されたプログラムに基づき、上記実施形態における各処理を実行するものであって、パソコン等の１つからなる装置、複数の装置がネットワーク接続されたシステム等の何れの構成であっても良い。
【０１７０】
また、本発明におけるコンピュータとは、パソコンに限らず、情報処理機器に含まれる演算処理装置、マイコン等も含み、プログラムによって本発明の機能を実現することが可能な機器、装置を総称している。
【０１７１】
なお、本願発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。更に、異なる実施形態に亘る構成要素を適宜組合せてもよい。
【図面の簡単な説明】
【０１７２】
【図１】本発明の第１の実施形態に係る暗号処理装置の構成を示す模式図である。
【図２】同実施形態における動作を説明するためのフローチャートである。
【図３】同実施形態におけるマスク状態を示す図である。
【図４】同実施形態における動作を説明するためのフローチャートである。
【図５】同実施形態における動作を説明するためのフローチャートである。
【図６】同実施形態における動作を説明するためのフローチャートである。
【図７】同実施形態におけるマスク値の演算を説明するための模式図である。
【図８】本発明の第２の実施形態に係る暗号処理装置の動作を説明するためのフローチャートである。
【図９】同実施形態におけるマスク値の演算を説明するための模式図である。
【図１０】本発明の第３の実施形態に係る暗号処理装置のマスク状態を示す図である。
【図１１】本発明の第４の実施形態に係る暗号処理装置のマスク状態を示す図である。
【図１２】同実施形態におけるマスク値の演算を説明するための模式図である。
【図１３】同実施形態におけるマスク値の演算を説明するための模式図である。
【図１４】同実施形態における動作を説明するためのフローチャートである。
【図１５】本発明の第５の実施形態に係る暗号処理装置のマスク状態を示す図である。
【図１６】本発明の第６の実施形態に係る暗号処理装置のマスク状態を示す図である。
【図１７】同実施形態における暗号処理装置のマスク状態を示す図である。
【図１８】同実施形態における暗号処理装置のマスク値を示す図である。
【図１９】本発明の第７の実施形態に係る暗号処理装置のマスク値を示す図である。
【図２０】同実施形態における動作を説明するための模式図である。
【図２１】ＡＥＳ暗号方式における一般的な暗号処理を説明するためのフローチャートである。
【図２２】ＡＥＳ暗号方式における１２８ビット鍵の一般的な更新処理を説明するためのフローチャートである。
【図２３】ＡＥＳ暗号方式における１９２ビット鍵の一般的な更新処理を説明するためのフローチャートである。
【図２４】ＡＥＳ暗号方式における２５６ビット鍵の一般的な更新処理を説明するためのフローチャートである。
【図２５】ＡＥＳ暗号方式におけるマスキング法を用いた暗号処理を説明するためのフローチャートである。
【図２６】同マスキング法におけるマスク付Ｓボックス情報を説明するための模式図である。
【図２７】ＡＥＳ暗号方式のマスキング法による１２８ビット鍵の更新処理を説明するためのフローチャートである。
【図２８】ＡＥＳ暗号方式のマスキング法による１２８ビット鍵の更新処理を説明するためのフローチャートである。
【図２９】ＡＥＳ暗号方式のマスキング法による１９２ビット鍵の更新処理を説明するためのフローチャートである。
【図３０】ＡＥＳ暗号方式のマスキング法による２５６ビット鍵の更新処理を説明するためのフローチャートである。
【図３１】従来のマスキング法によるマスク付加後のラウンド鍵配列の状態を表す模式図である。
【符号の説明】
【０１７３】
１０…暗号処理装置、１…ＲＯＭ、２…ＲＡＭ、３…不揮発性メモリ、４…ＣＰＵ、５…入出力部、６…バス。
【図１】
2008233683.tif 000003
【図２】
2008233683.tif 000004
【図３】
2008233683.tif 000005
【図４】
2008233683.tif 000006
【図５】
2008233683.tif 000007
【図６】
2008233683.tif 000008
【図７】
2008233683.tif 000009
【図８】
2008233683.tif 000010
【図９】
2008233683.tif 000011
【図１０】
2008233683.tif 000012
【図１１】
2008233683.tif 000013
【図１２】
2008233683.tif 000014
【図１３】
2008233683.tif 000015
【図１４】
2008233683.tif 000016
【図１５】
2008233683.tif 000017
【図１６】
2008233683.tif 000018
【図１７】
2008233683.tif 000019
【図１８】
2008233683.tif 000020
【図１９】
2008233683.tif 000021
【図２０】
2008233683.tif 000022
【図２１】
2008233683.tif 000023
【図２２】
2008233683.tif 000024
【図２３】
2008233683.tif 000025
【図２４】
2008233683.tif 000026
【図２５】
2008233683.tif 000027
【図２６】
2008233683.tif 000028
【図２７】
2008233683.tif 000029
【図２８】
2008233683.tif 000030
【図２９】
2008233683.tif 000031
【図３０】
2008233683.tif 000032
【図３１】
2008233683.tif 000033