(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0013】
以下、各実施の形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰返さない。
【0014】
<実施の形態1>
[CPUの構成]
図1は、実施の形態1によるCPUの主要部の構成を概略的に示すブロック図である。
図1を参照して、CPU5は、演算装置3と、制御信号生成部(制御装置)4とを含む。演算装置3は、複数のレジスタ1〜N(2_0〜2_N)を含むレジスタ群2と算術論理演算ユニット(ALU:Arithmetic Logic Unit)1とを含む。
【0015】
制御信号生成部4へ入力される主な信号には、メモリデータ113とシステムクロック112とがある。メモリデータ113は、CPU5が外部のメモリ(記憶装置)から読み出した命令およびデータである。システムクロック112は、CPU5内部の多くの回路に供給されるクロック信号である。制御信号生成部4およびレジスタ群2は、外部から入力されたシステムクロック112に同期して動作する。
【0016】
制御信号生成部4は、ALU1を使用する命令(たとえば、算術演算命令、論理演算命令)の実行時には、レジスタ群2に格納された複数のデータソースから2組のデータソース(データ1、データ2)を選択する。ALU1は、それらのデータ1,2を入力データとして用いて命令で指定された演算を実行する。
【0017】
制御信号生成部4は、上記の演算の実行の際に演算装置3を制御するために、多数の制御信号を演算装置3に出力する。具体的には、まず、データソース選択信号1,2(104,105)に従って、(N+1)個のレジスタ2_0〜2_Nの中から1または複数(通常2個)が選択され、選択されたレジスタに格納されたソースデータが入力データ(データ1(109)およびデータ2(110))としてALU1に出力される。ALU1内部の複数の演算ブロック(図示省略)はレジスタ群2から供給された2個の入力データ109,110に対して複数の演算を並行して実行し、演算種類選択信号100で指定された演算種類に該当する演算結果111を出力する。ALUの設計によっては、ALU1の内部の複数の演算ブロックのうち、演算種類選択信号100で指定された演算種類に該当する演算ブロックのみに有効なデータが入力されることもある。ALU1が出力した演算結果111は、演算装置3以外で用いられることもあるし、演算装置3内のレジスタ群2に書き込まれることもある。レジスタ群2への書き込みは、書込レジスタ選択信号106および書込イネーブル信号107によって制御される。レジスタ群2には、さらに、リセット信号103が入力される。
【0018】
図1の演算装置3が従来の演算装置と異なる点は、ALU1およびレジスタ群2に対して切替制御信号101および切替データ信号102が入力されている点である。切替制御信号101は、活性状態(アクティブ)と非活性状態(インアクティブ)とを有する1ビットの信号である。切替データ信号102は、演算装置3による演算に用いられるソースデータとは無関係な複数ビットの信号である。
【0019】
図2は、
図1のCPUのより詳細な構成を示すブロック図である。
図2では、アドレス信号およびデータ信号が太線の矢印で示され、制御信号が細線の矢印で示されている。
図2を参照して、
図1の制御信号生成部4は、データアクセス部51、命令フェッチ部52、命令デコード部54、および状態制御部55を含む。
【0020】
データアクセス部51は、バスインタフェース部50を介して外部のメモリ6と接続され、メモリ6内の指定されたアドレスにデータを書き込んだり、指定されたアドレスからデータを読み出したりする。命令フェッチ部52は、バスインタフェース部50を介して外部のメモリ6と接続され、メモリ6内の指定されたアドレスから命令を読み出す。読み出した命令は命令レジスタ53に格納される。
【0021】
命令デコード部54は、命令レジスタ53の内容をデコードし、命令の種類(オペコード)および命令で使用するデータ(オペランド)などを解釈する。
【0022】
状態制御部55は、CPUの状態を保持し、現在の状態と命令デコード結果などに基づいて状態更新および各種制御信号の生成を行なう。各種制御信号は、演算装置3を始めCPU5Aが含むさまざまな回路部分56を制御するための信号である。
【0023】
CPU5にはさらに切替データ信号生成部57が設けられる。切替データ信号生成部57は切替データ信号102を生成する。切替データ信号生成部57として、たとえば、乱数発生源や擬似乱数生成器を用いることができる。切替データ信号生成部57は、演算実行時のシステムクロックやタイマの値を利用して切替データ信号102を生成するように構成されていてもよい。その他、切替データ信号生成部57として、専用のレジスタまたはシフトレジスタを設けてもよい。専用のレジスタまたはシフトレジスタの記憶内容が切替データ信号102として使用される。専用のレジスタまたはシフトレジスタは、
図1のレジスタ群2の内部に設けられていてもよい。
【0024】
[個々の回路素子の変更点]
実施の形態1の演算装置3は、従来の設計を大幅に変更することなく、演算装置3の内部信号および出力信号の状態を演算とは無関係の状態に切替え可能なように構成されている。具体的には、特開2011−234312号公報(特許文献1)に記載されているように、演算装置を構成する論理ゲートおよびフリップフロップなどの回路素子のうち少なくとも一部の回路素子が、切替制御信号101に応じて出力信号を切替データ信号102に切替え可能なように構成される。これによって、切替制御信号101が活性化(アサート)された状態では、演算装置3の内部信号および出力信号の状態を演算とは無関係な状態に設定できる。一方、切替制御信号101が非活性化(ネゲート)された状態では、演算装置3の動作は、電力解析攻撃への防御が施されていない従来の演算装置と同じである。以下、
図3〜
図6を参照して、回路素子の変更点を簡単に説明する。
【0025】
図3は、ANDゲートの設計方法を説明するための図である。
図4は、セレクタの設計方法を説明するための図である。
図5は、D−フリップフロップの設計方法を説明するための図である。
図3〜
図5を参照して、(A)は従来回路(設計変更前)を示し、(B)は設計変更後を示す。演算装置3は、典型的には以下のステップで設計される。
【0026】
(1)従来技術によるALUおよびレジスタ群の回路を設計する。
(2)演算装置を構成する論理ゲート(
図3のANDゲート30、
図4のセレクタ34)およびフリップフロップ(
図5のD-フリップフロップ37)などの一部の回路素子の後段に直列にセレクタ31,35,38を挿入する。
【0027】
(3)上記(2)で挿入したセレクタ31,35,38に切替制御信号101および切替データ信号102を入力する。セレクタ31,35,38は、切替制御信号101が活性化されているときには対応の回路素子の出力信号に代えて、切替データ信号102を出力する。以上のステップによって、変更後の回路素子32,36,39が完成する。
【0028】
図6は、
図1のレジスタ群においてデータ信号をALUに出力する部分の回路構成例を示す図である。
図6(A)は従来の回路構成を示し、
図6(B)は変更後の回路構成を示す。なお、
図6ではデータ信号1(109)を出力する部分の回路構成が示されているが、データ信号2(110)を出力する部分の回路構成も同様である。
【0029】
図6(A)を参照して、データ信号1(109)を出力する部分は、レジスタ0〜N(2_0〜2_N)の出力データDR_0〜DR_Nがそれぞれ入力されるANDゲート40_0〜40_Nと、各ANDゲート40の出力が入力されるORゲート41とを含む。各ANDゲート40の他方の入力ノードには対応のデータソース選択信号104(104_0〜104_Nのいずれか)が入力される。
【0030】
図6(B)を参照して、設計変更後の回路では、ORゲート41の出力ノードにセレクタ(選択回路)42がさらに接続される。ここで、セレクタ42は、ORゲート41の出力と、切替制御信号101と、切替データ信号102とを受ける。セレクタ42は、切替制御信号101がアサートされると、ORゲート41の出力信号に代えて切替データ信号102をデータ信号1(109)として出力する。
【0031】
[CPUの動作]
図7は、
図1のCPUの動作を説明するためのタイミング図である。
図7では、上から順に、システムクロック112、
図2のメモリ6から読み出されるメモリデータ113(命令データ、読出データ108)、
図2の命令レジスタ53の保持されている命令データ、および切替制御信号101の波形が示されている。
【0032】
図7の場合、命令1は時刻t1からt2までの期間(フェッチサイクル)でメモリから読み出され、時刻t3からt5までの期間(実行サイクル)で実行される。命令2は時刻t4からt5までの期間(フェッチサイクル)でメモリから読み出され、時刻t5からt7までの期間(実行サイクル)で実行される。命令3は時刻t5からt7までの期間(フェッチサイクル)でメモリから読み出され、時刻t7からt9までの期間(実行サイクル)で実行される。
【0033】
図7において特徴的な点は、
図1の制御信号生成部4から出力される切替制御信号101が、各実行サイクルの最初の1クロックサイクルにおいて活性状態(Hレベル)になる点である。これによって、各実行サイクルの最初の1クロックサイクルの期間、演算装置3の内部信号および出力信号の状態が演算とは無関係な状態になる。レジスタ群2の選択されたレジスタに格納されているソースデータを用いた演算は、次のクロックサイクル以降で実行される。以下、各実行サイクルにおいて、最初の1クロックサイクルの期間を休止相と称し、次のクロックサイクル以降を稼動相と称する。
【0034】
[実施の形態1の効果]
上記のCPU5の構成および動作によれば、各実行サイクルのうち最初の1クロックサイクルを休止相とすることによって、電力解析攻撃への耐性を高めることができる。ALU1を使用する命令の場合には稼動相の直前に休止相が自動的に挿入されるので、プログラムを変更する必要がない。従来のCPUの動作との相違点は、稼動相の直前に1クロックサイクルの休止相が挿入される点にあるので(すなわち、
図7において休止相の1クロックサイクルを削除すれば、従来のCPUの動作と同じになる)、システムクロックの周波数を従来よりも低下させる必要はない。
【0035】
<実施の形態2>
[CPUの構成]
図8は、実施の形態2によるCPUの主要部の構成を概略的に示すブロック図である。
図8を参照して、実施の形態2によるCPU5Aは、クロックゲート部60をさらに含む点で実施の形態1によるCPU5と異なる。実施の形態2の場合、制御信号生成部4およびレジスタ群2は、システムクロック112ではなく、クロックゲート部60によって生成されたゲーテッドクロック112Aに基づいて動作する。
【0036】
図9は、
図8の制御信号生成部の主要部の構成を概略的に示すブロック図である。
図10は、
図8のCPUの動作を説明するためのタイミング図である。
図10では、上から順に、システムクロック112、命令取込信号114、外部メモリから読み出されるメモリデータ113、命令レジスタ53に保持されている命令データ、切替制御信号101、クロック抑制信号、およびゲーテッドクロック112Aの各波形が示されている。
【0037】
図9、
図10を参照して、制御信号生成部4は、命令フェッチ部52、命令デコード部54、および状態制御部55を含む。これらの構成要素の動作の概略については既に
図2で説明したので、ここでは説明を繰り返さない。特に、命令フェッチ部52は、システムクロック112(正確にはゲーテッドクロック112A)の立ち上がりのタイミングにおいて命令取込信号114がHレベル(“1”)である場合、メモリデータ113(この場合、命令データ)を命令レジスタ53に格納する。状態制御部55は、外部メモリから読み出したメモリデータが命令であるかデータであるかを認識しており、命令の場合には命令取込信号114をHレベルにして命令レジスタ53に読み出した命令データを格納する。
【0038】
クロックゲート部60は、システムクロック112を受け、さらに制御信号生成部4から命令取込信号114を受ける。
図10に示すように、クロックゲート部60は、命令取込信号114をシステムクロックの立ち上がりタイミングで内部のレジスタに取り込む。このレジスタの出力が
図8の切替制御信号101となる。
【0039】
さらに、切替制御信号101をシステムクロック112の立下がりタイミングでラッチしたものがクロック抑制信号となる。クロックゲート部60は、クロック抑制信号とシステムクロック112の論理積をとり、その結果をゲーテッドクロック112Aとして他の回路(制御信号生成部4およびレジスタ群2)に供給する。
【0040】
なお、
図10では、クロック抑制信号のシステムクロック112に対する遅延のみを強調して図示しているが、他の信号(切替制御信号101、ゲーテッドクロック112A)もシステムクロック112に対して遅延している。
【0041】
[CPUの動作]
次に、
図8〜
図10を参照して、実施の形態2によるCPU5Aの動作について説明する。
【0042】
命令レジスタ53が更新された(システムクロックの)クロックサイクル(
図10のt2〜t3、t5〜t6、t7〜t8の各期間)では、切替制御信号101がHレベルとなるため、
図8の演算装置3の内部状態(内部信号および出力信号の状態)が演算とは無関係の状態となる。この期間を休止相と呼ぶ。命令レジスタ53に格納されている命令が実行される(システムクロックの)クロックサイクルのうち、休止相を除く期間(
図10のt3〜t5、t6〜t7、t8以降の各期間)を稼動相と呼ぶ。演算装置3は、休止相では意味の無いデータに対して演算を実行し、稼動相の期間では、レジスタ群2の選択されたレジスタに格納されたデータに基づいて演算を実行する。
【0043】
ゲーテッドクロック112Aは、休止相の次の(システムクロックの)1クロックサイクルの間(
図10のt3〜t4、t6〜t7、t8〜t9の各期間)、停止状態となる信号である。ゲーテッドクロック112Aの供給を受ける回路(レジスタ群2、制御信号生成部4)では、休止相直後の稼動相においてクロックが停止しているため、演算装置3が意味の無いデータに対して行なった演算結果が間違って使用されることはない。休止相直後の稼動相では命令フェッチも休止するので、メモリアドレスは変化せず、メモリアドレスに基づいてメモリから読み出されるメモリデータ113も変化しない。
【0044】
一方、制御信号生成部4は、休止相において、正しく各種の制御信号を生成する。制御信号は、次にクロックが供給されるまでその状態が保持されるので、休止相直後の稼動相でクロックが停止していても問題とならない。
【0045】
図11は、
図10の比較例として従来のCPUの動作を説明するための図である。すなわち、
図11では、
図8のクロックゲート部60が設けられておらず、制御信号生成部4およびレジスタ群2がシステムクロック112に基づいて動作する場合であり、さらに、切替制御信号101が常に非活性化されている場合におけるCPUの動作が示されている。
図11において、外部メモリから取り込まれるメモリデータ113の順番は、
図10の場合と同じにしている。
【0046】
図11を参照して、たとえば、命令2が演算命令であるとすると、命令2は、時刻t3からt4までの1クロックサイクルの期間(フェッチサイクル)でフェッチされ、次の時刻t4からt5までの1クロックサイクルの期間(実行サイクル)で実行される。そして、次の時刻t5からt6までの1クロックサイクルの間に、命令2による演算結果がレジスタ群の選択されたレジスタに書き込まれる。この時刻t5からt6までの期間は、次の命令3の実行サイクルとなっている。
【0047】
これに対して、
図10に示す実施の形態2の場合には、命令2が休止相(時刻t5からt6までの期間)と稼動相(時刻t6からt7までの期間)の2クロックサイクルで実行される。休止相では無意味なデータを用いて演算が行なわれる。次の稼動相ではゲーテッドクロック112Aが停止状態であるため、休止相の演算結果はレジスタ群には書き込まれない。制御信号は休止相の間に生成されてその状態が次の稼動相でも保持されているため、正規のデータを用いた演算が稼動相で実行される。次の時刻t7からt8までの期間に、命令2による演算結果がレジスタ群2に書き込まれる。この期間は次の命令3の休止相になっている。
【0048】
このようにゲーテッドクロック112Aは、命令の実行時間(実行サイクル)を、システムクロックの1クロックサイクル分増加させるために利用されている。ゲーテッドクロック112Aによって、休止相の直後の稼動相では命令フェッチも行なわれず、演算結果の書込も行なわれないため、CPUの動作の整合性が保たれている。
【0049】
[実施の形態2の効果]
実施の形態2のCPU5Aによって命令が実行されるときの特徴をまとめると次のとおりである。
【0050】
休止相(実行サイクルのうち、最初の1クロックサイクル)では、演算命令の実行に使用されるデータは、レジスタ群2に格納されている本来のソースデータとは無関係なものに切替えられる。休止相におけるそれ以外の回路動作(制御信号の生成など)は基本的には従来と同じである。
【0051】
休止相から次の稼動相に切替わるとき、切替制御信号101がLレベルに切替わるので、ALU1の入力が正規のソースデータに切替わる。このとき、ゲーテッドクロック112Aによってレジスタ群2の動作は停止しているので、休止相における無意味な演算の結果がレジスタ群2に格納されることはない。休止相で生成済み制御信号(たとえば、演算種類選択信号100、データソース選択信号104,105、書込レジスタ選択信号106など)は、休止相直後の稼動相でも保持されている。このため、正規のソースデータを用いた演算がALU1で実行され、その結果がその次のクロックサイクルでレジスタ群2などに格納される。
【0052】
このように実施の形態2によるCPU5Aによれば、ゲーテッドクロックを用いるという簡単な制御によって、本来の演算装置3の動作を損なうこと無く、演算装置3の内部信号および出力信号の状態を演算とは無関係の状態にすることが可能となる。この場合、プログラムに特別な命令を挿入したり、クロック周波数を下げたりする必要はない。
【0053】
<実施の形態3>
[実施の形態3の課題]
命令の種類によっては、電力解析攻撃に対する耐性を高めるために、演算装置の内部信号および出力信号の状態を演算とは無関係の状態にする必要がないものもあり得る。実施の形態1,2の場合には、そのような種類の命令まで含めた全ての命令で休止相が発生するため、命令の実行時間が増加する。そこで、実施の形態3では、電力解析攻撃に対する防御が必要な命令の実行サイクルにのみ休止相を挿入することによって命令の実行時間を削減する手段を提供する。
【0054】
[CPUの構成]
図12は、実施の形態3によるCPUにおける制御信号生成部およびクロックゲート部の構成を示すブロック図である。
【0055】
図12のクロックゲート部60Aは、フェッチした命令データがさらに入力される点で
図9のクロックゲート部60と異なる。クロックゲート部60Aは、システムクロック112の立ち上がりタイミングにおいて、命令取込信号114が活性状態(Hレベル)であり、かつ、命令データの種類(オペコード)が予め決まったものである場合(または、予め決まった種類でない場合)にのみ、切替制御信号101を活性状態(Hレベル)にする。このような信号処理は、たとえば、フェッチした命令データのオペコードをデコードする簡単なデコード回路をクロックゲート部60Aに追加し、デコード結果と命令取込信号114の論理積をシステムクロックの立上がりのタイミングでラッチした信号を切替制御信号101とすることによって実現できる。
【0056】
図12のその他の点は
図9の場合と同様であるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。たとえば、
図9のクロックゲート部60と
図12のクロックゲート部60Aとでは、クロック抑制信号およびゲーテッドクロック112Aの生成方法は同じである。ただし、前述のように切替制御信号101の生成方法が異なるので、切替制御信号101に基づいて生成されるクロック抑制信号およびゲーテッドクロック112Aの波形は、
図9のクロックゲート部60の場合とは異なるものになる。
【0057】
[CPUの動作]
図13は、実施の形態3によるCPUの動作を説明するためのタイミング図である。
図13では、
図10の場合と同様に上から順に、システムクロック112、命令取込信号114、外部メモリから読み出されるメモリデータ113、命令レジスタ53に保持されている命令データ、切替制御信号101、クロック抑制信号、およびゲーテッドクロック112Aの各波形が示されている。
【0058】
図13のタイミング図に示された各命令は
図10の場合と同じである。そのうち命令2および命令4は、実行サイクル時に切替制御信号101を活性状態(Hレベル)にする必要のない特定種類の命令であるとする。この結果、命令2および命令4の実行時には休止相が挿入されないので、命令2および命令4の実行時間が
図10の場合に比べるとシステムクロックの1サイクル分短くなる。
【0059】
<実施の形態4>
[実施の形態4の課題]
従来技術による演算装置では、
図6(A)のような回路によって複数のレジスタ1〜N(2_0〜2_N)に格納されたデータのうちALUに入力されるデータ1および2(109,110)が選択される。
【0060】
図6(A)の回路において、たとえば、レジスタ3のデータが選択される状態からレジスタ0のデータが選択される状態に切替わるとき、レジスタの選択信号の過渡遷移によって一時的にレジスタ2のデータがデータ1として出力される可能性がある。具体的に、レジスタ番号を3ビットで表わすとする。そうすると、フェッチされる命令データのうちレジスタ番号を示すフィールドの値が011から000に変わる。このとき、命令デコーダに入力される信号は、信号遅延によって011、010、000と遷移する可能性があり、010という過渡状態でレジスタ2が選択されることがあり得る。
【0061】
レジスタ選択信号の過渡遷移は、配置配線などによって決まる遅延時間に依存し、設計段階で予想することは困難である。もし、上記のような過渡遷移が発生する場合で、レジスタ2の内容が秘密情報に関るものであれば、電力解析攻撃に対する脆弱性となる可能性がある。なぜならば、データ1および2(109,110)はALU内部の多くの回路に入力されているので、その信号変化によって多くの回路が動作し、秘密情報に依存した大きな消費電力が発生するからである。
【0062】
実施の形態1〜3で説明した演算装置では
図6(B)のように回路が変更されている。しかし、この場合でも、切替制御信号101の遅延時間がレジスタ選択信号の遅延時間よりも大きい場合には、上記の問題(電力解析攻撃に対する脆弱性)が発生し得る。実施の形態4では、このような問題を抑制する手段を提供する。
【0063】
[CPUの構成]
図14は、実施の形態4によるCPUの主要部の構成を概略的に示すブロック図である。
図15は、
図14のレジスタ群においてALUにデータを出力する部分の回路構成例を示す図である。なお、
図15ではデータ信号1(109)を出力する部分の回路構成が示されているが、データ信号2(110)を出力する部分の回路構成も同様である。
【0064】
図14を参照して、実施の形態4のCPU5Cに設けられたレジスタ群2Aには、ゲーテッドクロック112Aとともにシステムクロック112も入力される。
図15を参照して、レジスタ群2Aのうちデータ信号1(109)を出力する部分は、ORゲート41とセレクタ42の間にソースレジスタ(D−フリップフリップ)43が挿入される点で
図6(B)の場合と異なる。すなわち、実施の形態4のレジスタ群2Aでは、ALUに出力する前の出力データ1,2(109,110)が、対応のソースレジスタ43に一時的に保持される。ソースレジスタ43は、ゲーテッドクロック112Aではなく、システムクロック112に同期して動作する。セレクタ42は、切替データ信号102とソースレジスタ43に保持されているデータとを受け、切替制御信号101が活性化されているときには切替データ信号102を出力データ1(109)としてALUに出力し、切替制御信号101が活性化されていないときにはソースレジスタ43に保持されているデータを出力データ1(109)としてALUに出力する。
【0065】
図14、
図15のその他の構成は
図6(B)、
図8の場合(すなわち、実施の形態2によるCPU5)と同じであるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
【0066】
[CPUの動作、実施の形態4の効果]
図16は、
図14、
図15に示すCPUの動作を説明するためのタイミング図である。
図16のうち、システムクロック112、命令取込信号114、外部メモリから読み出されるメモリデータ113、命令レジスタ53に保持されている命令データ、切替制御信号101、クロック抑制信号、およびゲーテッドクロック112Aの各波形は、
図10の場合と同じであるので説明を繰り返さない。
図16では、さらに、レジスタ群2Aのうち選択されたレジスタから読み出されたデータ、ソースレジスタ1(43)に保持されているデータ、切替データ信号102、およびセレクタ42からALUに出力されるデータ1が示されている。なお、データ1(109)を出力する部分に設けられたソースレジスタ43をソースレジスタ1(43)と記載する。
【0067】
図16の例では、命令1、命令2、および命令3の実行時のソースデータとして「AAA」、「BBB」、「CCC」がそれぞれ用いられるものとする。切替制御信号101が非活性状態に切替わるときに(時刻t3、t6、t8)、切替データ信号102が変化するものとする。
【0068】
実施の形態4のCPUの場合、
図16に示すように、ALUが実際に演算を実行する(システムクロックの)1クロックサイクル前(t2〜t3、t5〜t6、t7〜t8の各期間)で、ALUに出力されるデータ1は演算とは無関係なデータ(「R1」、「R2」、「R3」)になる。さらに、この期間に、演算で実際に使用するデータを格納しているレジスタが選択される。そして、次の(システムクロックの)クロックサイクルで、演算で実際に使用するデータがソースレジスタ1(43)に格納され、このソースレジスタ1(43)に格納されたデータがデータ1としてALUに出力される。
【0069】
したがって、問題となっていた過渡遷移は、ソースレジスタ1(43)より先(データ1およびALU)には伝播しないため、秘密情報に依存した大きな消費電力が発生することがなくなる。このため、実施の形態4によれば、電力解析攻撃に対する耐性がいっそう向上する。
【0070】
[変形例]
図15に示したソースレジスタ43は、実施の形態3のレジスタ群にも設けることができる。この場合、
図15の回路は
図17の回路のように変形される。
【0071】
図17は、
図15の変形例を示す回路図である。
図17を参照して、実施の形態3と4を組み合わせた場合には、ORゲート41の出力が、さらに第3の入力信号としてソースレジスタ43を介さずにセレクタ42Aに直接入力されるようにする。そして、実行サイクルに休止相が挿入される特定の種類の命令の場合には、セレクタ42Aは、切替制御信号101に従って、実行サイクルの最初の1クロックサイクル(休止相)で切替データ信号102を出力し、続く稼動相でソースレジスタ43に保持されている内容を出力する。特定種類以外の命令の場合(すなわち、休止相が挿入されない場合)には、セレクタ42Aは、ORゲート41の出力をデータ1としてALUに出力する。
図17のその他の点は
図15の場合と同じであるので、同一または相当する部分には同一の参照符号を付して説明を繰り返さない。
【0072】
<実施の形態5>
[実施の形態5の課題]
実施の形態5によるCPU5Dは、CPUの動作モードをセキュアモード(Secure Mode)と非セキュアモードとに切替えられるようにしたものである。セキュアモードでは、実行サイクルの最初の1クロックサイクル(休止相)において、演算装置の内部信号および出力信号の状態が演算とは無関係の状態に切替えられる。非セキュアモードの場合には、このような休止相が実行サイクルに挿入されない。
【0073】
[CPUの構成および動作]
図18は、実施の形態5によるCPUの主要部の構成を概略的に示すブロック図である。
図19は、
図18のレジスタ群においてALUにデータを出力する部分の回路構成例を示す図である。なお、
図19ではデータ信号1(109)を出力する部分の回路構成が示されているが、データ信号2(110)を出力する部分の回路構成も同様である。
【0074】
図18に示すCPU5Dは、切替抑制信号115がレジスタ群2Bにさらに入力される点で
図14のCPU5Cと異なる。さらに、
図19に示すように、レジスタ群2Bにおいてデータ信号1(109)をALUに出力する部分では、ORゲート41の出力が第3の入力信号としてソースレジスタ43を介さずにセレクタ42Bに直接入力されるように変更されている。切替抑制信号115は、動作モードを指定する信号としてセレクタ42Bにさらに入力される。切替抑制信号115は、たとえば、CPU5D内に設けられた専用のレジスタの値に応じてHレベルまたはLレベルに切替わる1ビットの信号である。
【0075】
セレクタ42Bは、切替抑制信号115が非活性状態(たとえば、Lレベル)の場合には(セキュアモード)、実施の形態4のセレクタ42と同様に動作する。すなわち、セレクタ42Bは、切替制御信号101が活性化されているときには切替データ信号102を出力データ1(109)としてALUに出力し、切替制御信号101が活性化されていないときにはソースレジスタ43に保持されているデータを出力データ1(109)としてALUに出力する。一方、セレクタ42Bは、切替抑制信号115が活性状態(たとえば、Hレベル)の場合には(非セキュアモード)、ORゲート41の出力をデータ1としてALUに出力する。
【0076】
[変形例]
図19に示したソースレジスタ43およびセレクタ42Bは、実施の形態3のレジスタ群にも設けることができる。ただし、実施の形態3と5を組みあわせる場合には、切替抑制信号115が活性状態(非セキュアモード)の場合、および休止相が挿入される特定種類の命令以外の命令がフェッチされた場合の両方で、ORゲート41の信号をデータ信号1(109)としてALUに出力する必要がある。具体的には、
図19の切替抑制信号115に代えて、
図12で説明したクロックゲート部60Aに設けられる簡単なデコード回路によるデコード結果(またはデコード結果を反転した信号)と切替抑制信号115との論理和を、セレクタ42Bに入力する。
【0077】
今回開示された実施の形態はすべての点で例示であって制限的なものでないと考えられるべきである。この発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。