説明

情報処理装置及び命令フェッチ制御方法

【課題】暗号アルゴリズム等を計算機に実装する際に、条件分岐命令を含む場合に分岐の有無にかかわらず命令を実行するタイミングを同じにすることは困難であった。
【解決手段】情報処理装置1は、実行する命令コードをフェッチして出力する命令フェッチ部(命令フェッチ回路200)と、命令フェッチ部から出力される命令コードをデコードする命令デコード部(命令デコード回路300)と、を備え、命令デコード部は、前記命令コードが条件分岐命令であることを検出した場合に、分岐条件による分岐の有無にかかわらず後続の命令コードのフェッチタイミングが同じになるように命令フェッチ部へ制御信号を出力する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、命令のフェッチに関し、特に暗号などセキュリティを必要とする命令のフェッチに関する。
【背景技術】
【0002】
今日の高度情報化社会ではクレジットカードのICカード化や電子マネーなど、半導体デバイス内に個人情報やお金に関する情報が格納されており、これらの情報を漏洩や改竄から守るための技術(耐タンパー)が非常に重要になってきている。
【0003】
現在使用されている暗号は、アルゴリズム自体が公開されており安全性については十分な検討がされているが、それをハードウェアやソフトウェアとして実装したときの安全性については、実装する各社のノウハウであり十分な検討がなされていない。そのため、実装の脆弱性を突いて秘密情報を入手する方法が存在している。実装に対する攻撃として、近年サイドチャネル攻撃が注目されており各種学会でさかんに発表されている。
【0004】
サイドチャネル攻撃とは本来の通信経路(チャネル)以外の、たとえば処理中の消費電力や電磁波、処理時間などのサイドチャネル情報から内部の秘密情報を得ようとする攻撃である。そのサイドチャネル攻撃の一つとしてタイミングアタックというものがある。これは演算する値によって処理時間が変化することに着目して秘密情報を導き出す方法である。また他の攻撃方法として消費電力の波形から判別するSimple Power Analysis(SPA)や消費電力の差を統計的に処理することで演算内容の違いを判別するDifferential Power Analysis(DPA)といった電力解析法などがある。
【0005】
このような手法を用いることで処理時間の差や消費電力の差から秘密情報を導き出すことが可能であり、これらの差をなくす方法が非常に重要になっている。たとえばRSA暗号で高速化のために中国人剰余定理(CRT)を使った場合、
X=C mod Q
という演算がある。ここでCは暗号文を数値化したもの、Qは秘密鍵を表す数値(素数)で、1024bitのRSA暗号の場合はCが1024bit、Qが512bitという巨大な数値である。
【0006】
この演算でCの値がQより小さい場合は演算自体が不要で、Cの値がQより大きい場合はC/Qの余りを求める演算が実行される。つまり処理時間が長ければC>Q、処理時間が短ければC<Qと分かるため、Cを変化させながら何度も演算を実行してみればやがて秘密情報であるQの値を見つけることができてしまう。
【0007】
これはRSA暗号のアルゴリズムそのものの脆弱性ではなく、暗号を実装した際に現れた条件分岐によって処理時間の違いが出来てしまったという、実装方法に脆弱性が存在しているというものである。このように安全といわれている暗号であっても、不適切な実装を行ってしまうと秘密情報が漏洩してしまう可能性がある。
【0008】
条件分岐がいらないアルゴリズムに出来れば問題を解決できるが、多くの場合それは不可能である。その場合、分岐した場合としない場合で処理時間を等しくすることで脆弱性を無くせる。例えば、単純に時間を揃えるだけの場合のプログラムの一例を示す。
if( C>Q ){
C/Qの余りを求める ←消費電力大
} else {
ダミーの時間稼ぎ ←消費電力小

上記に示したように、こんどは消費電力の差分を解析することで処理時間の差と同等の情報が得られる。
【0009】
従って、タイミング攻撃に対する対策(耐タンパー)として必要な要件は、次のように考えられる。
(1)分岐をなくす。どうしても分岐が必要な場合は分岐してもしなくても実行時間を等しくする。
(2)分岐した場合でも分岐しない場合でも消費電力を等しくする。
【0010】
前述の余りを求める処理の場合の一般的な対策例としてはC<Qの場合でもダミーでC/Qの余りを求める演算を加え、次のようにすることで、アルゴリズム上はC<QとC>Qの演算時間と消費電力をほぼ等しくできると考えられている。
if( C>Q ){
C/Qの余りを求める
} else {
C/Qの余りを求めるが、結果は破棄(ダミー演算)

【0011】
しかしこのアルゴリズムを実際に半導体デバイス等に実装する場合に、C言語などの高級言語のif文は一般的にアセンブリ言語の比較命令と分岐命令にコンパイルされることから、分岐命令による実行タイミングのズレや、分岐した場合としない場合で消費電力の差が発生してしまう。つまりタイミング攻撃やDPAに対する耐タンパーは、そのアルゴリズムがソフトウェアやハードウェアとして実装されたときのことを考慮することが重要である。
【0012】
図9にパイプライン動作に必要な回路構成(情報処理装置)の例を示す。図9に示す情報処理装置9は、プログラムを格納する記憶装置100と、記憶装置100に格納したプログラムを実行するCPU(Central Processing Unit)500とを備え、CPU500は、命令フェッチ回路200、命令デコード回路300、命令処理回路400とを含む。図中、太い矢印は、アドレス値又は命令コードの流れを示す。
【0013】
記憶装置100は、CPU500が実行するプログラム(複数の命令コード)を、各命令コードと各命令コードを格納するアドレスとを対応づけて格納(記憶)し、命令フェッチ回路200から命令フェッチ用のアドレスを入力し、入力したアドレスに基づいて命令コードを命令フェッチ回路200へ出力する。また、記憶装置100は、プログラム格納用であり、特定の記憶装置に限定されない。例えば、書き換えができないROM(Read Only Memory)のほか、書き換え可能なフラッシュメモリなどの不揮発性記憶装置でもよく、また、電源投入後にプログラムのロードが必要なRAMでもよい。
【0014】
命令フェッチ回路200は、次に実行する命令コードが格納されているアドレス(フェッチ用アドレス)を決定(選択)し、記憶装置100から決定したフェッチ用アドレスに格納されている命令コードを読み出す。より具体的には、選択したフェッチ用のアドレスを記憶装置100へ出力し、出力したアドレスに基づいて記憶装置100から出力される命令コードを入力し、入力した命令コードをレジスタ(命令キュー220)へ格納する。以下、本明細書では、命令コードを単に「命令」とも呼び、命令コードのフェッチを単に「命令フェッチ」とも呼ぶ。
命令デコード回路300は、命令フェッチ回路200から出力される命令コードをデコードする。
命令処理回路400は、命令デコード回路300がデコードした命令を実行する。
以下、分岐命令の有無に基づいて動作を説明する。
【0015】
分岐命令以外の命令が連続的に実行されている場合、インクリメント回路204は、次命令のアドレスを計算する。また、絶対分岐信号210、および相対分岐信号211はいずれもインアクティブである。このため、アドレス選択回路202は、インクリメント回路204の出力を選択する。アドレス保持回路201は、アドレス選択回路202が選択した出力によって保持するアドレス(フェッチ用アドレス)を更新する。このとき、命令選択回路230は、記憶装置100の出力を後続命令として選択して命令キュー220に格納する。また、命令デコード回路300によって分岐命令が検出され、かつ分岐が発生しない場合、絶対分岐信号210、相対分岐信号211ともインアクティブである。このため分岐命令以外の場合と同様に、アドレス選択回路202は、インクリメント回路204の出力を選択し、アドレス保持回路201が更新される。
【0016】
次に、命令デコード回路300によって無条件分岐命令として絶対分岐命令が検出された場合、絶対分岐信号210はアクティブになり、絶対分岐することを示す。これにより、アドレス選択回路202は、分岐アドレス信号206で供給されるアドレス(絶対番地)を選択する。
アドレス保持回路201は、アドレス選択回路202が選択したアドレスによって保持するアドレスを更新する。また、命令選択回路230は、NOP命令コード発生回路231の出力を選択する。命令キュー220は、蓄えていた命令を破棄し、命令選択回路230が選択したNOP命令コード発生回路231の出力を保持し、命令デコード回路300へ出力する。命令デコード回路300は、命令キュー220が保持する命令を入力する。命令選択回路230は、絶対分岐信号210または相対分岐信号211のいずれかがアクティブの場合にNOP命令コード発生回路231の出力を選択する。従って、絶対分岐命令が選択された場合に、絶対分岐命令信号210がアクティブになるため、命令列へnop命令が挿入される。
【0017】
次に、命令デコード回路300によって相対分岐命令が検出され、かつ分岐が発生する場合、相対分岐信号211は、アクティブになり、相対分岐することを示す。アドレス加算器205は、分岐アドレス信号206で供給される値(相対番地)とアドレス保持回路201が保持している現在のアドレスを出力する現アドレス信号203の値を加算して分岐先のアドレスを算出している。アドレス選択回路202は、アドレス加算器205が算出したアドレスを選択する。アドレス保持回路201は、アドレス選択回路202が選択したアドレスによって保持するアドレスを更新する。また、命令選択回路230は、NOP命令コード発生回路231の出力を選択する。命令キュー220は、蓄えていた命令を破棄し、命令選択回路230が選択したNOP命令コード発生回路231の出力を保持し、命令デコード回路300へ出力する。命令デコード回路300は、命令キュー220が保持する命令を入力する。このようにして、相対分岐命令が選択された場合に、相対分岐命令信号211がアクティブになるため、命令列へNOP命令が挿入される。
【0018】
図9のハードウェアで実行されるプログラムのうち、分岐命令(if文)を記述した例を図10に示す。図10の左側はC言語で記述した場合で、図10の右側はそれをコンパイルして得られるアセンブリ言語ソースを示している。この例では簡略化のため、条件が真の時に実行される命令と、条件が偽の時に実行される命令はそれぞれ1命令にコンパイルされたものとしている。
【0019】
図11は、図10に示すプログラムの命令を実行させたときの動作を示すフローチャートである。図10の右側のプログラムの命令のコマンドを図11中の対応する工程に記載している。まず、cmpは、XとYとを比較する(S11)。次にjneは、XとYを比較して分岐の有無の判断を行う(S12)。X=Yのとき(S12で分岐しない)、既に命令フェッチしているA命令を実行する(S13)。次に、jbrにより無条件分岐し(S14)、分岐したアドレスについて、命令フェッチを行う(S15)。一方、X≠Yのとき(S12で分岐する)、分岐先のアドレス(LABEL1)の命令を取得するため、命令のフェッチを行い(S16)、命令Bを実行する(S17)。次に、条件分岐命令に続くそれぞれの処理が終了した後の次命令を実行する(S18)。
【0020】
図12は図10で示すプログラムを図9のハードウェアで実行した場合のパイプライン動作の様子を示した図であり、分岐する場合と分岐しない場合とを、実行する時刻を揃えて並べたものである。図12の上段に分岐しない場合の動作、図12の下段に分岐する場合の動作を示している。パイプライン動作の各ステージの意味は、IFは命令フェッチ、IDは命令デコード、EXはデコードした命令の実行、MEMはメモリアクセス、WBは実行結果のレジスタへの書き込み、をそれぞれ表す。命令フェッチは、命令キュー220へ命令コードがフェッチされることを指し、図9の記憶装置100またはNOP命令コード発生回路231から命令選択回路230を介してフェッチされる。
【0021】
図12上段に示しているのは条件分岐が発生しなかった場合であり、条件分岐命令jneの実行直後に次の命令Aが実行され、その後絶対分岐命令jbrによって次命令のアドレスへ分岐し、次命令が実行される。この時のハードウェアの動作タイミングチャートを図13に示す。図13の左端の番号(210や201など)は図9に示した構成要素の番号と対応している。また最下段に示した時刻Tは図12に示した時刻と対応している。
【0022】
アドレス保持回路201の初期値を0x0000番地とすると、時刻T=0において、命令キュー220にはcmp命令(比較命令)が取り込まれる。この命令は分岐命令ではないため、アドレス選択回路202は、インクリメント回路204が現アドレス信号203の値をインクリメントした値を選択する。時刻T=1において、アドレス保持回路201は、アドレス選択回路202が選択した値によって更新される。時刻T=2までは同様の動作を行う。時刻T=3において、命令デコード回路300によってjbr命令が検出されると、時刻T=4において、絶対分岐信号210がアクティブになり、次のように動作する。
【0023】
命令選択回路230は、NOP命令コード発生回路231の出力(nop命令)を選択する。また、命令キュー220は、既にフェッチされて蓄えられていた次命令を破棄し、命令選択回路230が選択した出力(nop命令)を保持し、命令デコード回路300へ供給する。命令デコード回路300は、命令キュー230から供給されたnop命令を実行する。このとき、アドレス加算器205は、アドレス保持回路201から出力された現アドレス信号203の値と分岐アドレス信号206の値とを加算している。T=5において、アドレス保持回路201は、アドレス選択回路202が選択するアドレス加算器205の出力値によって更新される。図13の例では、時刻T=1の条件分岐命令で分岐が発生していないため、直後の時刻T=2において、命令Aがすぐに実行されている。
【0024】
一方、図12下段に示しているのは条件分岐が発生する場合であり、条件分岐命令jneで分岐が発生するため分岐先命令をフェッチしなおすフェーズが挿入され、その後命令B、次命令へと実行されていく。この時のハードウェアの動作タイミングチャートを図14に示す。図14の見方は図13と同様である。
【0025】
図12下段の例では時刻T=1の条件分岐命令で分岐が発生したため、前述のjbr命令による分岐のときと同様に、T=2において、絶対分岐信号がアクティブになり、命令キュー220では、既にフェッチされて蓄えられていた命令Aが破棄されてnop命令に変更される。このとき、アドレス加算器205は、アドレス保持回路201から出力された現アドレス信号203の値と分岐アドレス信号206の値とを加算している。時刻T=3において、アドレス保持回路201は、アドレス選択回路202が選択するアドレス加算器205の出力値によって更新され、分岐先アドレスの命令Bがフェッチされる。
【0026】
また、特許文献1では暗号演算の一部を用いた例が示されている。元々必要な演算は、
もし(鍵に含まれるビットの値が「1」)なら、
モンゴメリ乗算の結果を、本来格納されるべき所へ格納、
となっており鍵に含まれるビットの値が「0」ならば何もしないため、演算の時間差が発生してしまう。
【0027】
そこで、特許文献1ではその時間差を
もし(鍵に含まれるビットの値が「1」)なら、
モンゴメリ乗算の結果を、本来格納されるべき所へ格納、
そうでなければ、
モンゴメリ乗算の結果を、一時領域へ格納(破棄)、
というダミー演算を追加し、ビットの値が「1」の場合と「0」の場合の時間差を無くそうとしている。さらに、特許文献2には、命令をパイプライン処理する分岐の制御方法に関する技術が公開されている。
【特許文献1】特表2003―502905号公報
【特許文献2】特開2006−11723号公報
【非特許文献1】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
【発明の開示】
【発明が解決しようとする課題】
【0028】
しかしながら、従来技術では以下に示すように処理上の問題と回路上の問題を含んでいる。図12、図13、図14からわかるように従来技術では時刻T=1の分岐命令で分岐が発生しなかった場合、次命令は時刻T=5で実行され、分岐が発生した場合、次命令は時刻T=4で実行される。このように次命令が実行されるタイミングは、分岐の有無によってずれており、このタイミング差から動作を解析される可能性があるという処理上の問題を含んでいる。
【0029】
また、図12から分かるように、条件分岐命令jneの実行以降では、同時刻において実行される命令は分岐した場合と分岐しない場合で異なっているため動作する回路も異なり、このため両者の消費電力が異なるという回路上の問題も含んでいる。
【0030】
このタイミングのズレや消費電力の差というサイドチャネル情報をつかってサイドチャネル攻撃を行うことで、秘密情報を解読される可能性がある。特許文献2では、パイプライン動作の最適化や高速化を目的としているため、タイミングの差や消費電力の差については考慮されていない。一方、特許文献1ではダミー演算やダミーのメモリ格納を行ってタイミングや消費電力の差をなくそうとしているが、その際に必要とされる条件文(if文)がコンパイラによって条件分岐命令に翻訳され、分岐する場合と分岐しない場合による差が発生することまでは考慮されていない。
【0031】
このように、暗号アルゴリズム等を計算機に実装する際に、条件分岐命令を含む場合に分岐の有無にかかわらず命令を実行するタイミングを同じにすることは困難であった。
【課題を解決するための手段】
【0032】
本発明に係る情報処理装置の一態様は、実行する命令コードをフェッチして出力する命令フェッチ部と、前記命令フェッチ部から出力される命令コードをデコードする命令デコード部と、を備え、前記命令デコード部は、前記命令コードが条件分岐命令であることを検出した場合に、分岐条件による分岐の有無にかかわらず後続の命令コードのフェッチタイミングが同じになるように前記命令フェッチ部へ制御信号を出力するこのように、実行する命令をフェッチするタイミングが同じになるようにすることにより、条件分岐命令による分岐の有無にかかわらず、命令を実行するタイミングを同じにすることが可能になる。これにより、処理時間を同じにすることにつながる。
【0033】
また、本発明に係る命令フェッチ制御方法は、命令コードをフェッチし、フェッチした命令コードをデコードし、条件分岐命令を検出した場合に、分岐の有無にかかわらず、命令を実行するタイミングが同じになるように、命令コードをフェッチすることを追加して指示し、前記指示に基づいて、命令コードをフェッチし、追加されてフェッチした命令コードをデコードし、
デコードした命令コードを実行する。このように、命令を実行するタイミングが同じになるように命令フェッチを指示することにより、条件分岐命令による分岐の有無にかかわらず、命令の処理タイミングを同じにすることが可能になる。例えば、命令を実行するタイミングが同じになるように、命令フェッチを実施するタイミングを回路構成上などで増やす場合、命令を実施するタイミングが同じになるように予め無条件で分岐するような命令を挿入したプログラムを実行する場合などが想定される。
【発明の効果】
【0034】
本発明によれば、暗号アルゴリズム等を計算機に実装する際に、条件分岐命令を含む場合に分岐の有無にかかわらず命令を実行するタイミングを同じにすることが可能となる。
【発明を実施するための最良の形態】
【0035】
次に、本発明の実施の形態について、図面を参照しながら説明する。各図面において同一の構成または機能を有する構成要素および相当部分には、同一の符号を付し、その説明は省略する。
【0036】
以下に説明する各実施形態は先に述べた従来技術の問題点である、パイプライン動作における命令実行タイミングの違い、また、それに伴う消費電力の差を解決するものである。パイプライン動作における実行タイミングの差異を解決するために、分岐する場合に発生する命令コードのフェッチしなおす動作を、分岐しない場合にも行わせることで命令の実行タイミングを揃える。つまり命令デコード回路は、分岐命令でもそれ以外の命令でも命令コードを再度フェッチしなおす信号を発生し、アドレス保持回路を更新する際に分岐した値と分岐しない値のどちらで更新するかを選択する構成にする。これにより、命令実行タイミングを同じにする。また、消費電力の差を解決するために、本来動作に必要ない回路であっても、同時刻に動作する回路を等しくするために動作を行わせ、消費電力を等しくする。つまり、アドレス更新のためのすべての回路を動作させてそれらの結果から必要なものだけを選択回路で選択する構成にする。また、以上の技術を併用することで、タイミングおよび消費電力の差の問題を解決する。
【0037】
(実施形態1)
実施形態1では、条件分岐命令を検出した場合に、次に実行する命令コードをフェッチするタイミングを同じにする、また、消費電力を同じにする情報処理装置の一態様を説明する。具体的には、条件分岐命令の次に実行する命令をフェッチするタイミングを一致させるため、分岐の有無にかかわらず命令をフェッチするように制御し、命令フェッチの候補となるアドレスを毎回計算する場合を説明する。
【0038】
図1は、本発明にかかる実施形態1の情報処理装置の一例を示すブロック図である。図1において、情報処理装置1は、プログラムを格納する記憶装置100と、記憶装置100に格納したプログラムを実行するCPU(Central Processing Unit)500とを備え、CPU500は、命令フェッチ回路(命令フェッチ部)200、命令デコード回路(命令デコード部)300、並びに命令処理回路(命令処理部)400を含む。図9に示した従来の回路構成に対して、現在のアドレス保持回路201の値をフィードバックするフィードバック信号212と、同じ命令コードを再度フェッチすることを指示(要求)する命令再フェッチ信号207が追加されている。図9と同じ符号を付した構成要素は同様であるため説明を省略する。
【0039】
フィードバック信号212は、アドレス保持回路(アドレス保持部)201が保持している値を再びアドレス保持回路201に書き込むための信号である。フィードバック信号212は、アドレス選択回路(アドレス選択部)202へ入力される。フィードバック信号212によってフィードバックされるアドレスは、前回命令コードをフェッチした命令フェッチ用アドレスであることから前回フェッチアドレスともいう。命令再フェッチ信号207は、アドレス選択回路202と命令選択回路(命令選択部)230とへ入力される。アドレス選択回路202は、命令再フェッチ信号がアクティブになると、出力としてフィードバック信号212のアドレス値を選択する。また、命令選択回路230は、命令再フェッチ信号207がアクティブになると、出力としてnop命令を選択する。
【0040】
従来であればアドレス保持回路201へ現在保持しているアドレスを再度書き込む動作を行わないが、本実施形態では、処理のタイミングを一致させ、消費電力の差を減らすためにこのような構成をとっている。また、アドレスのインクリメント回路204およびアドレス加算回路205は通常の命令フェッチと分岐の命令フェッチとのいずれの場合でも常に両方ともダミー動作(動作結果は無視)するように構成する。すなわち、インクリメント回路204およびアドレス加算回路205は、動作する必要があるときのみ(絶対分岐信号210または相対分岐信号211がアクティブのときのみ)に動作するように構成することができるが、本実施形態では、常に動作するように構成する。従って、アドレス選択回路202は、分岐の有無にかかわらず、フィードバック信号212からアドレス保持回路201に保持されていたアドレス(前回フェッチアドレス)と、インクリメント回路204が算出した次に実行する命令の次のアドレス、アドレス加算器205が算出した相対分岐する相対アドレス、分岐アドレス信号206から絶対分岐する絶対アドレスとを入力することになる。
【0041】
図2は、本実施形態の分岐命令のプログラムをC言語及びアセンブリ言語で記述した例を示す。図2は処理上の問題点を解決するために、プログラムにおける処理時間の差がなくなるように分岐命令を挿入した例を示している。分岐命令の挿入は、パソコンなどのコンピュータ上で動作するプログラム編集用ソフトウェアを用いて人が指定して行うこともできるが、以下の手順をC言語などの高級言語をコンパイルするコンパイラをコンピュータに実行させることで自動的に行うことができる。
【0042】
処理Aと処理Bはそれぞれ実行時間が等しい命令Aと命令Bの1命令に変換される場合、コンパイラがif〜else文を処理する際には、条件が真の場合に実行される処理Aから命令Aを生成し、if〜else文の次の文への無条件分岐命令を生成する。次に条件が偽の場合の処理Bから命令Bを生成するが、このとき従来は命令Bの後にはif〜else文の次の文が来るため分岐する必要はないが、条件が真の場合と偽の場合で分岐の差をなくすために、本実施形態ではあえて処理Bから命令Bを生成した直後に無条件分岐命令jbr LABEL2を挿入し命令フェッチのやりなおしを行わせた後、if〜else文の次の文へ分岐させている。
【0043】
上記で説明したように、分岐命令を挿入することと図1に示す回路を用いることで、分岐による処理時間の差をなくすとともに、消費電力の差をなくすことが可能になる。続いて、本実施形態の情報処理装置の動作を説明する。
【0044】
図3に図2に示すプログラム(ソフトウェア)の命令を実行させたときの動作を示すフローチャートを示す。図2の右側のプログラムの命令のコマンドを図3中の対応する工程に記載している。まず、cmpは、XとYとを比較する(S21)。次にjneは、XとYを比較して分岐の有無の判断を行う(S22)。X=Yのとき(S22で分岐しない)、既にフェッチした命令(命令A)の再フェッチを実施し(S23)、A命令を実行する(S24)。次に、jbrにより、無条件分岐し(S25)、分岐したアドレスについて、命令フェッチを行う(S26)。一方、X≠Yのとき(S22で分岐する)、分岐先のアドレス(LABEL1)の命令を取得するため、命令のフェッチを行い(S27)、命令Bを実行する(S28)。jbrにより、無条件分岐し(S29)、分岐したアドレスについて、命令フェッチを行う(S30)。条件分岐命令に続くそれぞれの処理が終了した後、後続する次命令を実行する(S31)。
【0045】
このように、図1に示した命令再フェッチ信号207並びにフィードバック信号を情報処理装置1へ挿入したことにより、分岐した場合でも分岐しなかった場合でも命令フェッチのやり直しが発生している。また、分岐した場合の命令B実行後に無条件分岐命令を実行させることにより、if文の分岐が発生しなかった場合と等しく命令フェッチのやり直しが発生している。
【0046】
図4は図2で示すプログラムを図1のハードウェアで実行した場合のパイプライン動作の様子を示した図である、分岐する場合と分岐しない場合とを、実行される時刻を揃えて並べたものである。図4上段に示しているのは条件分岐が発生しなかった場合であり、分岐命令jneの実行後に命令フェッチ(IF)が発生している。この動作は、図12に示す従来にはなかったものである。具体的には、命令デコード回路300が分岐命令を検出し、分岐が発生しない場合に命令再フェッチ信号207をアクティブにする。命令フェッチ回路200では、アドレス選択回路202は、アドレス保持回路201の出力である現アドレス信号203へ接続されたフィードバック信号212を経由したアドレスを選択する。アドレス保持回路201は、アドレス選択回路202によって選択したフィードバック信号212の値が供給され、再度同じアドレスを保持する。命令Aは既に命令キュー220に取り込まれているが、同じ命令Aをフェッチしなおしたあと命令Aが実行される。その後jbr命令によって次命令のアドレスへ分岐し、次命令が実行される。
【0047】
この時のハードウェアの動作タイミングチャートを図5に示す。図5の見方は図13と同様である。図5は分岐が発生しない例を示しているため、時刻T=1において条件分岐命令jneが検出されても分岐は発生しない。しかし本実施形態において、命令デコード部300は、条件分岐命令を検出すると、命令再フェッチ信号207をアクティブにする。命令選択回路230は、NOP命令コード発生回路231の出力を選択する。命令キュー220は、既にフェッチされて蓄えられていた次命令を破棄し、命令選択回路230が選択したnop命令を選択し、命令デコード回路300へ供給する。時刻T=2において、nop命令が実行される。従って、アドレス選択回路202は、フィードバック信号212を経由したアドレスを選択する。アドレス保持回路201は、アドレス選択回路202が選択したフィードバック信号212の値が供給され、再度同じアドレス(前回フェッチアドレス)を保持する。
【0048】
これにより時刻T=3において、命令フェッチ回路200は、再び命令Aをフェッチする。すなわち、分岐命令jneで分岐しなかった場合、情報処理装置1は、従来は既にフェッチ済の命令Aを実行するが、本実施形態では、命令キュー220は、命令Aをnop命令に置き換えて実行したのち、再度命令Aのフェッチをやり直す。これにより、分岐命令jneで分岐した場合と分岐しない場合のサイクル数を整える。また、命令Aの次に実行する無条件分岐命令jbrによって次命令の格納先であるアドレス0x0006への分岐を行う。このようにして、命令フェッチ回路200は、命令デコード部300から指示(命令再フェッチ信号207がアクティブになること)に基づいて、分岐しない場合に命令Bを命令フェッチするタイミングと同じタイミングで命令Aを命令フェッチすることになる。
【0049】
一方、図4下段に示しているのは条件分岐が発生した場合で、分岐命令jneで分岐が発生するため分岐先命令(この場合は命令B)をフェッチしなおすフェーズが挿入され、その後命令Bを実行し、手動またはコンパイラで挿入されたjbr命令によって次命令へ分岐してから次命令が実行される。
【0050】
この時のハードウェアの動作タイミングチャートを図6に示す。図6の見方も図13と同様である。図6は分岐が発生した例を示しているため、時刻T=1において、条件分岐命令jneが検出されると通常の分岐動作を行う。つまり命令デコード部300は、命令再フェッチ信号207をアクティブにしないで、絶対分岐信号210をアクティブにする。命令選択回路230は、NOP命令コード発生回路231の出力(nop命令)を選択する。命令キュー220は、既にフェッチされて蓄えられていた次命令を破棄し、命令選択回路230が選択したnop命令を選択し、命令デコード回路300に供給する。命令デコード部300は、nop命令を実行する。アドレス選択回路202は、分岐アドレス信号206とアドレス保持回路201から出力された現アドレス信号203の値をアドレス加算器205で加算した値を選択する。アドレス保持回路201は、アドレス選択回路202が選択した値(アドレス加算器205の出力値)で更新される。これにより時刻T=3において、命令Bをフェッチする。
【0051】
また、命令Bの後に挿入された無条件分岐命令jbrによって次命令の格納先であるアドレス0x0006への分岐を行う。この動作は図5と同様であるため説明を省略する。このようにして、命令デコード回路300は、条件分岐命令により分岐した場合及び分岐しない場合のそれぞれの処理が終了したときに、後続する同じ命令を実行するタイミングが同じになるように、分岐した場合の処理が終了したときに後続する同じ命令のアドレスへの分岐を指示することになる。また、命令フェッチ回路200は、命令デコード回路300からの指示(絶対分岐信号211がアクティブになること)に基づいて、無条件分岐することにより、分岐しない場合と同じタイミングで後続する命令を命令フェッチすることになる。
【0052】
図4のパイプライン動作から分かるように、分岐した場合と分岐しない場合のどちらでも常に同時刻に実行されている命令がほぼ等しくなり(違いは命令Aと命令B)、次命令に到達する時刻も等しくなる。また、実行される命令がほぼ等しいため動作する回路も等しくなり、消費電力もほぼ同じになると考えられる。すなわち、違いが出るのは命令Aと命令Bの動作回路の差や処理クロック数であり、分岐する・しないには依存しなくなる。
【0053】
このように、本実施形態では、上記で説明したように、命令フェッチするタイミングを制御することによって、条件分岐命令の有無にかかわらず、命令をフェッチすることによって命令を実行するタイミングを同じにすることができる。例えば、条件分岐命令に続いて実施するそれぞれの処理における分岐するタイミングに基づいて、命令フェッチすることを指示することによって命令を実行するタイミングを同じにする。また、命令フェッチするアドレスの複数の候補を毎回算出することにより、消費電力が等しくなるようにすることができる。具体的には、アドレス選択回路202に関連する回路の演算をすべて動作させ、アドレス選択回路202が必要なアドレスの値を選択し、不要な演算結果を破棄する。これにより、動作内容の違いに基づく消費電力の差を抑制することが可能になる。
【0054】
(実施形態2)
実施形態2では、条件分岐命令を検出した場合に、命令再フェッチ信号207をアクティブにする命令再フェッチ機能を有効にする期間と無効にする期間とを制御する情報処理装置の一態様を説明する。具体的には、高セキュリティが必要であるプログラムを実行する場合に、命令再フェッチ信号をアクティブにする制御を実施する場合を説明する。
【0055】
暗号処理など高セキュリティが絶対条件である処理は、セキュリティ性を高めるために実施形態1で説明した命令の再フェッチの動作を行い、そうでない処理を行う場合は命令の再フェッチを行わない動作をするように切り替える。
【0056】
図7は、本発明にかかる実施形態2の情報処理装置の一例を示すブロック図である。
図7に示す情報処理装置2は、図1に示した情報処理装置1へスイッチ213と制御レジスタ(制御部)401を追加している。
【0057】
スイッチ213は、命令再フェッチ信号207をアクティブにするか否かを切り替えるスイッチである。制御レジスタ401は、スイッチ213を切り替える設定値を保持する。制御レジスタ401が保持する設定値に基づいてスイッチ214はオンとオフを切り替る。制御レジスタに1を書き込むと、スイッチ213はオンになり、命令再フェッチ信号207は命令デコード回路300に接続され、命令再フェッチの要求を行う。一方、制御レジスタに0を書き込むと、スイッチ213はオフになり、命令再フェッチ信号207は命令デコード回路300から切り離される。この場合、アドレス選択回路202への接続線はGNDレベルに固定されて、命令再フェッチ信号207が有効(アクティブ状態)にならず、命令再フェッチが行われないため従来の動作と同じになる。制御レジスタ401は、CPU500によって制御され、命令処理回路400によって設定値(1または0)が書き込まれる。
【0058】
スイッチ213により、本当にセキュリティ性を重視するクリティカルな処理(例えば暗号処理部分など)でのみ命令再フェッチ機能を有効にし、それ以外の処理は命令再フェッチ動作をしないよう制御することでパフォーマンスの低下と消費電力の増加を最小限に止めることが可能になる。命令再フェッチ機能を有効にした場合は、実施形態1と同様の動作である。一方、命令再フェッチ機能を無効にした場合、次のような動作を行う。
【0059】
命令デコード回路300によって絶対分岐命令が検出された場合、かつ分岐が発生する場合、分岐することを示す絶対分岐信号210がアクティブになり、アドレス保持回路201は分岐アドレス信号206で供給されるアドレス(絶対番地)に更新される。インクリメント回路204は、分岐条件が成立して絶対分岐信号210、相対分岐信号211、または命令再フェッチ信号207のいずれか一つがアクティブになった場合はインクリメント動作を停止する。また、命令デコード回路300によって相対分岐命令が検出され、かつ分岐が発生する場合、分岐することを示す相対分岐信号211がアクティブになり、アドレス保持回路201は分岐アドレス信号206の値(相対番地)とアドレス保持回路201が保持している現アドレス信号203の値をアドレス加算器205で加算し分岐先のアドレスに更新される。このときアドレス加算器205は相対分岐信号211がアクティブになった場合は動作し、それ以外では消費電力低減のために動作停止する。
【0060】
このように、実行するプログラムに基づいて制御レジスタ401の値を設定することによって、命令再フェッチ機能の有効・無効を切り替えることができる。これにより、セキュリティを重視する場合と、セキュリティ以外のその他の要素(例えば、パフォーマンスの向上、消費電力の抑制など)を重視する場合とを切り替えて、プログラムの目的に沿った実行形態を実現することが可能になる。
【0061】
(実施形態3)
実施形態3では、一度に複数命令を取り込めるように命令キューを複数もつCPUを想定した情報処理装置の一態様を説明する。例えば命令は16bit長固定で、32bitバスのCPUなら2命令同時に取り込みできる。命令キューが複数ある場合、現在実行しようとしている命令が格納されていたアドレスと、現在フェッチしようとしているアドレスはずれている。このため、図1の情報処理装置1のように、アドレス保持回路201に保持するアドレスをフィードバック信号212によってフィードバックする動作では正しく命令再フェッチを行うことができない。そこで、命令を命令キュー220に格納する際に、これとセットでアドレスもキューに格納しておけば再フェッチが発生したときにその情報を利用することで正しい再フェッチが可能になる。
【0062】
図8は、本発明にかかる実施形態3の情報処理装置の一例を示すブロック図である。図8に示す情報処理装置3は、図1に示す情報処理装置1へ、命令キュー221、アドレス・キュー223、224およびアドレス・キューの選択回路222が追加されている。実施形態1との動作の違いを以下に示す。
【0063】
アドレスをフィードバックする信号212は、実施形態1のようにアドレス保持回路201が保持している値をフィードバックするのではなく、アドレス・キューが保持しているアドレスを供給する。命令デコード回路300が分岐命令をデコードしたとき、再フェッチ要求信号207をアクティブにすると共に、アドレス・キューから信号212へアドレスを供給して再フェッチを実行する。これにより命令キューを複数持った場合に、アドレス保持回路が保持するアドレス値と再フェッチを行いたいアドレスがずれている場合でも正しく命令フェッチをやり直すことができる。
【0064】
図8に示す情報処理装置1の例では命令キューとアドレス・キューがそれぞれ2組ずつ用意されており、キュー制御回路241によって制御を行っている。キュー制御回路241はキューを交互に使用する。たとえば命令キュー220とアドレス・キュー223に既に命令とアドレスが格納されていれば、記憶装置から来た命令とアドレスは命令キュー221とアドレス・キュー224に格納する。命令キュー220とアドレス・キュー223の命令が読み出されて空になったら、命令キュー220とアドレス223にそれぞれ命令とアドレスを格納する。すなわち命令とアドレスがセットで格納される。
【0065】
以上のように、本発明に係る好適な実施形態によれば、条件分岐命令により分岐した場合と分岐しない場合において、処理時間を等しくすることによって、命令を実行する処理タイミングを等しくすることができる。上記に加え、動作する回路を等しくすることによって、消費電力を等しくすることができる。具体的には、条件分岐命令を検出した場合に、分岐の有無にかかわらず、命令を実行するタイミングが同じになるように、命令フェッチを行うように制御する。また、分岐する場合としない場合でそれぞれ動作する回路が異なる場合でも、関連する回路をすべて動作させ、必要な演算結果を選択し、不要な演算結果は、ダミー動作(動作の結果を破棄する)とすることによって、消費電力を等しくすることが可能になる。これにより、分岐に伴って発生する命令実行タイミングのズレや消費電力の差というサイドチャネル情報をなくすことになる。従って、暗号アルゴリズム等を計算機に実装した際に、分岐命令を分岐の有無にかかわらず、処理時間を等しく(タイミング攻撃対策)すること、並びに、消費電力を等しく(SPA/DPA対策)することを可能にし、サイドチャネル攻撃を回避し、デバイス内部の秘密情報を守ることが出来る。
【0066】
なお、半導体装置であるマイクロコンピュータは、内部のCPUとして上記各実施形態で説明したCPUを内蔵することができる。また、上記各実施形態で説明した記憶装置とCPUとを1チップのマイクロコンピュータに内蔵させてもよく、さらに、記憶装置のチップとCPUチップを一つの半導体パッケージ内部で接続して構成した半導体装置としてもよい。
【図面の簡単な説明】
【0067】
【図1】本発明にかかる実施形態1の情報処理装置の一例を示すブロック図である。
【図2】本実施形態の分岐命令のプログラムをC言語及びアセンブリ言語で記述した例を示す図である。
【図3】図2に示すプログラムの命令を実行させたときの動作を示すフローチャートである。
【図4】図2で示すプログラムを図1のハードウェアで実行した場合のパイプライン動作の様子を示した図である。
【図5】図2のプログラム(条件分岐命令で分岐しなかった場合)を図1のハードウェアで動作させたときのタイミングチャートである。
【図6】図2のプログラム(条件分岐命令で分岐した場合)を図1のハードウェアで動作させたときのタイミングチャートである。
【図7】本発明にかかる実施形態2の情報処理装置の一例を示すブロック図である。
【図8】本発明にかかる実施形態3の情報処理装置の一例を示すブロック図である。
【図9】従来の情報処理装置の一例を示す図である。
【図10】分岐命令のプログラムをC言語及びアセンブリ言語で記述した例を示す図である。
【図11】図10に示すプログラムの命令を実行させたときの動作を示すフローチャートである。
【図12】図10で示すプログラムを図9のハードウェアで実行した場合のパイプラインの動作の様子を示す図である。
【図13】図10のプログラム(条件分岐命令で分岐しなかった場合)を図9のハードウェアで動作させたときのタイミングチャートである。
【図14】図10のプログラム(条件分岐命令で分岐した場合)を図9のハードウェアで動作させたときのタイミングチャートである。
【符号の説明】
【0068】
1、2、3 情報処理装置
100 記憶装置
200 命令フェッチ回路
201 アドレス保持回路
202 アドレス選択回路
203 現アドレス信号
204 インクリメント回路
205 アドレス加算器
206 分岐アドレス信号
207 命令再フェッチ信号
210 絶対分岐信号
211 相対分岐信号
212 フィードバック信号
213 スイッチ
220 命令キュー
221 命令キュー
222 アドレス・キューの選択回路
223、224 アドレス・キュー
230 命令選択回路
231 NOP命令コード発生回路
241 キュー制御回路
300 命令デコード回路
400 命令処理回路
401 制御レジスタ
500 CPU

【特許請求の範囲】
【請求項1】
実行する命令コードをフェッチして出力する命令フェッチ部と、
前記命令フェッチ部から出力される命令コードをデコードする命令デコード部と、を備え、
前記命令デコード部は、前記命令コードが条件分岐命令であることを検出した場合に、分岐条件による分岐の有無にかかわらず後続の命令コードのフェッチタイミングが同じになるように前記命令フェッチ部へ制御信号を出力する情報処理装置。
【請求項2】
前記命令デコード部は、前記条件分岐命令に基づいて分岐しない場合に、既にフェッチした命令コードを再度フェッチすることを指示する命令再フェッチ信号を生成して前記命令フェッチ部へ出力し、
前記命令フェッチ部は、前記命令再フェッチ信号に基づいて、再度同じ命令コードをフェッチすることを特徴とする請求項1記載の情報処理装置。
【請求項3】
命令コードをアドレスと対応づけて記憶する記憶装置を、さらに備え、
前記命令フェッチ部は、命令コードと対応づけられたアドレスをフェッチ用アドレスとして保持するアドレス保持部を備え、前記フェッチ用アドレスに基づいて前記記憶装置から出力される命令コードをフェッチし、前記命令再フェッチ信号が入力された場合に、前回命令コードをフェッチしたフェッチ用アドレスである前回フェッチアドレスを前記アドレス保持部に再度保持させて同じ命令コードをフェッチすることを特徴とする請求項2記載の情報処理装置。
【請求項4】
前記命令フェッチ部は、前記アドレス保持部が保持する前記フェッチ用アドレスを前回フェッチアドレスとして含む命令コードをフェッチする候補アドレスを複数入力し、前記命令デコード部から前記命令再フェッチ信号が入力された場合に、前記フェッチ用アドレスとして、複数の候補アドレスの中から前記前回フェッチアドレスを選択して前記アドレス保持部へ出力するアドレス選択部を、さらに備え、
前記アドレス保持部は、前記アドレス選択部が選択した前記前回フェッチアドレスを再度保持することを特徴とする請求項3記載の情報処理装置。
【請求項5】
前記アドレス選択部は、前記複数の候補アドレスとして、前記前回フェッチアドレスに加え、前記フェッチ用アドレスの次に実行する命令のアドレスを算出した次命令のアドレス、相対分岐する相対アドレス、及び絶対分岐する絶対アドレスを入力し、前記命令デコード部が出力する制御信号に基づいて、前記複数の候補アドレスから一つのアドレスを選択することを特徴とする請求項4記載の情報処理装置。
【請求項6】
前記命令フェッチ部が前記命令デコード部からの命令再フェッチ信号に基づいて、命令をフェッチするか否かを指定する制御レジスタを、さらに備えることを特徴とする請求項2乃至5のいずれかに記載の情報処理装置。
【請求項7】
前記命令フェッチ部が前記命令デコード部から出力される命令再フェッチ信号に基づいて、命令をフェッチするか否かを指定する指定する制御レジスタを、さらに備え、
前記アドレス選択部は、前記制御レジスタの指示内容に基づいて前記前回フェッチアドレスを選択するか否かを切り替えることを特徴とする請求項4又は5記載の情報処理装置。
【請求項8】
前記命令フェッチ部は、フェッチした複数の命令コードに対応した複数のアドレスを保持し、後続命令のフェッチ用アドレスとして、前記アドレス選択部へ出力する複数アドレス保持回路を、さらに備えることを特徴とする請求項4、5、7のいずれかに記載の情報処理装置。
【請求項9】
前記命令デコード部がデコードした命令コードを実行する命令処理部をさらに備え、
前記命令フェッチ部、前記命令デコード部、並びに前記命令処理部は、複数の命令を並行して実行するパイプライン動作を行い、
前記命令デコード部により、前記命令コードが条件分岐命令であることが検出された場合に、後続命令コードに対して、前記命令フェッチ部によるフェッチタイミング、前記命令デコード部によるデコードタイミング、並びに前記命令処理部による実行タイミングが分岐条件による分岐の有無にかかわらず同となるように前記パイプライン動作を行うこと特徴とする請求項1乃至8のいずれかに記載の情報処理装置。
【請求項10】
命令フェッチ部と命令デコード部を備えた情報処理装置の命令フェッチ制御方法であって、
前記命令フェッチ部が命令コードをフェッチし、
前記命令デコード部が前記命令コードをデコードし、
前記命令デコード部が条件分岐命令を検出した場合に、分岐の有無にかかわらず、後続命令コードをフェッチするタイミングが同じになるように、前記後続命令コードのフェッチを制御する情報処理装置の命令フェッチ制御方法。
【請求項11】
前記条件分岐命令に基づいて分岐しない場合に、前記後続命令コードとして、既にフェッチした命令コードを再度フェッチするよう制御する請求項10記載の命令フェッチ制御方法。
【請求項12】
複数の命令コードのフェッチ、前記命令コードのデコード、並びに前記命令コードの実行をパイプライン動作により処理する情報処理装置における請求項10又は11記載の命令フェッチ制御方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate


【公開番号】特開2008−146384(P2008−146384A)
【公開日】平成20年6月26日(2008.6.26)
【国際特許分類】
【出願番号】特願2006−333410(P2006−333410)
【出願日】平成18年12月11日(2006.12.11)
【出願人】(302062931)NECエレクトロニクス株式会社 (8,021)
【Fターム(参考)】