(57)【要約】【課題】ＣＰＵとコプロセッサとを備える半導体装置において、ＣＰＵとコプロセッサを排他的に動作させて低消費電力化した場合にも、セキュリティ性能を低下させない。【解決手段】ＣＰＵと、タイマ割り込みを発生するタイマと、コプロセッサとを備える半導体装置であって、以下のように構成される。コプロセッサは、演算器と、演算制御回路と、演算器の入出力データを外部からの攻撃から保護するセキュリティ回路と、停止起動制御回路とを含んで構成される。コプロセッサによる演算処理の実行中にタイマ割り込みが発生したとき、停止起動制御回路は、セキュリティ回路の動作を継続させたまま、演算器と演算制御回路の動作を停止させる。【選択図】図１
2014147010.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、タイマ割り込みを発生するタイマと、コプロセッサとを備える半導体装置であって、
前記コプロセッサは、演算器と、前記演算器を制御する演算制御回路と、前記演算器の入出力データを外部からの攻撃から保護するセキュリティ回路と、停止起動制御回路とを含んで構成され、
前記コプロセッサによる演算処理の実行中に前記タイマ割り込みが発生したとき、前記停止起動制御回路は、前記セキュリティ回路の動作を継続させたまま、前記演算器と前記演算制御回路の動作を停止させる、半導体装置。
【請求項２】
請求項１において、前記セキュリティ回路は、前記演算器の入出力データをマスクするための乱数を発生する、乱数発生回路を含んで構成される、半導体装置。
【請求項３】
請求項２において、前記セキュリティ回路は、さらに、前記乱数発生回路による乱数発生状態を監視する、乱数発生状態監視回路を含んで構成される、半導体装置。
【請求項４】
請求項１において、前記半導体装置は、前記コプロセッサによってアクセス可能なメモリをさらに備え、
前記停止起動制御回路は、前記コプロセッサによる演算処理の実行中の前記タイマ割り込みが発生したとき、前記コプロセッサによる前記メモリへのアクセスが完了した後に、前記演算器と前記演算制御回路の動作を停止させる、半導体装置。
【請求項５】
請求項４において、前記半導体装置は、前記タイマから発行されるタイマ割り込み信号が入力され、前記ＣＰＵに対してＣＰＵ割り込み信号を出力する割り込み制御回路をさらに備え、
前記演算制御回路は前記メモリに対して、前記コプロセッサによる前記メモリへのアクセスに際して、リードコマンドまたはライトコマンドを発行し、アクセスしないときにＮＯＰコマンドを発行可能に構成され、
前記停止起動制御回路は、前記コプロセッサによる演算処理の実行中の前記タイマ割り込みが発生したとき、前記ＮＯＰコマンドが連続して発行された後に、前記演算器と前記演算制御回路の動作を停止させる、半導体装置。
【請求項６】
請求項５において、前記半導体装置は、前記タイマ割り込みに際して前記タイマから発行されるタイマ割り込み信号が入力され、前記停止起動制御回路から中断許可信号が入力され、前記ＣＰＵに対してＣＰＵ割り込み信号を出力する割り込み制御回路をさらに備え、
前記割り込み制御回路は、前記中断許可信号によって前記タイマ割り込み信号をマスクすることにより、前記ＣＰＵ割り込み信号の出力をマスク可能に構成され、
前記停止起動制御回路は、前記コプロセッサによる演算処理の実行中の前記タイマ割り込みが発生したとき、前記中断許可信号を中断禁止状態にし、前記ＮＯＰコマンドが連続して発行された後に、前記中断許可信号を中断許可状態にする、半導体装置。
【請求項７】
請求項４において、前記セキュリティ回路は、前記メモリに保持されるデータが改変されたことを監視する、メモリ監視回路を含んで構成される、半導体装置。
【請求項８】
請求項７において、前記メモリは、格納するデータにパリティまたは誤り検出符号を付与し、格納されたデータに付与されたパリティまたは誤り検出符号の正当性を検証する機能を備え、
前記メモリ監視回路は、前記正当性の検証結果が入力され、正当性が損なわれたときに前記ＣＰＵに対して通知可能に構成される、半導体装置。
【請求項９】
請求項１において、前記演算器と前記演算制御回路は、出力を入力にフィードバックすることによって保持する値の更新を抑制可能な記憶回路を備え、
前記コプロセッサによる演算処理の実行中に前記タイマ割り込みが発生したとき、前記停止起動制御回路は、前記記憶回路に保持される値の更新を抑制することによって、前記演算器と前記演算制御回路の動作を停止させる、半導体装置。
【請求項１０】
請求項４において、前記演算器と前記演算制御回路と前記セキュリティ回路と前記メモリとには、同一系統のクロックが供給され、
前記演算器と前記演算制御回路は、前記クロックが入力され、出力を入力にフィードバックすることによって保持する値の更新を抑制可能な記憶回路を備え、
前記コプロセッサによる演算処理の実行中の前記タイマ割り込みが発生したとき、前記クロックの供給が継続されることにより、前記セキュリティ回路の動作が継続され、前記コプロセッサによる前記メモリへのアクセスが完了した後に、前記停止起動制御回路は、前記記憶回路に保持される値の更新を抑制することによって、前記演算器と前記演算制御回路の動作を停止させる、半導体装置。
【請求項１１】
請求項１０において、前記コプロセッサによる前記メモリへの前記アクセスが完了した後に、前記クロックの周波数を低下させる、半導体装置。
【請求項１２】
請求項１１において、前記半導体装置は、前記クロックを供給するクロック発生回路と、前記タイマから発行されるタイマ割り込み信号が入力され、前記停止起動制御回路から中断許可信号が入力され、前記ＣＰＵに対してＣＰＵ割り込み信号を出力する割り込み制御回路とをさらに備え、
前記割り込み制御回路は、前記中断許可信号によって前記タイマ割り込み信号をマスクすることにより、前記ＣＰＵ割り込み信号の出力をマスク可能に構成され、
前記演算制御回路は前記メモリに対して、前記コプロセッサによる前記メモリへのアクセスに際して、リードコマンドまたはライトコマンドを発行し、アクセスしないときにＮＯＰコマンドを発行可能に構成され、
前記停止起動制御回路は、前記コプロセッサによる演算処理の実行中の前記タイマ割り込みが発生したとき、前記中断許可信号を中断禁止状態にし、前記ＮＯＰコマンドが所定回数連続して発行された後に、前記中断許可信号を中断許可状態にし、
前記クロック発生回路は、前記中断許可信号が中断許可状態のときに、入力されているクロックソースを分周することによって前記クロックの周波数を低下させる、半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、セキュリティ性能の高い半導体装置に関し、特に低消費電力化した場合にもセキュリティ性能を低下させないセキュアマイコンに好適に利用できるものである。
【背景技術】
【０００２】
非接触通信機能を有するセキュアマイコンは、通信性能向上のため低消費電力モードにより動作させる必要がある。電池を搭載しない非接触型IC（Integrated Circuit）カードでは、通信のための電波の搬送波（キャリア）を検波して動作用の電源を生成しているため、通信用の電力と演算処理用の電力の和が生成した電源の電力を超えることができない。このため、演算処理用の電力の増加が、通信用に使用可能な電力を制限することとなり、通信距離が短縮されるなどの弊害を生じさせるからである。このようなICカードに搭載されるセキュアマイコンには、CPU（Central Processing Unit）に加えてコプロセッサが内蔵される場合が多い。セキュアマイコンで実行される暗号の処理は、特殊な演算を必要とし演算量も多いため、これに適するコプロセッサが内蔵される。セキュアマイコンにおける低消費電力モードとは、例えばCPUとコプロセッサの排他的動作が挙げられる。排他的動作は、消費電力のピーク値を抑えるために有効な手段である。コプロセッサの演算量が多い場合に、CPUをスリープ状態などの動作モードで休止させる。
【０００３】
特許文献１には、CPUとコプロセッサを内蔵したICカードにおいて、コプロセッサの演算処理中に、それを中断してCPUの処理を実行する場合に、コプロセッサへのクロックの供給を停止することによって、コプロセッサの動作を停止させる技術が開示されている。
【０００４】
特許文献２には、CPUなどのデータ処理部に対する機密性が要求される機密データについて、機密データを乱数によって暗号化して保護する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００５−２２２１９４号公報
【特許文献２】特開２０１１−１７５４６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１及び２について本発明者が検討した結果、以下のような新たな課題があることがわかった。
【０００７】
非接触通信では、リーダライタからのコマンド受信完了から、送信開始までの時間（FWT：Frame Waiting Time）のタイムオーバー計測のため、インターバルタイマ（以下TMRと記す）を常時動作させる必要がある。コプロセッサ動作中にTMR割り込みが発生すると、割り込み処理のためにCPU動作が必要となる為、CPUとコプロセッサが同時に動作する状態へ遷移してしまうおそれがある。CPUとコプロセッサが同時に動作してしまうと、消費電力が大きくなり非接触通信の性能に影響を及ぼしてしまう。例えば、上述のように、通信距離が短縮されてしまうおそれがある他、許容される消費電力の大きさによって演算処理用の動作周波数を変動させる技術が採用されている場合には、動作周波数が低下して暗号演算処理に要する時間が長くなるという問題が生じる恐れもある。
【０００８】
ＣＰＵとコプロセッサとを備える半導体装置において、ＣＰＵとコプロセッサを排他的に動作させて消費電力を低減するためには、コプロセッサ演算時にタイマ（TMR）割り込みが発生した場合に、コプロセッサの演算を一時中断し、コプロセッサの動作を停止する機能が求められる。特許文献１によれば、コプロセッサへのクロックの供給を停止することにより、コプロセッサの演算を中断することができる。
【０００９】
しかしながら、その場合には、以下のような新たな課題があることがわかった。
【００１０】
コプロセッサの演算を中断することにより、機密性の高いデータが、その中断期間全般に渡って同じ回路要素に保持される。クロック供給を停止することにより、消費電力や輻射される電磁波の大きさが変動するので、コプロセッサの演算が中断されたことは、攻撃者によって探知され得る。このため、機密性の高いデータが攻撃によって外部へ読み出される危険性が高まり、セキュリティ性能（耐タンパー性）を低下させてしまう。
【００１１】
セキュリティ性能（耐タンパー性）を低下させないために、コプロセッサには、種々のセキュリティ機能を付加することが考えられる。しかしながら、コプロセッサに対するクロックの供給が停止されると、付加されたセキュリティ機能を実現するセキュリティ回路の動作も停止してしまい、十分にセキュリティ性能の低下を抑えることができないという問題があることがわかった。例えば、特許文献２に開示される技術を組合せて、コプロセッサの演算途中のデータを乱数によって暗号化することが、一つの有力な解決手段となると考えられる。しかしながら、この乱数を発生する乱数発生回路へのクロック供給までもが、コプロセッサの演算器などへのクロック供給と共に停止されると、停止された時点で発生した乱数値が、そのクロック停止期間全般に渡って乱数発生回路の出力に保持されることとなる。この乱数値が攻撃者によって観測されると、暗号が復号されて演算途中のデータの値が知られてしまう恐れがあるからである。この他のセキュリティ回路を採用した場合であっても、コプロセッサに対するクロックの供給とともに、セキュリティ回路へのクロックの供給も停止されると、十分にセキュリティ性能の低下を抑えることができない。
【００１２】
このような課題を解決するための手段を以下に説明するが、その他の課題と新規な特徴は、本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１３】
一実施の形態によれば、下記の通りである。
【００１４】
すなわち、ＣＰＵと、タイマ割り込みを発生するタイマと、コプロセッサとを備える半導体装置であって、以下のように構成される。コプロセッサは、演算器と、演算制御回路と、演算器の入出力データを外部からの攻撃から保護するセキュリティ回路と、停止起動制御回路とを含んで構成される。コプロセッサによる演算処理の実行中にタイマ割り込みが発生したとき、停止起動制御回路は、セキュリティ回路の動作を継続させたまま、演算器と演算制御回路の動作を停止させる。
【発明の効果】
【００１５】
前記一実施の形態によって得られる効果を簡単に説明すれば下記のとおりである。
【００１６】
すなわち、ＣＰＵとコプロセッサとを備える半導体装置において、ＣＰＵとコプロセッサを排他的に動作させて低消費電力化した場合にも、セキュリティ性能（耐タンパー性）を低下させない。
【図面の簡単な説明】
【００１７】
【図１】図１は、代表的な実施形態に係る半導体装置の構成を表すブロック図である。
【図２】図２は、実施形態１に係る半導体装置の構成を表すブロック図である。
【図３】図３は、メモリアクセス（リード）時の中断手順を表すタイミングチャートである。
【図４】図４は、メモリアクセス（ライト）時の中断手順を表すタイミングチャートである。
【図５】図５は、メモリアクセス（ＮＯＰ１回）時の中断手順を表すタイミングチャートである。
【図６】図６は、演算回路を停止させるために、フィードバック付きＦ／Ｆを採用した例である。
【図７】図７は、演算回路を停止させるために、ゲーテッドクロック付きＦ／Ｆを採用した例である。
【図８】図８は、実施形態２に係る半導体装置の構成を表すブロック図である。
【図９】図９は、実施形態３に係る半導体装置の構成を表すブロック図である。
【図１０】図１０は、ＣＬＫ１＝ＣＬＫ２の場合の動作を表すタイミングチャートである。
【図１１】図１１は、ＣＬＫ２の周波数を下げる場合の動作を表すタイミングチャートである。
【発明を実施するための形態】
【００１８】
１．実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１９】
〔１〕＜コプロセッサの処理中断時にもセキュリティ回路の動作を継続＞
ＣＰＵ（２）と、タイマ割り込みを発生するタイマ（３）と、コプロセッサ（１０）とを備える半導体装置（１）であって、以下のように構成される。
【００２０】
前記コプロセッサは、演算器（１１）と、前記演算器を制御する演算制御回路（１２）と、前記演算器の入出力データを外部からの攻撃から保護するセキュリティ回路（１３）と、停止起動制御回路（１４）とを含んで構成される。
【００２１】
前記コプロセッサによる演算処理の実行中に前記タイマ割り込みが発生したとき、前記停止起動制御回路は、前記セキュリティ回路の動作を継続させたまま、前記演算器と前記演算制御回路の動作を停止させる。
【００２２】
これにより、ＣＰＵとコプロセッサとを備える半導体装置において、ＣＰＵとコプロセッサを排他的に動作させて低消費電力化した場合に、セキュリティ性能（耐タンパー性）が低下するのを防止することができる。
【００２３】
〔２〕＜セキュリティ回路は乱数発生回路＞
項１において、前記セキュリティ回路は、前記演算器の入出力データをマスクするための乱数を発生する、乱数発生回路（１５）を含んで構成される。
【００２４】
これにより、コプロセッサ（１０）を演算の途中で停止させた場合であっても、乱数によってマスクされた、演算の途中経過データについて、セキュリティ性能が低下するのを防止することができる。
【００２５】
〔３〕＜セキュリティ回路は乱数発生回路＋乱数発生状態監視回路＞
項２において、前記セキュリティ回路は、さらに、前記乱数発生回路による乱数発生状態を監視する、乱数発生状態監視回路（１６）を含んで構成される。
【００２６】
これにより、コプロセッサ（１０）が演算を中断した期間中に、動作を継続すべきマスク用の乱数発生回路（１５）がその動作を停止した場合であっても、動作が停止したことを検出して適切な防御措置を執ることができ、演算の途中経過データについて、セキュリティ性能が低下するのを防止することができる。
【００２７】
〔４〕＜メモリアクセスの完了を待って中断＞
項１において、前記半導体装置は、前記コプロセッサによってアクセス可能なメモリ（７）をさらに備え、前記停止起動制御回路は、前記コプロセッサによる演算処理の実行中の前記タイマ割り込みが発生したとき、前記コプロセッサによる前記メモリへのアクセスが完了した後に、前記演算器と前記演算制御回路の動作を停止させる。
【００２８】
これにより、コプロセッサ（１０）を演算の途中で停止させるときに、コプロセッサ（１０）がメモリアクセスの途中であった場合にも、メモリアクセスのデータは適切に保持され、コプロセッサ（１０）が演算を再開したときに正常な動作を継続することができる。
【００２９】
〔５〕＜メモリアクセスの完了を待つためのアクセスコマンドの監視＞
項４において、前記半導体装置は、前記タイマから発行されるタイマ割り込み信号が入力され、前記ＣＰＵに対してＣＰＵ割り込み信号を出力する割り込み制御回路（６）をさらに備える。
【００３０】
前記演算制御回路は前記メモリに対して、前記コプロセッサによる前記メモリへのアクセスに際して、リードコマンドまたはライトコマンドを発行し、アクセスしないときにＮＯＰコマンドを発行可能に構成される。前記停止起動制御回路は、前記コプロセッサによる演算処理の実行中の前記タイマ割り込みが発生したとき、前記ＮＯＰコマンドが連続して発行された後に、前記演算器と前記演算制御回路の動作を停止させる。
【００３１】
これにより、メモリアクセスの完了を、簡便かつ的確に判定することができる。
【００３２】
〔６〕＜メモリアクセスの完了を待つための割り込みのマスク＞
項５において、前記半導体装置は、前記タイマ割り込みに際して前記タイマから発行されるタイマ割り込み信号が入力され、前記停止起動制御回路から中断許可信号が入力され、前記ＣＰＵに対してＣＰＵ割り込み信号を出力する割り込み制御回路（６）をさらに備える。
【００３３】
前記割り込み制御回路は、前記中断許可信号によって前記タイマ割り込み信号をマスクすることにより、前記ＣＰＵ割り込み信号の出力をマスク可能に構成される。
【００３４】
前記停止起動制御回路は、前記コプロセッサによる演算処理の実行中の前記タイマ割り込みが発生したとき、前記中断許可信号を中断禁止状態にし、前記ＮＯＰコマンドが連続して発行された後に、前記中断許可信号を中断許可状態にする。
【００３５】
これにより、タイマ割り込みのＣＰＵ（２）への入力を、メモリアクセスの完了まで待たせることができる。
【００３６】
〔７〕＜セキュリティ回路はメモリデータの監視＞
項４において、前記セキュリティ回路は、前記メモリに保持されるデータが改変されたことを監視する、メモリ監視回路（１７）を含んで構成される。
【００３７】
これにより、コプロセッサ（１０）の演算が中断されている期間に、メモリ（７）の内容に意図しない変化が発生した場合にも、それを検出することができ、メモリ（７）に保持されるデータについて、セキュリティ性能が低下するのを防止することができる。
【００３８】
〔８〕＜メモリ監視回路＝メモリ内蔵のパリティまたはＥＤＣの監視＞
項７において、前記メモリは、格納するデータにパリティまたは誤り検出符号を付与し、格納されたデータに付与されたパリティまたは誤り検出符号の正当性を検証する機能を備える。前記メモリ監視回路は、前記正当性の検証結果が入力され、正当性が損なわれたときに前記ＣＰＵに対して通知可能に構成される。
【００３９】
これにより、簡便かつ的確に、メモリに格納された値を監視することができる。
【００４０】
〔９〕＜コプロセッサの回路はフィードバックＦ／Ｆ＞
項１から項８のうちの１項において、前記演算器と前記演算制御回路は、出力を入力にフィードバックすることによって保持する値の更新を抑制可能な記憶回路（２１）を備える。
【００４１】
前記コプロセッサによる演算処理の実行中に前記タイマ割り込みが発生したとき、前記停止起動制御回路は、前記記憶回路に保持される値の更新を抑制することによって、前記演算器と前記演算制御回路の動作を停止させる。
【００４２】
これにより、簡便かつ的確に、コプロセッサ（１０）の演算動作を停止させることができる。また、コプロセッサ（１０）が演算を停止してもクロック供給が継続されるので、クロック周波数の電磁輻射を観測するサイドチャネル攻撃に対するセキュリティ性能の低下を抑えることができる。
【００４３】
〔１０〕＜クロック供給の維持＞
項４において、前記演算器と前記演算制御回路と前記セキュリティ回路と前記メモリとには、同一系統のクロック（ＣＬＫ２）が供給され、前記演算器と前記演算制御回路は、前記クロックが入力され、出力を入力にフィードバックすることによって保持する値の更新を抑制可能な記憶回路（２１）を備える。
【００４４】
前記コプロセッサによる演算処理の実行中の前記タイマ割り込みが発生したとき、前記クロックの供給が継続されることにより、前記セキュリティ回路の動作が継続され、前記コプロセッサによる前記メモリへのアクセスが完了した後に、前記停止起動制御回路は、前記記憶回路に保持される値の更新を抑制することによって、前記演算器と前記演算制御回路の動作を停止させる。
【００４５】
これにより、項９と同様の効果を奏し、さらにコプロセッサ（１０）へ供給されるクロック信号（ＣＬＫ２）をＣＰＵ（２）へ供給されるクロック信号（ＣＬＫ１）と独立に制御することを可能とすることができる。
【００４６】
〔１１〕＜中断中のクロック周波数の低減＞
項１０において、前記コプロセッサによる前記メモリへの前記アクセスが完了した後に、前記クロックの周波数を低下させる。
【００４７】
これにより、セキュリティ回路（１３）とメモリ（７）へのクロック供給を継続することによって、ＣＰＵとコプロセッサを排他的に動作させた場合の、セキュリティ性能の低下するのを防止しながら、セキュリティ回路（１３）とメモリ（７）の消費電力を抑えることができる。
【００４８】
〔１２〕＜中断中のクロック周波数の分周による低減＞
項１１において、前記半導体装置は、前記クロックを供給するクロック発生回路（５）と、前記タイマから発行されるタイマ割り込み信号が入力され、前記停止起動制御回路から中断許可信号が入力され、前記ＣＰＵに対してＣＰＵ割り込み信号を出力する割り込み制御回路（６）とをさらに備える。
【００４９】
前記割り込み制御回路は、前記中断許可信号によって前記タイマ割り込み信号をマスクすることにより、前記ＣＰＵ割り込み信号の出力をマスク可能に構成される。
【００５０】
前記演算制御回路は前記メモリに対して、前記コプロセッサによる前記メモリへのアクセスに際して、リードコマンドまたはライトコマンドを発行し、アクセスしないときにＮＯＰコマンドを発行可能に構成される。前記停止起動制御回路は、前記コプロセッサによる演算処理の実行中の前記タイマ割り込みが発生したとき、前記中断許可信号を中断禁止状態にし、前記ＮＯＰコマンドが所定回数連続して発行された後に、前記中断許可信号を中断許可状態にする。
【００５１】
前記クロック発生回路は、前記中断許可信号が中断許可状態のときに、入力されているクロックソースを分周することによって前記クロックの周波数を低下させる。
【００５２】
これにより、メモリアクセスの完了を、簡便かつ的確に判定し、タイマ割り込みのＣＰＵ（２）への入力を、メモリアクセスの完了まで待たせることができ、さらに、簡単な回路で且つ瞬時にクロック周波数を低下させることができる。
【００５３】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００５４】
〔代表的な実施の形態〕
図１は、代表的な実施形態に係る半導体装置１の構成を表すブロック図である。
【００５５】
半導体装置１は、例えば、ＩＣカードに搭載されるセキュアマイコンであって、ＣＰＵ２と、タイマ割り込みを発生するタイマ３と、コプロセッサ１０とを備える。コプロセッサ１０は、演算器１１と、演算器１１を制御する演算制御回路１２と、セキュリティ回路１３と、停止起動制御回路１４とを含んで構成される。セキュリティ回路１３は、コプロセッサ１０による演算の途中経過である、演算器１１の入出力データを外部からの攻撃から保護するための回路である。例えば、コプロセッサ１０の内部や接続されるバス８上のデータを暗号化するための乱数発生回路、乱数が適切に継続して発生されているかどうかを監視する、乱数発生状態監視回路、データが不正に改竄されていないかどうかを監視する回路などである。ＣＰＵ２とタイマ３とコプロセッサ１０は、互いにバス８を介して接続されているとよい。ＣＰＵ２によって、制御レジスタの設定、状態レジスタの監視などを行うことができる。半導体装置１は、さらに割り込み制御回路６を備えてもよい。タイマ割り込み信号は割り込み制御回路６に入力され、必要に応じてマスク処理を施され、他の割り込み要求との間で、設定された優先順位に基づいて調停された後、割り込みベクタ信号としてＣＰＵ２に入力される。他の割り込み制御方式を採用する回路を備えても良い。これらの回路は、特に制限されないが、例えばＣＭＯＳ半導体製造技術により、シリコン基板上の単一チップに集積される。
【００５６】
コプロセッサ１０による演算処理の実行中にタイマ割り込みが発生したとき、停止起動制御回路１４は、セキュリティ回路１３の動作を継続させたまま、演算器１１と演算制御回路１２の動作を停止させる。
【００５７】
半導体装置１が、例えば電池を備えない非接触ＩＣカードであって、通信用の電磁波の搬送波（キャリア）を検波して回路の電源を生成しているとき、消費電流のピーク値（瞬時値）を抑えるために、ＣＰＵ２とコプロセッサ１０とを排他的に動作させる。ＣＰＵ２はコプロセッサ１０に対し、例えば公開鍵暗号の演算処理を実行させるなど、演算処理を起動した後、例えばスリープモードなどの低消費電力状態に遷移して、自己のプログラム処理を休止する。通信プロトコルによって規定される定時処理を実行すべき時刻には、タイマ割り込みが発生して、ＣＰＵ２は通常モードに復帰し、必要な定時処理と応答などを行う。この時、ＣＰＵ２を動作させる代わりに、コプロセッサ１０の動作を一時中断することにより、消費電流のピーク値を抑えることができる。コプロセッサ１０は、タイマ割り込みの発生を停止起動制御回路１４が検知すると、演算器１１と演算制御回路１２の動作を停止させるので、ＣＰＵ２の動作中には、コプロセッサ１０の消費電流は大幅に抑えられる。停止起動制御回路１４は、演算器１１と演算制御回路１２の動作を停止させるが、セキュリティ回路１３の動作は停止させずに継続する。
【００５８】
これにより、ＣＰＵ２とコプロセッサ１０とを備える半導体装置１において、ＣＰＵ２とコプロセッサ１０を排他的に動作させて低消費電力化した場合にも、セキュリティ回路１３の動作は継続されるので、セキュリティ性能（耐タンパー性）が低下するのを防止することができる。コプロセッサの演算機能を一時中断することで低消費電力化を図ることができる。コプロセッサの演算処理中にタイマ割り込みが発生してＣＰＵ２を動作させる際の非接触通信への影響を低減することができる。また、中断時にセキュリティ回路は動作を継続する為、中断時もしくは中断からの再開後のセキュリティ回路への攻撃に対する耐性を向上させることが出来る。
【００５９】
〔実施形態１〕
図２は、実施形態１に係る半導体装置の構成を表すブロック図である。図１に示した代表的な実施形態に係る半導体装置１に対し、さらにクロック発生回路（ＣＰＧ）５とメモリ７を備え、セキュリティ回路１３が乱数発生回路１５と乱数発生状態監視回路１６とを含んで構成される例を示す。クロック発生回路（ＣＰＧ）５は、半導体装置１が例えば非接触ＩＣカードに搭載されるセキュアマイコンの場合は、通信用の電磁波のキャリア信号に基づいて、クロックパルスを発生する回路などで構成することができる。クロック発生回路（ＣＰＧ）５から出力されたクロックＣＬＫは、ＣＰＵ２，タイマ３、割り込み制御回路６、メモリ７、コプロセッサ１０に供給される。コプロセッサ１０の内部では、演算器１１と演算制御回路１２とセキュリティ回路１３と停止起動制御回路１４などの回路すべてに供給される。メモリ７は、ＣＰＵ２のプログラムを格納するＲＯＭ（Read Only Memory）などの不揮発性メモリと、ＣＰＵ２やコプロセッサ１０の処理の途中経過や結果のデータを保持する、ＲＡＭ（Random Access Memory）などの揮発性メモリを含んで構成されることができる。クロック発生回路（ＣＰＧ）５とメモリ７は、特に制限されないが、ＣＰＵ２やコプロセッサ１０とともに同じ半導体チップ上に集積して形成されること望ましい。クロック信号やバス８の信号を外部から観測し、あるいは強制的に信号を印加することが困難となり、耐タンパー性が向上するからである。
【００６０】
セキュリティ回路１３は、演算器１１の入出力データをマスクするための乱数を発生する、乱数発生回路１５を含んで構成される。乱数発生回路１５は、セキュリティ回路の一例であり、サイドチャネル解析の対策などで用いる乱数を生成する回路である。サイドチャネル解析とはチップから漏れる消費電力や電磁波などの情報をもとにデータとの相関から値を推定する攻撃であり、その相関をなくすため乱数を使用することがある。ただし、乱数やその使い方が既知になると効果がない。乱数発生回路１５が停止している時間が長いほど乱数への改ざん等の恐れがあり、乱数が既知となる可能性がある。あるいは乱数発生回路１５の構成によってはクロックを停止させることにより再開直後の乱数性が劣る場合も考えられる。それを避けるために中断時にも乱数発生回路１５の動作を継続させて、乱数の生成を継続させる。乱数値のスタックなど攻撃されていないか確認する回路を実装した場合、その回路も中断時に動作させる事で、中断時においても故障と判断した場合に検出できるようにする。本実施例では、乱数生成器で生成した乱数はコプロセッサの演算器の内部データをマスクするために使用する。
【００６１】
これにより、コプロセッサ１０を演算の途中で停止させた場合であっても、乱数によってマスクされた、演算の途中経過データについて、セキュリティ性能が低下するのを防止することができる。コプロセッサ１０の演算の途中経過データは、演算器１１の動作の中断により、中断している期間中、演算器１１内のフリップフロップやラッチ回路に保持される。通常動作で途中経過データがラッチなどに保持される期間は１サイクルであるのと比較すると、演算の中断期間は数１０から数１００サイクル以上に及ぶ長期間となる。そのため、外部から探知される危険性が高まる。これを防ぐために、途中経過データを、乱数を鍵として使って暗号化してマスクする。暗号鍵である乱数の値が探知されると、暗号化によるマスクが意味を持たなくなり、耐タンパー性が損なわれる。コプロセッサ１０が停止する期間も、乱数発生回路１５が継続して乱数を生成し続けることにより、乱数値が探知される危険性を低くくし、セキュリティ性能が低下するのを防止することができる。
【００６２】
乱数発生回路１５は、例えば、アナログ素子の熱雑音を元にして生成した値を種として、常時連続的に乱数を発生する回路で構成することができる。乱数のビット数は１サイクルで転送可能な８ビット、１６ビット、３２ビットなどとすることができる。乱数のビット数を大きくして転送に複数サイクルを要する場合には、停止起動制御回路１４は、乱数の転送の切れ目を考慮して、演算器１１の動作を停止させる必要がある。一方、１サイクルで転送可能なビット数とすれば、乱数の転送の切れ目を考慮する必要がないので、任意のタイミングで演算器１１の動作を停止させることができる。
【００６３】
セキュリティ回路１３は、さらに、乱数発生回路１５による乱数発生状態を監視する、乱数発生状態監視回路１６を含んで構成される。
【００６４】
これにより、コプロセッサ１０を演算の途中で停止させ、さらにマスク用の乱数発生回路１５が停止した場合であっても、それを検出して適切な防御措置を執ることができ、演算の途中経過データについて、セキュリティ性能が低下するのを防止することができる。
【００６５】
＜メモリアクセスの完了を待って中断＞
本実施形態１において、半導体装置１は、コプロセッサ１０によってアクセス可能なメモリ７を備える。コプロセッサ１０の演算中にタイマ割り込みなどにより中断要求が行われた場合、コプロセッサ１０が中断出来る状態となったら演算を一時中断し、再開要求により中断した状態から再度演算動作を行なう機能を実装する。コプロセッサ１０が中断できる状態とは、データ格納用メモリ７の動作依存を排除する為に、コプロセッサ１０が発行したコマンドに対するデータ格納用メモリらのレスポンスをコプロセッサが受け取った状態のことを示す。
【００６６】
より詳細には、以下のように実装される。メモリ７にはクロック発生回路（ＣＰＧ）５からクロックＣＬＫが供給され、コプロセッサ１０は、演算制御回路１２からコマンドを発行することにより、バス８を介してメモリ７にアクセスすることができる。メモリアクセスは、クロック同期で動作する。例えばリードコマンドが発行され、アドレスが指定されると、次のクロックサイクルに、メモリ７から読み出されたデータがバス８に出力され、さらに次のクロックサイクルでコプロセッサ１０の演算器１１のラッチに取り込まれる。ライトコマンドが発行され、アドレスとデータがバス８に出力されると、次のクロックサイクルにメモリ７の指定されたアドレスにデータが書き込まれる。上述のバスサイクルは一例であって、上述の例とは異なるサイクル数で実行されてもよい。また、バス８はＣＰＵ２と共通のバスであり、図示を省略された調停回路によって競合が調停される。本実施形態１では、ＣＰＵ２とコプロセッサ１０がバスマスタであり、バスアクセスが競合する可能性があるが、コプロセッサ１０とＣＰＵ２は排他的に動作させるので、実動作ではバスの競合を発生させないように設計することができる。
【００６７】
タイマ割り込みは任意のタイミングで発生するため、リードコマンドが発行された後でリードデータが読み込まれる前に、または、ライトコマンドが発行された後でメモリ７へのデータの書き込みが完了する前に、タイマ割り込みが発生する可能性がある。その場合、コマンドが発行された後にタイマ割り込みが発生し、リードまたはライトアクセスの動作が完了する前に、コプロセッサ１０の演算器１１やメモリ７の動作を停止させてしまうと、アクセスされたデータが失われる恐れがある。例えば、リードコマンドによってメモリ７から読み出されたデータが、バス８上にあるときに演算器１１が動作を停止すると、そのデータを取り込むことができない。バス８が他のアクセスで使われるとデータが失われる。また、ライトアクセスによってコプロセッサ１０からバス８に出力されたライトデータが、メモリ７に書き込まれる保証がなくなる。
【００６８】
そこで、停止起動制御回路１４は、コプロセッサ１０による演算処理の実行中のタイマ割り込みが発生したとき、コプロセッサ１０よるメモリ７へのアクセスが完了した後に、演算器１１と演算制御回路１２の動作を停止させる。
【００６９】
これにより、コプロセッサ１０を演算の途中で停止させたときに、コプロセッサ１０がメモリアクセスの途中であった場合にも、メモリアクセスのデータは適切に保持され、コプロセッサ１０が演算を再開したときに正常な動作を継続することができる。コプロセッサ１０が中断できる状態になるのを待って中断させるため、データ格納用メモリ７の動作依存を排除することが出来る。
【００７０】
より具体的には、以下のように実現される。中断要求であるタイマ割り込みが、停止起動制御回路１４に入力されている。停止起動制御回路１４は、タイマ割り込みを受信すると、演算制御回路１２の出力するコマンド信号の状態に依存して、演算器用停止制御信号と中断許可信号を出力する。演算器用停止制御信号により演算器１１と演算制御回路１２の動作を停止させる。
【００７１】
演算制御回路１２はメモリ７に対して、コプロセッサ１０によるメモリ７へのアクセスに際して、リードコマンドまたはライトコマンドを発行し、アクセスしないときにＮＯＰコマンドを発行する。停止起動制御回路１４は、コプロセッサ１０による演算処理の実行中にタイマ割り込みが発生したとき、ＮＯＰコマンドが所定の回数だけ連続して発行された後に、演算器用停止制御信号を出力して、演算器１１と演算制御回路１２の動作を停止させる。
【００７２】
これにより、メモリアクセスの完了を、簡便かつ的確に判定することができる。
【００７３】
割り込み制御回路６は、中断許可信号によってタイマ割り込み信号をマスクすることにより、ＣＰＵ割り込み信号の出力をマスクすることができる。
【００７４】
停止起動制御回路１４は、コプロセッサ１０による演算処理の実行中のタイマ割り込みが発生したとき、中断許可信号を中断禁止状態にし、ＮＯＰコマンドが所定の回数連続して発行された後に、中断許可信号を中断許可状態にする。中断許可信号は、割り込み制御回路６に入力され、コプロセッサ１０よるメモリ７へのアクセスが完了するまでの期間、タイマ割り込み信号をマスクし、割り込みベクタ信号の出力を遅らせる。
【００７５】
これにより、タイマ割り込みのＣＰＵ２への入力を、メモリアクセスの完了まで待たせることができ、ＣＰＵ２は、コプロセッサ１０によるメモリ７へのアクセスが完了するのを待って、割り込み処理を開始することとなる。
【００７６】
図３は、メモリアクセス（リード）時の中断手順を表すタイミングチャートである。本実施形態の半導体装置１をセキュアマイコンとして非接触型ＩＣカードに搭載した場合を例に採って説明する。横軸は時間であり、縦軸に各モジュールの動作シーケンス、コプロセッサ１０の動作タイミング、メモリ（ＲＡＭ）７の動作タイミング、及び、演算器用停止制御信号、中断許可信号、タイマ割り込み信号、割り込みクリア信号を示す。ＩＣカードが非接触通信によって受信状態からＣＰＵとコプロセッサの動作可能状態を経て送信状態に遷移する過程を示す。
【００７７】
時刻ｔ０からｔ１までの受信状態では、ＣＰＵ２とコプロセッサ１０はとも停止状態にある。クロックＣＬＫの供給も開始されていない。この期間に受信した電磁波を検波してセキュアマイコンである半導体装置１が動作するための電源を生成し、合せて発振回路を動作させてクロックＣＬＫの供給を開始する。クロックＣＬＫは通信のための搬送波（キャリア）を元に生成してもよい。
【００７８】
時刻ｔ１からＣＰＵとコプロセッサの動作可能状態になり、まず、ＣＰＵ２がプログラム実行状態に遷移する。この間に、各種の初期化処理を行い、通信のプロトコル処理を行う。暗号の処理は特殊な演算を必要とし、高い演算性能を求められるので、コプロセッサ１０を用いて実行される。コプロセッサ１０へのデータの受け渡しと演算内容の設定も、この期間に行われる。
【００７９】
時刻ｔ２においてＣＰＵ２はコプロセッサ１０の制御レジスタに起動コマンドを設定するなどの方法により、コプロセッサ１０に演算の開始を指示し、自らはスリープ状態に遷移する。一方、コプロセッサ１０は停止状態から演算状態に遷移する。コプロセッサ１０は、演算状態では演算に必要なデータをＲＡＭ７から読み込み、途中経過データをＲＡＭ７に格納する。メモリアクセスにはコマンドを発行する。コマンドは、リードコマンド（Ｒ）、ライトコマンド（Ｗ）、及びＮＯＰ（Ｎ）の３種類である。リードコマンドが発行されると次のサイクルでＲＡＭ７にラッチされる。リードデータはさらにその次のサイクルでバス８に出力される。図３にはＲＡＭ７内のＲＡＭデータバスのうちリードバスを示す。リードコマンドに対応するデータはリードデータであり、ライトデータに対応するデータは不定（ｘ）である。
【００８０】
時刻ｔ３にタイマ割り込み信号が遷移し、中断要求が発生したものとする。その後、ライトコマンド２個とリードコマンド２個が発行され、さらにその後ＮＯＰコマンド２個が発行されるものとする。時刻ｔ４において発行されたリードコマンドには、ＮＯＰコマンド２個が続いている。時刻ｔ４に発行されたリードコマンドは、時刻ｔ５にＲＡＭ７にラッチされてリード動作が行われ、読み出されたデータが時刻ｔ６に演算器のラッチに読み込まれる。この間、時刻ｔ５とｔ６にはＮＯＰコマンドが発行され、新たなアクセスコマンドが発行されない。停止起動制御回路１４は、コマンドを監視し、リードコマンドに続いて２個の連続するＮＯＰコマンドが発行されたときに、時刻ｔ６に演算器用停止制御信号を活性化させる。これにより、演算器１１と演算制御回路１２が動作を停止するが、時刻ｔ４に発行されたリードコマンドの読み出しデータは、既に演算器１１にラッチされているので、失われることはなく演算を再開したときにすぐに使用可能となる。また、時刻ｔ５とｔ６においては新たなコマンドが発行されていないので、完了していないアクセスコマンドはない。これにより、コプロセッサ１０は、演算器１１と演算制御回路１２の動作が停止され、中断状態に遷移する。
【００８１】
時刻ｔ７には中断許可信号が活性化され、割り込み制御回路６でのタイマ割り込み信号のマスク処理を終わらせ、ＣＰＵ２に割り込みベクタ信号として伝達され、ＣＰＵ２は例外処理状態に遷移する。ＣＰＵ２は、時刻ｔ９に割り込みクリア信号を出力することにより、時刻ｔ１０でタイマ割り込み信号をクリアする。ＣＰＵ２はその後、プログラム実行状態に遷移する。
【００８２】
時刻ｔ１１においてＣＰＵ２はコプロセッサ１０の制御レジスタに起動コマンドを設定するなどの方法により、コプロセッサ１０に演算の再開を指示し、自らはスリープ状態に遷移する。コプロセッサ１０は中断許可信号を非活性化して演算器用停止制御信号を非活性化し、再び演算状態に遷移する。時刻ｔ１２で演算器用停止制御信号が非活性化されると、演算器１１と演算制御回路１２が動作を再開し、ＲＡＭ７へのアクセスも再開される。
【００８３】
以上のように、リードコマンドが発行された後、２個のＮＯＰコマンドが連続して発行されるのを待って、停止起動制御回路１４は演算器用停止制御信号を活性化させて演算器１１と演算制御回路１２の動作を停止させる。これにより、コプロセッサ１０がＲＡＭ７のリードアクセスの途中であった場合にも、リードデータは適切に保持され、コプロセッサ１０が演算を再開したときに正常な動作を継続することができる。
【００８４】
停止起動制御回路１４が演算器用停止制御信号を活性化させるために、観測すべきＮＯＰコマンドの数は、一例に過ぎない。コプロセッサ１０とバス８とメモリ７のパイプライン構造によって適宜調整される。
【００８５】
図４は、メモリアクセス（ライト）時の中断手順を表すタイミングチャートである。
【００８６】
時刻ｔ３にタイマ割り込み信号が遷移し、中断要求が発生するまでの動作は、図３に示したものと同様である。図４では、時刻ｔ４において発行されたライトコマンドには、ＮＯＰコマンド２個が続いていた場合について説明する。時刻ｔ４に発行されたライトコマンドは、時刻ｔ５にＲＡＭ７にラッチされてライト動作が行われ、コプロセッサ１０から出力されたデータは、同じ時刻ｔ５にＲＡＭ７に書き込まれる。時刻ｔ５とｔ６にはＮＯＰコマンドが発行され、新たなアクセスコマンドが発行されない。停止起動制御回路１４は、コマンドを監視し、ライトコマンドに続いて２個の連続するＮＯＰコマンドが発行されたときに、時刻ｔ６に演算器用停止制御信号を活性化させる。これにより、演算器１１と演算制御回路１２が動作を停止するが、時刻ｔ４に発行されたライトコマンドの出力データは、既にＲＡＭ７に格納されているので、失われることはなく演算を再開したときにすぐに使用可能となる。また、時刻ｔ５とｔ６においては新たなコマンドが発行されていないので、完了していないアクセスコマンドはない。これにより、コプロセッサ１０は、演算器１１と演算制御回路１２の動作が停止され、中断状態に遷移する。
【００８７】
時刻ｔ７以降の動作は、図３に示した場合と同様である。時刻ｔ１２で演算器用停止制御信号が非活性化されると、演算器１１と演算制御回路１２が動作を再開し、ＲＡＭ７へのアクセスも再開される。
【００８８】
以上のように、ライトコマンドが発行された後、２個のＮＯＰコマンドが連続して発行されるのを待って、停止起動制御回路１４は演算器用停止制御信号を活性化させて演算器１１と演算制御回路１２の動作を停止させる。これにより、コプロセッサ１０がＲＡＭ７のリードアクセスの途中であった場合にも、リードデータは適切に保持され、コプロセッサ１０が演算を再開したときに正常な動作を継続することができる。
【００８９】
停止起動制御回路１４が演算器用停止制御信号を活性化させるために、観測すべきＮＯＰコマンドの数が一例に過ぎない点も、図３に示した例と同様である。コプロセッサ１０とバス８とメモリ７のパイプライン構造によって適宜調整される。
【００９０】
図５は、メモリアクセス（ＮＯＰ１回）時の中断手順を表すタイミングチャートである。
【００９１】
停止起動制御回路１４が演算器用停止制御信号を活性化させるために、観測すべきＮＯＰコマンドの数が、図３、図４に示したように２回であるときには、図５に示すように、タイマ割り込み後の１回のＮＯＰコマンドでは、停止起動制御回路１４は演算器用停止制御信号を活性化させない。１回のＮＯＰコマンド前に発行されたコマンドによるアクセスが完了しないうちに、ＮＯＰコマンドの次のアクセスコマンドの実行が開始されるためである。途中、何度もＮＯＰコマンドが発行されても、連続して所定回数のＮＯＰコマンドが発行されなければ、停止起動制御回路１４は演算器用停止制御信号を活性化させない。
【００９２】
停止起動制御回路１４が演算器用停止制御信号を活性化させるために、観測すべきＮＯＰコマンドの数が一例に過ぎない点は、図３、図４に示した例と同様である。
【００９３】
＜コプロセッサの回路はフィードバックフリップフロップ（Ｆ／Ｆ）＞
コプロセッサ１０の演算器１１の動作を停止させる手段は、種々の選択肢から採用することができる。図６は、演算回路を停止させるために、フィードバック付きフリップフロップ（Ｆ／Ｆ）を採用した例である。フリップフロップは、演算器１１のパイプライン構造を形成する記憶回路の一種であり、演算の途中経過データを保持する。新たなデータによって保持する値の更新を抑制してしまえば、演算器１１の動作は停止する。
【００９４】
図６には、演算器１１の演算回路部と演算データ格納レジスタ部が模式的に示される。ビット数を始めとして回路規模を簡略化して示す。組合せ回路３０〜３２と演算器＿１（４０）と演算器＿２（４１）とで３段のパイプラインを構成し、各段にはフィードバック付きＦ／Ｆ２１が配置される。さらにもう１段のパイプラインを経て演算データ格納レジスタ部のフリップフロップ（Ｆ／Ｆ）２０にデータが格納される。リードデータバスから入力されるデータは、演算制御信号によって制御される組合せ回路３０、３１、３２を経て３個のフィードバック付きＦ／Ｆ２１にラッチされる。その出力は演算器＿１（４０）に入力され、その結果はセレクタ２５を経て２個のフィードバック付きＦ／Ｆ２１にラッチされる。セレクタ２５は、演算制御信号によって制御され、２個のフィードバック付きＦ／Ｆ２１に演算器＿１（４０）の出力をラッチするか、２個のフィードバック付きＦ／Ｆ２１の値を保持するかを選択的に制御する。２個のフィードバック付きＦ／Ｆ２１のうちの１個の出力が演算器＿２（４１）に入力され、その出力が１個のフィードバック付きＦ／Ｆ２１にラッチされる。このフィードバック付きＦ／Ｆ２１の出力は組合せ回路３０、３１、３２にフィードバックされ、また、組合せ回路３３を経て演算データ格納レジスタ部のフリップフロップ２０に格納される、その出力は、組合せ回路３４を経てライトデータバスに出力される。演算データ格納レジスタ部のフリップフロップ２０はクロック入力端に、演算制御信号で制御されるクロックゲート２３を備えている。演算制御信号により、新たな値をラッチして更新するか、前サイクルの値を維持するかが制御される。
【００９５】
フィードバック付きＦ／Ｆ２１は、フリップフロップ２０とセレクタ２４によって構成され、演算器用停止制御信号によって制御される。演算器用停止制御信号が活性化されることにより、Ｆ／Ｆ２０の出力がセレクタ２４によりＦ／Ｆ２０の入力にフィードバックされ、一方、新たなデータは入力されず保持されるデータは更新されない。
【００９６】
これにより、簡便かつ的確に、コプロセッサ１０の演算動作を停止させることができる。また、コプロセッサ１０が演算を停止してもクロックの供給が継続されるので、クロック周波数の信号の電磁輻射を観測するサイドチャネル攻撃に対するセキュリティ性能の低下を抑えることができる。
【００９７】
一方、クロックゲーティングによってフリップフロップのデータの更新を抑え、演算回路の動作を停止させることもできる。
【００９８】
図７は、演算回路を停止させるために、ゲーテッドクロック付きＦ／Ｆを採用した例である。図６のフィードバック付きＦ／Ｆ２１に代えて、ゲーテッドクロック付きＦ／Ｆ２２を備える。ゲーテッドクロック付きＦ／Ｆ２２は、Ｆ／Ｆ２０とクロックゲート２３によって構成され、演算器用停止制御信号によって制御される。演算器用停止制御信号が活性化されることにより、クロックゲート２３がＦ／Ｆ２０へのクロック信号の入力がマスクされ、データが更新されない。
【００９９】
これにより、簡便かつ的確に、コプロセッサ１０の演算動作を停止させることができる。また、コプロセッサ１０が演算を停止するとＦ／Ｆへのクロック供給も停止されるので、演算を中断した状態におけるコプロセッサ１０の消費電力をさらに低減することができ、さらにフィードバック付きＦ／Ｆ２１に比べて少ない回路規模で実装することができる。
【０１００】
〔実施形態２〕
図８は、実施形態２に係る半導体装置の構成を表すブロック図である。
【０１０１】
実施形態２に係る半導体装置において、図３に示した実施形態１に係る半導体装置１との違いは、セキュリティ回路１３が、メモリ７に保持されるデータが改変されたことを監視する、メモリ監視回路１７を含んで構成される点である。他の構成及び動作は、実施形態１と同様であるので、説明を省略する。
【０１０２】
メモリ監視回路１７についてさらに詳しく説明する。メモリ７は、攻撃もしくは宇宙線などによるRAMのデータ改ざん、データ化けなどの故障を検出する冗長回路、具体的にはパリティ機能や誤り検出（EDC: Error Detection Code）機能を実装する。中断時に一部もしくは全部のデータとそのデータを入力とした冗長回路の出力を比較して整合性を確認、問題があればリセット要求信号を出すことでチップ動作を停止させるなどを行うことで、攻撃を失敗に終わらせる。中断時においても定期的に整合性を確認することでデータと冗長回路の複数の故障による誤動作をより困難とさせる。
【０１０３】
これにより、コプロセッサ１０の演算が中断されている期間に、メモリ７の内容に意図しない変化が発生した場合にも、それを検出することができ、メモリ７に保持されるデータについて、セキュリティ性能が低下するのを防止することができる。
【０１０４】
メモリ７は、格納するデータにパリティまたは誤り検出符号を付与し、格納されたデータに付与されたパリティまたは誤り検出符号の正当性を検証する機能を備える。メモリ監視回路１７は、その正当性の検証結果が入力され、正当性が損なわれたときに、そのことをＣＰＵ２に対して通知可能に構成される。ＣＰＵ２への通知方法は、例えば、割り込み、ステータスレジスタ、または、セキュリティリセットなどである。
【０１０５】
これにより、簡便かつ的確にメモリに格納された値を監視することができる。コプロセッサ１０の中断時にパリティ機能やEDC機能を動作させて、データ格納用メモリ７から中間値、および冗長ビットを定期的にリードする事で、データ改ざん、データ化けを困難にさせることができる。
【０１０６】
図８に示したセキュリティ回路１３は、データバスマスク用の乱数生成回路１５と乱数発生状態監視回路１６とＲＡＭ監視回路１７とを含んで構成される例を示したが、ＲＡＭ監視回路１７のみを備えていれば上記の効果を奏する。一方、コプロセッサ１０の演算の途中経過を保護するための別のセキュリティ回路を含んで構成されてもよい。
【０１０７】
〔実施形態３〕
図９は、実施形態３に係る半導体装置の構成を表すブロック図である。
【０１０８】
実施形態３に係る半導体装置において、図８に示した実施形態２に係る半導体装置１との違いは、クロック生成回路（ＣＰＧ）５が、クロック制御回路１（１８）とクロック制御回路２（１９）を含んで構成される点である。クロック制御回路１（１８）は、ＣＰＵ２、タイマ３及び割り込み制御回路６にクロックＣＬＫ１を供給する。クロック制御回路２（１９）は、メモリ７と、コプロセッサ１０の演算器１１、演算制御回路１２、セキュリティ回路１３及び停止起動制御回路１４とに、クロックＣＬＫ２を供給する。他の構成及び動作は、実施形態１と同様であるので、詳細な説明は省略する。
【０１０９】
コプロセッサ１０が演算処理の実行中にタイマ割り込みが発生したとき、クロックＣＬＫ２の供給が継続されることにより、セキュリティ回路１３の動作が継続され、コプロセッサ１０によるメモリ７へのアクセスが完了した後に、演算器用停止制御信号により、演算器１１と演算制御回路１２の動作を停止させる。
【０１１０】
これにより、コプロセッサ１０へ供給されるクロック信号（ＣＬＫ２）をＣＰＵ２へ供給されるクロック信号（ＣＬＫ１）と独立に制御することを可能とすることができる。
【０１１１】
図９に示したセキュリティ回路１３は、データバスマスク用の乱数生成回路１５と乱数発生状態監視回路１６とＲＡＭ監視回路１７とを含んで構成される例を示したが、乱数生成回路１５と乱数発生状態監視回路１６、または、ＲＡＭ監視回路１７のいずれか一方であってもよく、コプロセッサ１０の演算の途中経過を保護するための別のセキュリティ回路を含んで構成されてもよい。
【０１１２】
図１０は、ＣＬＫ１＝ＣＬＫ２の場合の動作を表すタイミングチャートである。
【０１１３】
図３、４、５に示した実施形態１に係る半導体装置１の動作タイミングと同様であるが、クロック信号（ＣＬＫ１）とクロック信号（ＣＬＫ２）とが、それぞれＣＰＵ２とコプロセッサ１０へ独立に供給される点で相違する。
【０１１４】
ＣＬＫ１はＣＬＫと同様に時刻ｔ１から供給され、ＣＬＫ２はコプロセッサ１０が演算状態になる、時刻ｔ２から供給される。ＣＬＫ１は、ＣＰＵ２がスリープ状態にある、時刻ｔ２から時刻ｔ６までの期間と時刻ｔ１１以降の期間は、供給を停止される。一方、ＣＬＫ２はコプロセッサ１０が中断状態にある時刻ｔ７から時刻ｔ１１までの期間も供給を継続される。
【０１１５】
ＣＰＵ２がスリープ状態にある期間にＣＬＫ１の供給を停止することにより、半導体装置１の消費電力を低減することができ、コプロセッサ１０が演算処理を中断状態にある期間も、ＣＬＫ２の供給を継続することにより、セキュリティ回路１３の動作を継続させ、セキュリティ性能が低下するのを防止することができる。
【０１１６】
図１１は、ＣＬＫ２の周波数を下げる場合の動作を表すタイミングチャートである。
【０１１７】
図１０に示した動作タイミングとの違いは、コプロセッサ１０が演算処理を中断状態にある時刻ｔ７から時刻ｔ１１までの期間に、ＣＬＫ２の周波数を低下させる点である。クロック周波数を変更するには、クロック信号に波形の乱れが発生しないようにするため、ある程度の遅延が生じる。図１１では、時刻ｔ８から時刻１２までの期間のＣＬＫ２の周波数を、４分の１に低下させた例を示している。
【０１１８】
クロック周波数を低下させても耐タンパー性を維持することができるセキュリティ回路であれば、セキュリティ性能の低下を防止しながら、コプロセッサ１０の中断中の消費電力を低減することができる。データをマスクするための乱数発生回路１５は、クロック周波数が低下されても乱数の発生を継続する。周波数の低下に伴って乱数値が保持される時間は長くなるため、外部からの攻撃によってプロービングされる可能性は若干高まるものの、コプロセッサ１０の中断期間よりも極めて短い期間であるので、大幅なセキュリティ性能の低下は防止される。乱数発生状態監視回路１６は、乱数発生回路１５と同じ周波数で動作すれば、セキュリティ性能の低下はない。メモリ（ＲＡＭ）監視回路１７は、クロック周波数の低下に伴って監視の周期が長くなり、外部からの攻撃を検知する能力が若干低下するものの、コプロセッサ１０の中断期間よりも極めて短い期間であるので、大幅なセキュリティ性能の低下は防止される。
【０１１９】
クロック制御回路２（１９）は、クロックＣＬＫと中断許可信号が入力され、中断許可信号が活性化されている期間、ＣＬＫを分周してＣＬＫ２に出力する回路で構成することができる。分周によって周波数を低下させることにより、瞬時に周波数を変更することができる。図１１に示したＣＬＫ２の周波数の変更のための遅延である時刻ｔ７から時刻ｔ８の期間と時刻ｔ１１から時刻ｔ１２までの期間を最小限に抑えることができる。
【０１２０】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【０１２１】
例えば、ブロック図に示した回路ブロックの包含関係や名称は一例であって、ブロック分割の方法は柔軟に決めることができる。また、タイミングチャートに示した信号の、ハイアクティブ／ロウアクティブは、任意に決めることができる。
【符号の説明】
【０１２２】
１  半導体装置
２  ＣＰＵ
３  タイマ（ＴＭＲ）
５  クロック発生回路（ＣＰＧ）
６  割り込み制御回路（ＩＮＴＣ）
７  メモリ（ＲＡＭ）
８  バス
１０  コプロセッサ
１１  演算器
１２  演算制御回路
１３  セキュリティ回路
１４  停止起動回路
１５  乱数発生回路
１６  乱数発生状態監視回路
１７  メモリ（ＲＡＭ）監視回路
１８、１９  クロック制御回路
２０  フリップフロップ（ＦＦ）
２１  フィードバック付きＦＦ
２２  ゲーテッドクロック付きＦＦ
２３  クロックゲート
２４  セレクタ
２５  セレクタ
３０〜３４  組合せ回路
４０〜４１  演算回路
【図１】
2014147010.tif 000003
【図２】
2014147010.tif 000004
【図３】
2014147010.tif 000005
【図４】
2014147010.tif 000006
【図５】
2014147010.tif 000007
【図６】
2014147010.tif 000008
【図７】
2014147010.tif 000009
【図８】
2014147010.tif 000010
【図９】
2014147010.tif 000011
【図１０】
2014147010.tif 000012
【図１１】
2014147010.tif 000013