(57)【要約】【課題】ＡＥＳ暗号に対する電力解析攻撃対策として、乗算を用いたマスキング法を用いると、特定の値に対してはマスク処理が有効に作用しないという問題があった。【解決手段】暗号処理の中間値に対して、二つの乱数を生成し、乗算に基づくマスク処理と、加算に基づくマスク処理を組み合わせて行う。これにより、従来の乗算を用いたマスキング法の課題を解決しつつ、ランダム化変換テーブルを一時記憶するためのＲＡＭを必要としないという従来法の利点を実現することが可能となる。【選択図】図５
2007334016.tif 000002
【特許請求の範囲】
【請求項１】
平文に対して鍵に基づく所定の暗号処理を行い、暗号文を生成するデータ暗号化装置であって、
第１の乱数を生成する第１乱数生成部と、
第２の乱数を生成する第２乱数生成部と、
前記平文を前記所定の暗号処理を行う過程の中間値に対して前記第１の乱数に基づく乗算を用いた第１のランダム化処理を行って第１ランダム化中間値を生成する第１ランダム化部と、
前記第１ランダム化中間値に対して前記第２の乱数に基づく加算を用いた第２のランダム化処理を行って第２ランダム化中間値を生成する第２ランダム化部と、
第３の乱数を生成する第３乱数生成部と、
前記第２ランダム化中間値に対して第３の乱数と有限体上の乗算または除算に基づくランダム化乗除算処理を行って第３ランダム化中間値を生成するランダム化乗除算部と
を備えることを特徴とするデータ暗号化装置。
【請求項２】
請求項１において、前記第２ランダム化部は、
前記有限体の既約多項式に基づいて決まる定数値を保管する既約多項式定数保管部と、
前記定数値と前記第２の乱数との乗算を行ってランダム化定数データを生成する乗算部と、
前記ランダム化定数データと前記第１ランダム化中間値に基づく加算を行う加算部とを備える
ことを特徴とする請求項１に記載のデータ暗号化装置。
【請求項３】
請求項２において、前記ランダム化乗除算部は、
前記第２ランダム化中間値を前記有限体上の元に変換して第４ランダム化中間値とする第１変換部と、
前記第４ランダム化中間値に対して前記有限体上の逆元を計算して第５ランダム化中間値とする逆元計算部と、
前記第５ランダム化中間値と前記第３の乱数に基づいて前記第３ランダム化中間値を生成する第２変換部を備えること
を特徴とする請求項２に記載のデータ暗号化装置。
【請求項４】
請求項２において、前記ランダム化乗除算部は、
ランダム化乗除算変換テーブルを保管するランダム化乗除算変換テーブル保管部と、
前記ランダム化乗除算変換テーブルに基づいて前記第２ランダム化中間値を前記第３ランダム化中間値に変換するランダム化乗除算変換部とを備え、
前記ランダム化乗除算変換テーブルは、
入力データに対して、前記ランダム化乗除算処理と、前記第３の乱数に基づいた変換処理とを行い出力データとしたときの入力データと出力データの対応関係を表していること
を特徴とする請求項２に記載のデータ暗号化装置。
【請求項５】
平文に対して鍵に基づく所定の暗号処理を行い、暗号文を生成する集積回路であって、
第１の乱数を生成する第１乱数生成部と、
第２の乱数を生成する第２乱数生成部と、
前記平文を前記所定の暗号処理を行う過程の中間値に対して前記第１の乱数に基づく乗算を用いた第１のランダム化処理を行って第１ランダム化中間値を生成する第１ランダム化部と、
前記第１ランダム化中間値に対して前記第２の乱数に基づく加算を用いた第２のランダム化処理を行って第２ランダム化中間値を生成する第２ランダム化部と、
第３の乱数を生成する第３乱数生成部と、
前記第２ランダム化中間値に対して第３の乱数と有限体上の乗算または除算に基づくランダム化乗除算処理を行って第３ランダム化中間値を生成するランダム化乗除算部と
を備えることを特徴とする集積回路。
【請求項６】
平文に対して鍵に基づく所定の暗号処理を行い、暗号文を生成するデータ暗号化方法であって、
第１の乱数を生成する第１乱数生成ステップと、
第２の乱数を生成する第２乱数生成ステップと、
前記平文を前記所定の暗号処理を行う過程の中間値に対して前記第１の乱数に基づく乗算を用いた第１のランダム化処理を行って第１ランダム化中間値を生成する第１ランダム化ステップと、
前記第１ランダム化中間値に対して前記第２の乱数に基づく加算を用いた第２のランダム化処理を行って第２ランダム化中間値を生成する第２ランダム化ステップと、
第３の乱数を生成する第３乱数生成ステップと、
前記第２ランダム化中間値に対して第３の乱数と有限体上の乗算または除算に基づくランダム化乗除算処理を行って第３ランダム化中間値を生成するランダム化乗除算ステップと
を含むことを特徴とするデータ暗号化方法。
【請求項７】
平文に対して鍵に基づく所定の暗号処理を行い、暗号文を生成するデータ暗号化処理プログラムであって、
第１の乱数を生成し、
第２の乱数を生成し、
前記平文を前記所定の暗号処理を行う過程の中間値に対して前記第１の乱数に基づく乗算を用いた第１のランダム化処理を行って第１ランダム化中間値を生成し、
前記第１ランダム化中間値に対して前記第２の乱数に基づく加算を用いた第２のランダム化処理を行って第２ランダム化中間値を生成し、
第３の乱数を生成し、
前記第２ランダム化中間値に対して第３の乱数と有限体上の乗算または除算に基づくランダム化乗除算処理を行って第３ランダム化中間値を生成する
ことを特徴とするデータ暗号化処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理を実行する際の電力消費量を計測することで、暗号モジュールに埋め込まれている暗号鍵を解析する攻撃方法に対して安全な暗号装置に関する。
【背景技術】
【０００２】
近年、ハードウェアあるいはソフトウェアで実装された暗号モジュールが、暗号処理を行う際の副情報を手がかりにして、暗号鍵の解析を行う解読法が各種考案されている。例えば、タイミング攻撃と呼ばれる解析方法では、暗号モジュールが暗号処理に要する時間が、暗号処理に用いている暗号鍵の値により、わずかではあるが異なることを利用して、暗号鍵の解析を行う。即ち、タイミング攻撃においては、暗号処理を行う際の処理時間という副情報を利用して、暗号鍵の解読を行っている。そのような解読法の中でも、暗号処理を行う際の電力消費量を副情報として、解読を行う解読方法としては、Ｓｉｍｐｌｅ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓ、やＤｉｆｆｅｒｅｎｔｉａｌ  Ｐｏｗｅｒ  Ａｎａｌｙｓｉｓといった各種の方法が考案されている。これらの解読法は、近年、高性能な計測機器が安価で手に入るようになった背景もあって、ＩＣカードのような暗号が実装された実際の製品に対しても解析が可能であることが報告されている。また、暗号処理を行う際に、暗号モジュールから発生する電磁波強度を副情報として解読する方法など数々の解析方法が考案されている。以下の記述では、暗号処理時における暗号モジュールの電力消費量を手がかりにして、暗号鍵を解析する解読方法を総称して、「電力解析攻撃」と呼ぶことにする。以下では、電力解析攻撃を例にして説明を行うが、本発明は、副情報を用いたその他の解析方法に対しても同様に有効であるとして説明することができる。即ち、本発明は、電力解析攻撃のみならず、暗号処理中に暗号モジュールから発生する副情報を利用して鍵の推定を行う解析方法であれば適用可能である。
【０００３】
電力解析攻撃は、暗号モジュールの電力消費量と暗号処理途中の中間値との間に相関があることを利用して、鍵の解析を行う。従って、電力解析攻撃に対する対策としては、暗号処理途中の中間値を、暗号モジュール内部で生成した乱数によってランダム化することで電力消費量と中間値との相関関係をわかりにくくすることが考えられる。このように、暗号処理の中間値をランダム化することを、中間値を「マスクする」と呼ぶ。また、中間値をマスクすることにより、電力解析攻撃による鍵解析を困難にする方法を総称して「マスキング法」と呼ぶ。
【０００４】
特許文献１に記載のマスキング法では、米国標準暗号ＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）暗号に対するマスキング法が開示されている（従来技術１と呼ぶ）。
【０００５】
（従来技術１の概要）
従来技術１の方法によると、ＤＥＳ暗号で用いるデータ変換用テーブルＳｂｏｘを、暗号モジュール内部で生成する乱数に基づいてランダム化を行いした、ランダム化Ｓｂｏｘテーブルを、暗号処理に先立って作成し、一時的に保管する。暗号処理には、このランダム化Ｓｂｏｘテーブルを用いることで、暗号処理の中間値はマスクされ、電力解析攻撃は困難になる。ここで、従来技術１においては、ランダム化Ｓｂｏｘテーブルを一時記憶するためのＲＡＭが必要になる。従って、ＲＡＭ容量に厳しい制約のある場合には、従来技術１は使用できないという問題がある。また、暗号モジュールをハードウェアで実装する場合には、一般にＳｂｏｘテーブルは、論理回路で実装されることが多い。従って、ランダム化Ｓｂｏｘテーブルを作成することができないので、従来技術１は使用できないという問題がある。
【０００６】
（従来技術２の概要）
非特許文献１に記載のマスキング法では、米国次世代標準暗号ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）暗号に対するマスキング法が開示されている（従来技術２と呼ぶ）。従来技術２の方法では、暗号処理の中間値を、乗算を用いてマスクすることで、従来技術１の問題点を解決している。これは、ＡＥＳ暗号のＳｂｏｘテーブルが、有限体ＧＦ（２＾８）上の逆元計算（“Ｘ＾Ｙ”は、「ＸのＹ乗」を示す）と所定のアフィン変換を行う処理と等価であることを利用している。ＡＥＳ暗号のＳｂｏｘテーブルの入力値Ｘが、ランダムマスク値ＲによってＲ・Ｘのように乗算を用いてマスクされているとする。このとき、逆元計算後の値は、Ｒ＾（−１）・Ｘ＾（−１）となるので、逆元計算後の値はＲ＾（−１）で乗算マスクされていると見ることができる。但し、Ｘ＾（−１）は、Ｘの逆元を表す。更に、Ｒ＾（−１）・Ｘ＾（−１）に対して、定数１との有限体上の加算を行った後にマスク値Ｒとの乗算を行うと
｛Ｒ＾（−１）・Ｘ＾（−１）（＋）１｝・Ｒ＝Ｒ＾（−１）・Ｒ・Ｘ＾（−１）（＋）Ｒ
＝１・Ｘ＾（−１）（＋）Ｒ＝Ｘ＾（−１）（＋）Ｒ
となり、Ｘ＾（−１）は、マスク値Ｒによる加算マスクがされた状態となる。ここで、（＋）は、有限体上の加算を表す。上記の値に対して、所定のアフィン変換ｆを行うと、アフィン変換ｆの線形性から、
ｆ（Ｘ＾（−１）（＋）Ｒ）＝ｆ（Ｘ＾（−１））（＋）ｆ（Ｒ）
となり、ｆ（Ｘ＾（−１））は、ｆ（Ｒ）による加算マスクがされた状態となる。ここで、ｆ（Ｘ＾（−１））は、ＧＦ（２＾８）上の逆元計算Ｘ＾（−１）にアフィン変換ｆを行った値である。上述したように、Ｓｂｏｘによるテーブル変換は、ＧＦ（２＾８）上の逆元計算と所定のアフィン変換を行う処理と等価であるので、ｆ（Ｘ＾（−１））は、Ｘに対してＳｂｏｘテーブル変換を行った結果の値に他ならない。よってしたがって、上記のようなマスク処理を行えば、通常のＳｂｏｘテーブル変換の結果をｆ（Ｒ）で加算マスクした場合と同じ結果が得られる。したがって、ＡＥＳ暗号に対しては、ランダム化Ｓｂｏｘテーブルを用いなくても、マスキング法を適用することが可能となる。即ち、従来技術１で課題であった、ランダムＳｂｏｘテーブルを作成すること処理は不要となり、更に、そのデータを一時記憶するためのＲＡＭも不要となる。
【０００７】
このように、乗算演算を用いて中間値にマスクを行うマスキング法を、乗算マスキング法と呼ぶ。以下、従来技術２に開示される乗算マスキング法について簡単に説明する。
【０００８】
（ＡＥＳ暗号の概要）
最初に、ＡＥＳ（Ａｄｖａｎｃｅｄ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）暗号（ＡＥＳ暗号の詳細は、非特許文献１を参照）のアルゴリズムについて簡単に説明する。図１１は、ＡＥＳ暗号の処理概要を示すブロック図である。ＡＥＳ暗号は、１２８ビット、１９２ビット、２５６ビットの３種類の鍵サイズをサポートしているが、以下では、鍵サイズが１２８ビットの場合について説明を行う。また、ＡＥＳ暗号は、１２８ビットの鍵から、１２８ビット×１１個のラウンド鍵Ｋ０〜Ｋ１０を生成する鍵スケジュール部と呼ばれる処理部と、鍵スケジュール部で生成されたラウンド鍵を用いて、データ撹乱処理を行うデータ撹乱部とからなる。鍵スケジュール部の詳細は、鍵スケジュール部の説明は本発明の特徴部分との関連性が低いため、ここではその説明を、省略する。する。ここでは、以下では、鍵スケジュール部により、１２８ビットの鍵から、１２８ビット×１１個のラウンド鍵が既に生成された後の、データ撹乱処理についてのみ説明する。
【０００９】
まず、１２８ビットの平文に対して、ラウンド鍵を用いたラウンド処理Ｒｏｕｎｄ０〜９（１０〜１９）を、この順序で実行する。このとき、各ラウンド処理には、ラウンド鍵Ｋ０〜Ｋ９をこの順序で用いる。上記一連のラウンド処理を実行後、最後に、排他的論理和部１９１にて、ラウンド鍵Ｋ１０との排他的論理和演算を行い、暗号文Ｃを生成する。
【００１０】
次に、ラウンド処理Ｒｏｕｎｄ０〜９（１０〜１９）の詳細について説明する。ラウンド処理は、最初の９ラウンド分の処理Ｒｏｕｎｄ０〜８（１０〜１８）と、最終のラウンド処理Ｒｏｕｎｄ９（１９）で処理内容が異なるため、分けて説明する。図１２は、ラウンド処理Ｒｏｕｎｄ０〜８（１０〜１８）の内容を示したブロック図である。まず、排他的論理和部１００において、入力データ１２８ビットに対してラウンド鍵Ｋｎ（ｎ＝０〜８）との排他的論理和演算を行う。次に、バイト置換部ＢｙｔｅＰｅｒｍ（１０１）にて、後で説明するテーブル変換処理を行う。そして、ＳｈｉｆｔＲｏｗ（１０２）及びＭｉｘＣｏｌｕｍｎ（１０３）という線形変換処理をこの順で行い、１２８ビットデータを出力する。続いて、ラウンド処理Ｒｏｕｎｄ９（１９）の説明を行う。図１３は、ラウンド処理Ｒｏｕｎｄ９（１９）の処理内容を示したブロック図である。ラウンド処理Ｒｏｕｎｄ９（１９）は、ラウンド処理Ｒｏｕｎｄ０〜８（１０〜１８）の構成から、ＭｉｘＣｏｌｕｍｎ処理だけを取り除いた構成と同じであるから、具体的な処理説明は割愛する。なお、ＳｈｉｆｔＲｏｗとＭｉｘＣｏｌｕｍｎの処理は、非特許文献２に開示されるＳｈｉｆｔＲｏｗ、ＭｉｘＣｏｌｕｍｎの処理と同じであるためここでは説明しない。
【００１１】
次に、バイト置換部ＢｙｔｅＰｅｒｍ（１０１及び１９１）の処理内容について説明する。図１４は、その構成を示すブロック図である。まず、入力データ１２８ビットを、上位から８ビットずつに分割して、ｘ０、ｘ１、・・・、ｘ１５とする。次に、前記各８ビットデータに対してそれぞれ変換テーブルＳｂｏｘを用いたテーブル変換を行い、ｙ０、ｙ１、・・・、ｙ１５を生成する。そして、それらを上位からｙ０、ｙ１、・・・、ｙ１５の順序で結合して１２８ビットデータとし、出力データＹとする。変換テーブルＳｂｏｘは、８ビット×２５６個の要素Ｓｂｏｘ［０］〜Ｓｂｏｘ［２５５］からなる、配列データである。このとき、変換テーブルＳｂｏｘを用いたテーブル変換とは、入力ｘに対して、出力ｙを、ｙ＝Ｓｂｏｘ［ｘ］とする変換である。すなわち、入力ｘを、ｘをインデックスとしてＳｂｏｘのテーブルを引いた結果ｙに変換する。
【００１２】
（従来技術２の具体内容）
ＡＥＳ暗号に対して、従来技術２で開示される乗算マスキング法を適用した場合の構成について説明する。
【００１３】
図１５は、ＡＥＳ暗号のバイト置換部ＢｙｔｅＰｅｒｍ（図１４参照）に、従来技術２で開示される乗算マスキング法を適用した場合の構成ｍＢｙｔｅＰｅｒｍ（３０）を示すブロック図である。ｍＢｙｔｅＰｅｒｍは、元のＢｙｔｅＰｅｒｍが、１２８ビットの入力中間値Ｘに対してバイト置換を行って出力中間値Ｙを出力していたものに対して、１２８ビットのマスクされた入力中間値Ｘに対して、入力乱数Ｒを用いたランダム化バイト置換を行い、マスクされた出力中間値Ｙ及び出力乱数Ｓを出力する。ｍｂｙｔｅＰｅｒｍ（３０）では、まず、入力Ｘを上位から８ビットずつ分割して、ｘ０、ｘ１、・・・、ｘ１５とする。また、入力乱数Ｒも上位から８ビットずつ分割して、ｒ０、ｒ１、・・・、ｒ１５とする。次に、ランダム化テーブル変換部３０００〜３０１５は、それぞれ、ｘ０とｒ０、ｘ１とｒ１、・・・、ｘ１５とｒ１５を用いて、後で説明するランダム化テーブル変換処理を行い、ｙ０とｓ０、ｙ１とｓ１、・・・、ｙ１５とｓ１５を生成する。そして、ｙ０、ｙ１、・・・、ｙ１５をこの順序で連結して１２８ビット出力Ｙとし、ｓ０、ｓ１、・・・、ｓ１５をこの順序で連結して１２８ビット出力乱数Ｓとする。
【００１４】
次に、ランダム化テーブル変換部ｍＳｂｏｘ（３０００〜３０１５）の詳細について説明する。図１６は、ｍＳｂｏｘ（３０００〜３０１５）の内部構成を示したブロック図である。ｍＳｂｏｘ（３０００〜３０１５）は、８ビットの入力値ｘに対して入力乱数ｒを用いてランダム化テーブル変換処理を行い、出力値ｙと出力乱数ｓを出力する。以下、その処理内容について説明する。まず、乗算部３１０において、入力値ｘと入力乱数ｒとの有限体ＧＦ（２＾８）上の乗算を行う。ここで“Ｘ＾Ｙ”は、「ＸのＹ乗」を示す。次に、二乗算部３１１において、入力乱数ｒの二乗算（ｒ＾２）を行う。このときの二乗算もＧＦ（２＾８）上で行う。次に、排他的論理和部３１２にて、乗算部３１０の出力と二乗算部３１１の出力との排他的論理和演算を行う。そして、その結果に対して、逆元演算部Ｉｎｖ．（３１３）にて、ＧＦ（２＾８）上の逆元計算を行う。即ち、逆元演算部３１３は、入力値Ａに対して、以下の関係を満たすＡ＾（−１）を求めて出力する。但し、“・”は、ＧＦ（２＾８）上の乗算を表す。
【００１５】
Ａ・Ａ＾（−１）＝１
次に、排他的論理和部３１４にて、逆元計算部３１３の出力値と固定値“１”との排他的論理和演算を行う。そして、乗算部３１５にて、その結果と入力乱数ｒとのＧＦ（２＾８）上の乗算を行う。次に、前記の結果に対して、アフィン変換部Ａｆｆｉｎｅ（３１６ａ）にて所定のアフィン変換を行い、その結果を出力値ｙとして出力する。また、入力乱数値ｒに対して、アフィン変換部３１６ｂにて、前記と同様のアフィン変換を行い、その結果を出力乱数値ｓとして出力する。ＡＥＳ暗号のＳｂｏｘ変換テーブルによるテーブル変換処理は、ＧＦ（２＾８）上の逆元計算と所定のアフィン変換を、この順序で行う処理と等価であることが知られている。アフィン変換３１６ａ及び３１６ｂは、このアフィン変換と同一である。なお、アフィン変換の具体内容については、非特許文献２で開示されているためここでは説明しない。
【００１６】
従来技術２において、ランダム化テーブル変換部ｍＳｂｏｘへの入力値ｘは、暗号処理の（マスクされていない）中間値ｄ（マスクされていない）に対して、入力乱数ｒによってマスクされた値である。即ち、ｘ＝ｄ（＋）ｒである。従って、乗算部３１０の出力値は、（ｄ（＋）ｒ）・ｒ＝ｄ・ｒ（＋）ｒ＾２となる。排他的論理和部３１２の出力値は、ｄ・ｒ（＋）ｒ＾２（＋）ｒ＾２となるが、同じ値同士の排他的論理和が０になること、および、０と他の数値Ａの排他的論理和の結果は常にＡになることから、出力値は、ｄ・ｒとなる。このとき、逆元計算部３１３の出力は、（ｄ・ｒ）＾（−１）＝ｄ＾（−１）・ｒ＾（−１）となり、排他的論理和部３１４の出力値は、ｄ＾（−１）・ｒ＾（−１）（＋）１となるので、乗算部３１５の出力は、ｄ＾（−１）（＋）ｒとなる。従って、アフィン変換部３１６ａの出力値ｙは、ｙ＝ｆ（ｄ＾（−１）（＋）ｒ）であるが、アフィン変換の線形性から、ｆ（ｄ＾（−１））（＋）ｆ（ｒ）と同値である。但し、ｆ（Ｘ）は、Ｘに対して先ほど説明したアフィン変換を行った結果を表す。このとき、ｆ（ｄ＾（−１））は、従来技術２の概要にて述べたように、入力値ｄに対してＡＥＳ暗号のＳｂｏｘ変換テーブルによる変換を行った結果と等しい。また、ｆ（ｒ）は、前記の出力乱数ｓと等しい。即ち、出力値ｙは、Ｓｂｏｘ変換処理の出力値を、ｓによってマスクした値と等しい。以上をまとめると、ｍＳｂｏｘは、乱数ｒによってマスクされたＳｂｏｘ変換処理の入力値ｘを、乱数ｓによってマスクされたＳｂｏｘ変換処理の出力値ｙを計算する処理になる。
【００１７】
従来技術２の特徴は、Ｓｂｏｘ変換テーブルを、逆元計算とアフィン変換にて実行することにより、従来技術１のようなランダム化変換テーブルを作成する必要がなくなる点である。これにより、ランダム化変換テーブルを一時記憶するためのＲＡＭが不要になり、ＲＡＭ容量に制約のある場合や、変換テーブルを論理回路で実装するような場合でも、使用可能なマスキング法が実現されている。
【非特許文献１】Ｅｌｅｎａ  Ｔｒｉｃｈｉｎａ，Ｄｏｍｅｎｉｃｏ  Ｄｅ  Ｓｅｔａ，  ａｎｄ  Ｌｕｃｉａ  Ｇｅｒｍａｎｉ，“Ｓｉｍｐｌｉｆｉｅｄ  Ａｄａｐｔｉｖｅ  Ｍｕｌｔｉｐｌｉｃａｔｉｖｅ  Ｍａｓｋｉｎｇ  ｆｏｒ  ＡＥＳ”，  Ｃｒｙｐｔｏｇｒａｐｈｉｃ  Ｈａｒｄｗａｒｅ  ａｎｄ  Ｅｍｂｅｄｄｅｄ  Ｓｙｓｔｅｍｓ−ＣＨＥＳ  ２００２（ＬＮＣＳ２５２３）Ｓｐｒｉｎｇｅｒ，  ２００２．
【非特許文献２】Ｆｅｄｅｒａｌ  Ｉｎｆｏｒｍａｔｉｏｎ  ＰｒｏｃｅｓｓｉｎｇＳｔａｎｄａｒｄｓ  Ｐｕｂｌｉｃａｔｉｏｎ  １９７，「Ｓｐｅｃｉｆｉｃａｔｉｏｎ  ｆｏｒ  ｔｈｅ  ＡＤＶＡＮＣＥＤ  ＥＮＣＲＹＰＴＩＯＮ  ＳＴＡＮＤＡＲＤ（ＡＥＳ）」，Ｎｏｖｅｍｂｅｒ  ２６，２００１
【特許文献１】米国特許第６２９５６０６号明細書
【発明の開示】
【発明が解決しようとする課題】
【００１８】
しかしながら、前記従来技術２においては、ある特定の中間値に対しては、マスクが行えないという課題を有していた。先ほど述べた通り、逆元計算部３１３への入力値は、ｄ・ｒである。これは、元の中間値ｄに対して乱数ｒによって乗算によるマスクがされているということを意味する。このとき、もしも、ｄがゼロの場合には、乱数ｒがいかなる値であっても、ｄ・ｒ＝０である。即ち、元の中間値がゼロの場合には、どのような乱数ｒであっても、「マスクがされていない」ことと同じであり、このことを利用したｚｅｒｏ  ａｔｔａｃｋと呼ばれる攻撃方法が知られている。即ち、従来技術２は、ｚｅｒｏ  ａｔｔａｃｋと呼ばれる電力解析攻撃に対して十分な安全性を有していないという課題があった。
【００１９】
本発明は、従来技術２におけるランダム化変換テーブルの生成とそれを一時記憶するためのＲＡＭを必要としない、という特徴は保持しつつ、前記従来技術２の安全性上の課題を解決するもので、ランダム化変換テーブルの生成とそれを一時記憶するためのＲＡＭを必要とせず、かつ、ｚｅｒｏ  ａｔｔａｃｋも含めた電力解析攻撃を阻止できるような、暗号装置を提供することを目的とする。
【課題を解決するための手段】
【００２０】
前記従来の課題を解決するために、本発明の暗号装置は、平文に対して鍵に基づく所定の暗号処理を行い、第１の乱数を生成する第１乱数生成部と、第２の乱数を生成する第２乱数生成部と、前記平文を前記所定の暗号処理を行う過程の中間値に対して前記第１の乱数に基づく乗算を用いた第１のランダム化処理を行って第１ランダム化中間値を生成する第１ランダム化部と、前記第１ランダム化中間値に対して前記第２の乱数に基づく加算を用いた第２のランダム化処理を行って第２ランダム化中間値を生成する第２ランダム化部と、前記第２ランダム化中間値に対して第３の乱数と有限体上の逆元計算に基づくランダム化逆元計算処理を行って第３ランダム化中間値を生成する逆元計算部とからなることを特徴とする。
【発明の効果】
【００２１】
本発明の暗号装置によれば、第１の乱数と乗算に基づくマスク処理に加えて、第２の乱数と加算に基づくマスク処理を行うことで、特定の暗号処理中間値に対しては乗算によるマスク処理が十分に行えないという従来技術の課題を解決しつつ、ランダム化変換テーブルを一時記憶するためのＲＡＭが不要という従来技術の利点を実現するという効果がある。
【発明を実施するための最良の形態】
【００２２】
（実施の形態１）
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００２３】
（本発明におけるＡＥＳ暗号化処理手順の概要）
図１は、本発明の実施の形態における、ＡＥＳ暗号化処理手順を示したブロック図である。１２８ビットの平文Ｐは、１２８ビット×１１個のラウンド鍵Ｋ０〜Ｋ１０と乱数生成部２４で生成する１２８ビットの乱数Ｒ０を元に、この後説明するデータ撹乱処理を行い、１２８ビットの暗号文Ｃを生成する。以下、その処理手順について説明する。
【００２４】
（１）乱数生成部２４にて、１２８ビットの乱数Ｒ０を生成する。
【００２５】
（２）排他的論理和部２０にて、平文Ｐと乱数Ｒ０との排他的論理和演算を行う。
【００２６】
（３）ｎ＝０〜９に対して以下の処理を繰り返し行う：ランダム化ラウンド処理部２１ａ〜２１ｊにて、乱数Ｒｎとラウンド鍵Ｋｎを用いたランダム化ラウンド処理ｍＲｏｕｎｄ０〜ｍＲｏｕｎｄ９を行い、出力値と出力乱数Ｒｎ＋１を求める。
【００２７】
（４）排他的論理和部２２にて、ラウンド鍵Ｋ１０との排他的論理和演算を行う。
【００２８】
（５）排他的論理和部２３にて、乱数Ｒ１０との排他的論理和演算を行う。
【００２９】
次に、ランダム化ラウンド処理部ｍＲｏｕｎｄ０〜ｍＲｏｕｎｄ９（２１ａ〜２１ｊ）について説明を行うが、ｍＲｏｕｎｄ０〜ｍＲｏｕｎｄ８（２１ａ〜２１ｉ）とｍＲｏｕｎｄ９（２１ｊ）とでは処理内容が異なるため、それぞれ分けて説明する。
【００３０】
（ランダム化ラウンド処理部２１ａ〜２１ｉの処理）
図２は、ランダム化ラウンド処理部ｍＲｏｕｎｄ０〜ｍＲｏｕｎｄ８（２１ａ〜２１ｉ）の内部構成を示したブロック図である。ｍＲｏｕｎｄ０〜ｍＲｏｕｎｄ８は、１２８ビットの入力値Ｘに対して、１２８ビットのラウンド鍵Ｋｎ（ｎ＝０〜８）と１２８ビットの入力乱数Ｒｎ（ｎ＝０〜８）を用いて、ランダム化ラウンド処理を行い、１２８ビットの出力値Ｙと１２８ビットの出力乱数Ｒｎ＋１を出力する。以下、その手順について説明する。
【００３１】
（１）排他的論理和部２４０にて、入力値Ｘとラウンド鍵Ｋｎとの排他的論理和演算を行い、１２８ビットデータＡを求める。
【００３２】
（２）ランダム化バイト置換部ｍＢｙｔｅＰｅｒｍ（２４１）にて、前記データＡに対して、入力乱数Ｒｎを用いてランダム化バイト置換処理を行い１２８ビットデータＢ及び１２８ビット乱数Ｓｎを求める。ランダム化バイト置換処理の詳細については後で説明する。
【００３３】
（３）線形変換部２４２ａ及び２４３ａにて、前記Ｂに対して、ＳｈｉｆｔＲｏｗ処理及び、ＭｉｘＣｏｌｕｍｎ処理をこの順序で行い、１２８ビット出力値Ｙを求める。なお、ＳｈｉｆｔＲｏｗ及びＭｉｘＣｏｌｕｍｎの処理内容は、非特許文献２にて開示されるＡＥＳ暗号方式のＳｈｉｆｔＲｏｗ及びＭｉｘＣｏｌｕｍｎと同一であるため、詳細は説明しない。
【００３４】
（４）線形変換部２４２ｂ及び２４３ｂにて、前記Ｓｎに対して、ＳｈｉｆｔＲｏｗ処理及び、ＭｉｘＣｏｌｕｍｎ処理をこの順序で行い、１２８ビット出力乱数Ｒｎ＋１を求める。
【００３５】
（ランダム化ラウンド処理部２１ｊの処理）
図３は、ランダム化ラウンド処理部ｍＲｏｕｎｄ９（２１ｊ）の内部構成を示したブロック図である。その構成は、図２に示したランダム化ラウンド処理部ｍＲｏｕｎｄ０〜ｍＲｏｕｎｄ８（２１ａ〜２１ｉ）の構成から、ＭｉｘＣｏｌｕｍｎを省いたものと同一であり、その処理も、ｍＲｏｕｎｄ０〜ｍＲｏｕｎｄ８から、ＭｉｘＣｏｌｕｍｎの処理を省いた内容と同じであるので、説明は省略する。
【００３６】
次に、ランダム化バイト置換ｍＢｙｔｅＰｅｒｍの処理詳細について説明する。
【００３７】
（ランダム化バイト置換２４１、２５１の処理）
図４は、ランダム化バイト置換ｍＢｙｔｅＰｅｒｍ（２４１、２５１）の内部構成を示したブロック図である。ｍＢｙｔｅＰｅｒｍ（２４１、２５１）は、１２８ビットの入力値Ｘに対して、１２８ビットの入力乱数Ｒｎを用いて、ランダム化バイト置換処理を行い、１２８ビットの出力値Ｙと１２８ビットの出力乱数Ｓｎを生成する。以下、その処理手順について説明する。
【００３８】
（１）入力値Ｘを、上位から８ビットずつ分割して、ｘ０、ｘ１、・・・、ｘ１５とする。
【００３９】
（２）入力乱数Ｒｎを、上位から８ビットずつ分割して、ｒ０、ｒ１、・・・、ｒ１５とする。
【００４０】
（３）ランダム化テーブル変換部ｍＳｂｏｘ（２６００〜２６１５）にて、それぞれ前記ｘ０とｒ０、ｘ１とｒ１、・・・、ｘ１５とｒ１５を用いてランダム化テーブル変換処理を行い、それぞれ８ビットのｙ０とｓ０、ｙ１とｓ１、・・・、ｙ１５とｓ１５を生成する。
【００４１】
（４）前記ｙ０、ｙ１、・・・、ｙ１５をこの順序で連結して１２８ビットの出力値Ｙとする。
【００４２】
（５）前記ｓ０、ｓ１、・・・、ｓ１５をこの順序で連結して１２８ビットの出力乱数Ｓｎとする。
【００４３】
次に、ランダム化テーブル変換部ｍＳｂｏｘ（２６００〜２６１５）の処理内容について説明する。
【００４４】
（ランダム化テーブル変換部２６００〜２６１５の処理）
図５は、ランダム化テーブル変換部ｍＳｂｏｘ（２６００〜２６１５）の内部構成を示したブロック図である。ｍＳｂｏｘ（２６００〜１６１５）は、８ビットの入力値ｘ、８ビットの入力乱数ｒ、及びｍＳｂｏｘの内部にある乱数生成部２７２において生成した８ビットの内部乱数ｔを用いてランダム化テーブル変換処理を行い、８ビットの出力値ｙと８ビットの出力乱数ｓを生成する。以下、その処理手順について説明する。なお、以下の説明において、有限体ＧＦ（２＾８）上で行う乗算は、式の後に“ｏｖｅｒ  ＧＦ（２＾８）”と表記するものとし、有限体の既約多項式は、ＡＥＳ暗号で使用している８次多項式ｘ＾８＋ｘ＾４＋ｘ＾３＋ｘ＋１とする。また、定数保管部２７３は、前記既約多項式をバイナリで表現した９ビット定数値ｍ＝１０００１１０１１を保管している。
【００４５】
（１）乗算部２７０にて、入力値ｘと入力乱数ｒとの乗算を行い、８ビットデータａを求める。即ち、ａ＝ｘ・ｒ  ｏｖｅｒ  ＧＦ（２＾８）である。
【００４６】
（２）二乗算部２７１にて、入力乱数ｒの二乗算を行い、８ビットデータｖを求める。即ち、ｖ＝ｒ＾２  ｏｖｅｒ  ＧＦ（２＾８）である。
【００４７】
（３）乱数生成部２７２にて、２ビットの内部乱数ｔを生成する。
【００４８】
（４）リダクションなし乗算部２７４にて、前記内部乱数ｔと定数保管部２７３が保管する定数値ｍとの乗算を行い、データｕを求める。このときの乗算は、ＧＦ（２＾８）上の乗算とは、少し異なる計算方法を行う。ＧＦ（２＾８）上の乗算Ａ・Ｂを行う場合には、ＡとＢを２進数で乗算を行った後、既約多項式のバイナリ値１００１１０１１による剰余計算を行った結果の８ビットを乗算結果とする。しかし、ここでの乗算は、２進数での乗算後の剰余計算（リダクション）は省略する。即ち、ｔとｍとの２進数での乗算を行った結果の１０ビット値をデータｕとする。即ち、ｕ＝ｔ・ｍである。
【００４９】
（５）排他的論理和部２７５にて、前記８ビットデータｖと前記１０ビットデータｕとの排他的論理和演算を行い、１０ビットデータｗを生成する。即ち、ｗ＝ｕ（＋）ｖである。このとき、８ビットデータｖの上位に２ビットの「００」を付けて１０ビットとして、ｕとの排他的論理和演算を行うものとする。
【００５０】
（６）排他的論理和部２７６にて、前記８ビットデータａと前記１０ビットデータｗとの排他的論理和演算を行い、１０ビットデータｂを生成する。即ち、ｂ＝ａ（＋）ｗである。このとき、８ビットデータａの上位に２ビットの「００」を付けて１０ビットとして、ｗとの排他的論理和演算を行うものとする。
【００５１】
（７）ランダム化逆元計算部２７７にて、前記１０ビットデータｂに対して、ランダム化逆元計算テーブルＩｎｖＴａｂを用いたテーブル変換処理を行い、１０ビットデータｃを生成する。ここで、ランダム化逆元計算テーブルＩｎｖＴａｂは、１０ビット×１０２４個の配列要素ＩｎｖＴａｂ［０］〜ＩｎｖＴａｂ［１０２３］からなるテーブルで、前記テーブルを用いたテーブル変換処理は、１０ビット入力Ｘに対して１０ビット出力Ｙ＝ＩｎｖＴａｂ［Ｘ］を求める処理である。ランダム化逆元計算テーブルＩｎｖＴａｂは、暗号モジュール実装時に作成され、ランダム化逆元計算部２７７に固定的なテーブルとして保管されている。その作成方法については、後で説明する。
【００５２】
（８）乗算部２７８にて、前記１０ビットデータｃと入力乱数ｒとの乗算を行い、８ビットデータｄを求める。ここでの乗算は、ｃとｒとの２進数での乗算を行い、その結果に対して既約多項式の９ビットバイナリ値１００１１０１１による剰余計算を行ったものを乗算結果ｄとする。即ち、ｄ＝ｃ・ｒ  ｏｖｅｒ  ＧＦ（２＾８）とする。
【００５３】
（９）アフィン変換部２７９ａ及び２７９ｂにて、それぞれ８ビットデータｄと入力乱数ｒに対して前述のアフィン変換ｆを行い、その結果を出力値ｙ及び出力乱数ｓとする。即ち、ｙ＝ｆ（ｄ）及びｓ＝ｆ（ｒ）とする。
【００５４】
ここで、ランダム化逆元計算部２７７で用いるランダム化逆元計算テーブルＩｎｖＴａｂの作成は以下の手順により行う。即ち、Ｘ＝０〜１０２３に対して以下の（Ａ）〜（Ｄ）の計算を行いＩｎｖＴａｂ［Ｘ］を算出する。
【００５５】
（Ａ）Ｘを２進数として、既約多項式の９ビットバイナリ値１００１１０１１による剰余計算を行い、８ビット値Ａを求める。
【００５６】
（Ｂ）前記Ａに対するＧＦ（２＾８）上の逆元計算を行い、８ビット値Ｂを求める。即ち、Ａ・Ａ＾（−１）＝１を満たすＧＦ（２＾８）上の値、Ａ＾（−１）を求めて、これをＢとする。
【００５７】
（Ｃ）２ビットの乱数ｐを生成して、前記Ｂに対して以下の計算を行い、１０ビット値Ｃを求める。但し、計算は２進数として行う。
【００５８】
Ｃ＝Ｂ（＋）ｐ・ｍ
（Ｄ）前記１０ビット値Ｃと固定値１との排他的論理和演算を行い、Ｄとする。即ち、Ｄ＝Ｃ（＋）１とする。
【００５９】
以上のようにして、ＩｎｖＴａｂ［０］〜ＩｎｖＴａｂ［１０２３］を求める。
【００６０】
（ＡＥＳ暗号処理との等価性）
以上で説明したマスク処理を行ったＡＥＳ暗号処理が、元のＡＥＳ暗号処理と等価であることを以下で説明する。
【００６１】
図１において、平文Ｐは、排他的論理和部２０にて、乱数Ｒ０を用いて排他的論理和によるマスクが行われた状態でｍＲｏｕｎｄ０（２１ａ）に入力される。
【００６２】
以下つまり、ｍＲｏｕｎｄ０ｎ（２１ａ）には、Ｒ０ｎでマスクされた平文が入力された場合によるが、これが、ｍＲｏｕｎｄ０ｎからは、Ｒｎ＋１１でマスクされた中間値が出力されることを示す。ここで、ｎは、０、１、２、・・・、８である。
【００６３】
図２において、入力Ｘが、Ｒｎでマスクされた中間値であるとし、マスク前の中間値をＭとして、Ｘ＝Ｍ（＋）Ｒｎとする。このとき、排他的論理和部２４０での出力値Ａは、Ａ＝Ｍ（＋）Ｋｎ（＋）Ｒｎとなる。ここで、Ａ、Ｍ、Ｋｎ、Ｒｎをそれぞれ上位から８ビットずつ分割したものを、Ａ［０］〜Ａ［１５］、Ｍ［０］〜Ｍ［１５］、Ｋｎ［０］〜Ｋｎ［１５］、Ｒｎ［０］〜Ｒｎ［１５］とするする。このとき、図４において、ｘｉ＝Ａ［ｉ］＝Ｍ［ｉ］（＋）Ｋｎ［ｉ］（＋）Ｒｎ［ｉ］であり、ｒｉ＝Ｒｎ［ｉ］である（ｉ＝０、１、・・・１５）。次に、これらが、ｍＳｂｏｘ（２６００〜２６１５）に入力されたとすると、図５において、乗算部２７０の出力ａ＝ｘ・ｒであり、排他的論理和部２７５の出力ｗ＝ｒ＾２（＋）ｔ・ｍである。よって、排他的論理和部２７６の出力は、ｂ＝ｘ・ｒ（＋）ｒ＾２（＋）ｔ・ｍであるから、これに、ｘを前記ｘｉ、ｒを前記ｒｉとして値を代入するすると以下のようになる。
【００６４】
ｂ＝（Ｍ［ｉ］（＋）Ｋｎ［ｉ］（＋）Ｒｎ［ｉ］）・Ｒｎ［ｉ］（＋）Ｒｎ［ｉ１］＾２（＋）ｔ・ｍ
＝（Ｍ［ｉ］（＋）Ｋｎ［ｉ］）・Ｒｎ［ｉ］（＋）Ｒｎ［ｉ］・Ｒｎ［ｉ］（＋）Ｒｎ［ｉ］＾２（＋）ｔ・ｍ
＝（Ｍ［ｉ］（＋）Ｋｎ［ｉ］）・Ｒｎ［ｉ］（＋）Ｒｎ［ｉ］＾２（＋）Ｒｎ［ｉ］＾２（＋）ｔ・ｍ
ここで、排他的論理和演算の性質から同じ値同士の演算結果は０となるので、Ｒｎ［ｉ］＾２（＋）Ｒｎ［ｉ］＾２＝０となる。さらに、排他的論理演算では、０と任意の値Ｘとの演算結果はＸのままとなるので最終的にｂは以下のようになる。
【００６５】
ｂ＝（Ｍ［ｉ］（＋）Ｋｎ［ｉ］）・Ｒｎ［ｉ］（＋）ｔ・ｍとなる。
【００６６】
この値に対して、ランダム化逆元計算テーブルＩｎｖＴａｂによるテーブル変換処理が行われるが、この処理は、先ほどのＩｎｖＴａｂテーブルの作成方法として説明した、手順（Ａ）〜（Ｄ）を実行することと同じである。このことより、前記ｂは、手順（Ａ）により、定数ｍによる剰余計算が行われて、（Ｍ［ｉ］（＋）Ｋｎ［ｉ］）・Ｒｎ［ｉ］となり、更に手順（Ｂ）により、（Ｍ［ｉ］（＋）Ｋｎ［ｉ］）＾（−１）・Ｒｎ［ｉ］＾（−１）となり、手順（Ｃ）、（Ｄ）を経て以下の値ｄｃとなる。
【００６７】
ｄ  ｃ＝（Ｍ［ｉ］（＋）Ｋｎ［ｉ］）＾（−１）・Ｒｎ［ｉ］＾（−１）（＋）ｐ・ｍ（＋）１
そして、乗算部２７８の出力結果ｄは、ｍによる剰余計算が行われることに注意すると、上記の式のうち、ｐ・ｍの部分は０と等価であると見なせるので、ｄの値は以下のようになる。
【００６８】
ｄ＝（（Ｍ［ｉ］（＋）Ｋｎ［ｉ］）＾（−１）・Ｒｎ［ｉ］＾（−１）（＋）０（＋）１）・Ｒｎ［ｉ］
＝（Ｍ［ｉ］（＋）Ｋｎ［ｉ］）＾（−１）・Ｒｎ［ｉ］＾（−１）（＋）１）・Ｒｎ［ｉ］
＝（Ｍ［ｉ］（＋）Ｋｎ［ｉ］）＾（−１）・Ｒｎ［ｉ］＾（−１）・Ｒｎ［ｉ］（＋）１・Ｒｎ［ｉ］
＝（Ｍ［ｉ］（＋）Ｋｎ［ｉ］）＾（−１）・１（＋）Ｒｎ［ｉ］
＝（Ｍ［ｉ］（＋）Ｋｎ［ｉ］）＾（−１）（＋）Ｒｎ［ｉ］
ゆえに、アフィン変換２７９ａの出力ｙは、
ｙ＝ｆ（（Ｍ［ｉ］（＋）Ｋｎ［ｉ］）＾（−１））（＋）ｆ（Ｒｎ［ｉ］）
となる。ここで、マスクを行わない場合のラウンド処理Ｒｏｕｎｄへの入力値をＭ［ｉ］としたときに、Ｓｂｏｘテーブル変換処理後の中間値は、ｆ（（Ｍ［ｉ］（＋）Ｋｎ［ｉ］）＾（−１））である。従って、ｙは、Ｓｂｏｘテーブル変換処理後の中間値にｆ（Ｒｎ［ｉ］）によって排他的論理和演算によるマスクを行った値に他ならない。このことより、図２において
Ｂ＝ＢｙｔｅＰｅｒｍ（Ｍ（＋）Ｋｎ）（＋）Ｆ（Ｒｎ）
となる。ここで、Ｆ（Ｒｎ）は、Ｒｎを上位から８ビットずつアフィン変換ｆを施した結果を示し、ＢｙｔｅＰｅｒｍ（Ｘ）は、Ｘに対してＢｙｔｅＰｅｒｍ処理を行った結果を表す。また、
Ｓｎ＝Ｆ（Ｒｎ）
であることは、明らかである。そして、ＳｈｉｆｔＲｏｗ、ＭｉｘＣｏｌｕｍｎはいずれも線形変換であることから、
Ｙ＝ＭｉｘＣｏｌｕｍｎ（ＳｈｉｆｔＲｏｗ（ＢｙｔｅＰｅｒｍ（Ｍ（＋）Ｋｎ）））（＋）ＭｉｘＣｏｌｕｍｎ（ＳｈｉｆｔＲｏｗ（Ｆ（Ｒｎ）））
Ｒｎ＋１＝ＭｉｘＣｏｌｕｍｎ（ＳｈｉｆｔＲｏｗ（Ｆ（Ｒｎ）））
が成り立つ。ここで、ＳｈｉｆｔＲｏｗ（Ｘ）、ＭｉｘＣｏｌｕｍｎ（Ｘ）は、それぞれ、Ｘに対してＳｈｉｆｔＲｏｗ、ＭｉｘＣｏｌｕｍｎ処理を行った結果を表す。ゆえに、
Ｙ＝ＭｉｘＣｏｌｕｍｎ（ＳｈｉｆｔＲｏｗ（ＢｙｔｅＰｅｒｍ（Ｍ（＋）Ｋｎ）））（＋）Ｒｎ＋１
となる。Ｘ＝Ｍ（＋）Ｒｎであったことを考慮すると、上の式は、以下のことを示している。即ち、Ｒｎでマスクされた中間値をランダム化ラウンド処理の入力とすると、Ｒｎ＋１でマスクされた状態の中間値が出力される。なお、上記のことは、ｍＲｏｕｎｄ０〜ｍＲｏｕｎｄ８について成り立つことを示したが、ｍＲｏｕｎｄ９についても、同様のことが言えることは明らかである。
【００６９】
以上のことを用いると、図１において以下のことが言える。まず、排他的論理和部２０にて平文Ｐが、乱数Ｒ０によってマスクされてｍＲｏｕｎｄ０（２１ａ）に入力される。乱数Ｒ０によってマスクされた平文Ｐは、ｍＲｏｕｎｄ０（２１ａ）から、乱数Ｒ１によってマスクされた中間値として出力され、ｍＲｏｕｎｄ１（２１ｂ）に入力される。乱数Ｒ１によってマスクされた中間値は、ｍＲｏｕｎｄ１（２１ｂ）から、乱数Ｒ２によってマスクされた中間値として出力され、ｍＲｏｕｎｄ２（２１２１ｃ）に入力される。以下、同様のことを繰り返すと、乱数Ｒ９によってマスクされた中間値は、ｍＲｏｕｎｄ９（２１ｊ）から、乱数Ｒ１０によってマスクされた中間値として出力される。そして、排他的論理和部２２にてラウンド鍵Ｋ１０との排他的論理和演算が行われ、排他的論理和部２３にて、乱数Ｒ１０との排他的論理和演算を行うことにより、乱数Ｒ１０によるマスクの影響は取り除かれて、暗号文Ｃが生成される。ゆえに、マスク処理を行ったＡＥＳ暗号化処理が、元のＡＥＳ暗号処理と等価であることが示された。
【００７０】
（本発明におけるＡＥＳ復号化処理手順の概要）
次に、以上で説明したマスク処理を行ったＡＥＳ暗号化処理に対応するＡＥＳ復号化処理について説明する。復号化処理は、基本的には、暗号化処理の各部の処理の逆変換処理を逆の順序で行えば良い。
【００７１】
図６は、本発明の実施の形態における、ＡＥＳ復号化処理手順を示したブロック図である。１２８ビットの暗号文Ｃは、１２８ビット×１１個のラウンド鍵Ｋ０〜Ｋ１０と乱数生成部３４で生成する１２８ビットの乱数Ｒ１０を元に、この後説明するデータ撹乱処理を行い、１２８ビットの平文Ｐを生成する。以下、その処理手順について説明する。
【００７２】
（１）乱数生成部３４にて、１２８ビットの乱数Ｒ１０を生成する。
【００７３】
（２）排他的論理和部３０にて、暗号文Ｃと乱数Ｒ１０との排他的論理和演算を行う。
【００７４】
（３）排他的論理和部３１にて、ラウンド鍵Ｋ１０との排他的論理和演算を行う。
【００７５】
（４）ｎ＝９〜０に対して以下の処理を繰り返し行う：ランダム化逆ラウンド処理部３２ｊ〜３２ａにて、乱数Ｒｎ＋１とラウンド鍵Ｋｎを用いたランダム化ラウンド処理ＩｎｖｍＲｏｕｎｄ９〜ＩｎｖｍＲｏｕｎｄ０を行い、出力値と出力乱数Ｒｎを求める。
【００７６】
（５）排他的論理和部３３にて、乱数Ｒ０との排他的論理和演算を行う。
【００７７】
次に、ランダム化逆ラウンド処理部ＩｎｖｍＲｏｕｎｄ０〜ＩｎｖｍＲｏｕｎｄ９（３２ｊ〜３２ａ）について説明を行うが、ＩｎｖｍＲｏｕｎｄ０〜ＩｎｖｍＲｏｕｎｄ８（３２ｉ〜３２ａ）とＩｎｖｍＲｏｕｎｄ９（３２ｊ）とで処理内容が異なるため、それぞれ分けて説明する。
【００７８】
（ランダム化逆ラウンド処理部３２ａ〜３２ｉの処理）
図８は、ランダム化逆ラウンド処理部ＩｎｖｍＲｏｕｎｄ０〜ＩｎｖｍＲｏｕｎｄ８（３２ａ〜３２ｉ）の内部構成を示したブロック図である。ＩｎｖｍＲｏｕｎｄ０〜ＩｎｖｍＲｏｕｎｄ８は、１２８ビットの入力値Ｙに対して、１２８ビットのラウンド鍵Ｋｎ（ｎ＝０〜８）と１２８ビットの入力乱数Ｒｎ＋１（ｎ＝０〜８）を用いて、ランダム化逆ラウンド処理を行い、１２８ビットの出力値Ｘと１２８ビットの出力乱数Ｒｎを出力する。以下、その手順について説明する。
【００７９】
（１）線形変換部３５０ａ及び３５１ａにて、Ｙに対して、ＩｎｖＭｉｘＣｏｌｕｍｎ処理及びＩｎｖＳｈｉｆｔＲｏｗ処理をこの順序で行い、１２８ビット値Ａを求める。ＩｎｖＭｉｘＣｏｌｕｍｎ処理及びＩｎｖＳｈｉｆｔＲｏｗ処理は、ＭｉｘＣｏｌｕｍｎ処理及びＳｈｉｆｔＲｏｗ処理の逆変換に相当する処理であり、非特許文献２にて詳細が開示されているため、ここでは説明しない。
【００８０】
（２）線形変換部３５０ｂ及び３５１ｂにて、Ｒｎ＋１に対して、ＩｎｖＭｉｘＣｏｌｕｍｎ処理及びＩｎｖＳｈｉｆｔＲｏｗ処理をこの順序で行い、１２８ビット値Ｓｎを求める。
【００８１】
（３）ランダム化逆バイト置換部ＩｎｖｍＢｙｔｅＰｅｒｍ（３５２）にて、前記データＡに対して、入力乱数Ｒｎを用いて逆ランダム化バイト置換処理を行い１２８ビットデータＢ及び１２８ビット出力乱数Ｒｎを求める。ランダム化逆バイト置換処理の詳細については後で説明する。
【００８２】
（４）排他的論理和部３５３にて、前記Ｂとラウンド鍵Ｋｎとの排他的論理和演算を行い、１２８ビット出力データＸを求める。
【００８３】
（ランダム化逆ラウンド処理部３２ｊの処理）
図７は、ランダム化逆ラウンド処理部ＩｎｖｍＲｏｕｎｄ９（３２ｊ）の内部構成を示したブロック図である。その構成は、図８に示すランダム化ラウンド処理部ＩｎｖｍＲｏｕｎｄ０〜ＩｎｖｍＲｏｕｎｄ８（３２ａ〜３２ｉ）の構成から、ＩｎｖＭｉｘＣｏｌｕｍｎを省いたものと同一であるので、説明は省略する。
【００８４】
次に、ランダム化逆バイト置換ＩｎｖｍＢｙｔｅＰｅｒｍの処理詳細について説明する。
【００８５】
（ランダム化逆バイト置換３４１、３５２の処理）
図９は、ランダム化逆バイト置換ＩｎｖｍＢｙｔｅＰｅｒｍ（３４１、３５２）の内部構成を示したブロック図である。ＩｎｖｍＢｙｔｅＰｅｒｍ（３４１、３５２）は、１２８ビットの入力値Ｙに対して、１２８ビットの入力乱数Ｓｎを用いて、ランダム化逆バイト置換処理を行い、１２８ビットの出力値Ｘと１２８ビットの出力乱数Ｒｎを生成する。以下、その処理手順について説明する。
【００８６】
（１）入力値Ｙを、上位から８ビットずつ分割して、ｙ０、ｙ１、・・・、ｙ１５とする。
【００８７】
（２）入力乱数Ｓｎを、上位から８ビットずつ分割して、ｓ０、ｓ１、・・・、ｓ１５とする。
【００８８】
（３）ランダム化逆テーブル変換部ＩｎｖｍＳｂｏｘ（３６００〜３６１５）にて、それぞれ前記ｙ０とｓ０、ｙ１とｓ１、・・・、ｙ１５とｓ１５を用いてランダム化逆テーブル変換処理を行い、それぞれ８ビットのｘ０とｒ０、ｘ１とｒ１、・・・、ｘ１５とｒ１５を生成する。
【００８９】
（４）前記ｘ０、ｘ１、・・・、ｘ１５をこの順序で連結して１２８ビットの出力値Ｘとする。
【００９０】
（５）前記ｒ０、ｒ１、・・・、ｒ１５をこの順序で連結して１２８ビットの出力乱数Ｒｎとする。
【００９１】
次に、ランダム化逆テーブル変換部ＩｎｖｍＳｂｏｘ（３６００〜３６１５）の処理内容について説明する。
【００９２】
（ランダム化逆テーブル変換部３６００〜３６１５の処理）
図１０は、ランダム化逆テーブル変換部ＩｎｖｍＳｂｏｘ（３６００〜３６１５）の内部構成を示したブロック図である。ＩｎｖｍＳｂｏｘ（３６００〜３６１５）は、８ビットの入力値ｙ、８ビットの入力乱数ｓ、及びＩｎｖｍＳｂｏｘの内部にある乱数生成部３７３において生成した８ビットの内部乱数ｔを用いてランダム化逆テーブル変換処理を行い、８ビットの出力値ｘと８ビットの出力乱数ｒを生成する。以下、その処理手順について説明する。なお、以下の説明において、有限体ＧＦ（２＾８）上で行う乗算は、式の後に“ｏｖｅｒ  ＧＦ（２＾８）”と表記するものとし、有限体の既約多項式は、ＡＥＳ暗号で使用している８次多項式ｘ＾８＋ｘ＾４＋ｘ＾３＋ｘ＋１とする。また、定数保管部２７３は、前記既約多項式をバイナリで表現した９ビット定数値ｍ＝１０００１１０１１を保管している。
【００９３】
（１）逆アフィン変換部３７０ａ及び３７０ｂにて、それぞれ入力データｙと入力乱数ｓに対して逆アフィン変換ｉｎｖｆを行い、ｄ及び出力乱数ｒを求める。即ち、ｄ＝ｉｎｖｆ（ｙ）及びｒ＝ｆ（ｓ）とする。ここで、逆アフィン変換ｉｎｖｆは、アフィン変換ｆの逆変換処理であり、詳細は非特許文献２にて開示されているため、ここでは説明しない。
【００９４】
（２）乗算部３７１にて、値ｄと出力乱数ｒとの乗算を行い、８ビットデータｃを求める。即ち、ｃ＝ｄ・ｒ  ｏｖｅｒ  ＧＦ（２＾８）である。
【００９５】
（３）二乗算部３７２にて、出力乱数ｒの二乗算を行い、８ビットデータｖを求める。即ち、ｖ＝ｒ＾２  ｏｖｅｒ  ＧＦ（２＾８）である。
【００９６】
（４）乱数生成部３７３にて、２ビットの内部乱数ｔを生成する。
【００９７】
（５）リダクションなし乗算部３７５にて、前記内部乱数ｔと定数保管部３７４が保管する定数値ｍとの乗算を行い、データｕを求める。このときの乗算は、ＧＦ（２＾８）上の乗算とは、少し異なる計算方法を行う。ＧＦ（２＾８）上の乗算Ａ・Ｂを行う場合には、ＡとＢを２進数で乗算を行った後、既約多項式のバイナリ値１００１１０１１による剰余計算を行った結果の８ビットを乗算結果とする。しかし、ここでの乗算は、２進数での乗算後の剰余計算（リダクション）は省略する。即ち、ｔとｍとの２進数での乗算を行った結果の１０ビット値をデータｕとする。即ち、ｕ＝ｔ・ｍである。
【００９８】
（６）排他的論理和部３７６にて、前記８ビットデータｖと前記１０ビットデータｕとの排他的論理和演算を行い、１０ビットデータｗを生成する。即ち、ｗ＝ｕ（＋）ｖである。このとき、８ビットデータｖの上位に２ビットの「００」を付けて１０ビットとして、ｕとの排他的論理和演算を行うものとする。
【００９９】
（７）排他的論理和部３７６にて、前記８ビットデータｃと前記１０ビットデータｗとの排他的論理和演算を行い、１０ビットデータｂを生成する。即ち、ｂ＝ｃ（＋）ｗである。このとき、８ビットデータｃの上位に２ビットの「００」を付けて１０ビットとして、ｗとの排他的論理和演算を行うものとする。
【０１００】
（８）ランダム化逆元計算部３７８にて、前記１０ビットデータｂに対して、ランダム化逆元計算テーブルＩｎｖＴａｂを用いたテーブル変換処理を行い、１０ビットデータａを生成する。ここで、ランダム化逆元計算テーブルＩｎｖＴａｂは、１０ビット×１０２４個の配列要素ＩｎｖＴａｂ［０］〜ＩｎｖＴａｂ［１０２３］からなるテーブルで、前記テーブルを用いたテーブル変換処理は、１０ビット入力Ｘに対して１０ビット出力Ｙ＝ＩｎｖＴａｂ［Ｘ］を求める処理である。ランダム化逆元計算テーブルＩｎｖＴａｂは、暗号モジュール実装時に作成され、ランダム化逆元計算部３７８に固定的なテーブルとして保管されている。その作成方法は、既に説明したとおりである。なお、（ランダム化されているか否かに関わらず）逆元の逆元を取ると元の値に戻るので、暗号化処理におけるランダム化逆元計算テーブルＩｎｖＴａｂを用いた変換の逆変換は、同一のランダム化逆元計算テーブルＩｎｖＴａｂを用いた変換と同じ変換になる。したがって、ここでは、逆変換処理として、暗号処理に用いたランダム化逆元計算テーブルＩｎｖＴａｂと同一のランダム化逆元計算テーブルＩｎｖＴａｂを用いた変換を行っている。
【０１０１】
（９）乗算部３７９にて、前記１０ビットデータａと入力乱数ｒとの乗算を行い、８ビット出力データｘを求める。ここでの乗算は、ａとｒとの２進数での乗算を行い、その結果に対して既約多項式の９ビットバイナリ値１００１１０１１による剰余計算を行ったものを乗算結果ｘとする。即ち、ｘ＝ａ・ｒ  ｏｖｅｒ  ＧＦ（２＾８）とする。
【０１０２】
（ｚｅｒｏ  ａｔｔａｃｋに対する安全性）
以上で説明した実施の形態が、従来技術２において問題となっていたｚｅｒｏ  ａｔｔａｃｋに対して安全性が向上していることを説明する。図５のｍＳｂｏｘ（２６００〜２６１５）の構成において、入力値ｘは、乱数ｒによって中間値ｇがマスクされた値と等しいことは既に説明したとおりである。即ち、ｘ＝ｇ（＋）ｒである。このとき、ランダム化逆元計算部２７７の入力値ｂは、ｂ＝ｇ・ｒ（＋）ｍ・ｔである。よって、たとえマスクをする前の中間値ｇがゼロであっても、内部乱数ｔの影響により、ｂの値は、ランダム化されている。また、ランダム化逆元計算部２７７の出力値ｃについても、ｃ＝ｇ＾（−１）・ｒ＾（−１）（＋）ｍ・ｐである。但し、ｐは、２ビットの乱数である。よって、ｃについても、たとえ中間値ｇがゼロであっても、内部乱数ｐの影響により、ｃの値は、ランダム化されている。以上のことから、本実施の形態は、従来技術２よりもｚｅｒｏ  ａｔｔａｃｋに対する安全性が向上している。
【０１０３】
なお、本実施の形態では、電力解析攻撃対策の対象とする暗号を、ＡＥＳ暗号としているが、ＡＥＳ暗号だけに限らず、変換テーブルが、乗算、逆元演算、アフィン変換のような線形変換のいずれかを組み合わせた処理と等価であるような暗号方式であれば適用可能である。そのような暗号方式としては、他にＣａｍｅｌｌｉａ暗号（ｈｔｔｐ：／／Ｚｉｎｆｏ．ｉｓｌ．ｎｔｔ．ｃｏ．ｊｐ／ｃｒｙｐｔ／ｃａｍｅｌｌｉａ／ｄ１／０１ｅｓｐｅｃ．ｐｄｆより仕様書が入手可能）がある。
【０１０４】
また、本実施の形態において、ランダム化テーブル変換部及びランダム化逆テーブル変換部の内部で生成する内部乱数を２ビットとしているが、２ビットに限定されるものではない。
【０１０５】
また、上記実施の形態では、暗号化処理および復号化処理の手順を中心に説明してきたが、本発明は、図中の各ブロックをそれぞれハードウェアとして実装した暗号化装置や復号化装置として実現することもできる。
【０１０６】
（まとめ）
上記にて述べたように、本発明は、特定の中間値に対してはマスクを行うことができないマスキング（例えば、乗算マスキングなど）により中間値を隠蔽している暗号化装置および復号化装置について、安全性を向上させる発明である。
【０１０７】
本発明では、上述したようなマスキングを行っている箇所に対して、上述した特定の中間値が与えられても影響を受けないような値によるマスキングを更に行うことで、上述した特定の中間値が与えられても、マスキングが行われていない状態の値が現れないようにしている。上記の実施の形態にて述べた例では、定数保管部２７３等が保持する定数と乱数との積を用いて、乗算マスキングの結果に加算マスキングを行うことで、特定の中間値については、ｚｅｒｏ  ａｔｔａｃｋによって乗算マスキングが無効化されても加算マスキングによって中間値を保護しているためｚｅｒｏ  ａｔｔａｃｋによる鍵の解析は困難となる。
【０１０８】
また、追加で行っているマスキングについても、正しい演算結果を得るためにいずれかのタイミングでマスキングの効果を消す必要があるが、演算の途中でマスキングの効果が消されてしまうと隠蔽されていない中間値そのものが現れてしまうため、中間値の保護が適切に行えない。そこで、本発明では、マスキングをかけた中間値がさらに異なる手法で隠蔽された後（上述した実施の形態では、ランダム化逆元変換）でしか打ち消されないような値（上記の実施の形態では、定数保管部内に保管しているｍ。剰余演算によりマスキングの効果が消される）を用いてマスキングを行うことで、隠蔽されていない状態の中間値が常に現れないようにしている。
【０１０９】
以上にて述べたように、本発明は、暗号化装置および復号化装置などの、マスキングによって中間値を保護する必要がある装置に対して有用である。すなわち、これらの装置では処理に用いるテーブルサイズ等の削減のために、特定の値が入力された場合にマスキングの意味がなくなってしまうようなマスキング手法を取ることがあるが、本発明によればこのような場合でも中間値を適切に保護することができる。これにより、本発明では、テーブルサイズ等の削減と中間値の隠蔽を両立させた暗号化装置や復号化装置を提供することができる。
【０１１０】
（変形例）
なお、本発明の上記実施の形態においては、上述の「特定の中間値に対してはマスクを行うことができないマスキング」を、乗算演算によるマスキング（乗算マスキング）としているが、本発明は、これに限定されるものではなく、乗算の代わりに除算演算によるマスキングの場合も本発明に含まれる。除算演算を用いたマスキングの場合も、乗算マスキングと同様に、マスクの対象データがゼロの場合には、マスクの値に関わらず、マスキングした結果の値も、ゼロとなってしまい、上述のｚｅｒｏ  ａｔｔａｃｋが可能となる。
【０１１１】
更になお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
【０１１２】
（１）上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭまたはハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、各装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
【０１１３】
（２）上記の各装置を構成する構成要素の一部または全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムＬＳＩは、その機能を達成する。
【０１１４】
（３）上記の各装置を構成する構成要素の一部または全部は、各装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしてもよい。前記ＩＣカードまたは前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＩＣカードまたは前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカードまたは前記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
【０１１５】
（４）本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
【０１１６】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
【０１１７】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
【０１１８】
また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。
【０１１９】
また、前記プログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記プログラムまたは前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
【０１２０】
（５）上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。
【産業上の利用可能性】
【０１２１】
本発明にかかる暗号装置は、電力解析攻撃を阻止しつつ、従来技術よりも、暗号処理の処理量を削減するという特徴を有するので、高速処理あるいは低コストでの実現が求められる暗号装置の実現に有用である。
【図面の簡単な説明】
【０１２２】
【図１】本発明の実施の形態に係るＡＥＳ暗号処理手順を示すブロック図
【図２】本発明の実施の形態に係るランダム化ラウンド処理部２１ａ〜２１ｉの構成を示すブロック図
【図３】本発明の実施の形態に係るランダム化ラウンド処理部２１ｊの構成を示すブロック図
【図４】本発明の実施の形態に係るランダム化バイト置換部２４１、２５１の構成を示すブロック図
【図５】本発明の実施の形態に係るランダム化テーブル変換部２６００〜２６１５の構成を示すブロック図
【図６】本発明の実施の形態に係るＡＥＳ復号化処理手順を示すブロック図
【図７】本発明の実施の形態に係るランダム化逆ラウンド処理部３２ｊの構成を示すブロック図
【図８】本発明の実施の形態に係るランダム化逆ラウンド処理部３２ｉ〜３２ａの構成を示すブロック図
【図９】本発明の実施の形態に係るランダム化逆バイト置換部３４１、３５２の構成を示すブロック図
【図１０】本発明の実施の形態に係るランダム化逆テーブル変換部３６００〜３６１５の構成を示すブロック図
【図１１】ＡＥＳ暗号の暗号化処理手順を示すブロック図
【図１２】ＡＥＳ暗号のラウンド処理部１０〜１８の構成を示すブロック図
【図１３】ＡＥＳ暗号のラウンド処理部１９の構成を示すブロック図
【図１４】ＡＥＳ暗号のバイト置換部１０１、１９１の構成を示すブロック図
【図１５】従来技術に係るランダム化バイト置換部３０の構成を示すブロック図
【図１６】従来技術に係るランダム化テーブル変換部３０００〜３０１５の構成を示すブロック図
【符号の説明】
【０１２３】
２０    排他的論理和部
２１ａ〜２１ｊ    ランダム化ラウンド処理部
２４０    排他的論理和部
２４１    ランダム化バイト置換部
２４２ａ，２４２ｂ    ＳｈｉｆｔＲｏｗ処理部
２４３ａ，２４３ｂ    ＭｉｘＣｏｌｕｍｎ処理部
２５０    排他的論理和部
２５１    ランダム化バイト置換部
２５２ａ，２５２ｂ    ＳｈｉｆｔＲｏｗ部
２７０    乗算部
２７１    二乗算部
２７２    乱数生成部
２７３    定数保管部
２７４    乗算部
２７５    排他的論理和部
２７６    排他的論理和部
２７７    ランダム化逆元計算部
２７８    乗算部
２７９ａ，２７９ｂ    アフィン変換部
２６００〜２６１５    ランダム化テーブル変換部
【図１】
2007334016.tif 000003
【図２】
2007334016.tif 000004
【図３】
2007334016.tif 000005
【図４】
2007334016.tif 000006
【図５】
2007334016.tif 000007
【図６】
2007334016.tif 000008
【図７】
2007334016.tif 000009
【図８】
2007334016.tif 000010
【図９】
2007334016.tif 000011
【図１０】
2007334016.tif 000012
【図１１】
2007334016.tif 000013
【図１２】
2007334016.tif 000014
【図１３】
2007334016.tif 000015
【図１４】
2007334016.tif 000016
【図１５】
2007334016.tif 000017
【図１６】
2007334016.tif 000018