(57)【要約】【課題】プログラムを変更したり、クロック周波数を低下させたりすることなく、さらには従来の中央処理装置の設計を大きく変えることなく、電力解析攻撃への耐性を高めることが可能な中央処理装置を提供する。【解決手段】中央処理装置５において、演算装置３は、レジスタ群２に格納されたデータとは無関係なデータ１０２を用いた演算を実行可能なように構成されている。制御装置４は、取り込んだ命令に応じた演算処理を演算装置３に実行させる際、最初の１クロック周期の間、上記の無関係なデータを用いた演算処理を演算装置３に実行させる。【選択図】図１
2014049891.tif 000002
【特許請求の範囲】
【請求項１】
複数のレジスタを含むレジスタ群および前記複数のレジスタのうち選択されたレジスタに格納されているデータを用いて演算を行なう算術論理演算ユニットを含む演算装置と、
前記演算装置を制御する制御装置とを備え、
前記演算装置は、前記選択されたレジスタに格納されたデータとは無関係なデータを用いた演算処理を実行可能なように構成され、
前記制御装置は、取り込んだ命令に応じた演算処理を前記演算装置に実行させる際、最初の１クロック周期の間、前記無関係なデータを用いた演算処理を前記演算装置に実行させる、中央処理装置。
【請求項２】
前記最初の１クロック周期の次の１クロック周期の期間に停止状態となるゲーテッドクロック信号を生成するクロックゲート部をさらに備え、
前記複数のレジスタおよび前記制御装置は、前記ゲーテッドクロック信号に基づいて動作する、請求項１に記載の中央処理装置。
【請求項３】
前記制御装置は、前記外部メモリから１または複数の特定の種類の命令を取り込んだ場合にのみ、前記無関係なデータを用いた演算処理を前記演算装置に実行させる、請求項１に記載の中央処理装置。
【請求項４】
前記レジスタ群は、
前記選択されたレジスタに格納されている演算対象のデータを前記算術論理演算ユニットに出力する前に一時的に保持する出力レジスタと、
前記出力レジスタに保持されたデータおよび前記無関係なデータを受け、前記制御装置の制御に従っていずれか１つのデータを前記算術論理演算ユニットに出力する選択回路とをさらに含み、
前記制御装置は、取り込んだ命令に応じた演算処理を前記演算装置に実行させる際、最初の１クロック周期の間前記無関係なデータを前記選択回路に出力させた後、前記出力レジスタに保持されたデータを前記選択回路に出力させる、請求項１または２に記載の中央処理装置。
【請求項５】
前記中央処理装置は、動作モードとしてセキュアモードと非セキュアモードとを有し、
前記レジスタ群は、
前記選択されたレジスタに格納されている演算対象のデータを前記算術論理演算ユニットに出力する前に一時的に保持する出力レジスタと、
前記出力レジスタに保持されたデータ、前記無関係なデータ、および前記出力レジスタに保持される前の前記演算対象のデータを受け、前記制御装置の制御に従っていずれか１つのデータを前記算術論理演算ユニットに出力する選択回路とをさらに含み、
前記制御装置は、前記セキュアモードのとき、取り込んだ命令に応じた演算処理を前記演算装置に実行させる際、最初の１クロック周期の間前記無関係なデータを前記選択回路に出力させた後、前記出力レジスタに保持されたデータを前記選択回路に出力させ、
前記制御装置は、前記非セキュアモードのとき、取り込んだ命令に応じた演算処理を前記演算装置に実行させる際、前記出力レジスタに保持される前の前記演算対象のデータを前記選択回路に出力させる、請求項１または２に記載の中央処理装置。
【請求項６】
前記レジスタ群は、
前記選択されたレジスタに格納されている演算対象のデータを前記算術論理演算ユニットに出力する前に一時的に保持する出力レジスタと、
前記出力レジスタに保持されたデータ、前記無関係なデータ、および前記出力レジスタに保持される前の前記演算対象のデータを受け、前記制御装置の制御に従っていずれか１つのデータを前記算術論理演算ユニットに出力する選択回路とをさらに含み、
前記制御装置は、前記１または複数の特定の種類の命令を取り込んだ場合には、取り込んだ命令に応じた演算処理を前記演算装置に実行させる際、最初の１クロック周期の間前記無関係なデータを前記選択回路に出力させた後、前記出力レジスタに保持されたデータを前記選択回路に出力させ、
前記制御装置は、前記１または複数の特定の種類の命令とは異なる種類の命令を取り込んだ場合には、取り込んだ命令に応じた演算処理を前記演算装置に実行させる際、前記出力レジスタに保持される前の前記演算対象のデータを前記選択回路に出力させる、請求項３に記載の中央処理装置。
【請求項７】
前記中央処理装置は、動作モードとしてセキュアモードと非セキュアモードとを有し、
前記レジスタ群は、
前記選択されたレジスタに格納されている演算対象のデータを前記算術論理演算ユニットに出力する前に一時的に保持する出力レジスタと、
前記出力レジスタに保持されたデータ、前記無関係なデータ、および前記出力レジスタに保持される前の前記演算対象のデータを受け、前記制御装置の制御に従っていずれか１つのデータを前記算術論理演算ユニットに出力する選択回路とをさらに含み、
前記制御装置は、前記セキュアモードでありかつ前記１または複数の特定の種類の命令を取り込んだ場合には、取り込んだ命令に応じた演算処理を前記演算装置に実行させる際、最初の１クロック周期の間前記無関係なデータを前記選択回路に出力させた後、前記出力レジスタに保持されたデータを前記選択回路に出力させ、
前記制御装置は、前記１または複数の特定の種類の命令とは異なる種類の命令を取り込んだ場合もしくは非セキュアモードの場合には、取り込んだ命令に応じた演算処理を前記演算装置に実行させる際、前記出力レジスタに保持される前の前記演算対象のデータを前記選択回路に出力させる、請求項３に記載の中央処理装置。
【請求項８】
前記演算装置は、
各々が論理演算機能または記憶機能を有する複数の回路素子と、
前記複数の回路素子の少なくとも一部にそれぞれ対応し、各々が対応する回路素子の出力信号の経路に設けられた複数の選択回路とを含み、
前記複数の選択回路の各々は、対応の回路素子の出力信号と前記無関係なデータによる信号とを受け、前記制御装置の制御に従っていずれか１つの信号を出力する、請求項１〜３のいずれか１項に記載の中央処理装置。
【請求項９】
複数のレジスタを含むレジスタ群と、
前記複数のレジスタのうち選択されたレジスタに格納されている演算対象のデータを用いて演算を行なう算術論理演算ユニットとを備え、
前記レジスタ群は、
前記演算対象のデータを前記算術論理演算ユニットに出力する前に一時的に保持する出力レジスタと、
前記出力レジスタに保持されたデータおよび前記演算対象のデータとは無関係なデータを受け、いずれか１つのデータを前記算術論理演算ユニットに出力する選択回路とをさらに含み、
前記選択回路は、前記算術論理演算ユニットが演算処理を実行する際、最初の１クロック周期の間前記無関係なデータを出力した後、前記出力レジスタに保持されたデータを出力する、演算装置。
【請求項１０】
セキュアモードと非セキュアモードとを有する演算装置であって、
前記演算装置は、
複数のレジスタを含むレジスタ群と、
前記複数のレジスタのうち選択されたレジスタに格納されている演算対象のデータを用いて演算を行なう算術論理演算ユニットとを備え、
前記レジスタ群は、
前記演算対象のデータを前記算術論理演算ユニットに出力する前に一時的に保持する出力レジスタと、
前記出力レジスタに保持されたデータ、前記演算対象のデータとは無関係なデータ、および前記出力レジスタに保持される前の前記演算対象のデータを受け、いずれか１つのデータを前記算術論理演算ユニットに出力する選択回路とをさらに含み、
前記選択回路は、前記セキュアモードのときに前記算術論理演算ユニットが演算処理を実行する際、最初の１クロック周期の間前記無関係なデータを出力した後、前記出力レジスタに保持されたデータを出力し、
前記選択回路は、前記非セキュアモードのときに前記算術論理演算ユニットが演算処理を実行する際、前記出力レジスタに保持される前の前記演算対象のデータを出力する、演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、中央処理装置および演算装置に関し、たとえば電力解析攻撃の防御のために好適に用いられるものである。
【背景技術】
【０００２】
電力解析攻撃は、中央処理装置（ＣＰＵ：Central  Processing  Unit）で処理されているデータに依存した消費電力のわずかな偏りを解析することによって、ＣＰＵで処理されている秘密情報を取得するものである（たとえば、非特許文献１〜３参照）。
【０００３】
電力解析攻撃への耐性を高めることが可能な従来技術として、たとえば、特開２０１１−２３４３１２号公報（特許文献１）に開示された技術が知られている。この技術は、従来のＣＰＵ（特に演算装置）の設計を大きく変えることなく、電力解析攻撃への耐性を高めることを可能にするものであり、本願の発明者によって発明されたものである。
【０００４】
具体的にこの文献による演算装置では、演算装置を構成する論理ゲートおよびフリップフロップなどの回路素子のうち少なくとも一部の回路素子にそれぞれ対応して選択回路が設けられる。各選択回路は、対応の回路素子の出力信号および演算とは無関係の信号の両方を受け、一方の信号を選択的に出力する。これによって、演算装置の内部信号および出力信号の状態を演算とは無関係の状態に切替えることができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１１−２３４３１２号公報
【非特許文献】
【０００６】
【非特許文献１】Kocher他、「Differential Power Analysis」CRYPTO 1999. LNCS, vol. 1666, pp. 388-397. Springer, Heidelberg (1999)
【非特許文献２】Brier他、「Correlation Power Analysis with a Leakage Model」CHES 2004. LNCS, vol. 3156, pp. 16-29. Springer, Heidelberg (2004)
【非特許文献３】Suzuki他、「DPA Lekage Models for CMOS Logic Circuits」CHES 2005．LNCS，vol．3659, pp. 366-382, Springer-Verlag（2005）
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、上記の特開２０１１−２３４３１２号公報（特許文献１）では、演算装置の内部信号および出力信号の状態を演算とは無関係の状態に切り替えるタイミングを決める方法として、専用の命令（切替命令）を設ける方法が提案されている。しかしながら、この方法の場合には、プログラムのどの命令の前または後に切替命令を挿入すれば電力解析攻撃の防御に効果的か否かは、プログラマの判断に委ねられている。このためプログラム開発の負担が大きいという問題がある。さらには、切替命令を挿入することでプログラムサイズが大きくなるという問題もある。
【０００８】
その他の方法として、この文献では、クロック信号の立上がりエッジのタイミングで、演算装置の内部信号および出力信号の状態を演算とは無関係の状態に切り替え、クロック信号の立下がりエッジのタイミングで演算装置の内部信号および出力信号の状態を元に戻す方法が提案されている。しかしながら、この方法の場合、クロック信号が立下がった後、次の立上がりまでに演算処理を完了させる必要があるので、中央処理装置のクロック周波数を通常よりも低下させなければならないという問題がある。
【０００９】
この発明は、上記の問題点を考慮してなされたものであり、特開２０１１−２３４３１２号公報（特許文献１）で開示した発明の改良発明である。すなわち、この発明の目的は、プログラムを変更したり、クロック周波数を低下させたりすることなく、さらには従来の演算装置および中央処理装置の設計を大きく変えることなく、電力解析攻撃への耐性を高めることが可能な中央処理装置および演算装置を提供することである。その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１０】
一実施の形態による中央処理装置において、演算装置は、レジスタ群に格納されたデータとは無関係なデータを用いた演算を実行可能なように構成されている。制御装置は、取り込んだ命令に応じた演算処理を演算装置に実行させる際、最初の１クロック周期の間、上記の無関係なデータを用いた演算処理を演算装置に実行させる。
【発明の効果】
【００１１】
上記の一実施の形態によれば、プログラムを変更したり、クロック周波数を低下させたりすることなく、さらには従来の演算装置および中央処理装置の設計を大きく変えることなく、電力解析攻撃への耐性を高めることができる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１によるＣＰＵの主要部の構成を概略的に示すブロック図である。
【図２】図１のＣＰＵのより詳細な構成を示すブロック図である。
【図３】ＡＮＤゲートの設計方法を説明するための図である。
【図４】セレクタの設計方法を説明するための図である。
【図５】Ｄ−フリップフロップの設計方法を説明するための図である。
【図６】図１のレジスタ群においてデータ信号をＡＬＵに出力する部分の回路構成例を示す図である。
【図７】図１のＣＰＵの動作を説明するためのタイミング図である。
【図８】実施の形態２によるＣＰＵの主要部の構成を概略的に示すブロック図である。
【図９】図８の制御信号生成部の主要部の構成を概略的に示すブロック図である。
【図１０】図８のＣＰＵの動作を説明するためのタイミング図である。
【図１１】図１０の比較例として従来のＣＰＵの動作を説明するための図である。
【図１２】実施の形態３によるＣＰＵにおける制御信号生成部およびクロックゲート部の構成を示すブロック図である。
【図１３】実施の形態３によるＣＰＵの動作を説明するためのタイミング図である。
【図１４】実施の形態４によるＣＰＵの主要部の構成を概略的に示すブロック図である。
【図１５】図１４のレジスタ群においてＡＬＵにデータを出力する部分の回路構成例を示す図である。
【図１６】図１４、図１５に示すＣＰＵの動作を説明するためのタイミング図である。
【図１７】図１５の変形例を示す回路図である。
【図１８】実施の形態５によるＣＰＵの主要部の構成を概略的に示すブロック図である。
【図１９】図１８のレジスタ群においてＡＬＵにデータを出力する部分の回路構成例を示す図である。
【発明を実施するための形態】
【００１３】
以下、各実施の形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰返さない。
【００１４】
＜実施の形態１＞
［ＣＰＵの構成］
図１は、実施の形態１によるＣＰＵの主要部の構成を概略的に示すブロック図である。図１を参照して、ＣＰＵ５は、演算装置３と、制御信号生成部（制御装置）４とを含む。演算装置３は、複数のレジスタ１〜Ｎ（２＿０〜２＿Ｎ）を含むレジスタ群２と算術論理演算ユニット（ＡＬＵ：Arithmetic  Logic  Unit）１とを含む。
【００１５】
制御信号生成部４へ入力される主な信号には、メモリデータ１１３とシステムクロック１１２とがある。メモリデータ１１３は、ＣＰＵ５が外部のメモリ（記憶装置）から読み出した命令およびデータである。システムクロック１１２は、ＣＰＵ５内部の多くの回路に供給されるクロック信号である。制御信号生成部４およびレジスタ群２は、外部から入力されたシステムクロック１１２に同期して動作する。
【００１６】
制御信号生成部４は、ＡＬＵ１を使用する命令（たとえば、算術演算命令、論理演算命令）の実行時には、レジスタ群２に格納された複数のデータソースから２組のデータソース（データ１、データ２）を選択する。ＡＬＵ１は、それらのデータ１，２を入力データとして用いて命令で指定された演算を実行する。
【００１７】
制御信号生成部４は、上記の演算の実行の際に演算装置３を制御するために、多数の制御信号を演算装置３に出力する。具体的には、まず、データソース選択信号１，２（１０４，１０５）に従って、（Ｎ＋１）個のレジスタ２＿０〜２＿Ｎの中から１または複数（通常２個）が選択され、選択されたレジスタに格納されたソースデータが入力データ（データ１（１０９）およびデータ２（１１０））としてＡＬＵ１に出力される。ＡＬＵ１内部の複数の演算ブロック（図示省略）はレジスタ群２から供給された２個の入力データ１０９，１１０に対して複数の演算を並行して実行し、演算種類選択信号１００で指定された演算種類に該当する演算結果１１１を出力する。ＡＬＵの設計によっては、ＡＬＵ１の内部の複数の演算ブロックのうち、演算種類選択信号１００で指定された演算種類に該当する演算ブロックのみに有効なデータが入力されることもある。ＡＬＵ１が出力した演算結果１１１は、演算装置３以外で用いられることもあるし、演算装置３内のレジスタ群２に書き込まれることもある。レジスタ群２への書き込みは、書込レジスタ選択信号１０６および書込イネーブル信号１０７によって制御される。レジスタ群２には、さらに、リセット信号１０３が入力される。
【００１８】
図１の演算装置３が従来の演算装置と異なる点は、ＡＬＵ１およびレジスタ群２に対して切替制御信号１０１および切替データ信号１０２が入力されている点である。切替制御信号１０１は、活性状態（アクティブ）と非活性状態（インアクティブ）とを有する１ビットの信号である。切替データ信号１０２は、演算装置３による演算に用いられるソースデータとは無関係な複数ビットの信号である。
【００１９】
図２は、図１のＣＰＵのより詳細な構成を示すブロック図である。図２では、アドレス信号およびデータ信号が太線の矢印で示され、制御信号が細線の矢印で示されている。図２を参照して、図１の制御信号生成部４は、データアクセス部５１、命令フェッチ部５２、命令デコード部５４、および状態制御部５５を含む。
【００２０】
データアクセス部５１は、バスインタフェース部５０を介して外部のメモリ６と接続され、メモリ６内の指定されたアドレスにデータを書き込んだり、指定されたアドレスからデータを読み出したりする。命令フェッチ部５２は、バスインタフェース部５０を介して外部のメモリ６と接続され、メモリ６内の指定されたアドレスから命令を読み出す。読み出した命令は命令レジスタ５３に格納される。
【００２１】
命令デコード部５４は、命令レジスタ５３の内容をデコードし、命令の種類（オペコード）および命令で使用するデータ（オペランド）などを解釈する。
【００２２】
状態制御部５５は、ＣＰＵの状態を保持し、現在の状態と命令デコード結果などに基づいて状態更新および各種制御信号の生成を行なう。各種制御信号は、演算装置３を始めＣＰＵ５Ａが含むさまざまな回路部分５６を制御するための信号である。
【００２３】
ＣＰＵ５にはさらに切替データ信号生成部５７が設けられる。切替データ信号生成部５７は切替データ信号１０２を生成する。切替データ信号生成部５７として、たとえば、乱数発生源や擬似乱数生成器を用いることができる。切替データ信号生成部５７は、演算実行時のシステムクロックやタイマの値を利用して切替データ信号１０２を生成するように構成されていてもよい。その他、切替データ信号生成部５７として、専用のレジスタまたはシフトレジスタを設けてもよい。専用のレジスタまたはシフトレジスタの記憶内容が切替データ信号１０２として使用される。専用のレジスタまたはシフトレジスタは、図１のレジスタ群２の内部に設けられていてもよい。
【００２４】
［個々の回路素子の変更点］
実施の形態１の演算装置３は、従来の設計を大幅に変更することなく、演算装置３の内部信号および出力信号の状態を演算とは無関係の状態に切替え可能なように構成されている。具体的には、特開２０１１−２３４３１２号公報（特許文献１）に記載されているように、演算装置を構成する論理ゲートおよびフリップフロップなどの回路素子のうち少なくとも一部の回路素子が、切替制御信号１０１に応じて出力信号を切替データ信号１０２に切替え可能なように構成される。これによって、切替制御信号１０１が活性化（アサート）された状態では、演算装置３の内部信号および出力信号の状態を演算とは無関係な状態に設定できる。一方、切替制御信号１０１が非活性化（ネゲート）された状態では、演算装置３の動作は、電力解析攻撃への防御が施されていない従来の演算装置と同じである。以下、図３〜図６を参照して、回路素子の変更点を簡単に説明する。
【００２５】
図３は、ＡＮＤゲートの設計方法を説明するための図である。図４は、セレクタの設計方法を説明するための図である。図５は、Ｄ−フリップフロップの設計方法を説明するための図である。図３〜図５を参照して、（Ａ）は従来回路（設計変更前）を示し、（Ｂ）は設計変更後を示す。演算装置３は、典型的には以下のステップで設計される。
【００２６】
（１）従来技術によるＡＬＵおよびレジスタ群の回路を設計する。
（２）演算装置を構成する論理ゲート（図３のＡＮＤゲート３０、図４のセレクタ３４）およびフリップフロップ（図５のＤ-フリップフロップ３７）などの一部の回路素子の後段に直列にセレクタ３１，３５，３８を挿入する。
【００２７】
（３）上記（２）で挿入したセレクタ３１，３５，３８に切替制御信号１０１および切替データ信号１０２を入力する。セレクタ３１，３５，３８は、切替制御信号１０１が活性化されているときには対応の回路素子の出力信号に代えて、切替データ信号１０２を出力する。以上のステップによって、変更後の回路素子３２，３６，３９が完成する。
【００２８】
図６は、図１のレジスタ群においてデータ信号をＡＬＵに出力する部分の回路構成例を示す図である。図６（Ａ）は従来の回路構成を示し、図６（Ｂ）は変更後の回路構成を示す。なお、図６ではデータ信号１（１０９）を出力する部分の回路構成が示されているが、データ信号２（１１０）を出力する部分の回路構成も同様である。
【００２９】
図６（Ａ）を参照して、データ信号１（１０９）を出力する部分は、レジスタ０〜Ｎ（２＿０〜２＿Ｎ）の出力データＤＲ＿０〜ＤＲ＿Ｎがそれぞれ入力されるＡＮＤゲート４０＿０〜４０＿Ｎと、各ＡＮＤゲート４０の出力が入力されるＯＲゲート４１とを含む。各ＡＮＤゲート４０の他方の入力ノードには対応のデータソース選択信号１０４（１０４＿０〜１０４＿Ｎのいずれか）が入力される。
【００３０】
図６（Ｂ）を参照して、設計変更後の回路では、ＯＲゲート４１の出力ノードにセレクタ（選択回路）４２がさらに接続される。ここで、セレクタ４２は、ＯＲゲート４１の出力と、切替制御信号１０１と、切替データ信号１０２とを受ける。セレクタ４２は、切替制御信号１０１がアサートされると、ＯＲゲート４１の出力信号に代えて切替データ信号１０２をデータ信号１（１０９）として出力する。
【００３１】
［ＣＰＵの動作］
図７は、図１のＣＰＵの動作を説明するためのタイミング図である。図７では、上から順に、システムクロック１１２、図２のメモリ６から読み出されるメモリデータ１１３（命令データ、読出データ１０８）、図２の命令レジスタ５３の保持されている命令データ、および切替制御信号１０１の波形が示されている。
【００３２】
図７の場合、命令１は時刻ｔ１からｔ２までの期間（フェッチサイクル）でメモリから読み出され、時刻ｔ３からｔ５までの期間（実行サイクル）で実行される。命令２は時刻ｔ４からｔ５までの期間（フェッチサイクル）でメモリから読み出され、時刻ｔ５からｔ７までの期間（実行サイクル）で実行される。命令３は時刻ｔ５からｔ７までの期間（フェッチサイクル）でメモリから読み出され、時刻ｔ７からｔ９までの期間（実行サイクル）で実行される。
【００３３】
図７において特徴的な点は、図１の制御信号生成部４から出力される切替制御信号１０１が、各実行サイクルの最初の１クロックサイクルにおいて活性状態（Ｈレベル）になる点である。これによって、各実行サイクルの最初の１クロックサイクルの期間、演算装置３の内部信号および出力信号の状態が演算とは無関係な状態になる。レジスタ群２の選択されたレジスタに格納されているソースデータを用いた演算は、次のクロックサイクル以降で実行される。以下、各実行サイクルにおいて、最初の１クロックサイクルの期間を休止相と称し、次のクロックサイクル以降を稼動相と称する。
【００３４】
［実施の形態１の効果］
上記のＣＰＵ５の構成および動作によれば、各実行サイクルのうち最初の１クロックサイクルを休止相とすることによって、電力解析攻撃への耐性を高めることができる。ＡＬＵ１を使用する命令の場合には稼動相の直前に休止相が自動的に挿入されるので、プログラムを変更する必要がない。従来のＣＰＵの動作との相違点は、稼動相の直前に１クロックサイクルの休止相が挿入される点にあるので（すなわち、図７において休止相の１クロックサイクルを削除すれば、従来のＣＰＵの動作と同じになる）、システムクロックの周波数を従来よりも低下させる必要はない。
【００３５】
＜実施の形態２＞
［ＣＰＵの構成］
図８は、実施の形態２によるＣＰＵの主要部の構成を概略的に示すブロック図である。図８を参照して、実施の形態２によるＣＰＵ５Ａは、クロックゲート部６０をさらに含む点で実施の形態１によるＣＰＵ５と異なる。実施の形態２の場合、制御信号生成部４およびレジスタ群２は、システムクロック１１２ではなく、クロックゲート部６０によって生成されたゲーテッドクロック１１２Ａに基づいて動作する。
【００３６】
図９は、図８の制御信号生成部の主要部の構成を概略的に示すブロック図である。図１０は、図８のＣＰＵの動作を説明するためのタイミング図である。図１０では、上から順に、システムクロック１１２、命令取込信号１１４、外部メモリから読み出されるメモリデータ１１３、命令レジスタ５３に保持されている命令データ、切替制御信号１０１、クロック抑制信号、およびゲーテッドクロック１１２Ａの各波形が示されている。
【００３７】
図９、図１０を参照して、制御信号生成部４は、命令フェッチ部５２、命令デコード部５４、および状態制御部５５を含む。これらの構成要素の動作の概略については既に図２で説明したので、ここでは説明を繰り返さない。特に、命令フェッチ部５２は、システムクロック１１２（正確にはゲーテッドクロック１１２Ａ）の立ち上がりのタイミングにおいて命令取込信号１１４がＨレベル（“１”）である場合、メモリデータ１１３（この場合、命令データ）を命令レジスタ５３に格納する。状態制御部５５は、外部メモリから読み出したメモリデータが命令であるかデータであるかを認識しており、命令の場合には命令取込信号１１４をＨレベルにして命令レジスタ５３に読み出した命令データを格納する。
【００３８】
クロックゲート部６０は、システムクロック１１２を受け、さらに制御信号生成部４から命令取込信号１１４を受ける。図１０に示すように、クロックゲート部６０は、命令取込信号１１４をシステムクロックの立ち上がりタイミングで内部のレジスタに取り込む。このレジスタの出力が図８の切替制御信号１０１となる。
【００３９】
さらに、切替制御信号１０１をシステムクロック１１２の立下がりタイミングでラッチしたものがクロック抑制信号となる。クロックゲート部６０は、クロック抑制信号とシステムクロック１１２の論理積をとり、その結果をゲーテッドクロック１１２Ａとして他の回路（制御信号生成部４およびレジスタ群２）に供給する。
【００４０】
なお、図１０では、クロック抑制信号のシステムクロック１１２に対する遅延のみを強調して図示しているが、他の信号（切替制御信号１０１、ゲーテッドクロック１１２Ａ）もシステムクロック１１２に対して遅延している。
【００４１】
［ＣＰＵの動作］
次に、図８〜図１０を参照して、実施の形態２によるＣＰＵ５Ａの動作について説明する。
【００４２】
命令レジスタ５３が更新された（システムクロックの）クロックサイクル（図１０のｔ２〜ｔ３、ｔ５〜ｔ６、ｔ７〜ｔ８の各期間）では、切替制御信号１０１がＨレベルとなるため、図８の演算装置３の内部状態（内部信号および出力信号の状態）が演算とは無関係の状態となる。この期間を休止相と呼ぶ。命令レジスタ５３に格納されている命令が実行される（システムクロックの）クロックサイクルのうち、休止相を除く期間（図１０のｔ３〜ｔ５、ｔ６〜ｔ７、ｔ８以降の各期間）を稼動相と呼ぶ。演算装置３は、休止相では意味の無いデータに対して演算を実行し、稼動相の期間では、レジスタ群２の選択されたレジスタに格納されたデータに基づいて演算を実行する。
【００４３】
ゲーテッドクロック１１２Ａは、休止相の次の（システムクロックの）１クロックサイクルの間（図１０のｔ３〜ｔ４、ｔ６〜ｔ７、ｔ８〜ｔ９の各期間）、停止状態となる信号である。ゲーテッドクロック１１２Ａの供給を受ける回路（レジスタ群２、制御信号生成部４）では、休止相直後の稼動相においてクロックが停止しているため、演算装置３が意味の無いデータに対して行なった演算結果が間違って使用されることはない。休止相直後の稼動相では命令フェッチも休止するので、メモリアドレスは変化せず、メモリアドレスに基づいてメモリから読み出されるメモリデータ１１３も変化しない。
【００４４】
一方、制御信号生成部４は、休止相において、正しく各種の制御信号を生成する。制御信号は、次にクロックが供給されるまでその状態が保持されるので、休止相直後の稼動相でクロックが停止していても問題とならない。
【００４５】
図１１は、図１０の比較例として従来のＣＰＵの動作を説明するための図である。すなわち、図１１では、図８のクロックゲート部６０が設けられておらず、制御信号生成部４およびレジスタ群２がシステムクロック１１２に基づいて動作する場合であり、さらに、切替制御信号１０１が常に非活性化されている場合におけるＣＰＵの動作が示されている。図１１において、外部メモリから取り込まれるメモリデータ１１３の順番は、図１０の場合と同じにしている。
【００４６】
図１１を参照して、たとえば、命令２が演算命令であるとすると、命令２は、時刻ｔ３からｔ４までの１クロックサイクルの期間（フェッチサイクル）でフェッチされ、次の時刻ｔ４からｔ５までの１クロックサイクルの期間（実行サイクル）で実行される。そして、次の時刻ｔ５からｔ６までの１クロックサイクルの間に、命令２による演算結果がレジスタ群の選択されたレジスタに書き込まれる。この時刻ｔ５からｔ６までの期間は、次の命令３の実行サイクルとなっている。
【００４７】
これに対して、図１０に示す実施の形態２の場合には、命令２が休止相（時刻ｔ５からｔ６までの期間）と稼動相（時刻ｔ６からｔ７までの期間）の２クロックサイクルで実行される。休止相では無意味なデータを用いて演算が行なわれる。次の稼動相ではゲーテッドクロック１１２Ａが停止状態であるため、休止相の演算結果はレジスタ群には書き込まれない。制御信号は休止相の間に生成されてその状態が次の稼動相でも保持されているため、正規のデータを用いた演算が稼動相で実行される。次の時刻ｔ７からｔ８までの期間に、命令２による演算結果がレジスタ群２に書き込まれる。この期間は次の命令３の休止相になっている。
【００４８】
このようにゲーテッドクロック１１２Ａは、命令の実行時間（実行サイクル）を、システムクロックの１クロックサイクル分増加させるために利用されている。ゲーテッドクロック１１２Ａによって、休止相の直後の稼動相では命令フェッチも行なわれず、演算結果の書込も行なわれないため、ＣＰＵの動作の整合性が保たれている。
【００４９】
［実施の形態２の効果］
実施の形態２のＣＰＵ５Ａによって命令が実行されるときの特徴をまとめると次のとおりである。
【００５０】
休止相（実行サイクルのうち、最初の１クロックサイクル）では、演算命令の実行に使用されるデータは、レジスタ群２に格納されている本来のソースデータとは無関係なものに切替えられる。休止相におけるそれ以外の回路動作（制御信号の生成など）は基本的には従来と同じである。
【００５１】
休止相から次の稼動相に切替わるとき、切替制御信号１０１がＬレベルに切替わるので、ＡＬＵ１の入力が正規のソースデータに切替わる。このとき、ゲーテッドクロック１１２Ａによってレジスタ群２の動作は停止しているので、休止相における無意味な演算の結果がレジスタ群２に格納されることはない。休止相で生成済み制御信号（たとえば、演算種類選択信号１００、データソース選択信号１０４，１０５、書込レジスタ選択信号１０６など）は、休止相直後の稼動相でも保持されている。このため、正規のソースデータを用いた演算がＡＬＵ１で実行され、その結果がその次のクロックサイクルでレジスタ群２などに格納される。
【００５２】
このように実施の形態２によるＣＰＵ５Ａによれば、ゲーテッドクロックを用いるという簡単な制御によって、本来の演算装置３の動作を損なうこと無く、演算装置３の内部信号および出力信号の状態を演算とは無関係の状態にすることが可能となる。この場合、プログラムに特別な命令を挿入したり、クロック周波数を下げたりする必要はない。
【００５３】
＜実施の形態３＞
［実施の形態３の課題］
命令の種類によっては、電力解析攻撃に対する耐性を高めるために、演算装置の内部信号および出力信号の状態を演算とは無関係の状態にする必要がないものもあり得る。実施の形態１，２の場合には、そのような種類の命令まで含めた全ての命令で休止相が発生するため、命令の実行時間が増加する。そこで、実施の形態３では、電力解析攻撃に対する防御が必要な命令の実行サイクルにのみ休止相を挿入することによって命令の実行時間を削減する手段を提供する。
【００５４】
［ＣＰＵの構成］
図１２は、実施の形態３によるＣＰＵにおける制御信号生成部およびクロックゲート部の構成を示すブロック図である。
【００５５】
図１２のクロックゲート部６０Ａは、フェッチした命令データがさらに入力される点で図９のクロックゲート部６０と異なる。クロックゲート部６０Ａは、システムクロック１１２の立ち上がりタイミングにおいて、命令取込信号１１４が活性状態（Ｈレベル）であり、かつ、命令データの種類（オペコード）が予め決まったものである場合（または、予め決まった種類でない場合）にのみ、切替制御信号１０１を活性状態（Ｈレベル）にする。このような信号処理は、たとえば、フェッチした命令データのオペコードをデコードする簡単なデコード回路をクロックゲート部６０Ａに追加し、デコード結果と命令取込信号１１４の論理積をシステムクロックの立上がりのタイミングでラッチした信号を切替制御信号１０１とすることによって実現できる。
【００５６】
図１２のその他の点は図９の場合と同様であるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。たとえば、図９のクロックゲート部６０と図１２のクロックゲート部６０Ａとでは、クロック抑制信号およびゲーテッドクロック１１２Ａの生成方法は同じである。ただし、前述のように切替制御信号１０１の生成方法が異なるので、切替制御信号１０１に基づいて生成されるクロック抑制信号およびゲーテッドクロック１１２Ａの波形は、図９のクロックゲート部６０の場合とは異なるものになる。
【００５７】
［ＣＰＵの動作］
図１３は、実施の形態３によるＣＰＵの動作を説明するためのタイミング図である。図１３では、図１０の場合と同様に上から順に、システムクロック１１２、命令取込信号１１４、外部メモリから読み出されるメモリデータ１１３、命令レジスタ５３に保持されている命令データ、切替制御信号１０１、クロック抑制信号、およびゲーテッドクロック１１２Ａの各波形が示されている。
【００５８】
図１３のタイミング図に示された各命令は図１０の場合と同じである。そのうち命令２および命令４は、実行サイクル時に切替制御信号１０１を活性状態（Ｈレベル）にする必要のない特定種類の命令であるとする。この結果、命令２および命令４の実行時には休止相が挿入されないので、命令２および命令４の実行時間が図１０の場合に比べるとシステムクロックの１サイクル分短くなる。
【００５９】
＜実施の形態４＞
［実施の形態４の課題］
従来技術による演算装置では、図６（Ａ）のような回路によって複数のレジスタ１〜Ｎ（２＿０〜２＿Ｎ）に格納されたデータのうちＡＬＵに入力されるデータ１および２（１０９，１１０）が選択される。
【００６０】
図６（Ａ）の回路において、たとえば、レジスタ３のデータが選択される状態からレジスタ０のデータが選択される状態に切替わるとき、レジスタの選択信号の過渡遷移によって一時的にレジスタ２のデータがデータ１として出力される可能性がある。具体的に、レジスタ番号を３ビットで表わすとする。そうすると、フェッチされる命令データのうちレジスタ番号を示すフィールドの値が０１１から０００に変わる。このとき、命令デコーダに入力される信号は、信号遅延によって０１１、０１０、０００と遷移する可能性があり、０１０という過渡状態でレジスタ２が選択されることがあり得る。
【００６１】
レジスタ選択信号の過渡遷移は、配置配線などによって決まる遅延時間に依存し、設計段階で予想することは困難である。もし、上記のような過渡遷移が発生する場合で、レジスタ２の内容が秘密情報に関るものであれば、電力解析攻撃に対する脆弱性となる可能性がある。なぜならば、データ１および２（１０９，１１０）はＡＬＵ内部の多くの回路に入力されているので、その信号変化によって多くの回路が動作し、秘密情報に依存した大きな消費電力が発生するからである。
【００６２】
実施の形態１〜３で説明した演算装置では図６（Ｂ）のように回路が変更されている。しかし、この場合でも、切替制御信号１０１の遅延時間がレジスタ選択信号の遅延時間よりも大きい場合には、上記の問題（電力解析攻撃に対する脆弱性）が発生し得る。実施の形態４では、このような問題を抑制する手段を提供する。
【００６３】
［ＣＰＵの構成］
図１４は、実施の形態４によるＣＰＵの主要部の構成を概略的に示すブロック図である。図１５は、図１４のレジスタ群においてＡＬＵにデータを出力する部分の回路構成例を示す図である。なお、図１５ではデータ信号１（１０９）を出力する部分の回路構成が示されているが、データ信号２（１１０）を出力する部分の回路構成も同様である。
【００６４】
図１４を参照して、実施の形態４のＣＰＵ５Ｃに設けられたレジスタ群２Ａには、ゲーテッドクロック１１２Ａとともにシステムクロック１１２も入力される。図１５を参照して、レジスタ群２Ａのうちデータ信号１（１０９）を出力する部分は、ＯＲゲート４１とセレクタ４２の間にソースレジスタ（Ｄ−フリップフリップ）４３が挿入される点で図６（Ｂ）の場合と異なる。すなわち、実施の形態４のレジスタ群２Ａでは、ＡＬＵに出力する前の出力データ１，２（１０９，１１０）が、対応のソースレジスタ４３に一時的に保持される。ソースレジスタ４３は、ゲーテッドクロック１１２Ａではなく、システムクロック１１２に同期して動作する。セレクタ４２は、切替データ信号１０２とソースレジスタ４３に保持されているデータとを受け、切替制御信号１０１が活性化されているときには切替データ信号１０２を出力データ１（１０９）としてＡＬＵに出力し、切替制御信号１０１が活性化されていないときにはソースレジスタ４３に保持されているデータを出力データ１（１０９）としてＡＬＵに出力する。
【００６５】
図１４、図１５のその他の構成は図６（Ｂ）、図８の場合（すなわち、実施の形態２によるＣＰＵ５）と同じであるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
【００６６】
［ＣＰＵの動作、実施の形態４の効果］
図１６は、図１４、図１５に示すＣＰＵの動作を説明するためのタイミング図である。図１６のうち、システムクロック１１２、命令取込信号１１４、外部メモリから読み出されるメモリデータ１１３、命令レジスタ５３に保持されている命令データ、切替制御信号１０１、クロック抑制信号、およびゲーテッドクロック１１２Ａの各波形は、図１０の場合と同じであるので説明を繰り返さない。図１６では、さらに、レジスタ群２Ａのうち選択されたレジスタから読み出されたデータ、ソースレジスタ１（４３）に保持されているデータ、切替データ信号１０２、およびセレクタ４２からＡＬＵに出力されるデータ１が示されている。なお、データ１（１０９）を出力する部分に設けられたソースレジスタ４３をソースレジスタ１（４３）と記載する。
【００６７】
図１６の例では、命令１、命令２、および命令３の実行時のソースデータとして「ＡＡＡ」、「ＢＢＢ」、「ＣＣＣ」がそれぞれ用いられるものとする。切替制御信号１０１が非活性状態に切替わるときに（時刻ｔ３、ｔ６、ｔ８）、切替データ信号１０２が変化するものとする。
【００６８】
実施の形態４のＣＰＵの場合、図１６に示すように、ＡＬＵが実際に演算を実行する（システムクロックの）１クロックサイクル前（ｔ２〜ｔ３、ｔ５〜ｔ６、ｔ７〜ｔ８の各期間）で、ＡＬＵに出力されるデータ１は演算とは無関係なデータ（「Ｒ１」、「Ｒ２」、「Ｒ３」）になる。さらに、この期間に、演算で実際に使用するデータを格納しているレジスタが選択される。そして、次の（システムクロックの）クロックサイクルで、演算で実際に使用するデータがソースレジスタ１（４３）に格納され、このソースレジスタ１（４３）に格納されたデータがデータ１としてＡＬＵに出力される。
【００６９】
したがって、問題となっていた過渡遷移は、ソースレジスタ１（４３）より先（データ１およびＡＬＵ）には伝播しないため、秘密情報に依存した大きな消費電力が発生することがなくなる。このため、実施の形態４によれば、電力解析攻撃に対する耐性がいっそう向上する。
【００７０】
［変形例］
図１５に示したソースレジスタ４３は、実施の形態３のレジスタ群にも設けることができる。この場合、図１５の回路は図１７の回路のように変形される。
【００７１】
図１７は、図１５の変形例を示す回路図である。図１７を参照して、実施の形態３と４を組み合わせた場合には、ＯＲゲート４１の出力が、さらに第３の入力信号としてソースレジスタ４３を介さずにセレクタ４２Ａに直接入力されるようにする。そして、実行サイクルに休止相が挿入される特定の種類の命令の場合には、セレクタ４２Ａは、切替制御信号１０１に従って、実行サイクルの最初の１クロックサイクル（休止相）で切替データ信号１０２を出力し、続く稼動相でソースレジスタ４３に保持されている内容を出力する。特定種類以外の命令の場合（すなわち、休止相が挿入されない場合）には、セレクタ４２Ａは、ＯＲゲート４１の出力をデータ１としてＡＬＵに出力する。図１７のその他の点は図１５の場合と同じであるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
【００７２】
＜実施の形態５＞
［実施の形態５の課題］
実施の形態５によるＣＰＵ５Ｄは、ＣＰＵの動作モードをセキュアモード（Secure  Mode）と非セキュアモードとに切替えられるようにしたものである。セキュアモードでは、実行サイクルの最初の１クロックサイクル（休止相）において、演算装置の内部信号および出力信号の状態が演算とは無関係の状態に切替えられる。非セキュアモードの場合には、このような休止相が実行サイクルに挿入されない。
【００７３】
［ＣＰＵの構成および動作］
図１８は、実施の形態５によるＣＰＵの主要部の構成を概略的に示すブロック図である。図１９は、図１８のレジスタ群においてＡＬＵにデータを出力する部分の回路構成例を示す図である。なお、図１９ではデータ信号１（１０９）を出力する部分の回路構成が示されているが、データ信号２（１１０）を出力する部分の回路構成も同様である。
【００７４】
図１８に示すＣＰＵ５Ｄは、切替抑制信号１１５がレジスタ群２Ｂにさらに入力される点で図１４のＣＰＵ５Ｃと異なる。さらに、図１９に示すように、レジスタ群２Ｂにおいてデータ信号１（１０９）をＡＬＵに出力する部分では、ＯＲゲート４１の出力が第３の入力信号としてソースレジスタ４３を介さずにセレクタ４２Ｂに直接入力されるように変更されている。切替抑制信号１１５は、動作モードを指定する信号としてセレクタ４２Ｂにさらに入力される。切替抑制信号１１５は、たとえば、ＣＰＵ５Ｄ内に設けられた専用のレジスタの値に応じてＨレベルまたはＬレベルに切替わる１ビットの信号である。
【００７５】
セレクタ４２Ｂは、切替抑制信号１１５が非活性状態（たとえば、Ｌレベル）の場合には（セキュアモード）、実施の形態４のセレクタ４２と同様に動作する。すなわち、セレクタ４２Ｂは、切替制御信号１０１が活性化されているときには切替データ信号１０２を出力データ１（１０９）としてＡＬＵに出力し、切替制御信号１０１が活性化されていないときにはソースレジスタ４３に保持されているデータを出力データ１（１０９）としてＡＬＵに出力する。一方、セレクタ４２Ｂは、切替抑制信号１１５が活性状態（たとえば、Ｈレベル）の場合には（非セキュアモード）、ＯＲゲート４１の出力をデータ１としてＡＬＵに出力する。
【００７６】
［変形例］
図１９に示したソースレジスタ４３およびセレクタ４２Ｂは、実施の形態３のレジスタ群にも設けることができる。ただし、実施の形態３と５を組みあわせる場合には、切替抑制信号１１５が活性状態（非セキュアモード）の場合、および休止相が挿入される特定種類の命令以外の命令がフェッチされた場合の両方で、ＯＲゲート４１の信号をデータ信号１（１０９）としてＡＬＵに出力する必要がある。具体的には、図１９の切替抑制信号１１５に代えて、図１２で説明したクロックゲート部６０Ａに設けられる簡単なデコード回路によるデコード結果（またはデコード結果を反転した信号）と切替抑制信号１１５との論理和を、セレクタ４２Ｂに入力する。
【００７７】
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【００７８】
１  ＡＬＵ、２，２Ａ，２Ｂ  レジスタ群、３  演算装置、４  制御信号生成部（制御装置）、５，５Ａ，５Ｃ，５Ｄ  ＣＰＵ、６  メモリ、５７  切替データ信号生成部、３１，３４，３５，３８，４２，４２Ａ，４２Ｂ  セレクタ、５１  データアクセス部、５２  命令フェッチ部、５３  命令レジスタ、５４  命令デコード部、５５  状態制御部、６０，６０Ａ  クロックゲート部、１０１  切替制御信号、１０２  切替データ信号、１１２  システムクロック、１１２Ａ  ゲーテッドクロック、１１３  メモリデータ、１１４  命令取込信号、１１５  切替抑制信号。
【図１】
2014049891.tif 000003
【図２】
2014049891.tif 000004
【図３】
2014049891.tif 000005
【図４】
2014049891.tif 000006
【図５】
2014049891.tif 000007
【図６】
2014049891.tif 000008
【図７】
2014049891.tif 000009
【図８】
2014049891.tif 000010
【図９】
2014049891.tif 000011
【図１０】
2014049891.tif 000012
【図１１】
2014049891.tif 000013
【図１２】
2014049891.tif 000014
【図１３】
2014049891.tif 000015
【図１４】
2014049891.tif 000016
【図１５】
2014049891.tif 000017
【図１６】
2014049891.tif 000018
【図１７】
2014049891.tif 000019
【図１８】
2014049891.tif 000020
【図１９】
2014049891.tif 000021