(57)【要約】【課題】暗号処理における冗長部を削減可能とし、マスク値の記憶領域を削減可能とする。          【解決手段】第１の排他的論理和演算部は平文とマスク値との排他的論理和をとり、非線形変換部は複数の非線形変換用のテーブルへの入力に対してマスクをかけ前記テーブルに従った非線形変換を行い前記非線形変換した値に対して出力側のマスクをかけた値を出力し、線形変換部は非線形変換部から出力された複数の値に対して線形変換を施し、第１のパーミュテーション部は線形変換部の出力の並び替えを行い、第２の排他的論理和演算部は、ラウンド処理終了後の前記第１のパーミュテーション部の出力とアンマスク値との排他的論理和をとり、第２のパーミュテーション部は第２の排他的論理和演算部の出力を並び替えた結果を暗号文として出力する。【選択図】図２
2014119512.tif 000002
【特許請求の範囲】
【請求項１】
平文とマスク値との排他的論理和をとる第１の排他的論理和演算部と、
入力値を複数に分割した値をそれぞれ非線形変換する複数のテーブルを含む非線形変換部と、
前記非線形変換部の前記複数のテーブルから出力された複数の値に対して線形変換を施す線形変換部と、
前記線形変換部の出力とラウンド鍵とを加算する鍵加算部と、
前記鍵加算部の出力の並び替えを行う第１のパーミュテーション部と、
を備え、
初回のラウンド処理では、前記非線形変換部には、前記第１の排他的論理和演算部の出力が入力され、２回目以降のラウンド処理では前記非線形変換部には、前回のラウンド処理での前記第１のパーミュテーション部の出力が入力され、
前記非線形変換部において、前記テーブルは、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記非線形変換部、前記線形変換部、前記鍵加算部、及び、前記第１のパーミュテーション部によるラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後の前記第１のパーミュテーション部の出力とアンマスク値との排他的論理和をとる第２の排他的論理和演算部と、
前記第２の排他的論理和演算部の出力を並び替え暗号文として出力する第２のパーミュテーション部と、
を備えたことを特徴とする暗号化処理回路。
【請求項２】
前記入力側のマスク値が、前記出力側のマスク値を、前記線形変換部と前記第１のパーミュテーション部で変換した値であることを特徴とする請求項１記載の暗号化処理回路。
【請求項３】
前記第１のパーミュテーション部は、前記非線形変換部で非線形変換し、前記線形変換部で線形変換した結果を、前記第１のパーミュテーション部で並び替えた第１の結果と、前記第１のパーミュテーション部で並び替えた結果を、前記非線形変換部で非線形変換し、前記線形変換部で線形変換した第２の結果と、が互いに一致するような並び替えを行うことを特徴とする請求項１又は２記載の暗号化処理回路。
【請求項４】
前記平文の並び替えを行う第３のパーミュテーション部をさらに備え、
前記第１の排他的論理和演算部は、前記第３のパーミュテーション部の出力とマスク値との排他的論理和をとることを特徴とする請求項１乃至３のいずれか１項に記載の暗号化処理回路。
【請求項５】
暗号化アルゴリズムとしてAES（Advanced Encryption Standard）を対象とし、
前記第１のパーミュテーション部は、４の倍数のバイトの巡回シフトによって並び替えを行い、且つ、前記第２のパーミュテーション部は、４の倍数のバイトでの巡回シフトによって暗号文を出力するか、
又は、
前記第１及び第３のパーミュテーション部は、４の倍数のバイトでの巡回シフトによって並び替えを行い、且つ、前記第２のパーミュテーション部は、４の倍数のバイトでの巡回シフトによって暗号文を出力することを特徴とする請求項４記載の暗号化処理回路。
【請求項６】
暗号化アルゴリズムとしてAES（Advanced Encryption Standard）を対象とし、
前記第１のパーミュテーション部は、４バイトごとに列を構成し各列の中で同じ巡回シフトによって並び替えを行い、且つ、前記第２のパーミュテーション部は、４バイトごとに列を構成し各列の中で同じ巡回シフトによって暗号文を出力し、
又は、
前記第１及び第３のパーミュテーション部は、４バイトごとに列を構成し各列の中で同じ巡回シフトによって並び替えを行い、且つ、前記第２のパーミュテーション部は、４バイトごとに列を構成し各列の中で同じ巡回シフトによって暗号文を出力することを特徴とする請求項４記載の暗号化処理回路。
【請求項７】
暗号化アルゴリズムとして３Ｄ暗号を対象とし、
前記第１のパーミュテーション部では、
第１のスライスの中で４の倍数のバイトでの巡回シフトによって並び替えを行い、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
前記第２のパーミュテーション部では、
第１のスライスの中で、４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
を結合したものを暗号文とする、
又は、
前記第１のパーミュテーション部では、
第１のスライスの中で４の倍数のバイトでの巡回シフトによって並び替えを行い、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
前記第２のパーミュテーション部では、
第１のスライスの中で４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果を結合したものを暗号文とすること、
前記第３のパーミュテーション部では、
第１のスライスの中で４の倍数のバイトでの巡回シフトによって平文を並び替え、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって平文を並び替え、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって平文を並び替え、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって平文を並び替えることを特徴とする請求項４記載の暗号化処理回路。
【請求項８】
データ処理装置による暗号化処理方法であって、
平文とマスク値との排他的論理和をとる第１の排他的論理和工程と、
入力値を複数に分割した値をそれぞれ複数のテーブルを用いて非線形変換するにあたり、前記テーブルへの入力に対して入力側のマスクと排他的論理和をとった値を用いて、前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して、出力側のマスク値と排他的論理和をとった値を出力する非線形変換工程と、
前記非線形変換工程から出力された複数の値に対して線形変換を施す線形変換工程と、
前記線形変換された値とラウンド鍵とを加算する鍵加算工程と、
前記鍵加算工程による加算結果の並び替えを行う第１のパーミュテーション工程と、
を含み、
初回のラウンド処理では、前記非線形変換工程には、前記第１の排他的論理和工程の演算結果が入力され、２回目以降のラウンド処理では、前記非線形変換工程には、前回のラウンド処理における前記第１のパーミュテーション工程の出力が入力され、
前記非線形変換工程、前記線形変換工程、前記鍵加算工程、前記第１のパーミュテーション工程によるラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後の前記第１のパーミュテーション工程の出力とアンマスク値との排他的論理和をとる第２の排他的論理和工程と、
前記第２の排他的論理和工程での演算結果を並び替え暗号文として出力する第２のパーミュテーション工程と、
をさらに含むことを特徴とする暗号化処理方法。
【請求項９】
データ処理装置に暗号化処理を実行させるプログラムであって、
平文とマスク値との排他的論理和をとる第１の排他的論理和処理と、
入力値を複数に分割した値をそれぞれ複数のテーブルを用いて非線形変換するにあたり、前記テーブルへの入力に対して入力側のマスクと排他的論理和をとった値を用いて、前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して、出力側のマスク値と排他的論理和をとった値を出力する非線形変換処理と、
前記非線形変換処理から出力された複数の値に対して線形変換を施す線形変換処理と、
前記線形変換された値とラウンド鍵とを加算する鍵加算処理と、
前記鍵加算処理による加算結果の並び替えを行う第１のパーミュテーション処理と、
を含み、
初回のラウンド処理では、前記非線形変換処理には、前記第１の排他的論理和処理の演算結果が入力され、２回目以降のラウンド処理では、前記非線形変換工程には、前回のラウンド処理における前記第１のパーミュテーション工程の出力が入力され、前記非線形変換処理、前記線形変換処理、前記鍵加算処理、前記第１のパーミュテーション処理のラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後における前記第１のパーミュテーション処理の出力とアンマスク値との排他的論理和をとる第２の排他的論理和処理と、
前記第２の排他的論理和処理の演算結果を並び替え暗号文として出力する第２のパーミュテーション処理と、
を含むことを特徴とするプログラム。
【請求項１０】
暗号文を入力して並び替える第１のパーミュテーション部と、
前記第１のパーミュテーション部の出力とアンマスク値との排他的論理和をとる第１の排他的論理和演算部と、
入力値の並び替える第２のパーミュテーション部と、
前記第２のパーミュテーション部の出力とラウンド鍵とを加算する鍵加算部と、
前記鍵加算部の出力に線形変換を施す線形変換部と、
前記線形変換部の出力を入力とし、入力値を複数に分割した値をそれぞれ入力し非線形変換する複数のテーブルを含む非線形変換部と、
を備え、
前記非線形変換部において、前記テーブルは、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて、前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
初回のラウンド処理では、前記第２のパーミュテーション部には、前記第１の排他的論理和演算部の出力が入力され、２回目以降ラウンド処理では、前記第２のパーミュテーション部には、前回のラウンド処理における前記非線形変換部の出力が入力され、
前記第２のパーミュテーション部、前記鍵加算部、前記線形変換部、及び前記非線形変換部によるラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後の前記非線形変換部の出力とマスク値との排他的論理和をとり排他的論理和演算結果を平文として出力する第２の排他的論理和演算部を備えたことを特徴とする復号処理回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化処理回路及び復号処理回路とその方法並びにそのプログラムに関し、特に、耐タンパー性を考慮した暗号化処理回路及び復号処理回路、その方法並びにそのプログラムに関する。
【背景技術】
【０００２】
情報の電子データ化が進む中で、情報の保護、秘匿な通信において、暗号はかかせない技術となっている。暗号はその安全性を保つために、鍵等の秘密情報が容易に推測できないようにする必要がある。鍵の全数探索や数学的に解読を行う線形解読や差分解読等といった暗号解析方法が知られている。しかし、この種の暗号解析方法により、現実的な時間で解析を行うことは不可能な状況といえる。
【０００３】
その一方で、携帯端末などの暗号機能を実装した装置（暗号モジュール）において、攻撃者が処理時間や消費電力、漏洩電磁波などのサイドチャネル情報を精密に測定できるとの仮定の下で、サイドチャネル情報から秘匿情報の取得を試みるサイドチャネル攻撃とその対策が大きな研究テーマとなっている。
【０００４】
サイドチャネル攻撃として、暗号モジュールの消費電力を測定し、消費電力から鍵等の秘密情報を解析する電力解析攻撃がある。その中でも、複数の消費電力波形に統計処理を行うことで解析を行う、差分電力解析が特に強力な攻撃法とされている（非特許文献１）。
【０００５】
暗号モジュールにおいて、論理ゲートの遷移確率に偏りが生じる場合に、データ列の中で１となるビットの数（ハミング重み）と消費電力との間には相関があるとされている（非特許文献２）。また、予め規定された暗号化処理を所定回数実行して暗号文を生成する場合、暗号化処理前後でのレジスタのビット遷移（ハミング距離）と消費電力とに相関があるとされている（非特許文献３）。そのため、ハミング重みやハミング距離に着目することで、秘密鍵が解析できてしまう、という問題がある。
【０００６】
ハミング重みやハミング距離に着目した攻撃への対策手法の例として、マスキング手法が提案されている（非特許文献４）。マスキング手法では、入力値と鍵を用いて演算する際に、マスク値という乱数を入力値と鍵とともに演算する。さらに、マスク値によってマスキングされた中間値を用いてラウンド処理を行う。ラウンド処理中の非線形変換は、例えば変換テーブルを用いて行われる。非線形変換に用いるテーブルは、マスク値が変わるたびに生成される。非線形変換に用いるテーブルは、中間値にマスクがかかった値を入力とし、元の中間値を非線形変換した値にマスクをかけ直した値が出力される。中間値にマスクがかかっているため、消費電力と中間値の相関が低下する。そのため、ハミング重みなどから、秘密鍵の解析ができなくなり、安全性が高くなる。
【０００７】
特許文献１には、乱数によるマスキング手法の問題を解決する方法として、固定値マスク法が開示されている。固定値マスク法では、予め２つ以上の固定値をマスクとして用意する。次に、各マスクと組となるマスク付テーブルを用意する。このマスク付テーブルは、中間値に組となるマスク値がかかった値を入力とし、元の中間値を非線形変換した値に組となるマスク値をかけ直した値を出力とする。そして、暗号処理開始時に、乱数にしたがってマスクとテーブルの組を選択し、選択したマスクとテーブルを用いて暗号処理を実施する。暗号処理のたびに乱数をふり直すことで、マスク値が切り替わる。固定値としてマスク値とテーブルを用意することで、非特許文献４の手法で問題となった、処理速度の低下と、ＲＡＭ（Random Access Memory）領域の増大という問題を解決することができる。
【０００８】
非特許文献５には、AES（Advanced Encryption Standard）における対策手法としてRotating Sboxes Masking(RSM)法が提案されている。RSM法では、固定値マスク法と同様に、複数のマスク値とマスク付のテーブル（SBOX）を用意する。暗号処理時には、これら複数のマスク値及びテーブルを並列に使用することになる。RSMでは、入力データ列をテーブルでの処理前にシフトすることで、使用するマスク値とテーブルをローテートする。テーブルでの処理後に、マスク付の出力データ列が出力される。この出力結果のデータ列を逆シフトすることで、元のデータ位置にマスク付データ列を戻す。使用するテーブルをローテートすることで、データの各バイトにかかるマスク値を入れ替えることができる。また、未使用となるマスク値とテーブルを出さないことから、冗長部分の削減を可能としている。
【０００９】
なお、本件に関連して出願人側で行った先行技術文献サーチの結果サーチされた特許文献２には、共通鍵暗号処理において、秘密鍵の解読防止のために必要な処理時間及び回路規模を削減するための構成として、第１の経路選択手段は、乱数発生手段が発生した乱数の値に応じて、複数の拡大鍵マスク値をランダムに並べ替え、拡大鍵演算手段は、並べ替えられた複数の拡大鍵マスク値と、拡大鍵を表すデータ列と、入力データ列との排他的論理和を生成し、第２の経路選択手段は、乱数の値に応じて第１の経路選択手段とは逆の並べ替えを行うことで、排他的論理和のデータ列を並べ替え、非線形変換手段１０４は、並べ替えられたデータ列の非線形変換を行って、複数の非線形変換マスク値によりマスクされたデータ列を出力し、第３の経路選択手段は、乱数の値に応じて第１の経路選択手段と同じ並べ替えを行うことで、マスクされたデータ列を並べ替える暗号化装置が開示されている。また、特許文献３には、ＤＥＳ（Data Encryption Standard）など複数段のラウンド関数の繰り返し処理を含む暗号アルゴリズムを実行する暗号処理装置において、Ｆ関数部に対してラウンド遷移時に乱数を入力し、その後、レジスタに格納された中間データを出力して演算処理を実行する構成とし、ラウンド遷移時には乱数に基づくＳボックス出力が発生し、また、レジスタ接続パスにおける電流又は電位変動が発生し、これらは各ラウンドにおいて適用される秘密情報としてのセッション鍵（ラウンド鍵）の構成ビット情報と無関係な電流又は電位変動となり、ＤＰＡ(Differential Power Analysis)攻撃による秘密情報の解析が不可能な高いセキュリティレベルの暗号処理装置が開示されている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２００２−３６６０２９号公報（特許第４５９６６８６号公報）
【特許文献２】特開２００８−１３１１０８号公報
【特許文献３】特開２００６−０１９８７２号公報
【非特許文献】
【００１１】
【非特許文献１】P. Kocher, J. Jaffe and B. Jun, "Introduction to Differential Power Analysis and Related Attacks," 1998.
【非特許文献２】佐々木明彦, 阿部公輝, "暗号回路への電力差分解析攻撃に対するアルゴリズムレベルでの耐性評価," 2006.
【非特許文献３】E. Brier, C. Clavier, and F. Olivier, "Correlation Power Analysis with a Leakage Model," 2004.
【非特許文献４】Thomas S. Messerges, "Securing the AES Finalists Against Power Analysis Attacks," 2000.
【非特許文献５】M. Nassar, Y. Souissi, S. Guilley and J.-L. Danger, "RSM: a Small and Fast Countermeasure for AES, Secure against 1st and 2nd -order Zero-Offset SCAs," 2012.
【非特許文献６】NAKAHARA Jorge Jr, " 3D: A Three-Dimensional Block Cipher," 2008.
【発明の概要】
【発明が解決しようとする課題】
【００１２】
以下に関連技術の分析を与える。
【００１３】
非特許文献４に開示された乱数によるマスキング手法では、マスク値（乱数）が変わるたびに、非線形変換に用いるテーブルを再計算する必要がある。このため、処理速度の低下、及び、必要な記憶容量（RAM(Random Access Memory）領域）の増大、という問題がある。
【００１４】
特許文献１の手法では、複数のマスク値とテーブルをマスク値の数だけ用意しておく必要があるため、マスク値とテーブルを保存するためのROM（Read Only Memory）領域が必要となる。また、複数のマスク値とテーブルの組の中からいずれか１つを選択する構成のため、選択されなかったマスク値とテーブルは、暗号処理時には冗長部分となる。
【００１５】
非特許文献５に開示されたRSM法では、マスクを保存するために、多くのROM領域を必要とする、という問題がある。RSM法では、テーブル処理後に、線形処理（ShiftRows, MixColumns, AddRoundKey）を行う。そして、それらの処理の後に、線形処理で変化したマスクを解除（アンマスク）する。さらに次のラウンド処理で使用するマスク値を改めてかけ直す作業（リマスク）が必要となる。当該アンマスク及びリマスクのためのマスク値を、ROMに記憶しておく必要がある。マスク値は、シフト幅の種類分用意する必要がある。また、暗号処理の開始時に平文にかけるマスク値と、終了時に暗号文を得るために、出力結果からマスクを解除するためのアンマスク値が必要となる。これらマスク値及びアンマスク値もシフト幅の種類分用意する必要があり、これらを記憶しておくためのROM領域が大きくなる。
【００１６】
したがって、本発明は、上記問題点に鑑みて創案されたものであって、その目的は、暗号処理における冗長部を削減可能とし、マスク値の記憶領域を削減可能とする暗号化処理回路及び復号処理回路と、その方法並びにそのプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１７】
本発明によれば、平文とマスク値との排他的論理和をとる第１の排他的論理和演算部と、
入力値を複数に分割した値をそれぞれ非線形変換する複数のテーブルを含む非線形変換部と、
前記非線形変換部の前記複数のテーブルから出力された複数の値に対して線形変換を施す線形変換部と、
前記線形変換部の出力とラウンド鍵とを加算する鍵加算部と、
前記鍵加算部の出力の並び替えを行う第１のパーミュテーション部と、
を備え、
初回のラウンド処理では、前記非線形変換部には、前記第１の排他的論理和演算部の出力が入力され、２回目以降のラウンド処理では前記非線形変換部には、前回のラウンド処理での前記第１のパーミュテーション部の出力が入力され、
前記非線形変換部において、前記テーブルは、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記非線形変換部、前記線形変換部、前記鍵加算部、及び、前記第１のパーミュテーション部によるラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後の前記第１のパーミュテーション部の出力とアンマスク値との排他的論理和をとる第２の排他的論理和演算部と、
前記第２の排他的論理和演算部の出力を並び替え暗号文として出力する第２のパーミュテーション部と、を備えた暗号化処理回路が提供される。
【００１８】
本発明によれば、データ処理装置による暗号化処理方法であって、
平文とマスク値との排他的論理和をとる第１の排他的論理和工程と、
入力値を複数に分割した値をそれぞれ複数のテーブルを用いて非線形変換するにあたり、前記テーブルへの入力に対して入力側のマスクと排他的論理和をとった値を用いて、前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して、出力側のマスク値と排他的論理和をとった値を出力する非線形変換工程と、
前記非線形変換工程から出力された複数の値に対して線形変換を施す線形変換工程と、
前記線形変換された値とラウンド鍵とを加算する鍵加算工程と、
前記鍵加算工程による加算結果の並び替えを行う第１のパーミュテーション工程と、
を含み、
初回のラウンド処理では、前記非線形変換工程には、前記第１の排他的論理和工程の演算結果が入力され、２回目以降のラウンド処理では、前記非線形変換工程には、前回のラウンド処理における前記第１のパーミュテーション工程の出力が入力され、
前記非線形変換工程、前記線形変換工程、前記鍵加算工程、前記第１のパーミュテーション工程によるラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後の前記第１のパーミュテーション工程の出力とアンマスク値との排他的論理和をとる第２の排他的論理和工程と、
前記第２の排他的論理和工程の演算結果を並び替え暗号文として出力する第２のパーミュテーション工程と、をさらに含む暗号化処理方法が提供される。
【００１９】
本発明によれば、データ処理装置に暗号化処理を実行させるプログラムであって、
平文とマスク値との排他的論理和をとる第１の排他的論理和処理と、
入力値を複数に分割した値をそれぞれ複数のテーブルを用いて非線形変換するにあたり、前記テーブルへの入力に対して入力側のマスクと排他的論理和をとった値を用いて、前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して、出力側のマスク値と排他的論理和をとった値を出力する非線形変換処理と、
前記非線形変換処理から出力された複数の値に対して線形変換を施す線形変換処理と、
前記線形変換された値とラウンド鍵とを加算する鍵加算処理と、
前記鍵加算処理による加算結果の並び替えを行う第１のパーミュテーション処理と、
を含み、
初回のラウンド処理では、前記非線形変換処理には、前記第１の排他的論理和処理の演算結果が入力され、２回目以降のラウンド処理では、前記非線形変換処理には、前回のラウンド処理における前記第１のパーミュテーション処理の出力が入力され、
前記非線形変換処理、前記線形変換処理、前記鍵加算処理、前記第１のパーミュテーション処理からなるラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後における前記第１のパーミュテーション処理の出力とアンマスク値との排他的論理和をとる第２の排他的論理和処理と、
前記第２の排他的論理和処理の演算結果を並び替え暗号文として出力する第２のパーミュテーション処理と、を含む暗号化処理プログラムが提供される。本発明によれば、該暗号化処理プログラムを記録したコンピュータ読み出し可能な媒体（例えば半導体メモリ、磁気／光ディスク等）が提供される。
【００２０】
本発明によれば、暗号文を入力して並び替える第１のパーミュテーション部と、
前記第１のパーミュテーション部の出力とアンマスク値との排他的論理和をとる第１の排他的論理和演算部と、
入力値の並び替えを行う第２のパーミュテーション部と、
前記第２のパーミュテーション部の出力とラウンド鍵とを加算する鍵加算部と、
前記鍵加算部の出力に線形変換を施す線形変換部と、
前記線形変換部の出力を入力とし、入力値を複数に分割した値をそれぞれ入力し非線形変換する複数のテーブルを含む非線形変換部と、
を備え、
前記非線形変換部において、前記テーブルは、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて、前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
初回のラウンド処理では、前記第２のパーミュテーション部には、前記第１の排他的論理和演算部の出力が入力され、２回目以降ラウンド処理では、前記第２のパーミュテーション部には、前回のラウンド処理における前記非線形変換部の出力が入力され、
前記第２のパーミュテーション部、前記鍵加算部、前記線形変換部、及び前記非線形変換部によるラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後の前記非線形変換部の出力とマスク値との排他的論理和をとり、排他的論理和演算結果を平文として出力する第２の排他的論理和演算部を備えた復号処理回路が提供される。
【００２１】
本発明によれば、データ処理装置による復号処理方法であって、
暗号文を入力して並び替える第１のパーミュテーション工程と、
前記第１のパーミュテーション工程の出力とアンマスク値との排他的論理和をとる第１の排他的論理和工程と、
入力値の並び替えを行う第２のパーミュテーション工程と、
前記第２のパーミュテーション工程の出力とラウンド鍵とを加算する鍵加算工程と、
前記鍵加算工程の出力に線形変換を施す線形変換工程と、
前記線形変換工程の出力を入力とし、入力値を複数に分割した値をそれぞれ入力し非線形変換する複数のテーブルを含む非線形変換工程と、
を含み、
前記非線形変換工程において、前記テーブルは、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて、前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
初回のラウンド処理では、前記第２のパーミュテーション工程には、前記第１の排他的論理和工程の出力が入力され、２回目以降ラウンド処理では、前記第２のパーミュテーション工程には、前回のラウンド処理における前記非線形変換工程の出力が入力され、
前記第２のパーミュテーション工程、前記鍵加算工程、前記線形変換工程、及び前記非線形変換工程によるラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後の前記非線形変換工程の出力とマスク値との排他的論理和をとり排他的論理和演算結果を、平文として出力する第２の排他的論理和工程を含む復号処理方法が提供される。
【００２２】
本発明によれば、データ処理装置による復号処理を実行させるプログラムであって、
暗号文を入力して並び替える第１のパーミュテーション処理と、
前記第１のパーミュテーション処理の出力とアンマスク値との排他的論理和をとる第１の排他的論理和処理と、
入力値の並び替えを行う第２のパーミュテーション処理と、
前記第２のパーミュテーション処理の出力とラウンド鍵とを加算する鍵加算処理と、
前記鍵加算処理の出力に線形変換を施す線形変換処理と、
前記線形変換処理の出力を入力とし、入力値を複数に分割した値をそれぞれ入力し非線形変換する複数のテーブルを含む非線形変換処理と、
を含み、
前記非線形変換処理において、前記テーブルは、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて、前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
初回のラウンド処理では、前記第２のパーミュテーション処理には、前記第１の排他的論理和処理の出力が入力され、２回目以降ラウンド処理では、前記第２のパーミュテーション処理には、前回のラウンド処理における前記非線形変換処理の出力が入力され、
前記第２のパーミュテーション処理、前記鍵加算処理、前記線形変換処理、及び前記非線形変換処理によるラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後の前記非線形変換処理の出力とマスク値との排他的論理和をとり、排他的論理和演算結果を、平文として出力する第２の排他的論理和処理と、を含む復号処理プログラムが提供される。本発明によれば、該復号処理プログラムを記録したコンピュータ読み出し可能な媒体（例えば半導体メモリ、磁気／光ディスク等）が提供される。
【発明の効果】
【００２３】
本発明によれば、暗号処理時における冗長部を削減可能とし、マスク値の記憶領域を削減可能としている。
【図面の簡単な説明】
【００２４】
【図１】本発明の第１の実施形態に係る暗号化処理回路の構成を例示する図である。
【図２】本発明の第１の実施形態に係る暗号化部の構成を例示する図である。
【図３】本発明の第１の実施形態に係る非線形変換部の構成を例示する図である。
【図４】本発明の第１の実施形態に係る非線形変換テーブルを排他的論理和と非線形変換テーブルで置換した図である。
【図５】本発明の第１の実施形態に係る鍵加算部の構成を例示する図である。
【図６】本発明の第１の実施形態に係る暗号化処理回路の鍵生成部がパーミュテーション機能を備えた構成を例示する図である。
【図７】本発明の第１の実施形態に係る鍵加算部の前にパーミュテーション部を設置したときの、暗号化部の構成を例示する図である。
【図８】本発明の第１の実施形態の動作を説明するためのフローチャートである。
【図９】AESに対して、４バイト巡回シフトによる並び替えを行った場合の結果である。
【図１０】第１の比較例の暗号化部の構成を例示する図である。
【図１１】第２の比較例（RSM法）の暗号化部の構成を例示する図である。
【図１２】本発明の第２の実施形態に係る、暗号化部の構成を例示する図である。
【図１３】本発明の第２の実施形態に係る、鍵加算部の前にパーミュテーション部を設置したときの、暗号化部の構成を例示する図である。
【図１４】本発明の第２の実施形態の動作を説明するためのフローチャートである。
【図１５】本発明の実施例１に係る暗号化部の構成を例示する図である。
【図１６】本発明の実施例１の動作を説明するためのフローチャートである。
【図１７】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その１）である。
【図１８】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その２）である。
【図１９】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その３）である。
【図２０】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その４）である。
【図２１】本発明の実施例１に係る、R=1のときのデータ遷移の例を示す図（その１）である。
【図２２】本発明の実施例１に係る、R=1のときのデータ遷移の例を示す図（その２）である。
【図２３】本発明の実施例１に係る、R=1のときのデータ遷移の例を示す図（その３）である。
【図２４】本発明の実施例１に係る、R=1のときのデータ遷移の例を示す図（その４）である。
【図２５】本発明の実施例１に係る、R=2のときのデータ遷移の例を示す図（その１）である。
【図２６】本発明の実施例１に係る、R=2のときのデータ遷移の例を示す図（その２）である。
【図２７】本発明の実施例１に係る、R=2のときのデータ遷移の例を示す図（その３）である。
【図２８】本発明の実施例１に係る、R=2のときのデータ遷移の例を示す図（その４）である。
【図２９】本発明の実施例１に係る、R=3のときのデータ遷移の例を示す図（その１）である。
【図３０】本発明の実施例１に係る、R=3のときのデータ遷移の例を示す図（その２）である。
【図３１】本発明の実施例１に係る、R=3のときのデータ遷移の例を示す図（その３）である。
【図３２】本発明の実施例１に係る、R=3のときのデータ遷移の例を示す図（その４）である。
【図３３】AESのときのデータ遷移の例を示す図（その１）である。
【図３４】AESのときのデータ遷移の例を示す図（その２）である。
【図３５】AESのときのデータ遷移の例を示す図（その３）である。
【図３６】AESのときのデータ遷移の例を示す図（その４）である。
【図３７】AES暗号化回路の暗号化部の構成を例示する図である。
【図３８】３Ｄ暗号の暗号化回路の暗号化部の構成を例示する図である。
【図３９】３Ｄ暗号のフローチャートである。
【図４０】本発明の実施例２に係る、暗号化部の構成を例示する図である。
【図４１】本発明の実施例２に係る、暗号化部の構成を例示する図である。（２つの非線形変換部）
【図４２】本発明の実施例２の動作を説明するためのフローチャートである。
【発明を実施するための形態】
【００２５】
本発明の第１の形態によれば、暗号鍵を用いて平文を複数のラウンドで暗号化する暗号化処理回路は、第１、第２の排他的論理和演算部（１１０１、１１０２）と、非線形変換部（１２００）と、線形変換部（１３００）、鍵加算部（１４００）、第１、第２のパーミュテーション部（１５０１、１５０２）を備える。第１の排他的論理和演算部（１１０）は平文とマスク値（Mp）との排他的論理和をとり、平文にマスクをかける。
【００２６】
非線形変換部（１２００）は、複数のテーブル（マスク付き非線形変換テーブル）（S1〜Sn）を備えている。各々のテーブル（S1〜Sn）（１２０１〜１２０４）において、入力側と出力側でそれぞれマスク値をかける。前記テーブル（S1〜Sn）の入力に対して入力側のマスク（Ma=ｍ１a〜ｍｎａ）をかけることでマスク前の値に変換し、前記第２のマスク前の値を用いてテーブル（S1〜Sn）に従った非線形変換を行う。テーブル（S1〜Sn）の出力に対して出力側のマスク（Mb=ｍ１b〜ｍｎｂ）をかけた値を出力する。
【００２７】
初回のラウンド処理では、前記非線形変換部（１２００）には、第１の排他的論理和演算部（１１０１）の演算結果が入力される。２回目以降のラウンド処理では、前記非線形変換部には、前回のラウンド処理での前記第１のパーミュテーション部（１５０１）の出力が入力される。
【００２８】
線形変換部（１３００）は、非線形変換部（１２００）の複数のテーブル（S1〜Sn）から出力される複数の値を入力し、線形変換をとる。鍵加算部（１４００）は、線形変換部（１３００）の出力とラウンド鍵（Ki）とを加算する（排他的論理和をとる）。第１のパーミュテーション部（１５０１）は、鍵加算部（１４００）の出力を入力してデータ列の並び替えを行う。
【００２９】
前記非線形変換部（１２００）、前記線形変換部（１３００）、前記鍵加算部（１４００）、及び、前記第１のパーミュテーション部（１５０１）によるラウンド処理が、規定回数行われる（例えばAES-128、AES-192、AES-256のラウンド処理回数は10回、12回、14回）。第２の排他的論理和演算部（１１０２）は、ラウンド処理終了後のデータ列とアンマスク値（Mc）との排他的論理和をとる。第２のパーミュテーション部（１５０２）は、ラウンド処理終了後のデータ列とアンマスク値（Mc）との排他的論理和の出力結果の並び替えを行い、並び替えた結果を暗号文として出力する。入力側マスク（Ma）は、出力側マスク（Mb）を、前記線形変換部（１３００）、前記第１のパーミュテーション部（１５０１）で変換した値である。
【００３０】
第１のパーミュテーション部（１５０１）で行うデータ列の並び替えは、任意のデータ列（x）を、非線形変換部（１２００）で非線形変換し（S(x)）、さらに線形変換部（１３００）で線形変換した結果（L(S(x))）を、第１のパーミュテーション部（１５０１）で並び替えた結果R1（=P（L(S(x))))と、同じデータ列(x)を第１のパーミュテーション部（１５０１）で並び替えた結果（P(x)）を、非線形変換部（１２００）で非線形変換し（S(Px)）、さらに前記線形変換部（１３００）で線形変換した結果R2（＝L(S(P(x))))において、R1=R2となるような並び替えを行う。
【００３１】
本発明の第２の形態によれば、暗号鍵を用いて平文を複数のラウンドで暗号化する暗号化処理回路は、第１、第２の排他的論理和演算部（１１０１、１１０２）と、非線形変換部（１２００）と、線形変換部（１３００）、鍵加算部（１４００）、及び第１乃至第３のパーミュテーション部（１５０１、１５０２、１５０４）と、を備える。第３のパーミュテーション部（１５０４）は平文の並び替えを行う。排他的論理和演算部（１１０１）は、第３のパーミュテーション部（１５０４）の出力である平文を並び替えたものとマスク値（Mp）との排他的論理和をとり、並び替えた平文にマスクをかける。非線形変換部（１２００）は、複数のテーブル（マスク付き非線形変換テーブル）（S1〜Sn）を備えている。各々のテーブル（S1〜Sn）（１２０１〜１２０４）において、入力側と出力側でマスク値をかける。前記テーブル（S1〜Sn）の入力に対して入力側のマスク（ｍ１a〜ｍｎａ）をかけることでマスク前の値に変換し、前記マスク前の値を用いてテーブル（S1〜Sn）に従った非線形変換を行う。テーブル（S1〜Sn）の出力に対して出力側のマスク（ｍ１b〜ｍｎｂ）をかけた値を出力する。初回のラウンド処理では、前記非線形変換部（１２００）には、第１の排他的論理和演算部（１１０１）の演算結果が入力される。２回目以降のラウンド処理では、前記非線形変換部には、前回のラウンド処理での前記第１のパーミュテーション部（１５０１）の出力が入力される。
【００３２】
前記線形変換部（１３００）は、非線形変換部（１２００）の複数のテーブル（S1〜Sn）から出力された複数の値に対して、線形変換をとる。鍵加算部（１４００）は、線形変換部（１３００）の出力とラウンド鍵（Ki）とを加算する（排他的論理和をとる）。第１のパーミュテーション部（１５０１）は、入力されたデータ列の並び替えを行う。前記非線形変換部（１２００）、前記線形変換部（１３００）、前記鍵加算部（１４００）、及び、前記第１のパーミュテーション部（１５０１）によるラウンド処理が規定回数行われる。第２の排他的論理和演算部（１１０２）は、ラウンド処理終了後のデータ列とアンマスク値（Mc）との排他的論理和をとる。さらに第２のパーミュテーション部（１５０２）は、ラウンド処理終了後のデータ列とアンマスク値（Mc）との排他的論理和の出力結果を並び替え、並び替えた結果を暗号文として出力する。入力側マスク(Ma)は出力側マスク(Mb)を前記線形変換部（１３００）及び前記第１のパーミュテーション部（１５０１）で変換した値である。前記第１のパーミュテーション部（１５０１）で行う並び替えは、任意のデータ列を、前記非線形変換部（１２００）で非線形変換し、さらに前記線形変換部（１３００）で線形変換した結果を前記第１のパーミュテーション部（１５０１）で並び替えた第１の結果（R1）と、同じデータ列を前記第１のパーミュテーション部（１５０１）で並び替えた結果を、前記非線形変換部（１２００）で非線形変換し、さらに前記線形変換部（１３００）で線形変換した第２の結果（R2）に関して、R1=R2となるような並び替えである。
【００３３】
本発明の上記形態によれば、非線形変換部において、マスク付の非線形変換テーブルを具備することで、マスクを変えるためにテーブルの再計算を行う必要性がなくなり、処理速度の低下と、記憶領域（RAM領域）の増大を抑制する。さらに、非線形変換部において、異なるマスクを持つテーブルを具備し、さらにパーミュテーションによりテーブルに入力されるデータを入れ替えることで、ラウンド処理ごとにデータの各部分にかかるマスクを入れ替える。未使用となるマスク値とテーブルを出さないことで、ROM領域及び回路規模を削減することができる。
【００３４】
非線形変換部のマスク付の非線形変換テーブルにおける入力側マスク値（Ma）と出力側のマスク値（Mb）の関係を規定しておき、さらに、パーミュテーションに条件付けを行う。こうすることで、本発明によれば、ラウンドごとのアンマスクやリマスクといったマスクの作業が不要となり、作業用のマスク値をROM等の記憶装置に記憶しておくことを要しなくしている。また、データを並び替えたままで処理をすすめることができるため、平文用のマスク値と暗号文用のアンマスク値を複数用意することを不要としている。
【００３５】
このように、本発明によれば、回路規模及びROM領域を削減しつつ、ハミング重みやハミング距離に基づくサイドチャネル攻撃による解析を困難にし、暗号モジュールの安全性を高めることができる。以下、図面を参照していくつかの実施形態を説明する。
【００３６】
（第１の実施形態）
図１は、本発明の第１の実施形態の暗号化処理回路の構成を示す図である。本実施形態の暗号化処理回路は、暗号化部１０００と鍵生成部２０００を含む。
【００３７】
図２は、図１の暗号化部１０００の構成を示す図である。図２を参照すると、暗号化部１０００は、排他的論理和演算部１１０１、１１０２と、非線形変換部１２００と、線形変換部１３００、鍵加算部１４００、及び、パーミュテーション部１５０１、１５０２を備えている。本明細書では、各変換部での演算として以下のような表記を用いる。
非線形変換：S(・)、
線形変換：L(・)、
パーミュテーション：P(・)。
【００３８】
図１を参照すると、暗号化部１０００は、入力された平文と、鍵生成部２０００から受け取るラウンド鍵（Ki）をもとに、データを暗号化し、暗号文を出力する。
【００３９】
暗号化部１０００では、図２を参照すると、初めに排他的論理和演算部１１０１において、マスクMpと平文との排他的論理和をとる。
【００４０】
次に、規定ラウンド数だけ、非線形変換部１２００、線形変換部１３００、鍵加算部１４００、パーミュテーション部１５０１でラウンド処理を繰り返す。
【００４１】
ラウンド処理終了後、排他的論理和演算部１１０２で、アンマスクMcとラウンド処理の出力結果（パーミュテーション部１５０１の出力）の排他的論理和をとる。
【００４２】
最後に、パーミュテーション部１５０２で、ラウンド処理中に並び替えられたデータを正規のデータ位置に並び替えを行い、暗号文を出力する。
【００４３】
排他的論理和演算部１１０１及び１１０２は、２つの入力の排他的論理和（bitwise XOR）を演算し、演算結果を出力する。排他的論理和演算部１１０１は平文とマスクMpとの排他的論理和を演算する。排他的論理和演算部１１０２はラウンド処理の結果とアンマスクMcとの排他的論理和を演算する。
【００４４】
非線形変換部１２００は、入力値（Ｘ）を非線形変換し、変換結果（Ｙ）を出力する。
【００４５】
図３は、図１の非線形変換部１２００の構成を示す図である。図３を参照すると、非線形変換部１２００は、ｎ個の非線形変換テーブル（S1〜Sn）１２０１〜１２０４を備えている。ｎ個の非線形変換テーブル１２０１〜１２０４へは入力値Xのうちの一部のデータx1〜xnがそれぞれ入力され、各非線形変換テーブルで非線形変換が行われる。データの一部の取り出し方としては、ビット単位、バイト単位、及び、任意のデータ長で分割され、データXは、全部でｎ個のデータx1〜xnに分割される。x1〜xnは互いに重ならず、x1〜xｎのビット列(あるいはバイト列等)を結合（連結）することでXとなる。特に制限されないが、例えばXが32ビットのとき、例えば4ビット単位にx１はXの0〜3ビット、x2はXの4〜7ビット、・・・、x8はXの29〜31ビット等に分割する。
【００４６】
非線形変換テーブル１２０１〜１２０４の変換結果としてｎ個の出力値y1〜yｎが出力される。なお、非線形変換テーブル１２０１〜１２０４は、後述するように、テーブルの入力と出力にマスク演算を施すものであり、マスク付き非線形変換テーブルともいう。ｎ個の出力値y1〜yｎを結合したものが非線形変換部１２００の出力値Ｙとなる。
【００４７】
図４は、図３のｎ個の非線形変換テーブル（S1〜Sn）１２０１〜１２０４の構成を示す図である。図４を参照すると、非線形変換テーブル１２０１は、入力側のマスクm１aと、出力側のマスクmiと、排他的論理和演算部１２１１と、ルックアップテーブル方式の非線形変換テーブル（S1）１２２１と、排他的論理和演算部１２１５を備えている。同様に、他の非線形変換テーブル１２０２〜１２０４は、入力側のマスクm２a〜mnaと、出力側のマスクm２b〜mnbと、排他的論理和演算部１２１２〜１２１８、ルックアップテーブル方式の非線形変換テーブル（S2〜Sn）１２２２〜１２２４と、排他的論理和演算部１２１６〜１２１８を備えている。マスクm１a〜mnaのビット幅は、データx1〜xnビット幅と等しい。
【００４８】
非線形変換テーブル（S1）１２０１内において、排他的論理和演算部１２１１は、入力値x1と入力側のマスクm1aとの排他的論理和x1(XOR)m1aをとる。なお、マスク値との排他的論理和をとることを、マスクをかけるともいう。
【００４９】
非線形変換テーブル（S1）１２２１は、排他的論理和x1(XOR)m1aを入力し、該入力に非線形変換を施した変換結果S(x1(XOR)m1a)を出力する。
【００５０】
排他的論理和演算部１２１５は、非線形変換テーブル（S1）１２２１から出力された変換結果S(x1(XOR)m1a)と、出力側のマスクm1bとの排他的論理和S(x1(XOR)m1a) (XOR) m1bをとり、演算結果をy1として出力する。このように、非線形変換テーブル(S1)１２０１は、入力値x1をy1へ変換して出力する。他の非線形変換テーブル(S2〜Sn)１２０２〜１２０４も、S1と同様に、x2〜xnのそれぞれに対して排他的論理和、非線形変換、排他的論理和の３つの演算を行い、それぞれy2〜ynを出力する。マスクmib〜mnbは、非線形変換テーブル（S）の出力のビット幅と等しい（例えばマスクm１a〜mnaのビット幅と等しくしてもよい）。
【００５１】
入力側の各マスクm1a〜mnaを結合したものをMa、
出力側の各マスクm1b〜mnbを結合したものをMb、
とする。
【００５２】
非線形変換テーブル１２０１をメモリ装置へ実装する場合には、入力x1に対して、出力y1=S(x1(XOR)m1a) (XOR) m1bを出力する。前述したように、図３のS1〜Snの各々は、排他的論理和演算、非線形変換、排他的論理和演算を行う。
【００５３】
再び図２を参照すると、線形変換部１３００は、非線形変換部１２００から出力された出力値（Y）を入力し、出力値（Y）を線形変換して変換結果（Z）を出力する。線形変換の関数をLとした場合、
Z=L(Y)
となる。
【００５４】
鍵加算部１４００は、図１の鍵生成部２０００から出力されたラウンド鍵（Ki）と、線形変換部１３００の出力（Z）との排他的論理和Q=Z(XOR)Ki（iは現在のラウンド数を示す）を演算する。なお、排他的論理和演算Z(XOR)KiはZとKiの加算である。
【００５５】
図５は、図２の鍵加算部１４００の構成を例示する図である。図５を参照すると、鍵加算部１４００は、複数の排他的論理和演算部１４１１〜１４１４を備えている。排他的論理和演算部１４１１は、ラウンド鍵Kiの一部であるki1と入力値Zの一部であるz1との排他的論理和 z1(XOR)ki1を演算し、演算結果（加算結果）をq1として出力する。他の排他的論理和演算部１４１２〜１４１４も同様に、ラウンド鍵Kiの一部kij(j=2〜ｎ)と入力値Zの一部zj(j=2〜ｎ)との排他的論理和 zj(XOR)kijを演算し演算結果をqj(j=2〜ｎ)として出力する。
【００５６】
図２のパーミュテーション部１５０１は、鍵加算部１４００の出力（Q）を並び替え、並び替えた結果をP(Q)として出力する。並び替えは、ビット単位、バイト単位、及び任意のデータ長単位での並び替えがある。パーミュテーション部１５０１での並び替えの結果P(Q)は、規定ラウンド回数のラウンド処理が繰り返されるまで、非線形変換部１２００へ帰還入力され、次のラウンド処理が行われる。ラウンド処理を規定回数分繰り返した場合、ラウンド処理を終了し、パーミュテーション部１５０１の出力P(Q)は、排他的論理和演算部１１０２にてアンマスク値Mcとの排他的論理和P(Q)（XOR）Mcが演算される。
【００５７】
パーミュテーション部１５０２は、排他的論理和演算部１１０２の出力を並び替え、並び替えた結果を暗号文として出力する。パーミュテーション部１５０２での並び替えは、ビット単位、バイト単位、あるいは、任意のデータ長単位で行われる。
【００５８】
図１の鍵生成部２０００は、入力された秘密鍵をもとに、暗号化部１０００で使用するラウンド鍵（Ki）を生成する。このラウンド鍵（Ki）は図２の鍵加算部１４００に入力される。
【００５９】
なお、図２において、パーミュテーション部１５０１によるデータの並び替えが行われるため、本来ラウンド鍵Kiを加算すべき箇所が、線形変換部１３００から得られるZでずれてしまう。そのため、ラウンド鍵Kiに対しても並び替えを行う必要がある。特に制限されないが、ラウンド鍵Kiを並び替える手法として、例えば、以下の手法が挙げられる。
【００６０】
（A）鍵生成部で予め並び替えたラウンド鍵を生成する。
【００６１】
（B）鍵生成部では、何も操作しないラウンド鍵を生成し、暗号化部の鍵加算部で鍵を加算する前に、別途設けられたパーミュテーション部（図７の１５０３）で並び替える。
【００６２】
図６は、上記（A）の手法を説明する図である。図６を参照すると、パーミュテーション付き鍵生成部２００１は、予め並び替えたラウンド鍵を生成し、暗号化部１０００に供給する。
【００６３】
図７は、上記（B）の手法を説明する図である。図７を参照すると、パーミュテーション部１５０３は、図１の鍵生成部２０００からのラウンド鍵Kiを並び替えた上で、鍵加算部１４００に供給する。
【００６４】
図８は、第１の実施形態の動作を説明するフローチャートである。図８と、図１乃至図７を参照して、本実施形態の動作を説明する。
【００６５】
はじめに、平文及び秘密鍵を暗号化処理回路へ入力し、平文は図１の暗号化部１０００、秘密鍵は図１の鍵生成部２０００へ入力される（ステップA1）。
【００６６】
図２の排他的論理和演算部１１０１で、平文とマスクMpとの排他的論理和が演算される。この排他的論理和演算（加算演算）により、平文にマスクをかける（ステップA2）。
【００６７】
マスク処理後、ラウンド処理として、ステップA3〜A7が行われる。まず、図２の非線形変換部１２００で、排他的論理和演算部１１０１の出力値を非線形変換し、非線形変換出力（Y）を出力する（ステップA3）。非線形変換部１２００では、排他的論理和演算部１１０１の出力値がn個に分割されx1〜xnが、非線形変換テーブル（S1〜Sn）１２０１〜１２０４へと入力される。これら、非線形変換テーブルはマスク付の非線形変換テーブルとなっている。図３の非線形変換テーブル（S１）１２０１の出力結果は、x1とm1a との排他的論理和を演算し、演算結果を非線形変換S(・)によって非線形変換し、非線形変換した結果とm1bとの排他的論理和をとった結果となる。
【００６８】
ここで、ステップA2で平文にかけたマスク値Mpと、m1a〜mnaを結合（concatenate）したマスク値Ma（=m1a||m2a||・・・||mna；ただし、||は連結（連接）を示す）とが一致する場合、図４の排他的論理和演算部１２１１〜１２１４において、MpとMaが相殺されることになる。このため、図４の非線形変換テーブル（S）１２２１〜１２２４は、それぞれ、元の平文に対して非線形変換を行うこととなる。そして、図４の排他的論理和演算部１２１５〜１２１８で、元の平文を非線形変換した結果に、m1b 〜mnbを連結したマスクMb（=m1ｂ||m2b||・・・||mnb）をかけることとなる。
【００６９】
図２の線形変換部１３００では、非線形変換部１２００の出力値（Y）に対して線形変換を行い、変換結果（Z）を出力する（ステップA4）。
【００７０】
鍵加算部１４００では、線形変換部１３００の出力（Z）と、鍵生成部２０００から送られてきたラウンド鍵（Ki）との排他的論理和を演算し、演算結果（Q）を出力する（ステップA5）。なお、最初のラウンドでは、これまでの処理（すなわち、鍵加算部１４００に到るまでの処理）で、パーミュテーション部１５０１を通過していないため、ラウンド鍵（Ki）に対する並び替えは不要である。
【００７１】
パーミュテーション部１５０１では、鍵加算部１４００の出力（Q）を並び替え、並び替えた結果（P(Q)）を出力する（ステップA6）。
【００７２】
パーミュテーション部１５０１での並び替え演算後、規定ラウンド回数、ラウンド処理を繰り返したか否か（ラウンド処理終了）の判定を行う（ステップA7）。該判定の結果、ラウンド処理が規定回数分終わっていない場合には、ステップA3に戻り、再び、ラウンド処理を繰り返す。一方、ラウンド処理が規定回数分終了した場合には、ステップA8へ進む。
【００７３】
ラウンド処理を繰り返す場合、まず、非線形変換部１２００で、パーミュテーション部１５０１で並び替えを行った結果（P(Q)）に対して、非線形変換が行われる（ステップA3）。１ラウンド目と異なり、2ラウンド目以降は、パーミュテーション部１５０１の出力（P(Q)）が非線形変換部１２００の入力値となる。パーミュテーション部１５０１の出力（P(Q)）も、入力値（X）をｎ個（x1〜xn）に分割したのと同様、n個に分割し、pq1〜pqnとする。特に制限されないが、例えばP(Q)が32ビットのとき、4ビット単位にpq1はP(Q)の0〜3ビット、pq2はP(Q)の4〜7ビット、・・・、pq8はP(Q)の29〜31ビット等に分割する。
【００７４】
pq1〜pqnが各非線形変換テーブル（S1〜Sn）１２０１〜１２０４（図２）にそれぞれ入力され、マスク付きの非線形変換処理が行われる。
【００７５】
例えば図２の非線形変換テーブル（S1）１２０１では、pq1とm1a との排他的論理和pq1（XOR）m1a を演算し、演算結果を、非線形変換S(・)によって非線形変換し（演算結果pq1（XOR）m1a をテーブルに入力し、該テーブルから非線形変換した結果が読み出される）、非線形変換した結果S(pq1（XOR）m1a)とm1bとの排他的論理和をとった結果S(pq1（XOR）m1a)（XOR）m1bとなる。なお、各非線形変換テーブル（S1〜Sn）１２０１〜１２０４の各テーブルの要素数は、ｎ個に分割されたデータpq1〜pqnの各ビットサイズをLとして、０〜２L−１である。
【００７６】
ここで、１ラウンド目のステップA3でかけたマスクMbが、線形変換部１３００とパーミュテーション部１５０１で変換された結果をMb’とする。m1a〜mnaを結合した入力側のマスクMaが、Mb’と一致する場合、図４の排他的論理和演算部１２１１〜１２１４において、Mb’とMaが相殺されることになる（一致する値同士の排他的論理和をとると、０となる）。このため、マスクMaが、Mb’と一致する場合、図４の非線形変換１２２１〜１２２４は、元の平文（マスクをかける前の値）に対して、非線形変換を行うことと等価となる。そして、図４の排他的論理和演算部１２１５〜１２１８で、元の平文を非線形変換した結果に、マスクMbをかけることとなる。
【００７７】
したがって、本実施形態においては、ステップA3でかけたマスクMbを、線形変換部１３００及びパーミュテーション部１５０１で変換した結果Mb’を入力側のマスクMaとして、Ma、Mbを含めた非線形変換テーブル（S1〜Sn）１２０１〜１２０４を実装する。こうすることで、ラウンド処理中に、線形変換部１３００での線形処理等で変化してしまったマスクを一旦解除して改めてマスクをかけ直す作業（処理）を不要としている。
【００７８】
線形変換部１３００では、非線形変換部１２００の出力（Y）に対して線形変換を行い、変換結果（Z）を出力する（ステップA4）。
【００７９】
鍵加算部１４００では、線形変換部１３００の出力（Z）と鍵生成部２０００から送られてきたラウンド鍵（Ki）との排他的論理和を演算し、演算結果（Q）を出力する（ステップA5）。
【００８０】
２ラウンド目以降では、ステップA6でデータの並び替えが行われているため、これまで行われてきたステップA6での並び替え分だけ、ラウンド鍵（Ki）に対して並び替えを行う。
【００８１】
ラウンド鍵Kiの並び替えは、図６に示したように、パーミュテーション付鍵生成部２００１で行うか、あるいは、図７に示したように、パーミュテーション部１５０３で行う。例えば、２ラウンド目では、１ラウンド目のステップA6を1回通過しているため、ラウンド鍵Kiに１回分の並び替えを行う。３ラウンド目では、すでに1ラウンド、２ラウンド目のステップA6を２回通過しているため、ラウンド鍵Kiに対して、２回分の並び替えを行う。
【００８２】
例えば、周期的に並び替えが行われている場合には、並び替えが行われないこともある。また、並び替えの回数を減らすこともできる。例えば、４回周期で元の位置に戻る並び替えの場合、５ラウンド目にはラウンド鍵Kiの並び替えは行われない。また、６ラウンド目では、1回分の並び替えで、５回分の並び替えと同じ結果となる。
【００８３】
パーミュテーション部１５０１では、鍵加算部１４００の出力（Q）の並び替えを行い、並び替え結果（P(Q)）を出力する（ステップA6）。
【００８４】
ラウンド処理が規定回数行われた場合、ステップA7からステップA8へと進む。
【００８５】
ラウンド処理終了後、排他的論理和演算部１１０２では、ラウンド処理の結果であるパーミュテーション部１５０１の出力（P(Q)）と、アンマスクMcとの排他的論理和を演算し、演算結果C’ = P(Q)(XOR)Mcを出力する（ステップA8）。このアンマスクMcとの排他的論理和は、P(Q)にかかっているマスクを解除し、本来の暗号文Cを並び替えただけの結果C’を得るものである。
【００８６】
ラウンド処理の結果であるパーミュテーション部１５０１での並び替え結果（P(Q)）にかかるマスクは、ステップA3でかけられたマスクMbを、線形変換部１３００及びパーミュテーション部１５０１で変換した値Mb’である。したがって、排他的論理和演算部１１０２で、P(Q)と、Mc=Mb’との排他的論理和の演算をすることで、本来の暗号文Cを並び替えただけの結果C’を得ることができる。
【００８７】
なお、暗号アルゴリズムによっては、最後のラウンドでは処理の内容が変わることがある。その場合は、最後のラウンドで、マスクMbに対して行われた線形処理及びパーミュテーション処理だけをMbに適用した値をアンマスク値Mcとして用いる。
【００８８】
例えば、AESでは最後のラウンドでは、線形変換の１つであるMixColumnsが行われない。そのため、それ以外の演算である、ShiftRowsとパーミュテーションのみマスク値Mbに適用した結果が、アンマスク値Mcとなる。
【００８９】
次に、パーミュテーション部１５０２では、排他的論理和の結果C’に対して並び替えを行い、暗号文Cを得る（ステップA9）。
【００９０】
パーミュテーション部１５０２では、これまで行われてきた全ての並び替えを逆に行い、C’を本来の位置に戻す。周期的に元の位置に戻る並び替えの場合、さらに並び替えを行い、元の位置に戻すようにしてもよい。
【００９１】
例えば、４回周期で元の位置に戻る並び替えを考える。ここで、暗号化処理（ラウンド処理）を、１５ラウンドで行う場合、パーミュテーション部１５０１を１５回通過している。そのため、パーミュテーション部１５０２では、１回並び替えを行えば、元の位置に戻る。
【００９２】
最後に暗号文Cを出力し終了となる（ステップA10）。  
【００９３】
本実施形態で用いるマスク値として、
・最初のマスクMp、
・最後のアンマスクMc、
・非線形変換テーブルの入力側のマスクMa、
・非線形変換テーブルの出力側のマスクMb、
がある。各マスク値の関係について説明する。
【００９４】
最初のマスクMpと非線形変換テーブルの入力側のマスクMaは同じものを用いる。
【００９５】
非線形変換テーブルの出力側のマスクMbが、線形変換部１３００及びパーミュテーション部１５０１で変換された結果を、次のラウンドの非線形変換テーブルの入力側のマスクMaとする。
【００９６】
最後のアンマスクMcは、非線形変換テーブルの出力側のマスクMbが最後のラウンドの線形変換部１３００及びパーミュテーション部１５０１で変換された結果とする。
【００９７】
最後のラウンドも、それ以前のラウンドと同じ処理をする場合には、
Mp=Ma=Mc
となり、これらは、Mbを線形変換部１３００及びパーミュテーション部１５０１で変換された結果と等しい。このため、ユーザは、任意の値をMbに設定し、それに合わせて、マスク値Ma、アンマスク値Mcは、自動的に設定される。
【００９８】
また、マスク値Maを、ユーザが任意に設定するようにしてもよい。その場合、Maに対して、パーミュテーション部１５０１の並び替えの逆演算を行い、さらに線形変換部１３００の処理の逆変換を行うことで、非線形変換テーブルの出力側のマスクMb（最初のラウンドのマスクMb）を得ることができる。
【００９９】
次に、本実施形態で行うパーミュテーションについて説明する。図２のパーミュテーション部１５０２、図７のパーミュテーション部１５０３は、図２、図７におけるパーミュテーション部１５０１での処理に応じて処理内容が決まる。
【０１００】
パーミュテーション部１５０２は、例えば、規定ラウンド回数分のラウンド処理で、パーミュテーション部１５０１で行われてきた全ての並び替えを逆に行うことで、本来の位置に暗号文を戻す。
【０１０１】
図７のパーミュテーション部１５０３は、ラウンド処理において、パーミュテーション部１５０１にて行われてきた全ての並び替え処理を、ラウンド鍵（Ki）に対して行い、線形処理部１３００の出力（Z）とラウンド鍵（Ki）とのデータ位置の整合をとる。
【０１０２】
パーミュテーション部１５０１は、次のラウンドで使用する非線形処理テーブルを切り替えるために、データ（ビット列）を並び替える。並び替えることで、使用する非線形処理テーブルが切り替わる。その結果、各データにかかるマスクも変化することになる。並び替えについては、最終結果となる暗号文が変わらないように並び替える必要がある。このため、本実施形態では、あるデータXに対して、ラウンド処理（非線形処理 S(・)、線形処理 L(・)、鍵加算処理(KiとのXOR）、及びパーミュテーション P(・))を行う場合、鍵加算処理に対して、パーミュテーションを行い、非線形処理及び線形処理を行った結果(＝L[S(P(X(XOR)Ki))])と、鍵加算処理（X(XOR)Ki）に対して先に非線形処理及び線形処理を行い、その結果に、パーミュテーションを行った結果(=P[L(S(X(XOR)Ki))])が一致するような、並び替えをパーミュテーション部１５０１で行う。
【０１０３】
L[S(P(X(XOR)Ki))] = P[L(S(X(XOR)Ki))]
【０１０４】
例えば、AESに適用した場合、パーミュテーション部１５０１では、４バイトシフトによるデータの並び替えを用いることができる。図９にAESに対して、４バイト巡回シフトによる並び替えを行った場合の結果を示す。
【０１０５】
図９（A）には、Xに対して、ラウンド鍵Kiとの鍵加算処理（AddRoundKey）X(XOR)Ki、非線形変換（シフトバイト：SubBytes）S（X(XOR)Ki）、シフト行（Shift Rows）、線形変換（ミックスカラム（混合列）：MixColumns）L(S(X(XOR)Ki)))、パーミュテーション処理P[L(S(X(XOR)Ki))]が示されている。
【０１０６】
なお、SubBytes変換は、変換対象データをルックアップテーブルS-Box（substitution-box）を参照して変換する。例えば１６進の５９をSubBytes変換すると、上位ビットの５の行、９の列でS-boxの要素の値を取り出す。ShiftRows変換は、行毎にシフトする。シフト量が行によって異なり、例えば１行目では０バイト、２行目では１バイト左シフト、３行目では２バイト左シフト、４行目では３バイト左シフトされる。パーミュテーション処理では列を巡回シフトする。すなわち、元の４列１、２、３、４（１列１バイトであり、４列４バイト）を、右方向に１列（１バイト）分、巡回シフトしてそれぞれ列２、３、４、１に並び替える。
【０１０７】
図９（B）には、Xに対して、ラウンド鍵Kiとの鍵加算処理（AddRoundKey）X(XOR)Ki、パーミュテーション（P(X(XOR)Ki))、非線形変換（SubBytes）S(P(X(XOR)Ki))、シフト行（Shift Row）、線形変換（MixColumns）L[S(P(X(XOR)Ki))]が示されている。図９（A）の最終結果P[L(S(X(XOR)Ki))]、図９（B）の最終結果L[S(P(X(XOR)Ki))]は一致していることがわかる。
【０１０８】
したがって、パーミュテーション部１５０１で並び替えを行って、ラウンド処理を行ったとしても、最後に逆の並び替え処理を行えば、本来の暗号文を取り出すことが可能となる。
【０１０９】
ここで、本実施形態を、図１０に示した比較例（マスキングを行わない暗号化処理回路）と比較する。
【０１１０】
図１０の回路に対して、図７に示した本実施形態では、排他的論理和演算部１１０１、１１０２と、パーミュテーション部１５０１、１５０２、１５０３が追加されている。
【０１１１】
図１０の非線形処理部１６００は、本実施形態と異なり、マスクが入出力に反映されない非線形変換テーブルとされる。図１０の非線形変換部１６００と、図７の非線形変換部１２００において、非線形変換テーブルをメモリに実装した場合には、処理時間、回路規模ともに違いはない。
【０１１２】
処理時間については、最初に、排他的論理和演算、最後に排他的論理和演算と、パーミュテーション処理、ラウンド処理中は、鍵とデータのパーミュテーションが１回ずつ、の処理時間が追加される。このうち、特に、パーミュテーション処理が、本実施形態での処理時間の増加分にあたることになる。
【０１１３】
排他的論理和演算部１１０１、１１０２、パーミュテーション部１５０１、１５０２、１５０３、マスク値を保存するROM領域が、図１０の回路構成に追加される。ただし、ROM領域については、MaとMbの2種類だけ用意すればよい。
【０１１４】
このため、平文や暗号文のデータ長をTとした場合、2T分のROM領域がマスクの記憶領域として必要となる。
【０１１５】
ここで、非特許文献５に開示されたRSM法と比較する。図１１に、RSM法による暗号処理回路の構成例を示す。図１１のRSM法の回路と、図７の本実施形態との違いは、図１１では、非線形変換部１７００と、MMS j+1加算部１８００を備えているが、パーミュテーション部がない点である。RSM法では、マスクを切り替えるために、非線形変換部１７００にバレルシフト１７０１、１７０２を用いている。一度データをシフトすることで、マスク付の非線形変換テーブルS1〜Sn のうち、どれを使用するかを切り替えることができる。いずれかの非線形変換テーブルで処理した後、バレルシフト１７０２で、元の位置にもどす。MMS j+1加算部１８００は、マスク付の非線形変換テーブルでかけられたマスクが、線形変換部１３００の変換で変化してしまった分をキャンセルし、改めて次のラウンドで使用するマスク値に更新する。
【０１１６】
処理時間について比較する。図１１の比較例（RSM法）の回路と比較して、本実施形態は、最初に排他的論理和、最後に排他的論理和と並び替え、ラウンド処理中は鍵とデータのパーミュテーションが１回ずつ、の処理時間が追加される。
【０１１７】
一方、図１１の比較例の回路では、最初と最後に排他的論理和が１回ずつ、ラウンド処理中はバレルシフトが２回と排他的論理和が１回行われる。
【０１１８】
バレルシフトとパーミュテーションを、同等の処理時間とした場合、本実施形態では、パーミュテーション１回分、RSM法では、排他的論理和がラウンド数の分多いことになる。
【０１１９】
本実施形態においては、鍵とデータそれぞれにパーミュテーションを行うことになるため、次のラウンド鍵を前のラウンドのときに並行して用意するなどで、処理時間を短縮することも可能である。
【０１２０】
次に、図１１のRSM法の回路規模について比較する。まず、図１１の比較例（RSM法）では、２つの排他的論理和演算部１１０１、１１０２と、MMS j+1加算部１８００、２つのバレルシフトが、図１０の比較例の回路と比較して増加している。
【０１２１】
本実施形態では、排他的論理和演算部１１０１、１１０２と、パーミュテーション部１５０１〜１５０３が追加されている。
【０１２２】
そのため、バレルシフトとパーミュテーションを同等の規模と考えた場合には、本実施形態のほうが、パーミュテーション１つ分、回路規模が大きいことになる。
【０１２３】
次に、ROM領域について比較する。
【０１２４】
RSM法では、バレルシフトで何バイトシフトするかによって、最初のマスクMjや途中のMMS j+1加算部１８００で使用するマスクMMS j+1、最後のアンマスクMSj+nが変わってくる。
【０１２５】
そのため、シフト幅のパターンだけ、マスク値をROMに記憶しておく必要ある。例えば、AES128の場合、シフト幅のパターンが０〜１５バイトの１６パターンとすると、マスクの数は、３つのマスクで１６個必要となり、ROM領域は、
T＊１６＊３(T=１６バイト)
分必要となる。
【０１２６】
本実施形態では、マスクの記憶領域は２Ｔ分ですむため、RSM法と比べて、２４分の１ですむことになる。
【０１２７】
（第２の実施形態）
次に、本発明の第２の実施形態について説明する。図１２は、本発明の第２の実施形態の構成を示す図である。図１２を参照すると、図２の前記第１の実施形態の排他的論理和演算部１１０１の前に、パーミュテーション部１５０４が追加され、乱数発生器１９００を備えている。乱数発生器１９００で生成された乱数（R）はパーミュテーション部１５０４、１５０２に入力される。図１２において、パーミュテーション部１５０４では、乱数発生器１９００から出力される乱数を受け、入力された平文に対して並び替え処理（乱数に対応した並び替え回数）を行い、並び替えた平文を排他的論理和演算部１１０１へと出力する。また、パーミュテーション部１５０２は、乱数発生器１９００から出力される乱数を受け、排他的論理和演算部１１０２の出力の並び替え処理を行い、暗号文として出力する。
【０１２８】
図１３は、第２の実施形態において、前記第１の実施形態の図７に対応する構成を例示する図である。図１３を参照すると、図７の排他的論理和演算部１１０１の前にパーミュテーション部１５０４が追加され、乱数発生器１９００を備えている。図１３において、パーミュテーション部１５０４は、乱数発生器１９００から出力される乱数を受け、入力された平文に対して並び替え処理（乱数に対応した並び替え回数）を行い、並び替えた平文を排他的論理和演算部１１０１へと出力する。パーミュテーション部１５０２は、乱数発生器１９００から出力される乱数を受け、排他的論理和演算部１１０２の出力の並び替え処理を行い、暗号文として出力する。パーミュテーション部１５０３にも、乱数発生器１９００から出力される乱数が入力される（乱数発生器１９００からの乱数はパーミュテーション部１５０２〜１５０４に共通に入力される）。パーミュテーション部１５０３では、パーミュテーション部１５０１と、パーミュテーション部１５０４での並び替えに対応させてラウンド鍵Kiの並び替えを行い、並び替えたラウンド鍵を鍵加算部１４００に供給する。
【０１２９】
図１４は、第２の実施形態の動作を説明するフローチャートである。前記第１の実施形態の説明で参照した図８の動作と、図１４の動作の相違点は、図１４では、マスク加算ステップA2の前に、ステップA11が追加されたことと、ステップA5とA9が変更されたことである。
【０１３０】
はじめに、平文及び秘密鍵を暗号化処理回路へ入力し、平文は暗号化部１０００、秘密鍵は鍵生成部２０００へ入力される（ステップA1）。
【０１３１】
次に、パーミュテーション部１５０４で平文の並び替えが行われる（ステップA11）。なお、このステップA11において、パーミュテーション部１５０４で並び替える回数は、ランダムに決定される。並び替える回数をランダムにすることで、最初に、非線形変換部１２００で使用されるマスクがランダムになり、以降のラウンドにおいても、どのマスクが適用されるか、その順番に変化が生じる。パーミュテーション部１５０４に入力される並び替え回数Rは、乱数発生器１９００で生成される。乱数生成器１９００として、LFSR（Linear Feedback Shift Register）を利用するものや、一方向性関数を利用するもの、カオス系列を利用するもの、予めROMなどに記憶しておいた乱数を読みだすもの等、公知のものが用いられる。
【０１３２】
図１４において、ステップA2からA4は、図８のステップA2からA4と同じ処理を行うため、説明は省略する。
【０１３３】
鍵加算部１４００では、線形変換部１３００の出力Zと鍵生成部２０００から送られてきたラウンド鍵Kiとの排他的論理和を演算し、演算結果Qを出力する（ステップA5-1）。前記第１の実施形態と異なり、本実施形態では、１ラウンド目からデータの並び替えが行われている。
【０１３４】
そのため、１ラウンド目ではステップA11で行われた並び替えと同じ並び替えをラウンド鍵Kiに対して行う。
【０１３５】
２ラウンド目以降は、ステップA11で行われた並び替えに加え、これまで行われてきたステップA6での並び替え分だけ、ラウンド鍵Kiにも並び替えを行う。
【０１３６】
なお、ラウンド鍵Kiの並び替えの処理は、ステップA11で行われた平文の並び替えに合わせて変える必要がある。
【０１３７】
ステップA6からA8は、図８の前記第１の実施形態と同じ処理であるため、説明は省略する。
【０１３８】
パーミュテーション部１５０２では、排他的論理和の結果C’に対して並び替えを行い、暗号文Cを得る（ステップA9-1）。パーミュテーション部１５０２では、ステップA11で行われた並び替えに加え、ステップA6で行われてきた全ての並び替えを逆に行い、C’を本来の位置に戻す。パーミュテーション部１５０２では、ステップA11でパーミュテーション部１５０４が行う並び替えに対応する乱数Rを乱数発生器１９００から受け取り、パーミュテーション部１５０２では、ステップA11で行われた並び替えに対応させて、処並び替え処理を変える。
【０１３９】
周期的に元の位置に戻る並び替えの場合、さらに、並び替えを行い元の位置に戻すようにしてもよい。例えば、４回周期で元の位置に戻る並び替えとして、暗号化処理を１０ラウンドで行う場合、パーミュテーション部１５０１を１０回通過している。もし、ステップA11で、１回分の並び替えを行っていた場合には、合計で１１回分の並び替えが行われることになる。そのため、パーミュテーション部１５０２では、１回並び替えを行えば、全体で１２回の並び替えが行われ、元の位置に戻ることになる。
【０１４０】
パーミュテーション部１５０２は、暗号文Cを出力し終了となる（ステップA10）。
【０１４１】
本実施形態では、ステップA11においてパーミュテーション部１５０４が何回並び替えを行ったかによって後段のステップA5-1、A9-1の処理が変わることになる。そのため、ステップA11のときの並び替えの回数R、もしくは、合計の並び替えの回数を記憶しておき、その情報を、ステップA5-1の鍵加算部１３００の処理、A9-1のパーミュテーション部１５０４の処理で用いる。
【０１４２】
（実施例１）
図１３を参照して説明した第２の実施形態の一具体例として、128ビットAES(AES128)を用いるときの暗号化処理回路を説明する。
【０１４３】
図１５は、実施例１の暗号化処理回路の暗号化部の構成を示す図である。暗号化部は、マスクとの排他的論理和３１０１及び３１０２、マスク付SBOXを１６個備える非線形変換部３２００、図１３の線形変換部１３００に対応する行シフト（ShiftRows）３３０１と列混合（MixColumns）３３０２、ラウンド鍵を排他的論理和で加算するラウンド鍵加算（AddRoundKey）３４００、３４０１、パーミュテーション部３５０１〜３５０４、とを備えている。
【０１４４】
AES128では、ラウンド処理の前に鍵加算を行う必要があるため、鍵加算用の排他的論理和３４０１を追加している。また、線形処理部としてはShiftRowsとMixColumnsが用いられる。そのため、ShiftRows３３０１とMixColumns３３０２を線形処理部として設けている。なお、最終ラウンドではMixColumns３３０２での処理は行われないため、MixColumnsを回避するための経路を設けている。
【０１４５】
AES128でのパーミュテーションとして、４バイトの巡回シフトを採用する。図９で示したように、AES128では、４バイトの巡回シフトによる並び替えを行って暗号化処理を行っても、最後に、逆並び替えを行えば、本来の暗号文を得ることができるためである。
【０１４６】
最初のパーミュテーション部３５０４では、乱数Rにしたがって４バイト単位の巡回シフトを行う。乱数Rがとりうる値はR={0,1,2,3}のいずれかとし、R*4バイト分の巡回シフトを行う。
【０１４７】
なお、ＡＥＳに適用可能なパーミュテーションとしては、４バイト巡回シフト以外にも存在する。例として、１〜４バイトを１列目、５〜８バイト目を２列目と４バイト単位で列を構成し、各列の内部で同じ巡回シフトを行う方法がある。この並び替えを行った例を以下に示す。
【０１４８】
2014119512.tif 000003
【０１４９】
2014119512.tif 000004
【０１５０】
非線形変換部３２００の各非線形変換テーブルＳ１〜Ｓ16は１バイト単位で処理を行う。
【０１５１】
本実施例で用いるマスク値（16バイト）は以下の通りとする。なお、数値は１６進法で表記している。
【０１５２】
SBOX入力側マスク Ma = {d7 30 50 e6 9b 2c bd 42 24 c7 8a b9 68 db 67 1d}
【０１５３】
SBOX出力側マスク Mb = {48 6a 74 71 7d 88 e2 19 f2 b4 fe 1e c7 56 68 76}
【０１５４】
初期加算のマスク Mp = Ma = {d7 30 50 e6 9b 2c bd 42 24 c7 8a b9 68 db 67 1d}
【０１５５】
最後のアンマスク Mc = {c7 6a e2 1e 48 88 fe 76 7d b4 68 71 f2 56 74 19}
【０１５６】
これらのマスクのうち、MpとMcは、図示されないROMに記憶される。
【０１５７】
一方、MaとMbは、非線形変換部３２００のSBOX（S1〜S16）３２０１〜３２１６に事前に反映しておく。元のSBOXの関数をS(x)とした場合、反映後のSBOX  Sn（x）は以下で与えられる。
【０１５８】
Sn（x）＝S(x(XOR)ma) (XOR) mb
【０１５９】
ここで、ma、mbはMaとMbの中のある１バイト分のマスク値を示す。
【０１６０】
マスク値の関係として、MaはMbに、ShiftRows, Mixcolumnsで演算した後、パーミュレーション（４バイト巡回シフト）をしたものとなる。
【０１６１】
MpはMaと等価である。
【０１６２】
Mcは、MbにShiftRows、パーミュテーション（４バイト巡回シフト）をしたものとなる。
【０１６３】
図１６は、図１５の実施例１の動作を説明するフローチャートである。図１５、図１６を参照して、実施例１の動作を説明する。
【０１６４】
はじめに、平文及び秘密鍵を暗号化処理回路へ入力し、平文は暗号化部１０００、秘密鍵は鍵生成部２０００へ入力される（ステップB1）。
【０１６５】
パーミュテーション部３５０４で乱数Rの分だけ、４バイト巡回シフトを、平文に対して行う（ステップB11）。
【０１６６】
排他的論理和３１０１で、平文とマスクMpとの排他的論理和が演算される。この演算により、平文にマスクがかかる（ステップB2）。
【０１６７】
次に、AddRoundKey３４０１で、平文とマスクMpとの排他的論理和に対して、鍵生成部２０００で生成されたラウンド鍵（秘密鍵）との排他的論理和を演算する（ステップB5-1）。このとき、ラウンド鍵はパーミュテーション部３５０３において、乱数Rの分だけ４バイト巡回シフトされている。
【０１６８】
マスク処理後、ラウンド処理としてステップB3〜B7が行われる。
【０１６９】
まず、非線形変換部３２００で、ステップB2の出力値を非線形変換し、Yを出力する（ステップB3）。非線形変換部３２００の内部では、ステップB2の出力値を１バイトごとに分割し、バイトごとにマスク付SBOX （S1〜S16）３２０１〜３２１６で非線形変換を行う。
【０１７０】
ShiftRows３３０１では、非線形変換部３２００の出力に対して、ShiftRows演算を行う（ステップB4-1）。
【０１７１】
MixColumns３３０２では、ShiftRows３３０１の出力に対して、MixColumns演算を行う（ステップB4-2）。
【０１７２】
AddRoundKey３４００では、MixColumnsの演算結果と、鍵生成部２０００で生成されたラウンド鍵をさらにパーミュテーション部３５０３において４バイト巡回シフトを数回行ったものとの排他的論理和を演算する（ステップB5-2）。
【０１７３】
パーミュテーション部３５０３で４バイト巡回シフトを行う回数Rotは、Rと、現在のラウンド数i（i=１〜１０）から以下のように計算される。
【０１７４】
Rot = (R + i -1 ) % 4     (%は剰余)
【０１７５】
パーミュテーション３５０１では、AddRoundKey３４００の演算結果を４バイト巡回シフトする（ステップB6）。
【０１７６】
パーミュテーション３５０１での演算後、現在のラウンドが９ラウンド目（次が最終ラウンド）かどうかを判断する（ステップB7）。次が最終ラウンドではない場合、ステップB3に戻りラウンド処理を繰り返す。一方、次が最終ラウンドの場合、ステップB3-1へ進む。
【０１７７】
１０ラウンド目では、MixColumnsの演算がスキップされる。そのため、非線形処理（ステップB3-1）、ShiftRows（ステップB4-1）、AddRoundKey(ステップB5-2)、パーミュテーション（ステップB6）が１〜９ラウンド目と同様に行われる。ここでラウンド処理が終了となる。
【０１７８】
続いて、排他的論理和演算部３１０２では、ラウンド処理の結果とアンマスクMcとの排他的論理和を演算する（ステップB8）。
【０１７９】
次に、パーミュテーション３５０２では、ラウンド処理の結果とアンマスクMcとの排他的論理和に対して、数回の４バイト巡回シフトを行う（ステップB9-1）。
ステップB9-1での巡回シフトの回数 IRotは、最初のR及び１０ラウンド分の４バイト巡回シフトされたデータを元の位置に戻すものとなり、次のように計算される。
【０１８０】
IRot = 4 - {(R+10) % 4} 
【０１８１】
最後に、パーミュテーション３５０２の巡回シフトの結果を暗号文として出力して終了する（ステップB10）。
【０１８２】
本実施例を適用したときのデータの遷移を、図１７〜図３５に示す。図１７〜図２０は、R＝0のときの遷移を示す図である（図１７：ラウンド０−２、図１８：ラウンド３−５、図１９：ラウンド６−８、図２０：ラウンド９、１０、Output）。Outputは、ラウンド処理を規定回数繰り返した後のパーミュテーション部１５０１の出力とアンマスクMcとの排他的論理和をとり、排他的論理和演算結果をパーミュテーション部１５０２で並び替える処理からなる。図２１〜図２４は、R=1のときの遷移を示す図である（図２１：ラウンド０−２、図２２：ラウンド３−５、図２３：ラウンド６−８、図２４：ラウンド９、１０、Output）。図２５〜図２８は、R=2のときの遷移を示す図である（図２５：ラウンド０−２、図２６：ラウンド３−５、図２７：ラウンド６−８、図２８：ラウンド９、１０、Output）。図２９〜図３２は、R=3のときの遷移を示す図である（図２９：ラウンド０−２、図３０：ラウンド３−５、図３１：ラウンド６−８、図３２：ラウンド９、１０、Output）。また比較例のAES１２８におけるデータ遷移を、図３３〜図３６に示す。図３７に、比較例のAESの暗号化部の回路構成を示す。
【０１８３】
図１７〜図３６では、以下のデータに対して処理を行っている。
【０１８４】
平文＝{32 43 f6 a8 88 5a 30 8d 31 31 98 a2 e0 37 07 34} 
【０１８５】
秘密鍵＝{2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 cf 4f 3c}
【０１８６】
暗号文＝{ 39 25 84 1d 02 dc 09 fb dc 11 85 97 19 6a 0b 32}
【０１８７】
SBOX入力側マスク Ma = {d7 30 50 e6 9b 2c bd 42 24 c7 8a b9 68 db 67 1d}
【０１８８】
SBOX出力側マスク Mb = {48 6a 74 71 7d 88 e2 19 f2 b4 fe 1e c7 56 68 76}
【０１８９】
初期加算のマスク Mp = Ma = {d7 30 50 e6 9b 2c bd 42 24 c7 8a b9 68 db 67 1d}
【０１９０】
最後のアンマスク Mc = {c7 6a e2 1e 48 88 fe 76 7d b4 68 71 f2 56 74 19}
【０１９１】
なお、１ラウンド目から１０ラウンド目のAfter AddInputMask、After SubBytes、After AddOutputMask、InputMask、OutputMaskは、データの遷移を示すために記載されているが、実際の処理では、Start of Roundの値が、図１５の非線形変換部３２００に入力されたら、After AddOutputMaskの値のみが出力される。そのため、After AddInputMask、After SubBytes、After InputMask、OutputMaskの値は、非線形変換部３２００の変換処理では現れない。
【０１９２】
（実施例２）
暗号として3D暗号を用いるときの暗号化処理回路を実施例２として説明する。
【０１９３】
はじめに、3D暗号を用いるときの暗号化処理回路の一般的な構成例を説明する。3D暗号とは、AESの暗号化処理を利用したアルゴリズム構造を持ち、AESが４ｘ４の16バイト（128ビット）を処理単位としているのに対し、3D暗号では４ｘ４ｘ４の64バイト（512ビット）の３次元ブロックを処理単位としている。また、このブロックに対してAES的処理と３次元的ラウンド関数が追加されている（非特許文献６参照）。3D暗号で扱われるデータ形式を次に示す。
【０１９４】
2014119512.tif 000005
【０１９５】
3D暗号では４ｘ４ｘ４の64バイト（512ビット）の３次元ブロックが1データブロックとなる。16バイト区切りで１スライスとし、１から16バイト目が１スライス目、17から32バイト目が2スライス目、33から48バイト目が3スライス目、49から64バイト目が4スライス目となる。
【０１９６】
図２３は、3D暗号の暗号化回路の構成（参考例）を示す図である。３D暗号の暗号化回路は、非線形変換部４６００、拡散関数部（θ）４３０１、最大距離分離行列演算部（π）４３０２、ラウンド鍵加算部（AddRoundKey）４４００、４４０１を備えている。
【０１９７】
非線形変換部４６００は、入力値Xを非線形変換し、変換結果を出力値Yとして出力する。非線形変換部４６００は、６４個の非線形変換テーブル（γ）４６０１〜４６６４で構成される。非線形変換テーブル（γ）４６０１〜４６６４では、AESのSBOX（Substitution Box）と同様の非線形変換を行う。
【０１９８】
拡散関数部(θ)４３０１では、非線形変換部４６００の出力値Yに対して拡散処理を行い、処理結果を最大距離分離行列演算部(π)４３０２へ出力する。拡散関数部（θ）４３０１は、拡散関数θ１又はθ２にしたがって拡散処理を行う。なお、奇数ラウンドでは、θ１による拡散を行い、偶数ラウンドではθ２による拡散を行う。
【０１９９】
θ１は、各スライスの中でShiftRowsを行う処理となる。θ２は、各スライスの１列目の４バイトを４列あわせたものを４ｘ４の行列とし、その行列に対して、ShiftRowsを行う。Xに対してθ１及びθ２を適用した場合の例を下に示す。
【０２００】
2014119512.tif 000006
【０２０１】
2014119512.tif 000007
【０２０２】
最大距離分離行列演算部（π）４３０２では、拡散関数部（θ）４３０１の処理結果の各スライスと、４ｘ４の最大距離分離行列（MDS）との積を計算する。最大距離分離行列演算部（π）４３０２で行われる計算の例として、Xの第１スライスとの計算を示す。
【０２０３】
2014119512.tif 000008
【０２０４】
なお、MDS内の要素は16進数となる。ラウンド鍵加算部（AddRoundKey）４４００、４４０１は最大距離分離行列演算部（π）４３０２の処理結果と512ビットのラウンド鍵との排他的論理和を演算し、演算結果を出力する。
【０２０５】
図３９は、図３８の参考例の動作を説明するフローチャートである。図３８、図３９を参照して、参考例の動作を説明する。
【０２０６】
はじめに、平文及び秘密鍵を暗号化処理回路へ入力し、平文は暗号化部１０００、秘密鍵は鍵生成部２０００へ入力される（ステップC1）。
【０２０７】
ラウンド鍵加算部（AddRoundKey）４４０１で、平文とラウンド鍵Kiとの排他的論理和を演算する（ステップC2）。
【０２０８】
排他的論理和後、ラウンド処理としてステップC3〜C7が行われる。
【０２０９】
まず、非線形変換部４６００で、ラウンド鍵加算部（AddRoundKey）４４００又は４４０１の出力結果の非線形変換を行う（ステップC3）。非線形変換部４６００の内部では、非線形変換部４６００への入力値を１バイトごとに分割し、非線形変換テーブル（γ）４６０１〜４６６４で非線形変換を行う。
【０２１０】
拡散関数部（θ）４３０１では、奇数ラウンド目であるか否かを判断する（ステップC4）。
【０２１１】
奇数ラウンド目の場合、非線形変換部４２００の出力に対して拡散関数θ１で拡散処理を行う（ステップC5-1）。
【０２１２】
偶数ラウンド目の場合、非線形変換部４２００の出力に対して拡散関数θ２で拡散処理を行う（ステップC5-2）。
【０２１３】
最大距離分離行列演算部（π）４３０２では、拡散関数部（θ）４３０１の出力とMDS行列πとの演算を行う（ステップC6）。
【０２１４】
ラウンド鍵加算部（AddRoundKey）４４００では、最大距離分離行列演算部（π）４３０２の演算結果と、鍵生成部２０００で生成されたラウンド鍵との排他的論理和を演算する（ステップC2）。
【０２１５】
ラウンド鍵加算部（AddRoundKey）４４００での演算後、現在のラウンドが、２１ラウンド目（次が最終ラウンド）であるか否かを判断する（ステップC7）。
【０２１６】
次が最終ラウンドではない場合には、ステップC3に戻りラウンド処理を繰り返す。次が最終ラウンドの場合、ステップC3-1へ進む。
【０２１７】
２２ラウンド目では、MDS行列πとの演算がスキップされる。そのため、非線形処理（ステップC3）、拡散処理θ２（ステップC5-2）、ラウンド鍵加算部（AddRoundKey）４００での処理(ステップC2)が行われる。ここでラウンド処理が終了となる。
【０２１８】
最後に、ラウンド鍵加算部（AddRoundKey）４４００の結果を暗号文として出力して終了する（ステップC8）。
【０２１９】
以上の３D暗号の暗号化処理回路へ本発明を適用した実施例２を示す。図４０は、実施例２の暗号化部の構成を示す図である。図３８の３D暗号の暗号化部の回路構成との相違点は、マスク演算用の排他的論理和演算部４１０１、４１０２とパーミュテーション部４５０１〜４５０４が追加された点と、図３８の非線形変換部４６００の代わりに、マスク付の非線形変換テーブル（γ１〜γ６４）４２０１〜４２６４を備える非線形変換部４２００を備えている点である。
【０２２０】
排他的論理和演算部４１０１、４１０２では、それぞれマスクMpとアンマスクMcとの排他的論理和を演算する。
【０２２１】
パーミュテーション部４５０１〜４５０４では、入力されたデータの並び替えを行う。
【０２２２】
非線形変換部４２００は入力されたデータの非線形変換を行う。非線形変換部４２００は６４個のマスク付非線形変換テーブル（γ１〜γ６４）４２０１〜４２６４を備える。非線形変換部４２００では、入力値を１バイトずつ６４個のデータに分割し、それぞれ非線形変換テーブル（γ１〜γ６４）４２０１〜４２６４でマスク付きの非線形変換処理を行う。
【０２２３】
非線形変換テーブル（γ１）４２０１では、１バイトの入力値とマスクm1aを排他的論理和で演算した値に対して、非線形変換テーブルγで非線形変換を行い、非線形変換した結果にマスクm1bを排他的論理和した値を出力値としてとる。
【０２２４】
実施例２のマスク値について説明する。３Ｄ暗号では奇数ラウンドと偶数ラウンドで拡散処理が変わるため、対策が必要となる。
【０２２５】
第１の対策は、奇数ラウンドと偶数ラウンドで非線形変換部を切り替える方法である。この対策をとったときの暗号化部１０００の構成例を図４１に示す。マスク値の組み合わせとして２通り用意し、それにあわせて、２つの非線形変換部４２０Aと４２０Bを備えている。第１、第２の非線形変換部４２０A、４２０Bの出力値は、セレクタ４２７０で選択される。奇数ラウンド時には、第１の非線形変換部４２０Aの出力値が、偶数ラウンド時には、第２の非線形変換部４２０Bの出力値が選択される。
【０２２６】
マスク値の設定では、第１の非線形選択部４２０Aの出力側マスクMb-A、第２の非線形選択部４２０１Bの出力側マスク Mb-Bは任意に設定できる。
【０２２７】
第１の非線形選択部４２０Aの入力側マスクMa-Aは、直前の偶数ラウンドでMb-Bに対して、θ２、π、及びパーミュテーションが行われたものとする。
【０２２８】
これにより、偶数ラウンド中に演算が行われたMb-Bを、次の奇数ラウンドの第１の非線形選択部４２０Aにて相殺することができる。
【０２２９】
一方、第２の非線形変換部４２０Bの入力側マスクMa-Bは、直前の偶数ラウンドでMb-Aに対してθ１、π、及びパーミュテーションが行われたものとする。
【０２３０】
これにより、奇数ラウンド中に演算が行われたMb-Aを、次の偶数ラウンドの第２の非線形選択部４２０Bにて相殺することができる。
【０２３１】
また、最初のマスクMpは、１ラウンド目は第１の非線形選択部４２０Aが選択されるため、Ma-Aと等しくなる。
【０２３２】
一方、Mcは、最後の２２ラウンド目には、πとの行列演算が行われないため、Mb-Bに対して、θ２とパーミュテーションが行われた値となる。
【０２３３】
こちらの対策では、非線形選択部を２つ用意する必要があるが、６４種類のマスク値を設定することが可能となる。
【０２３４】
２番目の対策は、出力側のマスクMbに対してθ１とθ２のどちらの演算が行われても、結果が等しくなるように、マスクを設定するものである。設定の仕方として、まず第１スライスにあたる１〜１６バイト目の出力側マスクMb1に任意の値を設定する。次に、１〜１６バイト目の入力側マスクMa1を求める。ここでは、Ma1はMb1に対してθ１とπ、及びパーミュテーションを行ったものとする。このMa1とMb1を基本として、他の３スライスのマスクを設定する。
【０２３５】
まず、第２スライスの１７〜３２バイト目の入力側マスクMa2と出力側マスクMb2は、それぞれMa1、Mb1を１２バイト巡回シフトしたものとする。
【０２３６】
第３スライスの３３〜４８バイト目の入力側マスクMa3と出力側マスクMb3は、それぞれMa1、Mb1を８バイト巡回シフトしたものとする。
【０２３７】
さらに、第４スライスの４９〜６４バイト目の入力側マスクMa4と出力側マスクMb4は、それぞれMa1、Mb1を４バイト巡回シフトしたものとする。
【０２３８】
以上の方法で設定した入力側マスクMaを以下に示す。
【０２３９】
2014119512.tif 000009
【０２４０】
このように設定することで、１つの非線形処理部を備えるだけで、ラウンド処理を繰り返すことができる。２つ目の対策では、非線形処理部は１つですむが、マスク値は１６種類のみ設定可能である。
【０２４１】
次に、実施例２における、パーミュテーションについて説明する。
【０２４２】
３Ｄ暗号に適用可能なパーミュテーションとして、各スライス内（１６バイトごと）の４バイト巡回シフトがあげられる。Xに対して、各スライス内（１６バイトごと）の４バイト巡回シフトを行った例P(X)を示す。以降の説明ではこの並び替えを実施するものとする。
【０２４３】
2014119512.tif 000010
【０２４４】
なお、別のパーミュテーションとしては、スライスごとシフトしてしまう方法がある。これは、１６バイト単位で巡回シフトすることと等しい。
【０２４５】
もう１つのパーミュテーションとして、１〜４バイトを１列目、５〜８バイト目を２列目と４バイト単位で列を構成し、各列の内部で同じ巡回シフトを行う方法がある。
【０２４６】
図４２は、実施例２の動作を説明するフローチャートである。図３９の比較例との相違点は、ステップＣ９、Ｃ１０、及び、ステップＣ１１〜１３が追加された点と、図３９のステップＣ３、Ｃ３−１が、マスク付非線形変換（ステップＣ３−２，３−３）に変更された点である。
【０２４７】
はじめに、平文及び秘密鍵を暗号化処理回路へ入力し、平文は暗号化部１０００、秘密鍵は鍵生成部２０００へ入力される（ステップC1）。
パーミュテーション部４５０４で、各スライス内での４バイト巡回シフトをR回行う（ステップC9）。
【０２４８】
排他的論理和演算部４１０１で、並び替えられた平文とマスクMpとの排他的論理和を演算する（ステップC10）。
【０２４９】
ラウンド鍵加算部（AddRoundKey）４４０１で、排他的論理和演算部４１０１の演算結果と鍵生成部２０００で生成されたラウンド鍵との排他的論理和を演算する。（ステップC2）。このとき、ラウンド鍵はパーミュテーション部４５０３において、乱数Rの分だけ各スライス内で４バイト巡回シフトされている。
【０２５０】
ラウンド鍵との排他的論理和後、ラウンド処理としてステップC3〜C7が行われる。
【０２５１】
まず、非線形変換部４２００で、ラウンド鍵加算部（AddRoundKey）４４０１又はパーミュテーション４５０１の出力結果の非線形変換を行う（ステップC3-2）。
【０２５２】
非線形変換部４２００の内部では、入力値を１バイトごとに分割し、マスク付非線形変換テーブル（γ１〜γ６４）４２０１〜４２６４で非線形変換を行う。
【０２５３】
拡散関数部（θ）４３０１では、奇数ラウンド目であるか否かを判断する（ステップC4）。
【０２５４】
奇数ラウンド目である場合、非線形変換部４２００の出力に対して拡散関数θ１で拡散処理を行う（ステップC5-1）。
【０２５５】
偶数ラウンド目である場合、非線形変換部４２００の出力に対して拡散関数θ２で拡散処理を行う（ステップC5-2）。
【０２５６】
最大距離分離行列演算部（π）４３０２では、拡散関数部（θ）４３０１の出力とMDS行列πとの演算を行う（ステップC6）。
【０２５７】
ラウンド鍵加算部（AddRoundKey）４４００では、最大距離分離行列演算部（π）４３０２の演算結果と、鍵生成部２０００で生成されたラウンド鍵との排他的論理和を演算する（ステップC2）。
【０２５８】
パーミュテーション部４５０３で各スライス内の４バイト巡回シフトを行う回数 Rotは、Rと、現在のラウンド数i（i=１〜１０）を使って次のように計算される。
【０２５９】
Rot = (R + i -1 ) % 4 (%は剰余)
【０２６０】
パーミュテーション４５０１では、ラウンド鍵加算部（AddRoundKey）４４００の出力結果に対してスライス内での４バイト巡回シフトを行う（ステップC11）。
【０２６１】
パーミュテーション４５０１での並び替え後、現在のラウンドが２１ラウンド目（次が最終ラウンド）であるか否かを判断する（ステップC7）。
【０２６２】
次が最終ラウンドではない場合、ステップC3-2に戻りラウンド処理を繰り返す。次が最終ラウンドの場合、ステップC3-3へ進む。
【０２６３】
２２ラウンド目では、MDS行列πとの演算がスキップされる。そのため、非線形処理（ステップC3-2）、拡散処理θ２（ステップC5-2）、ラウンド鍵加算（AddRoundKey）(ステップC2)、パーミュテーション（ステップC11）が行われる。ここでラウンド処理が終了となる。
【０２６４】
続いて、排他的論理和演算部４１０２では、ラウンド処理の結果とアンマスクMcとの排他的論理和を演算する（ステップC12）。
【０２６５】
次に、パーミュテーション４５０２では、ラウンド処理の結果とアンマスクMcとの排他的論理和に対して、数回の各スライス内での４バイト巡回シフトを実施する（ステップC13）。
【０２６６】
ステップC13での巡回シフトの回数 IRotは、最初のR及び２２ラウンド分の４バイト巡回シフトされたデータを元の位置に戻すものとなり、次のように計算される。
【０２６７】
IRot = 4 - {(R+22) % 4} 
【０２６８】
最後に、パーミュテーション４５０２の結果を暗号文として出力して終了する（ステップC8）。
【０２６９】
なお、上記実施形態１、２、実施例１、２の各暗号化処理回路は、ハードウェア、ソフトウェア又はこれらの組合わせにより実現することができる。また、上記の暗号化処理回路その他の装置等により行なわれる暗号化処理方法も、ハードウェア、ソフトウェア又はこれらに組合わせにより実現することができる。ここで、ソフトウェアによって実現されるとは、コンピュータがプログラムを読み込んで実行することにより実現されることを意味する。プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えば、フレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば、光磁気ディスク）、ＣＤ−ＲＯＭ(Read Only Memory)、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ(Programmable ROM)、ＥＰＲＯＭ(Erasable PROM)、フラッシュＲＯＭ、ＲＡＭ(random access memory)）を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【０２７０】
上記の実施形態及び実施例では、暗号化処理回路について説明したが、本発明を適用して、復号処理回路（すなわち、暗号解読処理回路）も、暗号化処理回路と同様な構成とすることができる。復号処理とは、暗号化処理とは逆に、暗号文を平文に戻す処理のことである。この場合、「暗号化」は、「復号」に置き換わる。
【０２７１】
例えば、図１において、「暗号化部１０００」は「復号部１０００」に置き換わる。図１において、暗号化部１０００を復号部とした場合、「暗号文」を入力とし、「平文」を出力とする。また、図２の暗号化部は、復号部に置き換わる。以下、図２の暗号化部を復号部とした場合を説明する。図２において、入力である暗号文は、図の右側から入力され、図２の左側の平文が復号結果として出力される。前記実施形態１で暗号化された暗号文は、復号部に入力され、復号部におけるパーミュテーション部１５０２において並び替えが行われる。復号部におけるパーミュテーション部１５０２での並び替えは、暗号化部での並び替えとは逆とされる。復号部における排他的論理和演算部１１０２でアンマスク値Mcとの排他的論理和がとられる。排他的論理和演算結果は、ｎ個に分割され、パーミュテーション部１５０１で並び替えが行われる。復号部におけるパーミュテーション部１５０１での並び替えは、暗号化部での並び替えとは逆とされる。鍵加算部１４００で、ラウンド鍵Kiとの加算（等価的に減算）が行われ、演算結果を線形変換部１３００で線形変換する。復号部における線形変換部１３００は、暗号化部における線形変換L(・)に対して逆変換L-1(・)となる。線形変換部１３００で逆変換した結果を、非線形変換部１２００のテーブル（S1〜Sn）に入力する。復号部におけるテーブル（S1〜Sn）は、暗号化部におけるテーブル（S1〜Sn）と入力と出力が逆となる（暗号化部におけるテーブルの出力を入力（テーブルインデックス）とし、暗号化部におけるテーブルの入力を、テーブルインデックスに対応する出力値とする）。また、復号部におけるテーブル（S1〜Sn）では、暗号化部におけるテーブルの出力側のマスクMbを入力側のマスクとし、暗号化部におけるテーブルの入力側のマスクMaを入力側のマスクとする。復号部において、規定回数のラウンド処理が繰り返されると、非線形変換部１２００のテーブル（S1〜Sn）のｎ個の出力値を結合した値に対して、排他的論理和演算部１１０１でマスク値Mpと排他的論理和をとった値が平文として出力される。また復号処理における動作は、例えば図８のフローチャートの終了A10を開始とし、ステップA10〜A2に逆順に実行することで、ステップA2の結果、平文が出力される。図１２、図１３を参照して説明した第２の実施形態の暗号化部についても、上記と同様にして、復号部が構成される（ただし、暗号化部におけるパーミュテーション部１５０４の並び換え回数である乱数（R）の値と、同一の並び換え回数が、復号部におけるパーミュテーション部１５０４に設定されるように構成される）。
【０２７２】
なお、以下では、サーチされた特許文献２と前記した実施形態との対比（相違点）について概説する。特許文献２（特開２００８−１３１１０８号）においては、第１の経路選択手段によってマスク値の順番を入れ替えた後、第２の経路選択手段によってマスク値の位置を元に戻すことで、非線形変換手段でマスク付きのまま処理を行うことを可能としており、第１、第２の経路選択手段を用いる必要がある。前記実施形態では、パーミュテーション処理を行う箇所は２〜４箇所存在するが、それらのパーミュテーション処理は、マスク値の位置を元に戻すことを目的とするものではない。パーミュテーション部１５０１は、次のラウンドで使用する非線形処理テーブルを切り替えるために、データを並び替える。パーミュテーション部１５０２は、これまでパーミュテーション部１５０１で行われてきた全ての並び替えを逆に行う等して、本来の位置に暗号文を戻す。パーミュテーション部１５０２は、最後の出力結果を得るために並び替えを行うものであり、マスク値の位置を元に戻して、非線形変換を行うためではない。また、パーミュテーション部１５０３は、これまでのラウンド処理でパーミュテーション部にて行われてきた全ての並び替え処理をラウンド鍵Kiに対して行う。これは、線形処理部１３００の出力Zとラウンド鍵Kiとのデータ位置の整合をとるためである。さらにパーミュテーション部１５０４は、入力された平文に対して並び替え処理を行うものである。このように、特許文献２の「経路選択回路２０４が、経路選択回路２０３の逆変換を実行するため、Ｓｂｏｘへのデータ入力時にはデータ順序が戻る」に対応する要素は存在しない。
【０２７３】
上記した実施形態、実施例の少なくとも一部は以下のように付記される（ただし、以下に制限されない）。
【０２７４】
（付記１)
暗号鍵を用いて平文を複数のラウンドで暗号化する暗号化処理回路であって、
暗号化処理回路は、第１、第２の排他的論理和演算部と、非線形変換部と、線形変換部、第１、第２のパーミュテーション部と、を備え、
前記第１の排他的論理和演算部は、平文とマスク値との排他的論理和をとり、
前記非線形変換部は、複数のテーブルを備え、
前記テーブルの入力及び出力にそれぞれマスク値をかけ、
前記テーブルの入力に対して、入力側のマスクをかけることで、マスク前の値に変換し、前記マスク前の値を用いて前記テーブルに従った非線形変換を行い、
前記非線形変換した値に対して、出力側のマスクをかけた値を出力し、
前記線形変換部は、入力された複数の値に対して、線形変換をとり、入力は前記非線形変換部の出力と結合されており、
前記第１のパーミュテーション部は、入力されたデータ列の並び替えを行い、入力は前記線形変換部の出力と結合されており、
前記第２の排他的論理和演算部は、ラウンド処理終了後のデータ列とアンマスク値との排他的論理和をとり、
前記第２のパーミュテーション部は、ラウンド処理終了後のデータ列とアンマスク値との排他的論理和の出力結果の並び替えを行い、並び替えた結果を暗号文として出力すること、を特徴とする、暗号化処理回路。
【０２７５】
（付記２）
前記入力側マスク値と前記出力側マスク値は固定値であり、前記入力側マスクは、前記出力側マスクを前記線形変換部、及び、前記第１のパーミュテーション部で変換した値であることを特徴とする付記１に記載の暗号化処理回路。
【０２７６】
（付記３）
前記第１のパーミュテーション部で行う並び替えは、任意のデータ列を、前記非線形変換部で非線形変換し、さらに前記線形変換部で線形変換した結果を前記第１のパーミュテーション部で並び替えた第１の結果と、
同じデータ列を前記第１のパーミュテーション部で並び替えた結果を前記非線形変換部で非線形変換し、さらに前記線形変換部で線形変換した第２の結果と、が互いに等しくとなるような並び替えを行うことを特徴とする付記１又は２に記載の暗号化処理回路。
【０２７７】
（付記４）
第３のパーミュテーション部を備え、前記第３のパーミュテーション部は、平文の並び替えを行い、前記前記第３のパーミュテーション部で並び替えた平文を前記第１の排他的論理和演算部に入力することを特徴とする付記１乃至３のいずれか一に記載の暗号化処理回路。
【０２７８】
（付記５）
暗号化アルゴリズムとしてAESを対象とし、前記第１のパーミュテーション部では、４の倍数のバイトの巡回シフトによって並び替えを行い、
前記第２のパーミュテーション部では、４の倍数のバイトでの巡回シフトによって暗号文を出力することを特徴とする付記１乃至３のいずれか一に暗号化処理回路。
【０２７９】
（付記６）
暗号化アルゴリズムとしてAESを対象とし、
前記第１のパーミュテーション部では、４の倍数のバイトでの巡回シフトによって並び替えを行い、
前記第２のパーミュテーション部では、４の倍数のバイトでの巡回シフトによって暗号文を出力し、
前記第３のパーミュテーション部では、４の倍数のバイトでの巡回シフトによって平文の並び替えを行うことを特徴とする付記４記載の暗号化処理回路。
【０２８０】
（付記７）
暗号化アルゴリズムとしてAESを対象とし、
前記第１のパーミュテーション部では、４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えを行い、
前記第２のパーミュテーション部では、４バイトごとに列を構成し、各列の中で同じ巡回シフトによって暗号文を出力することを特徴とする付記１乃至３のいずれか一に記載の暗号化処理回路。
【０２８１】
（付記８）
暗号化アルゴリズムとしてAESを対象とし、
前記第１のパーミュテーション部では、４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えを行い、
前記第２のパーミュテーション部では、４バイトごとに列を構成し、各列の中で同じ巡回シフトによって暗号文を出力し、
前記第３のパーミュテーション部では、４バイトごとに列を構成し、各列の中で同じ巡回シフトによって平文の並び替えを行うことを特徴とする付記４に記載の暗号化処理回路。
【０２８２】
（付記９）
暗号化アルゴリズムとして３Ｄ暗号を対象とし、
第１のスライスにかかるマスクに対して、第２のスライスにかかるマスクは前記第１のスライスにかかるマスクを12バイト巡回シフトした値であり、
第３のスライスにかかるマスクは前記第１のスライスにかかるマスクを８バイト巡回シフトした値であり、
第４のスライスにかかるマスクは前記第１のスライスにかかるマスクを４バイト巡回シフトした値であることを特徴とする付記１乃至４のいずれか一に記載の暗号化処理回路。
【０２８３】
（付記１０）
暗号化アルゴリズムとして３Ｄ暗号を対象とし、
前記第１のパーミュテーション部では、第１のスライスの中で４の倍数のバイトでの巡回シフトによって並び替えを行い、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
前記第２のパーミュテーション部では、第１のスライスの中で４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果を結合したものを暗号文とする、ことを特徴とする付記１乃至３、９のいずれか一に記載の暗号化処理回路。
【０２８４】
（付記１１）
暗号化アルゴリズムとして３Ｄ暗号を対象とし、
前記第１のパーミュテーション部では、第１のスライスの中で４の倍数のバイトでの巡回シフトによって並び替えを行い、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
前記第２のパーミュテーション部では、第１のスライスの中で４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果を結合したものを暗号文とすること、
前記第３のパーミュテーション部では、第１のスライスの中で４の倍数のバイトでの巡回シフトによって平文を並び替え、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって平文を並び替え、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって平文を並び替え、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって平文を並び替えることを特徴とする付記４又は９に記載の暗号化処理回路。
【０２８５】
（付記１２）
平文とマスク値との排他的論理和をとる第１の排他的論理和演算部と、
入力値を複数に分割した値をそれぞれ非線形変換する複数のテーブルを含む非線形変換部と、
前記非線形変換部の前記複数のテーブルから出力された複数の値に対して線形変換を施す線形変換部と、
前記線形変換部の出力とラウンド鍵とを加算する鍵加算部と、
前記鍵加算部の出力の並び替えを行う第１のパーミュテーション部と、
を備え、
初回のラウンド処理では、前記非線形変換部には、前記第１の排他的論理和演算部の出力が入力され、２回目以降のラウンド処理では前記非線形変換部には、前回のラウンド処理での前記第１のパーミュテーション部の出力が入力され、
前記非線形変換部において、前記テーブルは、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記非線形変換部、前記線形変換部、前記鍵加算部、及び、前記第１のパーミュテーション部によるラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後の前記第１のパーミュテーション部の出力とアンマスク値との排他的論理和をとる第２の排他的論理和演算部と、
前記第２の排他的論理和演算部の出力を並び替え暗号文として出力する第２のパーミュテーション部と、
を備えたことを特徴とする暗号化処理回路。
【０２８６】
（付記１３)
前記非線形変換部において、前記テーブルの入力に対して、入力側のマスクをかけることで、マスク前の値に変換し、前記マスク前の値を用いて前記テーブルに従った非線形変換を行うことを特徴とする付記１２記載の暗号化処理回路。
【０２８７】
（付記１４)
前記入力側のマスク値は、前記出力側のマスク値を、前記線形変換部と前記第１のパーミュテーション部で変換した値であることを特徴とする付記１２又は１３記載の暗号化処理回路。
【０２８８】
（付記１５)
前記平文の並び替えを行う第３のパーミュテーション部をさらに備え、
前記第１の排他的論理和演算部は、前記第３のパーミュテーション部の出力とマスク値との排他的論理和をとることを特徴とする付記１２乃至１４のいずれか一に記載の暗号化処理回路。
【０２８９】
（付記１６)
前記第１のパーミュテーション部での並び替えに対応して前記ラウンド鍵の並び替えを行い、前記鍵加算部に供給する第４のパーミュテーション部を備えたことを特徴とする付記１２乃至１５のいずれか一に記載の暗号化処理回路。
【０２９０】
（付記１７）
データ処理装置による暗号化処理方法であって、
平文とマスク値との排他的論理和をとる第１の排他的論理和工程と、
入力値を複数に分割した値をそれぞれ複数のテーブルを用いて非線形変換するにあたり、前記テーブルへの入力に対して入力側のマスクと排他的論理和をとった値を用いて、前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して、出力側のマスク値と排他的論理和をとった値を出力する非線形変換工程と、
前記非線形変換工程から出力された複数の値に対して線形変換を施す線形変換工程と、
前記線形変換された値とラウンド鍵とを加算する鍵加算工程と、
前記鍵加算工程による加算結果の並び替えを行う第１のパーミュテーション工程と、
を含み、
初回のラウンド処理では、前記非線形変換工程には、前記第１の排他的論理和工程の演算結果が入力され、２回目以降のラウンド処理では、前記非線形変換工程には、前回のラウンド処理における前記第１のパーミュテーション工程の出力が入力され、
前記非線形変換工程、前記線形変換工程、前記鍵加算工程、前記第１のパーミュテーション工程によるラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後の前記第１のパーミュテーション工程の出力とアンマスク値との排他的論理和をとる第２の排他的論理和工程と、
前記第２の排他的論理和工程の演算結果を並び替え暗号文として出力する第２のパーミュテーション工程と、
をさらに含むことを特徴とする暗号化処理方法。
【０２９１】
（付記１８)
前記非線形変換工程において、前記テーブルの入力に対して、入力側のマスクをかけることで、マスク前の値に変換し、前記マスク前の値を用いて前記テーブルに従った非線形変換を行うことを特徴とする付記１７記載の暗号化処理方法。
【０２９２】
（付記１９)
前記入力側のマスク値は、前記出力側のマスク値を、前記線形変換工程と前記第１のパーミュテーション工程で変換した値であることを特徴とする付記１７又は１８記載の暗号化処理方法。
【０２９３】
（付記２０)
前記第１のパーミュテーション工程での並び替えに対応して前記ラウンド鍵の並び替えを行い、前記鍵加算工程に供給する第４のパーミュテーション工程を含むことを特徴とする付記１７乃至１９のいずれか一に記載の暗号化処理方法。
【０２９４】
（付記２１)
前記第１のパーミュテーション工程は、
前記非線形変換工程で非線形変換し、前記線形変換工程で線形変換した結果を、前記第１のパーミュテーション工程で並び替えた結果と、
前記第１のパーミュテーション工程で並び替えた結果を、前記非線形変換工程で非線形変換し、前記線形変換工程で線形変換した結果と、
が互いに一致するような並び替えを行う、ことを特徴とする付記１７乃至２０のいずれか一に記載の暗号化処理方法。
【０２９５】
（付記２２)
前記平文の並び替えを行う第３のパーミュテーション工程をさらに備え、
前記第１の排他的論理和工程は、前記第３のパーミュテーション工程の出力とマスク値との排他的論理和をとることを特徴とする付記１７乃至２１のいずれか一に記載の暗号化処理方法。
【０２９６】
（付記２３）
暗号化アルゴリズムとしてAES（Advanced Encryption Standard）を対象とし、
前記第１のパーミュテーション工程は、４の倍数のバイトの巡回シフトによって並び替えを行い、
前記第２のパーミュテーション工程は、４の倍数のバイトでの巡回シフトによって暗号文を出力する、ことを特徴とする、付記１７乃至２１のいずれか一に記載の暗号化処理方法。
【０２９７】
（付記２４）
暗号化アルゴリズムとしてAES（Advanced Encryption Standard）を対象とし、
前記第１及び第３のパーミュテーション工程は、４の倍数のバイトでの巡回シフトによって並び替えを行い、
前記第２のパーミュテーション工程は、４の倍数のバイトでの巡回シフトによって暗号文を出力する、ことを特徴とする付記２２記載の暗号化処理方法。
【０２９８】
（付記２５）
暗号化アルゴリズムとしてAES（Advanced Encryption Standard）を対象とし、
前記第１のパーミュテーション工程は、４バイトごとに列を構成し各列の中で同じ巡回シフトによって並び替えを行い、
前記第２のパーミュテーション工程は、４バイトごとに列を構成し各列の中で同じ巡回シフトによって暗号文を出力する、ことを特徴とする、付記１７乃至２１のいずれか一に記載の暗号化処理方法
【０２９９】
（付記２６）
暗号化アルゴリズムとしてAES（Advanced Encryption Standard）を対象とし、
前記第１及び第３のパーミュテーション工程は、４バイトごとに列を構成し各列の中で同じ巡回シフトによって並び替えを行い、
前記第２のパーミュテーション工程は、４バイトごとに列を構成し各列の中で同じ巡回シフトによって暗号文を出力する、ことを特徴とする、付記２２記載の暗号化処理方法。
【０３００】
（付記２７）
暗号化アルゴリズムとして３Ｄ暗号を対象とし、
入力側マスクは出力側マスクを、前記線形変換処理及び前記第１のパーミュテーション処理で変換した値であり、
第１のスライスにかかるマスクに対して、
第２のスライスにかかるマスクは、前記第１のスライスにかかるマスクを12バイト巡回シフトした値であり、
第３のスライスにかかるマスクは、前記第１のスライスにかかるマスクを８バイト巡回シフトした値であり、
第４のスライスにかかるマスクは、前記第１のスライスにかかるマスクを４バイト巡回シフトした値である、ことを特徴とする付記１７乃至２１のいずれか一に記載の暗号化処理方法。
【０３０１】
（付記２８）
暗号化アルゴリズムとして３Ｄ暗号を対象とし、
前記第１のパーミュテーション工程では、
第１のスライスの中で４の倍数のバイトでの巡回シフトによって並び替えを行い、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
前記第２のパーミュテーション工程では、
第１のスライスの中で、４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
を結合したものを暗号文とする、ことを特徴とする付記１７乃至２１のいずれか一に記載の暗号化処理方法。
【０３０２】
（付記２９）
暗号化アルゴリズムとして３Ｄ暗号を対象とし、
前記第１のパーミュテーション工程では、
第１のスライスの中で４の倍数のバイトでの巡回シフトによって並び替えを行い、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
前記第２のパーミュテーション工程では、
第１のスライスの中で４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果を結合したものを暗号文とすること、
前記第３のパーミュテーション工程では、
第１のスライスの中で４の倍数のバイトでの巡回シフトによって平文を並び替え、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって平文を並び替え、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって平文を並び替え、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって平文を並び替える、ことを特徴とする、付記２２記載の暗号化処理方法。
【０３０３】
（付記３０）
データ処理装置に暗号化処理を実行させるプログラムであって、
平文とマスク値との排他的論理和をとる第１の排他的論理和処理と、
入力値を複数に分割した値をそれぞれ複数のテーブルを用いて非線形変換するにあたり、前記テーブルへの入力に対して入力側のマスクと排他的論理和をとった値を用いて、前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して、出力側のマスク値と排他的論理和をとった値を出力する非線形変換処理と、
前記非線形変換処理から出力された複数の値に対して線形変換を施す線形変換処理と、
前記線形変換された値とラウンド鍵とを加算する鍵加算処理と、
前記鍵加算処理による加算結果の並び替えを行う第１のパーミュテーション処理と、
を含み、
初回のラウンド処理では、前記非線形変換処理には、前記第１の排他的論理和処理の演算結果が入力され、２回目以降のラウンド処理では、前記非線形変換工程には、前回のラウンド処理における前記第１のパーミュテーション工程の出力が入力され、前記非線形変換処理、前記線形変換処理、前記鍵加算処理、前記第１のパーミュテーション処理のラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後における前記第１のパーミュテーション処理の出力とアンマスク値との排他的論理和をとる第２の排他的論理和処理と、
前記第２の排他的論理和処理の演算結果を並び替え暗号文として出力する第２のパーミュテーション処理と、
を含む、ことを特徴とするプログラム。
【０３０４】
（付記３１)
前記非線形変換処理において、前記テーブルの入力に対して、入力側のマスクをかけることで、マスク前の値に変換し、前記マスク前の値を用いて前記テーブルに従った非線形変換を行うことを特徴とする付記３０記載のプログラム。
【０３０５】
（付記３２)
前記入力側のマスク値は、前記出力側のマスク値を、前記線形変換処理と前記第１のパーミュテーション処理で変換した値であることを特徴とする付記３０又は３１記載のプログラム。
【０３０６】
（付記３３)
前記第１のパーミュテーション処理での並び替えに対応して前記ラウンド鍵の並び替えを行い、前記鍵加算処理に供給する第４のパーミュテーション処理を含むことを特徴とする付記３０乃至３２のいずれか一に記載のプログラム。
【０３０７】
（付記３４）
前記第１のパーミュテーション処理は、
前記非線形変換処理で非線形変換し、前記線形変換処理で線形変換した結果を、前記第１のパーミュテーション処理で並び替えた結果と、
前記第１のパーミュテーション処理で並び替えた結果を、前記非線形変換処理で非線形変換し、前記線形変換処理で線形変換した結果と、
が互いに一致するような並び替えを行う、ことを特徴とする付記３０乃至３３のいずれか一に記載のプログラム。
【０３０８】
（付記３５)
前記平文の並び替えを行う第３のパーミュテーション処理をさらに備え、
前記第１の排他的論理和処理は、前記第３のパーミュテーション処理の出力とマスク値との排他的論理和をとることを特徴とする付記３０乃至３４いずれか一に記載のプログラム。
【０３０９】
（付記３６）
暗号化アルゴリズムとしてAES（Advanced Encryption Standard）を対象とし、
前記第１のパーミュテーション処理は、４の倍数のバイトの巡回シフトによって並び替えを行い、
前記第２のパーミュテーション処理は、４の倍数のバイトでの巡回シフトによって暗号文を出力する、ことを特徴とする、付記３０乃至３４のいずれか一に記載のプログラム。
【０３１０】
（付記３７）
暗号化アルゴリズムとしてAES（Advanced Encryption Standard）を対象とし、
前記第１及び第３のパーミュテーション処理は、４の倍数のバイトでの巡回シフトによって並び替えを行い、
前記第２のパーミュテーション処理は、４の倍数のバイトでの巡回シフトによって暗号文を出力する、ことを特徴とする付記３５記載のプログラム。
【０３１１】
（付記３８）
暗号化アルゴリズムとしてAES（Advanced Encryption Standard）を対象とし、
前記第１のパーミュテーション処理は、４バイトごとに列を構成し各列の中で同じ巡回シフトによって並び替えを行い、
前記第２のパーミュテーション処理は、４バイトごとに列を構成し各列の中で同じ巡回シフトによって暗号文を出力する、ことを特徴とする、付記３０乃至３４のいずれか一に記載のプログラム。
【０３１２】
（付記３９）
暗号化アルゴリズムとしてAES（Advanced Encryption Standard）を対象とし、
前記第１及び第３のパーミュテーション処理は、４バイトごとに列を構成し各列の中で同じ巡回シフトによって並び替えを行い、
前記第２のパーミュテーション処理は、４バイトごとに列を構成し各列の中で同じ巡回シフトによって暗号文を出力する、ことを特徴とする、付記３５記載のプログラム。
【０３１３】
（付記４０）
暗号化アルゴリズムとして３Ｄ暗号を対象とし、
第１のスライスにかかるマスクに対して、
第２のスライスにかかるマスクは、前記第１のスライスにかかるマスクを12バイト巡回シフトした値であり、
第３のスライスにかかるマスクは、前記第１のスライスにかかるマスクを８バイト巡回シフトした値であり、
第４のスライスにかかるマスクは、前記第１のスライスにかかるマスクを４バイト巡回シフトした値である、ことを特徴とする付記３０乃至３４のいずれか一に記載のプログラム。
【０３１４】
（付記４１）
暗号化アルゴリズムとして３Ｄ暗号を対象とし、
前記第１のパーミュテーション処理では、
第１のスライスの中で４の倍数のバイトでの巡回シフトによって並び替えを行い、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
前記第２のパーミュテーション処理では、
第１のスライスの中で、４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、を結合したものを暗号文とする、ことを特徴とする付記３０乃至３４のいずれか一に記載のプログラム。
【０３１５】
（付記４２）
暗号化アルゴリズムとして３Ｄ暗号を対象とし、
前記第１のパーミュテーション処理では、
第１のスライスの中で４の倍数のバイトでの巡回シフトによって並び替えを行い、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、
前記第２のパーミュテーション処理では、
第１のスライスの中で４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果と、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行った結果を結合したものを暗号文とすること、
前記第３のパーミュテーション処理では、
第１のスライスの中で４の倍数のバイトでの巡回シフトによって平文を並び替え、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって平文を並び替え、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって平文を並び替え、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって平文を並び替える、ことを特徴とする、付記３５記載のプログラム。
【０３１６】
（付記４３）
暗号文を入力して並び替える第１のパーミュテーション部と、
前記第１のパーミュテーション部の出力とアンマスク値との排他的論理和をとる第１の排他的論理和演算部と、
入力値の並び替えを行う第２のパーミュテーション部と、
前記第２のパーミュテーション部の出力とラウンド鍵とを加算する鍵加算部と、
前記鍵加算部の出力に線形変換を施す線形変換部と、
前記線形変換部の出力を複数に分割した値をそれぞれ入力し非線形変換する複数のテーブルを含む非線形変換部と、
を備え、
前記非線形変換部において、前記テーブルは、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて、前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
初回のラウンド処理では、前記第２のパーミュテーション部には、前記第１の排他的論理和演算部の出力が入力され、２回目以降ラウンド処理では、前記第２のパーミュテーション部には、前回のラウンド処理における前記非線形変換部の出力が入力され、
前記第２のパーミュテーション部、前記鍵加算部、前記線形変換部、及び前記非線形変換部によるラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後の前記非線形変換部の出力とマスク値との排他的論理和をとり、排他的論理和演算結果を平文として出力する第２の排他的論理和演算部と、を備えたことを特徴とする復号処理回路。
【０３１７】
（付記４４)
前記暗号文は、付記１の暗号化処理回路で暗号化されたものであり、
前記第１のパーミュテーション部、前記第２のパーミュテーション部、前記線形変換部、前記非線形変換部は、それぞれ、付記１の暗号化処理回路の前記第２のパーミュテーション部、前記第１のパーミュテーション部、前記線形変換部、前記非線形変換部と逆の並び換え／変換を行う、ことを特徴とする付記４３記載の復号処理回路。
【０３１８】
（付記４５）
データ処理装置による復号処理方法であって、
暗号文を入力して並び替える第１のパーミュテーション工程と、
前記第１のパーミュテーション工程の出力とアンマスク値との排他的論理和をとる第１の排他的論理和工程と、
入力値の並び替えを行う第２のパーミュテーション工程と、
前記第２のパーミュテーション工程の出力とラウンド鍵とを加算する鍵加算工程と、
前記鍵加算工程の出力に線形変換を施す線形変換工程と、
前記線形変換工程の出力を複数に分割した値をそれぞれ入力し非線形変換する複数のテーブルを含む非線形変換工程と、
を含み、
前記非線形変換工程において、前記テーブルは、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて、前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
初回のラウンド工程では、前記第２のパーミュテーション工程には、前記第１の排他的論理和工程の出力が入力され、２回目以降ラウンド工程では、前記第２のパーミュテーション工程には、前回のラウンド処理における前記非線形変換工程の出力が入力され、
前記第２のパーミュテーション工程、前記鍵加算工程、前記線形変換工程、及び前記非線形変換工程によるラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後の前記非線形変換工程の出力とマスク値との排他的論理和をとり、排他的論理和演算結果を、平文として出力する第２の排他的論理和工程と、を含むことを特徴とする復号処理方法。
【０３１９】
（付記４６)
前記暗号文は、付記１６の暗号化処理回路で暗号化されたものであり、
前記第１のパーミュテーション工程、前記第２のパーミュテーション工程、前記線形変換工程、前記非線形変換工程は、それぞれ、付記１６の暗号化処理回路の前記第２のパーミュテーション工程、前記第１のパーミュテーション工程、前記線形変換工程、前記非線形変換工程と逆の並び換え／変換を行う、ことを特徴とする付記４３記載の復号処理回路。
【０３２０】
（付記４７）
データ処理装置による復号処理を実行させるプログラムであって、
暗号文を入力して並び替える第１のパーミュテーション処理と、
前記第１のパーミュテーション処理の出力とアンマスク値との排他的論理和をとる第１の排他的論理和処理と、
入力値の並び替えを行う第２のパーミュテーション処理と、
前記第２のパーミュテーション処理の出力とラウンド鍵とを加算する鍵加算処理と、
前記鍵加算処理の出力に線形変換を施す線形変換処理と、
前記線形変換処理の出力を複数に分割した値をそれぞれ入力し非線形変換する複数のテーブルを含む非線形変換処理と、
を含み、
前記非線形変換処理において、前記テーブルは、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて、前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
初回のラウンド処理では、前記第２のパーミュテーション処理には、前記第１の排他的論理和処理の出力が入力され、２回目以降ラウンド処理では、前記第２のパーミュテーション処理には、前回のラウンド処理における前記非線形変換処理の出力が入力され、
前記第２のパーミュテーション処理、前記鍵加算処理、前記線形変換処理、及び前記非線形変換処理によるラウンド処理が規定回数行われ、
前記規定回数のラウンド処理終了後の前記非線形変換処理の出力とマスク値との排他的論理和をとり排他的論理和演算結果を平文として出力する第２の排他的論理和処理と、を含むことを特徴とするプログラム。
【０３２１】
（付記４８)
前記暗号文は、付記３０のプログラムを前記データ処理装置で実行することで暗号化されたものであり、
前記第１のパーミュテーション処理、前記第２のパーミュテーション処理、前記線形変換処理、前記非線形変換処理は、それぞれ、付記２９のプログラムにおける前記第２のパーミュテーション処理、前記第１のパーミュテーション処理、前記線形変換処理、前記非線形変換処理と逆の並び換え／変換を行う、ことを特徴とする付記４７記載のプログラム。
【０３２２】
なお、上記の特許文献、非特許文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各付記の各要素、各実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、乃至選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０３２３】
１０００  暗号化部
１１０１、１１０２  排他的論理和演算部
１２００  非線形変換部
１２０１  非線形変換テーブル（S1）
１２０２  非線形変換テーブル（S2）
１２０３  非線形変換テーブル（S3）
１２０４  非線形変換テーブル（Sn）
１２１１〜１２１８  排他的論理和演算部
１２２１〜１２２４  非線形変換テーブル（S）
１３００  線形変換処理
１４００  鍵加算処理
１４１１〜１４１４  排他的論理和演算部
１５０１〜１５０４  パーミュテーション部
１６００  非線形変換部（AES）
１７００  非線形変換部（RSM）
１７０１  バレルシフト
１７０２  バレルシフト
１８００  MMSj+1加算部
１９００  乱数発生器
２０００  鍵生成部
２００１  パーミュテーション付鍵生成部
３１０１、３１０２  排他的論理和演算部
３２００  非線形変換部
３２０１  マスク付SBOX（S1）
３２０２  マスク付SBOX（S2）
３２０３  マスク付SBOX（S3）
３２０４  マスク付SBOX（S4）
３２０５  マスク付SBOX（S5）
３２１６  マスク付SBOX（S16）
３３０１  ShiftRows
３３０２  MixColumns
３４００  AddRoundKey
３４０１  AddRoundKey（ラウンド０）
３５０１  パーミュテーション
３５０２  パーミュテーション
３５０３  パーミュテーション
３５０４  パーミュテーション
３６００  非線形変換部
３６０１  SBOX（S）
３６０２  SBOX（S）
３６１６  SBOX（S）
４１０１  排他的論理和演算部
４１０２  排他的論理和演算部
４２００  非線形変換部
４２０１  マスク付非線形変換テーブル（γ１）
４２０２  マスク付非線形変換テーブル（γ２）
４２６４  マスク付非線形変換テーブル（γ６４）
４２０Ａ  非線形変換部
４２０Ｂ  非線形変換部
４２０１Ａ  マスク付非線形変換テーブル（γ１）
４２０２Ａ  マスク付非線形変換テーブル（γ２）
４２６４Ａ  マスク付非線形変換テーブル（γ６４）
４２０１Ｂ  マスク付非線形変換テーブル（γ’１）
４２０２Ｂ  マスク付非線形変換テーブル（γ’２）
４２６４Ｂ  マスク付非線形変換テーブル（γ’６４）
４２７０  セレクタ
４３０１  拡散関数部（θ）
４３０２  最大距離分離行列演算部（π）
４４００  AddRoundKey
４４０１  AddRoundKey（ラウンド０）
４５０１  パーミュテーション
４５０２  パーミュテーション
４５０３  パーミュテーション
４５０４  パーミュテーション
４６００  非線形変換部
４６０１、４６０２、４６１６  非線形変換テーブル（γ）
【図１】
2014119512.tif 000011
【図２】
2014119512.tif 000012
【図３】
2014119512.tif 000013
【図４】
2014119512.tif 000014
【図５】
2014119512.tif 000015
【図６】
2014119512.tif 000016
【図７】
2014119512.tif 000017
【図８】
2014119512.tif 000018
【図９】
2014119512.tif 000019
【図１０】
2014119512.tif 000020
【図１１】
2014119512.tif 000021
【図１２】
2014119512.tif 000022
【図１３】
2014119512.tif 000023
【図１４】
2014119512.tif 000024
【図１５】
2014119512.tif 000025
【図１６】
2014119512.tif 000026
【図１７】
2014119512.tif 000027
【図１８】
2014119512.tif 000028
【図１９】
2014119512.tif 000029
【図２０】
2014119512.tif 000030
【図２１】
2014119512.tif 000031
【図２２】
2014119512.tif 000032
【図２３】
2014119512.tif 000033
【図２４】
2014119512.tif 000034
【図２５】
2014119512.tif 000035
【図２６】
2014119512.tif 000036
【図２７】
2014119512.tif 000037
【図２８】
2014119512.tif 000038
【図２９】
2014119512.tif 000039
【図３０】
2014119512.tif 000040
【図３１】
2014119512.tif 000041
【図３２】
2014119512.tif 000042
【図３３】
2014119512.tif 000043
【図３４】
2014119512.tif 000044
【図３５】
2014119512.tif 000045
【図３６】
2014119512.tif 000046
【図３７】
2014119512.tif 000047
【図３８】
2014119512.tif 000048
【図３９】
2014119512.tif 000049
【図４０】
2014119512.tif 000050
【図４１】
2014119512.tif 000051
【図４２】
2014119512.tif 000052