(57)【特許請求の範囲】
【請求項１】
処理対象データを保持するデータ保持部と、
マスクデータを保持するマスク保持部と、
前記マスク保持部に保持されたマスクデータに対して線形変換を行う第１線形変換部と、
前記マスク保持部に保持されたマスクデータに対して線形変換を行う第２線形変換部と、
前記データ保持部に保持された処理対象データと前記第１線形変換部により線形変換されたマスクデータである第１マスクデータとに基づいて第１データを算出する第１算出部と、
前記第１データと前記第２線形変換部により線形変換されたマスクデータである第２マスクデータのうち、いずれか一方を選択する選択部と、
前記選択部により選択された前記第１データまたは前記第２マスクデータに対して非線形変換を行う非線形変換部と、
前記非線形変換部により非線形変換された前記第１データと前記マスク保持部に保持されたマスクデータとに基づいて第２データを算出する第２算出部と、
前記第２データに対して線形変換を行う第３線形変換部と、を備え、
前記第３線形変換部により線形変換された前記第２データが新たな処理対象データとして前記データ保持部に保持され、
前記非線形変換部により非線形変換された前記第２マスクデータが新たなマスクデータとして前記マスク保持部に保持されることを特徴とする暗号処理装置。
【請求項２】
前記非線形変換回路は、暗号化処理における非線形変換を行う第１回路部と、復号処理における非線形変換を行う第２回路部と、が独立して動作する構成であることを特徴とする請求項１に記載の暗号処理装置。
【請求項３】
処理対象データを保持するデータ保持部と、
マスクデータを保持するマスク保持部と、
鍵データを保持する鍵保持部と、
前記マスク保持部に保持されたマスクデータに対して線形変換を行う第１線形変換部と、
前記マスク保持部に保持されたマスクデータに対して線形変換を行う第２線形変換部と、
前記データ保持部に保持された処理対象データと前記第１線形変換部により線形変換されたマスクデータである第１マスクデータとに基づいて第１データを算出する第１算出部と、
前記第１データに対して非線形変換を行う第１非線形変換部と、
前記第１非線形変換部により非線形変換された前記第１データと前記マスク保持部に保持されたマスクデータとに基づいて第２データを算出する第２算出部と、
前記第２データに対して線形変換を行う第３線形変換部と、
前記鍵保持部に保持された鍵データと前記第２線形変換部により線形変換されたマスクデータである第２マスクデータのうち、いずれか一方を選択する選択部と、
前記選択部により選択された前記鍵データまたは前記第２マスクデータに対して非線形変換を行う第２非線形変換部と、を備え、
前記第３線形変換部により線形変換された前記第２データが新たな処理対象データとして前記データ保持部に保持され、
前記第２非線形変換部により非線形変換された前記鍵データが新たな鍵データとして前記鍵保持部に保持され、
前記第２非線形変換部により非線形変換された前記第２マスクデータが新たなマスクデータとして前記マスク保持部に保持されることを特徴とする暗号処理装置。
【請求項４】
処理対象データを保持するデータ保持部と、
マスクデータを保持するマスク保持部と、
鍵データを保持する鍵保持部と、
前記マスク保持部に保持されたマスクデータに対して線形変換を行う第１線形変換部と、
前記マスク保持部に保持されたマスクデータに対して線形変換を行う第２線形変換部と、
前記データ保持部に保持された処理対象データと前記第１線形変換部により線形変換されたマスクデータである第１マスクデータとに基づいて第１データを算出する第１算出部と、
前記第１データと前記第２線形変換部により線形変換されたマスクデータである第２マスクデータのうち、いずれか一方を選択する第１選択部と、
前記第１選択部により選択された前記第１データまたは前記第２マスクデータに対して非線形変換を行う第１非線形変換部と、
前記第１非線形変換部により非線形変換された前記第１データと前記マスク保持部に保持されたマスクデータとに基づいて第２データを算出する第２算出部と、
前記第２データに対して線形変換を行う第３線形変換部と、
前記鍵保持部に保持された鍵データと前記第２マスクデータのうち、いずれか一方を選択する第２選択部と、
前記第２選択部により選択された前記鍵データまたは前記第２マスクデータに対して非線形変換を行う第２非線形変換部と、を備え、
前記第３線形変換部により線形変換された前記第２データが新たな処理対象データとして前記データ保持部に保持され、
前記第２非線形変換部により非線形変換された前記鍵データが新たな鍵データとして前記鍵保持部に保持され、
前記第１非線形変換部または前記第２非線形変換部により非線形変換された前記第２マスクデータが新たなマスクデータとして前記マスク保持部に保持されることを特徴とする暗号処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施の形態は、暗号化または復号を行う暗号処理装置に関する。
【背景技術】
【０００２】
暗号処理装置は、平文／暗号文を特定のアルゴリズムを用いて暗号化／復号する。暗号処理装置に対しては、動作中における電力や電磁波を測定するだけで内部秘密鍵を導き出すパッシブな攻撃であるＳＰＡ（Simple  Power  Analysis）やＤＰＡ（Differential  Power  Analysis）などのサイドチャネル攻撃が報告されている。サイドチャネル攻撃は、攻撃の痕跡が残らないため、対策技術が必要かつ重要である。
【０００３】
サイドチャネル攻撃は、暗号化処理や復号処理の演算中に測定することが可能な消費電力や電磁波と、推測する秘密鍵から計算することのできる中間データとの類似度が高い秘密鍵を導き出すことにより実現されている。このようなサイドチャネル攻撃に対する対策としては、乱数を用いて中間データをマスクすることによって中間データを攪乱し、類似度の高さ判定を困難にすることで、サイドチャネル攻撃を無効化するという手法が知られている。
【０００４】
上記のサイドチャネル攻撃に対する対策を組み込んだ従来の暗号処理装置は、暗号回路とは独立に、物理乱数生成回路や擬似乱数生成回路などの乱数生成回路を備える。このため、回路規模が大きくなり、また、消費電力も増大する傾向にある。例えばＩＣカードなどの小型、可搬型の機器に搭載される暗号処理装置では、回路規模や消費電力を可能な限り抑えることが要求されるため、回路規模や消費電力の増大を抑えながら、サイドチャネル攻撃を無効化できるようにすることが求められる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−１８９６５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明が解決しようとする課題は、回路規模や消費電力の増大を抑えながら、サイドチャネル攻撃を無効化できる暗号処理装置を提供することである。
【課題を解決するための手段】
【０００７】
実施形態の暗号処理装置は、データ保持部と、マスク保持部と、第１線形変換部と、第２線形変換部と、第１算出部と、選択部と、非線形変換部と、第２算出部と、第３線形変換部と、を備える。データ保持部は、処理対象データを保持する。マスク保持部は、マスクデータを保持する。第１線形変換部は、前記マスク保持部に保持されたマスクデータに対して線形変換を行う。第２線形変換部は、前記マスク保持部に保持されたマスクデータに対して線形変換を行う。第１算出部は、前記データ保持部に保持された処理対象データと前記第１線形変換部により線形変換されたマスクデータである第１マスクデータとに基づいて第１データを算出する。選択部は、前記第１データと前記第２線形変換部により線形変換されたマスクデータである第２マスクデータのうち、いずれか一方を選択する。非線形変換部は、前記選択部により選択された前記第１データまたは前記第２マスクデータに対して非線形変換を行う。第２算出部は、前記非線形変換部により非線形変換された前記第１データと前記マスク保持部に保持されたマスクデータとに基づいて第２データを算出する。第３線形変換部は、前記第２データに対して線形変換を行う。そして、前記第３線形変換部により線形変換された前記第２データが新たな処理対象データとして前記データ保持部に保持され、前記非線形変換部により非線形変換された前記第２マスクデータが新たなマスクデータとして前記マスク保持部に保持される。
【図面の簡単な説明】
【０００８】
【図１】一般的なブロック暗号方式の暗号処理装置をモデル化した回路図。
【図２】サイドチャネル対策を組み込んだ暗号処理装置の回路図。
【図３】実施形態の暗号処理装置の概要を示す回路図。
【図４】実施形態の線形変換回路の一例を示す図。
【図５】実施形態の暗号処理装置の処理を説明する図。
【図６】実施形態の暗号処理装置の変形例を示す回路図。
【図７】ＡＲＫの構成例を示す図。
【図８】Ｓの構成例を示す図。
【図９】ＳＲの構成例を示す図。
【図１０】ＭＣの構成例を示す図。
【図１１】第１実施例の暗号処理装置を示す回路図。
【図１２】第１実施例の暗号処理装置による暗号化処理を説明する図。
【図１３】第２実施例の暗号処理装置を示す回路図。
【図１４】Ｓ／ＩＳの構成例を示す図。
【図１５】第２実施例の暗号処理装置による暗号化処理を説明する図。
【図１６】第２実施例の暗号処理装置の変形例を示す回路図。
【図１７】第２実施例の暗号処理装置の変形例による暗号化処理を説明する図。
【図１８】第２実施例の暗号処理装置の他の変形例を示す回路図。
【図１９】第２実施例の暗号処理装置の他の変形例による暗号化処理を説明する図。
【発明を実施するための形態】
【０００９】
本実施形態の暗号処理装置は、ブロック暗号方式により暗号化／復号を行う暗号処理装置であり、特にサイドチャネル攻撃を無効化する対策（以下、サイドチャネル対策という。）が組み込まれた暗号処理装置である。
【００１０】
まず、暗号処理装置の脅威となるＤＰＡを例に、サイドチャネル攻撃の概要を説明する。ＤＰＡは、データ処理を行った回路の消費電力を測定することで秘密鍵を統計的に推測する攻撃である。攻撃者は次のような手順で攻撃を行う。
（１）推定した秘密鍵（推定鍵）を元に演算処理中データのハミング距離を予測する。
（２）測定した消費電力と予測演算処理中データのハミング距離の類似度を計算する。
（３）複数の消費電力に対し類似度が最も高い推定鍵を当たり鍵と判定する。
【００１１】
図１は、一般的なブロック暗号方式の暗号処理装置をモデル化した回路図である。暗号処理装置は、暗号化または復号の処理対象となるデータ（Ｄａｔａ）と秘密鍵である鍵データ（Ｋｅｙ）とを所定のデータブロック単位で入力し、データブロックごとに暗号化演算もしくは復号演算を行う。この暗号処理装置は、処理対象となるデータや中間データを格納するデータレジスタ１１と、鍵データや拡大鍵を格納する鍵レジスタ１２と、データスクランブル回路１３と、処理ラウンドごとに拡大鍵を生成する鍵更新部１４と、セレクタ１５，１６，１７と、排他的論理和回路１８と、を備える。セレクタ１７、鍵レジスタ１２、および鍵更新部１４を含むパスは、鍵スケジュール部とも呼ばれる。
【００１２】
データスクランブル回路１３は、非線形変換と線形変換との組み合わせによりデータを攪拌する。このデータスクランブル回路１３により攪拌され、拡大鍵との排他的論理和が行われたデータを中間データと呼ぶ。暗号処理装置は、データの攪拌と拡大鍵との排他的論理和を規定の処理ラウンド数分繰り返し、中間データを更新していくことで、データの暗号化や復号を行う。図１に示す例では、データスクランブル回路１３は、非線形変換回路Ａと線形変換回路Ｂとの組み合わせとしてモデル化されており、線形変換−（非線形変換・線形変換）×繰り返し回数、の処理を行う構成である。ただし、データスクランブル回路１３の構成は図１に示す構成に限定されるものではなく、線形変換と非線形変換との組み合わせによってデータを攪拌する構成であればよい。
【００１３】
本実施形態で扱うサイドチャネル対策は、乱数と中間データとの排他的論理和により演算中の中間データをマスクすることで、上記の（１）の予測を不能にする。一般的に、乱数は、暗号回路の外部にある乱数生成回路により生成され、暗号回路に入力される。
【００１４】
図２は、図１の回路図で示される一般的なブロック暗号方式の暗号処理装置に対して、上記のサイドチャネル対策を組み込んだ場合の一例を示す図である。この図２に示す暗号処理装置は、予めマスクされた状態のデータ（Ｄａｔａ＾Ｍａｓｋ）を入力データとし、この入力データが、そのままデータレジスタ１１に格納される。また、マスクされたデータとともに、データをマスクしているマスク値（Ｍａｓｋ）も入力される。入力されたマスク値は乱数レジスタ２１に格納され、入力データからマスクを剥がすための情報として利用される。なお、Ａ＾Ｂは、データＡとデータＢの排他的論理和などを意味し、データＡがデータＢによってマスクされた状態を表している。また、マスクを剥がすとは、Ａ＾ＢからデータＡを復元することを意味する。なお、図２の例では、予めマスクされたデータを入力データとしているが、マスクされていないデータを入力データとし、この入力データをデータレジスタ１１に格納される前にマスクする構成としてもよい。
【００１５】
図２に示す暗号処理装置では、最初にマスクされたデータとそのマスク値が入力された後は、暗号処理の１ラウンドを実行する基準となる１クロック（Ｃｌｏｃｋ）ごとに、外部の乱数生成回路（図示せず）により生成された乱数（Ｎｅｗ  Ｒａｎｄ）が暗号回路に入力される。１クロックごとに入力される乱数は、乱数レジスタ２１に格納される。また、乱数レジスタ２１から取り出した乱数（最初はマスク値）に対して、データスクランブル回路１３とは別に設けた線形変換回路Ｂ’において線形変換を行った結果であるＲｎｄ’が、乱数レジスタ２２に格納される。線形変換回路Ｂ’は、データスクランブル回路１３の線形変換回路Ｂと同じ内容の線形変換を行う。
【００１６】
サイドチャネル対策に用いられるマスク法は、排他的論理和によって施される加算マスクであり、乱数を用いてデータをマスクする。ただし、加算マスクは演算の特性上、非線形変換に対しては適用することができない。そのため、非線形変換の前段でマスクを剥がし、マスクが加算されていないデータに対して非線形変換を行い、非線形変換の後段でデータにマスクを加算する必要がある。
【００１７】
図２の例では、非線形変換回路Ａの前段に排他的論理和回路１９、非線形変換回路Ａの後段に排他的論理和回路２０が設けられる。そして、非線形変換回路Ａの出力であるＡ（Ｄａｔａ）を乱数ＲｎｄによりマスクしてデータＡ（Ｄａｔａ）＾Ｒｎｄとし、このＡ（Ｄａｔａ）＾Ｒｎｄに対して線形変換回路Ｂにより線形変換を行ってＢ（Ａ（Ｄａｔａ）＾Ｒｎｄ）とする。そして、このマスクされた状態のデータＢ（Ａ（Ｄａｔａ）＾Ｒｎｄ）と拡大鍵Ｋｅｙとの排他的論理和である中間データＢ（Ａ（Ｄａｔａ）＾Ｒｎｄ）＾Ｋｅｙをデータレジスタ１１に格納する。また、Ａ（Ｄａｔａ）をマスクするために利用した乱数Ｒｎｄを線形変換回路Ｂ’により線形変換してＢ’（Ｒｎｄ）＝Ｒｎｄ’とし、乱数レジスタ２２に格納する。
【００１８】
そして、次の処理ラウンドで、データレジスタ１１から取り出した中間データＢ（Ａ（Ｄａｔａ）＾Ｒｎｄ）＾Ｋｅｙを、乱数レジスタ２２から取り出したＲｎｄ’を用いてＢ（Ａ（Ｄａｔａ））＾Ｋｅｙに復元し、マスクを剥がした状態で非線形変換回路Ａに入力して非線形変換を行う。そして、非線形変換回路Ａの出力を、新たに外部から入力して乱数レジスタ２１に格納した乱数によりマスクし、線形変換回路Ｂにより線形変換を行った後に拡大鍵との排他的論理和を行ってデータレジスタ１１に格納する。以上の処理を、規定の処理ラウンド回数分繰り返す。
【００１９】
この図２の構成によれば、鍵に依存関係のあるデータが乱数によりマスクされた状態で演算が進むことになるため、秘密鍵の推定を不能にして、ＤＰＡ攻撃を無効化することができる。
【００２０】
上記のように、従来のサイドチャネル対策を組み込んだ暗号処理装置では、マスクに用いる乱数を処理ラウンド（１クロック）ごとに毎回外部から入力するようにしている。つまり、従来のサイドチャネル対策を組み込んだ暗号処理装置では、暗号回路のほかに、処理ラウンドごとに新たな乱数を生成する乱数生成回路が必要である。このため、回路規模が大きくなり、また、消費電力も増大する傾向にある。そこで、本実施形態の暗号処理装置では、入力データのマスク値を再利用して新たなマスク値（乱数）を生成する構成とし、処理ラウンドごとに外部から乱数を入力することなくサイドチャネル対策を行えるようにして、回路規模のコンパクト化や消費電力の低減を実現する。
【００２１】
乱数生成回路は、一般的に、線形変換回路（ビットごとの攪乱など）と非線形変換回路との組み合わせで構成される。本実施形態では、この乱数生成回路を構成する線形変換回路と非線形変換回路のうち、特に回路規模の多くを占める非線形変換回路に、暗号処理回路の非線形変換回路Ａを流用する。そして、非線形変換回路Ａの出力側でデータをマスクするための乱数、もしくは非線形変換回路Ａの入力側でデータのマスクを剥がすために用いる乱数に対して線形変換を行った後、非線形変換回路Ａによる非線形変換を行うことで新たな乱数を生成し、データをマスクするための乱数として再利用する。
【００２２】
図３は、本実施形態の暗号処理装置の概要を示す回路図である。本実施形態の暗号処理装置は、図３に示すように、図２に示した従来例の構成に対して、線形変換回路Ｃ、セレクタ３１およびセレクタ３２が付加されている。なお、図３に示す本実施形態の暗号処理装置において、図２に示した従来例と共通の構成要素に対しては同一の符号を付している。また、図３では、鍵スケジュール部の図示を省略している。図３に示す本実施形態の暗号処理装置は、データレジスタ１１（データ保持部）と、乱数レジスタ２１（マスク保持部）と、線形変換回路Ｂ’（第１線形変換部）と、線形変換回路Ｃ（第２線形変換部）と、排他的論理和回路１９（第１算出部）と、セレクタ３１（選択部）と、非線形変換回路Ａ（非線形変換部）と、排他的論理和回路２０（第２算出部）と、線形変換回路Ｂ（第３線形変換部）と、を備える。
【００２３】
本実施形態の暗号処理装置には、図２に示した従来例と同様、マスクされた状態のデータ（Ｄａｔａ＾Ｍａｓｋ）が入力されるとともに、そのマスク値（Ｍａｓｋ）が入力される。このときのマスク値は、実現するシステムによって異なり、システム時間を用いた値や、データが格納されるアドレスなど、固定値にならないことが望ましい。従来例では、このマスク値をデータのマスクにのみ利用し、その後は、処理ラウンドごとに外部の乱数生成回路で生成された乱数を入力して、中間データをマスクしていた。これに対して本実施形態では、入力されたマスク値を再利用することで処理ラウンドごとに新たな乱数となるマスク値（以下、中間マスク（ｍａｓｋ）という。）を暗号処理回路の内部で生成し、この中間マスクを用いて中間データをマスクする。
【００２４】
線形変換回路Ｃは、乱数レジスタ２１の後段に、線形変換回路Ｂ’と並列に設けられる。この線形変換回路Ｃは、適用される暗号アルゴリズムに応じて定められる非線形変換回路Ａの入出力ビット長よりも短い単位でデータをスクランブルする線形変換回路（線形変換関数）である。例えば、暗号アルゴリズムが１２８ｂｉｔ入出力のデータであり、非線形変換回路Ａが入出力ビット長８ｂｉｔの合計１６の非線形変換で構成される場合、線形変換回路Ｃは、バイト単位（８ｂｉｔ単位）でデータが影響を及ぼしあうような線形変換を行う。具体的には、線形変換回路Ｃは、例えば、図４に示すようなビット入れ替えを行う構成などが考えられる。また、線形変換回路Ｃは、クロックごとの定数加算などを行う構成であってもよい。
【００２５】
線形変換回路Ｃには、乱数レジスタ２１から取り出したマスク値もしくは中間マスクが入力される。線形変換回路Ｃは、入力したマスク値もしくは中間マスクに対して上記のような線形変換を行い、その結果をセレクタ３１に出力する。
【００２６】
セレクタ３１は、非線形変換回路Ａの前段に設けられ、データレジスタ１１から取り出されてマスクが剥がされたデータと、線形変換回路Ｃにより線形変換が行われたマスク値もしくは中間マスクのうち、非線形変換回路Ａに入力するデータの選択を行う。
【００２７】
セレクタ３２は、外部から入力されたマスク値と、このマスク値を再利用して内部で新たに生成された中間マスクのうち、乱数レジスタ２１に格納するデータの選択を行うセレクタである。
【００２８】
図３に示す本実施形態の暗号処理装置では、最初に、セレクタ１５に入力されたマスクされた状態のデータＤａｔａ＾Ｍａｓｋがデータレジスタ１１に格納されるとともに、セレクタ３２に入力されたマスク値Ｍａｓｋが乱数レジスタ２１に格納される。そして、データレジスタ１１から取り出されたマスクされた状態のデータＤａｔａ＾Ｍａｓｋは、非線形変換回路Ａをバイパスして線形変換回路Ｂに入力され、線形変換回路Ｂによる線形変換が行われる。そして、線形変換回路Ｂによる線形変換が行われたデータＢ（Ｄａｔａ＾Ｍａｓｋ）と、図示しない鍵スケジュール部で生成された拡大鍵Ｋｅｙとの排他的論理和である中間データＢ（Ｄａｔａ＾Ｍａｓｋ）＾Ｋｅｙが、データレジスタ１１に格納される。
【００２９】
一方、乱数レジスタ２１から取り出されたマスク値Ｍａｓｋは、線形変換回路Ｂ’による線形変換によりＢ’（Ｍａｓｋ）＝ｍａｓｋ’とされ、乱数レジスタ２２に格納される。また、乱数レジスタ２１から取り出されたマスク値Ｍａｓｋに対して、線形変換回路Ｃによる線形変換と非線形変換回路Ａによる非線形変換が行われることで、新たな乱数である中間マスクｍａｓｋ＝Ａ（Ｃ（Ｍａｓｋ））が生成される。生成された中間マスクｍａｓｋは、乱数レジスタ２１に格納される。
【００３０】
次に、データレジスタ１１から取り出された中間データＢ（Ｄａｔａ＾Ｍａｓｋ）＾Ｋｅｙと、乱数レジスタ２２から取り出されたｍａｓｋ’との排他的論理和により、中間データＢ（Ｄａｔａ＾Ｍａｓｋ）＾ＫｅｙのマスクＭａｓｋが剥がされて、中間データＢ（Ｄａｔａ）＾Ｋｅｙが復元される。そして、この中間データＢ（Ｄａｔａ）＾Ｋｅｙに対して、非線形変換回路Ａによる非線形変換が行われた後、乱数レジスタ２１から取り出された中間マスクｍａｓｋとの排他的論理和により中間データがマスクされ、線形変換部Ｂによる線形変換、拡大鍵Ｋｅｙとの排他的論理和が行われて、中間マスクｍａｓｋによりマスクされた中間データＢ（（Ｄａｔａ＾ｍａｓｋ）＾Ｋｅｙが、データレジスタ１１に格納される。
【００３１】
図５は、本実施形態の暗号処理装置の処理を説明する図であり、データレジスタ１１、乱数レジスタ２１、および乱数レジスタ２２に格納されるデータを、処理ラウンドの基準となるクロック（Ｃｌｏｃｋ）ごとに示したものである。なお、図５では、Ｃｌｏｃｋ＝１〜４までを例示しているが、実際には、適用する暗号アルゴリズムに応じて定められる規定の処理ラウンド数に対応するクロック数分の処理が行われる。
【００３２】
本実施形態の暗号処理装置では、図５に示すように、Ｃｌｏｃｋ＝１のとき、データレジスタ１１にはマスクされた状態のデータＤａｔａ＾Ｍａｓｋが格納され、乱数レジスタ２１にはデータのマスクに用いたマスク値Ｍａｓｋが格納されている。
【００３３】
また、Ｃｌｏｃｋ＝２のときには、データレジスタ１１にはマスク値Ｍａｓｋによりマスクされた中間データＢ（Ｄａｔａ＾Ｍａｓｋ）＾Ｋｅｙが格納され、乱数レジスタ２２にはマスク値Ｍａｓｋを線形変換回路Ｂ’により線形変換を行った結果であるｍａｓｋ’＝Ｂ（Ｍａｓｋ）が格納され、乱数レジスタ２１は、マスク値Ｍａｓｋが格納された状態を保持する。
【００３４】
また、Ｃｌｏｃｋ＝３のときには、データレジスタ１１は、マスク値Ｍａｓｋによりマスクされた中間データＢ（Ｄａｔａ＾Ｍａｓｋ）＾Ｋｅｙが格納された状態を保持し、乱数レジスタ２２は、マスク値Ｍａｓｋを線形変換回路Ｂ’により線形変換を行った結果であるｍａｓｋ’＝Ｂ（Ｍａｓｋ）が格納された状態を保持し、乱数レジスタ２１には、マスク値Ｍａｓｋに対して線形変換回路Ｃによる線形変換および非線形変換回路Ａによる非線形変換を行うことで生成された中間マスクｍａｓｋ＝Ａ（Ｃ（Ｍａｓｋ））が格納されている。
【００３５】
また、Ｃｌｏｃｋ＝４のときは、データレジスタ１１には中間マスクｍａｓｋによりマスクされた中間データＢ（Ｄａｔａ＾ｍａｓｋ）＾Ｋｅｙが格納され、乱数レジスタ２２には中間マスクｍａｓｋを線形変換回路Ｂ’により線形変換を行った結果であるｍａｓｋ’＝Ｂ（ｍａｓｋ）が格納され、乱数レジスタ２１は、中間マスクｍａｓｋが格納された状態を保持する。
【００３６】
このように、本実施形態の暗号処理装置では、データレジスタ１１に格納されるデータが、データのマスクに用いたマスク値（Ｍａｓｋ）、もしくはそのマスク値を再利用することで生成された中間マスク（ｍａｓｋ）により常にマスクされていることが分かる。したがって、本実施形態の暗号処理装置は、図２に示した従来例と同様に秘密鍵の推定を不能にし、ＤＰＡ攻撃を無効化することができる。
【００３７】
また、本実施形態の暗号処理装置では、データのマスクに用いたマスク値（Ｍａｓｋ）を再利用して中間マスク（ｍａｓｋ）を生成し、この中間マスク（ｍａｓｋ）を用いて中間データをマスクする構成であるため、処理ラウンドごとに外部の暗号回路の外部の乱数生成回路で生成された乱数を入力する必要がない。つまり、暗号回路のほかに乱数生成回路を実装する必要がない。また、中間マスク（ｍａｓｋ）の生成には、暗号回路の非線形変換回路Ａを流用している。このため、本実施形態の暗号処理装置は、回路規模をコンパクトにできるとともに消費電力の低減を図ることができる。
【００３８】
なお、以上説明した本実施形態の暗号処理装置は、乱数レジスタ２１から取り出したマスク値（Ｍａｓｋ）または中間マスク（ｍａｓｋ）に対して線形変換回路Ｃによる線形変換と非線形変換回路Ａによる非線形変換とを行うことで新たな中間マスク（ｍａｓｋ）を生成する構成である。ただし、図６に示すように、乱数レジスタ２２から取り出したｍａｓｋ’に対して線形変換回路Ｃによる線形変換と非線形変換回路Ａによる非線形変換とを行うことで新たな中間マスク（ｍａｓｋ）を生成する構成としてもよい。
【００３９】
また、以上説明した本実施形態の暗号処理装置は、中間マスク（ｍａｓｋ）を生成するための非線形変換として、非線形変換回路Ａを流用する構成である。ただし、図示しない鍵スケジュール部も、拡大鍵を生成する鍵更新部１４（図２参照）が非線形変換回路を備えているので、非線形変換回路Ａに代えて、もしくは非線形変換回路Ａとともに鍵更新部１４の非線形変換回路を用いて、中間マスク（ｍａｓｋ）を生成する構成としてもよい。
【００４０】
＜実施例＞
以下では、ブロック暗号としてＡＥＳ（Advance  Encryption  Standard）を用いるＡＥＳ暗号方式の暗号処理装置への適用例を、実施例として説明する。
【００４１】
ＡＥＳ暗号方式の暗号処理装置は、暗号化処理において使用する演算部として、鍵スケジュール部で生成された拡大鍵とデータとの排他的論理和を行うAdd  Round  Key（以下、「ＡＲＫ」と表記する。）と、８ビット単位に非線形変換を行うSubstitution  Bytes（以下、「ＳＢ」と表記する。）と、データのバイト単位に入れ替えを行うShift  Rows（以下、「ＳＲ」と表記する。）と、３２ビット内の８ビットごとに影響を及ぼしあう線形変換を行うMix  Columns（以下、「ＭＣ」と表記する。）と、を備える。
【００４２】
また、ＡＥＳ暗号方式の暗号処理装置は、復号処理において使用する演算部として、ＳＢの逆変換であるInverse  Substitution  Bytes（以下、「ＩＳ」と表記する。）と、ＳＲの逆変換であるInverse  Shift  Rows（以下、「ＩＳＲ」と表記する。）と、ＭＣの逆変換であるInverse  Mix  Columns（以下、「ＩＭＣ」と表記する。）と、を備える。ＡＲＫは、排他的論理和なので復号処理と暗号化処理との双方で使用され、同一の演算を行う。
【００４３】
図７は、ＡＲＫの構成例を示す図である。図７に示すように、ＡＲＫは、１２８ビットの拡大鍵と、１２８ビットの入力データとの排他的論理和である１２８ビットのデータを出力するビット毎の演算処理である。
【００４４】
図８は、Ｓの構成例を示す図である。図８に示すように、Ｓは、１２８ビットの入力データを１６個の８ビットデータに区切り、非線形変換テーブルＳによって行われる演算処理である。ＩＳは、図８に示すＳの逆変換になる非線形変換テーブルＩＳによって行われる演算処理となる。
【００４５】
図９は、ＳＲの構成例を示す図である。図９に示すように、ＳＲは、１２８ビットの入力データを１６個の８ビットデータに分割して並び替える。図９では、入力データを分割した各８ビットデータが、矢印の先で表された位置に並び替えられることが示されている。ＩＳＲは、図９に示すＳＲの逆変換になる入力データ入れ替え処理を行う構成である。
【００４６】
図１０は、ＭＣの構成例を示す図である。図１０に示すように、ＭＣは、１２８ビットの入力データを４個の３２ビットデータに分けて３２ビット単位に線形処理を行う演算処理である。ＩＭＣは、図１０に示すＭＣの逆変換を行う構成である。
【００４７】
（第１実施例）
図１１は、第１実施例の暗号処理装置を示す回路図である。第１実施例の暗号処理装置は、１２８ｂｉｔ入出力の構成であり、データ処理部１００と、マスク処理部２００と、鍵スケジュール部３００と、を備える。
【００４８】
データ処理部１００は、図１１に示すように、セレクタ１０１、データレジスタ１０２、排他的論理和回路１０３、セレクタ１０４、セレクタ１０５、Ｓ１０６、ＩＳ１０７、セレクタ１０８、排他的論理和回路１０９、ＡＲＫ１１０、セレクタ１１１、ＭＣ／ＩＭＣ１１２、セレクタ１１３、ＡＲＫ１１４、セレクタ１１５、ＳＲ１１６、ＩＳＲ１１７、およびセレクタ１１８を備える。
【００４９】
セレクタ１０１は、図３のセレクタ１５に相当する。データレジスタ１０２は、図３のデータレジスタ１１に相当する。排他的論理和回路１０３は、図３の排他的論理和回路１９に相当する。セレクタ１０４およびセレクタ１０５は、図３のセレクタ３１に相当する。Ｓ１０６およびＩＳ１０７は、図３の非線形変換回路Ａに相当する。排他的論理和回路１０９は、図３の排他的論理和回路２０に相当する。セレクタ１１３は、図３のセレクタ１６に相当する。ＭＣ／ＩＭＣ１１２、ＳＲ１１６、およびＩＳＲ１１７は、図３の線形変換回路Ｂに相当する。ＡＲＫ１１４およびＡＲＫ１１０は、図３の排他的論理和回路１８に相当する。
【００５０】
マスク処理部２００は、図１１に示すように、セレクタ２０１、乱数レジスタ２０２、線形変換回路Ｃ、セレクタ２０３、ＭＣ／ＩＭＣ２０４、セレクタ２０５、ＳＲ２０６、ＩＳＲ２０７、セレクタ２０８、および乱数レジスタ２０９を備える。
【００５１】
セレクタ２０１は、図３のセレクタ３２に相当する。乱数レジスタ２０２は、図３の乱数レジスタ２１に相当する。線形変換回路Ｃは、図３の線形変換回路Ｃに相当する。ＭＣ／ＩＭＣ２０４、ＳＲ２０６、およびＩＳＲ２０７は、図３の線形変換回路Ｂ’に相当する。乱数レジスタ２０９は、図３の乱数レジスタ２２に相当する。
【００５２】
鍵スケジュール部３００は、図１１に示すように、セレクタ３０１、鍵レジスタ３０２、および鍵更新部３０３を備える。鍵更新部３０３は、３２ビット単位に分割された１２８ビットの鍵データの最下位３２ビット（４バイト）に対してＦ変換（非線形変換Ｓと定数加算で構成される）を行う変換回路と、排他的論理和回路とを備える。この鍵スケジュール部３００では、クロックごとに変換回路によるＦ変換と排他的論理和により拡大鍵を生成し、データ処理部１００のＡＲＫ１１４またはＡＲＫ１１０に入力する。
【００５３】
第１実施例の暗号処理装置では、１２８ビットのマスクされたデータ（Ｄａｔａ＾Ｍａｓｋ）がセレクタ１０１に入力され、データレジスタ１０２に格納される。また、データのマスクに用いた１２８ビットのマスク値（Ｍａｓｋ）がセレクタ２０１に入力され、乱数レジスタ２０２に格納される。また、１２８ビットの鍵データ（Ｋｅｙ）がセレクタ３０１に入力され、鍵レジスタ３０２に格納される。そして、マスクされたデータ（Ｄａｔａ＾Ｍａｓｋ）に対して、以下の手順で暗号化処理を行う。
【００５４】
まず、１クロック目で、ＡＲＫ１１４→ＳＲ１１６のパスでデータが流れ、その結果がデータレジスタ１０２に格納される。このとき、ＡＲＫ１１４で使われる拡大鍵は、鍵スケジュール部３００により秘密鍵である鍵データを用いて生成される。
【００５５】
２クロック目から１０クロック目では、Ｓ１０６→ＭＣ／ＩＭＣ１１２→ＡＲＫ１１４→ＳＲ１１６のパスで中間データが流れ、その結果がデータレジスタ１０２に格納される。このとき、Ｓ１０６の前段の排他的論理和回路１０３で中間データのマスクが剥がされるとともに、Ｓ１０６の後段の排他的論理和回路１０９で中間マスクにより中間データがマスクされる。中間データのマスクに利用する中間マスクは、乱数レジスタ２０２から取り出されたマスク値もしくは中間マスクに対して、線形変換回路Ｃにより線形変換を行った後、暗号化処理には使用しないＩＳ１０７により非線形変換を行うことで生成される。また、中間データのマスクが剥がすためのデータは、乱数レジスタ２０２から取り出されたマスク値または中間マスクが、ＭＣ／ＩＭＣ２０４→ＳＲ２０６のパスを流れることで生成され、乱数レジスタ２０９に格納される。また、ＡＲＫ１１４で使われる拡大鍵は、鍵スケジュール部３００により秘密鍵である鍵データを用いて生成され、クロックごとに異なる値である。
【００５６】
最後に１１クロック目で、Ｓ１０６→ＡＲＫ１１０のパスで中間データが流れ、その結果が暗号文としてデータレジスタ１０２に格納される。このときも、Ｓ１０６の前段の排他的論理和回路１０３で中間データのマスクが剥がされるとともに、Ｓ１０６の後段の排他的論理和回路１０９で中間マスクにより中間データがマスクされる。また、ＡＲＫ１１０で使われる拡大鍵は、鍵スケジュール部３００により秘密鍵である鍵データを用いて生成される。
【００５７】
また、暗号文を復号する復号処理は、以下の手順で行われる。
【００５８】
まず、１クロック目で、ＡＲＫ１１４→ＩＳＲ１１７のパスで暗号文が流れ、その結果がデータレジスタ１０２に格納される。このとき、ＡＲＫ１１４で使われる拡大鍵は、鍵スケジュール部３００により秘密鍵である鍵データを用いて生成される。
【００５９】
次に、２クロック目から１０クロック目で、ＩＳ１０７→ＡＲＫ１１０→ＭＣ／ＩＭＣ１１２→ＩＳＲ１１７のパスで中間データが流れ、その結果がデータレジスタ１０２に格納される。このとき、ＩＳ１０７の前段の排他的論理和回路１０３で中間データのマスクが剥がされるとともに、ＩＳ１０７の後段の排他的論理和回路１０９で中間マスクにより中間データがマスクされる。中間データのマスクに利用する中間マスクは、乱数レジスタ２０２から取り出されたマスク値もしくは中間マスクに対して、線形変換回路Ｃにより線形変換を行った後、復号処理には使用しないＳ１０６により非線形変換を行うことで生成される。また、中間データのマスクが剥がすためのデータは、乱数レジスタ２０２から取り出されたマスク値または中間マスクが、ＭＣ／ＩＭＣ２０４→ＩＳＲ２０７のパスを流れることで生成され、乱数レジスタ２０９に格納される。また、ＡＲＫ１１０で使われる拡大鍵は、鍵スケジュール部３００により秘密鍵である鍵データを用いて生成され、クロックごとに異なる値である。
【００６０】
最後に１１クロック目で、ＩＳ１０７→ＡＲＫ１１０のパスで中間データが流れ、その結果が平文としてデータレジスタ１０２に格納される。このときも、ＩＳ１０７の前段の排他的論理和回路１０３で中間データのマスクが剥がされるとともに、ＩＳ１０７の後段の排他的論理和回路１０９で中間マスクにより中間データがマスクされる。また、ＡＲＫ１１０で使われる拡大鍵は、鍵スケジュール部３００により秘密鍵である鍵データを用いて生成される。
【００６１】
図１２は、第１実施例の暗号処理装置による暗号化処理を説明する図であり、データレジスタ１０２、乱数レジスタ２０２、および乱数レジスタ２０９に格納されるデータと、データレジスタ１０２に格納されたデータに対して行われる処理内容とを、処理ラウンドの基準となるクロック数（Ｃｌｏｃｋ）ごとに示したものである。
【００６２】
第１実施例の暗号処理装置では、図１２に示すように、Ｃｌｏｃｋ＝０のとき、データレジスタ１０２にはマスクされた状態のデータＤａｔａ＾Ｍａｓｋが格納され、乱数レジスタ２０２にはデータのマスクに用いたマスク値Ｍａｓｋが格納されている。そして、データレジスタ１０２からマスクされた状態のデータＤａｔａ＾Ｍａｓｋが取り出され、ＡＲＫ１１４による演算およびＳＲ１１６による演算が行われ、演算結果の中間データｄａｔａ１＝ＳＲ（Ｄａｔａ＾Ｍａｓｋ＾Ｋｅｙ０）がデータレジスタ１０２に格納される。また、乱数レジスタ２０２からマスク値Ｍａｓｋが取り出され、ＳＲ２０６による演算が行われ、演算結果のデータ、つまり中間データｄａｔａ１からマスクＭａｓｋを剥がすためのデータＭａｓｋ’＝ＳＲ（Ｍａｓｋ）が乱数レジスタ２０９に格納される。さらに、乱数レジスタ２０２から取り出されたマスク値Ｍａｓｋに対しては、線形変換回路Ｃによる線形変換およびＩＳ１０７による非線形変換が行われ、その結果の中間マスクｍａｓｋ１＝ＩＳ（Ｃ（Ｍａｓｋ））が乱数レジスタ２０２に格納される。
【００６３】
Ｃｌｏｃｋ＝１のときには、データレジスタ１０２には中間データｄａｔａ１が格納され、乱数レジスタ２０２には中間マスクｍａｓｋ１が格納され、乱数レジスタ２０９にはマスクＭａｓｋを剥がすためのデータＭａｓｋ’が格納されている。そして、データレジスタ１０２から中間データｄａｔａ１が取り出されるとともに、乱数レジスタ２０９からマスクＭａｓｋを剥がすためのデータＭａｓｋ’、乱数レジスタ２０２から中間マスクｍａｓｋ１が取り出される。そして、データレジスタ１０２から取り出された中間データｄａｔａ１に対して、Ｓ１０６による演算と、ＭＣ／ＩＭＣ１１２によるＭＣの演算と、ＡＲＫ１１４による演算と、ＳＲ１１６による演算とが行われ、演算結果の中間データｄａｔａ２＝ＳＲ（ＭＣ（Ｓ（ｄａｔａ１＾Ｍａｓｋ’）＾ｍａｓｋ１）＾ｋｅｙ１）がデータレジスタ１０２に格納される。このとき、乱数レジスタ２０９から取り出されたマスクＭａｓｋを剥がすためのデータＭａｓｋ’と、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ１とを用いて、中間データｄａｔａ１に対して、Ｓ１０６の前後でマスクの付け替えが行われる。また、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ１に対しては、ＭＣ／ＩＭＣ２０４によるＭＣの演算と、ＳＲ２０６による演算とが行われ、演算結果のデータ、つまり中間データｄａｔａ２から中間マスクｍａｓｋ１を剥がすためのデータＭａｓｋ１’＝ＳＲ（ＭＣ（ｍａｓｋ１））が乱数レジスタ２０９に格納されるとともに、線形変換回路Ｃによる線形変換およびＩＳ１０７による非線形変換が行われ、その結果の中間マスクｍａｓｋ２＝ＩＳ（Ｃ（ｍａｓｋ１））が乱数レジスタ２０２に格納される。
【００６４】
Ｃｌｏｃｋ＝２のときには、データレジスタ１０２には中間データｄａｔａ２が格納され、乱数レジスタ２０２には中間マスクｍａｓｋ２が格納され、乱数レジスタ２０９には中間マスクｍａｓｋ１を剥がすためのデータＭａｓｋ１’が格納されている。そして、データレジスタ１０２から中間データｄａｔａ２が取り出されるとともに、乱数レジスタ２０９から中間マスクｍａｓｋ１を剥がすためのデータＭａｓｋ１’、乱数レジスタ２０２から中間マスクｍａｓｋ２が取り出される。そして、データレジスタ１０２から取り出された中間データｄａｔａ２に対して、Ｓ１０６による演算と、ＭＣ／ＩＭＣ１１２によるＭＣの演算と、ＡＲＫ１１４による演算と、ＳＲ１１６による演算とが行われ、演算結果の中間データｄａｔａ３＝ＳＲ（ＭＣ（Ｓ（ｄａｔａ２＾Ｍａｓｋ１’）＾ｍａｓｋ２）＾ｋｅｙ２）がデータレジスタ１０２に格納される。このとき、乱数レジスタ２０９から取り出された中間マスクｍａｓｋ１を剥がすためのデータＭａｓｋ１’と、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ２とを用いて、中間データｄａｔａ２に対して、Ｓ１０６の前後でマスクの付け替えが行われる。また、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ２に対しては、ＭＣ／ＩＭＣ２０４によるＭＣの演算と、ＳＲ２０６による演算とが行われ、演算結果のデータ、つまり中間データｄａｔａ３から中間マスクｍａｓｋ２を剥がすためのデータＭａｓｋ２’＝ＳＲ（ＭＣ（ｍａｓｋ２））が乱数レジスタ２０９に格納されるとともに、線形変換回路Ｃによる線形変換およびＩＳ１０７による非線形変換が行われ、その結果の中間マスクｍａｓｋ３＝ＩＳ（Ｃ（ｍａｓｋ２））が乱数レジスタ２０２に格納される。
【００６５】
Ｃｌｏｃｋ＝３のときには、データレジスタ１０２には中間データｄａｔａ３が格納され、乱数レジスタ２０２には中間マスクｍａｓｋ３が格納され、乱数レジスタ２０９には中間マスクｍａｓｋ２を剥がすためのデータＭａｓｋ２’が格納されている。そして、データレジスタ１０２から中間データｄａｔａ３が取り出されるとともに、乱数レジスタ２０９から中間マスクｍａｓｋ２を剥がすためのデータＭａｓｋ２’、乱数レジスタ２０２から中間マスクｍａｓｋ３が取り出される。そして、データレジスタ１０２から取り出された中間データｄａｔａ３に対して、Ｓ１０６による演算と、ＭＣ／ＩＭＣ１１２によるＭＣの演算と、ＡＲＫ１１４による演算と、ＳＲ１１６による演算とが行われ、演算結果の中間データｄａｔａ４＝ＳＲ（ＭＣ（Ｓ（ｄａｔａ３＾Ｍａｓｋ２’）＾ｍａｓｋ３）＾ｋｅｙ３）がデータレジスタ１０２に格納される。このとき、乱数レジスタ２０９から取り出された中間マスクｍａｓｋ２を剥がすためのデータＭａｓｋ２’と、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ３とを用いて、中間データｄａｔａ３に対して、Ｓ１０６の前後でマスクの付け替えが行われる。また、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ３に対しては、ＭＣ／ＩＭＣ２０４によるＭＣの演算と、ＳＲ２０６による演算とが行われ、演算結果のデータ、つまり中間データｄａｔａ４から中間マスクｍａｓｋ３を剥がすためのデータＭａｓｋ３’＝ＳＲ（ＭＣ（ｍａｓｋ３））が乱数レジスタ２０９に格納されるとともに、線形変換回路Ｃによる線形変換およびＩＳ１０７による非線形変換が行われ、その結果の中間マスクｍａｓｋ４＝ＩＳ（Ｃ（ｍａｓｋ３））が乱数レジスタ２０２に格納される。
【００６６】
Ｃｌｏｃｋ＝４のときには、データレジスタ１０２には中間データｄａｔａ４が格納され、乱数レジスタ２０２には中間マスクｍａｓｋ４が格納され、乱数レジスタ２０９には中間マスクｍａｓｋ３を剥がすためのデータＭａｓｋ３’が格納されている。そして、データレジスタ１０２から中間データｄａｔａ４が取り出されるとともに、乱数レジスタ２０９から中間マスクｍａｓｋ３を剥がすためのデータＭａｓｋ３’、乱数レジスタ２０２から中間マスクｍａｓｋ４が取り出される。そして、データレジスタ１０２から取り出された中間データｄａｔａ４に対して、Ｓ１０６による演算と、ＭＣ／ＩＭＣ１１２によるＭＣの演算と、ＡＲＫ１１４による演算と、ＳＲ１１６による演算とが行われ、演算結果の中間データｄａｔａ５＝ＳＲ（ＭＣ（Ｓ（ｄａｔａ４＾Ｍａｓｋ３’）＾ｍａｓｋ４）＾ｋｅｙ４）がデータレジスタ１０２に格納される。このとき、乱数レジスタ２０９から取り出された中間マスクｍａｓｋ３を剥がすためのデータＭａｓｋ３’と、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ４とを用いて、中間データｄａｔａ４に対して、Ｓ１０６の前後でマスクの付け替えが行われる。また、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ４に対しては、ＭＣ／ＩＭＣ２０４によるＭＣの演算と、ＳＲ２０６による演算とが行われ、演算結果のデータ、つまり中間データｄａｔａ５から中間マスクｍａｓｋ４を剥がすためのデータＭａｓｋ４’＝ＳＲ（ＭＣ（ｍａｓｋ４））が乱数レジスタ２０９に格納されるとともに、線形変換回路Ｃによる線形変換およびＩＳ１０７による非線形変換が行われ、その結果の中間マスクｍａｓｋ５＝ＩＳ（Ｃ（ｍａｓｋ４））が乱数レジスタ２０２に格納される。
【００６７】
Ｃｌｏｃｋ＝５のときには、データレジスタ１０２には中間データｄａｔａ５が格納され、乱数レジスタ２０２には中間マスクｍａｓｋ５が格納され、乱数レジスタ２０９には中間マスクｍａｓｋ４を剥がすためのデータＭａｓｋ４’が格納されている。そして、データレジスタ１０２から中間データｄａｔａ５が取り出されるとともに、乱数レジスタ２０９から中間マスクｍａｓｋ４を剥がすためのデータＭａｓｋ４’、乱数レジスタ２０２から中間マスクｍａｓｋ５が取り出される。そして、データレジスタ１０２から取り出された中間データｄａｔａ５に対して、Ｓ１０６による演算と、ＭＣ／ＩＭＣ１１２によるＭＣの演算と、ＡＲＫ１１４による演算と、ＳＲ１１６による演算とが行われ、演算結果の中間データｄａｔａ６＝ＳＲ（ＭＣ（Ｓ（ｄａｔａ５＾Ｍａｓｋ４’）＾ｍａｓｋ５）＾ｋｅｙ５）がデータレジスタ１０２に格納される。このとき、乱数レジスタ２０９から取り出された中間マスクｍａｓｋ４を剥がすためのデータＭａｓｋ４’と、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ５とを用いて、中間データｄａｔａ５に対して、Ｓ１０６の前後でマスクの付け替えが行われる。また、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ５に対しては、ＭＣ／ＩＭＣ２０４によるＭＣの演算と、ＳＲ２０６による演算とが行われ、演算結果のデータ、つまり中間データｄａｔａ６から中間マスクｍａｓｋ５を剥がすためのデータＭａｓｋ５’＝ＳＲ（ＭＣ（ｍａｓｋ５））が乱数レジスタ２０９に格納されるとともに、線形変換回路Ｃによる線形変換およびＩＳ１０７による非線形変換が行われ、その結果の中間マスクｍａｓｋ６＝ＩＳ（Ｃ（ｍａｓｋ５））が乱数レジスタ２０２に格納される。
【００６８】
Ｃｌｏｃｋ＝６のときには、データレジスタ１０２には中間データｄａｔａ６が格納され、乱数レジスタ２０２には中間マスクｍａｓｋ６が格納され、乱数レジスタ２０９には中間マスクｍａｓｋ５を剥がすためのデータＭａｓｋ５’が格納されている。そして、データレジスタ１０２から中間データｄａｔａ６が取り出されるとともに、乱数レジスタ２０９から中間マスクｍａｓｋ５を剥がすためのデータＭａｓｋ５’、乱数レジスタ２０２から中間マスクｍａｓｋ６が取り出される。そして、データレジスタ１０２から取り出された中間データｄａｔａ６に対して、Ｓ１０６による演算と、ＭＣ／ＩＭＣ１１２によるＭＣの演算と、ＡＲＫ１１４による演算と、ＳＲ１１６による演算とが行われ、演算結果の中間データｄａｔａ７＝ＳＲ（ＭＣ（Ｓ（ｄａｔａ６＾Ｍａｓｋ５’）＾ｍａｓｋ６）＾ｋｅｙ６）がデータレジスタ１０２に格納される。このとき、乱数レジスタ２０９から取り出された中間マスクｍａｓｋ５を剥がすためのデータＭａｓｋ５’と、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ６とを用いて、中間データｄａｔａ６に対して、Ｓ１０６の前後でマスクの付け替えが行われる。また、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ６に対しては、ＭＣ／ＩＭＣ２０４によるＭＣの演算と、ＳＲ２０６による演算とが行われ、演算結果のデータ、つまり中間データｄａｔａ７から中間マスクｍａｓｋ６を剥がすためのデータＭａｓｋ６’＝ＳＲ（ＭＣ（ｍａｓｋ６））が乱数レジスタ２０９に格納されるとともに、線形変換回路Ｃによる線形変換およびＩＳ１０７による非線形変換が行われ、その結果の中間マスクｍａｓｋ７＝ＩＳ（Ｃ（ｍａｓｋ６））が乱数レジスタ２０２に格納される。
【００６９】
Ｃｌｏｃｋ＝７のときには、データレジスタ１０２には中間データｄａｔａ７が格納され、乱数レジスタ２０２には中間マスクｍａｓｋ７が格納され、乱数レジスタ２０９には中間マスクｍａｓｋ６を剥がすためのデータＭａｓｋ６’が格納されている。そして、データレジスタ１０２から中間データｄａｔａ７が取り出されるとともに、乱数レジスタ２０９から中間マスクｍａｓｋ６を剥がすためのデータＭａｓｋ６’、乱数レジスタ２０２から中間マスクｍａｓｋ７が取り出される。そして、データレジスタ１０２から取り出された中間データｄａｔａ７に対して、Ｓ１０６による演算と、ＭＣ／ＩＭＣ１１２によるＭＣの演算と、ＡＲＫ１１４による演算と、ＳＲ１１６による演算とが行われ、演算結果の中間データｄａｔａ８＝ＳＲ（ＭＣ（Ｓ（ｄａｔａ７＾Ｍａｓｋ６’）＾ｍａｓｋ７）＾ｋｅｙ７）がデータレジスタ１０２に格納される。このとき、乱数レジスタ２０９から取り出された中間マスクｍａｓｋ６を剥がすためのデータＭａｓｋ６’と、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ７とを用いて、中間データｄａｔａ７に対して、Ｓ１０６の前後でマスクの付け替えが行われる。また、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ７に対しては、ＭＣ／ＩＭＣ２０４によるＭＣの演算と、ＳＲ２０６による演算とが行われ、演算結果のデータ、つまり中間データｄａｔａ８から中間マスクｍａｓｋ７を剥がすためのデータＭａｓｋ７’＝ＳＲ（ＭＣ（ｍａｓｋ７））が乱数レジスタ２０９に格納されるとともに、線形変換回路Ｃによる線形変換およびＩＳ１０７による非線形変換が行われ、その結果の中間マスクｍａｓｋ８＝ＩＳ（Ｃ（ｍａｓｋ７））が乱数レジスタ２０２に格納される。
【００７０】
Ｃｌｏｃｋ＝８のときには、データレジスタ１０２には中間データｄａｔａ８が格納され、乱数レジスタ２０２には中間マスクｍａｓｋ８が格納され、乱数レジスタ２０９には中間マスクｍａｓｋ７を剥がすためのデータＭａｓｋ７’が格納されている。そして、データレジスタ１０２から中間データｄａｔａ８が取り出されるとともに、乱数レジスタ２０９から中間マスクｍａｓｋ７を剥がすためのデータＭａｓｋ７’、乱数レジスタ２０２から中間マスクｍａｓｋ８が取り出される。そして、データレジスタ１０２から取り出された中間データｄａｔａ８に対して、Ｓ１０６による演算と、ＭＣ／ＩＭＣ１１２によるＭＣの演算と、ＡＲＫ１１４による演算と、ＳＲ１１６による演算とが行われ、演算結果の中間データｄａｔａ９＝ＳＲ（ＭＣ（Ｓ（ｄａｔａ８＾Ｍａｓｋ７’）＾ｍａｓｋ８）＾ｋｅｙ８）がデータレジスタ１０２に格納される。このとき、乱数レジスタ２０９から取り出された中間マスクｍａｓｋ７を剥がすためのデータＭａｓｋ７’と、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ８とを用いて、中間データｄａｔａ８に対して、Ｓ１０６の前後でマスクの付け替えが行われる。また、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ８に対しては、ＭＣ／ＩＭＣ２０４によるＭＣの演算と、ＳＲ２０６による演算とが行われ、演算結果のデータ、つまり中間データｄａｔａ９から中間マスクｍａｓｋ８を剥がすためのデータＭａｓｋ８’＝ＳＲ（ＭＣ（ｍａｓｋ８））が乱数レジスタ２０９に格納されるとともに、線形変換回路Ｃによる線形変換およびＩＳ１０７による非線形変換が行われ、その結果の中間マスクｍａｓｋ９＝ＩＳ（Ｃ（ｍａｓｋ８））が乱数レジスタ２０２に格納される。
【００７１】
Ｃｌｏｃｋ＝９のときには、データレジスタ１０２には中間データｄａｔａ９が格納され、乱数レジスタ２０２には中間マスクｍａｓｋ９が格納され、乱数レジスタ２０９には中間マスクｍａｓｋ８を剥がすためのデータＭａｓｋ８’が格納されている。そして、データレジスタ１０２から中間データｄａｔａ９が取り出されるとともに、乱数レジスタ２０９から中間マスクｍａｓｋ８を剥がすためのデータＭａｓｋ８’、乱数レジスタ２０２から中間マスクｍａｓｋ９が取り出される。そして、データレジスタ１０２から取り出された中間データｄａｔａ９に対して、Ｓ１０６による演算と、ＭＣ／ＩＭＣ１１２によるＭＣの演算と、ＡＲＫ１１４による演算と、ＳＲ１１６による演算とが行われ、演算結果の中間データｄａｔａ１０＝ＳＲ（ＭＣ（Ｓ（ｄａｔａ９＾Ｍａｓｋ８’）＾ｍａｓｋ９）＾ｋｅｙ９）がデータレジスタ１０２に格納される。このとき、乱数レジスタ２０９から取り出された中間マスクｍａｓｋ８を剥がすためのデータＭａｓｋ８’と、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ９とを用いて、中間データｄａｔａ９に対して、Ｓ１０６の前後でマスクの付け替えが行われる。また、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ９に対しては、ＭＣ／ＩＭＣ２０４によるＭＣの演算と、ＳＲ２０６による演算とが行われ、演算結果のデータ、つまり中間データｄａｔａ１０から中間マスクｍａｓｋ９を剥がすためのデータＭａｓｋ９’＝ＳＲ（ＭＣ（ｍａｓｋ９））が乱数レジスタ２０９に格納されるとともに、線形変換回路Ｃによる線形変換およびＩＳ１０７による非線形変換が行われ、その結果の中間マスクｍａｓｋ１０＝ＩＳ（Ｃ（ｍａｓｋ９））が乱数レジスタ２０２に格納される。
【００７２】
Ｃｌｏｃｋ＝１０のときには、データレジスタ１０２には中間データｄａｔａ１０が格納され、乱数レジスタ２０２には中間マスクｍａｓｋ１０が格納され、乱数レジスタ２０９には中間マスクｍａｓｋ９を剥がすためのデータＭａｓｋ９’が格納されている。そして、データレジスタ１０２から中間データｄａｔａ１０が取り出されるとともに、乱数レジスタ２０９から中間マスクｍａｓｋ９を剥がすためのデータＭａｓｋ９’、乱数レジスタ２０２から中間マスクｍａｓｋ１０が取り出される。そして、データレジスタ１０２から取り出された中間データｄａｔａ１０に対して、Ｓ１０６による演算およびＡＲＫ１１０による演算が行われ、演算結果の暗号文ｄａｔａ１１＝（Ｓ（ｄａｔａ１０＾Ｍａｓｋ９’）＾ｍａｓｋ１０）＾ｋｅｙ１０がデータレジスタ１０２に格納される。このとき、乱数レジスタ２０９から取り出された中間マスクｍａｓｋ９を剥がすためのデータＭａｓｋ９’と、乱数レジスタ２０２から取り出された中間マスクｍａｓｋ１０とを用いて、中間データｄａｔａ１０に対して、Ｓ１０６の前後でマスクの付け替えが行われる。
【００７３】
以上のように、第１実施例の暗号処理装置では、データレジスタ１０２に格納されるデータが、マスク値（Ｍａｓｋ）や中間マスク（ｍａｓｋ）により常にマスクされるので、秘密鍵の推定を不能にしてＤＰＡ攻撃を無効化することができる。また、中間マスクは、暗号回路のＳ１０６あるいはＩＳ１０７を流用し、マスク値を再利用することで生成されるので、暗号回路のほかに乱数生成回路を実装する必要がなく、回路規模をコンパクトにできるとともに消費電力の低減を図ることができる。
【００７４】
また、第１実施例の暗号処理装置では、暗号化処理の際には暗号化に使用しないＩＳ１０７を使用して中間マスクを生成し、復号処理の際には復号に使用しないＳ１０６を使用して中間マスクを生成する。このため、暗号化や復号のための演算と中間マスクの生成とを同一クロックで行うことができ、レイテンシの増大を抑制することができる。
【００７５】
（第２実施例）
第２実施例は、１２８ビット単位のデータブロックを３２ビットずつ順次処理することで、回路規模をコンパクトにする構成の暗号処理装置への適用例である。図１３は、第２実施例の暗号処理装置を示す回路図である。第２実施例の暗号処理装置は、データ処理部４００と、マスク処理部５００と、鍵スケジュール部６００と、を備える。
【００７６】
データ処理部４００は、図１３に示すように、セレクタ４０１ａ〜４０１ｄ、データレジスタｄ０〜ｄ３、排他的論理和回路４０２、セレクタ４０３、Ｓ／ＩＳ４０４、排他的論理和回路４０５、ＡＲＫ４０６、セレクタ４０７、ＭＣ／ＩＭＣ４０８、セレクタ４０９、ＡＲＫ４１０、およびセレクタ４１１を備える。なお、ＳＲとＩＳＲは１２８ビット単位のデータブロック全体に対して同一クロックで行われるバイト単位の置換演算であり、セレクタのみの表現となるため、図示を省略している。
【００７７】
Ｓ／ＩＳ４０４は、暗号化に用いるＳと復号に用いるＩＳとを共通化した回路であり、図１４に示すように、非線形変換である逆元演算ＩＧＦと、線形変換であるアフィン変換Ａおよびインバースアフィン変換ＩＡとにより構成される。
【００７８】
セレクタ４０１ａ〜４０１ｄは、図３のセレクタ１５に相当する。データレジスタｄ０〜ｄ３は、図３のデータレジスタ１１に相当する。排他的論理和回路４０２は、図３の排他的論理和回路１９に相当する。セレクタ４０３は、図３のセレクタ３１に相当する。Ｓ／ＩＳ４０４は、図３の非線形変換回路Ａに相当する。排他的論理和回路４０５は、図３の排他的論理和回路２０に相当する。セレクタ４０９は、図３のセレクタ１６に相当する。ＭＣ／ＩＭＣ４０８は、図３の線形変換回路Ｂに相当する。ＡＲＫ４１０およびＡＲＫ４０６は、図３の排他的論理和回路１８に相当する。
【００７９】
マスク処理部５００は、図１３に示すように、セレクタ５０１、乱数レジスタｒ０〜ｒ４、線形変換回路Ｃ、ＭＣ／ＩＭＣ５０２、およびセレクタ５０３を備える。なお、ＳＲとＩＳＲは１２８ビット単位のマスクに対して同一クロックで行われるバイト単位の置換演算であり、セレクタのみの表現となるため、図示を省略している。
【００８０】
セレクタ５０１は、図３のセレクタ３２に相当する。乱数レジスタｒ４は、図３の乱数レジスタ２１に相当する。乱数レジスタｒ０〜ｒ３は、図３の乱数レジスタ２２に相当する。線形変換回路Ｃは、図３の線形変換回路Ｃに相当する。ＭＣ／ＩＭＣ５０２は、図３の線形変換回路Ｂ’に相当する。
【００８１】
鍵スケジュール部６００は、図１３に示すように、セレクタ６０１、鍵レジスタ６０２、および鍵更新部６０３を備える。鍵更新部６０３は、３２ビットの非線形変換Ｓを含む変換回路（以下、ｓｂｏｘ＋αという。）を備え、このｓｂｏｘ＋αの前段にセレクタ６０４が設けられている。この鍵スケジュール部６００では、５クロックに１回ずつ拡大鍵を生成し、データ処理部４００のＡＲＫ４１０またはＡＲＫ４０６に入力する。
【００８２】
第２実施例の暗号処理装置では、１２８ビットのデータ（Ｄａｔａ）が３２ビットごとに分割され、最上位の３２ビットから順にセレクタ４０１ｄ、セレクタ４０１ｃ、セレクタ４０１ｂ、セレクタ４０１ａにそれぞれ入力される。セレクタ４０１ｄに入力されたデータはデータレジスタｄ３に格納され、セレクタ４０１ｃに入力されたデータはデータレジスタｄ２に格納され、セレクタ４０１ｂに入力されたデータはデータレジスタｄ１に格納され、セレクタ４０１ａに入力されたデータはデータレジスタｄ０に格納される。また、３２ビットのマスク値（Ｍａｓｋ）がセレクタ５０１に格納され、乱数レジスタｒ４に格納される。そして、データ（Ｄａｔａ）に対して、以下の手順で暗号化処理を行う。
【００８３】
まず、１クロック目で、データレジスタｄ３から取り出された最上位３２ビットのデータがＡＲＫ４１０を流れ、ＡＲＫが行われた最上位３２ビットのデータがデータレジスタｄ０に格納される。このとき、データレジスタｄ２、データレジスタｄ１、およびデータレジスタｄ０に格納されていた３２ビットのデータは、それぞれデータレジスタｄ３、データレジスタｄ２、およびデータレジスタｄ１へとシフトして格納される。また、２クロック目から４クロック目までは１クロック目と同様の処理が行われ、１２８ビットのデータ（Ｄａｔａ）に対して、３２ビット単位でＡＲＫが順次行われる。そして、次の５クロック目で、ＡＲＫが１回行われた１２８ビットのデータの全体に対してＳＲが行われる。
【００８４】
一方、マスク処理部５００では、１クロック目から４クロック目にかけて、乱数レジスタｒ４に格納された３２ビットのマスク値が乱数レジスタｒ０〜ｒ３へとシフトしながら格納される。そして、５クロック目で、乱数レジスタｒ４から取り出されたマスク値に対して線形変換回路Ｃによる線形変換およびＳ／ＩＳ４０４による非線形変換が行われ、中間マスクが生成されて乱数レジスタｒ４に格納される。また、乱数レジスタｒ０〜ｒ３にそれぞれ格納されたマスク値に対してＳＲが行われ、マスクを剥がすためのデータが生成される。
【００８５】
また、鍵スケジュール部６００では、１クロック目から４クロック目まで鍵レジスタ６０２に格納された鍵データが保持され、５クロック目で、鍵レジスタ６０２に格納された鍵データに対してｓｂｏｘ＋αおよび排他的論理和が行われ、拡大鍵が生成される。
【００８６】
次に、６クロック目では、データレジスタｄ３から取り出された最上位３２ビットの中間データがＳ／ＩＳ４０４→ＭＣ／ＩＭＣ４０８→ＡＲＫ４１０のパスで流れ、その結果がデータレジスタｄ０に格納される。このとき、Ｓ／ＩＳ４０４の前段の排他的論理和回路４０２で、乱数レジスタｒ３から取り出されたデータにより中間データのマスクが剥がされるとともに、Ｓ／ＩＳ４０４の後段の排他的論理和回路４０５で、乱数レジスタｒ４から取り出された中間マスクにより中間データがマスクされる。また、７クロック目から９クロック目までの３クロックかけて、６クロック目と同様の処理が行われ、１２８ビットの中間データに対して、３２ビット単位でＳとＭＣとＡＲＫとが順次行われる。そして、次の１０クロック目で、ＳとＭＣとＡＲＫとが行われた１２８ビットの中間データの全体に対してＳＲが行われる。
【００８７】
一方、マスク処理部５００では、６クロック目から９クロック目のそれぞれで、乱数レジスタｒ４から取り出された中間マスクに対して線形変換回路Ｃによる線形変換および鍵更新部６０３のｓｂｏｘ＋αによる非線形変換が行われ、新たな中間マスクが生成される。また、６クロック目から９クロック目のそれぞれで、乱数レジスタｒ４から取り出された中間マスクに対してＭＣ／ＩＭＣ５０２によりＭＣが行われ、１０クロック目で、ＭＣが行われた中間マスクの全体に対してＳＲが行われて、マスクを剥がすためのデータが生成される。
【００８８】
また、鍵スケジュール部６００では、６クロック目から９クロック目まで鍵レジスタ６０２に格納された鍵データが保持され、１０クロック目で、鍵レジスタ６０２に格納された鍵データに対してｓｂｏｘ＋αおよび排他的論理和が行われ、新たな拡大鍵が生成される。
【００８９】
その後、最終ラウンドの１つ前の処理ラウンドに対応するクロック数まで、中間データに対して、３２ビット単位でＳとＭＣとＡＲＫが行われるとともに、１２８ビット全体にＳＲが行われる。そして、最終ラウンドでは、２３ビット単位でＳとＡＲＫが行われて暗号文が生成され、データレジスタｄ０〜ｄ３に格納される。
【００９０】
なお、暗号文を復号する復号処理は、暗号処理におけるＳがＩＳ、ＳＲがＩＳＲ、ＭＣがＩＭＣにそれぞれ変わるだけであるため、詳細な説明は省略する。
【００９１】
図１５は、第２実施例の暗号処理装置による暗号化処理を説明する図であり、鍵レジスタ６０２、データレジスタｄ０〜ｄ３、および乱数レジスタｒ０〜ｒ４にそれぞれ格納されるデータと、各データに対して行われる処理内容（次のクロックでラッチされるデータ）とを、クロック（Ｃｌｏｃｋ）ごとに示したものである。なお、図１５では、Ｃｌｏｃｋ＝０〜１０までを例示しているが、実際には、適用する暗号アルゴリズムに応じて定められる規定の処理ラウンド数に対応するクロック数分の処理が行われる。
【００９２】
図１５において、鍵レジスタ６０２には３２ビットごとにｋ０〜ｋ３の名称を付している。また、鍵レジスタ６０２（ｋ０〜ｋ３）に格納される鍵データまたは拡大鍵は先頭をＫ、データレジスタｄ０〜ｄ３に格納されるデータまたは中間データは先頭をＤ、乱数レジスタｒ０〜ｒ４に格納されるマスク値または中間マスク、マスクを剥がすためのデータは、先頭をＲで表している。また、各データの数値は、先頭の数値がバイト位置（３２ビット単位）を表し、次の数値が処理ラウンドの回数（何ラウンド目か）を表している。また、各データの末尾は、更新前と更新後とで異なる数値もしくは文字を付して、データが更新されていることを表している。
【００９３】
第２実施例の暗号処理装置では、図１５に示すように、Ｃｌｏｃｋ＝１〜４の間、鍵レジスタ［ｋ３，ｋ２，ｋ１，ｋ０］に格納されている鍵データ（Ｋ３０，Ｋ２０，Ｋ１０，Ｋ００）は更新されない。そして、Ｃｌｏｃｋ＝５では、Ｃｌｏｃｋ＝４の鍵レジスタ［ｋ３，ｋ２，ｋ１，ｋ０］の内容に対してｓｂｏｘ＋αが行われることで拡大鍵（Ｋ３１，Ｋ２１，Ｋ１１，Ｋ０１）が生成され、鍵レジスタ［ｋ３，ｋ２，ｋ１，ｋ０］に格納される。
【００９４】
また、Ｃｌｏｃｋ＝１〜４の間、データレジスタ［ｄ３，ｄ２，ｄ１，ｄ０］に格納されたデータ（Ｄ３００，Ｄ２００，Ｄ１００，Ｄ０００）に対して、先頭のＤ３００から順にＡＲＫが行われ、中間データ（Ｄ３０１，Ｄ２０１，Ｄ１０１，Ｄ００１）が生成される。そして、Ｃｌｏｃｋ＝５で、データレジスタ［ｄ３，ｄ２，ｄ１，ｄ０］に格納された中間データ（Ｄ３０１，Ｄ２０１，Ｄ１０１，Ｄ００１）に対してＳＲが行われ、中間データ（Ｄ３１０，Ｄ２１０，Ｄ１１０，Ｄ０１０）が生成される。
【００９５】
また、Ｃｌｏｃｋ＝１〜４の間、乱数レジスタｒ４に格納されたマスク値が乱数レジスタｒ０、乱数レジスタｒ１、乱数レジスタｒ２、乱数レジスタｒ３に次々と格納される。そして、Ｃｌｏｃｋ＝５で、乱数レジスタｒ４から取り出されたマスク値Ｒ０００に対して線形変換回路Ｃによる線形変換とＳ／ＩＳ４０４によるＳが行われ、中間マスクＲ３１０が生成される。また、Ｃｌｏｃｋ＝５で、乱数レジスタｒ３，ｒ２，ｒ１，ｒ０に格納されているマスク値（Ｒ３０１，Ｒ２０１，Ｒ１０１，Ｒ００１）の全体に対してＳＲが行われ、マスクを剥がすためのデータ（Ｒ３０ｄ，Ｒ２０ｄ，Ｒ１０ｄ，Ｒ００ｄ）が生成される。
【００９６】
次のＣｌｏｃｋ＝６〜９の間、鍵レジスタ［ｋ３，ｋ２，ｋ１，ｋ０］に格納されている鍵データ（Ｋ３１，Ｋ２１，Ｋ１１，Ｋ０１）は更新されない。そして、Ｃｌｏｃｋ＝１０でｓｂｏｘ＋αが行われることで新たな拡大鍵が生成され、鍵レジスタ［ｋ３，ｋ２，ｋ１，ｋ０］に格納される。
【００９７】
また、Ｃｌｏｃｋ＝６〜９の間、データレジスタ［ｄ３，ｄ２，ｄ１，ｄ０］に格納された中間データ（Ｄ３１０，Ｄ２１０，Ｄ１１０，Ｄ０１０）に対して、先頭のＤ３１０から順にＳとＭＣとＡＲＫとが行われ、中間データ（Ｄ３１２，Ｄ２１２，Ｄ１１２，Ｄ０１１）が生成される。そして、Ｃｌｏｃｋ＝１０で、データレジスタ［ｄ３，ｄ２，ｄ１，ｄ０］に格納されている中間データ（Ｄ３１２，Ｄ２１２，Ｄ１１２，Ｄ０１１）の全体に対してＳＲが行われ、新たな中間データ（Ｄ３２０，Ｄ２２０，Ｄ１２０，Ｄ０２０）が生成される。
【００９８】
また、Ｃｌｏｃｋ＝６〜９の間、乱数レジスタｒ４から取り出された中間マスク（Ｒ３１０，Ｒ２１０，Ｒ１１０，Ｒ０１０）に対して、線形変換回路Ｃによる線形変換と、鍵更新部６０３のｓｂｏｘ＋αを利用したＳが行われ、新たな中間マスク（Ｒ２１０，Ｒ１１０，Ｒ０１０，Ｒ３２０）が生成される。また、Ｃｌｏｃｋ＝６〜９の間、乱数レジスタｒ４から取り出された中間マスク（Ｒ３１０，Ｒ２１０，Ｒ１１０，Ｒ０１０）に対してＭＣが行われ、その結果のデータ（Ｒ３１１，Ｒ２１１，Ｒ１１１，Ｒ０１１）全体に対して、Ｃｌｏｃｋ＝１０でＳＲが行われ、マスクを剥がすためのデータ（Ｒ３１ｄ，Ｒ２１ｄ，Ｒ１１ｄ，Ｒ０１ｄ）が生成される。
【００９９】
以上のように、第２実施例の暗号処理装置においては、秘密鍵に依存関係のある中間データが、入力されたマスク値を再利用して生成した中間マスクによりマスクされた状態で、データレジスタｒ０〜ｒ３に格納されるので、秘密鍵の推定を不能にしてＤＰＡ攻撃を無効化することができる。また、中間マスクは、データ処理部４００のＳ／ＩＳ４０４あるいは鍵スケジュール部６００の鍵更新部６０３に設けられたｓｂｏｘ＋αを流用し、マスク値を再利用することで生成されるので、暗号回路のほかに乱数生成回路を実装する必要がなく、回路規模をコンパクトにできるとともに消費電力の低減を図ることができる。
【０１００】
また、第２実施例の暗号処理装置は、１２８ビット単位のデータブロックを３２ビットずつ順次処理する構成であるため、第１実施例の暗号処理装置と比較して、Ｓ、ＩＳ、ＭＣ、ＩＭＣの演算を行う回路を１／４のサイズにすることができ、回路規模をさらにコンパクトにすることができる。
【０１０１】
また、第２実施例の暗号処理装置は、新たな中間マスクを生成するための非線形変換に、データ処理部４００のＳ／ＩＳ４０４と、鍵スケジュール部６００の鍵更新部６０３に設けられたｓｂｏｘ＋αとの双方を利用するため、暗号化や復号のための演算と中間マスクの生成とを同一クロックで行うことができ、レイテンシの増大を抑制することができる。
【０１０２】
なお、第２実施例の暗号処理装置では、回路規模のコンパクト化を実現するために、図１４に示したような回路構成のＳ／ＩＳ４０４を用いている。中間マスク生成に用いる非線形変換を図１４のＩＧＦだけを用いてもよい。しかし、このＳ／ＩＳ４０４を設ける代わりに、第１実施例と同様に、ＳとＩＳとを独立して行う回路構成とした場合には、鍵スケジュール部６００の鍵更新部６０３に設けられたｓｂｏｘ＋αを用いずに、ＳとＩＳのうち、暗号化処理もしくは復号処理に使用していない非線形変換を用いて新たな中間マスクを生成できる。したがって、この構成の場合は、新たな中間マスクを生成するための非線形変換を行うために、鍵スケジュール部６００の鍵更新部６０３に設けられたｓｂｏｘ＋αを用いる必要はない。
【０１０３】
また、レイテンシの増大が許容できるのであれば、図１６に示すように、Ｓ／ＩＳ４０４を用いたコンパクトな回路構成において、データ処理部４００のＳ／ＩＳ４０４のみを用いて、新たな中間マスクを生成するための非線形変換を行う構成としてもよい。
【０１０４】
図１７は、図１６に示す回路構成の暗号処理装置による暗号化処理におけるデータの流れを説明する図である。図１５に示した例と比較すると、図１５に示した例ではＣｌｏｃｋ＝６〜９において、鍵更新部６０３のｓｂｏｘ＋αを利用して新たな中間マスク（Ｒ２１０，Ｒ１１０，Ｒ０１０，Ｒ３２０）を生成していたのに対し、図１７の例では、Ｃｌｏｃｋ＝７で、データ処理部４００のＳ／ＩＳ４０４を利用して新たな中間マスクＲ２１０を生成する。また、Ｃｌｏｃｋ＝９で、データ処理部４００のＳ／ＩＳ４０４を利用して新たな中間マスクＲ１１０を生成する。また、Ｃｌｏｃｋ＝１１で、データ処理部４００のＳ／ＩＳ４０４を利用して新たな中間マスクＲ０１０を生成する。また、Ｃｌｏｃｋ＝１３で、データ処理部４００のＳ／ＩＳ４０４を利用して新たな中間マスクＲ３２０を生成する。
【０１０５】
また、レイテンシの増大が許容できる場合、図１８に示すように、Ｓ／ＩＳ４０４を用いたコンパクトな回路構成において、鍵更新部６０３のｓｂｏｘ＋αのみを用いて、中間マスクを生成するための非線形変換を行う構成としてもよい。
【０１０６】
図１９は、図１８に示す回路構成の暗号処理装置による暗号化処理におけるデータの流れを説明する図である。図１５に示した例と比較すると、図１５に示した例ではＣｌｏｃｋ＝５において、Ｓ／ＩＳ４０４を利用して、乱数レジスタｒ４から取り出されたマスク値Ｒ０００から中間マスクＲ３１０を生成していたのに対し、図１９の例では、Ｃｌｏｃｋ＝６において、鍵更新部６０３のｓｂｏｘ＋αを利用して中間マスクＲ３１０を生成する。
【０１０７】
以上、具体的な実施例を挙げながら詳細に説明したように、本実施形態の暗号処理装置によれば、回路規模や消費電力の増大を抑えながら、秘密鍵の推定を不能にして、サイドチャネル攻撃を無効化することができる。
【０１０８】
なお、以上説明した実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。上記の新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。上記の実施形態やその変形は、発明の範囲や要旨に含まれるとともに、請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０１０９】
Ａ  非線形変換回路
Ｃ  線形変換回路
１１  データレジスタ
１９，２０  排他的論理和回路
２１，２２  乱数レジスタ
３１，３２  セレクタ
１００  データ処理部
１０２  データレジスタ
１０３，１０９  排他的論理和回路
１０４，１０５  セレクタ
１０６  Ｓ
１０７  ＩＳ
２００  マスク処理部
２０１  セレクタ
２０２，２０９  乱数レジスタ
３００  鍵スケジュール部
３０２  鍵レジスタ
３０３  鍵更新部
４００  データ処理部
ｄ０〜ｄ３  データレジスタ
４０２，４０５  排他的論理和回路
４０３  セレクタ
４０４  Ｓ／ＩＳ
５００  マスク処理部
５０１  セレクタ
ｒ０〜ｒ４  乱数レジスタ
６００  鍵スケジュール部
６０２  鍵レジスタ
６０３  鍵更新部
【図１】
0005481455.tif 000002
【図２】
0005481455.tif 000003
【図３】
0005481455.tif 000004
【図４】
0005481455.tif 000005
【図５】
0005481455.tif 000006
【図６】
0005481455.tif 000007
【図７】
0005481455.tif 000008
【図８】
0005481455.tif 000009
【図９】
0005481455.tif 000010
【図１０】
0005481455.tif 000011
【図１１】
0005481455.tif 000012
【図１２】
0005481455.tif 000013
【図１３】
0005481455.tif 000014
【図１４】
0005481455.tif 000015
【図１５】
0005481455.tif 000016
【図１６】
0005481455.tif 000017
【図１７】
0005481455.tif 000018
【図１８】
0005481455.tif 000019
【図１９】
0005481455.tif 000020