(57)【要約】  電力解析に耐性を持たせるため、平文から第１中間データを計算するＡｄｄＲｏｕｎｄＫｅｙ１０５ａと、第ｉ中間データと暗号化鍵とに基づいて第ｉ＋１中間データを計算するラウンド関数部１０３と、第ｊ中間データを第ｊ変換データに変換してレジスタ１０６に記憶する第１変換部１１２と、レジスタ１０６に記憶された第ｊ変換データを第ｊ中間データに変換する第２変換部１１３と、第Ｎ中間データから暗号文を計算するラウンド関数１０４と、を備え、ラウンド関数１０３は、第２変換部１１３により第ｊ変換データから変換された第ｊ中間データと暗号化鍵とに基づいて第ｊ＋１中間データを計算する処理をｊ＝１からｊ＝Ｎ−１まで繰り返す。
2011101994.tif 000002
【特許請求の範囲】
【請求項１】
暗号化鍵を用いて暗号化処理を行い平文から暗号文を計算する暗号化装置であって、
レジスタと、
平文を受け付ける入力部と、
前記平文から第１中間データを計算する第１暗号部分処理部と、
第ｉ中間データ（ｉは１以上Ｎ未満の整数、Ｎは予め定められた２以上の整数）と前記暗号化鍵とに基づいて第ｉ＋１中間データを計算する第２暗号部分処理部と、
第ｊ中間データ（ｊは１以上Ｎ以下の整数）を第ｊ変換データに変換して前記レジスタに記憶する第１変換部と、
前記レジスタに記憶された前記第ｊ変換データを前記第ｊ中間データに変換する第２変換部と、
前記第Ｎ中間データから暗号文を計算する第３暗号部分処理部と、
前記暗号文を出力する出力部と、を備え、
前記第２暗号部分処理部は、前記第２変換部により前記第ｊ変換データから変換された前記第ｊ中間データと前記暗号化鍵とに基づいて第ｊ＋１中間データを計算する処理をｊ＝１からｊ＝Ｎ−１まで繰り返す、
ことを特徴とする暗号化装置。
【請求項２】
乱数を生成し、前記乱数を前記レジスタに記憶する乱数生成部をさらに備え、
前記第１変換部は、前記乱数を予め定められた第１変換処理により変換乱数に変換し、前記第ｊ中間データを前記変換乱数でマスクされた前記第ｊ変換データに変換し、
前記第２変換部は、前記レジスタに記憶された前記乱数を前記第１変換処理により前記変換乱数に変換し、前記レジスタに記憶された前記第ｊ変換データを前記変換乱数でマスクを解除した前記第ｊ中間データに変換すること、
を特徴とする請求項１に記載の暗号化装置。
【請求項３】
乱数を生成する乱数生成部をさらに備え、
前記第１変換部は、前記乱数を予め定められた第１変換処理により変換乱数に変換して前記レジスタに記憶し、前記第ｊ中間データを前記乱数でマスクされた前記第ｊ変換データに変換し、
前記第２変換部は、前記レジスタに記憶された前記変換乱数を、前記第１変換処理による変換後のデータを前記第１変換処理の変換前のデータに変換する第２変換処理により前記乱数に変換し、前記レジスタに記憶された前記第ｊ変換データを前記乱数でマスクを解除した前記第ｊ中間データに変換すること、
を特徴とする請求項１に記載の暗号化装置。
【請求項４】
前記乱数生成部は、第１乱数と第２乱数とを生成し、生成した前記第１乱数と前記第２乱数とを前記レジスタに記憶し、
前記第１変換部は、前記第１乱数を前記第２乱数でマスクされた前記変換乱数に変換して前記レジスタに記憶し、前記第ｊ中間データを前記第１乱数でマスクされた前記第ｊ変換データに変換し、
前記第２変換部は、前記レジスタに記憶された前記第１乱数を前記レジスタに記憶された前記第２乱数でマスクされた前記変換乱数に変換し、前記レジスタに記憶された前記第ｊ変換データを前記変換乱数でマスクを解除した前記第ｊ中間データに変換すること、
を特徴とする請求項３に記載の暗号化装置。
【請求項５】
前記第１変換部は、相互に異なる変換処理をそれぞれ実行して前記第ｊ中間データを前記第ｊ変換データに変換する複数の第１変換演算部を備え、
前記第２変換部は、複数の前記第１変換演算部それぞれに対応し、前記レジスタに記憶された前記第ｊ変換データを前記第ｊ中間データに変換する複数の第２変換演算部を備え、
乱数を生成する乱数生成部と、
複数の前記第１変換演算部それぞれが変換した複数の前記第ｊ変換データから、前記乱数に応じて１つの前記第ｊ変換データを選択する第１選択部と、
複数の前記第２変換演算部それぞれが変換した複数の前記第ｊ中間データから、選択された前記第ｊ変換データを演算した前記第１変換演算部に対応する前記第２変換演算部が変換した前記第ｊ中間データを選択する第２選択部と、をさらに備えること、
を特徴とする請求項１に記載の暗号化装置。
【請求項６】
前記第１変換部は、予め定められた関数により、前記第ｊ中間データを前記第ｊ変換データに変換し、
前記第２変換部は、前記関数の逆関数により、前記第ｊ変換データを前記第ｊ中間データに変換すること、
を特徴とする請求項１に記載の暗号化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化装置に関する。
【背景技術】
【０００２】
共通鍵暗号は、暗号化鍵に基づいて、平文に暗号部分処理を行って中間データを計算し、複数の暗号部分処理を繰り返して中間データを更新し、最終的な中間データに暗号部分処理を行って暗号文を計算する技術である。暗号モジュールが動作する際の処理時間、消費電力、および放射電磁波などの物理的な情報を利用して暗号化鍵を解析するサイドチャネル攻撃が各種考案されている。サイドチャネル攻撃の中でも、消費電力情報を用いた解析手法として、単純電力解析（Simple  Power  Analysis、ＳＰＡ）、差分電力解析（Differential  Power  Analysis、ＤＰＡ）、および、相関電力解析（Correlation  Power  Analysis、ＣＰＡ）が挙げられる。ＤＰＡは、暗号化鍵の一部を予測し、予測した暗号化鍵と平文から計算される中間データと、暗号処理中の消費電力とを統計分析することにより、予測した暗号化鍵の正誤を判定し、暗号化鍵を特定する攻撃手法である。ＤＰＡに関しては、さらに２次ＤＰＡおよびＺｅｒｏ  Ｏｆｆｓｅｔ２次ＤＰＡ（ＺＯ−２ＤＰＡ）と呼ばれる解析手法が提案されている（非特許文献１参照）。【０００３】
ＤＰＡやＣＰＡの対策としては、マスク法が知られている。マスク法は、暗号処理の中間データに対してマスクと呼ばれる乱数を加算し暗号処理を続けることで、消費電力と中間データとの相関をなくす技術である。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Jason  Waddle  and  David  Wagner:  Towards  Efficient  Second-Order  Power  Analysis,  Cryptographic  Hardware  and  Embedded  Systems  -  CHES  2004,  LNCS  3156,  pp.1-15,  2004.
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＣＭＯＳ回路でのレジスタの消費電力は、連続したクロックでのデータの遷移ビット数に依存する。前述の暗号処理の中間データをレジスタに記憶して平文から暗号文を計算する暗号化装置においては、消費電力は、連続した暗号部分処理が出力する中間データのハミング距離と強い相関がある。そのため、暗号処理の中間データをそのままレジスタに記憶すると、消費電力と中間データを統計分析することにより暗号化鍵を解析されるおそれがある。したがって、電力解析に対する耐性を向上させるためには、レジスタでの消費電力が中間データと相関を持たないよう、レジスタを保護する必要がある。【０００６】
本発明は、上記に鑑みてなされたものであって、電力解析に耐性を持つ暗号化装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、暗号化鍵を用いて暗号化処理を行い平文から暗号文を計算する暗号化装置であって、レジスタと、平文を受け付ける入力部と、前記平文から第１中間データを計算する第１暗号部分処理部と、第ｉ中間データ（ｉは１以上Ｎ未満の整数、Ｎは予め定められた２以上の整数）と前記暗号化鍵とに基づいて第ｉ＋１中間データを計算する第２暗号部分処理部と、第ｊ中間データ（ｊは１以上Ｎ以下の整数）を第ｊ変換データに変換して前記レジスタに記憶する第１変換部と、前記レジスタに記憶された前記第ｊ変換データを前記第ｊ中間データに変換する第２変換部と、前記第Ｎ中間データから暗号文を計算する第３暗号部分処理部と、前記暗号文を出力する出力部と、を備え、前記第２暗号部分処理部は、前記第２変換部により前記第ｊ変換データから変換された前記第ｊ中間データと前記暗号化鍵とに基づいて第ｊ＋１中間データを計算する処理をｊ＝１からｊ＝Ｎ−１まで繰り返す、ことを特徴とする。
【発明の効果】
【０００８】
本発明によれば、電力解析に耐性を持つ暗号化装置を提供することができるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】第１の実施の形態にかかる暗号化装置のブロック図。
【図２】ラウンド関数のブロック図。
【図３】ラウンド関数のブロック図。
【図４】第１の実施の形態における暗号処理の全体の流れを示すフローチャート。
【図５】ＳｕｂＢｙｔｅ、ＳｈｉｆｔＲｏｗ、ＭｉｘＣｏｌｕｍｎ、およびＡｄｄＲｏｕｎｄＫｅｙのすべての処理間に配置した構成図。
【図６】１２８ビットのデータを８ビットずつ処理する構成例を示す図。
【図７】第１の実施の形態にかかる処理単位が８ビットである第１変換部、レジスタ、および第２変換部のブロック図。
【図８】第１の実施の形態におけるデータ変換処理の全体の流れを示すフローチャート。
【図９】第２の実施の形態にかかる第１変換部、レジスタ、および第２変換部のブロック図。
【図１０】第２の実施の形態におけるデータ変換処理の全体の流れを示すフローチャート。
【図１１】変換処理部の一例を示すブロック図。
【図１２】第２の実施の形態の変形例にかかる第１変換部および第２変換部のブロック図。
【図１３】第２の実施の形態の変形例におけるデータ変換処理の全体の流れを示すフローチャート。
【図１４】第３の実施の形態にかかる第１変換部、レジスタ、および第２変換部のブロック図。
【図１５】第３の実施の形態におけるデータ変換処理の全体の流れを示すフローチャート。
【図１６】第３の実施の形態の変形例にかかる第１変換部、レジスタ、および第２変換部のブロック図。
【図１７】第３の実施の形態の変形例におけるデータ変換処理の全体の流れを示すフローチャート。
【図１８】第４の実施の形態にかかる第１変換部および第２変換部のブロック図。
【図１９】第４の実施の形態におけるデータ変換処理の全体の流れを示すフローチャート。
【図２０】変換処理部の一例を示すブロック図。
【図２１】変換処理部の一例を示すブロック図。
【図２２】第５の実施の形態にかかる第１変換部および第２変換部のブロック図。
【図２３】第５の実施の形態におけるデータ変換処理の全体の流れを示すフローチャート。
【図２４】第１〜第５の実施の形態にかかる暗号化装置のハードウェア構成図。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、この発明にかかる暗号化装置の好適な実施の形態を詳細に説明する。
【００１１】
（第１の実施の形態）
第１の実施の形態にかかる暗号化装置は、暗号処理の中間データを外部から予測できない保護データに変換してレジスタに記憶し、読み出す時に逆変換する。このようにレジスタに記憶されるデータを保護することにより、暗号処理を実行する際の電力消費量を計測することにより暗号モジュールに埋め込まれている暗号化鍵を解析する攻撃方法に対して、より安全な暗号化装置を提供することができる。
【００１２】
以下では、鍵長を１２８ビットとしたＡＥＳ（Advanced  Encryption  Standard）方式の暗号化装置に適用した例について説明する。また、以下では暗号部分処理としてＡＥＳのラウンド関数等を用いた例を説明する。なお、暗号部分処理とは、平文から暗号文を計算する暗号化処理の過程で実行される処理を表す。ＡＥＳの場合は、例えばＳｕｂＢｙｔｅ、ＳｈｉｆｔＲｏｗ、ＭｉｘＣｏｌｕｍｎ、およびＡｄｄＲｏｕｎｄＫｅｙ、並びに、ＳｕｂＢｙｔｅ、ＳｈｉｆｔＲｏｗ、ＭｉｘＣｏｌｕｍｎ、およびＡｄｄＲｏｕｎｄＫｅｙを備えるラウンド関数が暗号部分処理に相当する。
【００１３】
鍵長は１２８ビットに限られず、１９２ビットや２５６ビットの鍵長でも同様に適用できる。また、暗号部分処理を繰り返すことなどにより、Ｎ個（Ｎは予め定められた２以上の整数）の中間データをレジスタ等の記憶部に記憶して暗号処理を実行する方式であれば他のあらゆる暗号アルゴリズムによる暗号化装置にも適用できる。例えば、ＤＥＳ（Data  Encryption  Standard）やＨｉｅｒｏｃｒｙｐｔなどにより暗号化する暗号化装置にも適用できる。
【００１４】
図１は、第１の実施の形態にかかる暗号化装置１００の構成の一例を示すブロック図である。図１に示すように、暗号化装置１００は、入力部１１０ａと、出力部１１０ｂと、鍵記憶部１０１と、ラウンド鍵生成部１０２と、ＡｄｄＲｏｕｎｄＫｅｙ１０５ａと、ラウンド関数１０３ｂ〜１０３ｊおよび１０４と、第１変換部１１２ａ〜１１２ｊと、レジスタ１０６ａ〜１０６ｊと、第２変換部１１３ａ〜１１３ｊと、を備えている。
【００１５】
入力部１１０ａは、外部から平文データの入力を受け付ける。出力部１１０ｂは、処理結果の暗号文を外部に出力する。なお、入力部１１０ａと出力部１１０ｂの機能を共に有する入出力部１１０を備えるように構成してもよい。
【００１６】
鍵記憶部１０１は、１２８ビットの秘密鍵を記憶する。鍵記憶部１０１は、ＨＤＤ（Hard  Disk  Drive）、光ディスク、メモリカード、ＲＡＭ（Random  Access  Memory）などの一般的に利用されているあらゆる記憶媒体により構成することができる。
【００１７】
ラウンド鍵生成部１０２は、鍵記憶部１０１が記憶する秘密鍵から１１個の１２８ビットのラウンド鍵ＲＫ０〜ＲＫ１０を計算し、ＡｄｄＲｏｕｎｄＫｅｙ１０５ａおよびラウンド関数１０３ｂ〜１０３ｊに供給する。ラウンド鍵ＲＫ０〜ＲＫ１０は、ＡｄｄＲｏｕｎｄＫｅｙ１０５ａが実行される以前に予め計算してもよいし、ラウンド関数１０３ｂ〜１０３ｊおよび１０４と並行に計算しても良い。
【００１８】
ＡｄｄＲｏｕｎｄＫｅｙ１０５ａ（第１暗号部分処理部）は、平文データに対してＡＥＳ暗号で定められているＡｄｄＲｏｕｎｄＫｅｙ変換処理を行い、中間データｘ０を出力する。
【００１９】
ラウンド関数１０３ｂ〜１０３ｊ（第２暗号部分処理部）および１０４（第３暗号部分処理部）は、平文データまたはレジスタ１０６ａ〜１０６ｊが記憶するデータを、ラウンド鍵を用いて攪拌する。図２は、ラウンド関数１０３ｂ〜１０３ｊの構成例を示すブロック図である。なお、図２は、ラウンド関数１０３ｂの構成を例示しているが、ラウンド関数１０３ｃ〜１０３ｊも同様の構成を備えている。
【００２０】
図２に示すように、ラウンド関数１０３ｂは、ＳｕｂＢｙｔｅ１０７ｂと、ＳｈｉｆｔＲｏｗ１０８ｂと、ＭｉｘＣｏｌｕｍｎ１０９ｂと、ＡｄｄＲｏｕｎｄＫｅｙ１０５ｂとを備えている。
【００２１】
ＳｕｂＢｙｔｅ１０７ｂは、レジスタ１０６ａが記憶するデータを８ビットごとに非線形変換する。ＳｈｉｆｔＲｏｗ１０８ｂは、ＳｕｂＢｙｔｅ１０７ｂの処理結果を８ビットをブロック単位として並べ替える。ＭｉｘＣｏｌｍｕｎ１０９ｂは、ＳｈｉｆｔＲｏｗ１０８ｂの処理結果の３２ビットごとに線形変換を実行する。ＡｄｄＲｏｕｎｄＫｅｙ１０５ｂは、ＭｉｘＣｏｌｍｕｎ１０９ｂの処理結果とラウンド鍵生成部１０２によって計算されるラウンド鍵ＲＫ１の排他的論理和を計算し、その処理結果をレジスタ１０６ｂに記憶する。
【００２２】
なお、ラウンド関数１０３ｃ〜１０３ｊも同様の手順により、前のラウンドで出力されレジスタ１０６ｂ〜１０６ｉに記憶されたデータを攪拌し、その処理結果をレジスタ１０６ｃ〜１０６ｊに記憶する。
【００２３】
図３は、ラウンド関数１０４の構成例を示すブロック図である。図３に示すように、ラウンド関数１０４は、ＳｕｂＢｙｔｅ１０７ｋと、ＳｈｉｆｔＲｏｗ１０８ｋと、ＡｄｄＲｏｕｎｄＫｅｙ１０５ｋとを備えている。
【００２４】
ＳｕｂＢｙｔｅ１０７ｋは、レジスタ１０６ｊが記憶するデータを８ビットごとに非線形変換する。ＳｈｉｆｔＲｏｗ１０８ｋは、ＳｕｂＢｙｔｅ１０７ｋの処理結果を８ビットをブロック単位として並べ替える。ＡｄｄＲｏｕｎｄＫｅｙ１０５ｋは、ＳｈｉｆｔＲｏｗ１０９ｋの処理結果とラウンド鍵生成部１０２が計算するＲＫ１０の排他的論理和を計算し、その処理結果を出力部１１０ｂから出力する。
【００２５】
上述のように、ＡｄｄＲｏｕｎｄＫｅｙ１０５ａは、中間データｘ０（第１中間データ）を出力する。また、ラウンド関数１０３ｂ〜１０３ｊは、それぞれ中間データｘ１〜ｘ９（第２中間データ〜第１０中間データ）を出力する。このように、各ラウンドで生成されるデータを以下では中間データという。なお、ラウンド関数１０４から出力されるデータｘ１０は暗号文として出力される。
【００２６】
第１変換部１１２ａ〜１１２ｊは、ＡｄｄＲｏｕｎｄＫｅｙ１０５ａおよびラウンド関数１０３ｂ〜１０３ｊが出力した中間データｘ０〜ｘ９を、予め定められた変換処理により変換する。以下では、第１変換部１１２ａ〜１１２ｊにより変換された中間データを変換データという。第１変換部１１２ａ〜１１２ｊは、それぞれ中間データｘ０〜ｘ９を変換した変換データｙ０〜ｙ９をレジスタ１０６ａ〜１０６ｊに出力する。
【００２７】
レジスタ１０６ａ〜１０６ｊは、それぞれ変換データｙ０〜ｙ９を記憶する。
【００２８】
第２変換部１１３ａ〜１１３ｊは、レジスタ１０６ａ〜１０６ｊが記憶するデータｙ０〜ｙ９を、予め定められた変換処理で変換することにより中間データｘ０〜ｘ９を復元し、次のラウンド関数に入力する。第２変換部１１３ａ〜１１３ｊによる変換処理は、第１変換部１１２ａ〜１１２ｊによる変換処理の逆変換に相当する変換処理である。すなわち、第１変換部１１２ａ〜１１２ｊによる変換後のデータを第１変換部１１２ａ〜１１２ｊによる変換前のデータに変換する変換処理である。
【００２９】
なお、図１では、各ラウンドの処理を実行する処理部を分けて記載しているが、同一番号の処理部はそれぞれ共通の機能および構成を備えている。以下では、アルファベットが異なる同一番号の処理部のアルファベットを省略して説明する場合がある。また、アルファベットが異なる同一番号の処理部を共通化し、共通化した１つの処理部が各ラウンドの処理を実行するように構成してもよい。例えば、レジスタ１０６ａ〜１０６ｊを１つのレジスタ１０６として構成してもよい。
【００３０】
次に、このように構成された第１の実施の形態にかかる暗号化装置１００による暗号処理について図４を用いて説明する。図４は、第１の実施の形態における暗号処理の全体の流れを示すフローチャートである。
【００３１】
まず、入力部１１０ａが平文データを受け付ける（ステップＳ１０１）。次に、ラウンド鍵生成部１０２が、鍵記憶部１０１に記憶される秘密鍵を用いて１１個の１２８ビットのラウンド鍵ＲＫ０〜ＲＫ１０を計算する（ステップＳ１０２）。その後、ＡｄｄＲｏｕｎｄＫｅｙ１０５ａが、入力部１１０ａで受け付けた１２８ビットの平文データとラウンド鍵生成部１０２によって計算されたラウンド鍵ＲＫ０の排他的論理和である中間データｘ０を計算する（ステップＳ１０３）。
【００３２】
次に、第１変換部１１２ａが、出力された中間データｘ０を変換データｙ０に変換する変換処理を行い、変換データｙ０をレジスタ１０６ａに記憶する（ステップＳ１０４）。第２変換部１１３ａが、レジスタ１０６ａに記憶されているｙ０を中間データｘ０に変換する変換処理を行い、中間データｘ０を復元する（ステップＳ１０５）。暗号化装置１００は、ラウンド数が１０ラウンド目か否かを判定する（ステップＳ１０６）。ラウンド数が１〜９ラウンド目の場合（ステップＳ１０６：Ｎｏ）、ラウンド関数１０３ｂ〜１０３ｊが、第２変換部１１３ａ〜１１３ｉが出力した中間データを攪拌する（ステップＳ１０７）。
【００３３】
ラウンド関数１０３ｂでは、上述のように、ＳｕｂＢｙｔｅ１０７ｂ、ＳｈｉｆｔＲｏｗ１０８ｂ、ＭｉｘＣｏｌｍｕｎ１０９ｂ、および、ＡｄｄＲｏｕｎｄＫｅｙ１０５ｂにより中間データが攪拌され、処理結果がレジスタ１０６ｂに記憶される。２〜９ラウンド目のラウンド関数１０３ｃ〜１０３ｊは、ラウンド関数１０３ｂと同様の処理を行うため、説明は省略する。
【００３４】
次に、第１変換部１１２ｂ〜１１２ｊが、ラウンド関数１０３ｂ〜１０３ｊが出力した中間データｘ１〜ｘ９を変換データｙ１〜ｙ９に変換し、変換データｙ１〜ｙ９をレジスタ１０６ｂ〜１０６ｊに記憶する（ステップＳ１０４）。次に、第２変換部１１３ｂ〜１１３ｊが、レジスタ１０６ｂ〜１０６ｊが記憶するｙ１〜ｙ９を中間データｘ１〜ｘ９に復元する（ステップＳ１０５）。
【００３５】
ステップＳ１０６でラウンド数が１０ラウンド目であると判定された場合（ステップＳ１０６：Ｙｅｓ）、中間データｘ９をラウンド関数１０４で攪拌する（ステップＳ１０８）。ラウンド関数１０４では、上述のように、ＳｕｂＢｙｔｅ１０７ｋ、ＳｈｉｆｔＲｏｗ１０８ｋ、および、ＡｄｄＲｏｕｎｄＫｅｙ１０５ｋにより中間データが攪拌され、処理結果が出力部１１０ｂに出力される。
【００３６】
出力部１１０ｂは、ラウンド関数１０４の処理結果であるデータｘ１０を出力する（ステップＳ１０９）。
【００３７】
なお、暗号部分処理を、ＳｕｂＢｙｔｅ、ＳｈｉｆｔＲｏｗ、ＭｉｘＣｏｌｕｍｎ、およびＡｄｄＲｏｕｎｄＫｅｙ処理のいずれかとしてもよく、第１変換部１１２、レジスタ１０６、および第２変換部１１３は、暗号化装置１００内の各ＳｕｂＢｙｔｅ、ＳｈｉｆｔＲｏｗ、ＭｉｘＣｏｌｕｍｎ、およびＡｄｄＲｏｕｎｄＫｅｙ処理間のいずれに配置しても良い。図５は、ＳｕｂＢｙｔｅ、ＳｈｉｆｔＲｏｗ、ＭｉｘＣｏｌｕｍｎ、およびＡｄｄＲｏｕｎｄＫｅｙのすべての処理間に配置した構成例を示す図である。
【００３８】
また、第１変換部１１２、レジスタ１０６、および第２変換部１１３が、データを複数の処理単位に分割した処理単位ごとに、上述の処理を実行するように構成してもよい。図６は、１２８ビットのデータを８ビットずつ処理する構成例を説明するための図である。なお、処理単位は８ビットに限られず、１６ビットや１２８ビットとしてもよいし、ビット数が異なる処理単位としてもよい。
【００３９】
図６に示すように、第１変換部１１２は、各処理単位のデータを変換する第１変換部１１２＿０〜１１２＿１５に分割される。同様に、レジスタ１０６は、レジスタ１０６＿０〜１０６＿１５に分割される。また、第２変換部１１３は、第２変換部１１３＿０〜１１３＿１５に分割される。
【００４０】
１ラウンド目の処理（ｉ＝０）について図６を用いて説明する。２ラウンド以降も同様に処理される（ｉ＝１〜９）。暗号処理途中の１２８ビットのデータｘ０は、８ビットずつ１６個のデータｘ０，０、ｘ０，１、・・・、ｘ０，１５に分割される。
ｘ０＝  ｘ０，０｜｜ｘ０，１｜｜・・・｜｜ｘ０，１５（｜｜は分割を表す）
【００４１】
第１変換部１１２＿０〜１１２＿１５は、それぞれｘ０，０〜ｘ０，１５を入力とし８ビットの変換データｙ０，０〜ｙ０，１５を出力する。レジスタ１０６＿０〜１０６＿１５は、第１変換部１１２＿０〜１１２＿１５が出力した変換データｙ０，０〜ｙ０，１５を記憶する。第２変換部１１３＿０〜１１３＿１５は、レジスタ１０６＿０〜１０６＿１５が出力した変換データｙ０，０〜ｙ０，１５を入力とし、中間データｘ０，０〜ｘ０，１５を出力する。ｘ０，０〜ｘ０，１５は結合され１２８ビットの中間データｘ０として出力される。
【００４２】
次に、第１変換部１１２、レジスタ１０６、および第２変換部１１３のより具体的な構成例について説明する。図７は、図６で示したデータの処理単位が８ビットである第１変換部１１２、レジスタ１０６、および第２変換部１１３の構成例を示すブロック図である。なお、処理単位は８ビット以外の場合も同様の構成を適用できる。
【００４３】
第１変換部１１２は、逆関数を持つ関数Ｆ５を演算する関数演算部６１０を備えている。レジスタ１０６は、レジスタ６０２ａを備えている。なお、レジスタ１０６がレジスタ６０２ａを備えるとは説明の便宜のためであり、レジスタ１０６が少なくとも１つのデータ（図７ではｘｂ）を記憶する記憶部（または領域）としてレジスタ６０２ａを備えることを意味する。後述するように、複数のデータを記憶する場合は、レジスタ１０６が複数のレジスタ６０２ａ、６０２ｂ・・・を備える場合がある。第２変換部１１３は、関数Ｆ５の逆関数Ｆ５−１を演算する逆関数演算部６１１を備えている。
【００４４】
第１変換部１１２は、暗号処理途中の８ビットのデータｘａ（中間データ）を入力とし、データｘａを関数Ｆ５によって８ビットのデータｘｂ（変換データ）に変換して出力する。レジスタ６０２ａは、第１変換部１１２が出力したデータｘｂを記憶する。第２変換部１１３は、レジスタ６０２ａが記憶する８ビットのデータｘｂを関数Ｆ５−１によって８ビットのデータｘａに復元し、データｘａを出力する。
【００４５】
次に、このように構成された第１の実施の形態にかかる第１変換部１１２、レジスタ１０６、および第２変換部１１３によるデータ変換処理について図８を用いて説明する。図８は、第１の実施の形態におけるデータ変換処理の全体の流れを示すフローチャートである。
【００４６】
まず、第１変換部１１２は、暗号処理途中のデータｘａを入力する（ステップＳ２０１）。関数演算部６１０は、データｘａを関数Ｆ５によりデータｘｂに変換し、変換したデータｘｂを出力する（ステップＳ２０２）。レジスタ６０２ａは、第１変換部１１２が出力したデータｘｂを記憶する（ステップＳ２０３）。第２変換部１１３の逆関数演算部６１１は、レジスタ６０２ａが記憶するデータｘｂを関数Ｆ５−１によりデータｘａに変換し、データｘａを出力する（ステップＳ２０４）。
【００４７】
関数演算部６１０の関数Ｆ５としては、例えば以下の（１）式〜（４）式の関数Ｆ（ｘ）を用いる。
Ｆ（ｘ）＝Ａｘ            ・・・（１）
Ｆ（ｘ）＝Ａｘ＋ｂ        ・・・（２）
Ｆ（ｘ）＝Ａ（ｘ＋ｂ）    ・・・（３）
Ｆ（ｘ）＝Ａ（ｘ＋ｂ）＋ｃ・・・（４）
【００４８】
このとき逆関数演算部６１１の関数Ｆ５−１としては、以下の（５）式〜（８）式の関数Ｆ−１（ｘ）を用いる。
Ｆ−１（ｘ）＝Ａ−１ｘ            ・・・（５）
Ｆ−１（ｘ）＝Ａ−１（ｘ＋ｂ）    ・・・（６）
Ｆ−１（ｘ）＝Ａ−１ｘ＋ｂ        ・・・（７）
Ｆ−１（ｘ）＝Ａ−１（ｘ＋ｃ）＋ｂ・・・（８）
【００４９】
なお、（１）式、（２）式、（３）式および（４）式の関数Ｆの逆関数は、それぞれ（５）式、（６）式、（７）式および（８）式である。
【００５０】
ここで、８ビットのデータｘは８行１列行列の表現で関数の引数となる。行列Ａは逆行列Ａ−１を持つ８行８列行列であり、行列ｂ、ｃは８行１列行列であり、それぞれ任意の行列を選ぶことができる。
【００５１】
例えば、行列Ａ、Ａ−１、ｂ、およびｃとして以下の（９）式〜（１２）式の行列を用いることができる。
【数１】
2011101994.tif 000003
【００５２】
関数演算部６１０の関数Ｆ５としては、８ビットのデータｘのビットの順序を入れ替えるだけの関数、例えば以下の（１３）式のような関数を用いないことが望ましい。
【数２】
2011101994.tif 000004
【００５３】
このように、第１の実施の形態にかかる暗号化装置では、暗号処理の中間データを所定の関数で変換したデータをレジスタに記憶する。レジスタでの消費電力はレジスタが記憶するデータと相関を持つが、暗号処理の中間データとは相関を持たない。このため、暗号処理の中間データと消費電力との相関が除去され、電力解析に対する耐性を持つ。
【００５４】
（第２の実施の形態）
上述の２次ＤＰＡおよびＺＯ−２ＤＰＡでは、マスク法を破ることができる。例えば、２次ＤＰＡでは、消費電力波形上の２点の電力を利用してマスクの影響を考慮した上で、消費電力と暗号処理の中間データとの相関の有無を判定する。ＺＯ−２ＤＰＡは、消費電力波形の各点の値を２乗した新たな波形を作成し、その波形でＤＰＡの処理を行う手法である。このＺＯ−２ＤＰＡでは、マスクが加算された中間データ（マスクされたデータ）とマスクとが同時に消費電力に影響を与えるときに、暗号化鍵を特定できる。そのため、マスクされたデータ中間データとマスクをそのままレジスタに記憶すると、マスクされたデータ中間データとマスクが同時に消費電力に影響を与え、ＺＯ−２ＤＰＡにより暗号化鍵を解析されるおそれがある。そこで、第２の実施の形態にかかる暗号化装置は、２次ＤＰＡ対策としてマスク法を利用し、かつ、マスクに用いる乱数および暗号処理の中間データの少なくとも１つに対してデータの変換を適用する。
【００５５】
第２の実施の形態では、第１変換部、レジスタ、および第２変換部の機能が第１の実施の形態と異なる。その他の処理部（図１の入力部１１０ａ、出力部１１０ｂ、鍵記憶部１０１、ラウンド鍵生成部１０２、ＡｄｄＲｏｕｎｄＫｅｙ１０５ａ、ラウンド関数１０３、およびラウンド関数１０４）は第１の実施の形態と同様である。また、暗号処理の全体の流れは、図４と同様である。このため、以下では、第２の実施の形態の第１変換部、レジスタ、および第２変換部の機能とこれらの処理部による処理の詳細について説明する。
【００５６】
図９は、第２の実施の形態にかかる第１変換部２１２、レジスタ２０６、および第２変換部２１３の構成の一例を示すブロック図である。なお、以下では図７と同様に処理単位は８ビットとして説明するが、処理単位が８ビット以外の場合も同様の構成を適用できる。
【００５７】
第１変換部２１２は、暗号処理途中の８ビットのデータｘａを入力とし、データｘａを変換した８ビットのデータｘｂと８ビットの乱数ｒを出力する。第１変換部２１２は、乱数生成部７０４と、関数演算部７０５ａと、排他的論理和演算部７０６ａとを備えている。
【００５８】
乱数生成部７０４は、８ビットの乱数ｒを生成する。関数演算部７０５ａは、生成された乱数を、予め定められた変換処理（第１変換処理）により変換乱数に変換する。例えば、関数演算部７０５ａは、８ビットの入力を８ビットの出力に変換する関数Ｆにより乱数ｒを変換した変換乱数Ｆえ（ｒ）を演算する。排他的論理和演算部７０６ａは、Ｆ１（ｒ）とデータｘａとの排他的論理和を演算することにより、データｘａを変換乱数Ｆ１（ｒ）でマスクし、処理結果である変換データｘｂを出力する。
【００５９】
レジスタ２０６は、第１変換部２１２が出力したデータｘｂと乱数ｒとを記憶する。レジスタ２０６は、２つのレジスタ６０２ａおよびレジスタ６０２ｂを備えている。レジスタ６０２ａが変換データｘｂを記憶し、レジスタ６０２ｂが変換前の乱数ｒを記憶する。
【００６０】
第２変換部２１３は、レジスタ２０６が記憶する８ビットのデータｘｂと乱数ｒを入力とし、８ビットのデータｘａに変換し、データｘａを出力する。第２変換部２１３は、関数演算部７０５ｂと、排他的論理和演算部７０６ｂとを備えている。
【００６１】
関数演算部７０５ｂは、８ビットの入力を８ビットの出力に変換する関数Ｆにより、レジスタ６０２ｂに記憶されている乱数ｒを変換した変換乱数Ｆ１（ｒ）を演算する。排他的論理和演算部７０６ｂは、Ｆ１（ｒ）と変換データｘｂとの排他的論理和を演算することにより、変換乱数Ｆ１（ｒ）によるマスクを解除し、処理結果である中間データｘａを出力する。
【００６２】
関数演算部７０５ａおよび関数演算部７０５ｂが用いる関数Ｆ１としては、以下の（１４）式の関数を用いることができる。
【数３】
2011101994.tif 000005
【００６３】
関数Ｆはこれに限られず、ハッシュ関数、線形フィードバックシフトレジスタ、およびＳ−ｂｏｘなどの非線形変換を用いてもよい。
【００６４】
なお、乱数生成部７０４は、第１変換部２１２の外部に配置してもよい。この場合は、第１変換部２１２は、暗号処理途中の８ビットのデータｘａと乱数生成部７０４が生成する乱数ｒを入力とし、８ビットのデータｘａを計算して乱数ｒとともに出力する。
【００６５】
次に、このように構成された第２の実施の形態にかかる第１変換部２１２、レジスタ２０６、および第２変換部２１３によるデータ変換処理について図１０を用いて説明する。図１０は、第２の実施の形態におけるデータ変換処理の全体の流れを示すフローチャートである。
【００６６】
まず、第１変換部２１２は、暗号処理の中間データｘａを入力する（ステップＳ３０１）。次に、乱数生成部７０４が、乱数ｒを生成する（ステップＳ３０２）。関数演算部７０５ａは、関数Ｆ１を用いて乱数ｒをＦ１（ｒ）に変換する（ステップＳ３０３）。排他的論理和演算部７０６ａは、暗号処理の中間データｘａと関数演算部７０５ａの出力Ｆ１（ｒ）との排他的論理和ｘｂ＝ｘａ＾Ｆ１（ｒ）を計算し（＾は排他的論理和を表す）、計算結果である変換データｘｂおよび乱数ｒを出力する（ステップＳ３０４）。レジスタ２０６は、レジスタ６０２ａに変換データｘｂを記憶し、レジスタ６０２ｂに乱数ｒを記憶する（ステップＳ３０５）。第２変換部２１３の関数演算部７０５ｂは、関数Ｆ１を用いてレジスタ６０２ｂが記憶する乱数ｒをＦ１（ｒ）に変換する（ステップＳ３０６）。排他的論理和演算部７０６ｂは、レジスタ６０２ａが記憶するデータｘｂと関数演算部７０５ｂの出力Ｆ１（ｒ）との排他的論理和ｘａ＝ｘｂ＾Ｆ１（ｒ）を計算し、計算結果である中間データｘａを出力する（ステップＳ３０７）。
【００６７】
このような処理により、乱数ｒを関数Ｆ１で変換したデータ（Ｆ１（ｒ））をマスクとし、レジスタ２０６がマスクされた中間データ（変換データｘｂ）を記憶することで、中間データｘａと消費電力との相関が除去される。したがって、ＤＰＡなどの電力解析に対する耐性を持つことができる。また、レジスタ２０６がマスクされた中間データ（変換データｘｂ）と変換前の乱数（ｒ）を記憶するため、マスクされた中間データとマスクが同時に消費電力に影響を与えない。このため、ＺＯ−２ＤＰＡに耐性を持つことができる。
【００６８】
なお、図９の第１変換部２１２および第２変換部２１３の構成は以下のように一般化することができる。図１１を用いて説明する。図１１は、第１変換部２１２および第２変換部２１３の構成要素の少なくとも一部として適用できる変換処理部の一例を示すブロック図である。
【００６９】
第１変換部２１２は、図１１の変換処理部群（変換処理部８１０、８２０、８３０、８４０、８５０、および８６０）に含まれる変換処理部の１つ以上を、任意の順序で配置した構成とすることができる。なお、第１変換部２１２は、配置する変換処理部以外に、最初に配置した変換処理部に入力する乱数を発生する乱数生成部を備える。
【００７０】
第２変換部２１３は、変換処理部８１０、８２０、８３０、８４０、８５２、および８６２の１つ以上を、対応する第１変換部２１２の変換処理部の順序の逆の順序で配置する。このとき、第１変換部２１２に変換処理部８５０および８６０が配置されている場合は、第２変換部には、変換処理部８５２および８６２がそれぞれ対応する位置に配置される。第１変換部２１２と第２変換部２１３の変換処理部の配置が、レジスタ２０６を中心に対称であれば、暗号処理の中間データは復元される。
【００７１】
例えば、第１変換部２１２の変換処理部が、レジスタ２０６に向けて、変換処理部８１０、８５０、および８６０の順に配置されている場合、第２変換部２１３の変換処理部は、レジスタ２０６から、変換処理部８６２、８５２、および８１０の順に配置される。
【００７２】
なお、乱数を用いてマスクを加算するためには、少なくとも変換処理部８１０および第１変換部８３０のいずれかを第１変換部２１２が備える必要がある。また、変換処理部８３０のみではＺＯ−２ＤＰＡによる攻撃を回避できないため、乱数を変換する処理、および、乱数を変換した変換乱数により中間データを変換する処理を含む他の変換処理部の少なくとも１つを第１変換部２１２が備える必要がある。
【００７３】
ここで、図１１の各変換処理部の詳細について説明する。変換処理部８１０は、関数演算部８１１と、排他的論理和演算部８１２とを備えている。変換処理部８２０は、関数演算部８２１と、排他的論理和演算部８２２とを備えている。変換処理部８３０は、排他的論理和演算部８３１を備えている。変換処理部８４０は、排他的論理和演算部８４１を備えている。変換処理部８５０は、関数演算部８５１を備えている。変換処理部８５２は、関数演算部８５３を備えている。変換処理部８６０は、関数演算部８６１を備えている。変換処理部８６２は、関数演算部８６３を備えている。
【００７４】
関数演算部８１１および８２１で計算するＦ１やＦ２としては、例えばフィードバックシフトレジスタを用いた変換、線形変換、およびＳ−ｂｏｘなどの非線形変換などを用いる。関数演算部８５１および８６１で計算するＦ５やＦ６としては、逆関数Ｆ５−１やＦ６−１を持つ関数を利用する。例えば、第１の実施の形態で説明した（１）式〜（４）式の関数Ｆなどを用いる。
【００７５】
次に、各変換処理部８１０、８２０、８３０、８４０、８５０、８５２、８６０、および８６２の処理手順を説明する。変換処理部８１０は、データｘ、ｒを入力するとｘ’＝ｘ＾Ｆ１（ｒ）およびｒ’＝ｒを出力する。
【００７６】
関数演算部８１１は、データｒを入力とし、関数値Ｆ１（ｒ）を出力する。排他的論理和演算部８１２は、データｘと関数演算部８１１が出力したＦ１（ｒ）の排他的論理和ｘ＾Ｆ１（ｒ）を出力する。
【００７７】
変換処理部８２０は、データｘ、ｒを入力するとｘ’＝ｘ、ｒ’＝ｒ＾Ｆ２（ｘ）を出力する。関数演算部８２１は、データｘを入力とし、関数値Ｆ２（ｘ）を出力する。排他的論理和演算部８２２は、データｒと関数演算部８２１が出力したＦ２（ｘ）の排他的論理和ｒ＾Ｆ２（ｘ）を出力する。
【００７８】
変換処理部８３０は、データｘ、ｒを入力するとｘ’＝ｘ＾ｒ、ｒ’＝ｒを出力する。排他的論理和演算部８３１は、データｒとデータｘの排他的論理和ｒ＾ｘを出力する。
【００７９】
変換処理部８４０は、データｘ、ｒを入力するとｘ’＝ｘ、ｒ’＝ｒ＾ｘを出力する。排他的論理和演算部８４１は、データｘとデータｒの排他的論理和ｘ＾ｒを出力する。
【００８０】
変換処理部８５０は、データｘ、ｒを入力するとｘ’＝Ｆ５（ｘ）、ｒ’＝ｒを出力する。関数演算部８５１は、データｘを入力とし、関数値Ｆ５（ｘ）を出力する。
【００８１】
変換処理部８５２は、データｘ、ｒを入力するとｘ’＝Ｆ５−１（ｘ）、ｒ’＝ｒを出力する。関数演算部８５３は、データｘを入力とし、関数値Ｆ５−１（ｘ）を出力する。
【００８２】
変換処理部８６０は、データｘ、ｒを入力するとｘ’＝ｘ、ｒ’＝Ｆ６（ｒ）を出力する。関数演算部８６１は、データｒを入力とし、関数値Ｆ６（ｒ）を出力する。
【００８３】
変換処理部８６２は、データｘ、ｒを入力するとｘ’＝ｘ、ｒ’＝Ｆ６−１（ｒ）を出力する。関数演算部８６３は、データｒを入力とし、関数値Ｆ６−１（ｒ）を出力する。
【００８４】
関数演算部８１１、８２１、８５１、および８６１は、入力によって異なる出力を返す関数が推奨される。
【００８５】
排他的論理和演算部８１２、８２２、８３１、および８４１は、排他的論理和の代わりに、例えば８ビットのデータを０から２５５までの整数とみなして２５６を法とする加算を行っても良い。このとき、第１変換部２１２の変換処理部で加算を行った場合は、第２変換部２１３の対応する変換処理部で減算を行い、第１変換部２１２の変換処理部で減算を行った場合は、第２変換部２１３の対応する変換処理部で加算を行う。
【００８６】
ここで、図１１で説明した構成要素を用いて図９に示した第１変換部２１２および第２変換部２１３を構成する方法を説明する。第１変換部２１２は、乱数生成部７０４と、暗号処理途中のデータｘと乱数ｒを入力とした変換処理部８１０を備えている。第２変換部２１３は、レジスタ６０２ａが出力したデータをｘ、レジスタ６０２ｂが出力したデータをｒとした変換処理部８１０を備えている。
【００８７】
（変形例）
図１１に示した構成要素を用いることで構成される第１変換部２１２および第２変換部２１３の変形例について図１２を用いて説明する。図１２は、第２の実施の形態の変形例にかかる第１変換部２１２−２および第２変換部２１３−２の構成の一例を示すブロック図である。
【００８８】
第１変換部２１２−２は、乱数生成部７０４と、変換処理部８３０ａと、変換処理部８５０とを備えている。変換処理部８３０ａは、排他的論理和演算部８３１ａを備える。変換処理部８５０は、関数演算部８５１を備える。第２変換部２１３−２は、変換処理部８５２と、変換処理部８３０ｂとを備えている。変換処理部８５２は、関数演算部８５３を備える。変換処理部８３０ｂは、排他的論理和演算部８３１ｂを備える。
【００８９】
第１変換部２１２−２は、暗号処理途中の８ビットのデータｘａを入力とし、データｘａを変換処理部８３０ａを用いて８ビットのデータｘｂに変換し、データｘｂを変換処理部８５０を用いてデータｘｃに変換し、データｘｃとｒを出力する。レジスタ２０６は、第１変換部２１２−２が出力したデータｘｃをレジスタ６０２ａに記憶し、データｒをレジスタ６０２ｂに記憶する。第２変換部２１３−２は、レジスタ２０６が記憶するデータｘｃとｒを入力とし、データｘｃを変換処理部８５２を用いてデータｘｂに変換し、データｘｂを変換処理部８５２を用いて８ビットのデータｘａに変換し、データｘａを出力する。
【００９０】
変換処理部８３０ａは、データｘａ、ｒの排他的論理和を排他的論理和演算部８３１ａを用いて計算し、計算結果であるデータｘｂ、ｒを出力する。変換処理部８５０は、データｘｂを関数演算部８５１を用いて計算し、計算結果であるデータｘｃ、ｒを出力する。関数演算部８５１で用いる関数Ｆ５は逆関数Ｆ５−１を持つものとする。変換処理部８５２は、入力されたデータｘｃを関数演算部８５３を用いて計算し、計算結果であるデータｘｂ、ｒを出力する。関数演算部８５３で用いる関数は、関数演算部８５１で用いる関数Ｆ５の逆関数Ｆ５−１とする。変換処理部８３０ｂは、データｘｂ、ｒの排他的論理和を排他的論理和演算部８３１ｂを用いて計算し、計算結果であるデータｘａを出力する。
【００９１】
次に、このように構成された第２の実施の形態の変形例にかかる第１変換部２１２−２、レジスタ２０６、および第２変換部２１３−２によるデータ変換処理について図１３を用いて説明する。図１３は、第２の実施の形態の変形例におけるデータ変換処理の全体の流れを示すフローチャートである。
【００９２】
まず、第１変換部２１２−２は、暗号処理の中間データｘａを入力する（ステップＳ４０１）。乱数生成部７０４は、乱数ｒを生成し変換処理部８３０ａに供給する（ステップＳ４０２）。変換処理部８３０ａの排他的論理和演算部８３１ａは、データｘａと乱数ｒの排他的論理和ｘｂ＝ｘａ＾ｒを計算し、データｘｂ、ｒを出力する（ステップＳ４０３）。変換処理部８５０の関数演算部８５１は、排他的論理和演算部８３１ａが出力したデータｘｂを用いてｘｃ＝Ｆ５（ｘｂ）を計算し、計算結果であるデータｘｃとｒをレジスタ２０６に出力する（ステップＳ４０４）。
【００９３】
レジスタ２０６は、レジスタ６０２ａにデータｘｃを記憶し、レジスタ６０２ｂにデータｒを記憶する（ステップＳ４０５）。
【００９４】
第２変換部２１３−２では、変換処理部８５２の関数演算部８５３が、レジスタ２０６が記憶するデータｘｃを用いてｘｂ＝Ｆ５−１（ｘｃ）を復元し（ステップＳ４０６）、データｘｂ、ｒを出力する。変換処理部８３０ｂの排他的論理和演算部８３１ｂは、データｘｂと乱数ｒの排他的論理和ｘａ＝ｘｂ＾ｒを計算し、出力する（ステップＳ４０７）。
【００９５】
この変形例でもＤＰＡやＺＯ−２ＤＰＡなどの電力解析に対する耐性を持つことができる。
【００９６】
以上のように、第２の実施の形態にかかる暗号化装置では、マスクされたデータ中間データとマスクの少なくとも一方が変換されてレジスタに記憶される。したがって、クロック切り替え時（レジスタにデータを書き込むタイミング）に、マスクされたデータ中間データとマスクが同時に消費電力に影響を与えることがない。このため、ＺＯ−２ＤＰＡを含む電力解析に耐性を持つことができる。
【００９７】
（第３の実施の形態）
第３の実施の形態にかかる暗号化装置は、マスクとして複数の乱数を用いる。第３の実施の形態も図１１に示した構成要素を用いることで構成することができる。
【００９８】
第３の実施の形態も、第１変換部、レジスタ、および第２変換部の機能が第１および第２の実施の形態と異なるのみである。このため、以下では、第３の実施の形態の第１変換部、レジスタ、および第２変換部の機能とこれらの処理部による処理の詳細について説明する。
【００９９】
図１４は、第３の実施の形態にかかる第１変換部３１２、レジスタ３０６、および第２変換部３１３の構成の一例を示すブロック図である。
【０１００】
第１変換部３１２は、乱数生成部１００４と、変換処理部８１０ａと、変換処理部８１０ｂとを備えている。
【０１０１】
乱数生成部１００４は、２つの乱数ｒ１、ｒ２を生成し、それぞれ変換処理部８１０ａ、８１０ｂに供給する。変換処理部８１０ａは、８ビットのデータｘａを８ビットのデータｘｂに変換する。変換処理部８１０ｂは、データｘｂをデータｘｃに変換する。第１変換部３１２はこのようにして得られたデータｘｃとｒ１とｒ２を出力する。
【０１０２】
レジスタ３０６は、レジスタ６０２ａと、レジスタ６０２ｂと、レジスタ６０２ｃとを備えている。レジスタ６０２ａは、第１変換部３１２が出力したデータｘｃを記憶する。レジスタ６０２ｂはデータｒ１を記憶する。レジスタ６０２ｃは、データｒ２を記憶する。
【０１０３】
第２変換部３１３は、変換処理部８１０ｃと、変換処理部８１０ｄとを備えている。第２変換部３１３は、レジスタ３０６が記憶するデータｘｃ、ｒ１、ｒ２を入力とする。変換処理部８１０ｃは、データｘｃをデータｘｂに復元する。変換処理部８１０ｄは、データｘｂをデータｘａに復元し、データｘａを出力する。
【０１０４】
第１変換部３１２または第２変換部３１３に含まれる変換処理部８１０ａ〜８１０ｄは、関数演算部８１１ａ〜８１１ｄと、排他的論理和演算部８１２ａ〜８１２ｄとを備える。以下、変換処理部８１０ａ〜８１０ｄの機能について説明する。
【０１０５】
変換処理部８１０ａは、データｘａと乱数ｒ１を入力とし、関数演算部８１１ａを用いてｆａ＝Ｆ１（ｒ１）を計算し、排他的論理和演算部８１２ａを用いて排他的論理和ｘｂ＝ｘａ＾ｆａを計算し、データｘｂ、ｒ１を出力する。
【０１０６】
変換処理部８１０ｂは、変換処理部８１０ａが出力したデータｘｂと乱数ｒ２を入力とし、関数演算部８１１ｂを用いてｆｂ＝Ｆ１（ｒ２）計算し、排他的論理和演算部８１２ｂを用いて排他的論理和ｘｃ＝ｘｂ＾ｆｂを計算し、データｘｃ、ｒ２を出力する。
【０１０７】
変換処理部８１０ｃは、レジスタ３０６が記憶するデータｘｃ、ｒ２を入力とし、関数演算部８１１ｃを用いてｆｂ＝Ｆ１（ｒ２）を計算し、排他的論理和演算部８１２ｃを用いて排他的論理和ｘｂ＝ｘｃ＾ｆｂを計算し、データｘｂを出力する。
【０１０８】
変換処理部８１０ｄは、変換処理部８１０ｃが出力したデータｘｂとレジスタ３０６が記憶するｒ１を入力とし、関数演算部８１１ｄを用いてｆａ＝Ｆ１（ｒ１）を計算し、排他的論理和演算部８１２ｄを用いて排他的論理和ｘａ＝ｘｂ＾ｆａを計算し、データｘａを出力する。
【０１０９】
なお、関数演算部８１１ａと８１１ｄは同一の関数を用い、関数演算部８１１ｂと８１１ｃは同一の関数を用いる。
【０１１０】
次に、このように構成された第３の実施の形態にかかる第１変換部３１２、レジスタ３０６、および第２変換部３１３によるデータ変換処理について図１５を用いて説明する。図１５は、第３の実施の形態におけるデータ変換処理の全体の流れを示すフローチャートである。
【０１１１】
まず、第１変換部３１２は暗号処理の中間データｘａを入力として受け付ける（ステップＳ５０１）。乱数生成部１００４は、乱数ｒ１、ｒ２を生成し、変換処理部８１０ａ、８１０ｂに供給する（ステップＳ５０２）。変換処理部８１０ａの関数演算部８１１ａは、乱数ｒ１を用いてｆａ＝Ｆ１（ｒ１）を計算する（ステップＳ５０３）。排他的論理和演算部８１２ａは、データｘａと関数演算部８１１ａが出力したデータｆａの排他的論理和ｘｂ＝ｘａ＾ｆａを計算する（ステップＳ５０４）。排他的論理和演算部８１２ａは、計算結果ｘｂを変換処理部８１０ｂに出力し、データｒ１をレジスタ６０２ｂに出力する。
【０１１２】
次に、変換処理部８１０ｂの関数演算部８１１ｂは、乱数ｒ２を用いてｆｂ＝Ｆ１（ｒ２）を計算する（ステップＳ５０５）。排他的論理和演算部８１２ｂは、変換処理部８１０ａが出力したデータｘｂと関数演算部８１１ｂが出力したデータｆｂの排他的論理和ｘｃ＝ｘｂ＾ｆｂを計算する（ステップＳ５０６）。排他的論理和演算部８１２ｂは、計算結果ｘｃをレジスタ６０２ａに出力し、データｒ２をレジスタ６０２ｃに出力する。
【０１１３】
次に、レジスタ３０６は、第１変換部３１２が出力したデータｘｃをレジスタ６０２ａに記憶し、第１変換部３１２が出力したデータｒ１をレジスタ６０２ｂに記憶し、第１変換部３１２が出力したデータｒ２をレジスタ６０２ｃに記憶する（ステップＳ５０７）。
【０１１４】
第２変換部３１３では、変換処理部８１０ｃの関数演算部８１１ｃが、レジスタ６０２ｃが記憶するデータｒ２を用いてｆｂ＝Ｆ１（ｒ２）を計算する（ステップＳ５０８）。排他的論理和演算部８１２ｃは、レジスタ６０２ａが記憶するデータｘｃと関数演算部８１１ｃが出力したデータｆｂの排他的論理和ｘｂ＝ｘｃ＾ｆｂを計算し（ステップＳ５０９）、変換処理部８１０ｄに出力する。
【０１１５】
次に、変換処理部８１０ｄの関数演算部８１１ｄは、レジスタ６０２ｂが記憶するデータｒ１を用いてｆａ＝Ｆ１（ｒ１）を計算する（ステップＳ５１０）。排他的論理和演算部８１２ｄは、変換処理部８１０ｃが出力したデータｘｂと関数演算部８１１ｄが出力したデータｆａの排他的論理和ｘａ＝ｘｂ＾ｆａを計算し、データｘａを出力する（ステップＳ５１１）。
【０１１６】
このような処理により、第２の実施の形態と同様にＤＰＡやＺＯ−２ＤＰＡなどの電力解析に対する耐性を持つことができる。
【０１１７】
（変形例）
次に、マスクに用いる乱数を他の乱数により変換してレジスタに記憶する変形例について説明する。図１６は、第３の実施の形態の変形例にかかる第１変換部３１２−２、レジスタ３０６、および第２変換部３１３−２の構成の一例を示すブロック図である。
【０１１８】
第１変換部３１２−２は、乱数生成部１００４と、変換処理部８１０ａと、変換処理部８３０ａとを備えている。乱数生成部１００４は、２つの乱数ｒ１ａ、ｒ２を生成して変換処理部８１０ａ、８３０ａに供給する。変換処理部８１０ａは、８ビットのデータｘａを８ビットのデータｘｂに変換する。変換処理部８３０ａは、データｒ１ａをデータｒ１ｂに変換し、データｘｂとｒ１ｂとｒ２を出力する。
【０１１９】
レジスタ３０６は、第１変換部３１２−２が出力したデータｘｂをレジスタ６０２ａに記憶し、データｒ１ｂをレジスタ６０２ｂに記憶し、データｒ２をレジスタ６０２ｃに記憶する。
【０１２０】
第２変換部３１３−２は、変換処理部８３０ｂと、変換処理部８１０ｂとを備えている。第２変換部３１３−２は、レジスタ３０６が記憶するデータｘｂ、ｒ１ｂ、ｒ２を入力とする。変換処理部８３０ｂは、ｒ２を用いてｒ１ｂをデータｒ１ａに復元する。変換処理部８１０ｂは、データｘｂ、ｒ１ａを用いてデータｘａを復元し、データｘａを出力する。
【０１２１】
変換処理部８１０ａ、８１０ｂは、関数演算部８１１ａ、８１１ｂと、排他的論理和演算部８１２ａ、８１２ｂとを備える。変換処理部８３０ａ、８３０ｂは、排他的論理和演算部８３１ａ、８３０ｂを備える。以下、変換処理部８１０ａ、８１０ｂ、８３０ａ、および８３０ｂの機能について説明する。
【０１２２】
変換処理部８１０ａは、暗号処理途中のデータｘａと乱数生成部１００４の出力データｒ１ａを入力とし、関数演算部８１１ａを用いてｆａ＝Ｆ１（ｒ１ａ）を計算し、排他的論理和演算部８１２ａを用いてｘｂ＝ｘａ＾ｆａを計算し、データｘｂ、ｒ１ａを出力する。
【０１２３】
変換処理部８３０ａは、変換処理部８１０ａが出力したデータｒ１ａと乱数ｒ２を入力とし、排他的論理和演算部８３１ｂを用いてｒ１ｂ＝ｒ１ａ＾ｒ２を計算し、データｒ１ｂ、ｒ２を出力する。
【０１２４】
変換処理部８３０ｂは、レジスタ３０６が記憶するｒ１ｂ、ｒ２を入力とし、排他的論理和演算部８３１ｂを用いてｒ１ａ＝ｒ１ｂ＾ｒ２を計算し出力する。
【０１２５】
変換処理部８１０ｂは、変換処理部８３０ｂが出力したデータｒ１ａとレジスタ３０６が記憶するデータｘｂを入力とし、関数演算部８１１ｂを用いてｆａ＝Ｆ１（ｒ１ａ）を計算し、排他的論理和演算部８１２ｂを用いてｘａ＝ｘｂ＾ｆａを復元し、計算結果であるデータｘａを出力する。
【０１２６】
次に、このように構成された第３の実施の形態の変形例にかかる第１変換部３１２−２、レジスタ３０６、および第２変換部３１３−２によるデータ変換処理について図１７を用いて説明する。図１７は、第３の実施の形態の変形例におけるデータ変換処理の全体の流れを示すフローチャートである。
【０１２７】
まず、第１変換部３１２−２は、暗号処理の中間データｘａを入力として受け付ける（ステップＳ６０１）。乱数生成部１００４は、乱数ｒ１ａ、ｒ２を生成し変換処理部８１０ａ、８３０ａに供給する（ステップＳ６０２）。変換処理部８１０ａの関数演算部８１１ａは、乱数ｒ１ａの関数値ｆａを計算する（ステップＳ６０３）。排他的論理和演算部８１２ａは、データｘａと関数演算部８１１ａが出力したデータｆａの排他的論理和ｘｂ＝ｘａ＾ｆａを計算する（ステップＳ６０４）。排他的論理和演算部８１２ａは、計算結果ｘｂをレジスタ６０２ａ出力し、データｒ１ａを変換処理部８３０ａに出力する。
【０１２８】
次に、変換処理部８３０ａでは、排他的論理和演算部８３１ａが、変換処理部８１０ａが出力したデータｒ１ａと乱数ｒ２の排他的論理和ｒ１ｂ＝ｒ１ａ＾ｒ２を計算する（ステップＳ６０５）。排他的論理和演算部８３１ａは、計算結果ｒ１ｂをレジスタ６０２ｂに出力し、データｒ２をレジスタ６０２ｃに出力する。
【０１２９】
次に、レジスタ３０６は、第１変換部３１２が出力したデータｘｂをレジスタ６０２ａに記憶し、第１変換部３１２−２が出力したデータｒ１ｂをレジスタ６０２ｂに記憶し、第１変換部３１２−２が出力したデータｒ２をレジスタ６０２ｃに記憶する（ステップＳ６０６）。
【０１３０】
第２変換部３１３−２では、変換処理部８３０ｂの排他的論理和演算部８３１ｂが、レジスタ６０２ｂが記憶するデータｒ１ｂとレジスタ６０２ｃが記憶するデータｒ２の排他的論理和ｒ１ａ＝ｒ１ｂ＾ｒ２を計算し（ステップＳ６０７）、変換処理部８１０ａに出力する。次に、変換処理部８１０ｂの関数演算部８１１ｂは、変換処理部８３０ｂが出力したデータｒ１ａの関数値ｆａを計算する（ステップＳ６０８）。排他的論理和演算部８１２ｂは、レジスタ６０２ａが記憶するデータｘｂと関数演算部８１１ｂが出力したデータｆａの排他的論理和ｘａ＝ｘｂ＾ｆａを計算し、データｘａを出力する（ステップＳ６０９）。
【０１３１】
なお、図１４の構成では、入力されたデータｘａに対して変換処理部８１０ａおよび８１０ｂによる２段階の処理が少なくとも必要になる。これに対し、図１６の本変形例の構成では、データｘａに対して変換処理部８１０ａによる１段階の処理のみで済む。このため、他の処理と並列化することなどにより、図１４の構成より処理時間を短縮することが可能となる。
【０１３２】
このように、第３の実施の形態にかかる暗号化装置では、第２の実施の形態と同様にＤＰＡやＺＯ−２ＤＰＡなどの電力解析に対する耐性を持つことができる。
【０１３３】
（第４の実施の形態）
上記各実施の形態では、レジスタを中心に第１変換部による変換および第２変換部による変換が対称に配置される例について説明した。一方、変換に用いる関数を準同型写像に限定することにより、第１変換部と第２変換部の変換処理部の配置を対称とする必要がなくなる場合がある。第４の実施の形態にかかる暗号化装置は、変換に用いる関数として準同型写像を用い、変換処理部の配置を対称としない例を説明する。
【０１３４】
第４の実施の形態も、第１変換部、レジスタ、および第２変換部の機能が第１〜第３の実施の形態と異なるのみである。このため、以下では、第４の実施の形態の第１変換部、レジスタ、および第２変換部の機能とこれらの処理部による処理の詳細について説明する。
【０１３５】
図１８は、第４の実施の形態にかかる第１変換部４１２および第２変換部４１３の構成の一例を示すブロック図である。
【０１３６】
第１変換部４１２は、乱数生成部７０４と、変換処理部８５０と、変換処理部８１０とを備えている。変換処理部８５０は、関数演算部８５１を備える。変換処理部８１０は、関数演算部８１１と、排他的論理和演算部８１２とを備える。
【０１３７】
第１変換部４１２は、暗号処理途中のデータｘａを入力とする。乱数生成部７０４は、乱数ｒを生成し変換処理部８５０に供給する。変換処理部８５０は、８ビットのデータｘａをデータｘｂに変換する。変換処理部８１０は、データｘｂをデータｘｃに変換し、データｘｃとｒとを出力する。
【０１３８】
レジスタ２０６は、第１変換部４１２が出力したデータｘｃをレジスタ６０２ａに記憶し、データｒをレジスタ６０２ｂに記憶する。
【０１３９】
第２変換部４１３は、変換処理部８５２と、変換処理部８３０とを備えている。変換処理部８５２は、関数演算部８５３を備える。変換処理部８３０は、排他的論理和演算部８３１を備える。
【０１４０】
第２変換部４１３は、レジスタ２０６が記憶するデータｘｃ、ｒを入力とする。変換処理部８５２は、データｘｃをデータｘｄに変換する。変換処理部８３０は、データｘｄをデータｘａに復元し、データｘａを出力する。
【０１４１】
以下、変換処理部８５０、８１０、８５２、および８３０の機能について説明する。変換処理部８５０は、入力されたデータｘａを関数演算部８５１を用いて計算し、計算結果ｘｂ、データｒを出力する。
【０１４２】
変換処理部８１０は、暗号処理途中のデータｘｂと乱数生成部７０４が生成した乱数ｒを入力とし、関数演算部８１１を用いてデータｒの関数値ｆを計算し、排他的論理和演算部８１２を用いてデータｘｂとｆとの排他的論理和ｘｃを計算し、データｘｃ、ｒを出力する。
【０１４３】
変換処理部８５２は、入力されたデータｘｃを関数演算部８５３を用いて計算し、計算結果ｘｄを出力する。
【０１４４】
変換処理部８３０は、排他的論理和演算部８３１を用いてデータｘｄとｒとの排他的論理和を計算することでデータｘａを復元し、データｘａを出力する。
【０１４５】
関数演算部８１１および８５１の関数Ｆ７は、準同型写像であり、逆写像を持つ。関数演算部８１１、８５１の関数Ｆ７は同一の関数である。関数演算部８５３の関数は準同型写像Ｆ７の逆写像Ｆ７−１である。
【０１４６】
関数Ｆ７および関数Ｆ７−１としては、例えば以下の（１５）式および（１６）式を用いる。ここで８ビットのデータｘは８行１列行列の表現で関数の引数となる。
【数４】
2011101994.tif 000006
【０１４７】
次に、このように構成された第４の実施の形態にかかる第１変換部４１２、レジスタ２０６、および第２変換部４１３によるデータ変換処理について図１９を用いて説明する。図１９は、第４の実施の形態におけるデータ変換処理の全体の流れを示すフローチャートである。
【０１４８】
まず、第１変換部４１２は暗号処理の中間データｘａを入力として受け付ける（ステップＳ７０１）。乱数生成部７０４は、乱数ｒを生成し変換処理部８５０に供給する（ステップＳ７０２）。変換処理部８５０の関数演算部８５１は、暗号処理の中間データｘａの関数値ｘｂを計算する（ステップＳ７０３）。変換処理部８１０の関数演算部８１１は、関数Ｆ７を用いて乱数生成部７０４が生成した乱数ｒの関数値ｆを計算する（ステップＳ７０４）。排他的論理和演算部８１２は、データｘｂと関数演算部８１１が出力したデータｆの排他的論理和ｘｃ＝ｘｂ＾ｆを計算し（ステップＳ７０５）、計算結果ｘｃをレジスタ６０２ａに出力する。また、変換処理部８１０はデータｒをレジスタ６０２ｂに出力する。
【０１４９】
次に、レジスタ２０６は、第１変換部４１２が出力したデータｘｃをレジスタ６０２ａに記憶し、第１変換部４１２が出力したデータｒをレジスタ６０２ｂに記憶する（ステップＳ７０６）。第２変換部４１３では、変換処理部８５２の関数演算部８５３が、関数Ｆ７−１を用いてレジスタ２０６が記憶するデータｘｃの関数値ｘｄを計算し（ステップＳ７０７）、計算結果ｘｄとデータｒを変換処理部８３０に出力する。
【０１５０】
次に、変換処理部８３０の排他的論理和演算部８３１は、変換処理部８５２が出力したデータｘｄとデータｒの排他的論理和を計算することでデータｘａを復元し、出力する（ステップＳ７０８）。
【０１５１】
なお、準同型写像を用いる構成は図１８に限られるものではない。以下では、準同型写像を用いる場合の第１変換部４１２および第２変換部４１３の生成方法の他の例について説明する。第１変換部４１２および第２変換部４１３は、以下の（１）〜（４）に記載した方法で生成できる。なお、第１変換部４１２は、複数の第１変換部４１２ａ、４１２ｂ、４１２ｃ、・・・から任意の１つが選択される。また、第２変換部４１３は、複数の第２変換部４１３ａ、４１３ｂ、４１３ｃ、・・・から任意の１つが選択される。
【０１５２】
（１）第１変換部４１２ａは、乱数生成部７０４と、上述の図１１の変換処理部８１０、８２０、８３０、８４０、８５０、および８６０の１つ以上を任意の順序で配置することで生成される。
【０１５３】
（２）入出力が同一となる第１変換部４１２ｂ、４１２ｃ、・・・を以下の入れ替え規則（（Ａ−１）〜（Ａ−３）、（Ｂ−１）〜（Ｂ−８）、および（Ｃ−１）〜（Ｃ−８））にしたがって生成する。図１１、図２０および図２１の関数Ｆ１〜Ｆ６は同一の準同型写像Ｆおよびその逆写像Ｆ−１から構成されているとする。なお、図２０および図２１は、図１１の変換処理部以外に、第１変換部４１２および第２変換部４１３の構成要素の少なくとも一部として適用できる変換処理部の一例を示すブロック図である。
【０１５４】
（Ａ−１）連続する変換処理部８１０および変換処理部８３０は入れ替え可能
（Ａ−２）連続する変換処理部８２０および変換処理部８４０は入れ替え可能
（Ａ−３）連続する変換処理部８５０および変換処理部８６０は入れ替え可能
（Ｂ−１）変換処理部８５０が直前の変換処理部８１０の前に移るとき変換処理部８１０は変換処理部８１４に変わる
（Ｂ−２）変換処理部８５０が直後の変換処理部８１０の後に移るとき変換処理部８１０は変換処理部８１５に変わる
（Ｂ−３）変換処理部８５０が直前の変換処理部８２０の前に移るとき変換処理部８２０は変換処理部８２４に変わる
（Ｂ−４）変換処理部８５０が直後の変換処理部８２０の後に移るとき変換処理部８２０は変換処理部８２５に変わる
（Ｂ−５）変換処理部８５０が直前の変換処理部８３０の前に移るとき変換処理部８３０は変換処理部８３４に変わる
（Ｂ−６）変換処理部８５０が直後の変換処理部８３０の後に移るとき変換処理部８３０は変換処理部８３５に変わる
（Ｂ−７）変換処理部８５０が直前の変換処理部８４０の前に移るとき変換処理部８４０は変換処理部８４４に変わる
（Ｂ−８）変換処理部８５０が直後の変換処理部８４０の後に移るとき変換処理部８４０は変換処理部８４５に変わる
（Ｃ−１）変換処理部８６０が直前の変換処理部８１０の前に移るとき変換処理部８１０は変換処理部８１６に変わる
（Ｃ−２）変換処理部８６０が直後の変換処理部８１０の後に移るとき変換処理部８１０は変換処理部８１７に変わる
（Ｃ−３）変換処理部８６０が直前の変換処理部８２０の前に移るとき変換処理部８２０は変換処理部８２６に変わる
（Ｃ−４）変換処理部８６０が直後の変換処理部８２０の後に移るとき変換処理部８２０は変換処理部８２７に変わる
（Ｃ−５）変換処理部８６０が直前の変換処理部８３０の前に移るとき変換処理部８３０は変換処理部８３６に変わる
（Ｃ−６）変換処理部８６０が直後の変換処理部８３０の後に移るとき変換処理部８３０は変換処理部８３７に変わる
（Ｃ−７）変換処理部８６０が直前の変換処理部８４０の前に移るとき変換処理部８４０は変換処理部８４６に変わる
（Ｃ−８）変換処理部８６０が直後の変換処理部８４０の後に移るとき変換処理部８４０は変換処理部８４７に変わる
【０１５５】
（３）第２変換部４１３ａ、４１３ｂ、４１３ｃ、・・・は、第１変換部４１２ａ、４１２ｂ、４１２ｃ、・・・における変換処理部の順序の逆の順序で配置する。このとき第１変換部４１２ａ、４１２ｂ、４１２ｃ、・・・で変換処理部８５０および変換処理部８６０が配置されている場合は、第２変換部４１３ａ、４１３ｂ、４１３ｃ、・・・では、対応する位置に変換処理部８５２および変換処理部８６２がそれぞれ配置される。
（４）第１変換部４１２ａ、４１２ｂ、４１２ｃ、・・・、および、第２変換部４１３ａ、４１３ｂ、４１３ｃ、・・・から、それぞれ任意の第１変換部４１２と第２変換部４１３を選択する。
【０１５６】
なお、図１８の第１変換部４１２および第２変換部４１３は、このようにして生成した一例を表している。
【０１５７】
上述のように、準同型写像Ｆは逆写像Ｆ−１を持つ。例えば、準同型写像Ｆは、以下の（１７）式の関数Ｆ（ｘ）を用いる。このとき、逆写像Ｆ−１は、以下の（１８）式の関数Ｆ−１（ｘ）を用いる。
Ｆ（ｘ）＝Ａｘ        ・・・（１７）
Ｆ−１（ｘ）＝Ａ−１ｘ  ・・・（１８）
【０１５８】
ここで８ビットのデータｘは８行１列行列の表現で関数の引数となる。行列Ａは逆行列Ａ−１を持つ８行８列行列であり、任意の行列を選ぶことができる。例えば、行列Ａおよび逆行列Ａ−１として、それぞれ以下の（１９）式および（２０）式の行列を用いることができる。
【数５】
2011101994.tif 000007
【０１５９】
このように、第４の実施の形態にかかる暗号化装置では、準同型写像を用いることにより、レジスタの前後の変換を対称としない場合でも、ＤＰＡやＺＯ−２ＤＰＡなどの電力解析に対する耐性を持つことができる。また、変換方法が対称でないため、変換方法が分析されることを防ぐことができる。
【０１６０】
（第５の実施の形態）
第５の実施の形態にかかる暗号化装置は、複数の第１変換部および複数の第２変換部から、それぞれ１つの第１変換部および１つの第２変換部を乱数生成部７０４に選択してデータの変換に用いる。
【０１６１】
第５の実施の形態も、第１変換部、レジスタ、および第２変換部の機能が第１〜第４の実施の形態と異なるのみである。このため、以下では、第５の実施の形態の第１変換部、レジスタ、および第２変換部の機能とこれらの処理部による処理の詳細について説明する。
【０１６２】
図２２は、第５の実施の形態にかかる第１変換部５１２および第２変換部５１３の構成の一例を示すブロック図である。
【０１６３】
第１変換部５１２は、乱数生成部１３０４と、複数の第１変換演算部１３０１ａおよび１３０１ｂと、第１選択部１３０５とを備えている。第２変換部５１３は、第１変換演算部１３０１ａおよび１３０１ｂにそれぞれ対応した第２変換演算部１３０３ａおよび１３０３ｂと、第２選択部１３０６とを備えている。
【０１６４】
第１変換部５１２は、第１変換演算部１３０１ａおよび１３０１ｂとして第１〜第４の実施の形態で示した第１変換部のいずれも用いることができる。第１変換演算部１３０１ａおよび１３０１ｂは、暗号処理途中のデータｘを入力とし、データｘを変換したデータと変換に用いたデータ（乱数ｒ等）とを連結したデータｙａおよびデータｙｂをそれぞれ第１選択部１３０５に出力する。
【０１６５】
乱数生成部１３０４は、第１選択部１３０５の制御データとして乱数ｒ（∈｛ａ、ｂ｝）を生成し、第１選択部１３０５とレジスタ６０２ｂに出力する。第１選択部１３０５は、乱数生成部１３０４が生成した乱数ｒに応じて第１変換演算部１３０１ａおよび１３０１ｂの出力データｙａおよびｙｂのいずれか一方を選択し、選択したデータ（データｙとする）をレジスタ６０２ａに出力する。例えば、乱数生成部１３０４が、乱数ｒ∈｛ａ、ｂ｝を生成し、第１選択部１３０５が、乱数ｒの値が「ａ」のときデータｙａを選択し、乱数ｒの値が「ｂ」のときデータｙｂを選択するように構成する。
【０１６６】
レジスタ２０６は、第１選択部１３０５が出力したデータｙをレジスタ６０２ａに記憶し、乱数生成部１３０４が生成した乱数ｒをレジスタ６０２ｂに記憶する。
【０１６７】
第２変換部５１３は、第１変換演算部１３０１ａおよび１３０１ｂにそれぞれ対応する逆変換処理を行う第２変換演算部１３０３ａおよび１３０３ｂを備えている。第２変換演算部１３０３ａおよび１３０３ｂは、レジスタ６０２ａに記憶されているデータｙを入力とし、データｙからデータｘａおよびデータｘｂを復元する。第２変換演算部１３０３ａおよび１３０３ｂは、それぞれ計算結果であるデータｘａおよびデータｘｂを第２選択部１３０６に出力する。
【０１６８】
第２選択部１３０６は、レジスタ６０２ｂが出力したデータｒを参照して、第２変換演算部１３０３ａおよび１３０３ｂの出力データｘａおよびｘｂのいずれか一方を選択し、選択したデータ（データｘとする）を出力する。
【０１６９】
第２選択部１３０６は、第１選択部１３０５がデータｙａを選択するときデータｘａを選択し、第１選択部１３０５がデータｙｂを選択するときデータｘｂを選択するように構成する。例えば、乱数生成部１３０４が乱数ｒ∈｛ａ、ｂ｝を生成する上述の例の場合は、第２選択部１３０６が、乱数ｒの値が「ａ」のときデータｘａを選択し、乱数ｒの値が「ｂ」のときデータｘｂを選択するように構成する。
【０１７０】
次に、このように構成された第５の実施の形態にかかる第１変換部５１２、および第２変換部５１３によるデータ変換処理について図２３を用いて説明する。図２３は、第５の実施の形態におけるデータ変換処理の全体の流れを示すフローチャートである。
【０１７１】
まず、第１変換部５１２は暗号処理の中間データｘを入力として受け付ける（ステップＳ８０１）。第１変換演算部１３０１ａは、データｘを変換して変換データｙａを第１選択部１３０５に出力する。第１変換演算部１３０１ａは、内部で生成した乱数を用いて変換を行った場合、変換に用いた乱数を変換データｙａに含めて出力する。同様に、第１変換演算部１３０１ｂは、データｘを変換して、変換データｙｂを第１選択部１３０５に出力する（ステップＳ８０２）。
【０１７２】
乱数生成部１３０４は、第１選択部１３０５の制御データとして乱数ｒ（∈｛ａ、ｂ｝）を生成し、第１選択部１３０５とレジスタ６０２ｂに供給する（ステップＳ８０３）。
【０１７３】
次に、第１選択部１３０５は、ｒ＝ａか否かを判断し（ステップＳ８０４）。ｒ＝ａの場合（ステップＳ８０４：Ｙｅｓ）、ｙ＝ｙａを出力する（ステップＳ８０５）。また、ｒ＝ａでない場合、すなわち、ｒ＝ｂの場合（ステップＳ８０４：Ｎｏ）、第１選択部１３０５は、ｙ＝ｙｂを出力する（ステップＳ８０６）。レジスタ２０６は、レジスタ６０２ａにデータｙを記憶し、レジスタ６０２ｂに乱数ｒを記憶する（ステップＳ８０７）。
【０１７４】
第２変換部５１３では、第２変換演算部１３０３ａが、データｙを変換しデータｘａとして第２選択部１３０６に出力する。また、第２変換演算部１３０３ｂが、データｙを変換しデータｘｂとして第２選択部１３０６に出力する（ステップＳ８０８）。
【０１７５】
次に、第２選択部１３０６は、ｒ＝ａか否かを判断し（ステップＳ８０９）、ｒ＝ａの場合（ステップＳ８０９：Ｙｅｓ）、ｘ＝ｘａを出力する（ステップＳ８１０）。また、ｒ＝ａでない場合、すなわち、ｒ＝ｂの場合（ステップＳ８０９：Ｎｏ）、第２選択部１３０６は、ｘ＝ｘｂを出力する（ステップＳ８１１）。
【０１７６】
なお、これまでは、第１変換部５１２内の第１変換演算部１３０１が２つの場合（第１変換演算部１３０１ａおよび第１変換演算部１３０１ｂ）、および、第２変換部５１３内の第２変換演算部１３０３が２つの場合（第２変換演算部１３０３ａおよび第２変換演算部１３０３ｂ）について説明した。第１変換演算部１３０１および第２変換演算部１３０３の個数はこれに限られず、３つ以上の場合であっても同様に実現できる。
【０１７７】
このように、第５の実施の形態にかかる暗号化装置では、暗号化ごとに第１変換部および第２変換部内の構成を乱数に応じてランダムに変更するため、第１変換部および第２変換部の解析を防ぐことができる。
【０１７８】
次に、第１〜第５の実施の形態にかかる暗号化装置のハードウェア構成について図２４を用いて説明する。図２４は、第１〜第５の実施の形態にかかる暗号化装置のハードウェア構成を示す説明図である。
【０１７９】
第１〜第５の実施の形態にかかる暗号化装置は、ＣＰＵ（Central  Processing  Unit）５１などの制御装置と、ＲＯＭ（Read  Only  Memory）５２やＲＡＭ（Random  Access  Memory）５３などの記憶装置と、ネットワークに接続して通信を行う通信Ｉ／Ｆ５４と、各部を接続するバス６１を備えている。
【０１８０】
第１〜第５の実施の形態にかかる暗号化装置で実行されるプログラムは、ＲＯＭ５２等に予め組み込まれて提供される。
【０１８１】
第１〜第５の実施の形態にかかる暗号化装置で実行されるプログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ（Compact  Disk  Read  Only  Memory）、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ（Compact  Disk  Recordable）、ＤＶＤ（Digital  Versatile  Disk）等のコンピュータで読み取り可能な記録媒体に記録して提供されるように構成してもよい。
【０１８２】
さらに、第１〜第５の実施の形態にかかる暗号化装置で実行されるプログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成してもよい。また、第１〜第５の実施の形態にかかる暗号化装置で実行されるプログラムをインターネット等のネットワーク経由で提供または配布するように構成してもよい。
【０１８３】
第１〜第５の実施の形態にかかる暗号化装置で実行されるプログラムは、コンピュータを上述した暗号化装置の各部（第１変換部および第２変換部等）として機能させうる。このコンピュータは、ＣＰＵ５１がコンピュータ読取可能な記憶媒体からプログラムを主記憶装置上に読み出して実行することができる。
【０１８４】
なお、本発明は、上記実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施の形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施の形態にわたる構成要素を適宜組み合わせても良い。
【符号の説明】
【０１８５】
５１  ＣＰＵ
５２  ＲＯＭ
５３  ＲＡＭ
５４  通信Ｉ／Ｆ
６１  バス
１００  暗号化装置
１０１  鍵記憶部
１０２  ラウンド鍵生成部
１０３、１０４  ラウンド関数
１０６  レジスタ
１１０ａ  入力部
１１０ｂ  出力部
１１２  第１変換部
１１３  第２変換部
【図１】
2011101994.tif 000008
【図２】
2011101994.tif 000009
【図３】
2011101994.tif 000010
【図４】
2011101994.tif 000011
【図５】
2011101994.tif 000012
【図６】
2011101994.tif 000013
【図７】
2011101994.tif 000014
【図８】
2011101994.tif 000015
【図９】
2011101994.tif 000016
【図１０】
2011101994.tif 000017
【図１１】
2011101994.tif 000018
【図１２】
2011101994.tif 000019
【図１３】
2011101994.tif 000020
【図１４】
2011101994.tif 000021
【図１５】
2011101994.tif 000022
【図１６】
2011101994.tif 000023
【図１７】
2011101994.tif 000024
【図１８】
2011101994.tif 000025
【図１９】
2011101994.tif 000026
【図２０】
2011101994.tif 000027
【図２１】
2011101994.tif 000028
【図２２】
2011101994.tif 000029
【図２３】
2011101994.tif 000030
【図２４】
2011101994.tif 000031
【国際調査報告】
2011101994.tif 000032
2011101994.tif 000033
2011101994.tif 000034
2011101994.tif 000035