(58)【調査した分野】(Int.Cl.,DB名)
請求項1において、前記n個の記憶素子は、現用系論理回路の出力であるm個の現用系記憶素子と、前記現用系に対して二重化された予備系論理回路の出力であるm個の予備系記憶素子を含み、前記エラー判定回路は、前記現用系記憶素子の出力と対応する前記予備系記憶素子の出力が不一致の場合に、誤りが発生したこと検出し、前記現用系記憶素子と対応する前記予備系記憶素子は、対応する2個の記憶素子の組合せがそれぞれ少なくとも1個の前記光検出素子を挟んで配置される、半導体集積回路。
請求項3において、前記n個の記憶素子から任意に選んだ2個の記憶素子は、いずれの2個の記憶素子の組合せも必ず少なくとも1個の前記光検出素子を挟んで配置される、半導体集積回路。
請求項1において、前記論理回路はプロセッサであり、前記n個の記憶素子は前記プロセッサが条件分岐命令を実行するときに参照する条件を与えるレジスタを含む、半導体集積回路。
請求項1において、前記論理回路はメモリを備えたプロセッサであり、前記攻撃検出回路は前記プロセッサに割り込みを発生させることができ、前記攻撃を検出したときに前記プロセッサは前記メモリに格納されている情報を消去する、半導体集積回路。
請求項1において、前記論理回路への電源供給を制御することができる電源制御端子を有する電源回路をさらに備え、前記攻撃検出回路の出力は前記電源回路の前記電源制御端子に接続され、前記攻撃を検出したときに前記論理回路への電源供給を遮断する、半導体集積回路。
【背景技術】
【0002】
機密情報を扱う例えばセキュリティマイコンに格納されている機密情報の取得や改竄を目的として、マイコンの誤動作を利用する故障利用攻撃というものがある。誤動作を引き起こす原因としては、異常電圧、異常周波数クロックの印加、レーザー照射による攻撃等がある。レーザー照射による攻撃は局所的な部位の故障を引き起こすことが可能なため、故障利用攻撃の中でも極めて脅威であり、近年、レーザー攻撃への対策の重要性は高まっている。
【0003】
レーザー攻撃への対策として、光検出器の配置、回路の二重化、誤り検出符号(例えばパリティ)を利用したデータの誤り検出などが採用されている。光検出器の配置は、機密情報を扱うマイコンが形成されている半導体チップに光検出素子を配置して、レーザーが照射されていることを直接検知するものである。回路の二重化は、単純には、フリップフロップなどの記憶素子を2個備え、2個に同じデータを入力しておき、そのデータが読み出されたときに、互いの出力を照合して、不一致の場合に故障利用攻撃がされたことを検出するものである。二重化の単位は、上記のような単純な例からCPU(Central Processing Unit)全体を二重化する例まで多様である。誤り検出は、記憶するデータに基づいて、予めパリティなどの誤り検出符号を算出しておき、記憶されたデータが再び読み出されたときに、再び誤り訂正符号を算出して、記憶したときのものと照合し、不一致の場合に故障利用攻撃がされたことを検出するものである。
【0004】
特許文献1には、6トランジスタで構成されるSRAM(Static Random Access Memory)メモリセルを元にした光ディテクタが開示され(
図1)、SRAMのメモリマット中に分散して配置した実施例が示されている(
図4他)。また、CPUなどの論理回路を構成するセル配列の中に光ディテクタを配置した実施例(
図13、第0089段落〜第0094段落)や、光検出回路を組み込んだD型フリップフロップ(
図15、第0096段落〜第0097段落)が開示されている。
【0005】
特許文献2には、CMOS(Complementary Metal-Oxide-Semiconductor)インバータによる光検出回路が開示されている。インバータに受光部を設け、光が照射されることによって誤動作させ、それを検知する。
【0006】
特許文献3には、サイリスタ構造の光検出器が開示されている。PウェルとNウェルとそれぞれのウェル内に形成した不純物拡散層により、PNPN接合を形成して構成した光検出器であり、例えば10μm角の小さな領域に形成することができる(
図3、第0029段落)。
【0007】
特許文献4には、メモリとCPUを備えたコアを二重化して、同じコマンドの処理から得られるレスポンスを照合し、その結果が不一致の場合に故障利用攻撃を受けていると判断してエラー処理を実行するセキュリティデバイスが開示されている。
【0008】
特許文献5には、不揮発性メモリに格納されたプログラムを実行するCPUを備えるICカードにおいて、プログラムを誤り検出符号で保護する技術が開示されている。不揮発性メモリには、命令コードごとに予めEDC(Error Detecting Code)を算出し付加して格納しておき、CPUが実行のために読み出したときにEDCを再計算して、格納されているEDCと照合する。不一致の場合には、故障利用攻撃を受けていると判断する。
【発明を実施するための形態】
【0021】
1.実施の形態の概要
先ず、本願において開示される代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【0022】
〔1〕<エラー判定回路+光照射検出回路>
それぞれ1ビットの情報を記憶可能なn個(nは正の整数)の記憶素子(5_1〜5_6)と攻撃検出回路(1)とを含む論理回路(6)を備える半導体集積回路(10)であって、以下のように構成される。
【0023】
前記攻撃検出回路は、エラー判定回路(2)と光照射検出回路(4)とを備え、前記エラー判定回路による前記誤りの検出と前記光照射検出回路による前記光照射の検出のいずれかを検出したときに、前記論理回路が外部から攻撃を受けたものと判定する。
【0024】
前記エラー判定回路は、前記n個の記憶素子に格納される値をnビットの符号にkビット(kは正の整数)以下の誤りが発生したことを、論理演算を用いて検出することができる。
【0025】
前記光照射検出回路は、光検出素子(3_1〜3_4)を有し、前記n個の記憶素子のうちのk+1個以上に光が照射されたことを検出することができる。
【0026】
これにより、論理回路に対するレーザー攻撃によって発生する、複数ビットの記憶素子の誤りのビット数が何ビットであっても、レーザー攻撃を検出することができる。
【0027】
〔2〕<エラー判定回路=誤り検出符号生成回路+チェック回路>
項1において、前記n個の記憶素子(5_7〜5_11、5_12〜5_16、5_17〜5_23)はmビットの誤り検出符号を格納可能なm個の記憶素子(5_11、5_16、5_23)を含む。前記エラー判定回路は、前記n個の記憶素子のうちのn−m個から誤り検出符号を生成する誤り検出符号生成回路(7)と、前記n個の記憶素子における誤りの発生を検出可能なチェック回路(8)を含む。
【0028】
これにより、保護対象のn−mビットに対してmビットの誤り検出符号を生成し、これを合計したnビットの情報を保持する記憶素子を対象として、レーザー攻撃に対する保護を行うことができる。
【0029】
〔3〕<パリティチェックによる保護>
項2において、前記n個の記憶素子は1ビットのパリティ符号を格納可能な1個の記憶素子(5_16)を含み、前記光照射検出回路はn−1個の光検出素子(3_8〜3_11)を備える。
【0030】
前記エラー判定回路は、前記n個の記憶素子のうちのn−1個(5_12〜5_15)から前記パリティ符号を生成するパリティ符号生成回路(7)と、前記n個の記憶素子(5_12〜5_16)における誤りの発生を検出可能なパリティチェック回路(8)を含む。
【0031】
前記光照射検出回路は、前記n−1個の光検出素子の少なくとも1個に光が照射されたことを検出したとき、前記n個の記憶素子のうちの2個以上に光が照射されたことを検出する。
【0032】
これにより、保護対象のn−1ビットに対してパリティ符号を生成し、これを合計したnビットの情報を保持する記憶素子を対象としてパリティチェック回路を備え、保護対象回路へのレーザー攻撃に対する保護を行うことができる。パリティ符号生成回路とパリティチェック回路は、簡単な論理ゲートで構成することができ、保護のための回路規模のオーバーヘッドを抑えることができる。
【0033】
〔4〕<二重化による保護>
項1において、前記n個の記憶素子は、現用系論理回路の出力であるm個の現用系記憶素子(5_24)と、前記現用系に対して二重化された予備系論理回路の出力であるm個の予備系記憶素子(5_25)を含み、前記エラー判定回路は、前記現用系記憶素子の出力と対応する前記予備系記憶素子の出力が不一致の場合に、誤りが発生したこと検出する。前記現用系記憶素子と対応する前記予備系記憶素子は、対応する2個の記憶素子の組合せがそれぞれ少なくとも1個の前記光検出素子を挟んで配置される。
【0034】
これにより、二重化による保護を採用した回路において、現用系と対応する予備系に同時に誤り発生させるようなレーザー攻撃からも保護することができる。
【0035】
〔5〕<1ビット誤り検出に対する光検出素子の配置>
項3において、前記n個の記憶素子から任意に選んだ2個の記憶素子は、いずれの2個の記憶素子の組合せも必ず少なくとも1個の前記光検出素子を挟んで配置される。
【0036】
これにより、前記n個の記憶素子のうち2個以上の記憶素子に対して同時に行われるレーザー照射を検出することができる。
【0037】
〔6〕<マクロセル>
項5において、前記n−1個の前記光検出素子と前記n個の記憶素子は、単一のセル列に互いに隣接して1個ずつ交互後に配置される。
【0038】
これにより、前記n個の記憶素子のうち2個以上の記憶素子に対して同時に行われるレーザー照射を検出ることができる条件を満足するマクロセルを予め準備して使用することにより、自動レイアウトにおけるセルの配置に対して特別な考慮をすることなく、LSIのレイアウト設計を行うことができる。
【0039】
〔7〕<CPUにおけるプログラムカウンタの保護>
項1において、前記論理回路はプロセッサ(20)であり、前記n個の記憶素子は前記プロセッサのプログラムカウンタ(24)を含む。
【0040】
これにより、レーザー照射によって引き起こされるプログラムの異常な分岐から、LSIを保護することができる。
【0041】
〔8〕<CPUにおけるコンディションコードレジスタの保護>
項1において、前記論理回路はプロセッサ(20)であり、前記n個の記憶素子は前記プロセッサが条件分岐命令を実行するときに参照する条件を与えるレジスタ(25)を含む。
【0042】
これにより、レーザー照射によって引き起こされるプログラムの異常な分岐から、LSIを保護することができる。
【0043】
〔9〕<CPUにおける汎用レジスタの保護>
項1において、前記論理回路はプロセッサ(20)であり、前記n個の記憶素子は前記プロセッサの汎用レジスタ(26)を含む。
【0044】
これにより、レーザー照射によって引き起こされるプログラムの異常な演算処理から、LSIを保護することができる。
【0045】
〔10〕<攻撃を検知したときにリセット>
項1において、前記論理回路はプロセッサ(20)であり、前記攻撃検出回路の出力が前記プロセッサのリセット端子に入力される。
【0046】
これにより、レーザー照射によって攻撃されていることが検知されたとき、プロセッサがリセットされ、LSIに保持される機密情報を保護することができる。
【0047】
〔11〕<攻撃を検知したときに機密情報を消去>
項1において、前記論理回路はメモリ(30)を備えたプロセッサであり、前記攻撃検出回路は前記プロセッサに割り込みを発生させることができ、前記攻撃を検出したときに前記プロセッサは前記メモリに格納されている情報を消去する。
【0048】
これにより、レーザー照射によって攻撃されていることが検知されたとき、メモリ上に格納された機密情報が消去され、LSIに保持される機密情報を保護することができる。
【0049】
〔12〕<攻撃を検知したときに電源供給を遮断>
項1において、前記論理回路への電源供給を制御することができる電源制御端子を有する電源回路をさらに備え、前記攻撃検出回路の出力は前記電源回路の前記電源制御端子に接続され、前記攻撃を検出したときに前記論理回路への電源供給を遮断する。
【0050】
これにより、レーザー照射によって攻撃されていることが検知されたとき、電源が遮断され、LSIに保持される機密情報を保護することができる。
【0051】
〔13〕<エラー判定回路+光照射検出回路>
それぞれ1ビットの情報を記憶可能なn個(nは正の整数)の記憶素子(5_1〜5_6)と攻撃検出回路(1)とを含む論理回路(6)とを備える半導体集積回路(10)であって、以下のように構成される。
【0052】
前記攻撃検出回路は、エラー判定回路(2)と、光検出素子を有する光照射検出回路(4)とを備える。
【0053】
前記エラー判定回路は、前記n個の記憶素子に格納される値をnビットの符号にkビット(kは正の整数)以下の誤りが発生したことを、論理演算を用いて検出することができる。
【0054】
前記n個の記憶素子のうちの任意のk+1個を、内側に凸の周を持たない最小の閉曲線で囲む複数の領域のそれぞれは、前記領域内に少なくとも1個の前記光検出素子が配置され、前記光照射検出回路は、前記光検出素子の少なくとも1個に光が照射されたことを検出したとき、前記n個の記憶素子のうちのk+1個以上への光照射を検出する。
【0055】
前記エラー判定回路による前記誤りの検出と前記光照射検出回路による前記光照射の検出のいずれかを検出したときに、前記論理回路が外部から攻撃を受けたものと判定する。
【0056】
これにより、論理回路に対するレーザー攻撃によって発生する、複数ビットの記憶素子の誤りのビット数が何ビットであっても、レーザー攻撃を検出することができる。
【0057】
2.実施の形態の詳細
実施の形態について更に詳述する。
【0058】
〔実施形態1〕<エラー判定回路+光照射検出回路>
レーザー攻撃によって引き起こされる故障は、レーザーが照射された回路全体のいかなる要素でも発生する可能性がある。しかし、論理回路全体に故障検出回路を備えることは、回路規模の増大が大きいためにコスト面から許容されない場合がほとんどである。そこで、保護する対象としてフリップフロップやラッチなどの記憶素子に絞ることとした。フリップフロップやラッチなどの記憶素子は、任意のタイミングでのレーザー照射によって保持する値が反転するため、攻撃する側にとって故障を発生させることが容易である。一方、一般の論理ゲートでも任意のタイミングでのレーザー照射によって論理値の反転は発生するが、そのタイミングが記憶素子へのデータの取り込みタイミングの範囲外であった場合には、回路動作に影響することなく復旧する。そのため、攻撃する側にとっても、有効な攻撃にはならない。
【0059】
そこで、フリップフロップやラッチなどの記憶素子に着目して、これに発生する故障を検知し保護することにより、大きな回路規模の増加を伴うことなく、論理回路全体を効率よく保護することができる。
【0060】
図1は、実施形態1に係る半導体装置の構成例を表す説明図である。n個(nは正の整数)のフリップフロップ5_1〜5_6と攻撃検出回路1とを含む論理回路6とを備える半導体集積回路10であって、以下のように構成される。攻撃検出回路1は、エラー判定回路2と、光検出素子を有する光照射検出回路4が含まれる。
【0061】
エラー判定回路2は、n個のフリップフロップに格納される値をnビットのデータにkビット(kは正の整数)以下の誤りが発生したことを、論理演算を用いて検出することができる。例えば、n−mビットのデータにmビットの冗長ビットを付加してkビット誤り検出符号を形成し、誤り検出回路を構成することができる。これをエラー判定回路2とすることができる。パリティ符号、巡回冗長符号、BCH符号など、符号理論に基づく公知の誤り検出回路を利用することができる。また、例えば、2個のフリップフロップに同じ値を格納し、読み出したときに比較して、不一致の場合にエラーと判定することにより、エラー判定回路2を構成することもできる。2個のフリップフロップの比較は、1ビット誤り検出である。2ビット誤りでは、2個のフリップフロップとも反転するので、検出することができないからである。
【0062】
エラー判定回路2を、kビット以下の誤りが検出可能な誤り検出回路で構成した場合、光照射検出回路は、k+1個のフリップフロップに同時に光が照射されたことを検出可能に構成する。n個のフリップフロップ5に含まれる任意のk+1個のフリップフロップについてみたとき、このk+1個のフリップフロップ5を囲む領域を考える。この領域は、内側に凸の周を持たない最小の閉曲線で構成される。この領域が円である場合について考えるとき、すべてのフリップフロップを囲む最も小さい円がこの領域として規定される。攻撃する側のレーザービームが円形に集光されるとき、k+1個全てのフリップフロップに同時に光を照射することができる最も小さな領域に当たる。レーザービームを集光した形状は円には限られず、楕円なども想定すべきであるが、あくまでも光の集光であるから、外側に凸の閉曲線で囲まれる領域には限定されるであろう。この領域内に少なくとも1個の光検出素子3を配置する。これにより、その領域全体に光が照射されたこと、即ちk+1個のフリップフロップ全てに光りが照射されたことが検知される。
【0063】
図1では、エラー判定回路2を、6個のフリップフロップ5_1〜5_6に対して2ビット誤りが検出可能とした場合に、6個中任意の3個のフリップフロップ5について必ず1個の光検出素子3を配置した例を示している。3個のフリップフロップ5_1、5_2、5_3を囲む円51の中心に光検出素子3_1が配置されている。3個のフリップフロップ5_2、5_4、5_5を囲む円52の中心に光検出素子3_2が配置されている。3個のフリップフロップ5_2、5_3、5_5を囲む円53の中心に光検出素子3_3が配置されている。3個のフリップフロップ5_3、5_5、5_6を囲む円54の中心に光検出素子3_4が配置されている。他のいかなる3個のフリップフロップの組合せも、図示した円51〜54よりも広い領域に含まれることとなり、その領域には必ず1個以上の光検出素子3が配置されている。レーザー光が円形に集光される場合には、エラー判定回路2が対象とする6個のフリップフロップ5_1〜5_6のうち、任意の3個以上のフリップフロップに光が照射されたときに、光が照射されたことを検出することができる。円51〜54は、光照射の最小検出対象領域である。これよりも小さい領域まで集光された光の照射は、本実施形態の光照射検出回路4では、必ず検出することができるとは保証できない。
【0064】
エラー判定回路2による誤りの検出と光照射検出回路4による光照射の検出のいずれかを検出したときに、論理回路が外部から攻撃を受けたものと判定する。レーザー光がk+1個以上のフリップフロップ5に照射されたときは、光照射検出回路4によって検出し、レーザー光がさらに集光されk個以下のフリップフロップ5に照射されてこれらに誤りを生じさせたときには、エラー判定回路2による誤りの検出を行う。
【0065】
これにより、論理回路に対するレーザー攻撃によって発生する、複数ビットの記憶素子の誤りのビット数が何ビットであっても、レーザー攻撃を検出することができる。kビット以下の誤りをエラー判定回路2が検出し、k+1ビット以上の誤りを光照射検出回路4が検出し、互いに補完するので、あらゆるビット数の誤りを検出することができる。
【0066】
フリップフロップは、1ビットの情報を記憶することができる記憶素子であればよく、ラッチやメモリセルであっても、同様に適用することができる。
【0067】
図1では、レーザー光が円形に集光される場合を想定した例を示したが、楕円その他の形に集光されたレーザー光についても、同様の考え方を適用して光検出素子を配置することができ、光照射検出回路4を構成することができる。
【0068】
光照射検出回路4は、本実施形態で特徴的なのは光検出素子の配置で、特にフリップフロップ(記憶素子)との相対的な位置関係であって、回路は公知の光照射検出回路を採用することができる。
【0069】
図13は、光検出素子としてホトダイオードを用いた光照射検出回路の構成を表す回路図であり、
図14は、その動作を表すタイミングチャートである。複数のホトダイオードが並列にnode1に接続されている。node1はバッファ55によりハイレベルに駆動されている。他のバッファに駆動された複数のホトダイオードが、縦続接続されていても良い。バッファ58によって波形整形され(node2)、SRラッチ60に入力され、光照射検出出力であるnode3に出力される。node1はバッファ55によりハイレベルに駆動されホトダイオード3が逆バイアスされているので、通常はハイレベルに保たれている。例えば、バッファ55、56の間のホトダイオード3に光が照射されると、照射された光によってホトダイオード3に発生した電子正孔対により逆方向電流が流れ、node1の電位が低下する。これがバッファ56の論理閾値Vt未満となると、後段にパルス波形となって伝搬し、node2にパルスとなって現れる。SRラッチ60はこのパルスによりセットされ、node3をハイレベルに反転させ保持する。バッファ55の駆動能力を適切に設定することにより、並列接続された複数のホトダイオード3の1個に光が照射されたときに、node1の電位がバッファ56の論理閾値Vt未満となるように設計することができる。これにより、複数のホトダイオードのうち1個に光が照射されたことを検出する光照射検出回路を構成することができる。光検出素子としては、ホトダイオードに代えてホトトランジスタなどを用いてもよい。
【0070】
図15は、光検出素子として光感応型バッファを用いた光照射検出回路の構成を表す回路図であり、
図16は、その動作を表すタイミングチャートである。通常の論理ゲートは、光の照射により、誤動作を引き起こされる可能性がある。そもそも、LSIに対するレーザー照射による故障利用攻撃は、この原理を利用したものである。レイアウト上セルの上層に金属配線層を配置しないようにしたバッファは、通常のバッファよりも光照射に対して誤動作を発生しやすくなる。このようなバッファを光感応型バッファとして用いることができる。
図15に示す光照射検出回路は、入力がハイ固定された光感応型バッファ3の出力が、インバータ59を介してSRラッチ60に入力されている。(b)に示すように、光感応型バッファ3は複数縦続接続されていてもよい。少なくとも1個の光感応型バッファ3に光が照射されると、その出力ノードであるnode1の電位が低下する。反転に至らなくても、node1の電位低下が次段のインバータ59の論理閾値Vt未満になれば、インバータ59の出力であるnode2にパルスが現れる。このパルスをSRラッチ60で取り込んで光照射検出出力であるnode3に出力する。これにより、複数の光感応型バッファのうち1個に光が照射されたことを検出する光照射検出回路2を構成することができる。光検出素子としては、光感応型バッファに代えて光感応型インバータなど他の論理ゲート回路を用いてもよい。
【0071】
〔実施形態2〕<1ビット誤り検出符号の生成とチェック+光照射検出回路>
図2は、実施形態2に係る半導体装置の具体的な構成例を表す説明図である。1ビットの誤り検出が可能なエラー判定回路2と2ビット以上の記憶素子にレーザーが照射されたことを検出可能にするために、記憶素子5_7〜5_10間に光検出素子3_5〜3_7を配置した構成例である。
【0072】
フリップフロップ5_7〜5_10に格納されるライトデータに基づいて誤り検出符号を生成する誤り検出符号生成回路7を備える。誤り検出符号生成回路7で生成された誤り検出符号はフリップフロップ5_11に格納される。チェック回路8は、フリップフロップ5_7〜5_10から読み出されたデータと、フリップフロップ5_11に格納されている誤り検出符号に基づいて、誤りの有無を判定し、誤りがあればエラー検出信号を出力する。光検出素子3_5〜3_7の出力は、光照射検出回路4に接続され、1個以上の光検出素子3_5〜3_7に光が照射されたことを検出すると、光照射検出信号が出力される。
【0073】
誤り検出符号は、例えば、パリティである。誤り検出符号生成回路7はライトデータの1の数が偶数のとき偶数パリティとしてデータ0を、奇数のとき奇数パリティとしてデータ1を生成し、フリップフロップ5_11に格納する。チェック回路8は、パリティチェック回路である。例えば、フリップフロップ5_7〜5_10から読み出されたデータの1の数が偶数か奇数かを求め、フリップフロップ5_11に格納されているデータと比較する。フリップフロップ5_7〜5_10から読み出されたデータに1ビットの反転があれば、パリティが変化するので、パリティチェック8でこれを検出することができる。一方、2ビット以上のデータの反転が発生した場合は、チェック回路8では検出することができない。
【0074】
光検出素子3_5〜3_7とフリップフロップ5_7〜5_10が交互に配置されているので、2個以上のフリップフロップへの光の照射は、必ず光検出素子3_5〜3_7のうちの少なくとも1個によって感知することができる。
【0075】
これにより、レーザー光を集光した攻撃により、1ビットのフリップフロップのみに故障が発生した場合には、エラー判定回路により検出することができ、レーザー光の径を大きくした攻撃により、2個以上のフリップフロップに故障が発生した場合には、光照射検出回路4により、光が照射されたことを検出することができる。
【0076】
図3は、実施形態2に係る半導体装置において、さらに誤り検出符号を保持する記憶素子も光照射の検出対象として保護する場合の構成例を表す説明図である。
【0077】
保護対象のデータを保持する記憶素子であるフリップフロップ5_12〜5_15に加え、誤り検出符号を保持する記憶素子であるフリップフロップ5_16を含めた5個のフリップフロップの間に光検出素子3_8〜3_11を配置した構成例である。
【0078】
誤り検出符号生成回路7とチェック回路8の構成を含め、エラー判定のための回路構成は、
図2に示したものと同じである。フリップフロップ5_12〜5_15と誤り検出符号を保持するフリップフロップ5_16との間にも光検出素子3_11を配置し、これも光照射検出回路4に接続している。誤り検出符号を保持するフリップフロップ5_16を含めた2個のフリップフロップへの光照射を検出することができる。
【0079】
これにより、保護対象のn−1ビットに対してパリティ符号を生成し、これを合計したnビットの情報を保持する記憶素子を対象としてパリティチェック回路を備え、保護対象回路へのレーザー攻撃に対する保護を行うことができる。パリティ符号生成回路とパリティチェック回路は、簡単な論理ゲートで構成することができ、保護のための回路規模のオーバーヘッドを抑えることができる。
【0080】
〔実施形態3〕<mビット誤り検出符号の生成とチェック+光照射検出回路>
実施形態2においては、1ビット誤り検出符号を利用する実施形態について説明したが、誤り検出能力は、任意に強化することができる。エラー判定回路2による誤り検出能力を強化した場合には、光照射検出回路4による光照射の検出能力を軽減することができる。エラー判定回路2によってmビット以下の誤りが検出可能な場合には、光照射検出回路4はm+1個以上の記憶素子への光照射を検出することができる能力を備えれば足りる。具体的には、記憶素子m個に対して1個の割合で、光検出素子を配置すればよい。
【0081】
図4は、実施形態3に係る半導体装置が3ビット誤り検出符号を利用する場合の構成例を表す説明図である。
【0082】
フリップフロップ5_17〜5_22に格納されるライトデータに基づいて誤り検出符号を生成する誤り検出符号生成回路7を備える。誤り検出符号生成回路7で生成された誤り検出符号はフリップフロップ5_23に格納される。誤り検出符号は、1ビットとは限らず通常多ビットである。チェック回路8は、フリップフロップ5_17〜5_22から読み出されたデータと、フリップフロップ5_23に格納されている誤り検出符号に基づいて、誤りの有無を判定し、誤りがあればエラー検出信号を出力する。光検出素子3_12〜3_13はフリップフロップ5_17〜5_23の3個に対して1個の割合で配置されている。具体的な配置の方法、即ち記憶素子と光検出素子の位置関係は、実施形態1と
図1に詳述してあり、実施形態5と
図7に後述する。光検出素子3_12〜3_13の出力は、光照射検出回路4に接続され、1個以上の光検出素子3_12〜3_13に光が照射されたことを検出すると、光照射検出信号が出力される。
【0083】
誤り検出符号は、例えば、巡回符号、BCH符号など、符号理論に基づく公知の誤り検出回路を利用することができる。光検出素子3_12〜3_13はフリップフロップ5_17〜5_23のうちの3個に対して1個の割合で配置されているので、フリップフロップ5_17〜5_23のうちの4個以上のフリップフロップへの光の照射は、必ず光検出素子3_12〜3_13によって感知することができる。レーザー光を集光した攻撃により、mビット以下のフリップフロップのみに故障が発生した場合には、エラー判定回路により検出することができ、より径の大きいレーザー光を利用した攻撃により、m+1個以上のフリップフロップに故障が発生した場合には、光照射検出回路4により、光が照射されたことを検出することができる。
【0084】
これにより、保護対象のn−mビットに対してmビットの誤り検出符号を生成し、これを合計したnビットの情報を保持する記憶素子を対象として、レーザー攻撃に対する保護を行うことができる。
【0085】
〔実施形態4〕<回路の二重化+光照射検出回路>
図5は、実施形態4に係る半導体装置の二重化による保護を利用する場合の構成例を表す説明図である。
【0086】
ライトデータは現用系であるフリップフロップ5_24と予備系であるフリップフロップ5_25に書き込まれ、現用系であるフリップフロップ5_24に格納されているデータが保護対象FF出力として読み出される。エラー検出回路2は排他的論理和ゲートであり、フリップフロップ5_24とフリップフロップ5_25から読み出されたデータが不一致の場合にエラー検出信号を出力する。
【0087】
現用系であるフリップフロップ5_24と予備系であるフリップフロップ5_25の間に、光検出素子3_14が配置され、その出力に基づいて光照射検出回路4により、光照射検出信号が検出される。
【0088】
現用系と予備系のフリップフロップ5_24と5_25の一方に光が照射されてデータが反転した場合には、エラー検出信号として攻撃が検出され、両方に光が照射された場合には、光検出信号として攻撃が検出される。
【0089】
図5は理解を容易にするため、2個のフリップフロップのみで構成された現用系と予備系の二重化回路を示したが、多数ビットおよび論理回路も含めた多重化に拡張することができる。
【0090】
多数ビットの現用系フリップフロップには、同じビット数の予備系フリップフロップを備え、エラー判定回路2はその2系統を比較して不一致の場合にエラー検出信号を出力する。光検出素子は、現用系と予備系のフリップフロップの対応するビット間にそれぞれ配置し、それらすべてを光照射検出回路4に入力して、いずれか少なくとも1個の光検出素子に光が照射されたことを検出したときに、光照射検出信号を出力する。現用系と予備系において同時に同じデータ反転を引き起こすような光の照射は、光照射検出回路4によって検出することができ、一方のみまたは対応しないフリップフロップで発生するデータ反転は、エラー判定回路2によって検出することができる。記憶素子であるフリップフロップのみならず、回路全体を二重化した場合についても、同様に適用することができる。
【0091】
これにより、二重化による保護を採用した回路において、現用系と対応する予備系に同時に誤り発生させるようなレーザー攻撃からも保護することができる。
【0092】
〔実施形態5〕<光検出素子の配置>
図6は、2個以上の記憶素子(フリップフロップ)への光照射を検出するための、フリップフロップと光検出素子の配置を表す説明図である。セル列に標準セルを配置・配線する設計方法を想定し、
図6はセル列に標準セルが配置されたレイアウトを示したものである。
【0093】
(a)では、2個のフリップフロップ5の間に1個の光検出素子3が互いに隣接して配置される。2個のフリップフロップ5に光が照射されると、必ず間の光検出素子3にも光が照射されることとになるので、2個以上のフリップフロップへの光照射を検出することができる。(b)に示すように、フリップフロップ5と光検出素子3は必ずしも隣接して配置する必要はなく、間に別の論理ゲートなどが配置されても良い。
【0094】
一方、セル列に標準セルを配置・配線する設計ツールでは、簡単にセルの配置を規定する方法がない場合が多い。その場合には、2個のフリップフロップ5の間に1個の光検出素子3が互いに隣接して配置された新たなセルを準備することにより、セルの配置を規定する方法がない設計ツールを使う場合であっても、実施形態2〜4のフリップフロップと光検出素子の配置関係を容易に実現することができる。
【0095】
これにより、前記n個の記憶素子のうち2個以上の記憶素子に対して同時に行われるレーザー照射を検出することができる。
【0096】
図7は、4個以上の記憶素子(フリップフロップ)への光照射を検出するための、フリップフロップと光検出素子の配置を表す説明図である。3個ずつ2組のフリップフロップ5の間に1個の光検出素子3が隣接して配置されている。これにより、この6個のフリップフロップのうち4個以上に対しての光の照射は、必ず光検出素子3によって検出することができる。
図7は全てのフリップフロップ5と光検出素子3が互いに隣接して配置される場合を示したが、
図6の(b)に示したのと同様に、間に論理ゲートなどを配置してもよい。一方、互いに隣接配置したフリップフロップと光検出素子を新たなセルとして使用することにより、セルの配置を規定する方法がない設計ツールを使う場合であっても、実施形態4のフリップフロップと光検出素子の配置関係を容易に実現することができる。
【0097】
これにより、前記n個の記憶素子のうち4個以上の記憶素子に対して同時に行われるレーザー照射を検出することができる。
【0098】
図8は、2個以上の記憶素子(フリップフロップ)への光照射を検出するために、フリップフロップと光検出素子を複数のセル列に跨って配置する変形例を表す説明図である。
図6では1つのセル列に2個のフリップフロップ5と光検出素子3を配置する例を示したが、複数のセル列に跨っても、2個のフリップフロップ5の間に光検出素子3が配置されればよい。
図7のように複数のフリップフロップからなる1組のフリップフロップの間に1個の光検出素子を配置するときも、同様の考え方を適用することができる。
【0099】
図9は、2個以上の記憶素子(フリップフロップ)への光照射を検出するために、フリップフロップと光検出素子を複数のセル列に渡って斜めに跨って配置する変形例を表す説明図である。
図8のようにセル列に直交する方向に配列する場合に限られない。斜めであっても、2個のフリップフロップを結ぶ直線状に光検出素子3を配置すれば同様の作用・効果を奏する。また、フリップフロップが複数であっても、他の論理ゲートなどを途中に挟んでいても、2個のフリップフロップを結ぶ直線状に光検出素子3を配置すれば同様の作用・効果を奏することは同様である。
【0100】
図10は、2個以上の記憶素子(フリップフロップ)への光照射を検出するために、フリップフロップと光検出素子を交互に隣接して配置する場合の説明図である。
【0101】
これにより、前記n個の記憶素子のうち2個以上の記憶素子に対して同時に行われるレーザー照射を検出ることができる条件を満足するマクロセルを予め準備して使用することにより、自動レイアウトにおけるセルの配置に対して特別な考慮をすることなく、LSIのレイアウト設計を行うことができる。
【0102】
〔実施形態6〕<CPUの保護>
ソフトウェアによる正常動作チェックは故障対策として有効であるが、CPUなどプロセッサ自体の誤動作はソフトウェアによるチェックが困難である。
【0103】
CPUなどプロセッサを誤動作させるためには、汎用レジスタ、プログラムカウンタ(PC; Program Counter)、及び、分岐の条件を格納するコンディションコードレジスタ(CCR; Condition Code Register)の値を変更させる故障利用攻撃が有効である。逆にこれらをハードウェアで保護することにより、プロセッサとそれによって実行されるソフトウェアの動作は、故障利用攻撃に対する耐性を高めることができる。
【0104】
図11は、プロセッサに対する保護を行った実施形態を表す説明図である。
【0105】
CPUなどプロセッサは、フェッチ部21、デコード部22及び命令実行部23を備える。フェッチ部21は、プログラムカウンタ24により指定されるアドレスに格納される命令を読込み、デコード部22でデコード、解釈し、命令実行部23で実行する。命令実行部23による演算処理は、汎用レジスタ26との入出力による。演算結果の状態フラグは、コンディションコードレジスタ25に格納される。命令実行部23は、コンディションコードレジスタ25に格納される状態フラグに基づいて、分岐や演算処理を行う。
【0106】
本実施形態では、プログラムカウンタ24とコンディションコードレジスタ25と汎用レジスタ26のそれぞれに、パリティ生成回路7_1、7_2、7_3を備え、生成したパリティを格納する記憶素子5_26、5_27、5_28に格納し、パリティチェック回路8_1、8_2、8_3を備えて誤りを検出する。光検出素子3は、プログラムカウンタ24とコンディションコードレジスタ25と汎用レジスタ26を構成する記憶素子の1ビット毎に間に挿入する形で配置する。光照射検出回路4_1、4_2、及び4_3により、光の照射を検出する。汎用レジスタ26のためのパリティ生成回路7_3、生成したパリティを格納する記憶素子5_28及びパリティチェック回路8_3は、汎用レジスタの数と同数を備える。
【0107】
プログラムカウンタ24とコンディションコードレジスタ25と汎用レジスタ26のいずれかに生じた1ビットの誤りは、パリティチェック回路8_1〜8_3により、検出することができる。2ビット以上の誤りを生じさせる2個以上の記憶素子への光の照射は、光照射検出回路4_1〜4_3により検出することができる。
【0108】
プログラムカウンタ24とコンディションコードレジスタ25の一方または両方を保護することにより、レーザー照射によって引き起こされるプログラムの異常な分岐から、LSIを保護することができる。また、汎用レジスタ26を保護することにより、レーザー照射によって引き起こされるプログラムの異常な演算処理から、LSIを保護することができる。
【0109】
図11に示した例では、パリティチェック回路8_1〜8_3により、1ビット誤りを検出し、光照射検出回路4_1〜4_3により2個以上の記憶素子への光照射を検出することによって、CPU20を保護する例を示した。これに代えて、2ビット以上の任意のmビットの誤り検出回路とm+1個の記憶素子への光照射を検出することができる光照射検出回路を組合せて構成してもよい。また、プログラムカウンタ24とコンディションコードレジスタ25と汎用レジスタ26のいずれかのみを保護対象としても、保護の効果を発揮することはできる。一方、プログラムカウンタ24とコンディションコードレジスタ25と汎用レジスタ26の全て、さらに他の記憶素子まで保護対象を拡げれば、攻撃に対する耐性は向上する。
【0110】
〔実施形態7〕<攻撃を検知したときの処理>
エラー判定回路2によるエラー検出と光照射検出回路4による光照射検出は、いずれかが一方でも検出されたときは、故障利用攻撃を受けていると判断することができる。故障利用攻撃を受けていると判断したときは、保持している機密情報を守るために、種々の処理を行うことができる。
【0111】
図12は、プロセッサに対する保護を行った実施形態において、攻撃を検知したときにプロセッサをリセットする実施形態を表す説明図である。リセット端子RESETから入力される通常のリセット信号は、リセットコントローラ28を経て、CPU20、周辺モジュールである例えばタイマ29、あるいはメモリ30に供給されている。リセットコントローラ28に、エラー判定回路2のエラー判定出力det1と光照射検出回路4の光照射検出出力であるdet0とを入力する。通常のリセットに加えて、故障利用攻撃を受けたときにも、CPU20を始めLSI全体がリセットされる。
【0112】
これにより、レーザー照射によって攻撃されていることが検知されたとき、プロセッサがリセットされ、LSIに保持される機密情報を保護することができる。
【0113】
故障利用攻撃を受けていることを検出したとき、リセットに代えてCPU20に対して割り込みを発生し、ソフトウェア処理により、メモリ上に保持される機密情報を消去することができる。
【0114】
これにより、レーザー照射によって攻撃されていることが検知されたとき、メモリ上に格納された機密情報が消去され、LSIに保持される機密情報を保護することができる。
【0115】
LSIにCPUなどに電源を供給する電源回路を設け、故障利用攻撃を受けていることを検出したとき、CPUなどに対する電源供給を遮断することができる。
【0116】
これにより、レーザー照射によって攻撃されていることが検知されたとき、電源が遮断され、LSIに保持される機密情報を保護することができる。
【0117】
これらは、それぞれ独立に用いることもできるが、組み合わせて用いることもできる。比較的迅速に保護する必要があるときには、リセットや電源遮断が有効であるが、時間的なゆとりがある場合には、CPUによるメモリ上の機密情報の消去が最も確実である。CPU自体が攻撃された場合には、CPUによるメモリ上の機密情報の消去など、ソフトウェアによる処理は困難であるから、リセットや電源遮断が有効である。
【0118】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。