(57)【要約】初期マスク演算部（１１０１）は平文と初期マスク値との排他的論理和をとり、第１のパーミュテーション部（１３０１）は非線形変換部（１４００）への入力の並び替えを行い、非線形変換部（１４００）は複数の非線形変換用のテーブルへの入力に対してマスクをかけ前記テーブルに従った非線形変換を行い前記非線形変換した値に対して出力側のマスクをかけた値を出力し、第２のパーミュテーション部（１３０２）は非線形変換部（１４００）からの出力の並び替えを行い、線形変換部（１５００）は第２のパーミュテーション部（１３０２）の出力に基づいて線形変換を施し、アンマスク演算部（１１０２）はラウンド処理終了後の出力とアンマスク値との排他的論理和をとり、結果を暗号文として出力する。
2015059845.tif 000002
【特許請求の範囲】
【請求項１】
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択手段と、
複数の初期マスク値の中から、前記選択値の初期値に対応した初期マスク値を選択し、選択した初期マスク値と入力した平文との排他的論理和をとり、入力データ列の初期値とする初期マスク演算手段と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択手段からの選択値に対応したパターンの並べ替えを行い、並び替えた結果を出力する第１のパーミュテーション手段と、
前記第１のパーミュテーション手段の出力を複数に分割した値をそれぞれ非線形変換する複数のテーブルを含む非線形変換手段と、
前記非線形変換手段の複数の出力値を結合したデータ列に対して、前記選択手段からの前記選択値に応じて、前記第１のパーミュテーション手段とは逆のパターンの並び替えを行う第２のパーミュテーション手段と、
前記第２のパーミュテーション手段の出力に基づいて線形変換を施す第１の線形変換手段と、
を備え、
前記非線形変換手段は、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション手段、前記非線形変換手段、前記第２のパーミュテーション手段及び前記第１の線形変換手段を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記第１の線形変換手段の出力に基づく値を前記入力データ列とし、
複数のアンマスク値の中から、前記選択手段からの前記選択値に対応したアンマスク値を選択し、選択したアンマスク値と、前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとり、暗号文として出力するアンマスク演算手段
をさらに備える暗号化処理回路。
【請求項２】
前記第１および第２のパーミュテーション手段の各パーミュテーション手段は、
データ列を、前記パーミュテーション手段において並び替えた値に対して、前記第１の線形変換手段で線形変換した結果と、
前記データ列を、前記第１の線形変換手段で線形変換した結果に対して、前記パーミュテーション手段で並び替えを行った結果と、
が互いに一致するような、並び替えパターンを持つ、ことを特徴とする請求項１に記載の暗号化処理回路。
【請求項３】
前記選択手段は、データ列にかかっているマスク値の並びと、前記非線形変換手段の前記入力側のマスク値の並びが一致するように、前記第１のパーミュテーション手段の並び替えのパターンを選択する、ことを特徴とする請求項１または２に記載の暗号化処理回路。
【請求項４】
Feistel構造をもつ暗号を対象とし、
２系列もしくはそれ以上の系列の入力のうち半数の系列を前記入力データ列として、前記第１のパーミュテーション手段、前記非線形変換手段、前記第２のパーミュテーション手段及び前記第１の線形変換手段で処理を行い、
当該処理の結果と残りの半数の系列との排他的論理和と演算する、
ことを特徴とする請求項１乃至３のいずれか１項に記載の暗号化処理回路。
【請求項５】
前記選択手段の選択値が第１の値（sv）であるときの前記第２のパーミュテーション手段の並び替えをP2sv(・)、線形変換をL(・)、前記残りの半数の系列にかかっているマスクをMRsvとし、
前記選択値が第２の値（sv'）のときの前記第１のパーミュテーション手段の並び替えをP1sv’（・）とし、前記選択手段の選択値が第１の値（sv）があったときに、次の選択値が第２の値（sv'）となるものとして、前記選択手段での全ての選択値に対して、前記非線形変換手段の入力側マスク値Mと出力側マスク値Nに対して、
M=P1sv’(L(P2sv(N)) (XOR) MRsv)
の関係を満たす並び替えパターンを前記第１及び第２のパーミュテーション手段が有する、ことを特徴とする請求項４に記載の暗号化処理回路。
【請求項６】
前記非線形変換手段の出力側のマスク値を、前記第２のパーミュテーション手段で並び替え、
前記第２のパーミュテーション手段で並び替えた値を前記第１の線形変換手段で線形変換し、
前記第１の線形変換手段で線形変換した結果と前記残りの半数の系列にかかっているマスクとの排他的論理和を演算し、
前記排他的論理和の演算結果を、前記第１のパーミュテーション手段で並び替えた値を、前記非線形変換手段の入力側のマスク値とする、
ことを特徴とする請求項４又は５に記載の暗号化処理回路。
【請求項７】
暗号化アルゴリズムとしてTWINEを対象とし、
前記第１の線形変換手段は、前記処理の結果と残りの半数の系列との排他的論理和の演算結果に対して第１の線形変換を施し、前記半数の系列である第１の入力データ列とし、
前記第１の入力データ列に対して第２の線形変換を施し、前記残りの半数の系列である第２の入力データ列とする第２の線形変換手段をさらに備え、
前記選択手段の選択値が第１の値（sv）であるときの前記第２のパーミュテーション手段の並び替えをP2sv(・)、前記残りの半数の系列にかかっているマスクをMRsv、前記残りの半数の系列に対する前記第１の線形変換をL1(・)とし、
前記選択値が第２の値（sv'）のときの前記第１のパーミュテーション手段の並び替えをP1sv’（・）とし、前記選択手段の選択値が第１の値（sv）があったときに、次の選択値が第２の値（sv'）となるものとして、前記選択手段での全ての選択値に対して、前記非線形変換手段の入力側マスク値Mと出力側マスク値Nに対して、
M=P1sv’(L1( P2sv(N) (XOR) MRsv) )
の関係を満たす並び替えパターンを前記第１及び第２のパーミュテーション手段が有する、ことを特徴とする請求項４に記載の暗号化処理回路。
【請求項８】
データ処理装置による暗号化処理方法であって、
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択工程と、
複数の初期マスク値の中から、前記選択値の初期値に対応した初期マスク値を選択し、選択した初期マスク値と入力したとの排他的論理和をとり、入力データ列の初期値とする初期マスク演算工程と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択工程からの選択値に対応したパターンの並べ替えを行い、並び替えた結果を出力する第１のパーミュテーション工程と、
前記第１のパーミュテーション工程の出力値を複数に分割した値をそれぞれ複数のテーブルで非線形変換する非線形変換工程と、
前記選択工程からの選択値に応じて、前記第１のパーミュテーション工程とは逆のパターンの並び替えを、前記非線形変換工程の複数の出力値を結合したデータ列に対して行う第２のパーミュテーション工程と、
前記第２のパーミュテーション工程の出力に基づいて線形変換を施す第１の線形変換工程と、
を含み、
前記非線形変換工程において、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション工程、前記非線形変換工程、前記第２のパーミュテーション工程及び前記第１の線形変換工程を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記第１の線形変換工程の出力に基づく値を前記入力データ列とし、
複数のアンマスク値の中から、前記選択工程からの前記選択値に対応したアンマスク値を選択し、選択したアンマスク値と前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとり、暗号文として出力するアンマスク演算工程と、
をさらに含む暗号化処理方法。
【請求項９】
データ処理装置に暗号化処理を実行させる暗号化処理プログラムであって、
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択処理と、
複数の初期マスク値の中から、前記選択値の初期値に対応した初期マスク値を選択し、選択した初期マスク値と入力したとの排他的論理和をとり、入力データ列の初期値とする初期マスク演算処理と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択処理からの選択値に対応したパターンの並べ替えを入力データ列に行い、並び替えた結果を出力する第１のパーミュテーション処理と、
前記第１のパーミュテーション処理の出力値を複数に分割した値をそれぞれ複数のテーブルで非線形変換する非線形変換処理と、
前記選択処理からの選択値に応じて、前記第１のパーミュテーション処理とは逆のパターンの並び替えを、前記非線形変換処理の複数の出力値を結合したデータ列に対して行う第２のパーミュテーション処理と、
前記第２のパーミュテーション処理の出力に基づいて線形変換を施す第１の線形変換処理と、
を含み、
前記非線形変換処理において、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション処理、前記非線形変換処理、前記第２のパーミュテーション処理及び前記第１の線形変換処理を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記第１の線形変換処理の出力に基づく値を前記入力データ列とし、
複数のアンマスク値の中から、前記選択処理からの前記選択値に対応したアンマスク値を選択し、選択したアンマスク値と前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとり、暗号文として出力するアンマスク演算処理
をさらに含むことを特徴とする暗号化処理プログラムが格納された非一時的なコンピュータ可読媒体。
【請求項１０】
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択手段と、
前記選択手段からの選択値に応じて、複数のアンマスク値の中からアンマスク値を選択し、選択したアンマスク値と、暗号文との排他的論理和をとり、入力データ列の初期値とするアンマスク演算手段と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択手段からの選択値に対応したパターンの並べ替えを行い、並び替えた結果を出力する第１のパーミュテーション手段と、
前記第１のパーミュテーション手段の出力値を複数に分割した値をそれぞれ非線形変換する複数のテーブルを含む非線形変換手段と、
前記選択手段からの選択値に応じて、前記第１のパーミュテーション手段とは逆のパターンの並び替えを、前記非線形変換手段の複数の出力値を結合したデータ列に対して行う第２のパーミュテーション手段と、
前記第２のパーミュテーション手段の出力に基づいて線形変換を施す線形変換手段と、
を備え、
前記非線形変換手段は、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション手段、前記非線形変換手段、前記第２のパーミュテーション手段及び前記線形変換手段を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記線形変換手段の出力に基づく値を前記入力データ列とし、
前記選択手段からの選択値に応じて複数の初期マスク値の中から初期マスク値を選択し、選択した初期マスク値と、前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとる初期マスク演算手段をさらに備える復号処理回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化処理回路及び復号処理回路とその方法並びにそのプログラムに関し、特に、耐タンパー性を考慮した暗号化処理回路及び復号処理回路、その方法並びにそのプログラムに関する。
する。
【背景技術】
【０００２】
情報の電子データ化が進む中で、情報の保護、秘匿な通信において、暗号はかかせない技術となっている。暗号はその安全性を保つために、鍵等の秘密情報が容易に推測できないようにする必要がある。鍵の全数探索や数学的に解読を行う線形解読や差分解読等といった暗号解析方法が知られている。しかし、この種の暗号解析方法により、現実的な時間で解析を行うことは不可能な状況といえる。【０００３】
その一方で、携帯端末などの暗号機能を実装した装置（暗号モジュール）において、攻撃者が処理時間や消費電力、漏洩電磁波などのサイドチャネル情報を精密に測定できるとの仮定の下で、サイドチャネル情報から秘匿情報の取得を試みるサイドチャネル攻撃とその対策が大きな研究テーマとなっている。【０００４】
サイドチャネル攻撃として、暗号モジュールの消費電力を測定し、消費電力から鍵等の秘密情報を解析する電力解析攻撃がある。その中でも、複数の消費電力波形に統計処理を行うことで解析を行う、差分電力解析が特に強力な攻撃法とされている（非特許文献１）。【０００５】
暗号モジュールにおいて、論理ゲートの遷移確率に偏りが生じる場合に、データ列の中で１となるビットの数（ハミング重み）と消費電力との間には相関があるとされている（非特許文献２）。また、予め規定された暗号化処理を所定回数実行して暗号文を生成する場合、暗号化処理前後でのレジスタのビット遷移（ハミング距離）と消費電力とに相関があるとされている（非特許文献３）。そのため、ハミング重みやハミング距離に着目することで、秘密鍵が解析できてしまう、という問題がある。【０００６】
ハミング重みやハミング距離に着目した攻撃への対策手法の例として、マスキング手法が提案されている（非特許文献４）。マスキング手法では、入力値と鍵を用いて演算する際に、マスク値という乱数を入力値と鍵とともに演算する。さらに、マスク値によってマスキングされた中間値を用いてラウンド処理を行う。ラウンド処理中の非線形変換は、例えば変換テーブルを用いて行われる。非線形変換に用いるテーブルは、マスク値が変わるたびに生成される。非線形変換に用いるテーブルは、中間値にマスクがかかった値を入力とし、元の中間値を非線形変換した値にマスクをかけ直した値が出力される。中間値にマスクがかかっているため、消費電力と中間値の相関が低下する。そのため、ハミング重みなどから、秘密鍵の解析ができなくなり、安全性が高くなる。【０００７】
特許文献１には、乱数によるマスキング手法の問題を解決する方法として、固定値マスク法が開示されている。固定値マスク法では、予め２つ以上の固定値をマスクとして用意する。次に、各マスクと組となるマスク付テーブルを用意する。このマスク付テーブルは、中間値に組となるマスク値がかかった値を入力とし、元の中間値を非線形変換した値に組となるマスク値をかけ直した値を出力とする。そして、暗号処理開始時に、乱数にしたがってマスクとテーブルの組を選択し、選択したマスクとテーブルを用いて暗号処理を実施する。暗号処理のたびに乱数をふり直すことで、マスク値が切り替わる。固定値としてマスク値とテーブルを用意することで、非特許文献４の手法で問題となった、処理速度の低下と、ＲＡＭ（Random Access Memory）領域の増大という問題を解決することができる。【０００８】
非特許文献５には、AES（Advanced Encryption Standard）における対策手法としてRotating Sboxes Masking(RSM)法が提案されている。RSM法では、固定値マスク法と同様に、複数のマスク値とマスク付のテーブル（SBOX）を用意する。暗号処理時には、これら複数のマスク値及びテーブルを並列に使用することになる。RSMでは、入力データ列をテーブルでの処理前にシフトすることで、使用するマスク値とテーブルをローテートする。テーブルでの処理後に、マスク付の出力データ列が出力される。この出力結果のデータ列を逆シフトすることで、元のデータ位置にマスク付データ列を戻す。使用するテーブルをローテートすることで、データの各バイトにかかるマスク値を入れ替えることができる。また、未使用となるマスク値とテーブルを出さないことから、回路の使用効率を高めている。【０００９】
特許文献２には、共通鍵暗号処理において、秘密鍵の解読防止のために必要な処理時間及び回路規模を削減するための構成として、第１の経路選択手段は、乱数発生手段が発生した乱数の値に応じて、複数の拡大鍵マスク値をランダムに並べ替え、拡大鍵演算手段は、並べ替えられた複数の拡大鍵マスク値と、拡大鍵を表すデータ列と、入力データ列との排他的論理和を生成し、第２の経路選択手段は、乱数の値に応じて第１の経路選択手段とは逆の並べ替えを行うことで、排他的論理和のデータ列を並べ替え、非線形変換手段１０４は、並べ替えられたデータ列の非線形変換を行って、複数の非線形変換マスク値によりマスクされたデータ列を出力し、第３の経路選択手段は、乱数の値に応じて第１の経路選択手段と同じ並べ替えを行うことで、マスクされたデータ列を並べ替える暗号化装置が開示されている。【００１０】
尚、特許文献３には、暗号処理構成を小型化した暗号処理装置に関する技術が開示されている。また、特許文献４には、様々な秘密鍵及び公開鍵の暗号化アルゴリズムを処理するようプログラム可能な暗号化チップに関する技術が開示されている。また、特許文献５には、データ暗号化標準アルゴリズムを利用した暗号化装置に関する技術が開示されている。
【先行技術文献】
【特許文献】
【００１１】
【特許文献１】特開２００２−３６６０２９号公報（特許４５９６６８６号公報）
【特許文献２】特開２００８−１３１１０８号公報
【特許文献３】特開２０１２−２１５８１４号公報
【特許文献４】特開２０１１−００８２８５号公報
【特許文献５】特開２００２−０３２０１６号公報
【非特許文献】
【００１２】
【非特許文献１】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.
【非特許文献７】T. Suzaki, K. Minematsu, S. Morioka and E. Kobayashi, “TWINE: A Lightweight Block Cipher for Multiple Platforms,” 2012.
【発明の概要】
【発明が解決しようとする課題】
【００１３】
以下に関連技術の分析を与える。【００１４】
非特許文献４に開示された乱数によるマスキング手法では、マスク値（乱数）が変わるたびに、非線形変換に用いるテーブルを再計算する必要がある。このため、処理速度の低下、及び、必要な記憶容量（RAM(Random Access Memory）領域）の増大、という問題がある。【００１５】
特許文献１の手法では、複数のマスク値とテーブルをマスク値の数だけ用意しておく必要があるため、マスク値とテーブルを保存するためのROM（Read Only Memory）領域が必要となる。また、複数のマスク値とテーブルの組の中からいずれか１つを選択する構成のため、選択されなかったマスク値とテーブルは、暗号処理時には冗長部分となる。【００１６】
非特許文献５に開示されたRSM法では、マスクを保存するために、多くのROM領域を必要とする、という問題がある。RSM法では、テーブル処理後に、線形処理（ShiftRows, MixColumns, AddRoundKey）を行う。そして、それらの処理の後に、線形処理で変化したマスクを解除（アンマスク）する。さらに次のラウンド処理で使用するマスク値を改めてかけ直す作業（リマスク）が必要となる。当該アンマスク及びリマスクのためのマスク値を、ROMに記憶しておく必要がある。マスク値は、シフト幅の種類分用意する必要がある。そのため、マスク値を記憶しておくためのROM領域が大きくなる。また、アンマスクおよびリマスクを行うための処理時間と回路が必要となり、時間と回路規模の面でコストが増大する。【００１７】
特許文献２の手法においても、線形処理と非線形処理の繰り返し処理を行う場合には、前の線形処理に対するマスクを解除するためのデータ列と、複数の新たなマスク値との排他的論理和を生成するマスク演算手段を必要としており、マスクを解除するためのデータ列と新たなマスク値を記憶しておくROM領域と、マスクを解除し新たにかけ直すための処理時間と回路が必要となり、RSM同様に時間と回路規模の面でコストが増大する。【００１８】
尚、特許文献３から５には、データの分割や排他的論理和について開示されているが、耐タンパ性に課題がある。【００１９】
したがって、本発明は、上記問題点に鑑みて創案されたものであって、その目的は、暗号処理における冗長部分を削減可能とし、処理速度を向上させ、マスク値の記憶領域を削減可能とする暗号化処理回路及び復号処理回路と、その方法並びにそのプログラムを提供することを目的とする。
【課題を解決するための手段】
【００２０】
本発明によれば、
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択部と、
複数の初期マスク値の中から、前記選択値の初期値に対応した初期マスク値を選択し、選択した初期マスク値と入力した平文との排他的論理和をとり、入力データ列の初期値とする初期マスク演算部と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択部からの選択値に対応したパターンの並べ替えを行い、並び替えた結果を出力する第１のパーミュテーション部と、
前記第１のパーミュテーション部の出力を複数に分割した値をそれぞれ非線形変換する複数のテーブルを含む非線形変換部と、
前記非線形変換部の複数の出力値を結合したデータ列に対して、前記選択部からの前記選択値に応じて、前記第１のパーミュテーション部とは逆のパターンの並び替えを行う第２のパーミュテーション部と、
前記第２のパーミュテーション部の出力に基づいて線形変換を施す第１の線形変換部と、
を備え、
前記非線形変換部は、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション部、前記非線形変換部、前記第２のパーミュテーション部及び前記第１の線形変換部を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記第１の線形変換部の出力に基づく値を前記入力データ列とし、
複数のアンマスク値の中から、前記選択部からの前記選択値に対応したアンマスク値を選択し、選択したアンマスク値と、前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとり、暗号文として出力するアンマスク演算部
をさらに備える暗号化処理回路が提供される。この暗号化処理回路においては、前記ラウンド処理を繰り返す間に、データ列に対するマスクを無効化し新たにマスクをかけ直す演算を不要としている。【００２１】
本発明によれば、データ処理装置による暗号化処理方法であって、
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択工程と、
複数の初期マスク値の中から、前記選択値の初期値に対応した初期マスク値を選択し、選択した初期マスク値と入力したとの排他的論理和をとり、入力データ列の初期値とする初期マスク演算工程と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択工程からの選択値に対応したパターンの並べ替えを行い、並び替えた結果を出力する第１のパーミュテーション工程と、
前記第１のパーミュテーション工程の出力値を複数に分割した値をそれぞれ複数のテーブルで非線形変換する非線形変換工程と、
前記選択工程からの選択値に応じて、前記第１のパーミュテーション工程とは逆のパターンの並び替えを、前記非線形変換工程の複数の出力値を結合したデータ列に対して行う第２のパーミュテーション工程と、
前記第２のパーミュテーション工程の出力に基づいて線形変換を施す第１の線形変換工程と、
を含み、
前記非線形変換工程において、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション工程、前記非線形変換工程、前記第２のパーミュテーション工程及び前記第１の線形変換工程を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記第１の線形変換工程の出力に基づく値を前記入力データ列とし、
複数のアンマスク値の中から、前記選択工程からの前記選択値に対応したアンマスク値を選択し、選択したアンマスク値と前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとり、暗号文として出力するアンマスク演算工程と、
をさらに含む暗号化処理方法が提供される。この暗号化処理方法においては、ラウンド処理を繰り返す間にデータ列に対するマスクを無効化し新たにマスクをかけ直す演算を不要としている。【００２２】
本発明によれば、データ処理装置に暗号化処理を実行させる暗号化処理プログラムであって、
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択処理と、
複数の初期マスク値の中から、前記選択値の初期値に対応した初期マスク値を選択し、選択した初期マスク値と入力したとの排他的論理和をとり、入力データ列の初期値とする初期マスク演算処理と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択処理からの選択値に対応したパターンの並べ替えを入力データ列に行い、並び替えた結果を出力する第１のパーミュテーション処理と、
前記第１のパーミュテーション処理の出力値を複数に分割した値をそれぞれ複数のテーブルで非線形変換する非線形変換処理と、
前記選択処理からの選択値に応じて、前記第１のパーミュテーション処理とは逆のパターンの並び替えを、前記非線形変換処理の複数の出力値を結合したデータ列に対して行う第２のパーミュテーション処理と、
前記第２のパーミュテーション処理の出力に基づいて線形変換を施す第１の線形変換処理と、
を含み、
前記非線形変換処理において、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション処理、前記非線形変換処理、前記第２のパーミュテーション処理及び前記第１の線形変換処理を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記第１の線形変換処理の出力に基づく値を前記入力データ列とし、
複数のアンマスク値の中から、前記選択処理からの前記選択値に対応したアンマスク値を選択し、選択したアンマスク値と前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとり、暗号文として出力するアンマスク演算処理
をさらに含むことを特徴とする暗号化処理プログラムが提供される。この暗号化処理プログラムにおいては、ラウンド処理を繰り返す間にデータ列に対するマスクを無効化し新たにマスクをかけ直す演算を不要としている。本発明によれば、該暗号化処理プログラムを記録したコンピュータ読み出し可能な媒体（例えば半導体メモリ、磁気／光ディスク等）が提供される。【００２３】
本発明によれば、
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択部と、
前記選択部からの選択値に応じて、複数のアンマスク値の中からアンマスク値を選択し、選択したアンマスク値と、暗号文との排他的論理和をとり、入力データ列の初期値とするアンマスク演算部と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択部からの選択値に対応したパターンの並べ替えを行い、並び替えた結果を出力する第１のパーミュテーション部と、
前記第１のパーミュテーション部の出力値を複数に分割した値をそれぞれ非線形変換する複数のテーブルを含む非線形変換部と、
前記選択部からの選択値に応じて、前記第１のパーミュテーション部とは逆のパターンの並び替えを、前記非線形変換部の複数の出力値を結合したデータ列に対して行う第２のパーミュテーション部と、
前記第２のパーミュテーション部の出力に基づいて線形変換を施す線形変換部と、
を備え、
前記非線形変換部は、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション部、前記非線形変換部、前記第２のパーミュテーション部及び前記線形変換部を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記線形変換部の出力に基づく値を前記入力データ列とし、
前記選択部からの選択値に応じて複数の初期マスク値の中から初期マスク値を選択し、選択した初期マスク値と、前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとる初期マスク演算部をさらに備える復号処理回路が提供される。この復号処理回路においては、ラウンド処理を繰り返す間にデータ列に対するマスクを無効化し新たにマスクをかけ直す演算を不要としている。
【発明の効果】
【００２４】
本発明によれば、暗号処理時における冗長部分を削減可能とし、処理速度を向上させ、マスク値の記憶領域を削減可能としている。
【図面の簡単な説明】
【００２５】
【図１】本発明の第１の実施形態に係る暗号化処理回路の構成を例示する図である。
【図２】本発明の第１の実施形態に係る暗号化部の構成を例示する図である。
【図３】本発明の第１の実施形態に係る初期マスク演算部の構成を例示する図である。
【図４】本発明の第１の実施形態に係るアンマスク演算部の構成を例示する図である。
【図５】本発明の第１の実施形態に係る非線形変換部の構成を例示する図である。
【図６】本発明の第１の実施形態に係る非線形変換テーブルを排他的論理和と非線形変換テーブルで置換した図である。
【図７】本発明の第１の実施形態に係る鍵加算部の構成を例示する図である。
【図８】本発明の第１の実施形態の動作を説明するためのフローチャートである。
【図９Ａ】元のAESのデータ配列である。
【図９Ｂ】４の倍数のバイトの巡回シフトによって並び替えた結果である。
【図９Ｃ】４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えた結果である。
【図９Ｄ】AESに対して、４の倍数のバイトの巡回シフトの並び替えを行い、さらに４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えを行った場合の結果である。
【図１０】第１の比較例（マスクなし）の暗号化部の構成を例示する図である。
【図１１】第１の比較例の非線形変換部の構成を例示する図である。
【図１２】第２の比較例（RSM法）の暗号化部の構成を例示する図である。
【図１３】第２の比較例（RSM法）の非線形変換部の構成を例示する図である。
【図１４】第２の比較例（RSM法）の非線形変換テーブルを排他的論理和と非線形変換テーブルで置換した図である。
【図１５】本発明の第１の実施形態に係る、初期マスク演算部の後に前処理部を設置したときの、暗号化部の構成を例示する図である。
【図１６】本発明の第１の実施形態に係る、アンマスク演算部の前に後処理部を設置したときの、暗号化部の構成を例示する図である。
【図１７】本発明の第２の実施形態に係る暗号化部の構成を例示する図である。
【図１８】本発明の第２の実施形態の動作を説明するためのフローチャートである。
【図１９】本発明の第２の実施形態に係る、４系列の一般化Feistel構造に第２の実施形態を適用したときの、暗号化部の構成を例示する図である。
【図２０】本発明の実施例１に係る暗号化部の構成を例示する図である。
【図２１】本発明の実施例１に係る非線形変換部の構成を例示する図である。
【図２２】本発明の実施例１に係る非線形変換テーブルを排他的論理和と非線形変換テーブルで置換した図である。
【図２３Ａ】元のAESのデータ配列である。
【図２３Ｂ】４の倍数のバイトの巡回シフトによって並び替えた結果である。
【図２３Ｃ】４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えた結果である。
【図２３Ｄ】本発明の実施例１に対して、４の倍数のバイトの巡回シフトの並び替えを行い、さらに４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えを行った場合の結果である。
【図２４Ａ】本発明の実施例１に係るパーミュテーション部３３０１において、各選択値Ｒ（Ｒ＝０〜７）において並び替えを行った場合を例示する図である。
【図２４Ｂ】本発明の実施例１に係るパーミュテーション部３３０１において、各選択値Ｒ（Ｒ＝８〜１５）において並び替えを行った場合を例示する図である。
【図２５Ａ】本発明の実施例１に係るパーミュテーション部３３０２において、各選択値Ｒ（Ｒ＝０〜７）において並び替えを行った場合を例示する図である。
【図２５Ｂ】本発明の実施例１に係るパーミュテーション部３３０２において、各選択値Ｒ（Ｒ＝８〜１５）において並び替えを行った場合を例示する図である。
【図２６】本発明の実施例１に係る初期マスク演算部における、初期マスクテーブルを例示する図である。
【図２７】本発明の実施例１に係るアンマスク演算部における、アンマスクテーブルを例示する図である。
【図２８】本発明の実施例１に係る選択部における、選択値の更新用のテーブルを例示する図である。
【図２９】本発明の実施例１の動作を説明するためのフローチャートである。
【図３０Ａ】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その１−Ａ）である。
【図３０Ｂ】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その１−Ｂ）である。
【図３０Ｃ】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その１−Ｃ）である。
【図３１Ａ】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その２−Ａ）である。
【図３１Ｂ】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その２−Ｂ）である。
【図３１Ｃ】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その２−Ｃ）である。
【図３２Ａ】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その３−Ａ）である。
【図３２Ｂ】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その３−Ｂ）である。
【図３２Ｃ】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その３−Ｃ）である。
【図３３Ａ】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その４−Ａ）である。
【図３３Ｂ】本発明の実施例１に係る、R=0のときのデータ遷移の例を示す図（その４−Ｂ）である。
【図３４Ａ】本発明の実施例１に係る、R=7のときのデータ遷移の例を示す図（その１−Ａ）である。
【図３４Ｂ】本発明の実施例１に係る、R=7のときのデータ遷移の例を示す図（その１−Ｂ）である。
【図３４Ｃ】本発明の実施例１に係る、R=7のときのデータ遷移の例を示す図（その１−Ｃ）である。
【図３５Ａ】本発明の実施例１に係る、R=7のときのデータ遷移の例を示す図（その２−Ａ）である。
【図３５Ｂ】本発明の実施例１に係る、R=7のときのデータ遷移の例を示す図（その２−Ｂ）である。
【図３５Ｃ】本発明の実施例１に係る、R=7のときのデータ遷移の例を示す図（その２−Ｃ）である。
【図３６Ａ】本発明の実施例１に係る、R=7のときのデータ遷移の例を示す図（その３−Ａ）である。
【図３６Ｂ】本発明の実施例１に係る、R=7のときのデータ遷移の例を示す図（その３−Ｂ）である。
【図３６Ｃ】本発明の実施例１に係る、R=7のときのデータ遷移の例を示す図（その３−Ｃ）である。
【図３７Ａ】本発明の実施例１に係る、R=7のときのデータ遷移の例を示す図（その４−Ａ）である。
【図３７Ｂ】本発明の実施例１に係る、R=7のときのデータ遷移の例を示す図（その４−Ｂ）である。
【図３８Ａ】AESのときのデータ遷移の例を示す図（その１−Ａ）である。
【図３８Ｂ】AESのときのデータ遷移の例を示す図（その１−Ｂ）である。
【図３８Ｃ】AESのときのデータ遷移の例を示す図（その１−Ｃ）である。
【図３９Ａ】AESのときのデータ遷移の例を示す図（その２−Ａ）である。
【図３９Ｂ】AESのときのデータ遷移の例を示す図（その２−Ｂ）である。
【図３９Ｃ】AESのときのデータ遷移の例を示す図（その２−Ｃ）である。
【図４０Ａ】AESのときのデータ遷移の例を示す図（その３−Ａ）である。
【図４０Ｂ】AESのときのデータ遷移の例を示す図（その３−Ｂ）である。
【図４０Ｃ】AESのときのデータ遷移の例を示す図（その３−Ｃ）である。
【図４１Ａ】AESのときのデータ遷移の例を示す図（その４−Ａ）である。
【図４１Ｂ】AESのときのデータ遷移の例を示す図（その４−Ｂ）である。
【図４２】AES暗号化回路の暗号化部の構成を例示する図である。
【図４３】AES暗号化回路の非線形変換部の構成を例示する図である。
【図４４】３Ｄ暗号の暗号化回路の暗号化部の構成を例示する図である。
【図４５】３Ｄ暗号の暗号化回路の非線形変換部の構成を例示する図である。
【図４６】３Ｄ暗号のフローチャートである。
【図４７】本発明の実施例２に係る、暗号化部の構成を例示する図である。
【図４８】本発明の実施例２に係る、非線形変換部の構成を例示する図である。
【図４９】本発明の実施例２に係る、非線形変換テーブルを排他的論理和と非線形変換テーブルで置換した図である。
【図５０】本発明の実施例２に係る、非線形変換部の構成を例示する図である。（２つの非線形変換部）
【図５１】本発明の実施例２に係る、マスクの配置を例示する図である。
【図５２Ａ】元のAESのデータ配列である。
【図５２Ｂ】１６の倍数のバイトの巡回シフトによって並び替えた結果である。
【図５２Ｃ】スライスないで４の倍数のバイトの巡回シフトによって並び替えた結果である。
【図５２Ｄ】本発明の実施例２に係る、１６の倍数のバイトの巡回シフトの並び替えを行い、続いてスライス内で４の倍数のバイトの巡回シフトの並び替えを行い、さらに４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えを行った場合の結果である。
【図５３Ａ】本発明の実施例２の動作を説明するためのフローチャートである。
【図５３Ｂ】本発明の実施例２の動作を説明するためのフローチャートである。
【図５４】TWINEの暗号化回路の暗号化部の構成を例示する図である。
【図５５】TWINEの暗号化回路のF関数部の構成を例示する図である。
【図５６】TWINEの暗号化回路の線形変換部の構成を例示する図である。
【図５７】TWINEの暗号化回路の暗号化部の別の構成を例示する図である。
【図５８】TWINEの暗号化回路の鍵演算部の構成を例示する図である。
【図５９】TWINEの暗号化回路の非線形変換部の構成を例示する図である。
【図６０】TWINEの暗号化回路の１つめの線形変換部の構成を例示する図である。
【図６１】TWINEの暗号化回路の２つめの線形変換部の構成を例示する図である。
【図６２】TWINEのフローチャートである。
【図６３】本発明の実施例３に係る、暗号化部の構成を例示する図である。
【図６４】本発明の実施例３に係る、非線形変換部の構成を例示する図である。
【図６５】本発明の実施例３に係る、非線形変換テーブルを排他的論理和と非線形変換テーブルで置換した図である。
【図６６】本発明の実施例３に係る、パーミュテーションの動作を例示する図である。
【図６７】本発明の実施例３に係る各マスクを例示する図である。
【図６８】本発明の実施例３に係る選択部における、選択値の更新用のテーブルを例示する図である。
【図６９Ａ】本発明の実施例３の動作を説明するためのフローチャートである。
【図６９Ｂ】本発明の実施例３の動作を説明するためのフローチャートである。
【図７０】本発明の第１の実施形態に係る復号処理回路の構成を例示する図である。
【図７１】本発明の第１の実施形態に係る復号部の構成を例示する図である。
【図７２】本発明の第２の実施形態に係る復号部の構成を例示する図である。
【発明を実施するための形態】
【００２６】
本発明の第１の形態によれば、暗号鍵を用いて平文を複数のラウンドで暗号化する暗号化処理回路は、初期マスク演算部（１１０１）と、レジスタ（１２００）、第１、第２のパーミュテーション部（１３０１、１３０２）、非線形変換部（１４００）と、線形変換部（１５００）、鍵演算部（１６００）、アンマスク演算部（１１０２）、選択部（１７００）、乱数生成部（１８００）、とを備える。
【００２７】
初期マスク演算部（１１０１）は、選択部（１７００）の出力値（選択値）にしたがって初期マスクテーブル（１１１１）から初期マスクを読み出し、読み出した初期マスクと平文との排他的論理和をとり、平文にマスクをかける。
【００２８】
レジスタ（１２００）は１ラウンド処理ごとの中間値を記憶する。
【００２９】
初回のラウンド処理では、レジスタ（１２００）には、初期マスク演算部（１１０１）の演算結果が入力される。２回目以降のラウンド処理では、前記レジスタには、前回のラウンド処理での前記鍵演算部（１６００）の出力が入力される。
【００３０】
第１のパーミュテーション部（１３０１）は、レジスタ（１２００）に格納されている値を入力値としてデータ列の並び替えを行う。このとき、どのような並び替えを行うかは、選択部（１７００）の選択値にしたがう。
【００３１】
非線形変換部（１４００）は、複数のテーブル（マスク付き非線形変換テーブル）（S1〜St、１４１１〜１４１４）を備えている。各々のテーブル（S1〜St）（１４１１〜１４１４）おいて、テーブルにしたがって入力値に応じた出力値が出力される。
【００３２】
前記非線形変換部（１４００）の各テーブル（１４１１〜１４１４）は入力側のマスク（M=ｍ１〜ｍt）とマスクなし非線形変換テーブル（S、１４２０）、出力側のマスク（N=n１〜nt）によって得られる値で構成される。テーブル（１４１１〜１４１４）の入力に対して入力側のマスク（M=ｍ１〜ｍt）をかけることで入力値をマスク前の値に変換し、マスク前の値を用いてテーブル（S、１４２０）に従った非線形変換を行う。テーブル（S、１４２０）の出力に対して出力側のマスク（N=n１〜nt）をかけた値を出力する。マスク付き非線形変換テーブル（S1〜St、１４１１〜１４１４）はこの入出力の関係をテーブルとしている。
【００３３】
第２のパーミュテーション部（１３０２）は、非線形変換部（１４００）の複数のテーブル（S1〜Sn）から出力される複数の値を入力し、データ列の並び替えを行う。このとき、どのような並び替えを行うかは、選択部（１７００）の選択値にしたがう。なお、並び替えについては、第１のパーミュテーション部（１３０１）とは逆の並び替えを行う。
【００３４】
線形変換部（１５００）は、第２のパーミュテーション部（１３０２）出力値の線形変換をとる。
【００３５】
鍵演算部（１６００）は、線形変換部（１５００）の出力とラウンド鍵（Ki）とを加算する（排他的論理和をとる）。
【００３６】
前記第１のパーミュテーション部（１３０１）、前記非線形変換部（１４００）、前記第２のパーミュテーション部（１３０２）、前記線形変換部（１５００）、及び、前記鍵加算部（１６００）によるラウンド処理が、規定回数行われる（例えばAES-128、AES-192、AES-256のラウンド処理回数は10回、12回、14回）。本発明によれば、該ラウンド処理を繰り返す間にデータ列に対するマスクを無効化し新たにマスクをかけ直す演算を必要としない（不要としている）。
【００３７】
アンマスク演算部（１１０２）は、選択部（１７００）の出力値（選択値）にしたがってアンマスクテーブル（１１１３）からアンマスク値を読み出し、ラウンド処理終了後のデータ列とアンマスク値との排他的論理和をとり、データ列のマスクを解除する。排他的論理和の結果を暗号文として出力する。
【００３８】
選択部（１７００）は、乱数生成部（１８００）の乱数値を初期値として、選択値を出力する。また、選択値はラウンド処理が１ラウンド終わるごとに更新される。
【００３９】
選択値によって、前記初期マスク演算部（１１０１）および前記アンマスク演算部（１１０２）のマスク値が選択される。また、選択値によって、前記第１のパーミュテーション部（１３０１）および前記第２のパーミュテーション部（１３０２）の並び替えのパターンが選択される。
【００４０】
乱数生成部（１８００）は、暗号処理開始時に乱数を生成し、生成した乱数を前記選択部（１７００）へ出力する。乱数生成には、LFSR（LinearFeedbackShiftRegister）を利用するものや、一方向性関数を利用するもの、カオス系列を利用するもの、予めROMなどに記憶しておいた乱数を読みだすもの等、公知のものが用いられる。
【００４１】
第１、第２パーミュテーション部（１３０１、１３０２）は、複数の並び替えのパターンを持ち、どのパターンで並び替えを行うかは、前記選択部（１７００）の選択値に従う。
【００４２】
選択部(１７００)の選択値がsvであるときの第２のパーミュテーション部（１３０２）の並び替えをP2sv(・)、線形変換をL(・)、選択値sv’のときの第１のパーミュテーション部１３０１の並び替えをP1sv’（・）とし、選択部（１７００）の選択値svがあったときに、次の選択値がsv’となるとして、全てのsvに対して、前記非線形変換部（１４００）の入力側マスク（Ｍ）と出力側マスク（Ｎ）に対して、次の関係を満たせる並び替えパターンを、第１、第２のパーミュテーション部（１３０１、１３０２）に持たせる。
M=P1sv'(L(P2sv(N)))
【００４３】
前記第１、第２パーミュテーション部（１３０１、１３０２）の並び替えのパターンでは、同じ選択値に対して、逆の並び替えを行う。これにより、前記第１のパーミュテーション部で移動したデータの位置を、前記第２のパーミュテーション部によって元の位置に戻すことができる。
【００４４】
前記非線形変換部（１４００）の入力側マスク（Ｍ）と出力側マスク（Ｎ）は次のような関係を規定しておく。前記出力側マスク値（Ｎ）を前記第２のパーミュテーション部（１３０２）のいずれかの並び替えパターンで並び替え、さらに並び替えたマスク値（Ｎ）を前記線形変換部（１５００）で線形変換し、線形変換した結果を前記第１のパーミュテーション部（１３０１）のいずれかの並び替えパターンで並び替えた結果を前記入力側マスク（Ｍ）とする。
【００４５】
本発明の上記形態によれば、非線形変換部において、マスク付の非線形変換テーブルを具備することで、マスクを変えるためにテーブルの再計算を行う必要性がなくなり、処理速度の低下と、記憶領域（RAM領域）の増大を抑制する。さらに、非線形変換部において、異なるマスクを持つテーブルを具備し、さらにパーミュテーションによりテーブルに入力されるデータを入れ替えることで、ラウンド処理ごとにデータの各部分にかかるマスクを入れ替える。未使用となるマスク値とテーブルを出さないことで、ROM領域及び回路規模を削減することができる。
【００４６】
非線形変換部のマスク付の非線形変換テーブルにおける入力側マスク値（M）と出力側のマスク値（Ｎ）の関係を規定しておき、さらに、パーミュテーションに条件付けを行う。こうすることで、本発明によれば、ラウンドごとのアンマスクやリマスクといったマスクの作業が不要となり、作業用のマスク値をROM等の記憶装置に記憶しておくことを要しなくしている。その結果、処理速度の向上と回路規模の削減が期待できる。
【００４７】
このように、本発明によれば、処理速度を向上させ、回路規模及びROM領域を削減しつつ、ハミング重みやハミング距離に基づくサイドチャネル攻撃による解析を困難にし、暗号モジュールの安全性を高めることができる。以下、図面を参照していくつかの実施形態を説明する。
【００４８】
（第１の実施形態）
図１は、本発明の第１の実施形態の暗号化処理回路の構成を例示する図である。本実施形態の暗号化処理回路は、暗号化部１０００と鍵生成部２０００を含む。
【００４９】
図２は、図１の暗号化部１０００の構成を例示する図である。図２を参照すると、暗号化部１０００は、初期マスク演算部１１０１、アンマスク演算部１１０２、レジスタ１２００、パーミュテーション部１３０１、１３０２、非線形変換部１４００、線形変換部１５００、鍵演算部１６００、選択部１７００、及び、乱数生成部１８００を備えている。本明細書では、各変換部での演算として以下のような表記を用いる。
非線形変換：S(・)、
線形変換：L(・)、
パーミュテーション（１３０１、１３０２）：P1(・)、P2(・)。
【００５０】
図１を参照すると、暗号化部１０００は、入力された平文と、鍵生成部２０００から受け取るラウンド鍵（Ki）をもとに、データを暗号化し、暗号文を出力する。
【００５１】
暗号化部１０００では、図２を参照すると、初めに初期マスク演算部１１０１において、処理を行う。
【００５２】
図３は、図２の初期マスク演算部１１０１の構成を例示する図である。図３を参照すると、初期マスク演算部１１０１は、複数の初期マスクを格納している初期マスクテーブル１１１１と、排他的論理和演算部（Exclusive OR：XOR）１１１２を備えている。初期マスクテーブル１１１１は、入力された選択値に基づき複数の初期マスクの中から１つを選択して出力する。排他的論理和演算部１１１２は、初期マスクテーブル１１１１から出力された初期マスクと平文との排他的論理和（bitwiseXOR：ビット毎のXOR）を演算する。初期マスクテーブル１１１１は、選択部１７００の選択値がとり得る値の数だけ初期マスクのデータ列を格納する。
【００５３】
再び、図２を参照して、次に、規定ラウンド数だけ、パーミュテーション部１３０１、非線形変換部１４００、パーミュテーション部１３０２、線形変換部１５００、鍵加算部１６００でラウンド処理を繰り返す。なお、ラウンド処理中の中間値はレジスタ１２００に格納される。
【００５４】
ラウンド処理終了後、アンマスク演算部１１０２において処理を行う。
【００５５】
図４は、図２のアンマスク演算部１１０２の構成を例示する図である。図４を参照すると、アンマスク演算部１１０２は、複数のアンマスクを格納しているアンマスクテーブル１１１３と、排他的論理和演算部１１１４を備えている。アンマスクテーブル１１１３は、入力された選択値に基づき、複数のアンマスクの中から１つを選択して出力する。排他的論理和演算部１１１４は、アンマスクテーブル１１１３から出力されたアンマスクとラウンド処理の出力結果（レジスタ１２００に格納されている鍵演算部１６００の出力結果）との排他的論理和（bitwiseXOR）を演算し、暗号文を出力する。アンマスクテーブル１１１３は、初期マスクテーブル１１１１と同様に、選択値がとり得る値の数だけアンマスクのデータ列を格納する。
【００５６】
このように、図２において、初期マスク演算部１１０１は、選択値に基づき初期マスクテーブル１１１１からマスク値を選択し、選択したマスク値と入力データ列の排他的論理和（bitwiseXOR）を演算し、演算結果を出力する。また、アンマスク演算部１１０２は、選択値に基づきアンマスクテーブル１１１３からマスク値を選択し、選択したマスク値と入力データ列の排他的論理和（bitwiseXOR）を演算し、演算結果を出力する。このとき、初期マスク演算部１１０１では、平文と初期マスクとの排他的論理和を演算する。また、アンマスク演算部１１０２では、ラウンド処理の結果とアンマスクとの排他的論理和を演算する。
【００５７】
図２において、レジスタ１２００は、ラウンド処理の中間値を記憶する。初回のラウンド処理では、初期マスク演算部１１０１の出力が記憶される。２回目以降のラウンド処理では、鍵演算部１６００の出力が記憶される。
【００５８】
パーミュテーション部１３０１及びパーミュテーション部１３０２は、複数の並び替えのパターンを持ち、選択値に応じて並び替えのパターンを選択し、選択したパターンにしたがって入力データ列を並び替えて、並び替えた結果を出力する。並び替えは、ビット単位、バイト単位、及び任意のデータ長単位での並び替えがある。パーミュテーション部１３０１では、レジスタ１２００のデータを並び替える。パーミュテーション部１３０２では、非線形変換部１４００の出力値（Ｙ）を並び替え、並び替えた結果（P2(Y)）を出力する。
【００５９】
非線形変換部１４００は、入力値（Ｘ）を非線形変換し、変換結果（Ｙ）を出力する。
【００６０】
図５は、図２の非線形変換部１４００の構成を例示する図である。図５を参照すると、非線形変換部１４００は、ｔ個（ｔは所定の正整数）の非線形変換テーブル（S1〜St）１４１１〜１４１４を備えている。ｔ個の非線形変換テーブル１４１１〜１４１４へは入力値Xのうちの一部のデータx1〜xtがそれぞれ入力され、各非線形変換テーブルで非線形変換が行われる。データの一部の取り出し方としては、ビット単位、バイト単位、及び、任意のデータ長で分割され、データXは、全部でｔ個のデータx1〜xtに分割される。x1〜xtは互いに重ならず、x1〜xtのビット列(あるいはバイト列等)を結合（連結）することでXとなる。特に制限されないが、例えばXが32ビットのとき、例えば4ビット単位にx１はXの0〜3ビット、x2はXの4〜7ビット、・・・、x8はXの29〜31ビット等に分割する。
【００６１】
非線形変換テーブル１４１１〜１４１４の変換結果としてｔ個の出力値y1〜ytが出力される。なお、非線形変換テーブル１４１１〜１４１４は、後述するように、テーブルの入力と出力にマスク演算を施すものであり、マスク付き非線形変換テーブルともいう。ｎ個の出力値y1〜ytを結合したものが非線形変換部１４００の出力値Ｙとなる。
【００６２】
図６は、図５のｔ個の非線形変換テーブル（S1〜St）１４１１〜１４１４の入出力の関係を例示する図である。図６を参照すると、非線形変換テーブル１４１１は、入力側のマスクm1と、出力側のマスクn1と、排他的論理和演算部１４３１と、ルックアップテーブル方式の非線形変換テーブル（S）１４２１と、排他的論理和演算部１４３５を備えている。同様に、他の非線形変換テーブル１４１２〜１４１４は、入力側のマスクm２〜mtと、出力側のマスクn２〜ntと、排他的論理和演算部１４３２〜１４３４、ルックアップテーブル方式の非線形変換テーブル（S）１４２２〜１４２４と、排他的論理和演算部１４３６〜１４３８を備えている。マスクm１〜mtのビット幅は、データx1〜xtビット幅と等しい。
【００６３】
図６において、非線形変換テーブル（S1）１４１１内において、排他的論理和演算部１４３１は、入力値x1と入力側のマスクm1との排他的論理和(（bitwise XOR）x1(XOR)m1をとる。なお、マスク値との排他的論理和をとることを、マスクをかけるともいう。
【００６４】
非線形変換テーブル（S）１４２１は、排他的論理和演算部１４３１での排他的論理和演算結果x1(XOR)m1を入力し、該入力に非線形変換を施した変換結果S(x1(XOR)m1)を出力する。
【００６５】
排他的論理和演算部１４３５は、非線形変換テーブル（S）１４２１から出力された変換結果S(x1(XOR)m1)と、出力側のマスクｎ1との排他的論理和S(x1(XOR)m1)(XOR)ｎ1をとり、演算結果をy1として出力する。このように、非線形変換テーブル(S1)１４１１は、入力値x1をy1へ変換して出力する。他の非線形変換テーブル(S2〜Sn)１４１２〜１４１４も、S1と同様に、x2〜xtのそれぞれに対して排他的論理和、非線形変換、排他的論理和の３つの演算を行い、それぞれy2〜ytを出力する。マスクn1〜ntは、非線形変換テーブル（S）の出力のビット幅と等しい（例えばマスクm１〜mtのビット幅と等しくしてもよい）。
【００６６】
ここで、
入力側の各マスクm1〜mtを結合（連接）したものをM、
出力側の各マスクn1〜ntを結合（連接）したものをN、
とする。
【００６７】
非線形変換テーブル１４１１をメモリ装置へ実装する場合には、入力x1に対して、
出力y1=S(x1(XOR)m1)(XOR)n1を出力する。前述したように、図５のS1〜Snの各々は、排他的論理和演算、非線形変換、排他的論理和演算を行う。
【００６８】
再び図２を参照すると、線形変換部１５００は、パーミュテーション部１３０１から出力された出力値（P2(Y)）を線形変換して変換結果（Z）を出力する。線形変換の関数をLとした場合、
Z=L(P2(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〜t)と入力値Zの一部zj(j=2〜t)との排他的論理和zj(XOR)kijを演算し演算結果をqj(j=2〜t)として出力する。
【００７１】
また図２において、選択部１７００は、乱数生成部１８００から出力される乱数を初期値として、選択値を出力する。前記選択値は、前記初期マスク演算部１１０１、パーミュテーション部１３０１及び１３０２、並びに、アンマスク演算部１１０２で用いられる。
【００７２】
選択部１７００において、選択値の更新方法としては、例えば次のようなものがあげられる（ただし、以下に制限されない）。
【００７３】
１）１ラウンドごとに１ずつ増加（減少）していき、最大値（最小値）を超えたら、最小値（最大値）へとループする方法。
【００７４】
２）テーブルを用意しておき、現在のラウンドにおける選択値や、初期値と現在のラウンド数を引数としてテーブルから次の選択値を決定する方法。
【００７５】
３）更新式を用意しておき、現在のラウンドにおける選択値や、初期値と現在のラウンド数を引数として、次の選択値を更新式より算出する方法。
【００７６】
図２において、乱数生成部１８００は暗号処理開始時に乱数を生成する。生成した乱数は選択部１７００の入力となる。
【００７７】
図１の鍵生成部２０００は、入力された秘密鍵をもとに、暗号化部１０００で使用するラウンド鍵（Ki）を生成する。このラウンド鍵（Ki）は図２の鍵加算部１６００に入力される。
【００７８】
図８は、第１の実施形態の動作を説明するフローチャートである。図８と、図１乃至図７を参照して、本実施形態の動作を説明する。
【００７９】
はじめに、平文及び秘密鍵を暗号化処理回路へ入力し、平文は図１の暗号化部１０００、秘密鍵は図１の鍵生成部２０００へ入力される（ステップA1）。
【００８０】
暗号処理が開始されたときに、図２の乱数生成部１８００は乱数を生成し、乱数が選択部１７００へ入力される（ステップA2）。
【００８１】
図２の選択部１７００は、入力された乱数を基に、選択値を出力する（ステップA3）。
【００８２】
図２の初期マスク演算部１１０１は、図３の初期マスクテーブル１１１１より選択値に基づいて初期マスクを選択し、平文と初期マスクとの排他的論理和を演算する。この排他的論理和演算（加算演算）により、平文にマスクをかける（ステップA4）。マスクがかかった平文は、レジスタ１２００に記憶される。
【００８３】
マスク処理後、ラウンド処理として、ステップA5〜A11が行われる。まず、図２のパーミュテーション部１３０１は選択値に基づき、データ列の並び替えを行う（ステップA5）。
【００８４】
次に、図２の非線形変換部１４００は、パーミュテーション部１３０１の出力値を非線形変換し、非線形変換出力（Y）を出力する（ステップA6）。非線形変換部１４００は、パーミュテーション部１３０１の出力値がt個に分割されx1〜xtが、非線形変換テーブル（S1〜St）１４１１〜１４１４へと入力する。これら、非線形変換テーブルはマスク付の非線形変換テーブルとなっている。非線形変換テーブル（S1）１４１１の結果は、x1とm1との排他的論理和を演算し、演算結果を非線形変換S(・)によって非線形変換し、非線形変換した結果とn1との排他的論理和をとった結果となる。
【００８５】
ここで、ステップA4で平文にかけた初期マスク値と、m1〜mtを結合（concatenate）したマスク値M（=m1||m2||・・・||mt；ただし、||は連結（連接）を示す）とが一致する場合、図６の排他的論理和演算部１４３１〜１４３４において、初期マスクとMが相殺されることになる（一致する値同士の排他的論理和をとると、０となる）。このため、非線形変換テーブル（S）１４２１〜１４２４は、元の平文に対して非線形変換を行うこととなる。そして、図６の排他的論理和演算部１４３５〜１４３８で、元の平文を非線形変換した結果に、n1〜ntを連結したマスクＮ（=n1||n2||・・・||nt）をかけることとなる。
【００８６】
図３の初期マスクテーブル１１１１に格納される各マスク値としてマスク値Mを並び替えた値を格納しておき、図２のパーミュテーション部１３０１で、初期マスクをマスク値Mの配列と一致させるように並び替えを行うことで、上記の初期マスクとMの相殺が可能となる。
【００８７】
図２のパーミュテーション部１３０２は、選択値に基づき、非線形変換部１４００の出力Yを並び替える（ステップA7）。パーミュテーション部１３０２で行われる並び替えはパーミュテーション部１３０１とは逆の並び替えである。逆の並び替えを行うことで、データの順番をパーミュテーション部１３０１に入力される前の順番に戻すことができる。また、データにかかっているマスクの配列が並び替えられる。
【００８８】
図２の線形変換部１５００は、パーミュテーション部１３０２の出力値（Y’）に対して線形変換を行い、変換結果（Z）を出力する（ステップA8）。
【００８９】
図２の鍵演算部１６００は、線形変換部１５００の出力（Z）と、鍵生成部２０００から送られてきたラウンド鍵（Ki）との排他的論理和を演算し、演算結果（Q）を出力する（ステップA9）。鍵演算部１６００での演算結果（Q）は、レジスタ１２００に記憶される。
【００９０】
鍵演算部１６００での演算後、規定ラウンド回数、ラウンド処理を繰り返したか否か（ラウンド処理終了）の判定を行う（ステップA10）。この判定は、規定ラウンド回数に設定されたカウンタを、鍵演算部１６００での演算のたびに１つカウントダウンし、カウント値が０となった時点で、ラウンド処理終了と判定してもよいし、図２の各部を制御する不図示の制御部等で制御するようにしてもよい。該判定の結果、ラウンド処理が規定回数分終わっていない場合には、選択部１７００において、選択値の更新（ステップA11）を行った後、ステップA5に戻り、再び、ラウンド処理を繰り返す。一方、ラウンド処理が規定回数分終了した場合には、ステップA12へ進む。
【００９１】
ラウンド処理を繰り返す場合、まず、図２のパーミュテーション部１３０１は、図２の鍵演算部１６００の結果（Q）を並び替える（P1(Q)）（ステップA5）。
【００９２】
次に、並び替えたデータ列（P1(Q)）に対して、図２の非線形変換部１４００は非線形変換を行い、変換結果（Y）を出力する（ステップA6）。
【００９３】
パーミュテーション部１３０１の出力（P1(Q)）も、入力値（X）をt個（x1〜xt）に分割したのと同様、t個に分割し、pq1〜pqtとする。特に制限されないが、例えばP1(Q)が32ビットのとき、4ビット単位にpq1はP1(Q)の0〜3ビット、pq2はP1(Q)の4〜7ビット、・・・、pq8はP1(Q)の29〜31ビット等に分割する。
【００９４】
pq1〜pqtが、図５のx1〜xtとして、各非線形変換テーブル（S1〜St）１４１１〜１４１４にそれぞれ入力され、マスク付きの非線形変換処理が行われる。
【００９５】
例えば図６の非線形変換テーブル（S1）１４１１では、pq1とm1との排他的論理和pq1（XOR）m1を演算し、演算結果を、非線形変換S(・)によって非線形変換し（演算結果pq1（XOR）m1をテーブルに入力し、該テーブルから非線形変換した結果が読み出される）、非線形変換した結果S(pq1（XOR）m1)とn1との排他的論理和をとった結果S(pq1（XOR）m1)（XOR）n1となる。
【００９６】
ここで、１ラウンド目のステップA6（図８参照）でかけたマスクNが、１ラウンド目のパーミュテーション部１３０２と線形変換部１５００（図２参照）、及び２ラウンド目のパーミュテーション部１３０１で変換された結果をN’とする。m1〜mtを結合した入力側のマスクMが、N’と一致する場合、図６の排他的論理和演算部１４３１〜１４３４において、N’とMが相殺されることになる（一致する値同士の排他的論理和をとると、０となる）。
【００９７】
このため、マスクMが、N’と一致する場合、図６の非線形変換テーブル（S）１４２１〜１４２４は、元のデータ（マスクをかける前の値）に対して、非線形変換を行うことと等価となる。そして、図６の排他的論理和演算部１４３５〜１４３８で、元のデータを非線形変換した結果に、マスクNをかけることとなる。
【００９８】
したがって、本実施形態においては、図８のステップA6でかけたマスクNを、図２のパーミュテーション部１３０２、線形変換部１５００、及びパーミュテーション部１３０１で変換した結果N’を、入力側のマスクMとして、M、Nを含めた非線形変換テーブル（S1〜Sn）１４１１〜１４１４（図５、図６参照）を実装する。
【００９９】
こうすることで、ラウンド処理中に、線形変換部１５００での線形処理等で変化してしまったマスクを一旦解除して改めてマスクをかけ直す作業（処理）を不要としている。
【０１００】
図２のパーミュテーション部１３０２は、非線形変換部１４００の変換結果（Y）を選択値に基づき並び替え、並び替えた結果（P2(Y)）を出力する（ステップA7）。
【０１０１】
図２の線形変換部１５００は、パーミュテーション部１３０２の出力（P2(Y)）に対して線形変換を行い、変換結果（Z）を出力する（ステップA8）。
【０１０２】
図２の鍵加算部１６００は、線形変換部１５００の出力（Z）と鍵生成部２０００から送られてきたラウンド鍵（Ki）との排他的論理和を演算し、演算結果（Q）を出力する（ステップA9）。
【０１０３】
ラウンド処理が規定回数行われた場合、図８のステップA10からステップA12へと進む。
【０１０４】
ラウンド処理終了後、図２のアンマスク演算部１１０２は、図４のアンマスクテーブル１１１３より選択値に基づいてアンマスクを選択し、ラウンド処理の結果である鍵演算部１６００の出力（Q）と、アンマスクとの排他的論理和を演算し、演算結果を暗号文として出力する（ステップA12）。このアンマスクとの排他的論理和は、Qにかかっているマスクを解除し、本来の暗号文Cを得るものである。
【０１０５】
ラウンド処理の結果である鍵演算部１６００の出力（Q）にかかるマスクは、図８のステップA6でかけられたマスクＮを、パーミュテーション部１３０２で並び替え、線形変換部１５００で変換した値Ｎ’である。したがって、アンマスク演算部１１０２で、Qと、アンマスク値との排他的論理和の演算をすることで、本来の暗号文Cを得ることができる。
【０１０６】
なお、暗号アルゴリズムによっては、最後のラウンドでは処理の内容が変わることがある。その場合は、最後のラウンドで、マスクＮに対して行われたパーミュテーション処理及び線形処理だけをＮに適用した値をアンマスク値として用いる。
【０１０７】
例えば、AESでは最後のラウンドでは、線形変換の１つであるMixColumnsが行われない。そのため、それ以外の演算である、パーミュテーションとShiftRowsのみ、マスク値Ｎに適用した結果が、アンマスク値となる。
【０１０８】
最後に暗号文Cを出力し終了となる（ステップA13）。
【０１０９】
本実施形態で用いるマスク値として、
・初期マスク、
・アンマスク、
・非線形変換テーブルの入力側のマスクM、
・非線形変換テーブルの出力側のマスクＮ、
がある。各マスク値の関係について説明する。
【０１１０】
初期マスク演算部１１０１の初期マスクテーブル１１１１（図３）に格納されている各初期マスクは、パーミュテーション部１３０１においてとり得る並び替えパターンのいずれかで並び替えることで、非線形変換テーブル（図６の１４１１〜１４１４）の入力側のマスクM（＝m1||m2||・・・||mt）と等しくなる。
【０１１１】
初期マスク演算部１１０１の初期マスクテーブル１１１１（図３）と、パーミュテーション部１３０１の対応付けは、選択部１７００の選択値によって行われる。ある選択値svによって選択された初期マスクは、同じ選択値svで選択されたパーミュテーション部１３０１の並び替えパターンによって並び替えることによって、非線形変換テーブル（図６の１４１１〜１４１４）の入力側のマスクMと等しくなる。
【０１１２】
アンマスク演算部１１０２のアンマスクテーブル１１１３（図４）に格納されている各アンマスクは、非線形変換テーブル（図６の１４１１〜１４１４）の出力側のマスクN（＝n1||n2||・・・||nt）とをパーミュテーション部１３０２においてとり得る並び替えパターンのいずれかで並び替え、最後のラウンドの線形変換部１５００で変換された結果とする。
【０１１３】
アンマスクテーブル１１１３（図４）とパーミュテーション部１３０２の対応付けは選択部１７００の選択値によって行われる。ある選択値svで選択されたパーミュテーション部１３０２の並び替えパターンによって出力側のマスクNを並び替えた場合、同じ選択値svによって選択されるアンマスクと、非線形変換テーブル（図６の１４１１〜１４１４）の出力側のマスクNが等しくなる。
【０１１４】
非線形変換テーブル（図６の１４１１〜１４１４）の出力側のマスクＮ（＝n1||n2||・・・||nt）が、パーミュテーション部１３０２、線形変換部１５００、及び次のラウンドのパーミュテーション部１３０１で変換された結果を、次のラウンドの非線形変換テーブルの入力側のマスクMとする。
【０１１５】
非線形変換テーブル（図６の１４１１〜１４１４）の入力側と出力側のマスクMとNと、図２のパーミュテーション部１３０１、１３０２の並び替えパターン、及び選択部１７００による選択値は、次のように関係づけられる。
【０１１６】
選択部１７００による選択値svにおいて、パーミュテーション部１３０２でsvに対応した並び替えパターンで並び替えられた出力側マスク(P2(N))を線形変換部１５００で処理した結果L(P2(N))があり、次のラウンドでは選択値がsvからsv’に更新される。次のラウンドではパーミュテーション部１３０１においてsv’に対応した並び替えパターンでL(P2(N))が並び替えられる(P1(L(P2(N)))。このとき、M=P1(L(P2(N))となるように、選択値とパーミュテーションの並び替えパターン、およびMとNを設定する。
【０１１７】
次に、本実施形態で行うパーミュテーションについて説明する。図２のパーミュテーション部１３０１、１３０２は、選択部１７００の選択値に応じて並び替えパターンが決定される。
【０１１８】
パーミュテーション部１３０１は、データ列にかかっているマスク値と非線形変換部１４００の各非線形変換テーブル１４１１〜１４１４（図６）で適用される入力側のマスクMとの対応を一致させるための並び替えを行う。そのため、選択部１７００の選択値は、パーミュテーション部１３０１にどのような並びでマスクが入ってくるかを示している。そして、パーミュテーション部１３０１は、選択値に応じてレジスタ１２００から入力されるデータ列を並び替える。
【０１１９】
パーミュテーション部１３０２は、パーミュテーション部１３０１にて行われた並び替え処理の逆の並び替えを行い、元のデータ位置との整合をとる。このようにパーミュテーション部１３０２で、元のデータ位置との整合をとることで、後段の線形変換部１５００での線形処理や鍵演算部１６００での鍵演算において、マスクを使わない時の本来の処理に対して追加の処理を不要とすることができる。
【０１２０】
また、パーミュテーション部１３０１及び１３０２の並び替えの制限として、非線形変換部１４００のマスクNからマスクMが導出できるよう（もしくはマスクMからマスクNを導出できるよう）に並び替える必要がある。
【０１２１】
パーミュテーション部１３０２では、様々な並び替えパターンに基づいて並び替えが行われるが、いずれの並び替えパターンを、各非線形変換テーブル１４１１〜１４１４（図６）の出力側のマスクNに用いたとしても、後段の線形処理を通過後、次のラウンド処理におけるパーミュテーション部１３０１における並び替えによってマスクMが導出できることが必要である。
【０１２２】
選択部１７００の選択値がsvであるときのパーミュテーション部１３０２の並び替えをP2sv(・)、線形変換をL(・)、選択値sv’のときのパーミュテーション部１３０１の並び替えをP1sv’（・）とする。ここで、本実施形態では、選択部１７００の選択値svがあったときに、次の選択値がsv’となるとして、全てのsvに対して、次の関係を満たせる並び替えパターンを、パーミュテーション部１３０１および１３０２に持たせる。
【０１２３】
M=P1sv'(L(P2sv(N)))
【０１２４】
例えば、AESに適用した場合、パーミュテーション部１３０１及び１３０２では、４の倍数のバイトの巡回シフトによって並び替えを行い、さらに、４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えを適用することが可能である。図９Ａ乃至図９Ｄに、AESのデータ配列に対して、上記の並び替えを行った場合の結果を示す。図９Ａは元のAESのデータ配列、図９Ｂは４の倍数のバイトの巡回シフトによって並び替えた結果（４＊２バイト巡回シフト）、図９Ｃは４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えた結果（各列の中の２バイト巡回シフト）、図９Ｄは４の倍数のバイトの巡回シフトによって並び替え、さらに、４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えた結果（４＊２バイト巡回シフト後、各列の中の２バイト巡回シフト）を示している。
【０１２５】
ここで、本実施形態を、図１０に示した比較例（マスキングを行わない暗号化処理回路の比較例１：プロトタイプ例）と比較する。図１０を参照すると、この比較例は、レジスタ１２００、非線形変換部１４０１（マスクなし）、線形変換部１５００及び鍵演算部１６００を備えている。図１０の回路に対して、図２に示した本実施形態では、初期マスク演算部１１０１、アンマスク演算部１１０２、パーミュテーション部１３０１及び１３０２、選択部１７００並びに乱数生成部１８００が追加されている。
【０１２６】
図１０の非線形変換部１４０１は、本実施形態と異なり、マスクが入出力に反映されない非線形変換テーブルとされる。図１１は、図１０の非線形変換部１４０１の構成を例示する図である。非線形変換部１４０１は、非線形変換テーブル（S）１４２１〜１４２４を備えている。図２の非線形変換部１４００において、非線形変換テーブルをメモリに実装した場合には、図１０、図１１の比較例と、処理時間、回路規模ともに違いはない。
【０１２７】
処理時間については、最初に、乱数生成と選択値出力、初期マスク演算、最後にアンマスク演算、ラウンド処理中はデータのパーミュテーションが２回ずつ、の処理時間が追加される。このうち、特に、パーミュテーション処理が、本実施形態での処理時間の増加分にあたることになる。
【０１２８】
回路規模については、図２の初期マスク演算部１１０１、アンマスク演算部１１０２、パーミュテーション部１３０１及び１３０２、選択部１７００、乱数生成部１８００並びにマスク値を保存するROM領域が、図１０の回路構成に追加される。ただし、ROM領域については、初期マスクテーブルとアンマスクテーブルの2種類用意すればよい。
【０１２９】
ここで、非特許文献５に開示されたRSM法による構成と比較する。図１２に、RSM法による暗号処理回路の構成例（比較例２）を示す。図１２のRSM法の回路と、図２の本実施形態との相違点は、図１２の比較例では、図２のパーミュテーション部１３０１及び１３０２が、バレルシフト１３０３及び１３０４となっている点と、MMSj+1加算部１１０３が追加されている点である。
【０１３０】
また、図１２の非線形変換部１４０２のマスク配置も図２の非線形変換部１４００とは異なる。図１３は、RSM法の非線形変換部１４０２の構成を例示する図である。図１４は、図１３のｔ個の非線形変換テーブル（S1〜St）１４４１〜１４４４の構成を例示する図である。
【０１３１】
図１４のRSM法の非線形変換部１４０２では、入力側のマスクM={m1,m2,・・・,mt-1,mt}に対して、１つずつずらしたものが出力側のマスクN={m2,m3,・・・,mt,m1}となる。
【０１３２】
図１２のRSM法では、バレルシフトによって並び替えを行っている。RSM法では、最初に乱数によってシフトするバイト数を選択し、選択した数に応じて初期マスクの選択、及び、１ラウンド目のバレルシフト１３０３においてシフトする数が決定される。
【０１３３】
なお、バレルシフト１３０４は、バレルシフト１３０３と逆方向に、同じ数だけシフトすることで、データ位置を元に戻している。
【０１３４】
２ラウンド目以降は、バレルシフト１３０３及び１３０４は、前のラウンドでシフトした数よりも１つ多い数だけのシフトを行う。もし、シフト数がデータ幅以上となった場合にはシフト数は０になる。図１２のRSM法では、出力側のマスクが線形変換１５００によって変化するため、そのままでは、次のラウンドの非線形変換部１４０２においてマスクMによってマスクを解除して非線形変換テーブル１４２１〜１４２４（図１４）で正しい処理を行うことができない。
【０１３５】
したがって、RSM法では、ラウンド処理ごとに、マスクNが線形処理で変化したものN’を一度解除し、新たに次のラウンドのマスクMをかけ直す処理を、MMSj+1加算部１１０３で行う。
【０１３６】
処理時間について比較する。図１２の比較例（RSM法）の回路と比較して、本実施形態は、ラウンド処理ごとにMMSj+1加算部１１０３による演算処理を必要としない。そのため、ラウンド回数分の演算処理分の時間が短縮される。
【０１３７】
次に、図１２のRSM法による暗号処理回路の回路規模を、本実施形態と比較する。回路規模についても、MMSj+1加算部１１０３が、本実施形態との差分となる。したがって、MMSj+1加算部１１０３に関する部分だけRSM法よりも、本実施形態の方が回路規模が小さいことになる。
【０１３８】
次に、ROM領域について比較する。図１２のRSM法による暗号処理回路では、バレルシフトで何バイトシフトするかによって、初期マスクMjや途中のMMSj+1加算部１１０３で使用するマスクMMSj+1、最後のアンマスクMSj+nが変わってくる。例えば、AES128の場合、シフト幅のパターンが０〜１５バイトの１６パターンとすると、マスクの数は、３つのマスクで１６個必要となり、ROM領域は、
T＊１６＊３(T=１６バイト)
分必要となる。
【０１３９】
一方、本実施形態においても、図２の選択部１７００の選択値のパターン数に応じて、初期マスクやアンマスクのROM領域が変わってくる。もし、選択値のパターン数をRSM法でのシフト数と同じ数にした場合、RSM法に比べて、MMSj+1加算部１１０３で使用するマスクMMSj+1の分だけ、ROM領域を削減することができる。例えば、AES128の場合、選択部１７００の選択値のパターンが１６パターンとすると、マスクの数は、２つのマスクで１６個必要となり、ROM領域は、
T＊１６＊２(T=１６バイト)
分必要となる。
【０１４０】
なお、本実施形態では、ラウンド処理のみ行い、ラウンド処理前後では初期マスクとアンマスクの演算のみ行っているが、暗号によっては、前処理や後処理を行うこともある。この場合には、初期マスク演算部１１０１の前後に前処理を追加したり、アンマスク演算部１１０２の前後に後処理を追加した構成を備えた構成としてもよい。図１５の例では、ラウンド処理の前処理を行う前処理部１９０１を、初期マスク演算部１１０１とレジスタ１２００の間に備えている。図１６の例では、規定回数のラウンド終了後のレジスタ１２００の出力を受ける後処理部１９０２を、アンマスク演算部１１０２の前段に備えている。
【０１４１】
（第２の実施形態）
次に、本発明の第２の実施形態を説明する。本実施形態の暗号化回路は図１と同様、暗号化部１０００と鍵生成部２０００を含む。
【０１４２】
図１７は、本発明の第２の実施形態の暗号化部１０００の構成を例示する図である。図１７を参照すると、暗号化部１０００は初期マスク演算部１１０１、レジスタ１２０１及び１２０２、鍵演算部１６００、パーミュテーション部１３０１及び１３０２、非線形変換部１４００、線形変換部１５００、選択部１７００、乱数生成部１８００並びにアンマスク演算部１１０２を備えている。
【０１４３】
第２の実施形態は、Ｆｅｉｓｔｅｌ構造を持つ暗号に対する実施形態となっている。
【０１４４】
第１の実施形態との違いは、Ｆｅｉｓｔｅｌ構造の２系列のデータに対応するために、排他的論理和演算部１A００が追加された点、レジスタ１２００がレジスタ１２０１と１２０２の２つに分割された点と、鍵演算部１６００とパーミュテーション部１３０１の入力が異なる点、選択部１７００におけるsvと非線形変換部１４００のマスクＭとＮの関係式、初期マスク演算部１１０１の初期マスクテーブル１１１１、アンマスク演算部１１０２のアンマスクテーブル１１１３である。
【０１４５】
排他的論理和演算部１Ａ００は、レジスタ１２０２に格納された値と線形変換部１５００の出力とを加算する（排他的論理和をとる）。
【０１４６】
図１７において、レジスタ１２０１および１２０２はラウンド処理の中間値を記憶する。初回のラウンド処理では、初期マスク演算部１１０１の出力を分割したものが各レジスタに記憶される。２回目以降のラウンド処理では、レジスタ１２０１には排他的論理和演算部１Ａ００の結果が格納され、レジスタ１２０２には前のラウンドでレジスタ１２０１に格納されていた中間値が格納される。
【０１４７】
鍵演算部１６００は、レジスタ１２０１に格納されている値と、ラウンド鍵とを加算する（排他的論理和をとる）。
【０１４８】
第１のパーミュテーション部１３０１は、鍵演算部１６００の出力を入力値としてデータ列の並び替えを行う。このとき、どのような並び替えを行うかは、選択部１７００の選択値にしたがう。
【０１４９】
選択部１７００の選択値がsvであるとき、第２のパーミュテーション部１３０２の並び替えをP2sv(・)、線形変換をL(・)、選択値sv’のときの第１のパーミュテーション部１３０１の並び替えをP1sv’(・)、選択値svのときにレジスタ１２０２に格納されているデータにかかっているマスクをMRsvとし、選択部１７００の選択値svがあったときに、次の選択値がsv’になるとして、全てのsvに対して、前記非線形変換部１４００の入力側マスクMと出力側マスクNに対して、次の関係を満たせる並び替えパターンを、第１及び第２パーミュテーション部１３０１及び１３０２に持たせる。
M=P1sv’(L(P2sv(N)) (XOR) MRsv)
【０１５０】
初期マスクテーブル１１１１に格納されている各初期マスクは、選択値に基づいて選択され、平文との排他的論理和が演算される。演算後に、データは２系列に分割され、レジスタ１２０１と１２０２にそれぞれ格納される。
【０１５１】
レジスタ１２０１に格納されるデータにかかる初期マスクMLは、パーミュテーション部１３０１においてとり得る並び替えパターンのいずれかで並び替えることで、非線形変換テーブルの入力側マスクＭと等しくなる。選択値svのときの初期マスクMLをMLsv、選択値svのときの第１のパーミュテーション部１３０１の並び替えをP1sv(・)として次の関係を満たす。
P1sv(MLsv) = M 
【０１５２】
レジスタ１２０２に格納されるデータにかかる初期マスクMRは、選択部１７００の選択値svがあったときに、次の選択値がsv’になるとして、選択値がsvのときの初期マスクMLをMLsvとし、選択値sv’のときの初期マスクMRをMRsv’としたとき、MLsvとMRsv’は等しくなる。
MRsv’ = MLsv
【０１５３】
レジスタ１２０１に格納されるデータには、ラウンド処理をしている間、選択部１７００の選択値svに応じたマスクがかかっており、かかっているマスクは初期マスクMLsvと等しい。また、レジスタ１２０２に格納されるデータにも、ラウンド処理をしている間、選択部１７００の選択値svに応じたマスクがかかっており、かかっているマスクは初期マスクMRsvと等しい。
【０１５４】
アンマスクテーブル１１１３に格納されている各アンマスクは、選択値に基づいて選択され、ラウンド処理の結果であるレジスタ１２０１に格納されていた中間値と、排他的論理和演算部１Ａ００の結果、それぞれとの排他的論理和が演算される。演算された結果が暗号文として出力される。
【０１５５】
レジスタ１２０１に格納されていた中間値との演算が行われるアンマスクULは、パーミュテーション部１３０１においてとり得る並び替えパターンのいずれかで並び替えることで、非線形変換テーブルの入力側マスクＭと等しくなる。選択値svのときのアンマスクULをULsv、初期マスクをMLsv、選択値svのときの第１のパーミュテーション部１３０１の並び替えをP1sv(・)として次の関係を満たす。
P1sv(ULsv) = M
ULsv = MLsv
【０１５６】
排他的論理和演算部１Ａ００の結果との演算が行われるアンマスクURは、選択値svのときのアンマスクURをURsvとして、選択部１７００の選択値svがあったときに、選択値svのときの初期マスクMRsvとし、非線形変換部１４００の出力側マスクをN、第２のパーミュテーション部１３０２の並び替えをP2sv(・)、線形変換をL(・)として、次の関係を満たす。
URsv = L(P2sv(N)) (XOR) MRsv
【０１５７】
図１８は、第２の実施形態の動作を説明するフローチャートである。第１の実施形態との違いは、排他的論理和（ステップA14）とデータ入れ替え（ステップA15）が追加された点と、ステップの順番が入れ替わり、処理対象のデータが変わった点（ステップA5-1〜A9-1）である。図１７と１８を用いて、第２の実施形態の動作を説明する。
【０１５８】
ステップA4の後、処理されたデータはレジスタ１２０１及び１２０２に記憶される。初期マスク処理後、ラウンド処理として、ステップA9-1からステップA11が行われる。第２の実施形態では、まず鍵演算部１６００で、ラウンド鍵とレジスタ１２０１の中間値との排他的論理和演算を行う（ステップA9-1）。処理するデータ列の長さは、Feistel構造における処理となるため、元の平文のデータ長の半分となる。以降のラウンド処理における各ステップでも処理するデータ長は元の平文のデータ長の半分となる。
【０１５９】
次に、パーミュテーション部１３０１は選択値に基づき、データ列の並び替えを行う（ステップA5-1）さらに、非線形変換部１２００、パーミュテーション部１３０２および線形変換部１５００でそれぞれ処理が行われる（ステップA6-1、A7-1、A8-1）。
【０１６０】
続いて、排他的論理和演算部１Ａ００は、レジスタ１２０２に記憶された中間値と、線形変換部１５００の出力との排他的論理和を演算する（ステップA14）。
【０１６１】
排他的論理和演算部１Ａ００での演算後、規定ラウンド回数、ラウンド処理を繰り返したか否か（ラウンド処理終了）の判定を行う（ステップA10）。該判定の結果、ラウンド処理が規定回数終わっていない場合には、まず分割されたデータの入れ替えが行われ（ステップA15）、続けて選択部１７００において、選択値の更新（ステップA11）を行った後、ステップA9-1に戻り、再び、ラウンド処理を繰り返す。一方、ラウンド処理が規定回数部終了した場合には、ステップA12へ進む。
【０１６２】
ラウンド処理終了後、アンマスク演算部１１０２は、選択値に基づいてアンマスクテーブルから選択されたアンマスクと、レジスタ１２０１に記憶されている中間値および排他的論理和演算部１Ａ００の出力との排他的論理和を演算し、演算結果を暗号文として出力する（ステップA12）。
【０１６３】
なお、本実施形態では、２系列のFeistel構造以外にも、４系列や８系列などの一般化Feistelに適用することも可能である。図１９の例では、４系列の一般化Feistel構造に対して本実施形態を適用している。なお、図１９では選択部や乱数生成部は省略して記載している。
【０１６４】
（実施例１）
図２等を参照して説明した前記第１の実施形態の一具体例として、128ビットAES(AES128)を用いるときの暗号化処理回路を説明する。
【０１６５】
図２０は、実施例１の暗号化処理回路の暗号化部の構成を例示する図である。暗号化部は、初期マスク演算部３１０１、アンマスク演算部３１０２、レジスタ３２００、パーミュテーション部３３０１及び３３０２、マスク付SBOXを１６個備える非線形変換部３４００、図２の線形変換部１５００に対応するShiftRows演算部３５０１とMixColumns演算部３５０２、ラウンド鍵を排他的論理和で加算する鍵演算部３６０１及び３６０２、選択部３７００並びに乱数生成部３８００とを備えている。
【０１６６】
初期マスク演算部３１０１とアンマスク演算部３１０２は、それぞれ図３、図４と同じ構成を持つ。
【０１６７】
AES128では、ラウンド処理の前に鍵加算を行う必要があるため、鍵加算用の演算部３６０１が、初期マスク演算部３１０１とレジスタ３２００の間に追加されている。
【０１６８】
また、線形処理としては、ShiftRowsと、MixColumnssが用いられる。そのため、ShiftRows演算部３５０１とMixColumns演算部３５０２を、図２の線形処理部１５００として、備えている。なお、最終ラウンドではMixColumnsでの処理は行われないため、最終ラウンドでMixColumns演算部３５０２を回避するための経路を設けている。
【０１６９】
AES128でのパーミュテーションとして、４の倍数のバイトの巡回シフトによって並び替えを行い、さらに、４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えを行う、２種類の巡回シフトを組み合わせた並び替えを採用する。
【０１７０】
AES128では16バイトのデータを１バイトずつに区切り、各バイトのデータを4x4のデータで表現することがある。本実施形態では、４の倍数のバイトの巡回シフトのことを横方向への巡回シフトとし、４バイトごとに列を構成し、各列の中で同じ巡回シフトを縦方向への巡回シフトとする。
【０１７１】
図２３Ａから図２３Ｄは、4x4で表した16バイトのデータにおける、2種類の巡回シフトを示したものである。図２３Ａは元のAESのデータ配列、図２３Ｂは４の倍数のバイトの巡回シフトによって並び替えた結果（４＊２バイト巡回シフト）、図２３Ｃは４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えた結果（各列の中の２バイト巡回シフト）、図２３Ｄは４の倍数のバイトの巡回シフトによって並び替え、さらに、４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えた結果（４＊２バイト巡回シフト後、各列の中の２バイト巡回シフト）を示している。
【０１７２】
AES128における線形変換では、あるデータ列Xに対して2種類の巡回シフトによる並び替えを行い、並び替えたP1(X)に対して線形変換を行った結果L(P(X))と、同じデータ列に対して線形変換を行い、線形変換を行った結果L(X)を2種類の巡回シフトにより並び替えた結果P2(L(X))との結果を一致させることができるためである。なお、P1(・)とP2(・)はともに2種類の巡回シフトによる並び替えであるが、縦方向及び横方向への移動量は一致してなくてもよい。
【０１７３】
図２０において、パーミュテーション部３３０１及び３３０２では、選択部３７００による選択値Rにしたがって2種類の巡回シフトを行う。選択値Rがとり得る値はR={0,1,・・・,14,15}のいずれかとする。
【０１７４】
パーミュテーション部３３０１では、選択値Rと同じバイト位置のデータが0バイト目に来るように2種類の巡回シフトを行う。
【０１７５】
図２４Ａ及び図２４Ｂは、以下の式（１）に示すデータＸを、それぞれの選択値R（R=０〜１５）でシフトしたときのデータ位置PR(X)を示している。図２４Ａは、R=0〜７、図２４Ｂは、R=8〜15のPR(X)を示している。
【０１７６】
【数１】
2015059845.tif 000003
【０１７７】
パーミュテーション部３３０２では、パーミュテーション部３３０１とは逆に、0バイト目のデータが選択値Rと同じバイト位置に来るように2種類の巡回シフトを行う。
【０１７８】
図２５Ａ及び図２５Ｂは、上記のＸをそれぞれの選択値R（R=０〜１５）でシフトしたときのデータ位置PR(X)を示している。図２５Ａは、R=0〜７、図２５Ｂは、R=8〜15のPR(X)を示している。
【０１７９】
図２０の非線形変換部３４００の各非線形変換テーブルＳ１〜Ｓ16（図２１参照）は１バイト単位で処理を行う。非線形変換部３４００における入力側のマスク値Mおよび出力側のマスク値Nは16バイトとなり（マスク値Mは図２２の[m1,m2,m3, m16]の連結、マスク値Nは図２２の[n1,n2,n3, n16]の連結）、1バイトずつに区切られて、各マスク付非線形変換テーブルに対応づけられる。
【０１８０】
図２０の選択部３７００は、乱数生成部３８００が生成する乱数を受け取り、乱数を初期の選択値Rとする。
【０１８１】
また、選択部３７００では、ラウンド処理ごとに選択値Rの更新が行われる。本実施例における選択値Rの更新方法としては、例えば以下の方法が用いられる（ただし、以下に制限されない）。
・計算式を用意しておき、その計算式に現在の選択値、もしくは初期の乱数値と現在のラウンド数を入力して、次の選択値を求める、
・テーブルを用意しておき、現在の選択値、もしくは初期の乱数値と現在のラウンド数を引数として、次の選択値を読み出す。
【０１８２】
本実施例では、現在の選択値（R)を用いて、テーブルから、次の選択値(R')を読み出す方法により、選択値を更新する。
【０１８３】
非線形変換部３４００における入力側のマスク値Mおよび出力側のマスク値N（図２２参照）、および選択部３７００の選択値Rの更新用のテーブルの決め方について説明する。
【０１８４】
非線形変換部３４００における入力側のマスク値Mと出力側のマスク値Nのうち、一方は任意の値を設定できる。ここで、マスク値Nを設定した場合には、次に選択値Rと次のラウンドの選択値R’を設定する。
【０１８５】
そして、非線形変換部３４００における出力側のマスク値Nに対して、パーミュテーション部３３０２において選択値Rに対応する並び替えテーブルに基づき並び替えを行う。
【０１８６】
次に、並び替えた結果（P2R（N））に対して、線形処理として、ShiftRows演算部３５０１とMixColumns演算部３５０２で処理を行う。
【０１８７】
線形処理を行った結果（L（P2R（N）））に対して、パーミュテーション部３３０１において、選択値R’に対応する並び替えテーブルに基づき並び替えを行う。この並び替えの結果を、非線形変換部３４００の入力側のマスクMとする。
【０１８８】
逆にMに任意の値を設定した場合は、上記とは逆の手順として、パーミュテーション部３３０１における並び替えの逆演算、MixColumns演算部３５０２での逆演算、ShiftRows演算部３５０１の逆演算、及びパーミュテーション部３３０２の並び替えの逆演算によってNを求める。
【０１８９】
次に、選択値Rの更新用のテーブルの決め方について説明する。
【０１９０】
まず、非線形変換部３４００における出力側のマスク値Nをパーミュテーション部３３０２において選択値Rによって並び替え、線形処理のShiftRows演算部３５０１、MixColumns演算部３５０２を行ったデータL(P2(N))において、Mの0バイト目のマスクが位置しているバイトをR’とする。
【０１９１】
もしくは、パーミュテーション部３３０１においてL(P2(N))をMと同じ並びとするために必要な選択値をR’とする。この作業を、全てのRに対して行うことで、Rに対するR’を決定することができ、更新用のテーブルが完成する。
【０１９２】
乱数生成部３８００は、暗号処理開始時にR={0,1,・・・,14,15}の中のいずれかの値を生成し、選択部へ出力する。
【０１９３】
本実施例で用いるマスク値（16バイト）は以下の通りとする。なお、数値は１６進法で表記している。
【０１９４】
SBOX入力側マスクM={30482444cfb7dbbba1622a0b5e9dd5f4}
【０１９５】
SBOX出力側マスクＮ={6afe93444801c1bbb7783e4895876cb7}
【０１９６】
図２６および図２７は、図２０の初期マスク演算部３１０１の初期マスクテーブル（図３の１１１１）と、アンマスク演算部３１０２のアンマスクテーブル（図４の１１１３）を示す。これらの初期マスクとアンマスクは、初期マスク演算部３１０１の初期マスクテーブル(図３の１１１１)、アンマスク演算部３１０２のアンマスクテーブル（図４の１１１３）に記憶される。
【０１９７】
一方、MとＮは、非線形変換部３４００のSBOX（図２１のS1〜S16）に事前に反映しておく。元のSBOXの関数をS(x)とした場合、反映後のSBOX  St（x）(t=1〜１６)は以下で与えられる。
【０１９８】
St（x）＝S(xt(XOR)mt)(XOR)nt
【０１９９】
ここで、m、nは、MとMの中のある１バイト分のマスク値を示す。
【０２００】
マスク値の関係として、MはＮに、ShiftRows,Mixcolumnsで演算した後、パーミュテーション（４バイト巡回シフト）をしたものとなる。
【０２０１】
つまり、R=0として、パーミュテーション部３３０２で巡回シフトし（R=０なので、シフトはしない）、ShiftRows、Mixcolumnsで演算した後、R’=4としてパーミュテーション部３３０１で巡回シフトしたものである。
【０２０２】
本実施例では、R=0、R’=4として、マスクや選択値の更新用のテーブルを設定しているが、RとR’の組み合わせを変えることで、異なるマスクや選択値の更新用のテーブルを構築することが可能である。
【０２０３】
初期マスクはR=0のときは、SBOX入力側マスクMと等価となり、それ以外の選択値Rの初期マスクはR=0の初期マスクM0に対して、パーミュテーション部３３０２で選択値Rとして巡回シフトを行ったものとなる。
【０２０４】
アンマスクは、Nをパーミュテーション部３３０２において選択値Rで巡回シフトを行ったものに、ShiftRowsで変換したものと等価となる。
【０２０５】
また、図２８は、現在の選択値R（０〜１５）と次のラウンドの選択値R’の関係を表すテーブルの一例を示す。
【０２０６】
図２９は、図２０の実施例１の動作を説明するフローチャートである。図２０、図２９を参照して、実施例１の動作を説明する。
【０２０７】
はじめに、平文及び秘密鍵を暗号化処理回路へ入力し、平文は暗号化部１０００、秘密鍵は鍵生成部２０００へ入力される（ステップB1）。
【０２０８】
暗号処理が開始されたときに、図２の乱数生成部３８００は乱数を生成し、乱数が選択部３７００へ入力される（ステップB2）。
【０２０９】
選択部３７００は、入力された乱数を基に選択値Rを出力する（ステップB3）。
【０２１０】
初期マスク演算部３１０１はて、図２６の初期マスクテーブルより選択値Rに基づいて初期マスクを選択し、平文と初期マスクとの排他的論理和を演算する。この排他的論理和演算（加算演算）により、平文にマスクをかける（ステップB4）。
【０２１１】
次に、鍵演算部３６０１は、マスクがかかった平文と、鍵生成部２０００から出力されるラウンド鍵との排他的論理和をとり、演算結果をレジスタ３２００へ記憶する（ステップB5）。
【０２１２】
鍵演算部３６０１での処理後、ラウンド処理として、ステップB6〜B13が行われる。なお、１０ラウンド目のみ処理内容が異なるため９ラウンド目終了時に次のステップへ分岐する。
【０２１３】
まず、パーミュテーション部３３０１は選択値Rに基づき、データ列の並び替えを行う（ステップB6）。
【０２１４】
次に、非線形変換部３４００は、パーミュテーション部３３０１の出力値を非線形変換し、非線形変換出力（Y）を出力する（ステップB7）。非線形変換部３４００は、パーミュテーション部３３０１の出力値を１６個に分割し、x1〜x16が非線形変換テーブル（S1〜S16）３４１１〜３４１４（図２１参照）へと入力される。
【０２１５】
これら、非線形変換テーブルはマスク付の非線形変換テーブルとなっている。非線形変換テーブル（S1）３４１１では、図２２に示すように、排他的論理和演算部３４３１にて、x1とm1との排他的論理和を演算し、演算結果を非線形変換テーブル３４２１（S(・)）によって非線形変換し、排他的論理和演算部３４３５で非線形変換した結果とn1との排他的論理和をとり、排他的論理和演算結果を非線形変換テーブル（S1）３４１１の出力y1とする。
【０２１６】
ここで、ステップB4で平文にかけた初期マスク値と、m1〜mtを結合（concatenate）したマスク値M（=m1||m2||・・・||mt；ただし、||は連結（連接）を示す）とが一致する。これは、選択値Rが共通であり、Mを選択値Rに基づいてパーミュテーション部３２０２によって並び替えたものを初期マスクテーブルに格納しているためである。初期マスクは、パーミュテーション部３２０２とは逆の並び替えを行うパーミュテーション部３２０１によって並び替えられるため、初期マスクは入力側のマスク値Mと同じ並びとなり、入力側のマスク値Mと初期マスクは一致する。
【０２１７】
初期マスクと、非線形変換部３４００での入力側のマスク値Mが相殺されるため（一致する値同士の排他的論理和をとると、０となる）、非線形変換３４２１〜３４２４は、元の平文に対して非線形変換を行うこととなる。
【０２１８】
そして、図２２の排他的論理和演算部３４３５〜３４３８において、元の平文を非線形変換した結果に、n1〜n16を連結したマスクＮ（=n1||n2||・・・||n16）をかけることとなる。
【０２１９】
図２０のパーミュテーション部３３０２は、選択値Rに基づき、非線形変換部３４００の出力Yを並び替える（ステップB8）。
【０２２０】
パーミュテーション部３３０２で行われる並び替えは、パーミュテーション部３３０１の並び替えとは逆である。パーミュテーション部３３０２で逆の並び替えを行うことで、データの順番を、パーミュテーション部３３０１に入力される前の順番に戻すことができる。また、データにかかっているマスクの配列が並び替えられる。
【０２２１】
次に、ShiftRows演算部３５０１は、並び替えられた非線形変換の結果に対して、ShiftRows演算を行う（ステップB9）。
【０２２２】
つづけて、MixColumns演算部３５０２は、ShiftRows演算の結果に対して、MixColumns演算を行う（ステップB10）。
【０２２３】
鍵演算部３６０１は、MixColumns演算部３５０２の出力と、鍵生成部２０００から送られてきたラウンド鍵との排他的論理和を演算し、演算結果を出力する（ステップB11）。演算結果はレジスタ３２００に記憶される。
【０２２４】
選択部３７００は、例えば図２８に示したテーブルにしたがって、現在の選択値Rから次の選択値R'へ更新する（ステップB12）。
【０２２５】
図２０の鍵演算部３６０１及び選択部３７００における処理後、ラウンド処理を９回繰り返したか否か（最終ラウンド処理開始）の判定を行う（ステップB13）。
【０２２６】
該判定の結果、ラウンド処理が規定回数分（９ラウンド）終わっていない場合には、ステップB6に戻り、再び、ラウンド処理を繰り返す。
【０２２７】
一方、ラウンド処理が９回終了した場合には、最終ラウンド処理として、ステップB14へ進む。
【０２２８】
ラウンド処理を繰り返す場合、まず、パーミュテーション部３３０１は、鍵演算部３６０１の結果を並び替える（ステップB6）。
【０２２９】
次に、並び替えたデータ列に対して、非線形変換部３４００は非線形変換を行い、変換結果を出力する（ステップB7）。
【０２３０】
パーミュテーション部３３０２は、非線形変換部３４００の変換結果を選択値Rに基づき並び替え、並び替えた結果を出力する（ステップB8）。
【０２３１】
次に、ShiftRows演算部３５０１は、並び替えられた非線形変換の結果に対して、ShiftRows演算を行う（ステップB9）。
【０２３２】
つづけて、MixColumns演算部３５０２は、ShiftRows演算の結果に対して、MixColumns演算を行う（ステップB10）。
【０２３３】
鍵演算部３６０１は、MixColumns演算部３５０２の出力と、鍵生成部２０００から送られてきたラウンド鍵との排他的論理和を演算し、演算結果を出力する（ステップB11）。演算結果はレジスタ３２００に記憶される。
【０２３４】
選択部３７００は、例えば図２８に示したテーブルにしたがって、現在の選択値Rから次の選択値R'へ更新する（ステップB12）。
【０２３５】
ラウンド処理が規定回数行われた場合、ステップB12からステップB13へと進む。
【０２３６】
最終ラウンド（１０ラウンド目）では、ステップB6-1,B7-1,B8-1,B9-1及びB11-1が、上述したステップB6,B7,B8,B9及びB11と同じように行われる。
【０２３７】
AESでは、最終ラウンドにおいて、MixColumns処理は行わないため、ステップB10は行われない。
【０２３８】
鍵演算部３６０１での処理終了後、アンマスク演算部３３０２は、鍵演算部３６０１の処理結果と、図２７に示したアンマスクテーブルの中から選択値Rが示すアンマスクとの排他的論理和を演算し、演算結果を暗号文として出力する（ステップB14）。
【０２３９】
アンマスクは、非線形変換部３４００における出力側マスク値Nを、パーミュテーション部３３０２において選択値Rで巡回シフトを行ったものに、ShiftRows演算部３５０１で変換したものと等価となる。
【０２４０】
したがって、鍵演算部３６０１の処理結果と、選択値Rで読み出したアンマスクとの排他的論理和を演算することで、鍵演算部３６０１の処理結果にかかっているマスクを解除することができ、暗号文を得ることができる。
【０２４１】
最後に暗号文Cを出力し終了となる（ステップB15）。
【０２４２】
本実施例を適用したときのデータの遷移を、図３０Ａ、図３０Ｂ、図３０Ｃ、図３１Ａ、図３１Ｂ、図３１Ｃ、図３２Ａ、図３２Ｂ、図３２Ｃ、図３３Ａ及び図３３Ｂに示す。
【０２４３】
図３０Ａ〜図３３Ｂは、最初の乱数がR＝0のときの遷移を示す図である（図３０Ａ：ラウンド０、図３０Ｂ：ラウンド１、図３０Ｃ：ラウンド２、図３１Ａ：ラウンド３、図３１Ｂ：ラウンド４、図３１Ｃ：ラウンド５、図３２Ａ：ラウンド６、図３２Ｂ：ラウンド７、図３２Ｃ：ラウンド８、図３３Ａ：ラウンド９、図３３Ｂ：ラウンド１０）。
【０２４４】
また、図３４Ａ〜図３７Ｂは、最初の乱数がR=7のときの遷移を示す図である（図３４Ａ：ラウンド０、図３４Ｂ：ラウンド１、図３４Ｃ：ラウンド２、図３５Ａ：ラウンド３、図３５Ｂ：ラウンド４、図３５Ｃ：ラウンド５、図３６Ａ：ラウンド６、図３６Ｂ：ラウンド７、図３６Ｃ：ラウンド８、図３７Ａ：ラウンド９、図３７Ｂ：ラウンド１０）。
【０２４５】
また比較例のAES１２８におけるデータ遷移を、図３８Ａ〜図４１Ｂに示す。図４２に、比較例のAESの暗号化部の回路構成を示す。また、図４３は図４２の非線形変換部３４０１の構成を示す。図４３の非線形変換部３４０１では、１６個のマスクなしの非線形変換テーブルを備える。
【０２４６】
図３０Ａ〜図４１Ｂでは、以下のデータに対して処理を行っている。
【０２４７】
平文＝{3243f6a8885a308d313198a2e0370734}
【０２４８】
秘密鍵＝{2b7e151628aed2a6abf7158809cf4f3c}
【０２４９】
暗号文＝{3925841d02dc09fbdc118597196a0b32}
【０２５０】
SBOX入力側マスクM={30482444cfb7dbbba1622a0b5e9dd5f4}
【０２５１】
SBOX出力側マスクＮ={6afe93444801c1bbb7783e4895876cb7}
【０２５２】
なお、初期マスクテーブルは図２６、アンマスクテーブルは図２７に示している。
【０２５３】
また、選択部３７００における選択値Rの更新は、図２８のテーブルにもとづいて行う。
【０２５４】
なお、１ラウンド目から１０ラウンド目のAfterAddInputMask、AfterSubBytes、AfterAddOutputMask、InputMask、OutputMaskは、データの遷移を示すために記載されているが、実際の処理では、StartofRoundの次のAfterPermutationR=xの値が、図２０の非線形変換部３４００に入力されたら、AfterAddOutputMaskの値のみが出力される。そのため、AfterAddInputMask、AfterSubBytes、InputMask、OutputMaskの値は、非線形変換部３４００の変換処理では現れない。
【０２５５】
選択値の更新はラウンドの最後に行い、どのように遷移しているかは、AfterAddRoundKeyの下にR:x->x’の形で示している。
【０２５６】
（実施例２）
暗号として3D暗号を用いるときの暗号化処理回路を実施例２として説明する。はじめに、3D暗号を用いるときの暗号化処理回路の一般的な構成例を説明する。3D暗号とは、AESの暗号化処理を利用したアルゴリズム構造を持ち、AESが４ｘ４の16バイト（128ビット）を処理単位としているのに対し、3D暗号では４ｘ４ｘ４の64バイト（512ビット）の３次元ブロックを処理単位としている。また、このブロックに対してAES的処理と３次元的ラウンド関数が追加されている（非特許文献６）。3D暗号で扱われるデータ形式を以下の式（２）に示す。
【０２５７】
【数２】
2015059845.tif 000004
【０２５８】
3D暗号では４ｘ４ｘ４の64バイト（512ビット）の３次元ブロックが1データブロックとなる。16バイト区切りで１スライスとし、１から16バイト目が１スライス目、17から32バイト目が2スライス目、33から48バイト目が3スライス目、49から64バイト目が4スライス目となる。
【０２５９】
図４４は、3D暗号の暗号化回路の構成（参考例）を示す図である。３D暗号の暗号化回路は、レジスタ４２００、非線形変換部４４０１、拡散関数部（θ）４５０１、最大距離分離行列部（π）４５０２並びに鍵演算部（AddRoundKey）４６０１及び４６０２を備えている。
【０２６０】
非線形変換部４４０１は、入力値Xを非線形変換し、変換結果を出力値Yとして出力する。図４５は非線形変換部４４０１の構成を例示する図である。非線形変換部４４０１は、６４個の非線形変換テーブル（γ）４４２１〜４４２４で構成される。非線形変換テーブル（γ）４４２１〜４４２４では、AESのSBOX（SubstitutionBox）と同様の非線形変換を行う。
【０２６１】
拡散関数部(θ)４５０１では、非線形変換部４４０１の出力値Yに対して拡散処理を行い、処理結果を最大距離分離行列部(π)４５０２へ出力する。拡散関数部（θ）４５０１は、拡散関数θ１又はθ２にしたがって拡散処理を行う。なお、奇数ラウンドでは、θ１による拡散を行い、偶数ラウンドではθ２による拡散を行う。
【０２６２】
θ１は、各スライスの中でShiftRowsを行う処理となる。θ２は、各スライスの１列目の４バイトを４列あわせたものを４ｘ４の行列とし、その行列に対して、ShiftRowsを行う。Xに対してθ１及びθ２を適用した場合の例を以下の式（３）及び式（４）に示す。
【０２６３】
【数３】
2015059845.tif 000005
【数４】
2015059845.tif 000006
【０２６４】
最大距離分離行列部（π）４５０２では、拡散関数部（θ）４５０１の処理結果の各スライスと、４ｘ４の最大距離分離行列（MDS）との積を計算する。最大距離分離行列部（π）４３０２で行われる計算の例として、Xの第１スライスＸ１との計算を以下の式（５）に示す。
【０２６５】
【数５】
2015059845.tif 000007
【０２６６】
なお、MDS内の要素は16進数となる。ラウンド鍵加算部（AddRoundKey）４６０１及び４４０２は最大距離分離行列部（π）４５０２の処理結果、及び、平文と512ビットのラウンド鍵との排他的論理和を演算し、演算結果を出力する。
【０２６７】
図４６は、図４４の参考例の動作を説明するフローチャートである。図４４、図４６を参照して参考例の動作を説明する。
【０２６８】
はじめに、平文及び秘密鍵を暗号化処理回路へ入力し、平文は暗号化部１０００、秘密鍵は鍵生成部２０００へ入力される（ステップC1）。
【０２６９】
鍵演算部４６０２は、平文とラウンド鍵Kiとの排他的論理和を演算する（ステップC2）。
【０２７０】
排他的論理和後、ラウンド処理としてステップC3〜C7が行われる。
【０２７１】
まず、非線形変換部４４００は、鍵演算部４６０１又は４６０２の出力結果の非線形変換を行う（ステップC3）。非線形変換部４４００は内部で、非線形変換部４４００への入力値を１バイトごとに分割し、非線形変換テーブル（γ）４４２１〜４４２４で非線形変換を行う。
【０２７２】
拡散関数部（θ）４５０１は、奇数ラウンド目であるか否かを判断する（ステップC4）。
【０２７３】
奇数ラウンド目の場合、非線形変換部４４０１の出力に対して拡散関数θ１で拡散処理を行う（ステップC5-1）。
【０２７４】
偶数ラウンド目の場合、非線形変換部４４０１の出力に対して拡散関数θ２で拡散処理を行う（ステップC5-2）。
【０２７５】
最大距離分離行列部（π）４５０２は、拡散関数部（θ）４５０１の出力とMDS行列πとの演算を行う（ステップC6）。
【０２７６】
鍵演算部４６０１は、最大距離分離行列部（π）４５０２の演算結果と、鍵生成部２０００で生成されたラウンド鍵との排他的論理和を演算する（ステップC2）。
【０２７７】
鍵演算部４６０１での演算後、現在のラウンドが、２１ラウンド目（次が最終ラウンド）であるか否かを判断する（ステップC7）。
【０２７８】
次が最終ラウンドではない場合には、ステップC3に戻りラウンド処理を繰り返す。次が最終ラウンドの場合、ステップC3-1へ進む。
【０２７９】
２２ラウンド目では、MDS行列πとの演算がスキップされる。そのため、非線形変換処理（ステップC3-1）、拡散処理θ２（ステップC5-2）、鍵演算部４６０１での処理(ステップC2)が行われる。ここでラウンド処理が終了となる。
【０２８０】
最後に、鍵演算部４６０１の結果を暗号文として出力して終了する（ステップC8）。
【０２８１】
以上の３D暗号の暗号化処理回路へ本発明を適用した実施例２を示す。図４７は、実施例２の暗号化部の構成を例示する図である。図４４の３D暗号の暗号化部の回路構成との相違点は、マスク演算用の初期マスク演算部４１０１、アンマスク演算部４１０２とパーミュテーション部４３０１〜４３０２、選択部４７００、および乱数生成部４８００が追加された点と、図４４の非線形変換部４４０１の代わりに、マスク付の非線形変換テーブル（γ１〜γ６４）４４１１〜４４１４を備える非線形変換部４４００を備えている点である。
【０２８２】
初期マスク演算部４１０１は初期マスクと入力データとの、アンマスク演算部４１０２ではアンマスクと入力データとの排他的論理和を演算する。
【０２８３】
パーミュテーション部４３０１及び４３０２は、選択値に基づき入力されたデータの並び替えを行う。なお、パーミュテーション部４３０２はパーミュテーション部４３０１とは逆の並び替えを行う。
【０２８４】
非線形変換部４４００は入力されたデータの非線形変換を行う。非線形変換部４４００は６４個のマスク付非線形変換テーブル（γ１〜γ６４）４４１１〜４４１４を備える。非線形変換部４４００は、入力値を１バイトずつ６４個のデータに分割し、それぞれマスク付非線形変換テーブル（γ１〜γ６４）４４１１〜４４１４で非線形変換処理を行う。図４８は非線形変換部４４００の構成を例示する図である。
【０２８５】
非線形変換テーブル（γ１）４４１１は、１バイトの入力値とマスクm1を排他的論理和で演算した値に対して、非線形変換テーブルγで非線形変換を行い、非線形変換した結果にマスクn1を排他的論理和した値を出力値としてとる。図４９は非線形変換部４４００の構成をである。図４９は図４８の各非線形変換テーブル４４１１〜４４１４の入出力の関係を示した図である。
【０２８６】
実施例２のマスク値について説明する。３Ｄ暗号では奇数ラウンドと偶数ラウンドで拡散処理が変わるため、対策が必要となる。
【０２８７】
１つ目の対策は、奇数ラウンドと偶数ラウンドで非線形変換部を切り替える方法である。マスク値の組み合わせとして２通り用意し、それにあわせて２つの非線形変換部を用意する。非線形変換部４４００A及び４４００Bの出力値はセレクタ４４５０で選択され、奇数ラウンド時には４４００Aの出力値が、偶数ラウンド時には４４００Bの出力値が選択される（図５０）。
【０２８８】
マスク値の設定では、入力側もしくは出力側のどちらか一方のマスクを任意に設定できる。非線形選択部４４００Aの入力側マスクMaと４４００Bの入力側マスクMbを任意に設定するか、逆に非線形選択部４４００Aの出力側マスクNaと４４００Bの出力側マスクNbを任意に設定するかの、どちらか一方の組み合わせを任意に設定が可能である。
【０２８９】
直前の偶数ラウンドの選択値Rと次の奇数ラウンドの選択値R’を設定した上で、非線形選択部４４００Aの入力側マスクMaは、直前の偶数ラウンドでNbに対して、パーミュテーション部４３０２によるパーミュテーション、θ２による拡散処理、MDS行列πによる演算処理、及びパーミュテーション部４３０１によるパーミュテーションが行われたものとする。
【０２９０】
これにより、偶数ラウンド中に演算が行われたNbを、次の奇数ラウンドの非線形選択部４４００Aにて相殺することができる。
【０２９１】
一方、非線形変換部４４００Bの入力側マスクMbは、直前の偶数ラウンドの選択値Rと次の奇数ラウンドの選択値R’を設定した上で、直前の偶数ラウンドでNaに対してパーミュテーション部４３０２によるパーミュテーション、θ１による拡散処理、MDS行列πによる演算処理、及びパーミュテーション部４３０１によるパーミュテーションが行われたものとする。
【０２９２】
これにより、奇数ラウンド中に演算が行われたMb-Aを、次の偶数ラウンドの非線形選択部４２０Bにて相殺することができる。
【０２９３】
また、初期マスクテーブルは、１ラウンド目は非線形選択部４２００Aが選択されるため、Maに対してパーミュテーション部４３０１において各選択値に対する並び替えの逆を行ったものとする。
【０２９４】
一方、アンマスクテーブルは、最後の２２ラウンド目には、πとの行列演算が行われないため、Nbに対して、θ２とパーミュテーション４３０２の各選択値の並び替えが行われた値となる。
【０２９５】
こちらの対策では、非線形選択部を２つ用意する必要があるが、６４種類のマスク値を設定することが可能となる。
【０２９６】
２つ目の対策は、Nに対してθ１とθ２のどちらの演算が行われても、結果が等しくなるように、マスクを設定するものである。設定の仕方として、最初に現在のラウンドの選択値Rと次のラウンドの選択値R’を設定する。次に、第１スライスにあたる１〜１６バイト目の出力側マスクN1に任意の値を設定する。
【０２９７】
第２スライスの１７〜３２バイト目の出力側マスクN2は、N1を１２バイト巡回シフトしたものとする。
【０２９８】
第３スライスの３３〜４８バイト目の出力側マスクN3は、N1を８バイト巡回シフトしたものとする。
【０２９９】
さらに、第４スライスの４９〜６４バイト目の出力側マスクN4は、N1を４バイト巡回シフトしたものとする。
【０３００】
続けて、入力側マスクMを求める。MはN（={N1||N2||N3||N4}；ただし、||は連結（連接）を示す）に対して選択値Rでのパーミュテーション４３０２とθ１とπ、及び選択値R’でのパーミュテーション４３０１を行ったものとする。
【０３０１】
図５１に以上の方法で設定した入力側マスクMを示す。
【０３０２】
このように設定することで、１つの非線形変換部を備えるだけで、ラウンド処理を繰り返すことができる。２つ目の対策では、非線形変換部は１つですむが、マスク値は１６種類のみ設定可能である。
【０３０３】
次に、実施例２におけるパーミュテーションについて説明する。
【０３０４】
３Ｄ暗号に適用可能なパーミュテーションとして、３つのステップによる並び替えがあげられる。
【０３０５】
１ステップ目として、スライスごと巡回シフトを行う。これは、１６の倍数のバイトでデータ全体を巡回シフトすることとなる。
【０３０６】
２ステップ目として、各スライス内で、４の倍数のバイトの巡回シフトを行う。つまり、１〜１６バイト目の中で、０・４・８・１２バイトのいずれかの巡回シフトを、１７〜３２バイト目の中で、０・４・８・１２バイトのいずれかの巡回シフトを行っていく。他の２つのスライスも同様に０・４・８・１２バイトのいずれかの巡回シフトを行っていく。
【０３０７】
３ステップ目として、１〜４バイトを１列目、５〜８バイト目を２列目と４バイト単位で列を構成し、各列の内部で同じ巡回シフトを行う方法がある。
【０３０８】
図５２Ａ及び図５２Ｂは、上記の３ステップによるパーミュテーションを示している図である。
【０３０９】
図５３Ａ及び図５３Ｂは、実施例２の動作を説明するフローチャートである。図４６の比較例との相違点は、ステップＣ９〜１５及びＣ１２−１が追加された点と、図４６のステップＣ３及びＣ３−１が、マスク付非線形変換（ステップＣ３−２）に変更された点である。
【０３１０】
図４７並びに図５３Ａ及び図５３Ｂを使い、実施例２の動作を説明する。
【０３１１】
はじめに、平文及び秘密鍵を暗号化処理回路へ入力し、平文は暗号化部１０００、秘密鍵は鍵生成部２０００へ入力される（ステップC1）。
【０３１２】
乱数生成部４８００は乱数を生成し、選択部４７００へ出力する（ステップC9）。
【０３１３】
選択部４７００は、乱数から選択値を決定し、選択値を出力する（ステップC10）。
【０３１４】
初期マスク演算部４１０１は、図３の初期マスクテーブル１１１１より選択値に基づいて初期マスクを選択し、平文と初期マスクとの排他的論理和を演算する。この排他的論理和演算（加算演算）により、平文にマスクをかける（ステップC11）。マスクがかかった平文はレジスタ４２００に記憶される。また、鍵演算部４６０１は、平文とラウンド鍵Kiとの排他的論理和を演算する（ステップC2）。
【０３１５】
マスク処理後、ラウンド処理として、ステップC12からステップC7が行われる。まず、図４７のパーミュテーション部４３０１は選択値に基づき、データ列の並び替えを行う（ステップC12）。
【０３１６】
次に、非線形変換部４４００は、パーミュテーション部４３０１の出力値を非線形変換し、非線形変換出力を出力する（ステップC3-2）。非線形変換部４４００は、パーミュテーション部４３０１の出力値を64個に分割し、x1〜x64が、非線形変換テーブルγ１〜γ６４）４４１１〜４４１４へと入力される。これら、非線形変換テーブルはマスク付の非線形変換テーブルとなっている。非線形変換テーブル（γ１）４４１１の結果は、x1とm1との排他的論理和を演算し、演算結果を非線形変換γ(・)によって非線形変換し、非線形変換した結果とn1との排他的論理和をとった結果となる。
【０３１７】
パーミュテーション部４３０２は、選択値に基づき、非線形変換部４４００の出力を並び替える（ステップC13）。パーミュテーション部４３０２で行われる並び替えはパーミュテーション部４３０１とは逆の並び替えである。逆の並び替えを行うことで、データの順番をパーミュテーション部４３０１に入力される前の順番に戻すことができる。また、データにかかっているマスクの配列が並び替えられる。
【０３１８】
拡散関数部（θ）４５０１は、奇数ラウンド目であるか否かを判断する（ステップC4）。
【０３１９】
奇数ラウンド目である場合、非線形変換部４４００の出力に対して拡散関数θ１で拡散処理を行う（ステップC5-1）。
【０３２０】
偶数ラウンド目である場合、非線形変換部４４００の出力に対して拡散関数θ２で拡散処理を行う（ステップC5-2）。
【０３２１】
最大距離分離行列部（π）４５０２は、拡散関数部（θ）４５０１の出力とMDS行列πとの演算を行う（ステップC6）。
【０３２２】
鍵演算部４６００は、最大距離分離行列部（π）４５０２の演算結果と、鍵生成部２０００で生成されたラウンド鍵との排他的論理和を演算する（ステップC2）。
【０３２３】
また、選択部４７００は選択値の更新を行う（ステップC14）。
【０３２４】
鍵演算部４６００での演算、選択値の更新後、現在のラウンドが２１ラウンド目（次が最終ラウンド）であるか否かを判断する（ステップC7）。
【０３２５】
次が最終ラウンドではない場合、ステップC12に戻りラウンド処理を繰り返す。次が最終ラウンドの場合、ステップC12-1へ進む。
【０３２６】
２２ラウンド目では、MDS行列πとの演算がスキップされる。そのため、マスク付非線形変換処理（ステップC3-2）、拡散処理θ２（ステップC5-2）、鍵演算(ステップC2)、が行われる。ここでラウンド処理が終了となる。
【０３２７】
続いて、アンマスク演算部４１０２は、図４のアンマスクテーブル１１１３より選択値にもとづいてアンマスクを選択し、ラウンド処理の結果である鍵演算部４６００の出力と、アンマスクとの排他的論理和を演算し、演算結果を暗号文として出力する（ステップC15）。このアンマスクとの排他的論理和は、ラウンド処理の結果にかかっているマスクを解除し、本来の暗号文を得るものである。
【０３２８】
最後に、アンマスク演算部４１０２の結果を暗号文として出力して終了する（ステップC8）。
【０３２９】
（実施例３）
暗号としてTWINEを用いるときの暗号化処理回路を実施例３として説明する。はじめに、TWINEを用いるときの暗号化処理回路の一般的な構成例を説明する。TWINEとは、一般化Feistelを改良した構造を持ち、64ビットのデータを16個のサブブロックに分割した4ビットを処理単位としている。このサブブロックのうち、８つのサブブロックにのみ鍵の値を与えた後、Ｆ関数により変換を行い、残りの８つのサブブロックに排他的論理和演算で暗号化処理をする（非特許文献７）。
【０３３０】
図５４は、TWINEの暗号化処理回路の暗号化部の構成（参考例）を示す図である。TWINEの暗号化回路は、レジスタ５２００、８個のＦ関数部５Ａ０1〜５Ａ０４、８個の排他的論理和演算部５９０１〜５９０４、線形変換部５５００を備えている。
【０３３１】
レジスタ５２００には平文もしくは１ラウンドごとの処理結果（中間値）が記憶される。
【０３３２】
図５５は、Ｆ関数部５Ａ０１の構成を例示する図である。TWINEのF関数部５Ａ０１は、ラウンド鍵ｋｉ１との排他的論理和を演算する排他的論理和演算部５４１１と、非線形変換テーブル５４２１とを備える。TWINEのF関数部５Ａ０１は、まずラウンド鍵のうちの４ビット部分(ki_1)と入力との排他的論理和演算を行い、演算結果を非線形変換テーブル５４２１によって非線形変換Ｓ（・）を行う。
【０３３３】
つづいて、図５４の排他的論理和演算部５９０１は、Ｆ関数部５Ａ０１の出力とレジスタ５２００に記憶に記憶されていたサブブロックのうちの１つとの排他的論理和演算をとる。
【０３３４】
次に、線形変換部５５００は、レジスタ５２００に記憶されていた８つのサブブロックと、排他的論理和演算部５９０１〜５９０４の結果に対して、線形変換を行う。図５６は線形変換部５５００の処理を示している。図５６において、線形変換部５５００では１６個のサブブロックの入れ替えのみ行っている。
【０３３５】
図５７は図５４の回路を等価変形した回路を示す。図５７では最初に平文が２つに分割され、それぞれレジスタ５２０１と５２０２に記憶される。ここで、平文は１６個のサブブロックにまず分割され、分割されたサブブロックのうち奇数番目（１，３、・・・、１５）のデータがレジスタ５２０１へ、偶数番目（２，４、・・・、１６）のデータがレジスタ５２０２へ記憶される。暗号文を出力するときには、分割されたデータの順番を元に戻して出力する。
【０３３６】
図５７では、データが２系列に分割され、分割されたうちの１系列を鍵演算部５６００および非線形変換部５４０１で処理し、排他的論理和演算部５９００で処理した結果ともう１つの系列との排他的論理和を演算する。排他的論理和演算部５９００の結果は線形変換部５５０１で線形変換され、変換結果はレジスタ５２０１へ記憶される。一方、レジスタ５２０１に記憶されていたデータは線形変換部５５０２で線形変換され、レジスタ５２０２へ記憶される。
【０３３７】
図５８は図５７の鍵演算部５６００の構成を示す図である。鍵演算部５６００は８つの排他的論理和演算部５６１１〜５６１４で構成される。鍵演算部５６００は、入力およびラウンド鍵が８つのサブブロックに分割し、サブブロックごとに排他的論理和演算を行う。
【０３３８】
図５９は図５７の非線形変換部５４０１の構成を示す図である。非線形変換部５４０１は図５４の非線形変換テーブル５４２１〜５４２４を８個備えている。非線形変換部５４０１は、入力が８つのサブブロックに分割し、サブブロックごとに非線形変換テーブル５４２１〜５４２４で非線形変換を行う。
【０３３９】
図６０と図６１は図５７の線形変換部５５０１と５５０２の構成を示す図である。図５６の線形変換部５５００は１６個のサブブロックの入れ替えを行っていたが、図６０および図６１の線形変換部５５０１と５５０２は８個のサブブロックの入れ替えを行う。
【０３４０】
図６２は図５７のTWINEの動作を説明するフローチャートである。図５７〜６２を参照して、TWINEの動作を説明する。
【０３４１】
はじめに、平文及び秘密鍵を暗号化処理回路へ入力し、平文は暗号化部１０００、秘密鍵は鍵生成部２０００へ入力される（ステップD1）。暗号化部１０００に入力された平文は１６個のサブブロックに分割され、分割された平文のうち奇数番目の８個のサブブロックはレジスタ５２０１へ、残りの半分はレジスタ５２０２へ記憶される。
【０３４２】
TWINEでは、ラウンド処理としてステップD2〜D6が行われる。
【０３４３】
鍵演算部５６００は、レジスタ５２０１に記憶されている８個のサブブロックのデータとラウンド鍵との排他的論理和を演算する（ステップD2）。
【０３４４】
非線形変換部５４０１は、鍵演算部５６００の出力結果の非線形変換を行う（ステップD3）。非線形変換部５４０１は、内部で、非線形変換部５４０１への入力値を８個のサブブロックへ分割し、非線形変換テーブル５４２１〜５４２４で非線形変換を行う。
【０３４５】
排他的論理和演算部５９００は、非線形変換部５４０１の出力結果と、レジスタ５２０２に記憶されている８個のサブブロックのデータとの排他的論理和を演算する（ステップD4）。
【０３４６】
線形変換部５５０１は、排他的論理和演算部５９００の出力結果の線形変換を行い、線形変換部５５０２は、レジスタ５２０１に記憶されている８個のサブブロックのデータの線形変換を行う（ステップD5）。線形変換部５５０１の出力結果はレジスタ５２０１に、線形変換部５２０２の出力結果はレジスタ５２０２に記憶される。
【０３４７】
線形変換部５５０１および５５０２での処理後、現在のラウンドが、３５ラウンド目（次が最終ラウンド）であるか否かを判断する（ステップD6）。
【０３４８】
次が最終ラウンドでない場合には、ステップD2に戻りラウンド処理を繰り返す。次が最終ラウンドの場合、ステップD2-1へ進む。
【０３４９】
36ラウンド目では、線形変換がスキップされる。そのため、鍵演算部５６００（ステップD2-1）、非線形変換部５４０１（ステップD3）、および排他的論理和演算部５９００（ステップD4）での処理が行われる。
【０３５０】
最後に、レジスタ５２０１に記憶されている８個のサブブロックのデータ、および排他的論理和演算部５９００の出力結果を統合して、統合結果を暗号文として出力して終了する（ステップD7）。
【０３５１】
以上のTWINEの暗号化処理回路へ本発明を適用した実施例３を示す。図６３は、実施例３の暗号化部の構成を例示する図である。図５７のTWINEの暗号化部の回路構成との相違点は、暗号化処理開始時のマスク演算用の初期マスク演算部５１０１、暗号文出力前に行うアンマスク演算部５１０２、パーミュテーション部５３０１及び５３０２、選択部５７００並びに乱数生成部５８００が追加された点と、図５７の非線形変換部５４０１の代わりに、マスク付きの非線形変換テーブル５４１１〜５４１４を８個備える非線形変換部５４００を備えている点である。
【０３５２】
初期マスク演算部５１０１は、図３の初期マスク演算部１１０１と同じく、初期マスクテーブル１１１１と排他的論理和演算部１１１２を備えており、選択値によって選択された初期マスクと平文との排他的論理和を演算する。
【０３５３】
アンマスク演算部５１０２は、図４のアンマスク演算部１１０２と同じく、アンマスクテーブル１１１３と排他的論理和演算部１１１４を備えており、選択値によって選択されたアンマスクと入力データとの排他的論理和を演算する。
【０３５４】
パーミュテーション部５３０１及び５３０２では、選択値に基づき入力されたデータの並び替えを行う。なお、パーミュテーション部５３０２はパーミュテーション部５３０１とは逆の並び替えを行う。
【０３５５】
非線形変換部５４００は、図５や図６の非線形変換部１４００と同様に、複数のマスク付き非線形変換テーブルを備える。図６４は非線形変換部５４００の構成を例示する図である。実施例３では８個のマスク付き非線形変換テーブル５４１１〜５４１４を備える。非線形変換部５４００では、入力値を４ビットのサブブロックを単位として８ブロックに分割し、それぞれマスク付き非線形変換テーブル５４１１〜５４１４で非線形変換処理を行う。
【０３５６】
マスク付き非線形変換テーブル（Ｓ１）５４１１では、４ビットの入力値x1とマスクm1を排他的論理和で演算し、演算結果を非線形変換テーブル（Ｓ）５４２１で非線形変換を行い、非線形変換した結果とマスクn1との排他的論理和をとった値が出力となる。図６４は図６５の各非線形変換テーブル５４１１〜５４１４の入出力の関係を示した図である。
【０３５７】
図６５において、非線形変換テーブル５４２１〜５４２４の入力側に配置されているマスクm1〜ｍ8を結合したマスク値をＭ、出力側に配置されているマスクn1〜n8を結合したマスク値をＮとする。
【０３５８】
図６３の選択部５７００は、乱数生成部５８００が生成する乱数を受け取り、乱数を初期の選択値svとする。また、選択部５７００はラウンド処理が１ラウンド終了するごとに選択値svの更新を行う。
【０３５９】
選択値の更新方法は、実施例１で例示した方法を用いることができる。本実施例では、現在の選択値svを用いて、テーブルから、次の選択値sv’を読み出す方法により、選択値を更新する。
【０３６０】
乱数生成部５８００は暗号処理開始時にsv＝｛０、１、・・・、６、７｝の中のいずれかの値を生成し、選択部に出力する。
【０３６１】
選択部５７００の選択値がsvであるとき、第２のパーミュテーション部５３０２の並び替えをP2sv(・)、線形変換部５５０１の線形変換をL1(・)、選択値sv’のときの第１のパーミュテーション部５３０１の並び替えをP1sv’(・)、選択値svのときにレジスタ５２０２に格納されているデータにかかっているマスクをMRsvとし、選択部５７００の選択値svがあったときに、次の選択値がsv’になるとして、全てのsvに対して、前記非線形変換部５４００の入力側マスクMと出力側マスクNに対して、次の関係を満たせる並び替えパターンを、第１及び第２パーミュテーション部５３０１及び５３０２に持たせる。
M=P1sv’(L1( P2sv(N) (XOR) MRsv) )
【０３６２】
レジスタ５２０１に格納されるデータにかかる初期マスクMLは、パーミュテーション部５３０１においてとり得る並び替えパターンのいずれかで並び替えることで、非線形変換テーブルの入力側マスクＭと等しくなる。選択値svのときの初期マスクMLをMLsv、選択値svのときの第１のパーミュテーション部５３０１の並び替えをP1sv(・)として次の関係を満たす。
P1sv(MLsv) = M 
【０３６３】
レジスタ５２０２に格納されるデータにかかる初期マスクMRは、選択部５７００の選択値svがあったときに、次の選択値がsv’になるとして、選択値sv’のときの初期マスクMRをMRsv’としたとき、線形変換部５５０２の線形変換をL2(・)としたとき、次の関係を満たす。
MRsv’ = L2(MLsv)
【０３６４】
レジスタ５２０１に格納されるデータには、ラウンド処理をしている間、選択部５７００の選択値svに応じたマスクがかかっており、かかっているマスクは初期マスクMLsvと等しい。また、レジスタ５２０２に格納されるデータにも、ラウンド処理をしている間、選択部５７００の選択値svに応じたマスクがかかっており、かかっているマスクは初期マスクMRsvと等しい。
【０３６５】
レジスタ５２０１に格納されていた中間値との演算が行われるアンマスクULは、パーミュテーション部５３０１においてとり得る並び替えパターンのいずれかで並び替えることで、非線形変換テーブルの入力側マスクＭと等しくなる。選択部５７００の選択値svがあったときに、選択値svのときのアンマスクULをULsv、レジスタ５２０１の中間値にかかる初期マスクをMLsv、選択値svのときの第１のパーミュテーション部５３０１の並び替えをP1sv(・)として次の関係を満たす。
P1sv(ULsv) = M
ULsv = MLsv
【０３６６】
排他的論理和演算部５９００の結果との演算が行われるアンマスクURは、選択部５７００の選択値svがあったときに、選択値svのときのアンマスクURをURsv、レジスタ５２０２の中間値にかかる初期マスクをMRsvとし、非線形変換部５４００の出力側マスクをN、第２のパーミュテーション部５３０２の並び替えをP2sv(・)として、次の関係を満たす。
URsv = P2sv(N) (XOR) MRsv
【０３６７】
実施例３における、パーミュテーション部５３０１及び５３０２のP1sv(・)、P2sv(・)の例を図６６に、初期マスク演算部５１０１の初期マスクMRsv、MLsv、アンマスク演算部５１０２のアンマスクURsv、ULsv、非線形変換部５４００の入力側マスクＭ、出力側マスクＮの例を図６７に、選択部５７００における選択値svの更新用テーブルの例を図６８に示す。
【０３６８】
図６６の表は、元のデータＸ={x0, x1, x2, ・・・, x7}に対して、選択値svの場合にパーミュテーション部５３０１及び５３０２で処理した場合の結果P1sv(X)、P2sv(X)を示している。
【０３６９】
図６７において、Ｍ及びＮは８つのマスク付き非線形変換テーブルにおけるそれぞれのマスク値を示す。MLsvは最初の選択値がsvであったときにレジスタ５２０１に記憶されるデータにかかるマスクを示す。また、MRsvは最初の選択値がsvであったときにレジスタ５２０２に記憶されるデータにかかるマスクを示す。ULsvは３６ラウンド目の選択値がsvであったときに、レジスタ５２０１に記憶されているデータにかかっているマスクを解除するために使用するアンマスクを示す。また、URsvは３６ラウンド目の選択値がsvであったときに排他的論理和演算部５９００の出力にかかっているマスクを解除するために使用するアンマスクを示す。
【０３７０】
図６８は、現在のラウンドの選択値がsvであるときに、次のラウンドの選択値sv’がいくつになるかを示す表である。
【０３７１】
図６９Ａ及び図６９Ｂは、図６３の実施例３の動作を説明するフローチャートである。図６２のフローチャートとの相違点は、ステップD8〜D14が追加された点と、図６２のステップD3がマスク付き非線形変換（ステップD3-1）に変更された点である。図６３並びに図６９Ａ及び図６９Ｂを参照して、実施例３の動作を説明する。
【０３７２】
はじめに、平文及び秘密鍵を暗号化処理回路へ入力し、平文は暗号化部１０００、秘密鍵は鍵生成部２０００へ入力される（ステップD1）。
【０３７３】
次に、乱数生成部５８００は乱数を生成し、選択部５７００へ出力する（ステップD8）。
【０３７４】
選択部５７００は、乱数から選択値を決定し、選択値を出力する（ステップD9）。
【０３７５】
初期マスク演算部５１０１は、図３の初期マスクテーブル１１１１より選択値に基づいて初期マスクを選択し、平文と初期マスクとの排他的論理和を演算する。この排他的論理和演算により、平文にマスクをかける（ステップD10）。マスクがかかった平文は１６個のサブブロックに分割され、分割された平文のうち奇数番目の８個のサブブロックはレジスタ５２０１へ、残りの半分はレジスタ５２０２へ記憶される。
【０３７６】
実施例３では、ラウンド処理としてステップD2〜D6が行われる。
【０３７７】
鍵演算部５６００は、レジスタ５２０１に記憶されている８個のサブブロックのデータとラウンド鍵との排他的論理和を演算する（ステップD2）。
【０３７８】
パーミュテーション部５３０１は、選択部５７００から出力されている選択値に基づき、鍵演算部５６００の出力を並び替える（ステップD11）。
【０３７９】
非線形変換部５４００は、パーミュテーション部５３０１の出力結果の非線形変換を行う（ステップD3-1）。非線形変換部５４００は、内部で、非線形変換部５４０１への入力値を８個のサブブロックへ分割し、マスク付き非線形変換テーブル５４１１〜５４１４で非線形変換を行う。非線形変換テーブル（Ｓ１）５４１１では、４ビットの入力値x1とマスクm1を排他的論理和で演算し、演算結果を非線形変換テーブル（Ｓ）５４２１で非線形変換を行い、非線形変換した結果とマスクn1との排他的論理和をとった値が出力となる。
【０３８０】
パーミュテーション部５３０２は、選択部５７００から出力されている選択値に基づき、非線形変換部５４００の出力を並び替える（ステップD12）。パーミュテーション部５３０２で行われる並び替えはパーミュテーション部５３０１とは逆の並び替えである。逆の並び替えを行うことで、データの順番をパーミュテーション部５３０１に入力される前の順番に戻すことができる。一方、データにかかっているマスクの配列が並び替えられる。
【０３８１】
排他的論理和演算部５９００は、パーミュテーション部５３０２の出力結果と、レジスタ５２０２に記憶されている８個のサブブロックのデータとの排他的論理和を演算する（ステップD4）。
【０３８２】
線形変換部５５０１は、排他的論理和演算部５９００の出力結果の線形変換を行い、線形変換部５５０２は、レジスタ５２０１に記憶されている８個のサブブロックのデータの線形変換を行う（ステップD5）。線形変換部５５０１の出力結果はレジスタ５２０１に、線形変換部５２０２の出力結果はレジスタ５２０２に記憶される。
【０３８３】
選択部５７００は、選択値の更新を行う（ステップD13）。
【０３８４】
選択値の更新後、現在のラウンドが、３５ラウンド目（次が最終ラウンド）であるか否かを判断する（ステップD6）。
【０３８５】
次が最終ラウンドでない場合には、ステップD2に戻りラウンド処理を繰り返す。次が最終ラウンドの場合、ステップD2-1へ進む。
【０３８６】
36ラウンド目では、線形変換がスキップされる。そのため、鍵演算部５６００（ステップD2-1）、パーミュテーション部５３０１（ステップD11）、非線形変換部５４００（ステップD3-1）、パーミュテーション部５３０２（ステップD12）および排他的論理和演算部５９００（ステップD4）での処理が行われる。ここでラウンド処理が終了となる。ラウンド処理の結果として、レジスタ５２０１に記憶されている８個のサブブロックのデータ、および排他的論理和演算部５９００の出力結果が得られる。
【０３８７】
ラウンド処理終了後、アンマスク演算部５１０２は、図４のアンマスクテーブル１１１３より選択値に基づいてアンマスクを選択し、選択されたアンマスクと、レジスタ５２０１に記憶されている８個のサブブロックのデータ、および排他的論理和演算部５９００の出力結果を統合したデータとの排他的論理和を演算する（ステップD14）。
【０３８８】
最後に、アンマスク演算部５１０２の演算結果を暗号文として出力して終了する（ステップD7）。
【０３８９】
なお、上記実施形態１及び２、並びに、実施例１、２及び３の各暗号化処理回路は、ハードウェア、ソフトウェア又はこれらの組合わせにより実現することができる。また、上記の暗号化処理回路その他の装置等により行なわれる暗号化処理方法も、ハードウェア、ソフトウェア又はこれらに組合わせにより実現することができる。ここで、ソフトウェアによって実現されるとは、コンピュータがプログラムを読み込んで実行することにより実現されることを意味する。プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitorycomputerreadablemedium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangiblestoragemedium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えば、フレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば、光磁気ディスク）、ＣＤ−ＲＯＭ(ReadOnlyMemory)、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ(ProgrammableROM)、ＥＰＲＯＭ(ErasablePROM)、フラッシュＲＯＭ、ＲＡＭ(randomaccessmemory)）を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitorycomputerreadablemedium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【０３９０】
上記の実施形態及び実施例では、暗号化処理回路について説明したが、本発明を適用して、復号処理回路（すなわち、暗号解読処理回路）も、暗号化処理回路と同様な構成とすることができる。復号処理とは、暗号化処理とは逆に、暗号文を平文に戻す処理のことである。この場合、「暗号化」は、「復号」に置き換わる。
【０３９１】
図７０は、本発明の第１の実施形態に係る復号処理回路の構成を例示する図である。図７０では、図１における「暗号化部１０００」が「復号部６０００」に置き換わる。また、図１における暗号化部１０００を復号部とした場合、図７０では「暗号文」を入力とし、「平文」を出力とする。また、図２の暗号化部は、復号部に置き換わる。図７１は、復号部６０００の構成を示した図である。以下、図７１を参照して、復号部における動作を説明する。図７１において、暗号文を入力として、処理結果を平文として出力する。前記実施形態１で暗号化された暗号文は、復号部に入力され、復号部におけるアンマスク演算部６１０２にて、アンマスクがかけられ、レジスタ６２００に記憶される。以降、ラウンド処理として、鍵演算部６６００で、ラウンド鍵Kiとの加算（等価的に減算）が行われ、演算結果を線形変換部６５００で線形変換する。復号部における線形変換部６５００は、暗号化部における線形変換L(・)に対して逆変換L-1(・)となる。線形変換部６５００で逆変換した結果を、パーミュテーション部６３０２で並び替える。パーミュテーション部６３０２での並び替えは、暗号化部のパーミュテーション部１３０２での並び替えとは逆とされる。並び替えた結果は、ｔ個に分割され、非線形変換部６４００のテーブル（S1〜St）に入力する。復号部におけるテーブル（S1〜St）は、暗号化部におけるテーブル（S1〜St）と入力と出力が逆となる（暗号化部におけるテーブルの出力を入力（テーブルインデックス）とし、暗号化部におけるテーブルの入力を、テーブルインデックスに対応する出力値とする）。また、復号部におけるテーブル（S1〜St）では、暗号化部におけるテーブルの出力側のマスクNを入力側のマスクとし、暗号化部におけるテーブルの入力側のマスクMを出力側のマスクとする。非線形変換部６４００の変換した結果を、パーミュテーション部６３０１で並び替える。パーミュテーション部６３０１での並び替えは、暗号化部のパーミュテーション部１３０１での並び替えとは逆とされる。復号部において、規定回数のラウンド処理が繰り返されると、パーミュテーション部６３０１の処理結果に対して、初期マスク演算部６１０１で初期マスクとの演算を行うことでマスクが解除され、処理結果が平文として出力される。また、選択値の更新も、暗号化部のときとは逆となり、暗号化部では選択値svが次のラウンドではsv’に更新されていた場合、復号部では選択値sv’が次のラウンドではsvへと値が更新される。
【０３９２】
また、図７２は、本発明の第２の実施形態に係る復号部の構成を例示する図である。以下、図７２を参照して、復号部における動作を説明する。図７２において、暗号文を入力として、処理結果を平文として出力する。前記実施形態２で暗号化された暗号文は、復号部に入力され、復号部におけるアンマスク演算部７１０２にてアンマスクがかけられ、レジスタ７２０１及び７２０２に分割されて記憶される。以降、ラウンド処理として、鍵演算部７６００、パーミュテーション部７３０２、非線形変換部７４００、パーミュテーション部７３０１及び線形変換部７５００による処理を行う。鍵演算部７６００は、レジスタ７２０１に格納された値とラウンド鍵Kiとの加算（等価的に減算）を行う。パーミュテーション部７３０２は、鍵加算部７６００の演算結果を選択値に応じて並び替える。パーミュテーション部７３０２での並び替えは、暗号化部のパーミュテーション部１３０２での並び替えとは逆とされる。並び替えた結果は、ｔ個に分割され、非線形変換部７４００のテーブル（S1〜St）に入力する。復号部におけるテーブル（S1〜St）は、暗号化部におけるテーブル（S1〜St）と入力と出力が逆となる（暗号化部におけるテーブルの出力を入力（テーブルインデックス）とし、暗号化部におけるテーブルの入力を、テーブルインデックスに対応する出力値とする）。また、復号部におけるテーブル（S1〜St）では、暗号化部におけるテーブルの出力側のマスクNを入力側のマスクとし、暗号化部におけるテーブルの入力側のマスクMを出力側のマスクとする。非線形変換部７４００の変換した結果を、パーミュテーション部７３０１で並び替える。パーミュテーション部７３０１での並び替えは、暗号化部のパーミュテーション部１３０１での並び替えとは逆とされる。パーミュテーション部７３０１で並び替えた結果を線形変換部７５００で線形変換する。復号部における線形変換部７５００は、暗号化部における線形変換L(・)に対して逆変換L-1(・)となる。そして、排他的論理和演算部７Ａ００は、線形変換部７５００で逆変換した結果と、レジスタ７２０２にに格納された値との排他的論理和をとる。２回目以降のラウンド処理では、レジスタ７２０１には排他的論理和演算部７Ａ００の結果が格納され、レジスタ７２０２には前のラウンドでレジスタ７２０１に格納されていた中間値が格納される。復号部において、規定回数のラウンド処理が繰り返されると、初期マスク演算部７１０１は、排他的論理和演算部７Ａ００の結果と、レジスタ７２０１に格納された値とに対して初期マスクとの演算を行うことでマスクが解除され、処理結果が平文として出力される。また、選択値の更新も、暗号化部のときとは逆となり、暗号化部では選択値svが次のラウンドではsv’に更新されていた場合、復号部では選択値sv’が次のラウンドではsvへと値が更新される。
【０３９３】
このように本発明の各実施の形態では、マスキングにより中間値と消費電力との相関を低下させることができ、マスクデータを排他的論理和で中間値に付加することで、耐タンパ性を高めることができる。
【０３９４】
なお、上記の特許文献、非特許文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各付記の各要素、各実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、乃至選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【０３９５】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
（付記１）
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択部と、
複数の初期マスク値の中から、前記選択値の初期値に対応した初期マスク値を選択し、選択した初期マスク値と入力した平文との排他的論理和をとり、入力データ列の初期値とする初期マスク演算部と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択部からの選択値に対応したパターンの並べ替えを行い、並び替えた結果を出力する第１のパーミュテーション部と、
前記第１のパーミュテーション部の出力を複数に分割した値をそれぞれ非線形変換する複数のテーブルを含む非線形変換部と、
前記非線形変換部の複数の出力値を結合したデータ列に対して、前記選択部からの前記選択値に応じて、前記第１のパーミュテーション部とは逆のパターンの並び替えを行う第２のパーミュテーション部と、
前記第２のパーミュテーション部の出力に基づいて線形変換を施す第１の線形変換部と、
を備え、
前記非線形変換部は、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション部、前記非線形変換部、前記第２のパーミュテーション部及び前記第１の線形変換部を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記第１の線形変換部の出力に基づく値を前記入力データ列とし、
複数のアンマスク値の中から、前記選択部からの前記選択値に対応したアンマスク値を選択し、選択したアンマスク値と、前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとり、暗号文として出力するアンマスク演算部
をさらに備える暗号化処理回路。
（付記２）
前記第１および第２のパーミュテーション部の各パーミュテーション部は、
データ列を、前記パーミュテーション部において並び替えた値に対して、前記第１の線形変換部で線形変換した結果と、
前記データ列を、前記第１の線形変換部で線形変換した結果に対して、前記パーミュテーション部で並び替えを行った結果と、
が互いに一致するような、並び替えパターンを持つ、ことを特徴とする付記１に記載の暗号化処理回路。
（付記３）
前記選択部は、データ列にかかっているマスク値の並びと、前記非線形変換部の前記入力側のマスク値の並びが一致するように、前記第１のパーミュテーション部の並び替えのパターンを選択する、ことを特徴とする付記１または２に記載の暗号化処理回路。
（付記４）
前記選択部の選択値が第１の値（sv）であるときの前記第２のパーミュテーション部の並び替えをP2sv(・)、線形変換をL(・)とし、
前記選択値が第２の値（sv'）のときの前記第１のパーミュテーション部の並び替えをP1sv’（・）とし、前記選択部の選択値が第１の値（sv）があったときに、次の選択値が第２の値（sv'）となるものとして、前記選択部での全ての選択値に対して、前記非線形変換部の入力側マスク値Mと出力側マスク値Nに対して、
M=P1sv'(L(P2sv(N)))
の関係を満たす並び替えパターンを前記第１、第２のパーミュテーション部が有する、ことを特徴とする付記１乃至３のいずれか１項に記載の暗号化処理回路。
（付記５）
前記非線形変換部の出力側のマスク値を、前記第２のパーミュテーション部で並び替え、
前記第２のパーミュテーション部で並び替えた値を前記第１の線形変換部で線形変換し、
前記第１の線形変換部で線形変換した結果に対して前記第１のパーミュテーション部で並び替えた値を、前記非線形変換部の入力側のマスク値とする、ことを特徴とする付記１乃至４のいずれか１項に記載の暗号化処理回路。
（付記６）
Feistel構造をもつ暗号を対象とし、
２系列もしくはそれ以上の系列の入力のうち半数の系列を前記入力データ列として、前記第１のパーミュテーション部、前記非線形変換部、前記第２のパーミュテーション部及び前記第１の線形変換部で処理を行い、
当該処理の結果と残りの半数の系列との排他的論理和と演算する、
ことを特徴とする付記１乃至３のいずれか１項に記載の暗号化処理回路。
（付記７）
前記選択部の選択値が第１の値（sv）であるときの前記第２のパーミュテーション部の並び替えをP2sv(・)、線形変換をL(・)、前記残りの半数の系列にかかっているマスクをMRsvとし、
前記選択値が第２の値（sv'）のときの前記第１のパーミュテーション部の並び替えをP1sv’（・）とし、前記選択部の選択値が第１の値（sv）があったときに、次の選択値が第２の値（sv'）となるものとして、前記選択部での全ての選択値に対して、前記非線形変換部の入力側マスク値Mと出力側マスク値Nに対して、
M=P1sv’(L(P2sv(N)) (XOR) MRsv)
の関係を満たす並び替えパターンを前記第１及び第２のパーミュテーション部が有する、ことを特徴とする付記６に記載の暗号化処理回路。
（付記８）
前記非線形変換部の出力側のマスク値を、前記第２のパーミュテーション部で並び替え、
前記第２のパーミュテーション部で並び替えた値を前記第１の線形変換部で線形変換し、
前記第１の線形変換部で線形変換した結果と前記残りの半数の系列にかかっているマスクとの排他的論理和を演算し、
前記排他的論理和の演算結果を、前記第１のパーミュテーション部で並び替えた値を、前記非線形変換部の入力側のマスク値とする、
ことを特徴とする付記６または７に記載の暗号化処理回路。
（付記９）
暗号化アルゴリズムとしてAES（Advanced Encryption Standard）を対象とし、
前記第１および第２のパーミュテーション部は、４の倍数のバイトの巡回シフトによって並び替えを行い、さらに、４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えを行う、ことを特徴とする付記１乃至５のいずれか１項に記載の暗号化処理回路。
（付記１０）
暗号化アルゴリズムとして３Ｄ暗号を対象とし、
前記第１および第２のパーミュテーション部は、
第１のスライスの中で４の倍数のバイトでの巡回シフトによって並び替えを行い、さらに、４バイトごとに列を構成し、各列の中で同じ巡回シフトによって並び替えを行い、
第２のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、さらに、４バイトごとに列を構成し、各列の中で第１のスライスと同じ巡回シフトによって並び替えを行い、
第３のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、さらに、４バイトごとに列を構成し、各列の中で第１のスライスと同じ巡回シフトによって並び替えを行い、
第４のスライスの中で、前記第１のスライスと同じ４の倍数のバイトでの巡回シフトによって並び替えを行い、さらに、４バイトごとに列を構成し、各列の中で第１のスライスと同じ巡回シフトによって並び替えを行う、ことを特徴とする付記１乃至５のいずれか１項に記載の暗号化処理回路。
（付記１１）
暗号化アルゴリズムとしてTWINEを対象とし、
前記第１の線形変換部は、前記処理の結果と残りの半数の系列との排他的論理和の演算結果に対して第１の線形変換を施し、前記半数の系列である第１の入力データ列とし、
前記第１の入力データ列に対して第２の線形変換を施し、前記残りの半数の系列である第２の入力データ列とする第２の線形変換部をさらに備え、
前記選択部の選択値が第１の値（sv）であるときの前記第２のパーミュテーション部の並び替えをP2sv(・)、前記残りの半数の系列にかかっているマスクをMRsv、前記残りの半数の系列に対する前記第１の線形変換をL1(・)とし、
前記選択値が第２の値（sv'）のときの前記第１のパーミュテーション部の並び替えをP1sv’（・）とし、前記選択部の選択値が第１の値（sv）があったときに、次の選択値が第２の値（sv'）となるものとして、前記選択部での全ての選択値に対して、前記非線形変換部の入力側マスク値Mと出力側マスク値Nに対して、
M=P1sv’(L1( P2sv(N) (XOR) MRsv) )
の関係を満たす並び替えパターンを前記第１及び第２のパーミュテーション部が有する、ことを特徴とする付記６に記載の暗号化処理回路。
（付記１２）
前記半数の系列にかかっているマスクをMLsv、前記半数の系列に対する前記第２の線形変換をL2(・)とし、
前記選択値が第２の値（sv'）のときの前記第１のパーミュテーション部の並び替えをP1sv’（・）とし、前記選択部の選択値が第１の値（sv）があったときに、次の選択値が第２の値（sv'）となるものとして、前記選択部での全ての選択値に対して、前記非線形変換部の入力側マスク値Mと出力側マスク値N、前記半数の系列にかかっているマスクMRsvおよび前記残りの半数の系列にかかっているマスクMLsvに対して、
M=P1sv’(L1( P2sv(N) (XOR) MRsv) )
P1sv(MLsv) = M
MRsv’ = L2(MLsv)
の関係を満たすマスク値となる、ことを特徴とする付記１１に記載の暗号化処理回路。
（付記１３）
データ処理装置による暗号化処理方法であって、
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択工程と、
複数の初期マスク値の中から、前記選択値の初期値に対応した初期マスク値を選択し、選択した初期マスク値と入力したとの排他的論理和をとり、入力データ列の初期値とする初期マスク演算工程と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択工程からの選択値に対応したパターンの並べ替えを行い、並び替えた結果を出力する第１のパーミュテーション工程と、
前記第１のパーミュテーション工程の出力値を複数に分割した値をそれぞれ複数のテーブルで非線形変換する非線形変換工程と、
前記選択工程からの選択値に応じて、前記第１のパーミュテーション工程とは逆のパターンの並び替えを、前記非線形変換工程の複数の出力値を結合したデータ列に対して行う第２のパーミュテーション工程と、
前記第２のパーミュテーション工程の出力に基づいて線形変換を施す第１の線形変換工程と、
を含み、
前記非線形変換工程において、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション工程、前記非線形変換工程、前記第２のパーミュテーション工程及び前記第１の線形変換工程を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記第１の線形変換工程の出力に基づく値を前記入力データ列とし、
複数のアンマスク値の中から、前記選択工程からの前記選択値に対応したアンマスク値を選択し、選択したアンマスク値と前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとり、暗号文として出力するアンマスク演算工程と、
をさらに含む暗号化処理方法。
（付記１４）
データ処理装置に暗号化処理を実行させる暗号化処理プログラムであって、
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択処理と、
複数の初期マスク値の中から、前記選択値の初期値に対応した初期マスク値を選択し、選択した初期マスク値と入力したとの排他的論理和をとり、入力データ列の初期値とする初期マスク演算処理と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択処理からの選択値に対応したパターンの並べ替えを入力データ列に行い、並び替えた結果を出力する第１のパーミュテーション処理と、
前記第１のパーミュテーション処理の出力値を複数に分割した値をそれぞれ複数のテーブルで非線形変換する非線形変換処理と、
前記選択処理からの選択値に応じて、前記第１のパーミュテーション処理とは逆のパターンの並び替えを、前記非線形変換処理の複数の出力値を結合したデータ列に対して行う第２のパーミュテーション処理と、
前記第２のパーミュテーション処理の出力に基づいて線形変換を施す第１の線形変換処理と、
を含み、
前記非線形変換処理において、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション処理、前記非線形変換処理、前記第２のパーミュテーション処理及び前記第１の線形変換処理を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記第１の線形変換処理の出力に基づく値を前記入力データ列とし、
複数のアンマスク値の中から、前記選択処理からの前記選択値に対応したアンマスク値を選択し、選択したアンマスク値と前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとり、暗号文として出力するアンマスク演算処理
をさらに含む暗号化処理プログラム。
（付記１５）
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択部と、
前記選択部からの選択値に応じて、複数のアンマスク値の中からアンマスク値を選択し、選択したアンマスク値と、暗号文との排他的論理和をとり、入力データ列の初期値とするアンマスク演算部と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択部からの選択値に対応したパターンの並べ替えを行い、並び替えた結果を出力する第１のパーミュテーション部と、
前記第１のパーミュテーション部の出力値を複数に分割した値をそれぞれ非線形変換する複数のテーブルを含む非線形変換部と、
前記選択部からの選択値に応じて、前記第１のパーミュテーション部とは逆のパターンの並び替えを、前記非線形変換部の複数の出力値を結合したデータ列に対して行う第２のパーミュテーション部と、
前記第２のパーミュテーション部の出力に基づいて線形変換を施す線形変換部と、
を備え、
前記非線形変換部は、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション部、前記非線形変換部、前記第２のパーミュテーション部及び前記線形変換部を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記線形変換部の出力に基づく値を前記入力データ列とし、
前記選択部からの選択値に応じて複数の初期マスク値の中から初期マスク値を選択し、選択した初期マスク値と、前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとる初期マスク演算部をさらに備える復号処理回路。
（付記１６）
データ処理装置による復号処理方法であって、
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択工程と、
前記選択工程からの選択値に応じて、複数のアンマスク値の中からアンマスク値を選択し、選択したアンマスク値と、暗号文との排他的論理和をとり、入力データ列の初期値とするアンマスク演算工程と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択工程からの選択値に対応したパターンの並べ替えを行い、並び替えた結果を出力する第１のパーミュテーション工程と、
前記第１のパーミュテーション工程の出力値を複数に分割した値をそれぞれ非線形変換する複数のテーブルを含む非線形変換工程と、
前記選択工程からの選択値に応じて、前記第１のパーミュテーション工程とは逆のパターンの並び替えを、前記非線形変換工程の複数の出力値を結合したデータ列に対して行う第２のパーミュテーション工程と、
前記第２のパーミュテーション工程の出力に基づいて線形変換を施す線形変換工程と、
を含み、
前記非線形変換工程において、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション工程、前記非線形変換工程、前記第２のパーミュテーション工程及び前記線形変換工程を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記線形変換工程の出力に基づく値を前記入力データ列とし、
前記選択工程からの選択値に応じて複数の初期マスク値の中から初期マスク値を選択し、選択した初期マスク値と、前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとる初期マスク演算工程をさらに含む復号処理方法。
（付記１７）
データ処理装置に復号処理を実行させる復号処理プログラムであって、
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択処理と、
前記選択処理からの選択値に応じて、複数のアンマスク値の中からアンマスク値を選択し、選択したアンマスク値と、暗号文との排他的論理和をとり、入力データ列の初期値とするアンマスク演算処理と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択処理からの選択値に対応したパターンの並べ替えを行い、並び替えた結果を出力する第１のパーミュテーション処理と、
前記第１のパーミュテーション処理の出力値を複数に分割した値をそれぞれ非線形変換する複数のテーブルを含む非線形変換処理と、
前記選択処理からの選択値に応じて、前記第１のパーミュテーション処理とは逆のパターンの並び替えを、前記非線形変換処理の複数の出力値を結合したデータ列に対して行う第２のパーミュテーション処理と、
前記第２のパーミュテーション処理の出力に基づいて線形変換を施す線形変換処理と、
を含み、
前記非線形変換処理において、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション処理、前記非線形変換処理、前記第２のパーミュテーション処理及び前記線形変換処理を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記線形変換処理の出力に基づく値を前記入力データ列とし、
前記選択処理からの選択値に応じて複数の初期マスク値の中から初期マスク値を選択し、選択した初期マスク値と、前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとる初期マスク演算処理をさらに含む復号処理プログラム。
【０３９６】
以上、実施の形態を参照して本願発明を説明したが、本願発明は上記によって限定されるものではない。本願発明の構成や詳細には、発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【０３９７】
この出願は、２０１３年１０月２４日に出願された日本出願特願２０１３−２２１２３８を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【符号の説明】
【０３９８】
１０００  暗号化処理
１１０１  初期マスク演算処理
１１０２  アンマスク演算処理
１１０３  MMSj+1加算処理
１１１１  初期マスクテーブル
１１１２  排他的論理和演算部
１１１３  アンマスクテーブル
１１１４  排他的論理和演算部
１２００〜１２０４  レジスタ
１３０１  パーミュテーション処理
１３０２  パーミュテーション処理
１３０３  バレルシフト
１３０４  バレルシフト
１３０５  パーミュテーション処理
１３０６  パーミュテーション処理
１４００  非線形変換処理
１４０１  非線形変換処理（マスクなし）
１４０２  非線形変換処理
１４１１  非線形変換テーブル（S1）
１４１２  非線形変換テーブル（S2）
１４１３  非線形変換テーブル（S3）
１４１４  非線形変換テーブル（St）
１４２１〜１４２４  非線形変換テーブル（S）
１４３１〜１４３８  排他的論理和演算部
１４４１  非線形変換テーブル（S1、RSM）
１４４２  非線形変換テーブル（S2、RSM）
１４４３  非線形変換テーブル（S3、RSM）
１４４４  非線形変換テーブル（St、RSM）
１５００〜１５０１  線形変換処理
１６００〜１６０１  鍵加算処理
１６１１〜１６１４  排他的論理和演算部
１７００  選択部
１８００  乱数生成部
１９０１  前処理部
１９０２  後処理部
１Ａ００〜１Ａ０２  排他的論理和演算部
２０００  鍵生成部
３１０１  初期マスク演算部
３１０２  アンマスク演算部
３２００  レジスタ
３３０１、３３０２  パーミュテーション部
３４００  非線形変換部
３４０１  非線形変換部（マスクなし）
３４１１  非線形変換テーブル（S1）
３４１２  非線形変換テーブル（S2）
３４１３  非線形変換テーブル（S3）
３４１４  非線形変換テーブル（S16）
３４２１〜３４２４  非線形変換テーブル（S）
３４３１〜３４３８  排他的論理和演算部
３５０１  ShiftRows部
３５０２  MixColumns部
３６０１  鍵加算部
３７００  選択部
３８００  乱数生成部
４１０１  初期マスク演算部
４１０２  アンマスク演算部
４４００  非線形変換部
４４１１  マスク付非線形変換テーブル（γ１）
４４１２  マスク付非線形変換テーブル（γ２）
４４１３  マスク付非線形変換テーブル（γ２）
４４１４  マスク付非線形変換テーブル（γ６４）
４４００Ａ  非線形変換部
４４００Ｂ  非線形変換部
４４１１Ａ  マスク付非線形変換テーブル（γ１）
４４１２Ａ  マスク付非線形変換テーブル（γ６４）
４４１１Ｂ  マスク付非線形変換テーブル（γ’１）
４４１２Ｂ  マスク付非線形変換テーブル（γ’６４）
４４２１〜４４２４  非線形変換テーブル（γ）
４４５０  セレクタ
４５０１  拡散関数部（θ）
４５０２  最大距離分離行列部（π）
４６００  鍵加算部
４６０１  鍵加算部（ラウンド０）
４７００  選択部
４８００  乱数生成部
５１０１  初期マスク演算処理
５１０２  アンマスク演算処理
５２０１  レジスタ
５２０２  レジスタ
５３０１  パーミュテーション処理
５３０２  パーミュテーション処理
５４００  非線形変換処理
５４０１〜５４０４  非線形変換処理（マスクなし）
５４１１  非線形変換テーブル（S1）
５４１２  非線形変換テーブル（S2）
５４１３  非線形変換テーブル（S3）
５４１４  非線形変換テーブル（St）
５４２１〜５４２４  非線形変換テーブル（S）
５４３１〜５４３８  排他的論理和演算部
５５００  線形変換処理
５６００  鍵加算処理
５７００  選択部
５８００  乱数生成部
５９０１  排他的論理和演算部
６０００  復号部
６１０１  初期マスク演算部
６１０２  アンマスク演算部
６２００  レジスタ
６３０１、６３０２  パーミュテーション部
６４００  非線形変換部
６５００  線形変換部
６６００  鍵加算部
６７００  選択部
６８００  乱数生成部
７１０１  初期マスク演算部
７１０２  アンマスク演算部
７２０１  レジスタ
７２０２  レジスタ
７３０１  パーミュテーション部
７３０２  パーミュテーション部
７３０１、７３０２  パーミュテーション部
７４００  非線形変換部
７５００  線形変換部
７６００  鍵加算部
７７００  選択部
７８００  乱数生成部  ７Ａ００  排他的論理和演算部
【図１】
2015059845.tif 000008
【図２】
2015059845.tif 000009
【図３】
2015059845.tif 000010
【図４】
2015059845.tif 000011
【図５】
2015059845.tif 000012
【図６】
2015059845.tif 000013
【図７】
2015059845.tif 000014
【図８】
2015059845.tif 000015
【図９Ａ】
2015059845.tif 000016
【図９Ｂ】
2015059845.tif 000017
【図９Ｃ】
2015059845.tif 000018
【図９Ｄ】
2015059845.tif 000019
【図１０】
2015059845.tif 000020
【図１１】
2015059845.tif 000021
【図１２】
2015059845.tif 000022
【図１３】
2015059845.tif 000023
【図１４】
2015059845.tif 000024
【図１５】
2015059845.tif 000025
【図１６】
2015059845.tif 000026
【図１７】
2015059845.tif 000027
【図１８】
2015059845.tif 000028
【図１９】
2015059845.tif 000029
【図２０】
2015059845.tif 000030
【図２１】
2015059845.tif 000031
【図２２】
2015059845.tif 000032
【図２３Ａ】
2015059845.tif 000033
【図２３Ｂ】
2015059845.tif 000034
【図２３Ｃ】
2015059845.tif 000035
【図２３Ｄ】
2015059845.tif 000036
【図２４Ａ】
2015059845.tif 000037
【図２４Ｂ】
2015059845.tif 000038
【図２５Ａ】
2015059845.tif 000039
【図２５Ｂ】
2015059845.tif 000040
【図２６】
2015059845.tif 000041
【図２７】
2015059845.tif 000042
【図２８】
2015059845.tif 000043
【図２９】
2015059845.tif 000044
【図３０Ａ】
2015059845.tif 000045
【図３０Ｂ】
2015059845.tif 000046
【図３０Ｃ】
2015059845.tif 000047
【図３１Ａ】
2015059845.tif 000048
【図３１Ｂ】
2015059845.tif 000049
【図３１Ｃ】
2015059845.tif 000050
【図３２Ａ】
2015059845.tif 000051
【図３２Ｂ】
2015059845.tif 000052
【図３２Ｃ】
2015059845.tif 000053
【図３３Ａ】
2015059845.tif 000054
【図３３Ｂ】
2015059845.tif 000055
【図３４Ａ】
2015059845.tif 000056
【図３４Ｂ】
2015059845.tif 000057
【図３４Ｃ】
2015059845.tif 000058
【図３５Ａ】
2015059845.tif 000059
【図３５Ｂ】
2015059845.tif 000060
【図３５Ｃ】
2015059845.tif 000061
【図３６Ａ】
2015059845.tif 000062
【図３６Ｂ】
2015059845.tif 000063
【図３６Ｃ】
2015059845.tif 000064
【図３７Ａ】
2015059845.tif 000065
【図３７Ｂ】
2015059845.tif 000066
【図３８Ａ】
2015059845.tif 000067
【図３８Ｂ】
2015059845.tif 000068
【図３８Ｃ】
2015059845.tif 000069
【図３９Ａ】
2015059845.tif 000070
【図３９Ｂ】
2015059845.tif 000071
【図３９Ｃ】
2015059845.tif 000072
【図４０Ａ】
2015059845.tif 000073
【図４０Ｂ】
2015059845.tif 000074
【図４０Ｃ】
2015059845.tif 000075
【図４１Ａ】
2015059845.tif 000076
【図４１Ｂ】
2015059845.tif 000077
【図４２】
2015059845.tif 000078
【図４３】
2015059845.tif 000079
【図４４】
2015059845.tif 000080
【図４５】
2015059845.tif 000081
【図４６】
2015059845.tif 000082
【図４７】
2015059845.tif 000083
【図４８】
2015059845.tif 000084
【図４９】
2015059845.tif 000085
【図５０】
2015059845.tif 000086
【図５１】
2015059845.tif 000087
【図５２Ａ】
2015059845.tif 000088
【図５２Ｂ】
2015059845.tif 000089
【図５２Ｃ】
2015059845.tif 000090
【図５２Ｄ】
2015059845.tif 000091
【図５３Ａ】
2015059845.tif 000092
【図５３Ｂ】
2015059845.tif 000093
【図５４】
2015059845.tif 000094
【図５５】
2015059845.tif 000095
【図５６】
2015059845.tif 000096
【図５７】
2015059845.tif 000097
【図５８】
2015059845.tif 000098
【図５９】
2015059845.tif 000099
【図６０】
2015059845.tif 000100
【図６１】
2015059845.tif 000101
【図６２】
2015059845.tif 000102
【図６３】
2015059845.tif 000103
【図６４】
2015059845.tif 000104
【図６５】
2015059845.tif 000105
【図６６】
2015059845.tif 000106
【図６７】
2015059845.tif 000107
【図６８】
2015059845.tif 000108
【図６９Ａ】
2015059845.tif 000109
【図６９Ｂ】
2015059845.tif 000110
【図７０】
2015059845.tif 000111
【図７１】
2015059845.tif 000112
【図７２】
2015059845.tif 000113
【手続補正書】
【提出日】平成28年4月4日(2016.4.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択手段と、
複数の初期マスク値の中から、前記選択値の初期値に対応した初期マスク値を選択し、選択した初期マスク値と入力した平文との排他的論理和をとり、入力データ列の初期値とする初期マスク演算手段と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択手段からの選択値に対応したパターンの並べ替えを行い、並び替えた結果を出力する第１のパーミュテーション手段と、
前記第１のパーミュテーション手段の出力を複数に分割した値をそれぞれ非線形変換する複数のテーブルを含む非線形変換手段と、
前記非線形変換手段の複数の出力値を結合したデータ列に対して、前記選択手段からの前記選択値に応じて、前記第１のパーミュテーション手段とは逆のパターンの並び替えを行う第２のパーミュテーション手段と、
前記第２のパーミュテーション手段の出力に基づいて線形変換を施す第１の線形変換手段と、
を備え、
前記非線形変換手段は、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション手段、前記非線形変換手段、前記第２のパーミュテーション手段及び前記第１の線形変換手段を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記第１の線形変換手段の出力に基づく値を前記入力データ列とし、
複数のアンマスク値の中から、前記選択手段からの前記選択値に対応したアンマスク値を選択し、選択したアンマスク値と、前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとり、暗号文として出力するアンマスク演算手段
をさらに備える暗号化処理回路。
【請求項２】
前記第１および第２のパーミュテーション手段の各パーミュテーション手段は、
データ列を、前記パーミュテーション手段において並び替えた値に対して、前記第１の線形変換手段で線形変換した結果と、
前記データ列を、前記第１の線形変換手段で線形変換した結果に対して、前記パーミュテーション手段で並び替えを行った結果と、
が互いに一致するような、並び替えパターンを持つ、ことを特徴とする請求項１に記載の暗号化処理回路。
【請求項３】
前記選択手段は、前記データ列にかかっているマスク値の並びと、前記非線形変換手段の前記入力側のマスク値の並びが一致するように、前記第１のパーミュテーション手段の並び替えのパターンを選択する、ことを特徴とする請求項１または２に記載の暗号化処理回路。
【請求項４】
Feistel構造をもつ暗号を対象とし、
２系列もしくはそれ以上の系列の入力のうち半数の系列を前記入力データ列として、前記第１のパーミュテーション手段、前記非線形変換手段、前記第２のパーミュテーション手段及び前記第１の線形変換手段で処理を行い、
当該処理の結果と残りの半数の系列との排他的論理和と演算する、
ことを特徴とする請求項１乃至３のいずれか１項に記載の暗号化処理回路。
【請求項５】
前記選択手段の選択値が第１の値（sv）であるときの前記第２のパーミュテーション手段の並び替えをP2sv(・)、線形変換をL(・)、前記残りの半数の系列にかかっているマスクをMRsvとし、
前記選択値が第２の値（sv'）のときの前記第１のパーミュテーション手段の並び替えをP1sv'（・）とし、前記選択手段の選択値が第１の値（sv）があったときに、次の選択値が第２の値（sv'）となるものとして、前記選択手段での全ての選択値に対して、前記非線形変換手段の入力側マスク値Mと出力側マスク値Nに対して、
M=P1sv'(L(P2sv(N)) (XOR) MRsv)
の関係を満たす並び替えパターンを前記第１及び第２のパーミュテーション手段が有する、ことを特徴とする請求項４に記載の暗号化処理回路。
【請求項６】
前記非線形変換手段の出力側のマスク値を、前記第２のパーミュテーション手段で並び替え、
前記第２のパーミュテーション手段で並び替えた値を前記第１の線形変換手段で線形変換し、
前記第１の線形変換手段で線形変換した結果と前記残りの半数の系列にかかっているマスクとの排他的論理和を演算し、
前記排他的論理和の演算結果を、前記第１のパーミュテーション手段で並び替えた値を、前記非線形変換手段の入力側のマスク値とする、
ことを特徴とする請求項４又は５に記載の暗号化処理回路。
【請求項７】
暗号化アルゴリズムとしてTWINEを対象とし、
前記第１の線形変換手段は、前記処理の結果と残りの半数の系列との排他的論理和の演算結果に対して第１の線形変換を施し、前記半数の系列である第１の入力データ列とし、
前記第１の入力データ列に対して第２の線形変換を施し、前記残りの半数の系列である第２の入力データ列とする第２の線形変換手段をさらに備え、
前記選択手段の選択値が第１の値（sv）であるときの前記第２のパーミュテーション手段の並び替えをP2sv(・)、前記残りの半数の系列にかかっているマスクをMRsv、前記残りの半数の系列に対する前記第１の線形変換をL1(・)とし、
前記選択値が第２の値（sv'）のときの前記第１のパーミュテーション手段の並び替えをP1sv'（・）とし、前記選択手段の選択値が第１の値（sv）があったときに、次の選択値が第２の値（sv'）となるものとして、前記選択手段での全ての選択値に対して、前記非線形変換手段の入力側マスク値Mと出力側マスク値Nに対して、
M=P1sv'(L1( P2sv(N) (XOR) MRsv) )
の関係を満たす並び替えパターンを前記第１及び第２のパーミュテーション手段が有する、ことを特徴とする請求項４に記載の暗号化処理回路。
【請求項８】
データ処理装置による暗号化処理方法であって、
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択工程と、
複数の初期マスク値の中から、前記選択値の初期値に対応した初期マスク値を選択し、選択した初期マスク値と入力したとの排他的論理和をとり、入力データ列の初期値とする初期マスク演算工程と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択工程からの選択値に対応したパターンの並べ替えを行い、並び替えた結果を出力する第１のパーミュテーション工程と、
前記第１のパーミュテーション工程の出力値を複数に分割した値をそれぞれ複数のテーブルで非線形変換する非線形変換工程と、
前記選択工程からの選択値に応じて、前記第１のパーミュテーション工程とは逆のパターンの並び替えを、前記非線形変換工程の複数の出力値を結合したデータ列に対して行う第２のパーミュテーション工程と、
前記第２のパーミュテーション工程の出力に基づいて線形変換を施す第１の線形変換工程と、
を含み、
前記非線形変換工程において、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション工程、前記非線形変換工程、前記第２のパーミュテーション工程及び前記第１の線形変換工程を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記第１の線形変換工程の出力に基づく値を前記入力データ列とし、
複数のアンマスク値の中から、前記選択工程からの前記選択値に対応したアンマスク値を選択し、選択したアンマスク値と前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとり、暗号文として出力するアンマスク演算工程と、
をさらに含む暗号化処理方法。
【請求項９】
データ処理装置に暗号化処理を実行させる暗号化処理プログラムであって、
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択処理と、
複数の初期マスク値の中から、前記選択値の初期値に対応した初期マスク値を選択し、選択した初期マスク値と入力したとの排他的論理和をとり、入力データ列の初期値とする初期マスク演算処理と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択処理からの選択値に対応したパターンの並べ替えを入力データ列に行い、並び替えた結果を出力する第１のパーミュテーション処理と、
前記第１のパーミュテーション処理の出力値を複数に分割した値をそれぞれ複数のテーブルで非線形変換する非線形変換処理と、
前記選択処理からの選択値に応じて、前記第１のパーミュテーション処理とは逆のパターンの並び替えを、前記非線形変換処理の複数の出力値を結合したデータ列に対して行う第２のパーミュテーション処理と、
前記第２のパーミュテーション処理の出力に基づいて線形変換を施す第１の線形変換処理と、
を含み、
前記非線形変換処理において、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション処理、前記非線形変換処理、前記第２のパーミュテーション処理及び前記第１の線形変換処理を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記第１の線形変換処理の出力に基づく値を前記入力データ列とし、
複数のアンマスク値の中から、前記選択処理からの前記選択値に対応したアンマスク値を選択し、選択したアンマスク値と前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとり、暗号文として出力するアンマスク演算処理
をさらに含むことを特徴とする暗号化処理プログラム。
【請求項１０】
乱数を選択値の初期値として設定し、ラウンド処理が１ラウンド終わるごとに次の選択値へ更新する選択手段と、
前記選択手段からの選択値に応じて、複数のアンマスク値の中からアンマスク値を選択し、選択したアンマスク値と、暗号文との排他的論理和をとり、入力データ列の初期値とするアンマスク演算手段と、
前記入力データ列とラウンド鍵とに基づく演算結果に対して、前記選択手段からの選択値に対応したパターンの並べ替えを行い、並び替えた結果を出力する第１のパーミュテーション手段と、
前記第１のパーミュテーション手段の出力値を複数に分割した値をそれぞれ非線形変換する複数のテーブルを含む非線形変換手段と、
前記選択手段からの選択値に応じて、前記第１のパーミュテーション手段とは逆のパターンの並び替えを、前記非線形変換手段の複数の出力値を結合したデータ列に対して行う第２のパーミュテーション手段と、
前記第２のパーミュテーション手段の出力に基づいて線形変換を施す線形変換手段と、
を備え、
前記非線形変換手段は、前記テーブルへの入力に対して入力側のマスク値と排他的論理和をとった値を用いて前記テーブルに従った非線形変換を行い、前記非線形変換した値に対して出力側のマスク値と排他的論理和をとった値を出力し、
前記第１のパーミュテーション手段、前記非線形変換手段、前記第２のパーミュテーション手段及び前記線形変換手段を用いた前記ラウンド処理が規定回数行われ、
２回目以降のラウンド処理では、前記線形変換手段の出力に基づく値を前記入力データ列とし、
前記選択手段からの選択値に応じて複数の初期マスク値の中から初期マスク値を選択し、選択した初期マスク値と、前記規定回数のラウンド処理終了後の処理結果との排他的論理和をとる初期マスク演算手段をさらに備える復号処理回路。
【国際調査報告】
2015059845.tif 000114
2015059845.tif 000115
2015059845.tif 000116
2015059845.tif 000117