半導体集積回路
【課題】複数箇所同時に誤動作させる攻撃に対しても誤動作検出可能とする。
【解決手段】誤動作処理回路1237は、特定周期の間に種データを元に生成されるデータ列を繰り返し演算する特定周期動作回路(1120)と、その動作においてデータ列の演算に要する周期が上記の特定周期と異なることを検出する第1誤動作検出回路(4110)とを含む。また上記誤動作処理回路は、上記の特定周期動作回路において上記の種データから生成され得ないデータを異常データが得られたことを検出する第2誤動作検出回路(4111)を含む。さらに上記誤動作処理回路は、第1誤動作検出信号及び第2誤動作検出信号の少なくとも一方がアサートされた場合に上記CPUの動作を制限する誤動作結果処理回路(1160)を含む。内部データの周期性やデータの状態遷移の特徴を用いた検出方式を採用することで上記課題を解決する。
【解決手段】誤動作処理回路1237は、特定周期の間に種データを元に生成されるデータ列を繰り返し演算する特定周期動作回路(1120)と、その動作においてデータ列の演算に要する周期が上記の特定周期と異なることを検出する第1誤動作検出回路(4110)とを含む。また上記誤動作処理回路は、上記の特定周期動作回路において上記の種データから生成され得ないデータを異常データが得られたことを検出する第2誤動作検出回路(4111)を含む。さらに上記誤動作処理回路は、第1誤動作検出信号及び第2誤動作検出信号の少なくとも一方がアサートされた場合に上記CPUの動作を制限する誤動作結果処理回路(1160)を含む。内部データの周期性やデータの状態遷移の特徴を用いた検出方式を採用することで上記課題を解決する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、電磁波の照射や光の照射によって発生する誤動作現象とその現象による内部解析を防止する機能を有する半導体集積回路に関する。
【背景技術】
【0002】
半導体集積回路が搭載されたICカードには、入出力と電源端子とクロック入力と入出力を行うための端子が備えられている。また、内部には、CPU(中央処理装置)、特定処理のためのコプロセッサ、不揮発性メモリ、揮発性メモリ、データの入出力を行う入出力部などの各種内部モジュールが設けられている。これらの内部モジュール間でのデータ通信は内部バスを介して行われる。
【0003】
例えば非特許文献1によれば、上記ICカードに代表されるセキュリティモジュールにおいては、その内部に搭載された半導体集積回路やメモリにおけるリバースエンジニアリングの困難性と、暗号解読の計算量的困難性により、セキュリティを保証してきた。リバースエンジニアリングを困難にする方法として、非スタンダードセルを用いる、ダミー回路の敷設、メモリのスクランブル配置、バスのスクランブル配置、テストパッドの製品チップからの切断などが行われている。
【0004】
暗号解読の困難性は、暗号解読に必要とされる計算量が十分大きく、現実的な時間では解読手出来ないことを安全性の根拠としている。この計算量に基づく困難性は、秘密鍵のビット長に依存しており、鍵長が長くなると解読に必要な計算量は大きくなる。半導体集積回路技術の発達に伴い、利用可能な計算機パワーが増大するため、安全な鍵のビット長は時が経つにつれ長くなっている。
【0005】
こうしたリバースエンジニアリングや計算量的な困難性による対策に左右されない攻撃手法として、誤動作解析アタックが存在する。誤動作解析アタックとは、半導体集積回路上の動作に誤りを起こさせ、正しい計算結果と誤った計算結果の差分を用いて鍵情報を推定する手法で、多くの暗号に対してアタック手法が開発されている。このアタック手法の特徴は、アタックに必要な時間が非常に少ない点である。例えば非特許文献2によれば、CRT演算法を用いたRSA暗号に対する誤動作解析アタック手法では、鍵長にかかわらず、たった1回の演算誤りが得られれば、正しい値と誤った値の差分と公開鍵のモジュロNとの最大公約数から、秘密素数pが得られ、その結果から秘密鍵を推定できることが知られている。
【0006】
また、非特許文献3によれば、秘密鍵暗号系として広く用いられているDES暗号では、正しい演算結果と誤った結果が数個から数十個が得られると、秘密鍵を得ることができることが報告されている。これらのアタックは、アタックに必要な計算量が暗号鍵の長さにかかわらず一定か、もしくは暗号鍵のビット長のみに比例し、かつ計算量は非常に小さいという特徴がある。
【0007】
さらに、非特許文献4によれば、半導体集積回路上の動作に誤りを引き起こす具体的方法としては、光照射によって内部データを意図した値以外に書き換えが可能であることが、S. Skorobogatovらによって報告されている。
【0008】
このように光照射による誤動作結果として、ハードウェア内部のデータが書き換え可能であること、及び暗号処理中の誤動作結果から暗号鍵が解析可能であることの組み合わせによって、内部情報の解析が可能であるのは明かである。
【0009】
光照射によるハードウェアの誤動作に対する対策として代表的なものは、(1)光照射の検出、(2)誤動作によるハードウェア論理の矛盾を用いた検出といった方法が挙げられる。
【0010】
上記(1)の方法は、例えば特許文献1に記述されている。この方法では、光検出機能を有した回路を他の回路と区別がつきにくく偽装し、守りたい回路付近に配置するという方法である。光検出方法として、スタティックラッチの値の観測を行う方法が示されており、この方法はSRAMに代表される揮発性メモリに搭載可能であることが特許文献1で述べられている。また、別の光検出方法として、電流比を観測することで検出する方法が示されている。この方法は、光検出用素子が消費する電流が通常の素子と比して乖離があるかを検出する方法である。
【0011】
上記(2)の方法の代表例については、特許文献2に記述されている。この方法では、演算処理を行うCPU上の各機能において、内部レジスタの冗長化、マイクロデコーダの再エンコードによる検算、該CPUにおける基準クロック信号を冗長化したカウンタの比較、該CPUのバス回路においてバスの入出力の比較といった方法である。この方法は、冗長化もしくは再エンコードによって内部データを冗長化し、比較する方法である。
【先行技術文献】
【特許文献】
【0012】
【特許文献1】特開2004−206680号公報
【特許文献2】特開2008−158826号公報
【非特許文献】
【0013】
【非特許文献1】W.Rankl&W.Effing、Smart Card Handbook Second Edition、pp.412−420、WILEY、2000、ISBN 0−471−98875−8
【非特許文献2】D.Boneh, R.A. DeMillo, and R.J. Lipton:On the Importance of Checking Cryptographic Protocols for Faults, EUROCRYPT ’97, volume 1233 of Lecture Notes in Computer Science, pager 37−51, Springer−Verlag, 1997
【非特許文献3】E. Biham, A. Shamir, ”A New Cryptanalytic Attack on DES”, http://www.jya.com/dfa.htm,1996
【非特許文献4】S. Skorobogatov, R. Anderson, ”Optical Fault Induction Attacks”, CHES2002,LNCS2523,Springer−Verlag,ISBN3−540−00409−2,pp2−12
【発明の概要】
【発明が解決しようとする課題】
【0014】
上記のように特許文献1には、電流比を用いる検出方法が示されている。この方法では、検出に必要な上記の電流比を、想定する光照射に応じて設定する必要がある。また、太陽光といった通常想定される自然光程度の光では検出動作をしないように、電流比を設定する必要がある。従って、半導体集積回路の動作を妨げないように且つ攻撃に想定される光照射を検出するように、電流比の設定が必要とされる。また、スタティックラッチの値を観測する方法では、比較対象となるふたつの値を同時に誤らせた場合については、検出が行われない。従って、顕微鏡レンズ等と光照射装置を複数組み合わせた方法によって複数箇所に光を照射する攻撃に対しては、検出機能が機能しないことが考えられる。
【0015】
また、特許文献2の方法では、冗長化による検出方法が示されている。しかしながら、冗長化による方法では、顕微鏡レンズ等を用いて照射する光を微細なサイズに絞り、光照射装置と顕微鏡レンズを複数組み合わせることで、複数箇所を同時に誤動作させる攻撃方法が考えられる。特許文献2では、複数照射の攻撃に対して、より多重に冗長化することで安全性を高める方法を用いている。また、特許文献2では、冗長化は光の照射の組み合わせが指数関数的に増加することから、2〜3重で十分であるとしている。しかしながら、冗長化した箇所は、照射範囲を絞った1つの光を半導体集積回路全面に対して、順番に照射すること、及び半導体集積回路の動作状態の観測を組み合わせることで、検出機能が施された箇所を推定することは可能である。この方法を用いると、照射回数を増加することもなく冗長化箇所の推定が可能となる。従って、特許文献2のように冗長化が2〜3重の場合には、冗長化したデータが同時に書き換えることが可能であり、かかる場合には、冗長化したデータの比較による検出機能が機能しないことが考えられる。また、特許文献2の方法では、冗長化を行わない方法としてマイクロデコーダの出力コードを再エンコードする方法が示されている。この方法においても、上記のように複数箇所同時に誤動作させる攻撃に対しては、検出機能が機能しないことが考えられる。
【0016】
本発明の目的は、複数箇所同時に誤動作させる攻撃に対しても誤動作検出可能な半導体集積回路を提供することにある。
【0017】
本発明の上記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【0018】
本願において開示される発明のうち代表的なものについて簡単に説明すれば下記のとおりである。
【0019】
すなわち、CPUと誤動作処理回路とを設ける。上記誤動作処理回路は、予め定められた特定周期の間に予め定められた種データを元に生成されるデータ列を繰り返し演算する特定周期動作回路と、上記の特定周期動作回路の動作においてデータ列の演算に要する周期が上記の特定周期と異なることを検出して第1誤動作検出信号をアサートする第1誤動作検出回路とを含む。また上記誤動作処理回路は、上記の特定周期動作回路において上記の種データから生成され得ないデータを異常データとし、この異常データが得られたことを検出して第2誤動作検出信号をアサートする第2誤動作検出回路を含む。さらに上記誤動作処理回路は、上記第1誤動作検出信号及び上記第2誤動作検出信号の少なくとも一方がアサートされた場合、上記CPUの動作を制限するための誤動作結果処理回路を含む。内部データの周期性やデータの状態遷移の特徴を用いた検出方式を採用することで、光を複数箇所に照射する場合でも誤動作検出を可能とする。
【発明の効果】
【0020】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
【0021】
すなわち、本発明によれば、複数箇所同時に誤動作させる攻撃に対しても誤動作検出可能な半導体集積回路を提供することができる。
【図面の簡単な説明】
【0022】
【図1】本発明にかかる半導体集積回路における主要部の構成例ブロック図である。
【図2】上記半導体集積回路が搭載されて成るICカードの構成例ブロック図である。
【図3】上記半導体集積回路に含まれる誤動作処理回路の構成例ブロック図である。
【図4】上記半導体集積回路に含まれるCPU内の制御回路を示すブロック図である。
【図5】上記半導体集積回路に含まれる特定周期動作回路の構成例回路図である。
【図6】上記半導体集積回路に含まれる特定周期動作回路の構成例回路図である。
【図7】上記半導体集積回路に含まれる誤動作検出回路の構成例回路図である。
【図8】上記半導体集積回路に含まれる誤動作検出回路の構成例ブロック図である。
【図9】上記半導体集積回路に含まれる誤動作検出回路の構成例回路図である。
【図10】上記半導体集積回路に含まれる誤動作処理回路の構成例ブロック図である。
【図11】上記半導体集積回路に含まれる符号距離一定回路の構成例回路図である。
【図12】上記半導体集積回路に含まれる誤動作検出回路の構成例回路図である。
【図13】上記半導体集積回路に含まれる誤動作検出回路の構成例回路図である。
【図14】上記半導体集積回路に含まれる誤動作結果処理回路の構成例回路図である。
【図15】上記半導体集積回路における主要部の別の構成例ブロック図である。
【図16】上記半導体集積回路における主要部の別の構成例ブロック図である。
【図17】上記半導体集積回路における主要部の別の構成例ブロック図である。
【図18】上記半導体集積回路における誤動作検出回路の構成例ブロック図である。
【図19】上記半導体集積回路における誤動作検出回路の構成例ブロック図である。
【発明を実施するための形態】
【0023】
1.実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【0024】
〔1〕本発明の代表的な実施の形態に係る半導体集積回路(1230)は、所定の演算処理を行うCPU(1232)と、誤動作による内部解析を阻止するための誤動作処理回路(1237)とを備える。上記誤動作処理回路(1237)は、特定周期動作回路(1120)、第1誤動作検出回路(4110)、第2誤動作検出回路(4111)、及び誤動作結果処理回路(1160)を含む。
【0025】
上記特定周期動作回路(1120)は、基準クロック信号を用いて、予め定められた特定周期の間に予め定められた種データを元に生成されるデータ列を繰り返し演算する。上記第1誤動作検出回路(4110)は、上記特定周期動作回路の動作においてデータ列の演算に要する周期が上記の特定周期と異なることを検出して第1誤動作検出信号をアサートする。上記第2誤動作検出回路(4111)は、上記の特定周期動作回路において上記の種データから生成され得ないデータを異常データとし、この異常データが得られたことを検出して第2誤動作検出信号をアサートする。上記誤動作結果処理回路(1160)は、上記第1誤動作検出信号及び上記第2誤動作検出信号の少なくとも一方がアサートされた場合、上記CPUの動作を制限するための誤動作制御信号を生成する。
【0026】
半導体集積回路においては内部データに周期性のある回路が搭載されることがある。周期性のある回路の例として、擬似乱数生成器が挙げられる。擬似乱数生成回路は、Linear Feedback Shift−Register(LFSR)と呼ばれる回路や、線形合同法を用いた回路による擬似乱数生成器が例として挙げられる。これらの回路については、初期状態として与えられたデータに対して、出現するデータ列に周期性が存在し、一定の周期で同一のデータが出現する。
【0027】
nビットLFSRでは、2n−1種類のデータが繰り返されるデータ列の候補となる。データ列の種類の数は、LFSRの元となる生成多項式に依存し、2n−1種類のデータ列を得たい場合には、n次の原始多項式を用いて設計を行う。擬似乱数生成器としてのLFSRの場合では、データ列がより多くあることで乱数性が高まることから、データ列が最大となるようにn次の原始多項式を採用する。例えば、nが4の場合では原始多項式の1つはX4+X+1である。この原始多項式を生成多項式としたLFSR回路では、初期値を1111とした場合には、(0−1):1110→1101→1010→0101→1011→0110→1100→1001→0010→0100→1000→0001→0011→0111→1111→・・・と同一データの繰り返しとなる。また、データ列に出現するデータの種類は24−1=15種類である。すなわち、X4+X+1を生成多項式とするLFSRは、周期を15として繰り返してデータを生成する。
【0028】
ここで、生成多項式をX4+X3+X2+X+1とした場合のLFSRを考える。0000という初期値の場合を除いて、次の3種類のデータ列が初期値に応じて生成される。
【0029】
(1−1):0001→0011→0110→1100→1000→0001→・・・
(1−2):0010→0101→1010→0100→1001→0010→・・・
(1−3):0111→1111→1110→1101→1011→・・・
これらのデータ列のいずれかで出現したデータは、他のデータ列では出現しない。このLFSRは、周期を5として繰り返しデータ列を生成する回路である。同様に、生成多項式をX4+1とした場合、0000という初期値の場合を除いて、次の5種類のデータ列が初期値に応じて生成される。具体的には、以下の5種類である。
【0030】
(2−1):0001→0010→0100→1000→0001→・・・
(2−2):0011→0110→1100→1001→0011→・・・
(2−3):0111→1110→1101→1011→0111→・・・
(2−4):0101→1010→0101→・・・
(2−5):1111→1111→・・・
【0031】
これら5種類のデータ列は周期性を持っているが、データ列毎の周期は必ずしも一致しない。一方、これらのデータ列のいずれかで出現したデータは、他のデータ列では出現しない。このとき、初期値を0001として(2−1)で示したようなデータ列がLFSRによって処理されるものとする。このデータ列において、何らかの理由で途中のデータが任意の値に書き換わると、次の3種類の現象が発生する。
【0032】
(A−1):(2−1)のデータ列を処理するが、書き換わったタイミング前後においてデータ列の出現パターンが異なる。
【0033】
(A−2):(2−1)以外のデータ列を処理し、周期が同一であるものの出現データが(2−1)と異なり、特に(2−2)や(2−3)のデータ列の処理に遷移した場合が挙げられる。
【0034】
(A−3):(2−4)や(2−5)のように異なる周期でデータを処理する。
【0035】
上記(A−1)については、周期に従った特定のタイミングにおいて出力されるデータは常に合致することを期待値として、データの比較を行い一致しない場合は、途中でデータが書き換わったことを検出可能である。(A−2)については、(A−1)と同様に周期に従った特定のタイミングにおけるデータが常に合致することを期待値とし、期待値と異なる場合を検出することで、途中でデータが書き換わったことを検出可能である。また、(A−2)については(2−2)や(2−3)となるようなデータ列は高々有限回の事前計算で求められることから、予め計算した(2−2)や(2−3)のようなデータ列となる初期値の候補を記録し、その記録と比較を行い合致した場合には、途中でデータが書き換わったことを検出可能である。(A−3)については、(A−1)もしくは(A−2)と同様の方法を用いることで、途中でデータが書き換わったことを検出可能である。
【0036】
上記の検出方法をまとめると以下のようになる。
【0037】
(B−1):周期に従った特定のタイミングにおけるデータが常に合致することを期待値としてデータ比較を行うことで検出、予め定めたデータが特定の周期で出現することを確認することで検出する。
【0038】
(B−2):予め計算によって求めた1つもしくは複数の誤りデータとLFSRから得られるデータを比較することで検出する。
【0039】
ここで、第1誤動作検出回路は、上記の(B−1)を実現する。また、第2誤動作検出回路は、上記の(B−2)を実現する。誤動作結果処理回路は、第1誤動作検出回路または第2誤動作検出回路の少なくとも一方によって検出された結果に基づいてCPUの動作を制限する。
【0040】
〔2〕上記〔1〕において、上記第1誤動作検出回路や、上記第2誤動作検出回路はそれぞれ複数個搭載することができる。
【0041】
〔3〕上記〔1〕において、上記の特定周期動作回路を複数個搭載することができる。
【0042】
〔4〕上記〔1〕において、上記誤動作結果処理回路を複数個搭載することができる。
【0043】
〔5〕上記〔1〕において、上記CPUの動作を初期化するリセット信号を処理する機能を含むとき、上記誤動作結果処理回路は、上記リセット信号を上記誤動作制御信号として生成するように構成することができる。
【0044】
〔6〕上記〔1〕において、上記CPUに対する割り込み信号を処理する機能を含むとき、上記誤動作結果処理回路は、上記割り込み信号を上記の誤動作制御信号として生成するように構成することができる。
【0045】
〔7〕上記〔1〕において、上記第1誤動作検出回路は、上記種データもしくは種データを元に生成されるデータ列が上記の特定周期の間に繰り返し演算によって得られないことを検出するように構成することができる。
【0046】
〔8〕上記〔1〕において、記第2誤動作検出回路は、上記種データから生成され得ないデータ群を異常データ群として複数個記録し、この異常データ群の少なくとも1つが繰り返し演算によって得られたことを検出するように構成することができる。
【0047】
〔9〕上記〔8〕において、上記第2誤動作検出回路は、上記種データから生成され得ないデータ群を異常データ群として予め内部の記憶回路に複数個記録し、異常データ群の少なくとも1つが特定周期の間に繰り返し演算によって得られたことを検出するように構成することができる。
【0048】
〔10〕上記〔1〕において、上記の特定周期動作回路を複数個搭載することができる。各特定周期動作回路の繰り返し演算で生成されるデータ列のパターンは各々で同一であり、且つ、上記種データが異なり、ある種データから上記の異なる種データを生成するまでに要する実行クロックが既知の場合に、第3誤動作検出回路(図17の7130)を設けることができる。この第3誤動作検出回路は、任意の特定周期動作回路の出力データが上記の実行クロック後に別の特定周期動作回路の出力とならないことを検出して第3誤動作検出信号をアサートする。かかる場合において上記誤動作結果処理回路は、上記第3誤動作検出信号がアサートされた場合にも上記CPUの動作を制限するための誤動作制御信号を生成する。
【0049】
ここで、先ほどと同様に、4ビットのLFSRを例としてLFSRが二つある状況を考える。各々の原始多項式を同一とし、X4+1とする。初期値をそれぞれ1111と1110として、各々を以下のようにする。
【0050】
(3−1):1111→1110→1101→・・・
(3−2):1110→1101→1010→・・・
このとき、1111の出力されるタイミングは(3−1)と(3−2)では異なるが、周期も同一であり、得られるデータ列もタイミングが異なる点を除けば、同一である。この点に着目して、例えば、(3−1)が1111を処理するタイミングの(3−2)のデータを記憶領域に保存し、(3−1)が1111を処理した結果と記憶領域のデータを比較することで、異なるデータ列になっているかを検出可能である。すなわち、少なくとも片側のデータ列において途中でデータが誤っていることを検出可能である。まとめると、以下の検出方法となる。
【0051】
(B−3):複数LFSRを用意し、同一データ列となるが異なる初期値を用意し、データ列もしくは特定データの出現の有無を比較する。
【0052】
上記第3誤動作検出回路は、上記の(B−3)を実現する回路である。
【0053】
〔11〕上記〔1〕において、上記誤動作処理回路には、符合距離一定回路(1121)と、第4誤動作検出回路(1141)とを設けることができる。符合距離一定回路(1121)は、上記基準クロック信号を用いて、演算結果として得られる異なる二つのデータ間におけるハミング距離の値を一定とする。第4誤動作検出回路(1141)は、上記符合距離一定回路の演算結果のデータにおいて、予め定められたクロック信号間における異なる二つのデータのハミング距離の値が異なる場合に第4誤動作検出信号をアサートする。このとき、上記誤動作結果処理回路は、上記第4誤動作検出信号がアサートされる場合にも上記CPUの動作を制限するための誤動作制御信号を生成するように構成することができる。
【0054】
上記符合距離一定回路は、内部データの状態遷移において、隣り合う二つの状態でのデータ、もしくは異なる二つのデータにおいて、符号理論におけるハミング距離が常に一定となるような内部状態を示す回路である。ハミング距離とは、ビット幅が同一である二つのデータ間におけるビットの違いを示す概念である。具体的には、異なる2つのデータ間において、ビット単位で各々を比較した際に、異なるビット数の総数のことである。ハミング距離が常に一定ということは、あるデータから別のデータへの状態遷移において、データ状態の変化量が一定であることを意味する。
【0055】
ところで、非常に微少量の電流を駆動電流として動作させる場合には、データ状態の変化による電流値の変化が小さいことが要求される。電流値の変化は、データ状態の変化によって何ビットが書き換わるかに依存している。一方で、特に、リングカウンタやジョンソンカウンタは、ハミング距離が一定となる回路である。これらの回路は周期性もあり、ハミング距離が一定の回路である。尚、LFSRにおいては生成多項式によっては、ハミング距離が一定となるが、全ての生成多項式に対してハミング距離が一定になるとは限らない。
【0056】
以下、リングカウンタを符号距離一定回路の例として説明する。
【0057】
4ビットのリングカウンタでは、初期値を1100とした場合、1100→0110→0011→1001→1100→・・・といった状態遷移となる。この4ビットのリングカウンタは、上記から明らかなようにデータ列に周期性があり、周期は4である。すなわち、誤りの検出に(B−1)、(B−2)、(B−3)を用いても検出できる。
【0058】
4ビットのリングカウンタにおけるハミング距離に注目する。データ列のおける隣り合うふたつのデータのハミング距離は常に2である。データ列を1つ置きに取り出した場合のハミング距離は常に4である。データ列が途中で誤った場合、例えば0110が0100と誤った場合、1100→0100(誤りデータ)→0010→0001→・・・となる。このとき、誤りデータとその直前のデータである、1100と0100のハミング距離は1となる。同様に、0110が1010となった場合には、1010→0101→1010→・・・となる。このとき、隣り合うふたつのデータのハミング距離は4となる。従って、ハミング距離を比較することで、データが誤ったことを検出可能である。まとめると、以下の検出方法となる。
【0059】
(B−4):直前のデータと直後のデータにおけるハミング距離を求め、期待値と比較することで検出する。
【0060】
上記第4誤動作検出回路は、上記(B−4)を実現する回路である。
【0061】
〔12〕上記〔1〕において、上記誤動作処理回路は、演算結果として得られるデータのハミング重みの値が一定となる符合距離一定回路(1121)と、上記符合距離一定回路の演算結果のデータにおいてハミング重みの値が異なる場合には第5誤動作検出信号をアサートする第5誤動作検出回路(図13の1141)とを設けることができる。このとき、上記誤動作結果処理回路は、上記第5誤動作検出信号がアサートされる場合にも上記CPUの動作を制限するための誤動作制御信号を生成するように構成することができる。
【0062】
この場合の符号距離一定回路では、ハミング重みが一定となる条件が付与される。ハミング重みとは、ハミング距離の特別な場合の概念がある。具体的には、比較する片側のデータのビット列が全て0となっている場合のハミング距離のことである。つまり、片側のデータにおいてビットの値が1の個数を示す概念である。
【0063】
上記の4ビットのリングカウンタを例として取り上げる。4ビットのリングカウンタでは、正常時にはハミング重みは常に2である。データ列が途中で誤った場合、例えば0110が0100となった場合には、0100→0010→0001→1000→0100→・・・となる。このとき、隣り合うふたつのデータのハミング距離は常に2であるが、ハミング重みは1となる。従って、ハミング重みを計算し、期待値と比較することで、データが誤ったことを検出可能である。まとめると、以下の検出方法となる。
【0064】
(B−5):常時もしくは特定のタイミングにおけるハミング重みを比較する。
【0065】
上記第5誤動作検出回路は、上記の(B−4)を実現する回路である。
【0066】
2.実施の形態の詳細
実施の形態について更に詳述する。
【0067】
<実施の形態1>
図2には、本発明にかかる半導体集積回路が搭載されて成るICカードが示される。
【0068】
このICカード1200には、入出力と電源端子とクロック入力と入出力を行うための端子1210が備えられている。このICカード1200に搭載された半導体集積回路の一例とされるマイクロコンピュータ1230は、特に制限されないが、公知の半導体集積回路製造技術により、単結晶シリコン基板などの一つの半導体基板に形成される。このマイクロコンピュータ1230は、内部に中央演算処理としてCPU1232と、特定処理のためのコプロセッサ1233と、不揮発性メモリ1231及び揮発性メモリ1235とデータの入出力を行う入出力部(1234)を内部モジュールとして有している。これらの内部モジュールは、データのやり取りを可能にするため、内部バス1236を介して相互に結合される。
【0069】
図1には、上記誤動作処理回路1237の構成例が示される。
【0070】
CPU1232には、動作を行う基準クロック信号clk(1110)が入力される。基準クロック信号clkの入力を受けて、特定周期動作回路1120と符号距離一定回路1121と誤動作検出回路1140と誤動作検出回路1141が動作する。これらの回路は、CPU1232と独立して動作する。
【0071】
特定周期動作回路1120と符号距離一定回路1121は、基準クロック信号clkを受けて動作し、内部データの状態をそれぞれ出力信号1130と出力信号1131として出力する。誤動作検出回路1140は特定周期動作回路1120の出力信号1を受けて、出力信号1130が、特定周期動作回路において正しい状態遷移となっているかを検査する。正しい状態遷移でない場合には、誤動作検出信号1150を出力する。誤動作検出回路1141は符号距離一定回路の出力信号1131を受けて出力信号1131が、符号距離一定回路において正しい状態遷移となっているかを検査する。正しい状態遷移でない場合には、誤動作検出信号1151を出力する。
【0072】
誤動作結果処理回路1160は、誤動作検出信号1と誤動作検出信号2を入力として、いずれかの信号で正しくない状態遷移が検出されている場合には、CPUの動作制御を行う制御信号1170を出力する。ここで、制御信号とは、CPUのリセット信号のようなCPUや半導体集積回路の動作状態を止める信号のことである。
【0073】
次に、各部の詳細な構成について更に説明する。
【0074】
特定周期動作回路1120は、内部データの状態遷移に周期性のある回路であり、動作時の内部データの状態を出力信号1130として出力する。出力信号1130は、複数ビットから構成される。周期性のある回路として、例えばLFSR(linear feedback shift register)や線形誤動作法やリングカウンタやジョンソンカウンタといった回路が一例として挙げられる。
【0075】
図5には、特定周期動作回路1120の一例とされる4ビットLFSRが示される。尚、図5に示される4ビットLFSRは、生成多項式をX4+1とした例であり、他の生成多項式を用いたLFSRでも、特定周期動作回路は構成可能である。図5の回路(1120)は、基準クロック信号clk(1110)を入力として、4ビットの信号線から構成される出力信号1130を出力する。尚、4ビットの信号線をO(0)・・O(3)は、1530と総称される。回路の内部には、4つのフリップフロップ回路(FF)1510、1511、1512、1513が存在し、FF1510とFF1513の2つの出力のXOR値を計算するXOR回路1520が存在する。FF1510とFF1511とFF1512とFF1513は、半導体集積回路に電源が投入された時には、4ビットの決まった初期値を保持するものとする。基準クロック信号clkの入力に合わせてFF1511はFF1510の出力値を値として保持し、FF1512はFF1511の出力値を値として保持し、FF1513はFF1512の出力値を値として保持する。FF1510はFF1510とFF1513の二つの出力値のXOR値を値として保持する。FF1510の出力値はO(0)、FF1511の出力値はO(1)、FF1512の出力値はO(2)、FF1513の出力値はO(3)であり、これら4ビットの出力値が出力信号1130を構成する。ここで、初期値としてFF1510=1、FF1511=0、FF1512=0、FF1513=0として与えた時、基準クロック信号clk(1110)信号によって、FF1510=0、FF1511=1、FF1512=0、FF1513=0となる。このときの出力信号1130をO(3)、O(2)、O(1)、O(0)の順に並べると、0010となる。この並びによって、以降の出力信号1130の状態変化を表すと、0010→0100→1000→0001→0010→・・・となり、周期4の状態遷移を出力する。
【0076】
符号距離一定動作回路(1121)は、内部データの状態遷移において、二つの状態遷移におけるハミング距離またはハミング重みが一定の値となる回路のことである。状態遷移におけるハミング距離またはハミング重みが一定となる回路として、例えばリングカウンタや4ビット以上のジョンソンカウンタといった回路が一例として挙げられる。
【0077】
図11には、符号距離一定回路1121の構成例として4ビットのリングカウンタが示される。
【0078】
図11に示される符号距離一定回路1121は、基準クロック信号clk(1110)を入力として、4ビットの信号線から構成される出力信号1131を出力する。ここで、4ビットの信号線P(0)・・・P(3)は2110と総称される。回路の内部には、4つのフリップフロップ回路(FF)FF2120、FF2121、FF2122、FF2123が存在する。FF2120とFF2121とFF2122とFF2123は、半導体集積回路に電源が投入された時には、4ビットの決まった初期値を保持するものとする。基準クロック信号clkの入力に合わせて、FF2121はFF2120の出力値を値として保持し、FF2122はFF2121の出力値を値として保持し、FF2123はFF2122の出力値を値として保持し、FF2120はFF2123の出力値を値として保持するものとする。FF2120の出力値はP(0)、FF2121の出力値はP(1)、FF2122の出力値はP(2)、FF2123の出力値はP(3)であり、これら4ビットの出力値が出力信号1131を構成する。ここで、初期値としてFF2120=1、FF2121=0、FF2122=0、FF2123=0として与えた時、基準クロック信号clk(1110)信号によって、FF2120=0、FF2121=1、FF2122=0、FF2123=0となる。このときの出力信号1131をP(3)、P(2)、P(1)、P(0)の順に並べると、0010となる。この並びによって、以降の出力信号1131の状態変化を表すと、0010→0100→1000→0001→0010→・・・となり、周期4の状態遷移且つ隣り合う出力信号1131の状態はハミング距離が2となる。また、このとき、どの出力信号1131もハミング重みは1となる。
【0079】
誤動作検出回路1140は、特定周期動作回路1120の出力である出力信号1130と基準クロック信号clk(1110)を入力とし、誤動作検出信号1150を出力する。誤動作検出回路1140は、特定周期動作回路の出力信号1130の周期性を用いて、出力信号1130の状態遷移に矛盾がないかを確認し、矛盾がある場合には誤動作検出信号1を出力する。
【0080】
ここで、図7と図8を用いて誤動作検出回路1140の構成例について説明する。
【0081】
図7では、誤動作検出回路1140に対して、出力信号1130と基準クロック信号clk(1110)を入力とし、誤動作検出信号1150を出力する。誤動作検出回路1140は、データ比較回路1710を2つと、比較データ1720と、周期データ1730と、clkカウンタ1740と、AND回路1630と、排他的論理和回路(XOR)1520を含んで構成される。
【0082】
予め定めた比較データ1720と出力信号1130をデータ比較回路1710によって比較を行う。データ比較回路1710は全データが合致した場合には1を出力し、1つでも合致しない場合には0を出力するものとする。出力結果はAND回路1630とXOR回路1520に入力される。また、基準クロック信号clkの入力に合わせてclkカウンタ1740が動作する。予め定めた周期データ1730とclkカウンタ1740の値をもう1つのデータ比較回路1710によって比較し、結果をAND回路1630とXOR回路1520に入力する。比較データが合致する場合は、AND回路からclkカウンタ1740に対してデータリセット信号1750として、1(ハイレベル)が出力される。これによって、clkカウンタ1740は初期化され、カウントを最初から行う。また、XOR回路1520においては、ふたつのデータ比較回路の結果が異なる場合には、周期もしくは比較データが異なったと判定され、誤動作検出信号1150として1を出力する。特に図5のLFSRの場合、初期値に0000を入力すると、周期は1となる。これは、生成多項式に依存しない性質であることから、他のLFSRの回路において、初期の値を0として検出しても良い。このとき、誤動作検出回路1140は、例えば図18に示されるように、比較データ1720とデータ比較回路1710とNOT回路2260によって構成される回路でも良い。また、全ての値が常に0である点に着目して、図19のようなXOR回路のみで構成される回路でも良い。LFSRに限らず周期性のある回路において、値が一定となる初期値がある場合、初期値を維持し続けるかを比較し、検出しても良い。
【0083】
図8では、誤動作検出回路1140に対して、出力信号1130と基準クロック信号clk(1110)を入力とし、誤動作検出信号1150を出力する。誤動作検出回路1140は、データ比較回路1710と予め計算した特定周期動作回路1120が状態遷移として取り得ない値を異常データ(1810)から構成される。
【0084】
出力信号1130が入力される毎にデータ比較回路は異常データと比較を行い、比較した結果、異常データと合致した場合には、誤動作検出信号1150として1を出力する。尚、先に図5で説明したLFSRの例でも明らかなように、異常データの状態遷移列は複数個考えられる。このため、例えば、図9に示されるように、複数の異常データとして異常データ1910と異常データ1911に対して、複数のデータ比較回路1710で比較を行い、少なくとも1つのデータ比較回路1710において1が出力された結果を誤動作検出信号1150として出力するために、OR回路1920を用いるという構成例もあり得る。図9では、異常データは2つとしているが、予め計算によって3つ以上がある場合には、図9の構成を元に3つの異常データと比較する回路を構成しても良い。上記でも示したが、図5のLFSRにおいて初期値を0000とした場合についても、同様の異常データを予め計算し、その結果を異常データとして記録して比較と検出をしても良い。また,複数の異常データが予め定めた特定周期の間に出現したことを検出しても良い。ここで,特定周期は一定周期動作回路の周期でも良いが,予め計算によって定めた異なる周期を設定しても良い。
【0085】
図7に示される回路と図8に示される回路との双方を誤動作検出回路1140内に設け、図7に示される回路及び図8に示される回路の少なくとも一方によって誤動作検出が行われる場合に誤動作検出信号1150がアサートされるように構成することができる。この場合において、図7に示される回路及び図8に示される回路との少なくとも一方を複数個設け、それらのオア論理を得るようにしても良い。
【0086】
誤動作検出回路1141は、符号距離一定回路1121の出力である出力信号1131と基準クロック信号clk(1110)を入力とし、誤動作検出信号1151を出力する。誤動作検出回路1141は、符号距離一定回路が出力する出力信号1131の状態遷移もしくはデータにおけるハミング重みやハミング距離の観点で一定の値となっているかを確認し、異なっている場合には誤動作検出信号2を出力する。
【0087】
ここで、図12と図13を用いて誤動作検出回路1141の構成を説明する。図12では、誤動作検出回路1141に対して、出力信号1131と基準クロック信号clk(1110)を入力とし、誤動作検出信号1151を出力する。誤動作検出回路1141は、出力信号1131のデータを格納する4つのフリップフロップであるFF2251、FF2252、FF2253、FF2254を含む。さらに誤動作検出回路1141は、AND(アンド)回路1630と、XOR(排他的論理和)回路1520、NOT(ノット)回路2260と、4ビットの入力をカウントする4ビット入力カウンタ2230と、データ比較を行うデータ比較回路1710とを含む。また、FF31〜FF34においては、最初に入力される出力信号1131の前の状態を予め計算によって求め、その値を初期状態として格納することとする。
【0088】
出力信号1131が更新される時、P(0)の値とFF31の出力値がXOR回路1520に入力され、異なっている場合には1を出力し、同じ場合には0を出力し、4ビット入力カウンタ2230に入力する。これを他のP(1)、P(2)、P(3)に対しても同様に行う。4ビット入力カウンタ2230は入力信号2とFF31〜FF34の各々で異なっている値の総数をカウントし、カウント結果を2ビット信号として出力する。カウント結果はデータ比較回路1710へ入力され、同様に入力されるハミング距離データ(2240)の値と比較する。データ比較回路は値が合致している場合には1を出力し、異なっている場合には0を出力する。データ比較回路の出力で0が出力された場合には、NOT回路2260で値を反転し、誤動作検出信号1151として1を出力する。また、データ比較回路において1が出力された場合、その値をP(0)〜P(3)の各々と対にして、各AND回路1630に入力する。各AND回路の出力を、FF31〜FF34までの各々に入力することで、FF31〜FF34の更新が行われる。そして、次の出力信号1131の入力に対して、同様の処理を繰り返す。
【0089】
図13では、誤動作検出回路1141に対して、出力信号1131と基準クロック信号clk(1110)を入力とし、誤動作検出信号1151を出力する。誤動作検出回路1141は、4ビット入力カウンタ2230と、予め計算によって求めたハミング重みデータ2310と、データ比較回路1710と、NOT回路2260から構成される。
【0090】
ここで、出力信号1131は4ビットの信号とし、P(0)・・・P(3)(2110)と各々の信号を分割できる。各々の信号を4ビット入力カウンタ2230に入力する。4ビット入力カウンタ2230はカウント結果を2ビット信号として出力し、出力結果はデータ比較回路1710に入力する。一方で、ハミング重みデータ2310もデータ比較回路1710に入力する。データ比較回路は、2つの入力値を比較した結果が合致している場合には1を出力し、異なる場合には0を出力する。異なる場合の出力結果0をNOT回路2260によって反転し、誤動作検出信号1151として出力する。
【0091】
尚、特定周期動作回路の出力データにおいて、ハミング距離が一定である場合やハミング重みが一定であるという特徴がある場合には、誤動作検出回路1140に図12や図13のような回路を用いても良い。また、符号距離一定回路1121においてデータの状態遷移に周期性がある場合には、誤動作検出回路1141に図7や図8や図9を用いても良い。
【0092】
誤動作結果処理回路1160は、誤動作検出回路1140や誤動作検出回路1141から出力される誤動作検出信号1150や誤動作検出信号1151を入力とし、制御信号1170を出力する回路である。
【0093】
図14を用いて、誤動作結果処理回路1160の構成例について説明する。
【0094】
誤動作結果処理回路1160は誤動作検出信号1150と誤動作検出信号1151を入力とし、制御信号1170を出力する。誤動作結果処理回路では、OR回路1920から構成される。各入力から1が少なくとも1つ入力された場合には、制御信号1170として出力する。出力された制御信号は、図1のCPU1232に入力される。ここで、制御信号とは、例えばCPUのリセット信号であったり、割り込み処理信号であったり、と半導体集積回路の動作を停止することが出来る信号のことである。尚、CPU1232の内部には割り込み処理を行う専用回路が搭載されている場合が考えられる。この場合、図4に示されるように、CPU内部の制御回路1300に対して制御信号1170を直接入力しても良い。
【0095】
以上から、特定周期動作回路1120もしくは符号距離一定回路1121を用いた回路において発生した誤動作を検出することが可能である。
【0096】
<実施の形態2>
上記の実施の形態1においては、図1や図4を用いた例のように、誤動作結果処理回路1160から出力される制御信号1170は、CPU1232に直接入力している。しかしながら、制御信号は、CPU1232に直接入力する必要はなく、例えば図3に示されるように、CPU1232以外の半導体集積回路全体を制御する制御回路1300に制御信号1170が入力されても良い。図3に示される構成では、CPU1232の動作をリセットする動作を考えており、制御回路1300からCPU1232にリセット信号1310を出力する。勿論、制御回路はリセット信号だけに限らず、例えば、誤動作が起きたことを示す信号をI/Oから出力するといった処理を行っても良い。例えばCPU1232に対する割り込み信号を出力するようにしても良い。
【0097】
また、実施の形態1において、誤動作検出信号1150や誤動作検出信号1151は誤動作検出時に1を出力するとしたが、通常時は1を出力とし、誤動作検出時には0を出力としても良い。同様に、制御信号も誤動作検出時には1を出力するとしたが、0(ローレベル)を出力しても良い。これは、光の照射によって、出力信号に指向性が発生する可能性があるためであり、実際の誤動作状態の観測によって、出力信号を決定することが望ましい。ここで指向性とは光の照射によって信号または内部ビットの値が変化する傾向のことであり、例えば、1→0と変化はするが、0→1は変化しないといった現象のことである。この例に従った場合には、誤動作検出信号1や誤動作検出信号2や制御信号は常時1と固定しておくことで、より検出精度を高めることが可能である。
【0098】
光の照射による指向性が考えられる場合、特に0→1が発生するが1→0が発生しないか影響が少ないと考えられる場合、実施の形態1で述べたように図5のLFSRの初期値を0000とすることで十分な検出能力が期待できる。
【0099】
<実施の形態3>
上記の実施の形態1と実施の形態2では、特定周期動作回路1120や符号距離一定回路1121は、マイクロコンピュータ1230上に設けた。しかしながら、実施の形態1で述べたLFSRやリングカウンタといった回路は、半導体集積回路の機能によっては標準で搭載されている。このため、例えば、特定周期動作回路もしくは符号距離一定回路がCPU内部の機能として搭載されている場合も考えられる。この場合でも、例えば、図10に示すような構成によって本発明は実施可能である。
【0100】
図10では、CPU1232内部に特定周期動作回路1120と符号距離一定回路1121や制御回路1300が搭載されている。このとき、特定周期動作回路や符号距離一定回路はCPU内部の1つのモジュールとして動作し、出力信号をCPU外の誤動作検出回路1140と誤動作検出回路1141に出力信号1130と出力信号1131を出力する。このとき、誤動作検出回路1140と誤動作検出回路1141と誤動作結果処理回路1160は、本発明を実施するために搭載する回路となる。上記に限らず、誤動作結果処理回路や誤動作検出回路1140と誤動作検出回路1141もCPU内部やその他搭載回路において、同等の回路があればそれを利用しても良い。
【0101】
特に、実施の形態1で示したように、LFSRで初期値の値が全て0となる場合、LFSRの出力は全て0となることも利用できる。このとき、CPU内部の機能として搭載されたLFSRの生成多項式を変更する必要はない。具体的には、図18や図19に示される誤動作検出回路1140で誤動作を検出し、LFSRには初期値として全ての値を0とすれば良い。
【0102】
ここで、図10の特定周期動作回路1120が4ビットLFSRであった場合、通常のLFSRでは原始多項式を用いるように設計される。このとき、特定周期動作回路は、例えば図6に示すような回路とすることで、通常の原始多項式を用いたLFSRの機能と特定周期動作回路の機能とを切り替えて使用することが可能となる。図6における特定周期動作回路1120は、入力として、基準クロック信号clk(1110)と信号I(0)(1620)と信号I(1)(1621)と信号I(2)(1622)と信号I(3)(1623)を入力とし、出力信号1130を出力する。信号I(0)〜I(3)は、生成多項式を決定するための入力信号である。例えば、生成多項式をX4+1とする場合には、I(0)=0、I(1)=0、I(2)=0、I(3)=1とする。また、既約多項式とする場合には、I(0)=1、I(1)=0、I(2)=0、I(3)=1とする。このとき、信号I(i)(i=0,1,2,3)は、AND回路1630を経由して、フィードバックの有無を決定する。尚、XOR回路(1610)は4入力XOR回路である。このような入力信号とAND回路の組み合わせを用いることで、従来のLFSR回路に特定周期動作回路としての機能を付与することができる。これはnビットのLFSRにおいても同様である。尚、通常のLFSRでは初期値を固定とするが、特定周期動作回路として併用する場合、通常のLFSRでの初期値をFF1510〜FF1513に初期値として入力しても良い。また、通常のLFSRでの初期値以外をFF1510〜FF1513に入力しても良い。
【0103】
<実施の形態4>
上記の実施の形態1と実施の形態2と実施の形態3においては、図1のように、特定周期動作回路1120から出力される出力信号1130は、1つの誤動作検出回路1140に入力していた。同様に、符号距離一定回路1121から出力される出力信号1131は、1つの誤動作検出回路1141に入力していた。しかしながら、これらの入力と出力の組み合わせは各々が1つずつで無くとも良い。例えば、2つ以上の特定周期動作回路から出力された信号をXOR回路によって各ビットに違いが無いことを確認し、違いがあれば誤動作結果処理回路に1を入力し、違いがなければ、誤動作検出回路1140に出力信号1130を入力しても良い。例えば、1つの特定周期動作回路に対して、誤動作検出回路1140が複数個存在しており各々に出力信号1130を入力しても良い。この場合の構成例について、図15と図16を用いて以下に説明する。
【0104】
図15では、特定周期動作回路に対して基準クロック信号clkが入力され、出力信号1130を出力する。出力信号1130は、誤動作検出回路4110と誤動作検出回路4111へ入力される。誤動作検出回路4110と誤動作検出回路4111はそれぞれ誤動作検出信号1150を出力し、誤動作結果処理回路1160に入力する。このとき、誤動作検出回路4110と誤動作検出回路4111は、例えば、図7と図9に示したような回路をそれぞれ組み合わせて用いても良い。また、同一の回路のみを用いても良い。特に、特定周期動作回路が符号距離一定回路としての振る舞いを行う場合には、図12や図13に示したような回路を組み合わせても良い。例えば、生成多項式をX4+1としたLFSRの場合にはリングカウンタとしての振る舞いを行うことから、ハミング距離やハミング重みが一定となることから、例えば図7と図9と図12と図13に示した回路を組み合わせることが可能である。また、図15では、誤動作検出回路は2個としたが、3個以上とすることができる。
【0105】
同様に図16では、符号距離一定回路に対して基準クロック信号clkが入力され、出力信号1131を出力する。出力信号1131は、誤動作検出回路5110と誤動作検出回路5111へ入力される。誤動作検出回路5110と誤動作検出回路5111は、それぞれ誤動作検出信号1151を出力し、誤動作結果処理回路1160に入力する。このとき、誤動作検出回路5110と誤動作検出回路5111は、例えば、図12と図13に示したような回路を組み合わせて用いても良い。また、同一の回路のみを用いても良い。特に、上記のようにリングカウンタは特定周期動作回路として振舞う。従って、図7と図9と図12と図13に示した回路を組み合わせることが可能である。また、図16では誤動作検出回路は2個としたが、3個以上とすることができる。
【0106】
また、同様に、誤動作結果処理回路も3個以上とすることができる。
【0107】
<実施の形態5>
上記の実施の形態4では、特定周期動作回路を複数個用いる方法について示した。このとき、特定周期動作回路における初期状態が異なるが、生成されるデータ列が同じ場合でも、本発明における誤動作検出回路は構成可能である。例えば、図17のような構成を1つの例として示す。図17では、特定周期動作回路7120と特定周期動作回路7121がそれぞれ出力信号7110と出力信号7111を出力する。誤動作検出回路7130は、出力信号11と出力信号12と基準クロック信号clk(1110)を入力とし、誤動作検出信号1150を出力する。誤動作検出回路−3は、データ比較回路1710と、出力信号12を1クロックの期間に保持するデータバッファ7140と、NOT回路2260から構成される。ここで、特定周期動作回路1と特定周期動作回路2をそれぞれ、生成多項式をX4+1としたLFSRとして、初期値をそれぞれ0011と0110とする。このとき、特定周期動作回路1の出力信号は以下のようになる。
【0108】
0011→0110→1100→1001→0011→・・・
また、特定周期動作回路2の出力信号は以下のようになる。
【0109】
0110→1100→1001→0011→0110→・・・
また、データバッファ7140は初期値として、0011を保持することとする。このとき、最初のクロックで特定周期動作回路1は、0011を出力信号11として出力し、特定周期動作回路2は0110を出力信号12として出力する。データ比較回路は、データバッファ1720の0011と出力信号11の0011の値を比較する。同時に、出力信号12の1100がデータバッファに入力される。この手順を以降の基準クロック信号clkにおいても同様に繰り返す。このとき、データ比較回路で比較結果が一致しない場合には0を出力し、NOT回路2260によって1に反転し、誤動作検出信号1として出力する。
【0110】
上記のように特定周期動作回路が一定の周期でデータ列を繰り返すことを着目し、複数の出力と複数の初期値を組み合わせることで、誤動作状態を検出することが可能である。また、この例では、誤動作検出回路1と誤動作検出回路の出力するデータ列は1クロックの差であったが、複数クロックの差であっても良い。また、特定周期動作回路も2個に限らず、3個以上とすることができる。
【0111】
同様に、符号距離一定回路に関しても、複数入力と異なる初期値とデータバッファを用いてハミング距離を比較することが可能である。
【0112】
上記の例によれば、以下の作用効果を得ることができる。
【0113】
特定周期動作回路及び符号距離一定回路において誤動作が発生した場合において、誤動作検出が可能である。
【0114】
上記の実施の形態では、内部データの周期性やデータの状態遷移の特徴を用いた検出方式であることから、光を複数箇所に照射する場合でも誤動作検出が可能である。特に、リングカウンタの例の場合、上記の第1から第4までの特徴を用いた検出回路の構成が可能である。このとき、検出回路を全て搭載した場合には、ハミング距離や周期性を考慮し、且つ検出回路にも誤動作を引き起こす必要がある。これを行うには、ハミング距離や周期やデータ列の状態を加味して、それぞれの箇所に検出が無効となるような値を書き出すといった誤動作が必要となる。これを行うには、検出回路の内部に設定された比較用データの値のような具体的な情報を取得する必要がある。ところが、本実施の形態における検出回路では、内部データを出力する機能は有していないため、内部データの取得は困難である。また、内部データを解析する方法としては、リバースエンジニアリングの手法を用いることも考えられるが、非特許文献1の方法を実装することで、この危険性はなくなる。従って、本実施の形態によれば、複数の光照射を加味した場合でも検出器の冗長化を行わずに誤動作検出が可能である。
【0115】
一方で、本実施の形態は半導体集積回路の本来の機能に対して直接作用する検出方法ではない。そして、本実施の形態において防御する対象は半導体集積回路の本来の機能での内部情報である。しかしながら、特定周期動作回路や符号距離一定回路を保護したい回路付近に配置することによって、光検出器と同等の役割を果たす。
【0116】
ところで、従来技術によれば、光検出器においては感度の調整が困難であるという課題があった。この点について本実施の形態における特定周期動作回路や符号距離一定回路は、防御対象となる半導体集積回路で採用される標準セルを用いて構成可能である点で調整は不要である。例えば、太陽光のような自然光で検知をする場合には、他の標準セルでは誤動作が起きる状態となるので、誤動作を検知するという観点では正しい。また、強い光についても同様で、標準セルが誤動作を引き起こす強度の光を照射した場合には、特定周期動作回路や符号距離一定回路も同様に誤動作を引き起こすことから正しい。従って、感度の調整が不要となる。更に本実施の形態では、光照射のみならず、電磁波や放射線等による誤動作についても半導体集積回路で誤動作が発生する限りは、検出可能である。
【0117】
また、本実施の形態では、半導体集積回路の論理構成には大きく影響を及ぼさない。すなわち、従来の半導体集積回路の構成に、新たに本発明の回路を付与することで、光照射の検出が可能となる。
【0118】
本実施の形態において光照射によって誤動作を起こし、検出回路によって検出する誤動作現象を保持する特定周期動作回路や符号距離一定回路については、通常の半導体集積回路にも必要機能として搭載されることがある。つまり、上記の誤動作検出回路と誤動作結果処理回路を付与することで、本実施の形態での光検出機能を付与することが可能となる。
【0119】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【符号の説明】
【0120】
1120 特定周期動作回路
1121 符号距離一定回路
1140,1141 誤動作検出回路
1160 誤動作結果処理回路
1200 ICカード
1230 マイクロコンピュータ
1231 不揮発性メモリ
1232 CPU
1233 コプロセッサ
1234 入出力部
1235 揮発性メモリ
1237 誤動作処理回路
【技術分野】
【0001】
本発明は、電磁波の照射や光の照射によって発生する誤動作現象とその現象による内部解析を防止する機能を有する半導体集積回路に関する。
【背景技術】
【0002】
半導体集積回路が搭載されたICカードには、入出力と電源端子とクロック入力と入出力を行うための端子が備えられている。また、内部には、CPU(中央処理装置)、特定処理のためのコプロセッサ、不揮発性メモリ、揮発性メモリ、データの入出力を行う入出力部などの各種内部モジュールが設けられている。これらの内部モジュール間でのデータ通信は内部バスを介して行われる。
【0003】
例えば非特許文献1によれば、上記ICカードに代表されるセキュリティモジュールにおいては、その内部に搭載された半導体集積回路やメモリにおけるリバースエンジニアリングの困難性と、暗号解読の計算量的困難性により、セキュリティを保証してきた。リバースエンジニアリングを困難にする方法として、非スタンダードセルを用いる、ダミー回路の敷設、メモリのスクランブル配置、バスのスクランブル配置、テストパッドの製品チップからの切断などが行われている。
【0004】
暗号解読の困難性は、暗号解読に必要とされる計算量が十分大きく、現実的な時間では解読手出来ないことを安全性の根拠としている。この計算量に基づく困難性は、秘密鍵のビット長に依存しており、鍵長が長くなると解読に必要な計算量は大きくなる。半導体集積回路技術の発達に伴い、利用可能な計算機パワーが増大するため、安全な鍵のビット長は時が経つにつれ長くなっている。
【0005】
こうしたリバースエンジニアリングや計算量的な困難性による対策に左右されない攻撃手法として、誤動作解析アタックが存在する。誤動作解析アタックとは、半導体集積回路上の動作に誤りを起こさせ、正しい計算結果と誤った計算結果の差分を用いて鍵情報を推定する手法で、多くの暗号に対してアタック手法が開発されている。このアタック手法の特徴は、アタックに必要な時間が非常に少ない点である。例えば非特許文献2によれば、CRT演算法を用いたRSA暗号に対する誤動作解析アタック手法では、鍵長にかかわらず、たった1回の演算誤りが得られれば、正しい値と誤った値の差分と公開鍵のモジュロNとの最大公約数から、秘密素数pが得られ、その結果から秘密鍵を推定できることが知られている。
【0006】
また、非特許文献3によれば、秘密鍵暗号系として広く用いられているDES暗号では、正しい演算結果と誤った結果が数個から数十個が得られると、秘密鍵を得ることができることが報告されている。これらのアタックは、アタックに必要な計算量が暗号鍵の長さにかかわらず一定か、もしくは暗号鍵のビット長のみに比例し、かつ計算量は非常に小さいという特徴がある。
【0007】
さらに、非特許文献4によれば、半導体集積回路上の動作に誤りを引き起こす具体的方法としては、光照射によって内部データを意図した値以外に書き換えが可能であることが、S. Skorobogatovらによって報告されている。
【0008】
このように光照射による誤動作結果として、ハードウェア内部のデータが書き換え可能であること、及び暗号処理中の誤動作結果から暗号鍵が解析可能であることの組み合わせによって、内部情報の解析が可能であるのは明かである。
【0009】
光照射によるハードウェアの誤動作に対する対策として代表的なものは、(1)光照射の検出、(2)誤動作によるハードウェア論理の矛盾を用いた検出といった方法が挙げられる。
【0010】
上記(1)の方法は、例えば特許文献1に記述されている。この方法では、光検出機能を有した回路を他の回路と区別がつきにくく偽装し、守りたい回路付近に配置するという方法である。光検出方法として、スタティックラッチの値の観測を行う方法が示されており、この方法はSRAMに代表される揮発性メモリに搭載可能であることが特許文献1で述べられている。また、別の光検出方法として、電流比を観測することで検出する方法が示されている。この方法は、光検出用素子が消費する電流が通常の素子と比して乖離があるかを検出する方法である。
【0011】
上記(2)の方法の代表例については、特許文献2に記述されている。この方法では、演算処理を行うCPU上の各機能において、内部レジスタの冗長化、マイクロデコーダの再エンコードによる検算、該CPUにおける基準クロック信号を冗長化したカウンタの比較、該CPUのバス回路においてバスの入出力の比較といった方法である。この方法は、冗長化もしくは再エンコードによって内部データを冗長化し、比較する方法である。
【先行技術文献】
【特許文献】
【0012】
【特許文献1】特開2004−206680号公報
【特許文献2】特開2008−158826号公報
【非特許文献】
【0013】
【非特許文献1】W.Rankl&W.Effing、Smart Card Handbook Second Edition、pp.412−420、WILEY、2000、ISBN 0−471−98875−8
【非特許文献2】D.Boneh, R.A. DeMillo, and R.J. Lipton:On the Importance of Checking Cryptographic Protocols for Faults, EUROCRYPT ’97, volume 1233 of Lecture Notes in Computer Science, pager 37−51, Springer−Verlag, 1997
【非特許文献3】E. Biham, A. Shamir, ”A New Cryptanalytic Attack on DES”, http://www.jya.com/dfa.htm,1996
【非特許文献4】S. Skorobogatov, R. Anderson, ”Optical Fault Induction Attacks”, CHES2002,LNCS2523,Springer−Verlag,ISBN3−540−00409−2,pp2−12
【発明の概要】
【発明が解決しようとする課題】
【0014】
上記のように特許文献1には、電流比を用いる検出方法が示されている。この方法では、検出に必要な上記の電流比を、想定する光照射に応じて設定する必要がある。また、太陽光といった通常想定される自然光程度の光では検出動作をしないように、電流比を設定する必要がある。従って、半導体集積回路の動作を妨げないように且つ攻撃に想定される光照射を検出するように、電流比の設定が必要とされる。また、スタティックラッチの値を観測する方法では、比較対象となるふたつの値を同時に誤らせた場合については、検出が行われない。従って、顕微鏡レンズ等と光照射装置を複数組み合わせた方法によって複数箇所に光を照射する攻撃に対しては、検出機能が機能しないことが考えられる。
【0015】
また、特許文献2の方法では、冗長化による検出方法が示されている。しかしながら、冗長化による方法では、顕微鏡レンズ等を用いて照射する光を微細なサイズに絞り、光照射装置と顕微鏡レンズを複数組み合わせることで、複数箇所を同時に誤動作させる攻撃方法が考えられる。特許文献2では、複数照射の攻撃に対して、より多重に冗長化することで安全性を高める方法を用いている。また、特許文献2では、冗長化は光の照射の組み合わせが指数関数的に増加することから、2〜3重で十分であるとしている。しかしながら、冗長化した箇所は、照射範囲を絞った1つの光を半導体集積回路全面に対して、順番に照射すること、及び半導体集積回路の動作状態の観測を組み合わせることで、検出機能が施された箇所を推定することは可能である。この方法を用いると、照射回数を増加することもなく冗長化箇所の推定が可能となる。従って、特許文献2のように冗長化が2〜3重の場合には、冗長化したデータが同時に書き換えることが可能であり、かかる場合には、冗長化したデータの比較による検出機能が機能しないことが考えられる。また、特許文献2の方法では、冗長化を行わない方法としてマイクロデコーダの出力コードを再エンコードする方法が示されている。この方法においても、上記のように複数箇所同時に誤動作させる攻撃に対しては、検出機能が機能しないことが考えられる。
【0016】
本発明の目的は、複数箇所同時に誤動作させる攻撃に対しても誤動作検出可能な半導体集積回路を提供することにある。
【0017】
本発明の上記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【0018】
本願において開示される発明のうち代表的なものについて簡単に説明すれば下記のとおりである。
【0019】
すなわち、CPUと誤動作処理回路とを設ける。上記誤動作処理回路は、予め定められた特定周期の間に予め定められた種データを元に生成されるデータ列を繰り返し演算する特定周期動作回路と、上記の特定周期動作回路の動作においてデータ列の演算に要する周期が上記の特定周期と異なることを検出して第1誤動作検出信号をアサートする第1誤動作検出回路とを含む。また上記誤動作処理回路は、上記の特定周期動作回路において上記の種データから生成され得ないデータを異常データとし、この異常データが得られたことを検出して第2誤動作検出信号をアサートする第2誤動作検出回路を含む。さらに上記誤動作処理回路は、上記第1誤動作検出信号及び上記第2誤動作検出信号の少なくとも一方がアサートされた場合、上記CPUの動作を制限するための誤動作結果処理回路を含む。内部データの周期性やデータの状態遷移の特徴を用いた検出方式を採用することで、光を複数箇所に照射する場合でも誤動作検出を可能とする。
【発明の効果】
【0020】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
【0021】
すなわち、本発明によれば、複数箇所同時に誤動作させる攻撃に対しても誤動作検出可能な半導体集積回路を提供することができる。
【図面の簡単な説明】
【0022】
【図1】本発明にかかる半導体集積回路における主要部の構成例ブロック図である。
【図2】上記半導体集積回路が搭載されて成るICカードの構成例ブロック図である。
【図3】上記半導体集積回路に含まれる誤動作処理回路の構成例ブロック図である。
【図4】上記半導体集積回路に含まれるCPU内の制御回路を示すブロック図である。
【図5】上記半導体集積回路に含まれる特定周期動作回路の構成例回路図である。
【図6】上記半導体集積回路に含まれる特定周期動作回路の構成例回路図である。
【図7】上記半導体集積回路に含まれる誤動作検出回路の構成例回路図である。
【図8】上記半導体集積回路に含まれる誤動作検出回路の構成例ブロック図である。
【図9】上記半導体集積回路に含まれる誤動作検出回路の構成例回路図である。
【図10】上記半導体集積回路に含まれる誤動作処理回路の構成例ブロック図である。
【図11】上記半導体集積回路に含まれる符号距離一定回路の構成例回路図である。
【図12】上記半導体集積回路に含まれる誤動作検出回路の構成例回路図である。
【図13】上記半導体集積回路に含まれる誤動作検出回路の構成例回路図である。
【図14】上記半導体集積回路に含まれる誤動作結果処理回路の構成例回路図である。
【図15】上記半導体集積回路における主要部の別の構成例ブロック図である。
【図16】上記半導体集積回路における主要部の別の構成例ブロック図である。
【図17】上記半導体集積回路における主要部の別の構成例ブロック図である。
【図18】上記半導体集積回路における誤動作検出回路の構成例ブロック図である。
【図19】上記半導体集積回路における誤動作検出回路の構成例ブロック図である。
【発明を実施するための形態】
【0023】
1.実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【0024】
〔1〕本発明の代表的な実施の形態に係る半導体集積回路(1230)は、所定の演算処理を行うCPU(1232)と、誤動作による内部解析を阻止するための誤動作処理回路(1237)とを備える。上記誤動作処理回路(1237)は、特定周期動作回路(1120)、第1誤動作検出回路(4110)、第2誤動作検出回路(4111)、及び誤動作結果処理回路(1160)を含む。
【0025】
上記特定周期動作回路(1120)は、基準クロック信号を用いて、予め定められた特定周期の間に予め定められた種データを元に生成されるデータ列を繰り返し演算する。上記第1誤動作検出回路(4110)は、上記特定周期動作回路の動作においてデータ列の演算に要する周期が上記の特定周期と異なることを検出して第1誤動作検出信号をアサートする。上記第2誤動作検出回路(4111)は、上記の特定周期動作回路において上記の種データから生成され得ないデータを異常データとし、この異常データが得られたことを検出して第2誤動作検出信号をアサートする。上記誤動作結果処理回路(1160)は、上記第1誤動作検出信号及び上記第2誤動作検出信号の少なくとも一方がアサートされた場合、上記CPUの動作を制限するための誤動作制御信号を生成する。
【0026】
半導体集積回路においては内部データに周期性のある回路が搭載されることがある。周期性のある回路の例として、擬似乱数生成器が挙げられる。擬似乱数生成回路は、Linear Feedback Shift−Register(LFSR)と呼ばれる回路や、線形合同法を用いた回路による擬似乱数生成器が例として挙げられる。これらの回路については、初期状態として与えられたデータに対して、出現するデータ列に周期性が存在し、一定の周期で同一のデータが出現する。
【0027】
nビットLFSRでは、2n−1種類のデータが繰り返されるデータ列の候補となる。データ列の種類の数は、LFSRの元となる生成多項式に依存し、2n−1種類のデータ列を得たい場合には、n次の原始多項式を用いて設計を行う。擬似乱数生成器としてのLFSRの場合では、データ列がより多くあることで乱数性が高まることから、データ列が最大となるようにn次の原始多項式を採用する。例えば、nが4の場合では原始多項式の1つはX4+X+1である。この原始多項式を生成多項式としたLFSR回路では、初期値を1111とした場合には、(0−1):1110→1101→1010→0101→1011→0110→1100→1001→0010→0100→1000→0001→0011→0111→1111→・・・と同一データの繰り返しとなる。また、データ列に出現するデータの種類は24−1=15種類である。すなわち、X4+X+1を生成多項式とするLFSRは、周期を15として繰り返してデータを生成する。
【0028】
ここで、生成多項式をX4+X3+X2+X+1とした場合のLFSRを考える。0000という初期値の場合を除いて、次の3種類のデータ列が初期値に応じて生成される。
【0029】
(1−1):0001→0011→0110→1100→1000→0001→・・・
(1−2):0010→0101→1010→0100→1001→0010→・・・
(1−3):0111→1111→1110→1101→1011→・・・
これらのデータ列のいずれかで出現したデータは、他のデータ列では出現しない。このLFSRは、周期を5として繰り返しデータ列を生成する回路である。同様に、生成多項式をX4+1とした場合、0000という初期値の場合を除いて、次の5種類のデータ列が初期値に応じて生成される。具体的には、以下の5種類である。
【0030】
(2−1):0001→0010→0100→1000→0001→・・・
(2−2):0011→0110→1100→1001→0011→・・・
(2−3):0111→1110→1101→1011→0111→・・・
(2−4):0101→1010→0101→・・・
(2−5):1111→1111→・・・
【0031】
これら5種類のデータ列は周期性を持っているが、データ列毎の周期は必ずしも一致しない。一方、これらのデータ列のいずれかで出現したデータは、他のデータ列では出現しない。このとき、初期値を0001として(2−1)で示したようなデータ列がLFSRによって処理されるものとする。このデータ列において、何らかの理由で途中のデータが任意の値に書き換わると、次の3種類の現象が発生する。
【0032】
(A−1):(2−1)のデータ列を処理するが、書き換わったタイミング前後においてデータ列の出現パターンが異なる。
【0033】
(A−2):(2−1)以外のデータ列を処理し、周期が同一であるものの出現データが(2−1)と異なり、特に(2−2)や(2−3)のデータ列の処理に遷移した場合が挙げられる。
【0034】
(A−3):(2−4)や(2−5)のように異なる周期でデータを処理する。
【0035】
上記(A−1)については、周期に従った特定のタイミングにおいて出力されるデータは常に合致することを期待値として、データの比較を行い一致しない場合は、途中でデータが書き換わったことを検出可能である。(A−2)については、(A−1)と同様に周期に従った特定のタイミングにおけるデータが常に合致することを期待値とし、期待値と異なる場合を検出することで、途中でデータが書き換わったことを検出可能である。また、(A−2)については(2−2)や(2−3)となるようなデータ列は高々有限回の事前計算で求められることから、予め計算した(2−2)や(2−3)のようなデータ列となる初期値の候補を記録し、その記録と比較を行い合致した場合には、途中でデータが書き換わったことを検出可能である。(A−3)については、(A−1)もしくは(A−2)と同様の方法を用いることで、途中でデータが書き換わったことを検出可能である。
【0036】
上記の検出方法をまとめると以下のようになる。
【0037】
(B−1):周期に従った特定のタイミングにおけるデータが常に合致することを期待値としてデータ比較を行うことで検出、予め定めたデータが特定の周期で出現することを確認することで検出する。
【0038】
(B−2):予め計算によって求めた1つもしくは複数の誤りデータとLFSRから得られるデータを比較することで検出する。
【0039】
ここで、第1誤動作検出回路は、上記の(B−1)を実現する。また、第2誤動作検出回路は、上記の(B−2)を実現する。誤動作結果処理回路は、第1誤動作検出回路または第2誤動作検出回路の少なくとも一方によって検出された結果に基づいてCPUの動作を制限する。
【0040】
〔2〕上記〔1〕において、上記第1誤動作検出回路や、上記第2誤動作検出回路はそれぞれ複数個搭載することができる。
【0041】
〔3〕上記〔1〕において、上記の特定周期動作回路を複数個搭載することができる。
【0042】
〔4〕上記〔1〕において、上記誤動作結果処理回路を複数個搭載することができる。
【0043】
〔5〕上記〔1〕において、上記CPUの動作を初期化するリセット信号を処理する機能を含むとき、上記誤動作結果処理回路は、上記リセット信号を上記誤動作制御信号として生成するように構成することができる。
【0044】
〔6〕上記〔1〕において、上記CPUに対する割り込み信号を処理する機能を含むとき、上記誤動作結果処理回路は、上記割り込み信号を上記の誤動作制御信号として生成するように構成することができる。
【0045】
〔7〕上記〔1〕において、上記第1誤動作検出回路は、上記種データもしくは種データを元に生成されるデータ列が上記の特定周期の間に繰り返し演算によって得られないことを検出するように構成することができる。
【0046】
〔8〕上記〔1〕において、記第2誤動作検出回路は、上記種データから生成され得ないデータ群を異常データ群として複数個記録し、この異常データ群の少なくとも1つが繰り返し演算によって得られたことを検出するように構成することができる。
【0047】
〔9〕上記〔8〕において、上記第2誤動作検出回路は、上記種データから生成され得ないデータ群を異常データ群として予め内部の記憶回路に複数個記録し、異常データ群の少なくとも1つが特定周期の間に繰り返し演算によって得られたことを検出するように構成することができる。
【0048】
〔10〕上記〔1〕において、上記の特定周期動作回路を複数個搭載することができる。各特定周期動作回路の繰り返し演算で生成されるデータ列のパターンは各々で同一であり、且つ、上記種データが異なり、ある種データから上記の異なる種データを生成するまでに要する実行クロックが既知の場合に、第3誤動作検出回路(図17の7130)を設けることができる。この第3誤動作検出回路は、任意の特定周期動作回路の出力データが上記の実行クロック後に別の特定周期動作回路の出力とならないことを検出して第3誤動作検出信号をアサートする。かかる場合において上記誤動作結果処理回路は、上記第3誤動作検出信号がアサートされた場合にも上記CPUの動作を制限するための誤動作制御信号を生成する。
【0049】
ここで、先ほどと同様に、4ビットのLFSRを例としてLFSRが二つある状況を考える。各々の原始多項式を同一とし、X4+1とする。初期値をそれぞれ1111と1110として、各々を以下のようにする。
【0050】
(3−1):1111→1110→1101→・・・
(3−2):1110→1101→1010→・・・
このとき、1111の出力されるタイミングは(3−1)と(3−2)では異なるが、周期も同一であり、得られるデータ列もタイミングが異なる点を除けば、同一である。この点に着目して、例えば、(3−1)が1111を処理するタイミングの(3−2)のデータを記憶領域に保存し、(3−1)が1111を処理した結果と記憶領域のデータを比較することで、異なるデータ列になっているかを検出可能である。すなわち、少なくとも片側のデータ列において途中でデータが誤っていることを検出可能である。まとめると、以下の検出方法となる。
【0051】
(B−3):複数LFSRを用意し、同一データ列となるが異なる初期値を用意し、データ列もしくは特定データの出現の有無を比較する。
【0052】
上記第3誤動作検出回路は、上記の(B−3)を実現する回路である。
【0053】
〔11〕上記〔1〕において、上記誤動作処理回路には、符合距離一定回路(1121)と、第4誤動作検出回路(1141)とを設けることができる。符合距離一定回路(1121)は、上記基準クロック信号を用いて、演算結果として得られる異なる二つのデータ間におけるハミング距離の値を一定とする。第4誤動作検出回路(1141)は、上記符合距離一定回路の演算結果のデータにおいて、予め定められたクロック信号間における異なる二つのデータのハミング距離の値が異なる場合に第4誤動作検出信号をアサートする。このとき、上記誤動作結果処理回路は、上記第4誤動作検出信号がアサートされる場合にも上記CPUの動作を制限するための誤動作制御信号を生成するように構成することができる。
【0054】
上記符合距離一定回路は、内部データの状態遷移において、隣り合う二つの状態でのデータ、もしくは異なる二つのデータにおいて、符号理論におけるハミング距離が常に一定となるような内部状態を示す回路である。ハミング距離とは、ビット幅が同一である二つのデータ間におけるビットの違いを示す概念である。具体的には、異なる2つのデータ間において、ビット単位で各々を比較した際に、異なるビット数の総数のことである。ハミング距離が常に一定ということは、あるデータから別のデータへの状態遷移において、データ状態の変化量が一定であることを意味する。
【0055】
ところで、非常に微少量の電流を駆動電流として動作させる場合には、データ状態の変化による電流値の変化が小さいことが要求される。電流値の変化は、データ状態の変化によって何ビットが書き換わるかに依存している。一方で、特に、リングカウンタやジョンソンカウンタは、ハミング距離が一定となる回路である。これらの回路は周期性もあり、ハミング距離が一定の回路である。尚、LFSRにおいては生成多項式によっては、ハミング距離が一定となるが、全ての生成多項式に対してハミング距離が一定になるとは限らない。
【0056】
以下、リングカウンタを符号距離一定回路の例として説明する。
【0057】
4ビットのリングカウンタでは、初期値を1100とした場合、1100→0110→0011→1001→1100→・・・といった状態遷移となる。この4ビットのリングカウンタは、上記から明らかなようにデータ列に周期性があり、周期は4である。すなわち、誤りの検出に(B−1)、(B−2)、(B−3)を用いても検出できる。
【0058】
4ビットのリングカウンタにおけるハミング距離に注目する。データ列のおける隣り合うふたつのデータのハミング距離は常に2である。データ列を1つ置きに取り出した場合のハミング距離は常に4である。データ列が途中で誤った場合、例えば0110が0100と誤った場合、1100→0100(誤りデータ)→0010→0001→・・・となる。このとき、誤りデータとその直前のデータである、1100と0100のハミング距離は1となる。同様に、0110が1010となった場合には、1010→0101→1010→・・・となる。このとき、隣り合うふたつのデータのハミング距離は4となる。従って、ハミング距離を比較することで、データが誤ったことを検出可能である。まとめると、以下の検出方法となる。
【0059】
(B−4):直前のデータと直後のデータにおけるハミング距離を求め、期待値と比較することで検出する。
【0060】
上記第4誤動作検出回路は、上記(B−4)を実現する回路である。
【0061】
〔12〕上記〔1〕において、上記誤動作処理回路は、演算結果として得られるデータのハミング重みの値が一定となる符合距離一定回路(1121)と、上記符合距離一定回路の演算結果のデータにおいてハミング重みの値が異なる場合には第5誤動作検出信号をアサートする第5誤動作検出回路(図13の1141)とを設けることができる。このとき、上記誤動作結果処理回路は、上記第5誤動作検出信号がアサートされる場合にも上記CPUの動作を制限するための誤動作制御信号を生成するように構成することができる。
【0062】
この場合の符号距離一定回路では、ハミング重みが一定となる条件が付与される。ハミング重みとは、ハミング距離の特別な場合の概念がある。具体的には、比較する片側のデータのビット列が全て0となっている場合のハミング距離のことである。つまり、片側のデータにおいてビットの値が1の個数を示す概念である。
【0063】
上記の4ビットのリングカウンタを例として取り上げる。4ビットのリングカウンタでは、正常時にはハミング重みは常に2である。データ列が途中で誤った場合、例えば0110が0100となった場合には、0100→0010→0001→1000→0100→・・・となる。このとき、隣り合うふたつのデータのハミング距離は常に2であるが、ハミング重みは1となる。従って、ハミング重みを計算し、期待値と比較することで、データが誤ったことを検出可能である。まとめると、以下の検出方法となる。
【0064】
(B−5):常時もしくは特定のタイミングにおけるハミング重みを比較する。
【0065】
上記第5誤動作検出回路は、上記の(B−4)を実現する回路である。
【0066】
2.実施の形態の詳細
実施の形態について更に詳述する。
【0067】
<実施の形態1>
図2には、本発明にかかる半導体集積回路が搭載されて成るICカードが示される。
【0068】
このICカード1200には、入出力と電源端子とクロック入力と入出力を行うための端子1210が備えられている。このICカード1200に搭載された半導体集積回路の一例とされるマイクロコンピュータ1230は、特に制限されないが、公知の半導体集積回路製造技術により、単結晶シリコン基板などの一つの半導体基板に形成される。このマイクロコンピュータ1230は、内部に中央演算処理としてCPU1232と、特定処理のためのコプロセッサ1233と、不揮発性メモリ1231及び揮発性メモリ1235とデータの入出力を行う入出力部(1234)を内部モジュールとして有している。これらの内部モジュールは、データのやり取りを可能にするため、内部バス1236を介して相互に結合される。
【0069】
図1には、上記誤動作処理回路1237の構成例が示される。
【0070】
CPU1232には、動作を行う基準クロック信号clk(1110)が入力される。基準クロック信号clkの入力を受けて、特定周期動作回路1120と符号距離一定回路1121と誤動作検出回路1140と誤動作検出回路1141が動作する。これらの回路は、CPU1232と独立して動作する。
【0071】
特定周期動作回路1120と符号距離一定回路1121は、基準クロック信号clkを受けて動作し、内部データの状態をそれぞれ出力信号1130と出力信号1131として出力する。誤動作検出回路1140は特定周期動作回路1120の出力信号1を受けて、出力信号1130が、特定周期動作回路において正しい状態遷移となっているかを検査する。正しい状態遷移でない場合には、誤動作検出信号1150を出力する。誤動作検出回路1141は符号距離一定回路の出力信号1131を受けて出力信号1131が、符号距離一定回路において正しい状態遷移となっているかを検査する。正しい状態遷移でない場合には、誤動作検出信号1151を出力する。
【0072】
誤動作結果処理回路1160は、誤動作検出信号1と誤動作検出信号2を入力として、いずれかの信号で正しくない状態遷移が検出されている場合には、CPUの動作制御を行う制御信号1170を出力する。ここで、制御信号とは、CPUのリセット信号のようなCPUや半導体集積回路の動作状態を止める信号のことである。
【0073】
次に、各部の詳細な構成について更に説明する。
【0074】
特定周期動作回路1120は、内部データの状態遷移に周期性のある回路であり、動作時の内部データの状態を出力信号1130として出力する。出力信号1130は、複数ビットから構成される。周期性のある回路として、例えばLFSR(linear feedback shift register)や線形誤動作法やリングカウンタやジョンソンカウンタといった回路が一例として挙げられる。
【0075】
図5には、特定周期動作回路1120の一例とされる4ビットLFSRが示される。尚、図5に示される4ビットLFSRは、生成多項式をX4+1とした例であり、他の生成多項式を用いたLFSRでも、特定周期動作回路は構成可能である。図5の回路(1120)は、基準クロック信号clk(1110)を入力として、4ビットの信号線から構成される出力信号1130を出力する。尚、4ビットの信号線をO(0)・・O(3)は、1530と総称される。回路の内部には、4つのフリップフロップ回路(FF)1510、1511、1512、1513が存在し、FF1510とFF1513の2つの出力のXOR値を計算するXOR回路1520が存在する。FF1510とFF1511とFF1512とFF1513は、半導体集積回路に電源が投入された時には、4ビットの決まった初期値を保持するものとする。基準クロック信号clkの入力に合わせてFF1511はFF1510の出力値を値として保持し、FF1512はFF1511の出力値を値として保持し、FF1513はFF1512の出力値を値として保持する。FF1510はFF1510とFF1513の二つの出力値のXOR値を値として保持する。FF1510の出力値はO(0)、FF1511の出力値はO(1)、FF1512の出力値はO(2)、FF1513の出力値はO(3)であり、これら4ビットの出力値が出力信号1130を構成する。ここで、初期値としてFF1510=1、FF1511=0、FF1512=0、FF1513=0として与えた時、基準クロック信号clk(1110)信号によって、FF1510=0、FF1511=1、FF1512=0、FF1513=0となる。このときの出力信号1130をO(3)、O(2)、O(1)、O(0)の順に並べると、0010となる。この並びによって、以降の出力信号1130の状態変化を表すと、0010→0100→1000→0001→0010→・・・となり、周期4の状態遷移を出力する。
【0076】
符号距離一定動作回路(1121)は、内部データの状態遷移において、二つの状態遷移におけるハミング距離またはハミング重みが一定の値となる回路のことである。状態遷移におけるハミング距離またはハミング重みが一定となる回路として、例えばリングカウンタや4ビット以上のジョンソンカウンタといった回路が一例として挙げられる。
【0077】
図11には、符号距離一定回路1121の構成例として4ビットのリングカウンタが示される。
【0078】
図11に示される符号距離一定回路1121は、基準クロック信号clk(1110)を入力として、4ビットの信号線から構成される出力信号1131を出力する。ここで、4ビットの信号線P(0)・・・P(3)は2110と総称される。回路の内部には、4つのフリップフロップ回路(FF)FF2120、FF2121、FF2122、FF2123が存在する。FF2120とFF2121とFF2122とFF2123は、半導体集積回路に電源が投入された時には、4ビットの決まった初期値を保持するものとする。基準クロック信号clkの入力に合わせて、FF2121はFF2120の出力値を値として保持し、FF2122はFF2121の出力値を値として保持し、FF2123はFF2122の出力値を値として保持し、FF2120はFF2123の出力値を値として保持するものとする。FF2120の出力値はP(0)、FF2121の出力値はP(1)、FF2122の出力値はP(2)、FF2123の出力値はP(3)であり、これら4ビットの出力値が出力信号1131を構成する。ここで、初期値としてFF2120=1、FF2121=0、FF2122=0、FF2123=0として与えた時、基準クロック信号clk(1110)信号によって、FF2120=0、FF2121=1、FF2122=0、FF2123=0となる。このときの出力信号1131をP(3)、P(2)、P(1)、P(0)の順に並べると、0010となる。この並びによって、以降の出力信号1131の状態変化を表すと、0010→0100→1000→0001→0010→・・・となり、周期4の状態遷移且つ隣り合う出力信号1131の状態はハミング距離が2となる。また、このとき、どの出力信号1131もハミング重みは1となる。
【0079】
誤動作検出回路1140は、特定周期動作回路1120の出力である出力信号1130と基準クロック信号clk(1110)を入力とし、誤動作検出信号1150を出力する。誤動作検出回路1140は、特定周期動作回路の出力信号1130の周期性を用いて、出力信号1130の状態遷移に矛盾がないかを確認し、矛盾がある場合には誤動作検出信号1を出力する。
【0080】
ここで、図7と図8を用いて誤動作検出回路1140の構成例について説明する。
【0081】
図7では、誤動作検出回路1140に対して、出力信号1130と基準クロック信号clk(1110)を入力とし、誤動作検出信号1150を出力する。誤動作検出回路1140は、データ比較回路1710を2つと、比較データ1720と、周期データ1730と、clkカウンタ1740と、AND回路1630と、排他的論理和回路(XOR)1520を含んで構成される。
【0082】
予め定めた比較データ1720と出力信号1130をデータ比較回路1710によって比較を行う。データ比較回路1710は全データが合致した場合には1を出力し、1つでも合致しない場合には0を出力するものとする。出力結果はAND回路1630とXOR回路1520に入力される。また、基準クロック信号clkの入力に合わせてclkカウンタ1740が動作する。予め定めた周期データ1730とclkカウンタ1740の値をもう1つのデータ比較回路1710によって比較し、結果をAND回路1630とXOR回路1520に入力する。比較データが合致する場合は、AND回路からclkカウンタ1740に対してデータリセット信号1750として、1(ハイレベル)が出力される。これによって、clkカウンタ1740は初期化され、カウントを最初から行う。また、XOR回路1520においては、ふたつのデータ比較回路の結果が異なる場合には、周期もしくは比較データが異なったと判定され、誤動作検出信号1150として1を出力する。特に図5のLFSRの場合、初期値に0000を入力すると、周期は1となる。これは、生成多項式に依存しない性質であることから、他のLFSRの回路において、初期の値を0として検出しても良い。このとき、誤動作検出回路1140は、例えば図18に示されるように、比較データ1720とデータ比較回路1710とNOT回路2260によって構成される回路でも良い。また、全ての値が常に0である点に着目して、図19のようなXOR回路のみで構成される回路でも良い。LFSRに限らず周期性のある回路において、値が一定となる初期値がある場合、初期値を維持し続けるかを比較し、検出しても良い。
【0083】
図8では、誤動作検出回路1140に対して、出力信号1130と基準クロック信号clk(1110)を入力とし、誤動作検出信号1150を出力する。誤動作検出回路1140は、データ比較回路1710と予め計算した特定周期動作回路1120が状態遷移として取り得ない値を異常データ(1810)から構成される。
【0084】
出力信号1130が入力される毎にデータ比較回路は異常データと比較を行い、比較した結果、異常データと合致した場合には、誤動作検出信号1150として1を出力する。尚、先に図5で説明したLFSRの例でも明らかなように、異常データの状態遷移列は複数個考えられる。このため、例えば、図9に示されるように、複数の異常データとして異常データ1910と異常データ1911に対して、複数のデータ比較回路1710で比較を行い、少なくとも1つのデータ比較回路1710において1が出力された結果を誤動作検出信号1150として出力するために、OR回路1920を用いるという構成例もあり得る。図9では、異常データは2つとしているが、予め計算によって3つ以上がある場合には、図9の構成を元に3つの異常データと比較する回路を構成しても良い。上記でも示したが、図5のLFSRにおいて初期値を0000とした場合についても、同様の異常データを予め計算し、その結果を異常データとして記録して比較と検出をしても良い。また,複数の異常データが予め定めた特定周期の間に出現したことを検出しても良い。ここで,特定周期は一定周期動作回路の周期でも良いが,予め計算によって定めた異なる周期を設定しても良い。
【0085】
図7に示される回路と図8に示される回路との双方を誤動作検出回路1140内に設け、図7に示される回路及び図8に示される回路の少なくとも一方によって誤動作検出が行われる場合に誤動作検出信号1150がアサートされるように構成することができる。この場合において、図7に示される回路及び図8に示される回路との少なくとも一方を複数個設け、それらのオア論理を得るようにしても良い。
【0086】
誤動作検出回路1141は、符号距離一定回路1121の出力である出力信号1131と基準クロック信号clk(1110)を入力とし、誤動作検出信号1151を出力する。誤動作検出回路1141は、符号距離一定回路が出力する出力信号1131の状態遷移もしくはデータにおけるハミング重みやハミング距離の観点で一定の値となっているかを確認し、異なっている場合には誤動作検出信号2を出力する。
【0087】
ここで、図12と図13を用いて誤動作検出回路1141の構成を説明する。図12では、誤動作検出回路1141に対して、出力信号1131と基準クロック信号clk(1110)を入力とし、誤動作検出信号1151を出力する。誤動作検出回路1141は、出力信号1131のデータを格納する4つのフリップフロップであるFF2251、FF2252、FF2253、FF2254を含む。さらに誤動作検出回路1141は、AND(アンド)回路1630と、XOR(排他的論理和)回路1520、NOT(ノット)回路2260と、4ビットの入力をカウントする4ビット入力カウンタ2230と、データ比較を行うデータ比較回路1710とを含む。また、FF31〜FF34においては、最初に入力される出力信号1131の前の状態を予め計算によって求め、その値を初期状態として格納することとする。
【0088】
出力信号1131が更新される時、P(0)の値とFF31の出力値がXOR回路1520に入力され、異なっている場合には1を出力し、同じ場合には0を出力し、4ビット入力カウンタ2230に入力する。これを他のP(1)、P(2)、P(3)に対しても同様に行う。4ビット入力カウンタ2230は入力信号2とFF31〜FF34の各々で異なっている値の総数をカウントし、カウント結果を2ビット信号として出力する。カウント結果はデータ比較回路1710へ入力され、同様に入力されるハミング距離データ(2240)の値と比較する。データ比較回路は値が合致している場合には1を出力し、異なっている場合には0を出力する。データ比較回路の出力で0が出力された場合には、NOT回路2260で値を反転し、誤動作検出信号1151として1を出力する。また、データ比較回路において1が出力された場合、その値をP(0)〜P(3)の各々と対にして、各AND回路1630に入力する。各AND回路の出力を、FF31〜FF34までの各々に入力することで、FF31〜FF34の更新が行われる。そして、次の出力信号1131の入力に対して、同様の処理を繰り返す。
【0089】
図13では、誤動作検出回路1141に対して、出力信号1131と基準クロック信号clk(1110)を入力とし、誤動作検出信号1151を出力する。誤動作検出回路1141は、4ビット入力カウンタ2230と、予め計算によって求めたハミング重みデータ2310と、データ比較回路1710と、NOT回路2260から構成される。
【0090】
ここで、出力信号1131は4ビットの信号とし、P(0)・・・P(3)(2110)と各々の信号を分割できる。各々の信号を4ビット入力カウンタ2230に入力する。4ビット入力カウンタ2230はカウント結果を2ビット信号として出力し、出力結果はデータ比較回路1710に入力する。一方で、ハミング重みデータ2310もデータ比較回路1710に入力する。データ比較回路は、2つの入力値を比較した結果が合致している場合には1を出力し、異なる場合には0を出力する。異なる場合の出力結果0をNOT回路2260によって反転し、誤動作検出信号1151として出力する。
【0091】
尚、特定周期動作回路の出力データにおいて、ハミング距離が一定である場合やハミング重みが一定であるという特徴がある場合には、誤動作検出回路1140に図12や図13のような回路を用いても良い。また、符号距離一定回路1121においてデータの状態遷移に周期性がある場合には、誤動作検出回路1141に図7や図8や図9を用いても良い。
【0092】
誤動作結果処理回路1160は、誤動作検出回路1140や誤動作検出回路1141から出力される誤動作検出信号1150や誤動作検出信号1151を入力とし、制御信号1170を出力する回路である。
【0093】
図14を用いて、誤動作結果処理回路1160の構成例について説明する。
【0094】
誤動作結果処理回路1160は誤動作検出信号1150と誤動作検出信号1151を入力とし、制御信号1170を出力する。誤動作結果処理回路では、OR回路1920から構成される。各入力から1が少なくとも1つ入力された場合には、制御信号1170として出力する。出力された制御信号は、図1のCPU1232に入力される。ここで、制御信号とは、例えばCPUのリセット信号であったり、割り込み処理信号であったり、と半導体集積回路の動作を停止することが出来る信号のことである。尚、CPU1232の内部には割り込み処理を行う専用回路が搭載されている場合が考えられる。この場合、図4に示されるように、CPU内部の制御回路1300に対して制御信号1170を直接入力しても良い。
【0095】
以上から、特定周期動作回路1120もしくは符号距離一定回路1121を用いた回路において発生した誤動作を検出することが可能である。
【0096】
<実施の形態2>
上記の実施の形態1においては、図1や図4を用いた例のように、誤動作結果処理回路1160から出力される制御信号1170は、CPU1232に直接入力している。しかしながら、制御信号は、CPU1232に直接入力する必要はなく、例えば図3に示されるように、CPU1232以外の半導体集積回路全体を制御する制御回路1300に制御信号1170が入力されても良い。図3に示される構成では、CPU1232の動作をリセットする動作を考えており、制御回路1300からCPU1232にリセット信号1310を出力する。勿論、制御回路はリセット信号だけに限らず、例えば、誤動作が起きたことを示す信号をI/Oから出力するといった処理を行っても良い。例えばCPU1232に対する割り込み信号を出力するようにしても良い。
【0097】
また、実施の形態1において、誤動作検出信号1150や誤動作検出信号1151は誤動作検出時に1を出力するとしたが、通常時は1を出力とし、誤動作検出時には0を出力としても良い。同様に、制御信号も誤動作検出時には1を出力するとしたが、0(ローレベル)を出力しても良い。これは、光の照射によって、出力信号に指向性が発生する可能性があるためであり、実際の誤動作状態の観測によって、出力信号を決定することが望ましい。ここで指向性とは光の照射によって信号または内部ビットの値が変化する傾向のことであり、例えば、1→0と変化はするが、0→1は変化しないといった現象のことである。この例に従った場合には、誤動作検出信号1や誤動作検出信号2や制御信号は常時1と固定しておくことで、より検出精度を高めることが可能である。
【0098】
光の照射による指向性が考えられる場合、特に0→1が発生するが1→0が発生しないか影響が少ないと考えられる場合、実施の形態1で述べたように図5のLFSRの初期値を0000とすることで十分な検出能力が期待できる。
【0099】
<実施の形態3>
上記の実施の形態1と実施の形態2では、特定周期動作回路1120や符号距離一定回路1121は、マイクロコンピュータ1230上に設けた。しかしながら、実施の形態1で述べたLFSRやリングカウンタといった回路は、半導体集積回路の機能によっては標準で搭載されている。このため、例えば、特定周期動作回路もしくは符号距離一定回路がCPU内部の機能として搭載されている場合も考えられる。この場合でも、例えば、図10に示すような構成によって本発明は実施可能である。
【0100】
図10では、CPU1232内部に特定周期動作回路1120と符号距離一定回路1121や制御回路1300が搭載されている。このとき、特定周期動作回路や符号距離一定回路はCPU内部の1つのモジュールとして動作し、出力信号をCPU外の誤動作検出回路1140と誤動作検出回路1141に出力信号1130と出力信号1131を出力する。このとき、誤動作検出回路1140と誤動作検出回路1141と誤動作結果処理回路1160は、本発明を実施するために搭載する回路となる。上記に限らず、誤動作結果処理回路や誤動作検出回路1140と誤動作検出回路1141もCPU内部やその他搭載回路において、同等の回路があればそれを利用しても良い。
【0101】
特に、実施の形態1で示したように、LFSRで初期値の値が全て0となる場合、LFSRの出力は全て0となることも利用できる。このとき、CPU内部の機能として搭載されたLFSRの生成多項式を変更する必要はない。具体的には、図18や図19に示される誤動作検出回路1140で誤動作を検出し、LFSRには初期値として全ての値を0とすれば良い。
【0102】
ここで、図10の特定周期動作回路1120が4ビットLFSRであった場合、通常のLFSRでは原始多項式を用いるように設計される。このとき、特定周期動作回路は、例えば図6に示すような回路とすることで、通常の原始多項式を用いたLFSRの機能と特定周期動作回路の機能とを切り替えて使用することが可能となる。図6における特定周期動作回路1120は、入力として、基準クロック信号clk(1110)と信号I(0)(1620)と信号I(1)(1621)と信号I(2)(1622)と信号I(3)(1623)を入力とし、出力信号1130を出力する。信号I(0)〜I(3)は、生成多項式を決定するための入力信号である。例えば、生成多項式をX4+1とする場合には、I(0)=0、I(1)=0、I(2)=0、I(3)=1とする。また、既約多項式とする場合には、I(0)=1、I(1)=0、I(2)=0、I(3)=1とする。このとき、信号I(i)(i=0,1,2,3)は、AND回路1630を経由して、フィードバックの有無を決定する。尚、XOR回路(1610)は4入力XOR回路である。このような入力信号とAND回路の組み合わせを用いることで、従来のLFSR回路に特定周期動作回路としての機能を付与することができる。これはnビットのLFSRにおいても同様である。尚、通常のLFSRでは初期値を固定とするが、特定周期動作回路として併用する場合、通常のLFSRでの初期値をFF1510〜FF1513に初期値として入力しても良い。また、通常のLFSRでの初期値以外をFF1510〜FF1513に入力しても良い。
【0103】
<実施の形態4>
上記の実施の形態1と実施の形態2と実施の形態3においては、図1のように、特定周期動作回路1120から出力される出力信号1130は、1つの誤動作検出回路1140に入力していた。同様に、符号距離一定回路1121から出力される出力信号1131は、1つの誤動作検出回路1141に入力していた。しかしながら、これらの入力と出力の組み合わせは各々が1つずつで無くとも良い。例えば、2つ以上の特定周期動作回路から出力された信号をXOR回路によって各ビットに違いが無いことを確認し、違いがあれば誤動作結果処理回路に1を入力し、違いがなければ、誤動作検出回路1140に出力信号1130を入力しても良い。例えば、1つの特定周期動作回路に対して、誤動作検出回路1140が複数個存在しており各々に出力信号1130を入力しても良い。この場合の構成例について、図15と図16を用いて以下に説明する。
【0104】
図15では、特定周期動作回路に対して基準クロック信号clkが入力され、出力信号1130を出力する。出力信号1130は、誤動作検出回路4110と誤動作検出回路4111へ入力される。誤動作検出回路4110と誤動作検出回路4111はそれぞれ誤動作検出信号1150を出力し、誤動作結果処理回路1160に入力する。このとき、誤動作検出回路4110と誤動作検出回路4111は、例えば、図7と図9に示したような回路をそれぞれ組み合わせて用いても良い。また、同一の回路のみを用いても良い。特に、特定周期動作回路が符号距離一定回路としての振る舞いを行う場合には、図12や図13に示したような回路を組み合わせても良い。例えば、生成多項式をX4+1としたLFSRの場合にはリングカウンタとしての振る舞いを行うことから、ハミング距離やハミング重みが一定となることから、例えば図7と図9と図12と図13に示した回路を組み合わせることが可能である。また、図15では、誤動作検出回路は2個としたが、3個以上とすることができる。
【0105】
同様に図16では、符号距離一定回路に対して基準クロック信号clkが入力され、出力信号1131を出力する。出力信号1131は、誤動作検出回路5110と誤動作検出回路5111へ入力される。誤動作検出回路5110と誤動作検出回路5111は、それぞれ誤動作検出信号1151を出力し、誤動作結果処理回路1160に入力する。このとき、誤動作検出回路5110と誤動作検出回路5111は、例えば、図12と図13に示したような回路を組み合わせて用いても良い。また、同一の回路のみを用いても良い。特に、上記のようにリングカウンタは特定周期動作回路として振舞う。従って、図7と図9と図12と図13に示した回路を組み合わせることが可能である。また、図16では誤動作検出回路は2個としたが、3個以上とすることができる。
【0106】
また、同様に、誤動作結果処理回路も3個以上とすることができる。
【0107】
<実施の形態5>
上記の実施の形態4では、特定周期動作回路を複数個用いる方法について示した。このとき、特定周期動作回路における初期状態が異なるが、生成されるデータ列が同じ場合でも、本発明における誤動作検出回路は構成可能である。例えば、図17のような構成を1つの例として示す。図17では、特定周期動作回路7120と特定周期動作回路7121がそれぞれ出力信号7110と出力信号7111を出力する。誤動作検出回路7130は、出力信号11と出力信号12と基準クロック信号clk(1110)を入力とし、誤動作検出信号1150を出力する。誤動作検出回路−3は、データ比較回路1710と、出力信号12を1クロックの期間に保持するデータバッファ7140と、NOT回路2260から構成される。ここで、特定周期動作回路1と特定周期動作回路2をそれぞれ、生成多項式をX4+1としたLFSRとして、初期値をそれぞれ0011と0110とする。このとき、特定周期動作回路1の出力信号は以下のようになる。
【0108】
0011→0110→1100→1001→0011→・・・
また、特定周期動作回路2の出力信号は以下のようになる。
【0109】
0110→1100→1001→0011→0110→・・・
また、データバッファ7140は初期値として、0011を保持することとする。このとき、最初のクロックで特定周期動作回路1は、0011を出力信号11として出力し、特定周期動作回路2は0110を出力信号12として出力する。データ比較回路は、データバッファ1720の0011と出力信号11の0011の値を比較する。同時に、出力信号12の1100がデータバッファに入力される。この手順を以降の基準クロック信号clkにおいても同様に繰り返す。このとき、データ比較回路で比較結果が一致しない場合には0を出力し、NOT回路2260によって1に反転し、誤動作検出信号1として出力する。
【0110】
上記のように特定周期動作回路が一定の周期でデータ列を繰り返すことを着目し、複数の出力と複数の初期値を組み合わせることで、誤動作状態を検出することが可能である。また、この例では、誤動作検出回路1と誤動作検出回路の出力するデータ列は1クロックの差であったが、複数クロックの差であっても良い。また、特定周期動作回路も2個に限らず、3個以上とすることができる。
【0111】
同様に、符号距離一定回路に関しても、複数入力と異なる初期値とデータバッファを用いてハミング距離を比較することが可能である。
【0112】
上記の例によれば、以下の作用効果を得ることができる。
【0113】
特定周期動作回路及び符号距離一定回路において誤動作が発生した場合において、誤動作検出が可能である。
【0114】
上記の実施の形態では、内部データの周期性やデータの状態遷移の特徴を用いた検出方式であることから、光を複数箇所に照射する場合でも誤動作検出が可能である。特に、リングカウンタの例の場合、上記の第1から第4までの特徴を用いた検出回路の構成が可能である。このとき、検出回路を全て搭載した場合には、ハミング距離や周期性を考慮し、且つ検出回路にも誤動作を引き起こす必要がある。これを行うには、ハミング距離や周期やデータ列の状態を加味して、それぞれの箇所に検出が無効となるような値を書き出すといった誤動作が必要となる。これを行うには、検出回路の内部に設定された比較用データの値のような具体的な情報を取得する必要がある。ところが、本実施の形態における検出回路では、内部データを出力する機能は有していないため、内部データの取得は困難である。また、内部データを解析する方法としては、リバースエンジニアリングの手法を用いることも考えられるが、非特許文献1の方法を実装することで、この危険性はなくなる。従って、本実施の形態によれば、複数の光照射を加味した場合でも検出器の冗長化を行わずに誤動作検出が可能である。
【0115】
一方で、本実施の形態は半導体集積回路の本来の機能に対して直接作用する検出方法ではない。そして、本実施の形態において防御する対象は半導体集積回路の本来の機能での内部情報である。しかしながら、特定周期動作回路や符号距離一定回路を保護したい回路付近に配置することによって、光検出器と同等の役割を果たす。
【0116】
ところで、従来技術によれば、光検出器においては感度の調整が困難であるという課題があった。この点について本実施の形態における特定周期動作回路や符号距離一定回路は、防御対象となる半導体集積回路で採用される標準セルを用いて構成可能である点で調整は不要である。例えば、太陽光のような自然光で検知をする場合には、他の標準セルでは誤動作が起きる状態となるので、誤動作を検知するという観点では正しい。また、強い光についても同様で、標準セルが誤動作を引き起こす強度の光を照射した場合には、特定周期動作回路や符号距離一定回路も同様に誤動作を引き起こすことから正しい。従って、感度の調整が不要となる。更に本実施の形態では、光照射のみならず、電磁波や放射線等による誤動作についても半導体集積回路で誤動作が発生する限りは、検出可能である。
【0117】
また、本実施の形態では、半導体集積回路の論理構成には大きく影響を及ぼさない。すなわち、従来の半導体集積回路の構成に、新たに本発明の回路を付与することで、光照射の検出が可能となる。
【0118】
本実施の形態において光照射によって誤動作を起こし、検出回路によって検出する誤動作現象を保持する特定周期動作回路や符号距離一定回路については、通常の半導体集積回路にも必要機能として搭載されることがある。つまり、上記の誤動作検出回路と誤動作結果処理回路を付与することで、本実施の形態での光検出機能を付与することが可能となる。
【0119】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【符号の説明】
【0120】
1120 特定周期動作回路
1121 符号距離一定回路
1140,1141 誤動作検出回路
1160 誤動作結果処理回路
1200 ICカード
1230 マイクロコンピュータ
1231 不揮発性メモリ
1232 CPU
1233 コプロセッサ
1234 入出力部
1235 揮発性メモリ
1237 誤動作処理回路
【特許請求の範囲】
【請求項1】
所定の演算処理を行うCPUと、
誤動作による内部解析を阻止するための誤動作処理回路と、を備えた半導体集積回路であって、
上記誤動作処理回路は、
基準クロック信号を用いて、予め定められた特定周期の間に予め定められた種データを元に生成されるデータ列を繰り返し演算する特定周期動作回路と、
上記の特定周期動作回路の動作においてデータ列の演算に要する周期が上記の特定周期と異なることを検出して第1誤動作検出信号をアサートする第1誤動作検出回路と、
上記の特定周期動作回路において上記の種データから生成され得ないデータを異常データとし、この異常データが得られたことを検出して第2誤動作検出信号をアサートする第2誤動作検出回路と、
上記第1誤動作検出信号及び上記第2誤動作検出信号の少なくとも一方がアサートされた場合、上記CPUの動作を制限するための誤動作制御信号を生成する誤動作結果処理回路と、を含むことを特徴とする半導体集積回路。
【請求項2】
上記第1誤動作検出回路及び上記第2誤動作検出回路の少なくとも一方は複数個搭載されて成る請求項1記載の半導体集積回路。
【請求項3】
上記の特定周期動作回路が複数個搭載されて成る請求項1記載の半導体集積回路。
【請求項4】
上記誤動作結果処理回路が複数個搭載されて成る請求項1記載の半導体集積回路。
【請求項5】
上記CPUの動作を初期化するリセット信号を処理する機能を含み、上記誤動作結果処理回路は、上記リセット信号を上記誤動作制御信号として生成する請求項1記載の半導体集積回路。
【請求項6】
上記CPUに対する割り込み信号を処理する機能を含み、上記誤動作結果処理回路は、上記割り込み信号を上記の誤動作制御信号として生成する請求項1記載の半導体集積回路。
【請求項7】
上記第1誤動作検出回路は、上記種データもしくは種データを元に生成されるデータ列が上記の特定周期の間に繰り返し演算によって得られないことを検出する請求項1に記載の半導体集積回路。
【請求項8】
上記第2誤動作検出回路は、上記種データから生成され得ないデータ群を異常データ群として複数個記録し、この異常データ群の少なくとも1つが繰り返し演算によって得られたことを検出する請求項1記載の半導体集積回路。
【請求項9】
上記第2誤動作検出回路は、上記種データから生成され得ないデータ群を異常データ群として予め内部の記憶回路に複数個記録し、異常データ群の少なくとも1つが特定周期の間に繰り返し演算によって得られたことを検出する請求項8記載の半導体集積回路。
【請求項10】
上記の特定周期動作回路が複数個搭載され、
各特定周期動作回路の繰り返し演算で生成されるデータ列のパターンは各々で同一であり、且つ、上記種データが異なり、ある種データから上記の異なる種データを生成するまでに要する実行クロックが既知の場合に、任意の特定周期動作回路の出力データが上記の実行クロック後に別の特定周期動作回路の出力とならないことを検出して第3誤動作検出信号をアサートする第3誤動作検出回路を含み、
上記誤動作結果処理回路は、上記第3誤動作検出信号がアサートされた場合にも上記CPUの動作を制限するための誤動作制御信号を生成する請求項1記載の半導体集積回路。
【請求項11】
上記誤動作処理回路は、上記基準クロック信号を用いて、演算結果として得られる異なる二つのデータ間におけるハミング距離の値が一定となる符合距離一定回路と、
上記符合距離一定回路の演算結果のデータにおいて、予め定められたクロック信号間における異なる二つのデータのハミング距離の値が異なる場合に第4誤動作検出信号をアサートする第4誤動作検出回路と、を含み、
上記誤動作結果処理回路は、上記第4誤動作検出信号がアサートされる場合にも上記CPUの動作を制限するための誤動作制御信号を生成する請求項1記載の半導体集積回路。
【請求項12】
上記誤動作処理回路は、演算結果として得られるデータのハミング重みの値が一定となる符合距離一定回路と、
上記符合距離一定回路の演算結果のデータにおいて、ハミング重みの値が異なる場合には第5誤動作検出信号をアサートする第5誤動作検出回路と、を含み、
上記誤動作結果処理回路は、上記第5誤動作検出信号がアサートされる場合にも上記CPUの動作を制限するための誤動作制御信号を生成する請求項1記載の半導体集積回路。
【請求項1】
所定の演算処理を行うCPUと、
誤動作による内部解析を阻止するための誤動作処理回路と、を備えた半導体集積回路であって、
上記誤動作処理回路は、
基準クロック信号を用いて、予め定められた特定周期の間に予め定められた種データを元に生成されるデータ列を繰り返し演算する特定周期動作回路と、
上記の特定周期動作回路の動作においてデータ列の演算に要する周期が上記の特定周期と異なることを検出して第1誤動作検出信号をアサートする第1誤動作検出回路と、
上記の特定周期動作回路において上記の種データから生成され得ないデータを異常データとし、この異常データが得られたことを検出して第2誤動作検出信号をアサートする第2誤動作検出回路と、
上記第1誤動作検出信号及び上記第2誤動作検出信号の少なくとも一方がアサートされた場合、上記CPUの動作を制限するための誤動作制御信号を生成する誤動作結果処理回路と、を含むことを特徴とする半導体集積回路。
【請求項2】
上記第1誤動作検出回路及び上記第2誤動作検出回路の少なくとも一方は複数個搭載されて成る請求項1記載の半導体集積回路。
【請求項3】
上記の特定周期動作回路が複数個搭載されて成る請求項1記載の半導体集積回路。
【請求項4】
上記誤動作結果処理回路が複数個搭載されて成る請求項1記載の半導体集積回路。
【請求項5】
上記CPUの動作を初期化するリセット信号を処理する機能を含み、上記誤動作結果処理回路は、上記リセット信号を上記誤動作制御信号として生成する請求項1記載の半導体集積回路。
【請求項6】
上記CPUに対する割り込み信号を処理する機能を含み、上記誤動作結果処理回路は、上記割り込み信号を上記の誤動作制御信号として生成する請求項1記載の半導体集積回路。
【請求項7】
上記第1誤動作検出回路は、上記種データもしくは種データを元に生成されるデータ列が上記の特定周期の間に繰り返し演算によって得られないことを検出する請求項1に記載の半導体集積回路。
【請求項8】
上記第2誤動作検出回路は、上記種データから生成され得ないデータ群を異常データ群として複数個記録し、この異常データ群の少なくとも1つが繰り返し演算によって得られたことを検出する請求項1記載の半導体集積回路。
【請求項9】
上記第2誤動作検出回路は、上記種データから生成され得ないデータ群を異常データ群として予め内部の記憶回路に複数個記録し、異常データ群の少なくとも1つが特定周期の間に繰り返し演算によって得られたことを検出する請求項8記載の半導体集積回路。
【請求項10】
上記の特定周期動作回路が複数個搭載され、
各特定周期動作回路の繰り返し演算で生成されるデータ列のパターンは各々で同一であり、且つ、上記種データが異なり、ある種データから上記の異なる種データを生成するまでに要する実行クロックが既知の場合に、任意の特定周期動作回路の出力データが上記の実行クロック後に別の特定周期動作回路の出力とならないことを検出して第3誤動作検出信号をアサートする第3誤動作検出回路を含み、
上記誤動作結果処理回路は、上記第3誤動作検出信号がアサートされた場合にも上記CPUの動作を制限するための誤動作制御信号を生成する請求項1記載の半導体集積回路。
【請求項11】
上記誤動作処理回路は、上記基準クロック信号を用いて、演算結果として得られる異なる二つのデータ間におけるハミング距離の値が一定となる符合距離一定回路と、
上記符合距離一定回路の演算結果のデータにおいて、予め定められたクロック信号間における異なる二つのデータのハミング距離の値が異なる場合に第4誤動作検出信号をアサートする第4誤動作検出回路と、を含み、
上記誤動作結果処理回路は、上記第4誤動作検出信号がアサートされる場合にも上記CPUの動作を制限するための誤動作制御信号を生成する請求項1記載の半導体集積回路。
【請求項12】
上記誤動作処理回路は、演算結果として得られるデータのハミング重みの値が一定となる符合距離一定回路と、
上記符合距離一定回路の演算結果のデータにおいて、ハミング重みの値が異なる場合には第5誤動作検出信号をアサートする第5誤動作検出回路と、を含み、
上記誤動作結果処理回路は、上記第5誤動作検出信号がアサートされる場合にも上記CPUの動作を制限するための誤動作制御信号を生成する請求項1記載の半導体集積回路。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【公開番号】特開2010−191512(P2010−191512A)
【公開日】平成22年9月2日(2010.9.2)
【国際特許分類】
【出願番号】特願2009−32595(P2009−32595)
【出願日】平成21年2月16日(2009.2.16)
【出願人】(302062931)ルネサスエレクトロニクス株式会社 (8,021)
【Fターム(参考)】
【公開日】平成22年9月2日(2010.9.2)
【国際特許分類】
【出願日】平成21年2月16日(2009.2.16)
【出願人】(302062931)ルネサスエレクトロニクス株式会社 (8,021)
【Fターム(参考)】
[ Back to top ]