(57)【要約】【課題】暗号化の演算時間、演算コストの増大を抑制しつつ、サイドチャネル攻撃等に対する耐性を向上させること。【解決手段】暗号処理装置は、ｍビット（ｍは自然数）の第１のデータに基づいて該第１のデータをビット反転した第２のデータを求め、２個の第１のデータと２個の第２のデータを連結して４ｍビットの拡張データを生成するデータ拡張手段と、ハミングウェイトを一定に保ちつつ拡張データの暗号化処理を行う拡張データ演算手段と、を備える。【選択図】図１
2014153552.tif 000002
【特許請求の範囲】
【請求項１】
ｍビット（ｍは自然数）の第１のデータに基づいて該第１のデータをビット反転した第２のデータを求め、２個の該第１のデータと２個の該第２のデータを連結して４ｍビットの拡張データを生成するデータ拡張手段と、
ハミングウェイトを一定に保ちつつ前記拡張データの暗号化処理を行う拡張データ演算手段と、を備える、暗号処理装置。
【請求項２】
前記拡張データ演算手段は、第１の拡張データと第２の拡張データとの排他的論理和を、該第１の拡張データおよび該第２の拡張データのハミングウェイトと該排他的論理和の演算結果のハミングウェイトとが同一となるように、算出するＸＯＲ演算手段を備える、請求項１に記載の暗号処理装置。
【請求項３】
前記ＸＯＲ演算手段は、第１の拡張データがｍビットの第１のデータと該第１のデータをビット反転した第２のデータをそれぞれ２個ずつ含み、第２の拡張データがｍビットの第３のデータと該第３のデータをビット反転した第４のデータをそれぞれ２個ずつ含む場合、該第１のデータと該第３のデータ、該第１のデータと該第４のデータ、該第２のデータと該第３のデータ、該第２のデータと該第４のデータとの間でそれぞれ排他的論理和を求め、求めた排他的論理和を連結することで、該第１の拡張データと該第２の拡張データとの排他的論理和を算出する、請求項２に記載の暗号処理装置。
【請求項４】
前記拡張データ演算手段は、前記拡張データのハミングウェイトを一定に保ちつつ前記拡張データを１ビット左シフトする左シフト演算手段を備える、請求項１ないし３のいずれか１項に記載の暗号処理装置。
【請求項５】
前記左シフト演算手段は、拡張データがｍビットの第１のデータと該第１のデータをビット反転した第２のデータをそれぞれ２個ずつ含む場合、該拡張データに含まれる該２個の第１のデータおよび該２個の第２のデータの最上位ビットをそれぞれゼロとするとともに、該２個の第２のデータの最下位ビットの右側に位置するビットをそれぞれ１とした後、該拡張データを１ビット左シフトする、請求項４に記載の暗号処理装置。
【請求項６】
前記拡張データ演算手段は、前記拡張データのハミングウェイトを一定に保ちつつ前記拡張データを１ビット右シフトする右シフト演算手段を備える、請求項１ないし５のいずれか１項に記載の暗号処理装置。
【請求項７】
前記右シフト演算手段は、拡張データがｍビットの第１のデータと該第１のデータをビット反転した第２のデータをそれぞれ２個ずつ含む場合、該拡張データに含まれる該２個の第１のデータおよび該２個の第２のデータの最上位ビットをそれぞれゼロとした後、該拡張データを１ビット右シフトし、該右シフト前の該拡張データにおいて該２個の第２のデータの最上位ビットに位置するビットをそれぞれ１とする、請求項６に記載の暗号処理装置。
【請求項８】
前記暗号化処理は、ＡＥＳ（Advanced Encryption Standard）暗号化処理であり、
前記データ拡張手段は、平文の少なくとも一部を構成するｍビットのデータに基づいて第１の拡張データを生成するとともに、ラウンド鍵の少なくとも一部を構成するｍビットのデータに基づいて第２の拡張データを生成し、
前記拡張データ演算手段は、ＡｄｄＲｏｕｎｄＫｅｙにおいて、前記ＸＯＲ演算手段を用いて、前記第１の拡張データと前記第２の拡張データの排他的論理和を算出する、請求項７に記載の暗号処理装置。
【請求項９】
コンピュータが、ｍビット（ｍは自然数）の第１のデータに基づいて該第１のデータをビット反転した第２のデータを求め、２個の該第１のデータと２個の該第２のデータを連結して４ｍビットの拡張データを生成する生成工程と、
ハミングウェイトを一定に保ちつつ前記拡張データの暗号化処理を行う暗号化工程と、を含む、暗号処理方法。
【請求項１０】
ｍビット（ｍは自然数）の第１のデータに基づいて該第１のデータをビット反転した第２のデータを求め、２個の該第１のデータと２個の該第２のデータを連結して４ｍビットの拡張データを生成する生成処理と、
ハミングウェイトを一定に保ちつつ前記拡張データの暗号化処理を行う暗号化処理と、をコンピュータに実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理装置、暗号処理方法およびプログラムに関し、例えば、サイドチャネル攻撃に対する耐性を有する暗号処理装置、暗号処理方法およびプログラムに関する。
【背景技術】
【０００２】
記録媒体に蓄積されたデータや通信路上を流れるデータを盗聴等の脅威から保護するための技術として暗号化がある。暗号化されたデータは、暗号化に用いた鍵を知る者のみが正しく復号することができる。
【０００３】
暗号アルゴリズムとして、ＡＥＳ（Advanced Encryption Standard）が知られている（非特許文献１）。ＡＥＳは、ＳＰＮ（Substitution Permutation Network）構造のブロック暗号(block cipher)方式に基づく。ＡＥＳは、差分解読法(differential cryptanalysis)、線形解読法（linear cryptanalysis）等の暗号解読法に対して安全である。ＡＥＳに対して、秘密鍵の全数探索(brute force attack)よりも効率的に鍵を求める方法は知られていない。また、秘密鍵の全数探索には膨大な時間を要するからである。
【０００４】
近年、暗号化機能が実装された機器（暗号モジュール）において、暗号化機能が動作する際に暗号モジュールが消費する電力や、これに伴う電磁波を利用して暗号化鍵を搾取する攻撃法の脅威が指摘されている。これらの副次的に得られる消費電力、電磁波などに関する情報を「サイドチャネル情報」といい、サイドチャネル情報を利用した攻撃を「サイドチャネル攻撃」という。
【０００５】
次に、サイドチャネル攻撃の原理について説明する。
【０００６】
データを２進数表現したときにデータに含まれる１の個数を「ハミングウェイト」という。ｎビットデータｄのハミングウェイトｈ（ｄ）は、
ｈ（ｄ）∈｛０，１，２，…，ｎ｝
となる。例えば、以下の８ビットデータ（ｎ＝８）の場合、ハミングウェイトは、それぞれ、
ｈ（００００００００）＝０，
ｈ（００００１０００）＝１，
ｈ（００１０００１１）＝３，
ｈ（１１１１１１１１）＝８
となる。
【０００７】
ここで、解析対象の暗号モジュールがハミングウェイトモデルに基づく場合、データのハミングウェイトと消費電力、漏洩電磁波は正比例するものと仮定する。次に、ハミングウェイトモデルに基づく暗号アルゴリズムの解析手順について以下に説明する。図７は、ブロック長が２ｎビットのｒラウンドのフェイステル（Feistel）型暗号について説明するための図である。
【０００８】
２ｎビットの平文Ｐはｎビットのデータｘ０Ｌおよびｘ０Ｒに分割される。各ラウンドの処理は、Ｆ関数７２および排他的論理和７４を含む。第ｉラウンド（ｉ＝１，２，…，ｒ−１）の処理は、式（１）および式（２）によって表される。
【０００９】
ｘｉＲ＝ｘｉ―１Ｌ    …（１）
ｘｉＬ＝Ｆ（ｘｉ―１Ｌ，Ｋｉ−１）＾ｘｉ−１Ｒ      …（２）
【００１０】
式（２）において、記号"＾"はビット毎の排他的論理和（bitwise ＸＯＲ（exclusive OR））の演算子を表す。なお、記号"＾"は、例えば、Ｃ言語などにおいても用いられる。
【００１１】
最終ラウンド（第ｒラウンド）では、データの左右のクロス（交差）を行わない。したがって、データｘｒＬ、ｘｒＲは、式（３）および式（４）によって表される。
【００１２】
ｘｒＬ＝ｘｒ−１Ｌ    …（３）
ｘｒＲ ＝Ｆ（ｘｒ−１Ｌ，Ｋｒ−１）＾ｘｒ−１Ｒ      …（４）
【００１３】
データｘｒＬとｘｒＲを連結した２ｎビットデータｘｒＬ||ｘｒＲが暗号文Ｃとなる。なお、"||"は連結（concatenation）演算子を表す。
【００１４】
図８は、図７のＦ関数７２の構成を一例として示す図である。図８を参照すると、排他的論理和８２は、データｘｉＬと鍵Ｋｉの排他的論理和演算を行い、演算結果としてデータｙｉを得る。次に、Ｓ関数８４は、データｙｉに対して非線形変換を施してデータｚｉを得る。
【００１５】
次に、サイドチャネル情報を用いて最終ラウンドの鍵Ｋｒ−１を求める解析手順を示す。解析手順は、データ収集フェーズと解析フェーズから成る。
【００１６】
データ収集フェーズでは、ｍ個の平文Ｐｊ（ｊ＝０，１，…，ｍ−１）を暗号化して、ｍ個の暗号文Ｃｊを得る。このとき、オシロスコープ、スペクトラムアナライザなどの測定器（波形解析装置）を用いて暗号化処理中の消費電力を測定する。ここで、平文Ｐｊを暗号化するときに測定した電力波形をｗｊとする。
【００１７】
解析フェーズとして、ここでは、差分電力解析（ＤＰＡ：Differential Power Analysis）を例として説明する。
【００１８】
鍵Ｋｒ−１の候補は、２ｎ通りある。そこで、鍵Ｋｒ−１に含まれるｎ個のビットがすべてゼロである場合から順次鍵Ｋｒ−１を仮定する。
【００１９】
データｘｒ−１Ｌ（＝ｘｒＬ）は暗号文Ｃｊより既知であるから、鍵Ｋｒ−１を仮定することによりＦ関数７２の出力データｚｉを計算することができる。
【００２０】
ここで、データｚｉの特定の１ビットに注目し、当該ビットが０になった暗号文に対応する波形データと、当該ビットが１になった暗号文に対応する波形データとに分類する。当該ビットの値が０として分類された波形の集合を集合Ｗ０とし、当該ビットの値が１として分類された波形の集合を集合Ｗ１とする。
【００２１】
次に、集合Ｗ０および集合Ｗ１のそれぞれについて、消費電力の平均値Ｗ０ａｖｇ，Ｗ１ａｖｇを計算する。
【００２２】
ハミングウェイトモデルに基づく場合、データｚｉの計算が実行された時刻の集合Ｗ０よりも集合Ｗ１の消費電力が大きくなる（残りのｎ−１ビットはノイズ成分となるが、多数の波形の平均をとることで平準化されると考える）。したがって、データｚｉの特定の１ビットが０、１となった暗号文の波形集合への分類が正しく行われていれば、平均値Ｗ１ａｖｇから平均値Ｗ０ａｖｇを引くと顕著に差が現れる（図９（ｂ）参照）。
【００２３】
一方、鍵Ｋｒ−１の仮定が誤っている場合、正しく分類されない。すなわち、集合Ｗ０（Ｗ１）にはビット値が１（０）となる波形が混在する。したがって、平均値Ｗ０ａｖｇと平均値Ｗ１ａｖｇの間に差が見られなくなる（図９（ａ）参照）。
【００２４】
したがって、平均波形のピーク値を調べることにより、仮定した鍵が正しい鍵であるかどうかを判別することができる。
【００２５】
一方、サイドチャネル攻撃に対する耐タンパ（tamper resistant）技術の研究も盛んに行われている。ハミングウェイトモデルが適用できる環境における耐タンパ技術は、２つに大別することができる。一方は、暗号化データとは無関係なデータを付加することにより、データのハミングウェイトと消費電力の相関を崩す方法である。他方は、暗号化データを完全にビット反転させたデータを同時に生成することにより、暗号化処理中のハミングウェイトを一定にする方法である。前者の方法としてマスキング法が知られている。また、後者の方法として、Dual Rail Logic（ＤＤＬ）法が知られている。
【００２６】
ＤＤＬ法では、ハードウェアで暗号化回路を構成する際に、正規の暗号化処理とは別に相補的な回路を構成し、これらを同時に動作させ、正規の暗号化データとビット反転したデータを同時に生成することにより、消費電力を一定にする。
【００２７】
また、ＤＬＬ法のアイディアをソフトウェアに応用した手法が存在する（非特許文献２）。ソフトウェアプログラムは実行されるプロセッサ上で逐次処理されるため、暗号化を行うプログラムに相補的な処理を追加しても同時に相補的な処理を実行させることはできない。そこで、処理するデータにその相補データを付加することにより、擬似的なＤＤＬを構成する（以下、「擬似ＤＬＬ法」という。）。
【００２８】
疑似ＤＬＬ法では、暗号化データをビットデータに分解し、値が０であるビットデータを２ビットの０１（２）に置き換え、値が１であるビットデータを２ビットの１０（２）に置き換える。ここで、下付の添え字（２）は２進数を表す。これらの２値のハミングウェイトは、いずれも１であるため、消費電力は等しくなる。したがって、暗号化処理中のデータがすべて０１（２）、１０（２）のいずれかになっていれば、暗号化するデータや鍵の違いに依らず消費電力は常に一定となる。
【００２９】
ところで、疑似ＤＬＬ法を用いた場合、プロセッサが持つ演算命令では置き換え後の状態を保つことができない。このことを、ＸＯＲ命令を例として説明する。置き換え前のデータで"０＾１"という演算を行う場合、置き換え後のデータでは"０１（２）＾１０（２）"という演算を行うことになる。置き換え前においてＸＯＲ命令の結果として期待する結果は１であるから、置き換え後の結果が１０（２）となることが期待される。しかし、置き換え後のデータをプロセッサのＸＯＲ命令で処理すると、結果は１１（２）となるため、期待する結果が得られないことになる。
【００３０】
この問題を解決するために、テーブルを利用することができる。期待する結果をテーブルエントリとして保持し、演算されるデータをテーブルインデックスとしてテーブル参照を行うことにより、演算結果を得る。ＸＯＲ演算ｘ＾ｙを行う場合、ｘとｙを連結したデータｘ||ｙをテーブルのインデックスとする。１ビットデータ同士のＸＯＲ演算の場合、インデックスとして０１０１（２）（５）、０１１０（２）（６）、１００１（２）（９）、１０１０（２）（１０）の４つをとり得る。そこで、テーブルの５、６、９、１０番目にそれぞれの演算結果０１（２）,１０（２）,１０（２）,０１（２）を設定する。したがって、ＸＯＲの演算結果を得るためのテーブルは式（５）によって与えられる。
【００３１】
ＸＯＲ［１６］＝
{−,−,−,−,−,０１（２）,１０（２）,−,−,１０（２）,０１（２）,−,−,−,−,−}  …（５）
【００３２】
ここで、"-"は未参照領域であるため、任意の値としてもよい。また、暗号アルゴリズムが論理和、論理積等他の演算を利用する場合、同様のテーブルを生成する必要がある。
【００３３】
理解を助けるために、図８に対して上記の耐タンパ方法の適用した例を示す。図１０は、図８の処理を、上記の耐タンパ方式で実装したものを示す。ここで、Ｘ＝Ｘｎ−１||Ｘｎ−2||...||Ｘ１||Ｘ０、Ｙ＝Ｙｎ−１||Ｙｎ−2||...||Ｙ１||Ｙ０であり、Ｘｉ（Ｙｉ）が０ならばｘｉ（ｙｉ）は０１（２）であり、１ならば１０（２）である。上述のとおり、ＸＯＲ１０２は、テーブル参照により実現される。一方、Ｓ’関数１０４は、ｎ個の２ビットデータを連結した２ｎビットのデータを入力データとし、２ｎビットの変換後データｚを出力する。Ｓ関数８４をテーブル参照で実現した場合、テーブルは２ｎ個のエントリを有する。このとき、Ｓ’関数１０４は２２ｎ個のエントリを持つテーブルとなる。
【００３４】
なお、特許文献１には、暗号処理を実行する際の電力消費量を計測することで、暗号モジュールに埋め込まれている暗号鍵を解析する攻撃方法に対して安全な暗号化装置として鍵によって予め定められた処理がされた入力データに対して、乱数に依存して決まる予め定められた入力マスク値が加算されたランダム化入力データと入力マスク値とを受け付けて、入力マスク値の逆元である出力マスク値が、入力データの逆元に対して加算されたランダム化出力データを生成するランダム化８ビット逆元計算部を備え、生成されたランダム化出力データから暗号文を生成する技術が開示されている。
【００３５】
また、特許文献２には、差分電力解析（ＤＰＡ）に対して安全な暗号化装置として、乱数を発生する乱数発生器手段と、乱数に従ってｑ個の固定値の中の１つを選択する第１の選択器と、乱数に従ってｑ組の固定テーブルの中の１組を選択する選択器と、を備えた暗号化装置が記載されている。排他的論理和手段は、固定値と鍵の排他的論理和と入力の排他的論理和をとり、非線形変換手段は、１組の固定テーブルに従って非線形変換を行う構成が開示されている。
【００３６】
さらに、特許文献３には、ＤＰＡまたはＥＭＡ（Electro-Magnetic Analysis）タイプの攻撃に対抗するための暗号回路であって、暗号アルゴリズムを実行するための関数鍵ｋｃを含み、関数鍵ｋｃとは別の、サイドチャネルを利用した攻撃から該暗号回路を保護する第２の鍵ｋｉを含む暗号回路が開示されている。
【先行技術文献】
【特許文献】
【００３７】
【特許文献１】国際公開第２００８／１４６４８２号
【特許文献２】特開２００２−３６６０２９号公報
【特許文献３】特表２０１２−５１６０９４号公報
【非特許文献】
【００３８】
【非特許文献１】"Announcing the ADVANCED ENCRYPTION STANDARDS (AES)," Federal Information Processing Standards Publication 197, November 26, 2001.
【非特許文献２】P. Hoogvorst, G. Duc and J.-L Danger, "Software Implementation of Dual-Rail Representation," COSADE 2011, Second International Workshop on Constructive Side-Channel Analysis and Secure Design, 2011.
【発明の概要】
【発明が解決しようとする課題】
【００３９】
上記の特許文献および非特許文献の全開示内容は、本書に引用をもって繰り込み記載されているものとする。以下の分析は、本発明者によってなされたものである。
【００４０】
ＤＤＬ法をソフトウェア実装で実現した疑似ＤＬＬ法では、データをビットレベルに分割するため、サイドチャネル攻撃への対策を施さない実装では１回で行うことができた演算を、複数回に分けて行うことになる。したがって、疑似ＤＬＬ法によると、演算回数が増加し、暗号化処理速度が低下するおそれがある。図８に示した例では、ｎ＝８の場合、１回のＸＯＲ命令と１回のＳテーブル参照により実行できる。一方、図１０に示すように、サイドチャネル攻撃への対策を施した場合、８回のＸＯＲテーブル参照、データの連結処理、さらに、１回のＳ’テーブル参照が必要となる。
【００４１】
なお、ＸＯＲはビット単位の演算であるから、分割の単位を任意に決定することができる。例えば、データｘｉ（ｙｉ）とデータｘｉ＋１（ｙｉ＋１）（ｉ＝０，２，４，６）を連結した４ビットデータとすることで、ＸＯＲテーブルの参照回数を半分の４回に削減することができる。ただし、この場合、ＸＯＲテーブルを参照する際のインデックスは８ビットになるため、テーブルサイズが大幅に増大する。また、式（５）のＸＯＲテーブルのように、未使用領域を多く含むテーブルを利用することになるため、メモリの使用量が増加する。
【００４２】
このように、ソフトウェア実装された暗号モジュールをサイドチャネル攻撃の脅威から保護するためには、ＤＤＬ法は有効な手法の一つであるものの、擬似ＤＤＬ法によると、処理速度の低下が著しく、メモリ使用量も大幅に増大するという問題がある。
【００４３】
そこで、暗号化の演算時間、演算コストの増大を抑制しつつ、サイドチャネル攻撃等に対する耐性を向上させることが要望される。本発明の目的は、かかる要望に寄与する暗号処理装置、暗号処理方法およびプログラムを提供することにある。
【課題を解決するための手段】
【００４４】
本発明の第１の視点に係る暗号処理装置は、
ｍビット（ｍは自然数）の第１のデータに基づいて該第１のデータをビット反転した第２のデータを求め、２個の該第１のデータと２個の該第２のデータを連結して４ｍビットの拡張データを生成するデータ拡張手段と、
ハミングウェイトを一定に保ちつつ前記拡張データの暗号化処理を行う拡張データ演算手段と、を備える。
【００４５】
本発明の第２の視点に係る暗号処理方法は、
コンピュータが、ｍビット（ｍは自然数）の第１のデータに基づいて該第１のデータをビット反転した第２のデータを求め、２個の該第１のデータと２個の該第２のデータを連結して４ｍビットの拡張データを生成する生成工程と、
ハミングウェイトを一定に保ちつつ前記拡張データの暗号化処理を行う暗号化工程と、を含む。
【００４６】
本発明の第３の視点に係るプログラムは、
ｍビット（ｍは自然数）の第１のデータに基づいて該第１のデータをビット反転した第２のデータを求め、２個の該第１のデータと２個の該第２のデータを連結して４ｍビットの拡張データを生成する生成処理と、
ハミングウェイトを一定に保ちつつ前記拡張データの暗号化処理を行う暗号化処理と、をコンピュータに実行させる。
なお、プログラムは、非一時的なコンピュータ可読記録媒体（non-transitory computer-readable storage medium）に記録されたプログラム製品として提供することができる。
【発明の効果】
【００４７】
本発明に係る暗号処理装置、暗号処理方法およびプログラムによれば、暗号化の演算時間、演算コストの増大を抑制しつつ、サイドチャネル攻撃等に対する耐性を向上させることが可能となる。
【図面の簡単な説明】
【００４８】
【図１】第１の実施形態に係る暗号処理装置の構成を一例として示すブロック図である。
【図２】第１の実施形態に係る暗号処理装置における拡張データ演算手段の構成を一例として示すブロック図である。
【図３】ＡＥＳの処理手順を示すフロー図である。
【図４】ＡＥＳの処理を詳細に記載した図である。
【図５】第１の実施形態に係る暗号処理装置における拡張データ演算手段を、ＡＥＳに適用した構成例を示す図である。
【図６】第１の実施形態に係る暗号処理装置をコンピュータとして実現したときの構成を一例として示すブロック図である。
【図７】フェイステル（Feistel）型暗号の一例を示す図である。
【図８】図７のＦ関数の構造を説明するための図である。
【図９】（ａ）差分電力解析を行った際の鍵の推定が誤っている場合、（ｂ）鍵の推定が正しい場合の平均波形の例を説明するための図である。
【図１０】図８の処理を耐タンパ化したときの構成例を示す図である。
【発明を実施するための形態】
【００４９】
はじめに、一実施形態の概要について説明する。なお、この概要に付記する図面参照符号は、専ら理解を助けるための例示であり、本発明を図示の態様に限定することを意図するものではない。
【００５０】
図１は、一実施形態に係る暗号処理装置（１０）の構成を一例として示すブロック図である。図１を参照すると、暗号処理装置（１０）は、ｍビット（ｍは自然数）の第１のデータ（ｘ）に基づいて第１のデータ（ｘ）をビット反転した第２のデータ（ｘｂａｒ）を求め、２個の第１のデータ（ｘ）と２個の第２のデータ（ｘｂａｒ）を連結して４ｍビットの拡張データを生成するデータ拡張手段（１２）と、ハミングウェイトを一定に保ちつつ拡張データの暗号化処理を行う拡張データ演算手段（１６）と、を備える。
【００５１】
第１のデータｘのハミングウェイトｈ（ｘ）がｓ（０≦ｓ≦ｍ）である場合、第２のデータｘｂａｒのハミングウェイトｈ（ｘｂａｒ）は（ｍ−ｓ）である。したがって、データ拡張手段（１２）によって生成される拡張データ（例えば、４ｍビットデータｘｂａｒ||ｘ||ｘｂａｒ||ｘ）のハミングウェイトｈ（ｘｂａｒ||ｘ||ｘｂａｒ||ｘ）は２ｍとなり、第１のデータ（ｘ）のハミングウェイトｓに依存しない値となる。また、拡張データ演算手段（１６）によると、ハミングウェイトを一定値の２ｍに保ちつつ拡張データの暗号化処理が行われるため、暗号化処理に含まれる演算（例えば、排他的論理和、左シフト、右シフトなど）において、サイドチャネル情報が漏洩することはない。
【００５２】
したがって、暗号処理装置（１０）によると、暗号化の演算時間、演算コストの増大を抑制しつつ、サイドチャネル攻撃等に対する耐性を向上させることが可能となる。
【００５３】
（実施形態１）
第１の実施形態に係る暗号処理装置について、図面を参照して詳細に説明する。本実施形態に係る暗号処理装置は、以下に説明するように、データの通信や蓄積の際にデータを秘匿する共通鍵ブロック暗号へのサイドチャネル攻撃に対する耐タンパ性を有する。
【００５４】
図１は、本実施形態に係る暗号処理装置の構成を一例として示すブロック図である。図１を参照すると、暗号処理装置１０は、データ拡張手段１２およびデータ攪拌手段１４を備えている。
【００５５】
データ拡張手段１２は、ｍビットデータｘとそのビット反転データｘｂａｒをそれぞれ２つずつ用い、これらを連結した４ｍビットの拡張データを生成する。データ攪拌手段１４は、拡張データ演算手段１６を有し、データを攪拌する。拡張データ演算手段１６は、拡張データの値に依存することなく、攪拌処理中のデータのハミングウェイトを一定に保ったまま処理を行う。
【００５６】
データ拡張手段１２は、ｍビットのデータｘに基づいて、データｘを含むハミングウェイトが２ｍの４ｍビットの拡張データを生成する。データ拡張手段１２による拡張データの生成方法について説明する。まず、データ拡張手段１２は、データｘを４つ連結した４ｍビットデータｘ||ｘ||ｘ||ｘを生成する。次に、データ拡張手段１２は、４つのデータｘのうちの２つのデータｘをビット反転させる。例えば、一番左と左から３番目のデータｘをビット反転させる場合、データ拡張手段１２は、次の右辺の演算を行う。
ｘｂａｒ||ｘ||ｘｂａｒ||ｘ＝ｘ||ｘ||ｘ||ｘ＾１（ｍ）||０（ｍ）||１（ｍ）||０（ｍ）
【００５７】
上式において、データｘｂａｒはデータｘに含まれるビットを反転したデータを表す。また、１（ｍ）はすべてのビットが１のｍビット長のデータを表し、０（ｍ）はすべてのビットが０のｍビット長のデータを表す。
【００５８】
データｘのハミングウェイトｈ（ｘ）がｓ（０≦ｓ≦ｍ）である場合、データｘｂａｒのハミングウェイトｈ（ｘｂａｒ）は（ｍ−ｓ）となる。したがって、４ｍビットデータｘｂａｒ||ｘ||ｘｂａｒ||ｘのハミングウェイトｈ（ｘｂａｒ||ｘ||ｘｂａｒ||ｘ）は２ｍである。なお、データ拡張手段１２がｎ個の４ｍビットデータを生成するとき、ビット反転させる位置は統一してもよく、変数ごとに変えてもよい。以下では、反転前のデータを「正データ」といい、正データをビット反転したデータを「反転データ」という。
【００５９】
データ攪拌手段１４は、拡張データと拡張ラウンド鍵を入力として、暗号文を生成する。ラウンド鍵は、秘密鍵に基づいて暗号アルゴリズムで規定された鍵スケジュールに従って生成される（なお、鍵スケジュールは図示していない）。暗号化の処理手順は、暗号アルゴリズムの仕様に従うものとする。拡張データ演算手段１６は、処理過程で行われるＸＯＲ処理、右シフト処理、左シフト処理を行う。以下、それぞれの具体的な処理手順を示す。
【００６０】
図２は、拡張データ演算手段１６の構成を一例として示すブロック図である。図２を参照すると、拡張データ演算手段１６は、ＸＯＲ演算手段２２、左シフト演算手段２４および右シフト演算手段２６を備えている。
【００６１】
まず、ＸＯＲ処理を行うＸＯＲ演算手段２２について説明する。２つの拡張データ（４ｍビットデータ）Ｘ＝ｘｂａｒ||ｘ||ｘｂａｒ||ｘとＹ＝ｙｂａｒ||ｙ||ｙｂａｒ||ｙをＸＯＲする手順は、以下の擬似コードで表される。
【００６２】
Ｓ１：Ｘ＾＝１（２ｍ）||０（２ｍ）
Ｓ２：Ｚ＝Ｘ＾Ｙ
Ｓ３：Ｚ＾＝０（ｍ）||１（ｍ）||１（ｍ）||０（ｍ）
【００６３】
ステップＳ１では、ＸＯＲ演算手段２２は、拡張データＸの左２ｍビットをビット反転し、拡張データＸ＝ｘ||ｘｂａｒ||ｘｂａｒ||ｘを得る。ステップＳ１後の拡張データＸのハミングウェイトｈ（Ｘ）は２ｍである。ステップＳ１における"Ｘ＾＝"は、拡張データＸと等号の右辺のデータとの排他的論理和を拡張データＸに代入する操作を表す。
【００６４】
ステップＳ２では、ＸＯＲ演算手段２２は、ｘ||ｘｂａｒ||ｘｂａｒ||ｘ＾ｙｂａｒ||ｙ||ｙｂａｒ||ｙを計算して、拡張データＺ＝ｚｂａｒ||ｚｂａｒ||ｚ||ｚを得る。拡張データＺには、正データと反転データが２つずつ含まれる。したがって、ステップＳ２後の拡張データＺのハミングウェイトｈ（Ｚ）は２ｍに保たれる。すなわち、ステップＳ１、Ｓ２の演算によって、サイドチャネル情報が漏洩するおそれはない。
【００６５】
ステップＳ２までで、Ｘ＾Ｙの結果は得られるが、ＸＯＲ演算手段２２は、正データと反転データの並びを元のＸ、Ｙと揃えるために、ステップＳ３の処理を行う。ステップＳ３の演算により、ＸＯＲ演算手段２２は拡張データＺ＝ｚｂａｒ||ｚ||ｚｂａｒ||ｚを得る。ここで、"Ｚ＾＝"は、拡張データＺと等号の右辺のデータとの排他的論理和を拡張データＺに代入する操作を表す。
【００６６】
次に、左シフト処理を行う左シフト演算手段２４について説明する。４ｍビットデータＸ＝ｘｂａｒ||ｘ||ｘｂａｒ||ｘを１ビット左シフトするときの演算手順は、以下の擬似コードで表される。
【００６７】
Ｔ１：Ｙ＝Ｘ＆０||１（ｍ−１）||０||１（ｍ−１）||０||１（ｍ−１）||０||１（ｍ−１）
Ｔ２：Ｙ＝Ｙ｜０（ｍ）||１||０（ｍ−１）||０（ｍ）||１||０（ｍ−１）
Ｔ３：Ｙ＝Ｙ＜＜１
【００６８】
ステップＴ１では、左シフト演算手段２４は、各データｘ，ｘｂａｒの最上位ビットを０にする。ステップＴ１における記号"＆"は、ビット毎の論理積（bitwise ＡＮＤ）の演算子である。ステップＴ１の処理では、データｘの値に依らず、４ビットのうちの２ビットが必ず０にされる。したがって、ステップＴ１後の拡張データＹのハミングウェイトｈ（Ｙ）は２ｍ−２となる。
【００６９】
ステップＴ２では、左シフト演算手段２４は、データｘｂａｒの最下位ビットの１ビット右のビットを論理和（｜）により１にする。ステップＴ２では、２ビットを１にするので、ステップＴ２後の拡張データＹのハミングウェイトｈ（Ｙ）は２ｍとなる。
【００７０】
次に、ステップＴ３で、拡張データＹを左１ビットシフト（＜＜）する。
【００７１】
次に、右シフト処理を行う右シフト演算手段２６について説明する。拡張データ（４ｍビットデータ）Ｘ＝ｘｂａｒ||ｘ||ｘｂａｒ||ｘを１ビット右シフトするときの演算手順は、以下の擬似コードで表される。
【００７２】
Ｕ１：Ｙ＝Ｘ＆１（ｍ−１）||０||１（ｍ−１）||０||１（ｍ−１）||０||１（ｍ−１）||０
Ｕ２：Ｙ＝Ｙ＞＞１
Ｕ３：Ｙ＝Ｙ｜１||０（ｍ−１）||０（ｍ）||１||０（ｍ−１）||０（ｍ）
【００７３】
ステップＵ１では、右シフト演算手段２６は、各データｘ、ｘｂａｒの最下位ビットを０にする。このとき、必ず２ビットが１から０にされるので、ステップＵ１後の拡張データＹのハミングウェイトｈ（Ｙ）は２ｍ−２となる。
【００７４】
ステップＵ２では、右シフト演算手段２６は、拡張データＹを１ビット右シフト（＞＞）する。
【００７５】
ステップＵ３では、右シフト演算手段２６は、論理和により、シフト前の各データｘｂａｒの最上位ビットの位置を１にする。したがって、ステップＵ３後の拡張データＹのハミングウェイトｈ（Ｙ）は２ｍとなる。
【００７６】
次に、暗号処理装置１０のＡＥＳへの適用例について説明する。図３は、ＡＥＳの暗号化手順を示す。１２８ビットの平文Ｐは、まず、ＡｄｄＲｏｕｎｄＫｅｙ３２でラウンド鍵Ｋ０と排他的論理和される。以降、ＳｕｂＢｙｔｅｓ３４、ＳｈｉｆｔＲｏｗｓ３６、ＭｉｘＣｏｌｕｍｎｓ３８、ＡｄｄＲｏｕｎｄＫｅｙ３２を１組としたラウンド処理が（Ｎｒ−１）回繰り返される。このとき、ＡｄｄＲｏｕｎｄＫｅｙ３２には、ラウンドＫｉ（ｉ＝１,２，…，Ｎｒ−１）が入力される。最終ラウンドでは、ＳｕｂＢｙｔｅｓ３４、ＳｈｉｆｔＲｏｗｓ３６、ＡｄｄＲｏｕｎｄＫｅｙ３２のみを行い、１２８ビットの暗号文Ｃが生成される。
【００７７】
ラウンド数Ｎｒは、秘密鍵長に応じて異なる数となる。秘密鍵長が１２８ビットの場合、ラウンド数Ｎｒは１０であり、秘密鍵長が１９２ビットの場合、ラウンド数Ｎｒは１２であり、秘密鍵長が２５６ビットの場合、ラウンド数Ｎｒは１４である。なお、ラウンド鍵Ｋｉの生成方法については、説明を省略する。
【００７８】
図４は、各関数の内部処理を示す。ＡｄｄＲｏｕｎｄＫｅｙ３２は、１２８ビットのデータと１２８ビットのラウンド鍵を排他的論理和する。ＳｕｂＢｙｔｅｓ３４は、データを１６個の８ビットデータに分割し、それぞれに対してＳ−ｂｏｘと呼ばれる非線形変換を施す。ＳｈｉｆｔＲｏｗｓ３６は、１６個の８ビットデータの転置を行う。
【００７９】
ＭｉｘＣｏｌｕｍｎｓ３８は演算手段３９を有し、８ビットデータ４つを一組として、以下の演算を行う（ｊ＝０，４，８，１２）。
ｙｊ    ＝２・ｘｊ＾３・ｘｊ＋１＾    ｘｊ＋２＾    ｘｊ＋３
ｙｊ＋１＝    ｘｊ＾２・ｘｊ＋１＾３・ｘｊ＋２＾    ｘｊ＋３
ｙｊ＋２＝    ｘｊ＾    ｘｊ＋１＾２・ｘｊ＋２＾３・ｘｊ＋３
ｙｊ＋３＝３・ｘｊ＾    ｘｊ＋１＾    ｘｊ＋２＾２・ｘｊ＋３
ここで、"２・ｘ"はガロア体上の２倍算であり、既約多項式は
ｍ（ｘ）＝ｘ８＋ｘ４＋ｘ３＋ｘ＋１
で与えられる。
【００８０】
ソフトウェア実装による２倍算は、一例として、以下の手順で実現することができる。
（１）８ビットデータの最上位ビットを符号ビットと見立てて、７ビット算術右シフトを行う。最上位ビットが０ならばシフト結果はオール０となり、最上位ビットが１ならばシフト結果はオール１となる。
（２）（１）の結果と０ｘ１ｂとの論理積を求める。ここで、"０ｘ"は１６進数表記であることを表す。（１）の結果がオール０ならば論理積の結果は０となり、（１）の結果がオール１ならば論理積の結果は０ｘ１ｂとなる。
（３）８ビットデータを左１ビットシフトし（最上位ビットは落ちるものとする）、（２）の結果との間で排他的論理和を求める。
【００８１】
一方、３倍算は、（２・ｘ＋ｘ）によって実現することができる。
【００８２】
なお、ＡＥＳの詳しい仕様は、ＦＩＰＳ−１９７（非特許文献１）に開示されている。
【００８３】
図５は、ＡＥＳを本実施形態の耐タンパ手法で実現した場合の処理方法を示す。平文Ｐは１６個の８ビットデータＰｉ（ｉ＝０，１，２，…，１５）に分割する。データ拡張手段１２は、８ビットデータＰｉを３２ビットの拡張データＸｉ＝Ｐｉ||Ｐｉｂａｒ||Ｐｉｂａｒ||Ｐｉに変換する。また、ラウンド鍵Ｋｉも、同様に、１６個の８ビットデータＫｉｊ（ｊ＝０，１，２，…，１５）に分割する。データ拡張手段１２は、８ビットデータＫｉｊを３２ビットの拡張ラウンド鍵ＥＫｉｊ＝Ｋｉｊ||Ｋｉｊｂａｒ||Ｋｉｉｊｂａｒ||Ｋｉｊに変換する。
【００８４】
ＡｄｄＲｏｕｎｄＫｅｙ５２では、データとラウンド鍵との排他的論理和を行う。ＡｄｄＲｏｕｎｄＫｅｙ５２は、ＸＯＲ演算手段２２を用いて、拡張データＸｊと拡張ラウンド鍵ＥＫｉｊを排他的論理和する。
【００８５】
ＳｕｂＢｙｔｅｓ５４のＳ−ｂｏｘ５５は、テーブル参照で実現することができる。テーブルを参照するときのインデックスは、拡張データの下位１６ビットとする。すなわち、拡張データがＹｉ||Ｙｉｂａｒ||Ｙｉｂａｒ||Ｙｉである場合、Ｙｉｂａｒ||Ｙｉがインデックスとなる。また、テーブルの各エントリも拡張データ形式としておく。例えば、Ｓ−ｂｏｘ５５の入力が０ｘ００の場合、出力は０ｘ６３となるので、テーブルインデックスが０ｘｆｆ００のエントリは０ｘ６３９ｃ９ｃ６３となる。同様に、Ｓ−ｂｏｘ５５の入力が０ｘ０１の場合、出力は０ｘ７ｃとなるので、テーブルインデックスが０ｘｆｅ０１のエントリは０ｘ７ｃ８３８３７ｃとなる。
【００８６】
ＳｈｉｆｔＲｏｗｓ５６はデータの転置であるため、サイドチャネル攻撃に対する対策を施す必要はない。
【００８７】
ＭｉｘＣｏｌｕｍｎｓ５８は、算術右シフト、左シフト、および、排他的論理和によって実現することができる。まず、２倍算の手順を示す。３２ビットの拡張データの最上位ビットを符号ビットとみなし、３１ビット算術右シフトを行う。これに対して、０ｘ１ｂ１ｂ１ｂ１ｂを論理積する（この結果を「データＬ」とする）。次に、拡張データを左シフト演算手段２４により１ビット左シフトしたものと、データＬとを、ＸＯＲ演算手段２２により排他的論理和することで、２倍の演算を実現することができる。一方、３倍算は、２倍算した結果と元のデータとを、ＸＯＲ演算手段２２により排他的論理和することにより実現することができる。最後に、４つのデータの排他的論理和は、ＸＯＲ演算手段２２で実現することができる。
【００８８】
最後に、最終ラウンドのＡｄｄＲｏｕｎｄＫｅｙ５２の１６個の拡張データの下位８ビットを切り出し、連結した１２８ビットデータが暗号文Ｃとなる。
【００８９】
次に、本実施形態に係る暗号処理装置１０をコンピュータおよびコンピュータ上で稼動するプログラムによって実現する場合について説明する。
【００９０】
図６は、図１に示した暗号処理装置１０をコンピュータ上で実現したときの構成を一例として示すブロック図である。図６を参照すると、暗号処理装置６０は、入出力装置６２、ＣＰＵ（Central Processing Unit）６４、ＲＡＭ(Random Access Memory)６６、ＲＯＭ(Read Only Memory)６７がバス６９で接続された構成を有している。
【００９１】
ＲＯＭ６７は、暗号処理を行うプログラム６８を記憶している。プログラム６８が実行される際、ＲＯＭ６７からプログラム６８が読み出されてＲＡＭ６６にロードされる。ＣＰＵ６４は、ＲＡＭ６６からプログラムを読み込み（フェッチし）、解釈、実行することで、暗号処理を実行する。ただし、プログラム６８は、入出力装置６２を介して外部からロードされ、ＲＡＭ６６に展開されるようにしてもよい。暗号化鍵は、ＲＯＭ６７に格納しておいてもよいし、入出力装置６２を介して外部から入力するようにしてもよい。ＲＯＭ６７は、電気的に書き換え消去可能な不揮発性メモリ（ＥＥＰＲＯＭ：Electrically Erasable Programmable Read Only Memory）であってもよい。また、プログラム６８は、ＨＤＤ（Hard Disk Drive)等の不揮発性の補助記憶装置等に記憶してもよい。
【００９２】
なお、上記の特許文献等の先行技術文献の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素（各請求項の各要素、各実施形態の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【００９３】
なお、本発明において、以下に付記として記載する形態が可能である。
［付記１］
上記第１の視点に係る暗号処理装置のとおりである。
［付記２］
前記拡張データ演算手段は、第１の拡張データと第２の拡張データとの排他的論理和を、該第１の拡張データおよび該第２の拡張データのハミングウェイトと該排他的論理和の演算結果のハミングウェイトとが同一となるように、算出するＸＯＲ演算手段を備える、付記１に記載の暗号処理装置。
［付記３］
前記ＸＯＲ演算手段は、第１の拡張データがｍビットの第１のデータと該第１のデータをビット反転した第２のデータをそれぞれ２個ずつ含み、第２の拡張データがｍビットの第３のデータと該第３のデータをビット反転した第４のデータをそれぞれ２個ずつ含む場合、該第１のデータと該第３のデータ、該第１のデータと該第４のデータ、該第２のデータと該第３のデータ、該第２のデータと該第４のデータとの間でそれぞれ排他的論理和を求め、求めた排他的論理和を連結することで、該第１の拡張データと該第２の拡張データとの排他的論理和を算出する、付記２に記載の暗号処理装置。
［付記４］
前記拡張データ演算手段は、前記拡張データのハミングウェイトを一定に保ちつつ前記拡張データを１ビット左シフトする左シフト演算手段を備える、付記１ないし３のいずれか一に記載の暗号処理装置。
［付記５］
前記左シフト演算手段は、拡張データがｍビットの第１のデータと該第１のデータをビット反転した第２のデータをそれぞれ２個ずつ含む場合、該拡張データに含まれる該２個の第１のデータおよび該２個の第２のデータの最上位ビットをそれぞれゼロとするとともに、該２個の第２のデータの最下位ビットの右側に位置するビットをそれぞれ１とした後、該拡張データを１ビット左シフトする、付記４に記載の暗号処理装置。
［付記６］
前記拡張データ演算手段は、前記拡張データのハミングウェイトを一定に保ちつつ前記拡張データを１ビット右シフトする右シフト演算手段を備える、付記１ないし５のいずれか一に記載の暗号処理装置。
［付記７］
前記右シフト演算手段は、拡張データがｍビットの第１のデータと該第１のデータをビット反転した第２のデータをそれぞれ２個ずつ含む場合、該拡張データに含まれる該２個の第１のデータおよび該２個の第２のデータの最上位ビットをそれぞれゼロとした後、該拡張データを１ビット右シフトし、該右シフト前の該拡張データにおいて該２個の第２のデータの最上位ビットに位置するビットをそれぞれ１とする、付記６に記載の暗号処理装置。
［付記８］
前記暗号化処理は、ＡＥＳ（Advanced Encryption Standard）暗号化処理であり、
前記データ拡張手段は、平文の少なくとも一部を構成するｍビットのデータに基づいて第１の拡張データを生成するとともに、ラウンド鍵の少なくとも一部を構成するｍビットのデータに基づいて第２の拡張データを生成し、
前記拡張データ演算手段は、ＡｄｄＲｏｕｎｄＫｅｙにおいて、前記ＸＯＲ演算手段を用いて、前記第１の拡張データと前記第２の拡張データの排他的論理和を算出する、付記７に記載の暗号処理装置。
［付記９］
前記拡張データ演算手段は、ＭｉｘＣｏｌｕｍｎｓにおいて、前記ＸＯＲ演算手段および前記左シフト演算手段を用いる、付記８に記載の暗号処理装置。
［付記１０］
上記第２の視点に係る暗号処理方法のとおりである。
［付記１１］
前暗号化工程は、第１の拡張データと第２の拡張データとの排他的論理和を、該第１の拡張データおよび該第２の拡張データのハミングウェイトと該排他的論理和の演算結果のハミングウェイトとが同一となるように算出するＸＯＲ演算工程を含む、付記１０に記載の暗号処理方法。
［付記１２］
前記ＸＯＲ演算工程において、第１の拡張データがｍビットの第１のデータと該第１のデータをビット反転した第２のデータをそれぞれ２個ずつ含み、第２の拡張データがｍビットの第３のデータと該第３のデータをビット反転した第４のデータをそれぞれ２個ずつ含む場合、該第１のデータと該第３のデータ、該第１のデータと該第４のデータ、該第２のデータと該第３のデータ、該第２のデータと該第４のデータとの間でそれぞれ排他的論理和を求め、求めた排他的論理和を連結することで、該第１の拡張データと該第２の拡張データとの排他的論理和を算出する、付記１１に記載の暗号処理方法。
［付記１３］
上記第３の視点に係るプログラムのとおりである。
［付記１４］
前暗号化処理は、第１の拡張データと第２の拡張データとの排他的論理和を、該第１の拡張データおよび該第２の拡張データのハミングウェイトと該排他的論理和の演算結果のハミングウェイトとが同一となるように算出するＸＯＲ演算処理を含む、付記１３に記載のプログラム。
［付記１５］
前記ＸＯＲ演算処理において、第１の拡張データがｍビットの第１のデータと該第１のデータをビット反転した第２のデータをそれぞれ２個ずつ含み、第２の拡張データがｍビットの第３のデータと該第３のデータをビット反転した第４のデータをそれぞれ２個ずつ含む場合、該第１のデータと該第３のデータ、該第１のデータと該第４のデータ、該第２のデータと該第３のデータ、該第２のデータと該第４のデータとの間でそれぞれ排他的論理和を求め、求めた排他的論理和を連結することで、該第１の拡張データと該第２の拡張データとの排他的論理和を算出する、付記１４に記載のプログラム。
【符号の説明】
【００９４】
１０    暗号処理装置
１２    データ拡張手段
１４    データ攪拌手段
１６    拡張データ演算手段
２２    ＸＯＲ演算手段
２４    左シフト演算手段
２６    右シフト演算手段
３２、５２    ＡｄｄＲｏｕｎｄＫｅｙ
３３、７４、８２、１０２    排他的論理和（ＸＯＲ）
３４、５４    ＳｕｂＢｙｔｅｓ
３５、５５    Ｓ−ｂｏｘ
３６、５６    ＳｈｉｆｔＲｏｗｓ
３８、５８    ＭｉｘＣｏｌｕｍｎｓ
３９    演算手段
６０    暗号処理装置
６２    入出力装置
６４    ＣＰＵ（Central Processing Unit）
６６    ＲＡＭ（Random Access Memory）
６７    ＲＯＭ（Read Only Memory）
６８    プログラム
６９    バス
７２    Ｆ関数
８４    Ｓ関数
１０４    Ｓ’関数
【図１】
2014153552.tif 000003
【図２】
2014153552.tif 000004
【図３】
2014153552.tif 000005
【図４】
2014153552.tif 000006
【図５】
2014153552.tif 000007
【図６】
2014153552.tif 000008
【図７】
2014153552.tif 000009
【図８】
2014153552.tif 000010
【図９】
2014153552.tif 000011
【図１０】
2014153552.tif 000012