(57)【要約】【課題】ロックステップと認証処理を同時に実行してもサイドチャネル情報が増長されず、高い耐タンパ性を実現することが可能な演算装置、演算方法、及び演算処理プログラムを提供する。【解決手段】コア１は、不揮発性メモリ５から出力された命令コードを取得し、取得した命令コードを解釈し、解釈した命令コードに従って処理を実行する一方、コア２は、反転器３２により２値論理が反転された命令コードを取得し、取得した命令コードを、コア１とは反対の２値論理で解釈し、解釈した命令コードに従ってコア１とは反対の２値論理で処理を実行する。【選択図】図１
2015230495.tif 000002
【特許請求の範囲】
【請求項１】
命令コードを記憶する不揮発性メモリと、
前記不揮発性メモリから出力された命令コードを取得し、取得した命令コードを解釈し、解釈した命令コードに従って処理を実行し、当該処理の結果を示す第１結果データを内部メモリに記憶する第１演算ユニットと、
前記不揮発性メモリから出力された前記命令コードを表現する２値論理を反転する第１反転手段と、
前記第１反転手段により２値論理が反転された命令コードを取得し、取得した命令コードを、前記第１演算ユニットとは反対の２値論理で解釈し、解釈した命令コードに従って前記第１演算ユニットとは反対の２値論理で処理を実行し、当該処理の結果を示す第２結果データを内部メモリに記憶する第２演算ユニットと、
を備えることを特徴とする演算装置。
【請求項２】
前記演算装置は、前記第２演算ユニットから出力された前記第２結果データを表現する２値論理を反転する第２反転手段を更に備え、
前記不揮発性メモリは、前記第２反転手段により２値論理が反転された前記第２結果データを、所定の記憶領域に記憶することを特徴とする請求項１に記載の演算装置。
【請求項３】
前記第１演算ユニットは、前記第１結果データを前記不揮発性メモリにおける所定の記憶領域に書き込み、
前記演算装置は、前記不揮発性メモリから出力された前記第１結果データを表現する２値論理を反転する第３反転手段を更に備え、
前記第２演算ユニットは、前記第３反転手段により２値論理が反転された前記第１結果データを取得し、取得した第１結果データと、前記第２結果データとを比較することを特徴とする請求項１に記載の演算装置。
【請求項４】
命令コードを記憶する不揮発性メモリを備える演算装置における演算方法であって、
前記不揮発性メモリから出力された命令コードを取得し、取得した命令コードを解釈し、解釈した命令コードに従って処理を実行し、当該処理の結果を示す第１結果データを内部メモリに記憶する第１演算ステップと、
前記不揮発性メモリから出力された前記命令コードを表現する２値論理を反転するステップと、
前記２値論理が反転された命令コードを取得し、取得した命令コードを、前記第１演算ステップとは反対の２値論理で解釈し、解釈した命令コードに従って前記第１演算ステップとは反対の２値論理で処理を実行し、当該処理の結果を示す第２結果データを内部メモリに記憶する第２演算ステップと、
を含むことを特徴とする演算方法。
【請求項５】
命令コードを記憶する不揮発性メモリを備えるコンピュータに、
前記不揮発性メモリから出力された命令コードを取得し、取得した命令コードを解釈し、解釈した命令コードに従って処理を実行し、当該処理の結果を示す第１結果データを内部メモリに記憶する第１演算ステップと、
前記不揮発性メモリから出力された前記命令コードを表現する２値論理を反転するステップと、
前記２値論理が反転された命令コードを取得し、取得した命令コードを、前記第１演算ステップとは反対の２値論理で解釈し、解釈した命令コードに従って前記第１演算ステップとは反対の２値論理で処理を実行し、当該処理の結果を示す第２結果データを内部メモリに記憶する第２演算ステップと、
を実行させることを特徴とする演算処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のコアを備え、並列処理を行うことが可能な演算装置の技術分野に関する。
【背景技術】
【０００２】
故障すると安全性を損なう可能性のある制御装置等では、サブコア等の監視部によってメインコアを監視し、メインコアの異常を検出して制御装置の安全な動作を保証する策が講じられてきた。その一例として、特許文献１に開示されるように、ロックステップと称される技術が普及している。ロックステップとは、複数のコアが同じ処理を並列的に実行し、実行結果を比較して各コアが正常に動作していることを判断する技術である。ロックステップが故障の検出を目的とする一方で、例えば、特許文献２に開示されるように、暗号技術を用いて対向機器を認証することにより、安全な動作を保証する技術が知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−１２８６２７号公報
【特許文献２】特開２０１３−１３８３０４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、認証用デバイスとして知られているスマートカードやTPM（Trusted Platform Module）等の分野においては、サイドチャネル攻撃が知られている。サイドチャネル攻撃とは、古くから暗号演算用制御装置において存在する脅威であり、演算時に消費される電力や発生する電磁波に代表される副次的な情報（サイドチャネル情報）を利用して演算内容を推定する攻撃手法である。ロックステップと、認証処理とを、単一の演算装置にて実現しようとした場合には、ロックステップによって複数のコアが同一の処理を同時に実行することになり、消費電力や電磁波が増長されてサイドチャネル攻撃の標的になりやすくなってしまうことが問題となる。
【０００５】
そこで、本発明は、上記問題等に鑑みてなされたものであり、ロックステップと認証処理を同時に実行してもサイドチャネル情報が増長されず、高い耐タンパ性を実現することが可能な演算装置、演算方法、及び演算処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、請求項１に記載の発明は、命令コードを記憶する不揮発性メモリと、前記不揮発性メモリから出力された命令コードを取得し、取得した命令コードを解釈し、解釈した命令コードに従って処理を実行し、当該処理の結果を示す第１結果データを内部メモリに記憶する第１演算ユニットと、前記不揮発性メモリから出力された前記命令コードを表現する２値論理を反転する第１反転手段と、前記第１反転手段により２値論理が反転された命令コードを取得し、取得した命令コードを、前記第１演算ユニットとは反対の２値論理で解釈し、解釈した命令コードに従って前記第１演算ユニットとは反対の２値論理で処理を実行し、当該処理の結果を示す第２結果データを内部メモリに記憶する第２演算ユニットと、を備えることを特徴とする。
【０００７】
請求項２に記載の発明は、請求項１に記載の演算装置において、前記演算装置は、前記第２演算ユニットから出力された前記第２結果データを表現する２値論理を反転する第２反転手段を更に備え、前記不揮発性メモリは、前記第２反転手段により２値論理が反転された前記第２結果データを、所定の記憶領域に記憶することを特徴とする。
【０００８】
請求項３に記載の発明は、請求項１に記載の演算装置において、前記第１演算ユニットは、前記第１結果データを前記不揮発性メモリにおける所定の記憶領域に書き込み、前記演算装置は、前記不揮発性メモリから出力された前記第１結果データを表現する２値論理を反転する第３反転手段を更に備え、前記第２演算ユニットは、前記第３反転手段により２値論理が反転された前記第１結果データを取得し、取得した第１結果データと、前記第２結果データとを比較することを特徴とする。
【０００９】
請求項４に記載の発明は、命令コードを記憶する不揮発性メモリを備える演算装置における演算方法であって、前記不揮発性メモリから出力された命令コードを取得し、取得した命令コードを解釈し、解釈した命令コードに従って処理を実行し、当該処理の結果を示す第１結果データを内部メモリに記憶する第１演算ステップと、前記不揮発性メモリから出力された前記命令コードを表現する２値論理を反転するステップと、前記２値論理が反転された命令コードを取得し、取得した命令コードを、前記第１演算ステップとは反対の２値論理で解釈し、解釈した命令コードに従って前記第１演算ステップとは反対の２値論理で処理を実行し、当該処理の結果を示す第２結果データを内部メモリに記憶する第２演算ステップと、を含むことを特徴とする。
【００１０】
請求項５に記載の発明は、命令コードを記憶する不揮発性メモリを備えるコンピュータに、前記不揮発性メモリから出力された命令コードを取得し、取得した命令コードを解釈し、解釈した命令コードに従って処理を実行し、当該処理の結果を示す第１結果データを内部メモリに記憶する第１演算ステップと、前記不揮発性メモリから出力された前記命令コードを表現する２値論理を反転するステップと、前記２値論理が反転された命令コードを取得し、取得した命令コードを、前記第１演算ステップとは反対の２値論理で解釈し、解釈した命令コードに従って前記第１演算ステップとは反対の２値論理で処理を実行し、当該処理の結果を示す第２結果データを内部メモリに記憶する第２演算ステップと、を実行させることを特徴とする。
【発明の効果】
【００１１】
本発明によれば、演算ユニットは、不揮発性メモリから出力された命令コードを取得し、取得した命令コードを解釈し、解釈した命令コードに従って処理を実行する一方、演算ユニットは、反転手段により２値論理が反転された命令コードを取得し、取得した命令コードを、演算ユニットとは反対の２値論理で解釈し、解釈した命令コードに従って演算ユニットとは反対の２値論理で処理を実行するように構成したので、例えばロックステップと認証処理を同時に実行してもサイドチャネル情報が増長されず、高い耐タンパ性を実現することができる。
【図面の簡単な説明】
【００１２】
【図１】ＩＣチップＣの概要構成例を示す図である。
【図２】実施例１において、プログラムメモリＰＭから命令コードがフェッチされ、命令コードに従って処理が実行される様子を示す図である。
【図３】実施例１において、プログラムメモリＰＭから命令コードがフェッチされ、命令コードに従って処理が実行される様子を示す図である。
【図４】実施例１において、プログラムメモリＰＭから命令コードがフェッチされ、命令コードに従って処理が実行される様子を示す図である。
【図５】実施例１において、プログラムメモリＰＭから命令コードがフェッチされ、命令コードに従って処理が実行される様子を示す図である。
【図６】実施例１において、プログラムメモリＰＭから命令コードがフェッチされ、命令コードに従って処理が実行される様子を示す図である。
【図７】実施例２において、プログラムメモリＰＭから命令コードがフェッチされ、命令コードに従って処理が実行される様子を示す図である。
【図８】実施例２において、プログラムメモリＰＭから命令コードがフェッチされ、命令コードに従って処理が実行される様子を示す図である。
【図９】実施例２において、プログラムメモリＰＭから命令コードがフェッチされ、命令コードに従って処理が実行される様子を示す図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照して本発明の実施形態について詳細に説明する。以下に説明する実施形態は、ＩＣチップに対して本発明を適用した場合の実施の形態である。
【００１４】
先ず、図１を参照して、本実施形態に係るＩＣチップの概要構成について説明する。図１は、ＩＣチップＣの概要構成例を示す図である。ＩＣチップＣは、本発明の演算装置の一例である。なお、ＩＣチップＣは、キャッシュカード、クレジットカード、社員カード等に搭載されて使用される。或いは、ＩＣチップＣは、スマートフォンや携帯電話機等の通信機器に組み込まれる。ＩＣチップＣは、通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
【００１５】
ＩＣチップＣは、図１に示すように、コア１、コア２、反転器３、ＲＡＭ（Random Access Memory）４、不揮発性メモリ５、ＲＯＭ（Read Only Memory）６、及びＩ／Ｏ回路７を備えて構成される。コア１は、第１演算ユニットの一例である。コア２は、第２演算ユニットの一例である。コア１とコア２とは並列処理が可能に構成されている。コア１、反転器３、ＲＡＭ４、不揮発性メモリ５、ＲＯＭ６、及びＩ／Ｏ回路７は、バス８に接続されている。一方、コア２は、反転器３に接続されている。反転器３は、命令コードや各種データ等を表現する２値論理（論理０と論理１）を反転（言い換えれば、低電位状態と高電位状態を反転）する第１〜第３反転手段の一例であり、ＮＯＴ回路等により構成される。バス８は、アドレスバスとデータバスを備える。
【００１６】
ＲＡＭ４は、ワークメモリであり、スタックメモリを備える。スタックメモリは、サブルーチンの呼び出しや割り込みに伴う戻りアドレス等の格納に使用される。不揮発性メモリ５は、プログラムメモリＰＭとデータメモリＤＭを備える。プログラムメモリＰＭには、プログラムを構成する複数の命令コードが記憶（格納）される。データメモリＤＭには、各種データが記憶される。なお、ＲＯＭ６には、不揮発性メモリ５に記憶されるプログラムの一部が記憶されてもよい。
【００１７】
Ｉ／Ｏ回路７は、外部端末とのインターフェイスを担う。接触式のＩＣチップＣの場合、Ｉ／Ｏ回路７には、例えば、Ｃ１〜Ｃ８の８個の端子が備えられている。例えば、Ｃ１端子は電源端子、Ｃ２端子はリセット端子、Ｃ３端子はクロック端子、Ｃ５端子はグランド端子、Ｃ７端子は外部端末との間で通信を行うための端子である。一方、非接触式のＩＣチップＣの場合、Ｉ／Ｏ回路７には、例えば、アンテナ、及び変復調回路が備えられている。なお、外部端末の例としては、ＩＣカード発行機、ＡＴＭ、改札機、認証用ゲート等が挙げられる。或いは、ＩＣカード１が通信機器に組み込まれる場合、外部端末には通信機器の機能を担う制御部が該当する。
【００１８】
コア１は、演算器１１、内部メモリ１２、プログラムカウンタ１３、及び割込みコントローラ１４を備える。コア２は、演算器２１、内部メモリ２２、プログラムカウンタ２３、及び割込みコントローラ２４を備える。演算器１１，２１は、それぞれ、命令レジスタ及びデコーダを備える。内部メモリ１２，２２は、それぞれ、データレジスタを備える。プログラムカウンタ１３，２３は、次に実行されるべき命令コードが記憶されているプログラムメモリＰＭ上のアドレス（番地）を保持する。割込みコントローラ１４と割込みコントローラ２４とは、バス８を介さずにデータ送受信可能に構成されている。ここで、コア２では、コア１における論理０と論理１の２値論理（言い換えれば、識別基準）が反転している。コア１が論理０を低電位状態によって表現する場合、コア２は論理０を高電位状態によって表現し、コア１が論理１を高電位状態によって表現する場合、コア２は論理１を低電位状態によって表現する。例えば、“９（１０進数）”は、“１００１（２進数）”と表記されるが、低電位状態＝Ｌ、高電位状態＝Ｈとして表現する場合、“１００１（２進数）”は、コア１においては、“ＨＬＬＨ”と表現され、コア２においては、“ＬＨＨＬ”と表現される。同様にＡＤＤ命令が、“０００１１１(２進数) ” と表記される場合、コア１においては、“ＬＬＬＨＨＨ”と表示され、コア２においては、“ＨＨＨＬＬＬ”と表現される。
【００１９】
演算器１１は、プログラムカウンタ１３が指し示すアドレスに記憶されている命令コードを、プログラムメモリＰＭから命令レジスタにフェッチ（取得）する。つまり、不揮発性メモリ５のプログラムメモリＰＭから出力された命令コードが演算器１１によりフェッチされる。そして、演算器１１は、取得した命令コードをデコーダによって解釈（デコード）し、解釈した命令コードに従って処理を実行し（例えば、四則演算、論理演算等の演算処理を実行し）、当該処理の結果を示す第１結果データを内部メモリ１２のデータレジスタに記憶する。
【００２０】
一方、演算器２１は、プログラムカウンタ２３が指し示すアドレスに記憶されている命令コードを、プログラムメモリＰＭから反転器３を介して命令レジスタにフェッチ（取得）する。つまり、不揮発性メモリ５のプログラムメモリＰＭから出力され、反転器３により２値論理が反転された命令コードがフェッチされる。ここで、コア２から出力されるアドレス（プログラムカウンタ２３が指し示すアドレス）は、反転器３によって２値論理が反転された後にアドレスバスへ送出され、これに応じて、プログラムメモリＰＭからデータバスに送出された命令コードは、反転器３によって２値論理が反転された後に、コア２に入力されることになる。そして、演算器２１は、取得した命令コードを演算器１１とは反対の２値論理でデコーダによって解釈し、解釈した命令コードに従って処理を実行し、当該処理の結果を示す第２結果データを内部メモリ２２のデータレジスタに記憶する。
【００２１】
次に、本実施形態に係るＩＣチップの動作例について、実施例１と実施例２とに分けて説明する。
【００２２】
（実施例１）
先ず、図２〜図６を参照して、実施例１について説明する。実施例１は、コア１とコア２とでデータメモリが共有される場合の動作例である。図２〜図６は、実施例１において、プログラムメモリＰＭから命令コードがフェッチされ、命令コードに従って処理が実行される様子を示す図である。なお、図２〜図６において、アドレスバス８１とアドレスバス８３は、分かれているが、単一のアドレスバスであってもよい。同様に、データバス８２とデータバス８４は、単一のデータバスであってもよい。また、図２〜図６の例では、命令コードの構成単位を３バイトとしている。図２（Ａ）の状態は、命令コードがフェッチされる前の状態を示している。図２（Ａ）の状態では、コア１における演算器１１の命令レジスタには、初期値“００・・・（ｈ）”が格納されている一方、コア２における演算器２１の命令レジスタには、初期値“ＦＦ・・・（ｈ）”が格納されている。ここで、“ｈ”は、１６進数であることを示す。また、図２（Ａ）の状態では、コア１における内部メモリ１２のデータレジスタには、初期値“００・・・（ｈ）”が格納されている一方、コア２における内部メモリ２２のデータレジスタには、初期値“ＦＦ・・・（ｈ）”が格納されている。なお、図２（Ａ）の例では、内部メモリ１２と内部メモリ２２には、それぞれ、データレジスタＲ１とデータレジスタＲ２との２つのデータレジスタを示しているが、実際には、これより多くのデータレジスタが設けられる。また、図２（Ａ）の状態では、コア１におけるプログラムカウンタ１３は、アドレス“００００（ｈ）”を示している一方、コア２におけるプログラムカウンタ２３は、アドレス“００００（ｈ）”の反転値“ＦＦＦＦ(ｈ) ”を示している。なお、以降、演算器１１と演算器２１とは並列的に処理を実行する。
【００２３】
コア１における演算器１１は、図２（Ｂ）に示すように、プログラムカウンタ１３が指し示すアドレス“００００（ｈ）”（つまり、プログラムカウンタ１３の値）に記憶されている命令コード“０８ ０１ ０９（ｈ）”を、プログラムメモリＰＭからデータバス８２を介して命令レジスタにフェッチする。つまり、プログラムカウンタ１３が指し示すアドレス“００００（ｈ）”がアドレスバス８１へ送出され、これに応じて、プログラムメモリＰＭからデータバス８２に送出された命令コードが命令レジスタにフェッチされる。そして、コア１における演算器１１は、フェッチした命令コードをデコーダによって解釈（ロード（ＬＯＡＤ）命令であると解釈）し、解釈した命令コード（この例では、ロード命令）に従って、内部メモリ１２におけるデータレジスタにデータをロードする。図２（Ｂ）の例では、命令コードに含まれる“０８”は、演算器１１のデコーダによりロード（ＬＯＡＤ）命令であると解釈され、当該命令コードに含まれる“０９”が、演算対象のデータとして、内部メモリ１２におけるデータレジスタＲ１（＝０１）にロードされている。
【００２４】
一方、コア２における演算器２１は、図２（Ｂ）に示すように、プログラムカウンタ２３が指し示す“ＦＦＦＦ（ｈ）”が反転（つまり、反転器３１によって反転）されたアドレス（つまり、プログラムカウンタ２３の反転値）“００００（ｈ）”に記憶されている命令コード“０８ ０１ ０９（ｈ）”を、プログラムメモリＰＭからデータバス８２及び反転器３２を介して命令レジスタにフェッチする。つまり、プログラムカウンタ１３が指し示すアドレス“ＦＦＦ６（ｈ）”が反転器３１によって２値論理が反転された後にアドレスバス８１へ送出され、これに応じて、プログラムメモリＰＭからデータバス８２に送出された命令コードが反転器３２によって２値論理が反転された後に命令レジスタにフェッチされる。そして、コア２における演算器２１は、フェッチされた命令コードをデコーダによって解釈（演算器１１とは反対の２値論理でロード（ＬＯＡＤ）命令であると解釈）し、解釈した命令コードに従って、内部メモリ２２におけるデータレジスタＲ１にデータをロードする。図２（Ｂ）の例では、反転器３２によって２値論理が反転された命令コード（つまり、命令コードの反転値）に含まれる“Ｆ７”は、演算器２１のデコーダによりロード（ＬＯＡＤ）命令であると解釈され、当該反転された命令コードに含まれるデータ“Ｆ６”が、演算対象のデータとして、内部メモリ２２におけるデータレジスタＲ１（＝ＦＥ）にロードされている。
【００２５】
次に、コア１における割込みコントローラ１４は、図３（Ａ）に示すように、内部メモリ１２における少なくともデータレジスタＲ１とデータレジスタＲ２からデータを取得し、割込みコントローラ２４へ出力する。一方、コア２における割込みコントローラ２４は、割込みコントローラ１４からのデータを取得し、且つ、内部メモリ２２における少なくともデータレジスタＲ１とデータレジスタＲ２からデータを取得する。そして、割込みコントローラ２４は、割込みコントローラ１４から取得したデータの反転値と、内部メモリ２２から取得したデータの値とを比較（データ比較）する。そして、このデータ比較の結果、互いのデータが一致していない場合、割込みコントローラ１４，２４は、異常と判断してコア１，２の内部リセットを実行する。一方、上記データ比較の結果、互いの値が一致している場合、図３（Ｂ）に示すように、コア１におけるプログラムカウンタ１３は、プログラムカウンタ１３の値（“００００（ｈ）”）を３番地先へ進め（つまり、“０００３（ｈ）”へ進め）、コア２におけるプログラムカウンタ２３は、プログラムカウンタ１３の値（“ＦＦＦＦ（ｈ）”）を３番地先（この例では、命令コードの構成単位が３バイトとしているため）へ進める（つまり、“ＦＦＦＣ（ｈ）”へ進める）。  
【００２６】
次に、コア１における演算器１１は、図示しないが、プログラムカウンタ１３が指し示すアドレス“０００３（ｈ）”に記憶されている命令コード“０８ ０２ ０１（ｈ）”を、プログラムメモリＰＭからデータバス８２を介して命令レジスタにフェッチし、当該命令コードをデコーダによって解釈（ロード（ＬＯＡＤ）命令であると解釈）し、解釈した命令コードに従って、内部メモリ１２におけるデータレジスタＲ２にデータをロードする。一方、コア２における演算器２１は、図示しないが、プログラムカウンタ２３が指し示す“ＦＦＦＣ（ｈ）”が反転されたアドレス“０００３（ｈ）”に記憶されている命令コード“０８ ０２ ０１（ｈ）”を、プログラムメモリＰＭからデータバス８２及び反転器３２を介して命令レジスタにフェッチし、当該命令コードをデコーダによって解釈（ロード（ＬＯＡＤ）命令であると解釈）し、解釈した命令コードに従って、内部メモリ２２におけるデータレジスタＲ２にデータをロードする。そして、割込みコントローラ２４は、命令コード“０８ ０１ ０９（ｈ）”の場合と同じように内部メモリ１２，２２のデータ比較を行い、互いの値が一致している場合、コア１におけるプログラムカウンタ１３は、プログラムカウンタ１３の値（“０００３（ｈ）”）を３番地先へ進め（つまり、“０００６（ｈ）”へ進め）、コア２におけるプログラムカウンタ２３は、プログラムカウンタ２３の値（“ＦＦＦＣ（ｈ）”）を３番地先へ進める（つまり、“ＦＦＦ９（ｈ）”へ進める）。
【００２７】
次に、コア１における演算器１１は、図示しないが、プログラムカウンタ１３が指し示すアドレス“０００６（ｈ）”に記憶されている命令コード“３０ ０１ ０２（ｈ）”を、プログラムメモリＰＭからデータバス８２を介して命令レジスタにフェッチし、当該命令コードをデコーダによって解釈（加算（ＡＤＤ）命令であると解釈）する。そして、演算部１１は、解釈した命令コード（この例では、加算命令）に従って、内部メモリ１２におけるデータレジスタＲ１におけるデータ“０９（ｈ）”に、内部メモリ１２におけるデータレジスタＲ２におけるデータ“１１（ｈ）”を加算する処理を実行し、当該処理の結果を示すデータ（第１結果データの一例）を内部メモリ１２におけるデータレジスタＲ１に記憶する。つまり、内部メモリ１２におけるデータレジスタＲ１のデータは、“１Ａ（ｈ）”に書き換えられる。一方、コア２における演算器２１は、図示しないが、プログラムカウンタ２３が指し示す“ＦＦＦ９（ｈ）”が反転されたアドレス“０００６（ｈ）”に記憶されている命令コード“３０ ０１ ０２（ｈ）”を、プログラムメモリＰＭからデータバス８２及び反転器３２を介して命令レジスタにフェッチし、当該命令コードをデコーダによって解釈（加算（ＡＤＤ）命令であると解釈）する。そして、演算部２１は、解釈した命令コードに従って、内部メモリ２２におけるデータレジスタＲ１におけるデータ“Ｆ６（ｈ）”に、内部メモリ２２におけるデータレジスタＲ２におけるデータ“ＥＥ（ｈ）”を加算（演算器１１とは反対の２値論理で加算）する処理を実行し、当該処理の結果を示すデータ（第２結果データの一例）を内部メモリ２２に記憶する。つまり、内部メモリ１２におけるデータレジスタＲ１のデータは、“Ｅ５（ｈ）”に書き換えられる。
【００２８】
次に、割込みコントローラ２４は、命令コード“０８ ０１ ０９（ｈ）”の場合と同じように内部メモリ１２，２２のデータ比較を行い、互いの値が一致している場合、コア１におけるプログラムカウンタ１３は、プログラムカウンタ１３の値（“０００６（ｈ）”）を図４（Ａ）に示すように３番地先へ進め（つまり、“０００９（ｈ）”へ進め）、コア２におけるプログラムカウンタ２３は、プログラムカウンタ２３の値（“ＦＦＦ９（ｈ）”）は、図４（Ａ）に示すように３番地先へ進める（つまり、“ＦＦＦ６（ｈ）”へ進める）。
【００２９】
次に、コア１における演算器１１は、図４（Ｂ）に示すように、プログラムカウンタ１３が指し示すアドレス“０００９（ｈ）”に記憶されている命令コード“５２ ０１ ００（ｈ）”を、プログラムメモリＰＭからデータバス８２を介して命令レジスタにフェッチし、当該命令コードをデコーダによって解釈（ストア（ＳＴＯＲＥ）命令であると解釈）する。一方、コア２における演算器２１は、図４（Ｂ）に示すように、プログラムカウンタ２３が指し示す“ＦＦＦ６（ｈ）”が反転されたアドレス“０００９（ｈ）”に記憶されている命令コード“５２ ０１ ００（ｈ）”を、プログラムメモリＰＭからデータバス８２及び反転器３２を介して命令レジスタにフェッチし、当該命令コードをデコーダによって解釈（ストア（ＳＴＯＲＥ）確認命令であると解釈）する。
【００３０】
次に、コア１における演算器１１は、解釈したＳＴＯＲＥ命令のコード体系が倍長であることを認識すると、コア１におけるプログラムカウンタ１３は、プログラムカウンタ１３の値（“０００９（ｈ）”）を図５（Ａ）に示すように、３番地先へ進める（つまり、“０００Ｃ（ｈ）”へ進める）。一方、コア２における演算器２１は、解釈したストア確認命令のコード体系が倍長であることを認識すると、コア２におけるプログラムカウンタ２３は、プログラムカウンタ２３の値（“ＦＦＦ６（ｈ）”）を図５（Ａ）に示すように、３番地先へ進める（つまり、“ＦＦＦ３（ｈ）”へ進める）。
【００３１】
次に、コア１における演算器１１は、図５（Ｂ）に示すように、プログラムカウンタ１３が指し示すアドレス“０００Ｃ（ｈ）”に記憶されているコード“０１ ００ ００（ｈ）”を、プログラムメモリＰＭからデータバス８２を介して命令レジスタ（既に格納された命令コード“５２ ０１ ００（ｈ）”の後）にフェッチする。一方、コア２における演算器２１は、図５（Ｂ）に示すように、プログラムカウンタ２３が指し示す“ＦＦＦ３（ｈ）”が反転されたアドレス“０００Ｃ（ｈ）”に記憶されているコード“０１ ００ ００（ｈ）”を、プログラムメモリＰＭからデータバス８２及び反転器３２を介して命令レジスタ（既に格納された命令コード“ＡＥ ＦＥ ＦＦ（ｈ）”の後）にフェッチする。
【００３２】
次に、コア１における割込みコントローラ１４は、図６（Ａ）に示すように、解釈した命令コード（この例では、ストア命令）に従って、内部メモリ１２におけるデータレジスタＲ１におけるデータ“１Ａ（ｈ）”を、データバス８４を介して、不揮発性メモリ５におけるデータメモリＤＭ中の所定の記憶領域（命令コードに含まれるアドレス“００ １０ ００ ００（ｈ）”）に書き込む処理を実行する。そして、コア２における割込みコントローラ２４は、解釈した命令コード（この例では、ストア確認命令）に従って、データメモリＤＭに書き込まれたデータの確認処理を実行する。具体的には、割込みコントローラ２４は、図６（Ｂ）に示すように、コア１によりデータメモリＤＭの記憶領域（命令コードに含まれるアドレス“００ １０ ００ ００（ｈ）”）に書き込まれたデータ“１Ａ（ｈ）”を、データバス８４及び反転器３４を介して取得し、且つ、内部メモリ２２におけるデータレジスタＲ１からデータ“Ｅ５（ｈ）”を取得する。つまり、図６（Ｂ）に示すように、命令レジスタに格納されている“ＦＦ ＥＦ ＦＦ ＦＦ（ｈ）”が反転器３３によって２値論理が反転された後にアドレスバス８３へ送出され、これに応じて、データメモリＤＭ２からデータバス８４に送出されたデータが反転器３４によって２値論理が反転された後に取得（この例では、データ“Ｅ５（ｈ）”が取得）される。そして、割込みコントローラ２４は、取得した互いのデータの値を比較（データ比較）し、当該データ比較の結果、互いのデータが一致していない場合、異常と判断してコア２の内部リセットを実行し、且つ、互いのデータが一致していないことを割込みコントローラ１４に伝える。これにより、割込みコントローラ１４は、コア１の内部リセットを実行する。一方、当該データ比較の結果、互いの値が一致している場合、コア１におけるプログラムカウンタ１３は、プログラムカウンタ１３の値を３番地先へ進め（つまり、“０００Ｆ（ｈ）”へ進め）、コア２におけるプログラムカウンタ２３は、プログラムカウンタ１３の値を３番地先へ進める（つまり、“ＦＦＦ０（ｈ）”へ進める）。以降、上記と同じように処理が進行する。
【００３３】
（実施例２）
次に、図７〜図９を参照して、実施例２について説明する。実施例２は、コア１とコア２とでデータメモリが共有されない場合の動作例である。図７〜図９は、実施例２において、プログラムメモリＰＭから命令コードがフェッチされ、命令コードに従って処理が実行される様子を示す図である。図７〜図９の例では、データメモリＤＭは、コア１用のデータメモリＤＭ１と、コア２用のデータメモリＤＭ２とに区分される。なお、実施例２においても、実施例１で図２及び図３を参照して説明した処理と同様の処理が行われるので、重複する説明を省略する。
【００３４】
図７（Ａ）の状態は、図４（Ａ）の状態と同様である。コア１における演算器１１は、図７（Ｂ）に示すように、プログラムカウンタ１３が指し示すアドレス“０００９（ｈ）”に記憶されている命令コード“５２ ０１ ００（ｈ）”を、プログラムメモリＰＭからデータバス８２を介して命令レジスタにフェッチし、当該命令コードをデコーダによって解釈（ストア（ＳＴＯＲＥ）命令であると解釈）する。一方、コア２における演算器２１は、図７（Ｂ）に示すように、プログラムカウンタ２３が指し示す“ＦＦＦ６（ｈ）”が反転されたアドレス“０００９（ｈ）”に記憶されている命令コード“５２ ０１ ００（ｈ）”を、プログラムメモリＰＭからデータバス８２及び反転器３２を介して命令レジスタにフェッチし、当該命令コードをデコーダによって解釈する。この場合、実施例１とは異なり、命令コード“５２ ０１ ００（ｈ）”の反転値である“ＡＤ ＦＥ ＦＦ（ｈ）”は、ストア（ＳＴＯＲＥ）命令であると解釈される。
【００３５】
次に、コア１における演算器１１は、解釈したＳＴＯＲＥ命令のコード体系が倍長であることを認識すると、コア１におけるプログラムカウンタ１３は、プログラムカウンタ１３の値（“０００９（ｈ）”）を、図８（Ａ）に示すように３番地先へ進める。一方、コア２における演算器２１は、解釈したストア確認命令のコード体系が倍長であることを認識すると、コア２におけるプログラムカウンタ２３は、プログラムカウンタ２３の値（“ＦＦＦ６（ｈ）”）を図８（Ａ）に示すように３番地先へ進める。
【００３６】
次に、コア１における演算器１１は、図８（Ｂ）に示すように、プログラムカウンタ１３が指し示すアドレス“０００Ｃ（ｈ）”に記憶されているコード“１０ ００ ００（ｈ）”を、プログラムメモリＰＭからデータバス８２を介して命令レジスタにフェッチする。一方、コア２における演算器２１は、図８（Ｂ）に示すように、プログラムカウンタ２３が指し示す“ＦＦＦ３（ｈ）”が反転されたアドレス“０００Ｃ（ｈ）”に記憶されているコード“１０ ００ ００（ｈ）”を、プログラムメモリＰＭからデータバス８２及び反転器３２を介して命令レジスタにフェッチする。
【００３７】
次に、コア１における割込みコントローラ１４は、図９（Ａ）に示すように、解釈した命令コード（この例では、ストア命令）に従って、内部メモリ１２におけるデータレジスタＲ１におけるデータ“１Ａ（ｈ）”を、データバス８４を介して、不揮発性メモリ５におけるデータメモリＤＭ１中の所定の記憶領域（命令コードに含まれるアドレス“００ １０ ００ ００（ｈ）”）に書き込む処理を実行する。一方、コア２における割込みコントローラ２４は、解釈した命令コード（この例では、ストア命令）に従って、内部メモリ２２におけるデータレジスタＲ１におけるデータ“Ｅ５（ｈ）”を、データバス８４及び反転器３４を介して不揮発性メモリ５におけるデータメモリＤＭ２中の所定の記憶領域（アドレス“００ １０ ００ ００（ｈ）”）に書き込む処理を実行する。これにより、図９（Ａ）に示すように、反転器３４により２値論理が反転されたデータ“１Ａ（ｈ）”が所定の記憶領域に記憶される。
【００３８】
次に、コア１における割込みコントローラ１４は、図９（Ａ）に示すように、データメモリＤＭ１からデータ（ストア命令に従って書き込まれたデータ“１Ａ（ｈ）”）を取得し、割込みコントローラ２４へ出力する。一方、コア２における割込みコントローラ２４は、割込みコントローラ１４からのデータを取得し、且つ、データメモリＤＭ２からデータ（ストア命令に従って書き込まれたデータ“１Ａ（ｈ）”）を、データバス８４及び反転器３４を介して取得する。そして、割込みコントローラ２４は、割込みコントローラ１４から取得したデータの反転値と、データメモリＤＭ２から取得したデータの値とを比較（データ比較）する。そして、このデータ比較の結果、互いのデータが一致していない場合、割込みコントローラ１４，２４は、異常と判断してコア１，２の内部リセットを実行する。一方、上記データ比較の結果、互いの値が一致している場合、コア１におけるプログラムカウンタ１３は、プログラムカウンタ１３の値を３番地先へ進め、コア２におけるプログラムカウンタ２３は、プログラムカウンタ１３の値を３番地先へ進める。以降、上記と同じように処理が進行する。
【００３９】
以上説明したように、上記実施形態によれば、並列処理が可能なコア１とコア２とを備えたＩＣチップＣにおいて、コア１は、不揮発性メモリ５から出力された命令コードを取得し、取得した命令コードを解釈し、解釈した命令コードに従って処理を実行する一方、コア２は、反転器３２により２値論理が反転された命令コードを取得し、取得した命令コードを、コア１とは反対の２値論理で解釈し、解釈した命令コードに従ってコア１とは反対の２値論理で処理を実行するように構成したので、例えばロックステップと認証処理を同時に実行してもサイドチャネル情報が増長されず、高い耐タンパ性を実現することができる。つまり、コア２では、コア１における論理０と論理１の２値論理（言い換えれば、識別基準）が反転するように構成したので、コア１とコア２との並列処理において、ハミングウェイトを均一化させることができ、サイドチャネル情報が収集されることを極力防ぐことができる。
【００４０】
また、実施例１では、コア２は、コア１によりデータメモリＤＭに書き込まれた第１結果データを反転器３４により２値論理が反転された後に取得し、当該取得した第１結果データと、内部メモリ２２に格納されている第２結果データとを比較し、この結果、互いのデータが一致していない場合、コア１，２の内部リセットが実行されるように構成したので、ＩＣチップＣ内の故障や外部からの攻撃による異常を適切に検出することができる。
【００４１】
また、実施例２では、コア２は、データメモリＤＭ２に書き込んだ第２結果データを反転器３４を介して取得し、且つ、コア１によりデータメモリＤＭ１に書き込まれた第１結果データをコア１の割込みコントローラ１４を介して取得し、取得した互いのデータを比較し、この結果、互いのデータが一致していない場合、コア１，２の内部リセットが実行されるように構成したので、ＩＣチップＣ内の故障や外部からの攻撃による異常を適切に検出することができる。
【００４２】
なお、上記実施形態においては、２つのコアを備えたＩＣチップを例にとって説明したが、３つ以上のコアを備えるマルチコアプロセッサに対しても本発明は適用可能である。
【符号の説明】
【００４３】
１，２  コア
３  反転器
４  ＲＡＭ
５  不揮発性メモリ
６  ＲＯＭ
７  Ｉ／Ｏ回路
８  バス
Ｃ  ＩＣチップ
【図１】
2015230495.tif 000003
【図２】
2015230495.tif 000004
【図３】
2015230495.tif 000005
【図４】
2015230495.tif 000006
【図５】
2015230495.tif 000007
【図６】
2015230495.tif 000008
【図７】
2015230495.tif 000009
【図８】
2015230495.tif 000010
【図９】
2015230495.tif 000011