(57)【要約】【課題】暗号アルゴリズム等を計算機に実装する際に、条件分岐命令を含む場合に分岐の有無にかかわらず命令を実行するタイミングを同じにすることは困難であった。【解決手段】情報処理装置１は、実行する命令コードをフェッチして出力する命令フェッチ部（命令フェッチ回路２００）と、命令フェッチ部から出力される命令コードをデコードする命令デコード部（命令デコード回路３００）と、を備え、命令デコード部は、前記命令コードが条件分岐命令であることを検出した場合に、分岐条件による分岐の有無にかかわらず後続の命令コードのフェッチタイミングが同じになるように命令フェッチ部へ制御信号を出力する。【選択図】図１
2008146384.tif 000002
【特許請求の範囲】
【請求項１】
実行する命令コードをフェッチして出力する命令フェッチ部と、
前記命令フェッチ部から出力される命令コードをデコードする命令デコード部と、を備え、
前記命令デコード部は、前記命令コードが条件分岐命令であることを検出した場合に、分岐条件による分岐の有無にかかわらず後続の命令コードのフェッチタイミングが同じになるように前記命令フェッチ部へ制御信号を出力する情報処理装置。
【請求項２】
前記命令デコード部は、前記条件分岐命令に基づいて分岐しない場合に、既にフェッチした命令コードを再度フェッチすることを指示する命令再フェッチ信号を生成して前記命令フェッチ部へ出力し、
前記命令フェッチ部は、前記命令再フェッチ信号に基づいて、再度同じ命令コードをフェッチすることを特徴とする請求項１記載の情報処理装置。
【請求項３】
命令コードをアドレスと対応づけて記憶する記憶装置を、さらに備え、
前記命令フェッチ部は、命令コードと対応づけられたアドレスをフェッチ用アドレスとして保持するアドレス保持部を備え、前記フェッチ用アドレスに基づいて前記記憶装置から出力される命令コードをフェッチし、前記命令再フェッチ信号が入力された場合に、前回命令コードをフェッチしたフェッチ用アドレスである前回フェッチアドレスを前記アドレス保持部に再度保持させて同じ命令コードをフェッチすることを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記命令フェッチ部は、前記アドレス保持部が保持する前記フェッチ用アドレスを前回フェッチアドレスとして含む命令コードをフェッチする候補アドレスを複数入力し、前記命令デコード部から前記命令再フェッチ信号が入力された場合に、前記フェッチ用アドレスとして、複数の候補アドレスの中から前記前回フェッチアドレスを選択して前記アドレス保持部へ出力するアドレス選択部を、さらに備え、
前記アドレス保持部は、前記アドレス選択部が選択した前記前回フェッチアドレスを再度保持することを特徴とする請求項３記載の情報処理装置。
【請求項５】
前記アドレス選択部は、前記複数の候補アドレスとして、前記前回フェッチアドレスに加え、前記フェッチ用アドレスの次に実行する命令のアドレスを算出した次命令のアドレス、相対分岐する相対アドレス、及び絶対分岐する絶対アドレスを入力し、前記命令デコード部が出力する制御信号に基づいて、前記複数の候補アドレスから一つのアドレスを選択することを特徴とする請求項４記載の情報処理装置。
【請求項６】
前記命令フェッチ部が前記命令デコード部からの命令再フェッチ信号に基づいて、命令をフェッチするか否かを指定する制御レジスタを、さらに備えることを特徴とする請求項２乃至５のいずれかに記載の情報処理装置。
【請求項７】
前記命令フェッチ部が前記命令デコード部から出力される命令再フェッチ信号に基づいて、命令をフェッチするか否かを指定する指定する制御レジスタを、さらに備え、
前記アドレス選択部は、前記制御レジスタの指示内容に基づいて前記前回フェッチアドレスを選択するか否かを切り替えることを特徴とする請求項４又は５記載の情報処理装置。
【請求項８】
前記命令フェッチ部は、フェッチした複数の命令コードに対応した複数のアドレスを保持し、後続命令のフェッチ用アドレスとして、前記アドレス選択部へ出力する複数アドレス保持回路を、さらに備えることを特徴とする請求項４、５、７のいずれかに記載の情報処理装置。
【請求項９】
前記命令デコード部がデコードした命令コードを実行する命令処理部をさらに備え、
前記命令フェッチ部、前記命令デコード部、並びに前記命令処理部は、複数の命令を並行して実行するパイプライン動作を行い、
前記命令デコード部により、前記命令コードが条件分岐命令であることが検出された場合に、後続命令コードに対して、前記命令フェッチ部によるフェッチタイミング、前記命令デコード部によるデコードタイミング、並びに前記命令処理部による実行タイミングが分岐条件による分岐の有無にかかわらず同となるように前記パイプライン動作を行うこと特徴とする請求項１乃至８のいずれかに記載の情報処理装置。
【請求項１０】
命令フェッチ部と命令デコード部を備えた情報処理装置の命令フェッチ制御方法であって、
前記命令フェッチ部が命令コードをフェッチし、
前記命令デコード部が前記命令コードをデコードし、
前記命令デコード部が条件分岐命令を検出した場合に、分岐の有無にかかわらず、後続命令コードをフェッチするタイミングが同じになるように、前記後続命令コードのフェッチを制御する情報処理装置の命令フェッチ制御方法。
【請求項１１】
前記条件分岐命令に基づいて分岐しない場合に、前記後続命令コードとして、既にフェッチした命令コードを再度フェッチするよう制御する請求項１０記載の命令フェッチ制御方法。
【請求項１２】
複数の命令コードのフェッチ、前記命令コードのデコード、並びに前記命令コードの実行をパイプライン動作により処理する情報処理装置における請求項１０又は１１記載の命令フェッチ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、命令のフェッチに関し、特に暗号などセキュリティを必要とする命令のフェッチに関する。
【背景技術】
【０００２】
今日の高度情報化社会ではクレジットカードのＩＣカード化や電子マネーなど、半導体デバイス内に個人情報やお金に関する情報が格納されており、これらの情報を漏洩や改竄から守るための技術（耐タンパー）が非常に重要になってきている。
【０００３】
現在使用されている暗号は、アルゴリズム自体が公開されており安全性については十分な検討がされているが、それをハードウェアやソフトウェアとして実装したときの安全性については、実装する各社のノウハウであり十分な検討がなされていない。そのため、実装の脆弱性を突いて秘密情報を入手する方法が存在している。実装に対する攻撃として、近年サイドチャネル攻撃が注目されており各種学会でさかんに発表されている。
【０００４】
サイドチャネル攻撃とは本来の通信経路（チャネル）以外の、たとえば処理中の消費電力や電磁波、処理時間などのサイドチャネル情報から内部の秘密情報を得ようとする攻撃である。そのサイドチャネル攻撃の一つとしてタイミングアタックというものがある。これは演算する値によって処理時間が変化することに着目して秘密情報を導き出す方法である。また他の攻撃方法として消費電力の波形から判別するSimple Power Analysis（ＳＰＡ）や消費電力の差を統計的に処理することで演算内容の違いを判別するDifferential Power Analysis（ＤＰＡ）といった電力解析法などがある。
【０００５】
このような手法を用いることで処理時間の差や消費電力の差から秘密情報を導き出すことが可能であり、これらの差をなくす方法が非常に重要になっている。たとえばＲＳＡ暗号で高速化のために中国人剰余定理（ＣＲＴ）を使った場合、
Ｘ＝Ｃ  ｍｏｄ  Ｑ
という演算がある。ここでＣは暗号文を数値化したもの、Ｑは秘密鍵を表す数値（素数）で、１０２４ｂｉｔのＲＳＡ暗号の場合はＣが１０２４ｂｉｔ、Ｑが５１２ｂｉｔという巨大な数値である。
【０００６】
この演算でＣの値がＱより小さい場合は演算自体が不要で、Ｃの値がＱより大きい場合はＣ／Ｑの余りを求める演算が実行される。つまり処理時間が長ければＣ＞Ｑ、処理時間が短ければＣ＜Ｑと分かるため、Ｃを変化させながら何度も演算を実行してみればやがて秘密情報であるＱの値を見つけることができてしまう。
【０００７】
これはＲＳＡ暗号のアルゴリズムそのものの脆弱性ではなく、暗号を実装した際に現れた条件分岐によって処理時間の違いが出来てしまったという、実装方法に脆弱性が存在しているというものである。このように安全といわれている暗号であっても、不適切な実装を行ってしまうと秘密情報が漏洩してしまう可能性がある。
【０００８】
条件分岐がいらないアルゴリズムに出来れば問題を解決できるが、多くの場合それは不可能である。その場合、分岐した場合としない場合で処理時間を等しくすることで脆弱性を無くせる。例えば、単純に時間を揃えるだけの場合のプログラムの一例を示す。
ｉｆ（  Ｃ＞Ｑ  ）｛
Ｃ／Ｑの余りを求める    ←消費電力大
｝  ｅｌｓｅ  ｛
ダミーの時間稼ぎ        ←消費電力小
｝
上記に示したように、こんどは消費電力の差分を解析することで処理時間の差と同等の情報が得られる。
【０００９】
従って、タイミング攻撃に対する対策（耐タンパー）として必要な要件は、次のように考えられる。
（１）分岐をなくす。どうしても分岐が必要な場合は分岐してもしなくても実行時間を等しくする。
（２）分岐した場合でも分岐しない場合でも消費電力を等しくする。
【００１０】
前述の余りを求める処理の場合の一般的な対策例としてはＣ＜Ｑの場合でもダミーでＣ／Ｑの余りを求める演算を加え、次のようにすることで、アルゴリズム上はＣ＜ＱとＣ＞Ｑの演算時間と消費電力をほぼ等しくできると考えられている。
ｉｆ（  Ｃ＞Ｑ  ）｛
Ｃ／Ｑの余りを求める  
｝  ｅｌｓｅ  ｛
Ｃ／Ｑの余りを求めるが、結果は破棄（ダミー演算）
｝
【００１１】
しかしこのアルゴリズムを実際に半導体デバイス等に実装する場合に、Ｃ言語などの高級言語のｉｆ文は一般的にアセンブリ言語の比較命令と分岐命令にコンパイルされることから、分岐命令による実行タイミングのズレや、分岐した場合としない場合で消費電力の差が発生してしまう。つまりタイミング攻撃やＤＰＡに対する耐タンパーは、そのアルゴリズムがソフトウェアやハードウェアとして実装されたときのことを考慮することが重要である。
【００１２】
図９にパイプライン動作に必要な回路構成（情報処理装置）の例を示す。図９に示す情報処理装置９は、プログラムを格納する記憶装置１００と、記憶装置１００に格納したプログラムを実行するＣＰＵ（Central Processing Unit）５００とを備え、ＣＰＵ５００は、命令フェッチ回路２００、命令デコード回路３００、命令処理回路４００とを含む。図中、太い矢印は、アドレス値又は命令コードの流れを示す。
【００１３】
記憶装置１００は、ＣＰＵ５００が実行するプログラム（複数の命令コード）を、各命令コードと各命令コードを格納するアドレスとを対応づけて格納（記憶）し、命令フェッチ回路２００から命令フェッチ用のアドレスを入力し、入力したアドレスに基づいて命令コードを命令フェッチ回路２００へ出力する。また、記憶装置１００は、プログラム格納用であり、特定の記憶装置に限定されない。例えば、書き換えができないＲＯＭ（Read Only Memory）のほか、書き換え可能なフラッシュメモリなどの不揮発性記憶装置でもよく、また、電源投入後にプログラムのロードが必要なＲＡＭでもよい。
【００１４】
命令フェッチ回路２００は、次に実行する命令コードが格納されているアドレス（フェッチ用アドレス）を決定（選択）し、記憶装置１００から決定したフェッチ用アドレスに格納されている命令コードを読み出す。より具体的には、選択したフェッチ用のアドレスを記憶装置１００へ出力し、出力したアドレスに基づいて記憶装置１００から出力される命令コードを入力し、入力した命令コードをレジスタ（命令キュー２２０）へ格納する。以下、本明細書では、命令コードを単に「命令」とも呼び、命令コードのフェッチを単に「命令フェッチ」とも呼ぶ。
命令デコード回路３００は、命令フェッチ回路２００から出力される命令コードをデコードする。
命令処理回路４００は、命令デコード回路３００がデコードした命令を実行する。
以下、分岐命令の有無に基づいて動作を説明する。
【００１５】
分岐命令以外の命令が連続的に実行されている場合、インクリメント回路２０４は、次命令のアドレスを計算する。また、絶対分岐信号２１０、および相対分岐信号２１１はいずれもインアクティブである。このため、アドレス選択回路２０２は、インクリメント回路２０４の出力を選択する。アドレス保持回路２０１は、アドレス選択回路２０２が選択した出力によって保持するアドレス（フェッチ用アドレス）を更新する。このとき、命令選択回路２３０は、記憶装置１００の出力を後続命令として選択して命令キュー２２０に格納する。また、命令デコード回路３００によって分岐命令が検出され、かつ分岐が発生しない場合、絶対分岐信号２１０、相対分岐信号２１１ともインアクティブである。このため分岐命令以外の場合と同様に、アドレス選択回路２０２は、インクリメント回路２０４の出力を選択し、アドレス保持回路２０１が更新される。
【００１６】
次に、命令デコード回路３００によって無条件分岐命令として絶対分岐命令が検出された場合、絶対分岐信号２１０はアクティブになり、絶対分岐することを示す。これにより、アドレス選択回路２０２は、分岐アドレス信号２０６で供給されるアドレス（絶対番地）を選択する。
アドレス保持回路２０１は、アドレス選択回路２０２が選択したアドレスによって保持するアドレスを更新する。また、命令選択回路２３０は、ＮＯＰ命令コード発生回路２３１の出力を選択する。命令キュー２２０は、蓄えていた命令を破棄し、命令選択回路２３０が選択したＮＯＰ命令コード発生回路２３１の出力を保持し、命令デコード回路３００へ出力する。命令デコード回路３００は、命令キュー２２０が保持する命令を入力する。命令選択回路２３０は、絶対分岐信号２１０または相対分岐信号２１１のいずれかがアクティブの場合にＮＯＰ命令コード発生回路２３１の出力を選択する。従って、絶対分岐命令が選択された場合に、絶対分岐命令信号２１０がアクティブになるため、命令列へｎｏｐ命令が挿入される。
【００１７】
次に、命令デコード回路３００によって相対分岐命令が検出され、かつ分岐が発生する場合、相対分岐信号２１１は、アクティブになり、相対分岐することを示す。アドレス加算器２０５は、分岐アドレス信号２０６で供給される値（相対番地）とアドレス保持回路２０１が保持している現在のアドレスを出力する現アドレス信号２０３の値を加算して分岐先のアドレスを算出している。アドレス選択回路２０２は、アドレス加算器２０５が算出したアドレスを選択する。アドレス保持回路２０１は、アドレス選択回路２０２が選択したアドレスによって保持するアドレスを更新する。また、命令選択回路２３０は、ＮＯＰ命令コード発生回路２３１の出力を選択する。命令キュー２２０は、蓄えていた命令を破棄し、命令選択回路２３０が選択したＮＯＰ命令コード発生回路２３１の出力を保持し、命令デコード回路３００へ出力する。命令デコード回路３００は、命令キュー２２０が保持する命令を入力する。このようにして、相対分岐命令が選択された場合に、相対分岐命令信号２１１がアクティブになるため、命令列へＮＯＰ命令が挿入される。
【００１８】
図９のハードウェアで実行されるプログラムのうち、分岐命令（ｉｆ文）を記述した例を図１０に示す。図１０の左側はＣ言語で記述した場合で、図１０の右側はそれをコンパイルして得られるアセンブリ言語ソースを示している。この例では簡略化のため、条件が真の時に実行される命令と、条件が偽の時に実行される命令はそれぞれ１命令にコンパイルされたものとしている。
【００１９】
図１１は、図１０に示すプログラムの命令を実行させたときの動作を示すフローチャートである。図１０の右側のプログラムの命令のコマンドを図１１中の対応する工程に記載している。まず、ｃｍｐは、ＸとＹとを比較する（Ｓ１１）。次にｊｎｅは、ＸとＹを比較して分岐の有無の判断を行う（Ｓ１２）。Ｘ＝Ｙのとき（Ｓ１２で分岐しない）、既に命令フェッチしているＡ命令を実行する（Ｓ１３）。次に、ｊｂｒにより無条件分岐し（Ｓ１４）、分岐したアドレスについて、命令フェッチを行う（Ｓ１５）。一方、Ｘ≠Ｙのとき（Ｓ１２で分岐する）、分岐先のアドレス（ＬＡＢＥＬ１）の命令を取得するため、命令のフェッチを行い（Ｓ１６）、命令Ｂを実行する（Ｓ１７）。次に、条件分岐命令に続くそれぞれの処理が終了した後の次命令を実行する（Ｓ１８）。
【００２０】
図１２は図１０で示すプログラムを図９のハードウェアで実行した場合のパイプライン動作の様子を示した図であり、分岐する場合と分岐しない場合とを、実行する時刻を揃えて並べたものである。図１２の上段に分岐しない場合の動作、図１２の下段に分岐する場合の動作を示している。パイプライン動作の各ステージの意味は、ＩＦは命令フェッチ、ＩＤは命令デコード、ＥＸはデコードした命令の実行、ＭＥＭはメモリアクセス、ＷＢは実行結果のレジスタへの書き込み、をそれぞれ表す。命令フェッチは、命令キュー２２０へ命令コードがフェッチされることを指し、図９の記憶装置１００またはＮＯＰ命令コード発生回路２３１から命令選択回路２３０を介してフェッチされる。
【００２１】
図１２上段に示しているのは条件分岐が発生しなかった場合であり、条件分岐命令ｊｎｅの実行直後に次の命令Ａが実行され、その後絶対分岐命令ｊｂｒによって次命令のアドレスへ分岐し、次命令が実行される。この時のハードウェアの動作タイミングチャートを図１３に示す。図１３の左端の番号（２１０や２０１など）は図９に示した構成要素の番号と対応している。また最下段に示した時刻Ｔは図１２に示した時刻と対応している。
【００２２】
アドレス保持回路２０１の初期値を０ｘ００００番地とすると、時刻Ｔ＝０において、命令キュー２２０にはｃｍｐ命令（比較命令）が取り込まれる。この命令は分岐命令ではないため、アドレス選択回路２０２は、インクリメント回路２０４が現アドレス信号２０３の値をインクリメントした値を選択する。時刻Ｔ＝１において、アドレス保持回路２０１は、アドレス選択回路２０２が選択した値によって更新される。時刻Ｔ＝２までは同様の動作を行う。時刻Ｔ＝３において、命令デコード回路３００によってｊｂｒ命令が検出されると、時刻Ｔ＝４において、絶対分岐信号２１０がアクティブになり、次のように動作する。
【００２３】
命令選択回路２３０は、ＮＯＰ命令コード発生回路２３１の出力（ｎｏｐ命令）を選択する。また、命令キュー２２０は、既にフェッチされて蓄えられていた次命令を破棄し、命令選択回路２３０が選択した出力（ｎｏｐ命令）を保持し、命令デコード回路３００へ供給する。命令デコード回路３００は、命令キュー２３０から供給されたｎｏｐ命令を実行する。このとき、アドレス加算器２０５は、アドレス保持回路２０１から出力された現アドレス信号２０３の値と分岐アドレス信号２０６の値とを加算している。Ｔ＝５において、アドレス保持回路２０１は、アドレス選択回路２０２が選択するアドレス加算器２０５の出力値によって更新される。図１３の例では、時刻Ｔ＝１の条件分岐命令で分岐が発生していないため、直後の時刻Ｔ＝２において、命令Ａがすぐに実行されている。
【００２４】
一方、図１２下段に示しているのは条件分岐が発生する場合であり、条件分岐命令ｊｎｅで分岐が発生するため分岐先命令をフェッチしなおすフェーズが挿入され、その後命令Ｂ、次命令へと実行されていく。この時のハードウェアの動作タイミングチャートを図１４に示す。図１４の見方は図１３と同様である。
【００２５】
図１２下段の例では時刻Ｔ＝１の条件分岐命令で分岐が発生したため、前述のｊｂｒ命令による分岐のときと同様に、Ｔ＝２において、絶対分岐信号がアクティブになり、命令キュー２２０では、既にフェッチされて蓄えられていた命令Ａが破棄されてｎｏｐ命令に変更される。このとき、アドレス加算器２０５は、アドレス保持回路２０１から出力された現アドレス信号２０３の値と分岐アドレス信号２０６の値とを加算している。時刻Ｔ＝３において、アドレス保持回路２０１は、アドレス選択回路２０２が選択するアドレス加算器２０５の出力値によって更新され、分岐先アドレスの命令Ｂがフェッチされる。
【００２６】
また、特許文献１では暗号演算の一部を用いた例が示されている。元々必要な演算は、
もし（鍵に含まれるビットの値が「１」）なら、
モンゴメリ乗算の結果を、本来格納されるべき所へ格納、
となっており鍵に含まれるビットの値が「０」ならば何もしないため、演算の時間差が発生してしまう。
【００２７】
そこで、特許文献１ではその時間差を
もし（鍵に含まれるビットの値が「１」）なら、
モンゴメリ乗算の結果を、本来格納されるべき所へ格納、
そうでなければ、
モンゴメリ乗算の結果を、一時領域へ格納（破棄）、
というダミー演算を追加し、ビットの値が「１」の場合と「０」の場合の時間差を無くそうとしている。さらに、特許文献２には、命令をパイプライン処理する分岐の制御方法に関する技術が公開されている。
【特許文献１】特表２００３―５０２９０５号公報
【特許文献２】特開２００６−１１７２３号公報
【非特許文献１】Paul C. Kocher著、“Timing Attacks on Implementations of Diffe-Hellman, RSA, DSS and Other Systems”、Lecture Notes in Computer Science Volume 1109、ISSN 0302-9743、Springer Berlin/Heidelberg発行、1996年、p.104-113
【発明の開示】
【発明が解決しようとする課題】
【００２８】
しかしながら、従来技術では以下に示すように処理上の問題と回路上の問題を含んでいる。図１２、図１３、図１４からわかるように従来技術では時刻Ｔ＝１の分岐命令で分岐が発生しなかった場合、次命令は時刻Ｔ＝５で実行され、分岐が発生した場合、次命令は時刻Ｔ＝４で実行される。このように次命令が実行されるタイミングは、分岐の有無によってずれており、このタイミング差から動作を解析される可能性があるという処理上の問題を含んでいる。
【００２９】
また、図１２から分かるように、条件分岐命令ｊｎｅの実行以降では、同時刻において実行される命令は分岐した場合と分岐しない場合で異なっているため動作する回路も異なり、このため両者の消費電力が異なるという回路上の問題も含んでいる。
【００３０】
このタイミングのズレや消費電力の差というサイドチャネル情報をつかってサイドチャネル攻撃を行うことで、秘密情報を解読される可能性がある。特許文献２では、パイプライン動作の最適化や高速化を目的としているため、タイミングの差や消費電力の差については考慮されていない。一方、特許文献１ではダミー演算やダミーのメモリ格納を行ってタイミングや消費電力の差をなくそうとしているが、その際に必要とされる条件文（ｉｆ文）がコンパイラによって条件分岐命令に翻訳され、分岐する場合と分岐しない場合による差が発生することまでは考慮されていない。
【００３１】
このように、暗号アルゴリズム等を計算機に実装する際に、条件分岐命令を含む場合に分岐の有無にかかわらず命令を実行するタイミングを同じにすることは困難であった。
【課題を解決するための手段】
【００３２】
本発明に係る情報処理装置の一態様は、実行する命令コードをフェッチして出力する命令フェッチ部と、前記命令フェッチ部から出力される命令コードをデコードする命令デコード部と、を備え、前記命令デコード部は、前記命令コードが条件分岐命令であることを検出した場合に、分岐条件による分岐の有無にかかわらず後続の命令コードのフェッチタイミングが同じになるように前記命令フェッチ部へ制御信号を出力するこのように、実行する命令をフェッチするタイミングが同じになるようにすることにより、条件分岐命令による分岐の有無にかかわらず、命令を実行するタイミングを同じにすることが可能になる。これにより、処理時間を同じにすることにつながる。
【００３３】
また、本発明に係る命令フェッチ制御方法は、命令コードをフェッチし、フェッチした命令コードをデコードし、条件分岐命令を検出した場合に、分岐の有無にかかわらず、命令を実行するタイミングが同じになるように、命令コードをフェッチすることを追加して指示し、前記指示に基づいて、命令コードをフェッチし、追加されてフェッチした命令コードをデコードし、
デコードした命令コードを実行する。このように、命令を実行するタイミングが同じになるように命令フェッチを指示することにより、条件分岐命令による分岐の有無にかかわらず、命令の処理タイミングを同じにすることが可能になる。例えば、命令を実行するタイミングが同じになるように、命令フェッチを実施するタイミングを回路構成上などで増やす場合、命令を実施するタイミングが同じになるように予め無条件で分岐するような命令を挿入したプログラムを実行する場合などが想定される。
【発明の効果】
【００３４】
本発明によれば、暗号アルゴリズム等を計算機に実装する際に、条件分岐命令を含む場合に分岐の有無にかかわらず命令を実行するタイミングを同じにすることが可能となる。
【発明を実施するための最良の形態】
【００３５】
次に、本発明の実施の形態について、図面を参照しながら説明する。各図面において同一の構成または機能を有する構成要素および相当部分には、同一の符号を付し、その説明は省略する。
【００３６】
以下に説明する各実施形態は先に述べた従来技術の問題点である、パイプライン動作における命令実行タイミングの違い、また、それに伴う消費電力の差を解決するものである。パイプライン動作における実行タイミングの差異を解決するために、分岐する場合に発生する命令コードのフェッチしなおす動作を、分岐しない場合にも行わせることで命令の実行タイミングを揃える。つまり命令デコード回路は、分岐命令でもそれ以外の命令でも命令コードを再度フェッチしなおす信号を発生し、アドレス保持回路を更新する際に分岐した値と分岐しない値のどちらで更新するかを選択する構成にする。これにより、命令実行タイミングを同じにする。また、消費電力の差を解決するために、本来動作に必要ない回路であっても、同時刻に動作する回路を等しくするために動作を行わせ、消費電力を等しくする。つまり、アドレス更新のためのすべての回路を動作させてそれらの結果から必要なものだけを選択回路で選択する構成にする。また、以上の技術を併用することで、タイミングおよび消費電力の差の問題を解決する。
【００３７】
（実施形態１）
実施形態１では、条件分岐命令を検出した場合に、次に実行する命令コードをフェッチするタイミングを同じにする、また、消費電力を同じにする情報処理装置の一態様を説明する。具体的には、条件分岐命令の次に実行する命令をフェッチするタイミングを一致させるため、分岐の有無にかかわらず命令をフェッチするように制御し、命令フェッチの候補となるアドレスを毎回計算する場合を説明する。
【００３８】
図１は、本発明にかかる実施形態１の情報処理装置の一例を示すブロック図である。図１において、情報処理装置１は、プログラムを格納する記憶装置１００と、記憶装置１００に格納したプログラムを実行するＣＰＵ（Central Processing Unit）５００とを備え、ＣＰＵ５００は、命令フェッチ回路（命令フェッチ部）２００、命令デコード回路（命令デコード部）３００、並びに命令処理回路（命令処理部）４００を含む。図９に示した従来の回路構成に対して、現在のアドレス保持回路２０１の値をフィードバックするフィードバック信号２１２と、同じ命令コードを再度フェッチすることを指示（要求）する命令再フェッチ信号２０７が追加されている。図９と同じ符号を付した構成要素は同様であるため説明を省略する。
【００３９】
フィードバック信号２１２は、アドレス保持回路（アドレス保持部）２０１が保持している値を再びアドレス保持回路２０１に書き込むための信号である。フィードバック信号２１２は、アドレス選択回路（アドレス選択部）２０２へ入力される。フィードバック信号２１２によってフィードバックされるアドレスは、前回命令コードをフェッチした命令フェッチ用アドレスであることから前回フェッチアドレスともいう。命令再フェッチ信号２０７は、アドレス選択回路２０２と命令選択回路（命令選択部）２３０とへ入力される。アドレス選択回路２０２は、命令再フェッチ信号がアクティブになると、出力としてフィードバック信号２１２のアドレス値を選択する。また、命令選択回路２３０は、命令再フェッチ信号２０７がアクティブになると、出力としてｎｏｐ命令を選択する。
【００４０】
従来であればアドレス保持回路２０１へ現在保持しているアドレスを再度書き込む動作を行わないが、本実施形態では、処理のタイミングを一致させ、消費電力の差を減らすためにこのような構成をとっている。また、アドレスのインクリメント回路２０４およびアドレス加算回路２０５は通常の命令フェッチと分岐の命令フェッチとのいずれの場合でも常に両方ともダミー動作（動作結果は無視）するように構成する。すなわち、インクリメント回路２０４およびアドレス加算回路２０５は、動作する必要があるときのみ（絶対分岐信号２１０または相対分岐信号２１１がアクティブのときのみ）に動作するように構成することができるが、本実施形態では、常に動作するように構成する。従って、アドレス選択回路２０２は、分岐の有無にかかわらず、フィードバック信号２１２からアドレス保持回路２０１に保持されていたアドレス（前回フェッチアドレス）と、インクリメント回路２０４が算出した次に実行する命令の次のアドレス、アドレス加算器２０５が算出した相対分岐する相対アドレス、分岐アドレス信号２０６から絶対分岐する絶対アドレスとを入力することになる。
【００４１】
図２は、本実施形態の分岐命令のプログラムをＣ言語及びアセンブリ言語で記述した例を示す。図２は処理上の問題点を解決するために、プログラムにおける処理時間の差がなくなるように分岐命令を挿入した例を示している。分岐命令の挿入は、パソコンなどのコンピュータ上で動作するプログラム編集用ソフトウェアを用いて人が指定して行うこともできるが、以下の手順をＣ言語などの高級言語をコンパイルするコンパイラをコンピュータに実行させることで自動的に行うことができる。
【００４２】
処理Ａと処理Ｂはそれぞれ実行時間が等しい命令Ａと命令Ｂの１命令に変換される場合、コンパイラがｉｆ〜ｅｌｓｅ文を処理する際には、条件が真の場合に実行される処理Ａから命令Ａを生成し、ｉｆ〜ｅｌｓｅ文の次の文への無条件分岐命令を生成する。次に条件が偽の場合の処理Ｂから命令Ｂを生成するが、このとき従来は命令Ｂの後にはｉｆ〜ｅｌｓｅ文の次の文が来るため分岐する必要はないが、条件が真の場合と偽の場合で分岐の差をなくすために、本実施形態ではあえて処理Ｂから命令Ｂを生成した直後に無条件分岐命令ｊｂｒ  ＬＡＢＥＬ２を挿入し命令フェッチのやりなおしを行わせた後、ｉｆ〜ｅｌｓｅ文の次の文へ分岐させている。
【００４３】
上記で説明したように、分岐命令を挿入することと図１に示す回路を用いることで、分岐による処理時間の差をなくすとともに、消費電力の差をなくすことが可能になる。続いて、本実施形態の情報処理装置の動作を説明する。
【００４４】
図３に図２に示すプログラム（ソフトウェア）の命令を実行させたときの動作を示すフローチャートを示す。図２の右側のプログラムの命令のコマンドを図３中の対応する工程に記載している。まず、ｃｍｐは、ＸとＹとを比較する（Ｓ２１）。次にｊｎｅは、ＸとＹを比較して分岐の有無の判断を行う（Ｓ２２）。Ｘ＝Ｙのとき（Ｓ２２で分岐しない）、既にフェッチした命令（命令Ａ）の再フェッチを実施し（Ｓ２３）、Ａ命令を実行する（Ｓ２４）。次に、ｊｂｒにより、無条件分岐し（Ｓ２５）、分岐したアドレスについて、命令フェッチを行う（Ｓ２６）。一方、Ｘ≠Ｙのとき（Ｓ２２で分岐する）、分岐先のアドレス（ＬＡＢＥＬ１）の命令を取得するため、命令のフェッチを行い（Ｓ２７）、命令Ｂを実行する（Ｓ２８）。ｊｂｒにより、無条件分岐し（Ｓ２９）、分岐したアドレスについて、命令フェッチを行う（Ｓ３０）。条件分岐命令に続くそれぞれの処理が終了した後、後続する次命令を実行する（Ｓ３１）。
【００４５】
このように、図１に示した命令再フェッチ信号２０７並びにフィードバック信号を情報処理装置１へ挿入したことにより、分岐した場合でも分岐しなかった場合でも命令フェッチのやり直しが発生している。また、分岐した場合の命令Ｂ実行後に無条件分岐命令を実行させることにより、ｉｆ文の分岐が発生しなかった場合と等しく命令フェッチのやり直しが発生している。
【００４６】
図４は図２で示すプログラムを図１のハードウェアで実行した場合のパイプライン動作の様子を示した図である、分岐する場合と分岐しない場合とを、実行される時刻を揃えて並べたものである。図４上段に示しているのは条件分岐が発生しなかった場合であり、分岐命令ｊｎｅの実行後に命令フェッチ（ＩＦ）が発生している。この動作は、図１２に示す従来にはなかったものである。具体的には、命令デコード回路３００が分岐命令を検出し、分岐が発生しない場合に命令再フェッチ信号２０７をアクティブにする。命令フェッチ回路２００では、アドレス選択回路２０２は、アドレス保持回路２０１の出力である現アドレス信号２０３へ接続されたフィードバック信号２１２を経由したアドレスを選択する。アドレス保持回路２０１は、アドレス選択回路２０２によって選択したフィードバック信号２１２の値が供給され、再度同じアドレスを保持する。命令Ａは既に命令キュー２２０に取り込まれているが、同じ命令Ａをフェッチしなおしたあと命令Ａが実行される。その後ｊｂｒ命令によって次命令のアドレスへ分岐し、次命令が実行される。
【００４７】
この時のハードウェアの動作タイミングチャートを図５に示す。図５の見方は図１３と同様である。図５は分岐が発生しない例を示しているため、時刻Ｔ＝１において条件分岐命令ｊｎｅが検出されても分岐は発生しない。しかし本実施形態において、命令デコード部３００は、条件分岐命令を検出すると、命令再フェッチ信号２０７をアクティブにする。命令選択回路２３０は、ＮＯＰ命令コード発生回路２３１の出力を選択する。命令キュー２２０は、既にフェッチされて蓄えられていた次命令を破棄し、命令選択回路２３０が選択したｎｏｐ命令を選択し、命令デコード回路３００へ供給する。時刻Ｔ＝２において、ｎｏｐ命令が実行される。従って、アドレス選択回路２０２は、フィードバック信号２１２を経由したアドレスを選択する。アドレス保持回路２０１は、アドレス選択回路２０２が選択したフィードバック信号２１２の値が供給され、再度同じアドレス（前回フェッチアドレス）を保持する。
【００４８】
これにより時刻Ｔ＝３において、命令フェッチ回路２００は、再び命令Ａをフェッチする。すなわち、分岐命令ｊｎｅで分岐しなかった場合、情報処理装置１は、従来は既にフェッチ済の命令Ａを実行するが、本実施形態では、命令キュー２２０は、命令Ａをｎｏｐ命令に置き換えて実行したのち、再度命令Ａのフェッチをやり直す。これにより、分岐命令ｊｎｅで分岐した場合と分岐しない場合のサイクル数を整える。また、命令Ａの次に実行する無条件分岐命令ｊｂｒによって次命令の格納先であるアドレス０ｘ０００６への分岐を行う。このようにして、命令フェッチ回路２００は、命令デコード部３００から指示（命令再フェッチ信号２０７がアクティブになること）に基づいて、分岐しない場合に命令Ｂを命令フェッチするタイミングと同じタイミングで命令Ａを命令フェッチすることになる。
【００４９】
一方、図４下段に示しているのは条件分岐が発生した場合で、分岐命令ｊｎｅで分岐が発生するため分岐先命令（この場合は命令Ｂ）をフェッチしなおすフェーズが挿入され、その後命令Ｂを実行し、手動またはコンパイラで挿入されたｊｂｒ命令によって次命令へ分岐してから次命令が実行される。
【００５０】
この時のハードウェアの動作タイミングチャートを図６に示す。図６の見方も図１３と同様である。図６は分岐が発生した例を示しているため、時刻Ｔ＝１において、条件分岐命令ｊｎｅが検出されると通常の分岐動作を行う。つまり命令デコード部３００は、命令再フェッチ信号２０７をアクティブにしないで、絶対分岐信号２１０をアクティブにする。命令選択回路２３０は、ＮＯＰ命令コード発生回路２３１の出力（ｎｏｐ命令）を選択する。命令キュー２２０は、既にフェッチされて蓄えられていた次命令を破棄し、命令選択回路２３０が選択したｎｏｐ命令を選択し、命令デコード回路３００に供給する。命令デコード部３００は、ｎｏｐ命令を実行する。アドレス選択回路２０２は、分岐アドレス信号２０６とアドレス保持回路２０１から出力された現アドレス信号２０３の値をアドレス加算器２０５で加算した値を選択する。アドレス保持回路２０１は、アドレス選択回路２０２が選択した値（アドレス加算器２０５の出力値）で更新される。これにより時刻Ｔ＝３において、命令Ｂをフェッチする。
【００５１】
また、命令Ｂの後に挿入された無条件分岐命令ｊｂｒによって次命令の格納先であるアドレス０ｘ０００６への分岐を行う。この動作は図５と同様であるため説明を省略する。このようにして、命令デコード回路３００は、条件分岐命令により分岐した場合及び分岐しない場合のそれぞれの処理が終了したときに、後続する同じ命令を実行するタイミングが同じになるように、分岐した場合の処理が終了したときに後続する同じ命令のアドレスへの分岐を指示することになる。また、命令フェッチ回路２００は、命令デコード回路３００からの指示（絶対分岐信号２１１がアクティブになること）に基づいて、無条件分岐することにより、分岐しない場合と同じタイミングで後続する命令を命令フェッチすることになる。
【００５２】
図４のパイプライン動作から分かるように、分岐した場合と分岐しない場合のどちらでも常に同時刻に実行されている命令がほぼ等しくなり（違いは命令Ａと命令Ｂ）、次命令に到達する時刻も等しくなる。また、実行される命令がほぼ等しいため動作する回路も等しくなり、消費電力もほぼ同じになると考えられる。すなわち、違いが出るのは命令Ａと命令Ｂの動作回路の差や処理クロック数であり、分岐する・しないには依存しなくなる。
【００５３】
このように、本実施形態では、上記で説明したように、命令フェッチするタイミングを制御することによって、条件分岐命令の有無にかかわらず、命令をフェッチすることによって命令を実行するタイミングを同じにすることができる。例えば、条件分岐命令に続いて実施するそれぞれの処理における分岐するタイミングに基づいて、命令フェッチすることを指示することによって命令を実行するタイミングを同じにする。また、命令フェッチするアドレスの複数の候補を毎回算出することにより、消費電力が等しくなるようにすることができる。具体的には、アドレス選択回路２０２に関連する回路の演算をすべて動作させ、アドレス選択回路２０２が必要なアドレスの値を選択し、不要な演算結果を破棄する。これにより、動作内容の違いに基づく消費電力の差を抑制することが可能になる。
【００５４】
（実施形態２）
実施形態２では、条件分岐命令を検出した場合に、命令再フェッチ信号２０７をアクティブにする命令再フェッチ機能を有効にする期間と無効にする期間とを制御する情報処理装置の一態様を説明する。具体的には、高セキュリティが必要であるプログラムを実行する場合に、命令再フェッチ信号をアクティブにする制御を実施する場合を説明する。
【００５５】
暗号処理など高セキュリティが絶対条件である処理は、セキュリティ性を高めるために実施形態１で説明した命令の再フェッチの動作を行い、そうでない処理を行う場合は命令の再フェッチを行わない動作をするように切り替える。
【００５６】
図７は、本発明にかかる実施形態２の情報処理装置の一例を示すブロック図である。
図７に示す情報処理装置２は、図１に示した情報処理装置１へスイッチ２１３と制御レジスタ（制御部）４０１を追加している。
【００５７】
スイッチ２１３は、命令再フェッチ信号２０７をアクティブにするか否かを切り替えるスイッチである。制御レジスタ４０１は、スイッチ２１３を切り替える設定値を保持する。制御レジスタ４０１が保持する設定値に基づいてスイッチ２１４はオンとオフを切り替る。制御レジスタに１を書き込むと、スイッチ２１３はオンになり、命令再フェッチ信号２０７は命令デコード回路３００に接続され、命令再フェッチの要求を行う。一方、制御レジスタに０を書き込むと、スイッチ２１３はオフになり、命令再フェッチ信号２０７は命令デコード回路３００から切り離される。この場合、アドレス選択回路２０２への接続線はＧＮＤレベルに固定されて、命令再フェッチ信号２０７が有効（アクティブ状態）にならず、命令再フェッチが行われないため従来の動作と同じになる。制御レジスタ４０１は、ＣＰＵ５００によって制御され、命令処理回路４００によって設定値（１または０）が書き込まれる。
【００５８】
スイッチ２１３により、本当にセキュリティ性を重視するクリティカルな処理（例えば暗号処理部分など）でのみ命令再フェッチ機能を有効にし、それ以外の処理は命令再フェッチ動作をしないよう制御することでパフォーマンスの低下と消費電力の増加を最小限に止めることが可能になる。命令再フェッチ機能を有効にした場合は、実施形態１と同様の動作である。一方、命令再フェッチ機能を無効にした場合、次のような動作を行う。
【００５９】
命令デコード回路３００によって絶対分岐命令が検出された場合、かつ分岐が発生する場合、分岐することを示す絶対分岐信号２１０がアクティブになり、アドレス保持回路２０１は分岐アドレス信号２０６で供給されるアドレス（絶対番地）に更新される。インクリメント回路２０４は、分岐条件が成立して絶対分岐信号２１０、相対分岐信号２１１、または命令再フェッチ信号２０７のいずれか一つがアクティブになった場合はインクリメント動作を停止する。また、命令デコード回路３００によって相対分岐命令が検出され、かつ分岐が発生する場合、分岐することを示す相対分岐信号２１１がアクティブになり、アドレス保持回路２０１は分岐アドレス信号２０６の値（相対番地）とアドレス保持回路２０１が保持している現アドレス信号２０３の値をアドレス加算器２０５で加算し分岐先のアドレスに更新される。このときアドレス加算器２０５は相対分岐信号２１１がアクティブになった場合は動作し、それ以外では消費電力低減のために動作停止する。
【００６０】
このように、実行するプログラムに基づいて制御レジスタ４０１の値を設定することによって、命令再フェッチ機能の有効・無効を切り替えることができる。これにより、セキュリティを重視する場合と、セキュリティ以外のその他の要素（例えば、パフォーマンスの向上、消費電力の抑制など）を重視する場合とを切り替えて、プログラムの目的に沿った実行形態を実現することが可能になる。
【００６１】
（実施形態３）
実施形態３では、一度に複数命令を取り込めるように命令キューを複数もつＣＰＵを想定した情報処理装置の一態様を説明する。例えば命令は１６ｂｉｔ長固定で、３２ｂｉｔバスのＣＰＵなら２命令同時に取り込みできる。命令キューが複数ある場合、現在実行しようとしている命令が格納されていたアドレスと、現在フェッチしようとしているアドレスはずれている。このため、図１の情報処理装置１のように、アドレス保持回路２０１に保持するアドレスをフィードバック信号２１２によってフィードバックする動作では正しく命令再フェッチを行うことができない。そこで、命令を命令キュー２２０に格納する際に、これとセットでアドレスもキューに格納しておけば再フェッチが発生したときにその情報を利用することで正しい再フェッチが可能になる。
【００６２】
図８は、本発明にかかる実施形態３の情報処理装置の一例を示すブロック図である。図８に示す情報処理装置３は、図１に示す情報処理装置１へ、命令キュー２２１、アドレス・キュー２２３、２２４およびアドレス・キューの選択回路２２２が追加されている。実施形態１との動作の違いを以下に示す。
【００６３】
アドレスをフィードバックする信号２１２は、実施形態１のようにアドレス保持回路２０１が保持している値をフィードバックするのではなく、アドレス・キューが保持しているアドレスを供給する。命令デコード回路３００が分岐命令をデコードしたとき、再フェッチ要求信号２０７をアクティブにすると共に、アドレス・キューから信号２１２へアドレスを供給して再フェッチを実行する。これにより命令キューを複数持った場合に、アドレス保持回路が保持するアドレス値と再フェッチを行いたいアドレスがずれている場合でも正しく命令フェッチをやり直すことができる。
【００６４】
図８に示す情報処理装置１の例では命令キューとアドレス・キューがそれぞれ２組ずつ用意されており、キュー制御回路２４１によって制御を行っている。キュー制御回路２４１はキューを交互に使用する。たとえば命令キュー２２０とアドレス・キュー２２３に既に命令とアドレスが格納されていれば、記憶装置から来た命令とアドレスは命令キュー２２１とアドレス・キュー２２４に格納する。命令キュー２２０とアドレス・キュー２２３の命令が読み出されて空になったら、命令キュー２２０とアドレス２２３にそれぞれ命令とアドレスを格納する。すなわち命令とアドレスがセットで格納される。
【００６５】
以上のように、本発明に係る好適な実施形態によれば、条件分岐命令により分岐した場合と分岐しない場合において、処理時間を等しくすることによって、命令を実行する処理タイミングを等しくすることができる。上記に加え、動作する回路を等しくすることによって、消費電力を等しくすることができる。具体的には、条件分岐命令を検出した場合に、分岐の有無にかかわらず、命令を実行するタイミングが同じになるように、命令フェッチを行うように制御する。また、分岐する場合としない場合でそれぞれ動作する回路が異なる場合でも、関連する回路をすべて動作させ、必要な演算結果を選択し、不要な演算結果は、ダミー動作（動作の結果を破棄する）とすることによって、消費電力を等しくすることが可能になる。これにより、分岐に伴って発生する命令実行タイミングのズレや消費電力の差というサイドチャネル情報をなくすことになる。従って、暗号アルゴリズム等を計算機に実装した際に、分岐命令を分岐の有無にかかわらず、処理時間を等しく（タイミング攻撃対策）すること、並びに、消費電力を等しく（ＳＰＡ／ＤＰＡ対策）することを可能にし、サイドチャネル攻撃を回避し、デバイス内部の秘密情報を守ることが出来る。
【００６６】
なお、半導体装置であるマイクロコンピュータは、内部のＣＰＵとして上記各実施形態で説明したＣＰＵを内蔵することができる。また、上記各実施形態で説明した記憶装置とＣＰＵとを１チップのマイクロコンピュータに内蔵させてもよく、さらに、記憶装置のチップとＣＰＵチップを一つの半導体パッケージ内部で接続して構成した半導体装置としてもよい。
【図面の簡単な説明】
【００６７】
【図１】本発明にかかる実施形態１の情報処理装置の一例を示すブロック図である。
【図２】本実施形態の分岐命令のプログラムをＣ言語及びアセンブリ言語で記述した例を示す図である。
【図３】図２に示すプログラムの命令を実行させたときの動作を示すフローチャートである。
【図４】図２で示すプログラムを図１のハードウェアで実行した場合のパイプライン動作の様子を示した図である。
【図５】図２のプログラム（条件分岐命令で分岐しなかった場合）を図１のハードウェアで動作させたときのタイミングチャートである。
【図６】図２のプログラム（条件分岐命令で分岐した場合）を図１のハードウェアで動作させたときのタイミングチャートである。
【図７】本発明にかかる実施形態２の情報処理装置の一例を示すブロック図である。
【図８】本発明にかかる実施形態３の情報処理装置の一例を示すブロック図である。
【図９】従来の情報処理装置の一例を示す図である。
【図１０】分岐命令のプログラムをＣ言語及びアセンブリ言語で記述した例を示す図である。
【図１１】図１０に示すプログラムの命令を実行させたときの動作を示すフローチャートである。
【図１２】図１０で示すプログラムを図９のハードウェアで実行した場合のパイプラインの動作の様子を示す図である。
【図１３】図１０のプログラム（条件分岐命令で分岐しなかった場合）を図９のハードウェアで動作させたときのタイミングチャートである。
【図１４】図１０のプログラム（条件分岐命令で分岐した場合）を図９のハードウェアで動作させたときのタイミングチャートである。
【符号の説明】
【００６８】
１、２、３  情報処理装置
１００  記憶装置
２００  命令フェッチ回路
２０１  アドレス保持回路
２０２  アドレス選択回路
２０３  現アドレス信号
２０４  インクリメント回路
２０５  アドレス加算器
２０６  分岐アドレス信号
２０７  命令再フェッチ信号
２１０  絶対分岐信号
２１１  相対分岐信号
２１２  フィードバック信号
２１３  スイッチ
２２０  命令キュー
２２１  命令キュー
２２２  アドレス・キューの選択回路
２２３、２２４  アドレス・キュー
２３０  命令選択回路
２３１  ＮＯＰ命令コード発生回路
２４１  キュー制御回路
３００  命令デコード回路
４００  命令処理回路
４０１  制御レジスタ
５００  ＣＰＵ
【図１】
2008146384.tif 000003
【図２】
2008146384.tif 000004
【図３】
2008146384.tif 000005
【図４】
2008146384.tif 000006
【図５】
2008146384.tif 000007
【図６】
2008146384.tif 000008
【図７】
2008146384.tif 000009
【図８】
2008146384.tif 000010
【図９】
2008146384.tif 000011
【図１０】
2008146384.tif 000012
【図１１】
2008146384.tif 000013
【図１２】
2008146384.tif 000014
【図１３】
2008146384.tif 000015
【図１４】
2008146384.tif 000016