(57)【要約】【課題】外乱が発生しても正常な演算結果を出力する構成を実現する。【解決手段】切替部１０は、出力タイミングの度にデータＫｅｙとデータＤａｔａとを並行して出力する。演算部２０は、データＫｅｙとデータＤａｔａとを用いた演算を行って、バスデータＢｕｓ１とＢｕｓ２とを並行して出力する。比較部３０は、同タイミングで入力したバスデータＢｕｓ１とＢｕｓ２のデータ値を比較し、データ値が一致する場合は値が“Ｈ”の、一致しない場合は値が“Ｌ”の信号Ｓ１を出力する。切替部１０は、出力されたバスデータＢｕｓ１を入力し、出力タイミングの度に、入力した信号Ｓ１の値が“Ｈ”であれば、新たに入力したデータＫＩを新たなデータＫｅｙとして演算部２０に出力し、入力したバスデータＢｕｓ１を新たなデータＤａｔａとして出力し、“Ｌ”であれば、演算部２０に出力済のデータＫｅｙとデータＤａｔａとを、再度、演算部２０に出力する。【選択図】図１
2013038488.tif 000002
【特許請求の範囲】
【請求項１】
繰り返し到来する出力タイミングの度に第１のデータと第２のデータとを並行して出力する切替部と、
前記切替部から出力された第１のデータと第２のデータとを並行して入力し、入力した第１のデータと第２のデータとを用いた演算を行って第３のデータと第４のデータを生成し、生成した第３のデータと第４のデータとを並行して出力する演算部と、
前記演算部から出力された第３のデータと第４のデータとを並行して入力し、同じタイミングで入力した第３のデータのデータ値と第４のデータのデータ値とを比較し、第３のデータと第４のデータとの間でデータ値が一致する場合は、前記切替部に一致信号を出力し、第３のデータと第４のデータとの間でデータ値が一致しない場合は、前記切替部に不一致信号を出力する比較部とを有し、
前記切替部は、
前記演算部から第３のデータが出力される度に、出力された第３のデータを入力し、
出力タイミングが到来する度に、到来した出力タイミングにおいて前記比較部から入力した信号が一致信号であるか不一致信号であるかを判断し、
前記比較部から入力した信号が一致信号である場合は、前記演算部に出力済の第１のデータと異なるデータを新たな第１のデータとして前記演算部に出力するとともに、前記演算部から入力した第３のデータを新たな第２のデータとして出力し、
前記比較部から入力した信号が不一致信号である場合は、前記演算部に出力済の第１のデータと第２データとを、再度、前記演算部に出力することを特徴とするデータ処理装置。
【請求項２】
前記切替部は、
到来した出力タイミングにおいて前記比較部から入力した信号が一致信号である場合は、前回の出力タイミングにおいて前記演算部に出力した第１のデータと異なるデータを新たな第１のデータとして前記演算部に出力するとともに、前記演算部から直近に入力した第３のデータを新たな第２のデータとして出力し、
到来した出力タイミングにおいて前記比較部から入力した信号が不一致信号である場合は、前回の出力タイミングにおいて前記演算部に出力した第１のデータと第２データとを、再度、前記演算部に出力することを特徴とする請求項１に記載のデータ処理装置。
【請求項３】
前記演算部は、
正常時は、
データ値が一定しない不確定状態の第３のデータを生成し、出力し、不確定状態の第３のデータの生成及び出力の後に、データ値が一定している確定状態の第３のデータを生成し、出力し、
データ値が一定しない不確定状態の第４のデータを生成し、出力し、不確定状態の第４のデータの生成及び出力の後に、データ値が一定している確定状態の第４のデータを生成し、出力し、
前記比較部は、
確定状態の第３のデータと確定状態の第４のデータとを同じタイミングで入力し、確定状態の第３のデータのデータ値と確定状態の第４のデータのデータ値とを比較した場合は、第３のデータと第４のデータとの間でデータ値が一致し、前記切替部に一致信号を出力し、
確定状態の第３のデータと確定状態の第４のデータとの組み合わせ以外の組み合わせでデータ値を比較した場合は、第３のデータと第４のデータとの間でデータ値が一致せず、前記切替部に不一致信号を出力することを特徴とする請求項１又は２に記載のデータ処理装置。
【請求項４】
前記比較部は、
前記切替部の出力タイミングが規定周期ごとに到来している場合は、規定周期ごとの各出力タイミングにおいて、確定状態の第３のデータのデータ値と確定状態の第４のデータのデータ値とを比較することになり、前記切替部に一致信号を出力し、
前記切替部の出力タイミングが規定周期から外れた場合は、規定周期から外れた出力タイミングにおいて、確定状態の第３のデータと確定状態の第４のデータとの組み合わせ以外の組み合わせでデータ値を比較することになり、前記切替部に不一致信号を出力することを特徴とする請求項３に記載のデータ処理装置。
【請求項５】
前記演算部は、
異常が発生した場合は、第３のデータ及び第４のデータの少なくともいずれかにおいて、確定状態のデータが生成されず、不確定状態のデータのみを出力し、
前記比較部は、
前記演算部で異常が発生した場合は、前記切替部の出力タイミングが規定周期ごとに到来している場合であっても、規定周期ごとの各出力タイミングにおいて、確定状態の第３のデータと確定状態の第４のデータとの組み合わせ以外の組み合わせでデータ値を比較することになり、前記切替部に不一致信号を出力することを特徴とする請求項３又は４に記載のデータ処理装置。
【請求項６】
前記演算部は、
第１のデータと第２のデータとを用いた演算を行って第３のデータを生成し、生成した第３のデータを前記比較部に出力するとともに、生成した第３のデータを遅延させ、遅延後の第３のデータを第４のデータとして、第３のデータの出力と並行して前記比較部に出力することを特徴とする請求項１〜５のいずれかに記載のデータ処理装置。
【請求項７】
前記演算部は、
第１の演算部と、第２の演算部とを有し、
前記切替部は、
出力タイミングごとに、前記第１の演算部と前記第２の演算部の各々に、同時に、第１のデータと第２のデータとを並行して出力し、
前記第１の演算部は、
前記切替部から出力された第１のデータと第２のデータとを並行して入力し、入力した第１のデータと第２のデータとを用いた演算を行って第３のデータを生成し、生成した第３のデータを前記比較部に出力し、
前記第２の演算部は、
前記切替部から出力された第１のデータと第２のデータとを並行して入力し、入力した第１のデータと第２のデータとを用いて前記第１の演算部と同じ演算を行って第４のデータを生成し、生成した第４のデータを第３のデータの出力と並行して前記比較部に出力することを特徴とする請求項１〜５のいずれかに記載のデータ処理装置。
【請求項８】
前記切替部は、
前記演算部に出力した第１のデータと第２のデータをフィードバック入力し、
到来した出力タイミングにおいて前記比較部から入力した信号が不一致信号である場合は、フィードバック入力した、前記演算部に出力済の第１のデータと第２データを、再度、前記演算部に出力することを特徴とする請求項１〜７のいずれかに記載のデータ処理装置。
【請求項９】
前記切替部は、
暗号処理又は復号処理に用いられる鍵データを第１のデータとして前記演算部に出力するとともに、暗号処理又は復号処理の対象となるデータを第２のデータとして前記演算部に出力し、
前記演算部は、
第１のデータを用いて第２のデータを暗号化する演算又は復号する演算を行い、暗号化後の第２のデータ又は復号後の第２のデータを第３のデータ及び第４のデータとして前記比較部に出力することを特徴とする請求項１〜８のいずれかに記載のデータ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ処理装置に関する。
【背景技術】
【０００２】
特許文献１に記載の技術では、論理的にみて同じ暗号関連処理が行われる複数の回路を並列に配置し、各回路での暗号関連処理の結果を比較し、比較結果が異なった場合に、暗号関連処理を停止させることを行っている。
これにより、特許文献１に記載の技術では、電力差分攻撃やフォールト攻撃に耐性を持たせている。
【０００３】
また、特許文献２に記載の技術では、データ撹拌部でデータが確定する時間と、鍵スケジュール部で鍵が確定する時間を一致させるための遅延回路を設けることにより、故障発生時にサンプリングされる故障データが複数となるようにしている。
この結果、特許文献２に記載の技術では、フォールト攻撃ができない故障を有するデータを出力させて、これにより、フォールト攻撃に耐性を持たせている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−２２９４８５号公報
【特許文献２】特開２０１０−２７３１６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１の技術では、論理的にみて同じ回路を並列に配置しているため、回路規模が大きくなるという課題がある。
また、異常時に暗号関連処理が停止するので、外乱により異常が頻発する環境、例えば、宇宙空間における放射線による異常発生の場合、正常な結果が得られるのはごくまれであるという課題がある。
【０００６】
また、特許文献２の技術においても、異常時に複数の故障が発生するように遅延回路が設けられ、故障を有するデータを出力しているので、外乱により異常が頻発する環境、例えば、宇宙空間における放射線による異常発生の場合、正常な結果が得られないという課題がある。
【０００７】
この発明は上記のような課題を解決することを主な目的としており、簡易な構成により、外乱が発生しても正常な演算結果を出力する構成を実現することを主な目的とする。
【課題を解決するための手段】
【０００８】
本発明に係るデータ処理装置は、
繰り返し到来する出力タイミングの度に第１のデータと第２のデータとを並行して出力する切替部と、
前記切替部から出力された第１のデータと第２のデータとを並行して入力し、入力した第１のデータと第２のデータとを用いた演算を行って第３のデータと第４のデータを生成し、生成した第３のデータと第４のデータとを並行して出力する演算部と、
前記演算部から出力された第３のデータと第４のデータとを並行して入力し、同じタイミングで入力した第３のデータのデータ値と第４のデータのデータ値とを比較し、第３のデータと第４のデータとの間でデータ値が一致する場合は、前記切替部に一致信号を出力し、第３のデータと第４のデータとの間でデータ値が一致しない場合は、前記切替部に不一致信号を出力する比較部とを有し、
前記切替部は、
前記演算部から第３のデータが出力される度に、出力された第３のデータを入力し、
出力タイミングが到来する度に、到来した出力タイミングにおいて前記比較部から入力した信号が一致信号であるか不一致信号であるかを判断し、
前記比較部から入力した信号が一致信号である場合は、前記演算部に出力済の第１のデータと異なるデータを新たな第１のデータとして前記演算部に出力するとともに、前記演算部から入力した第３のデータを新たな第２のデータとして出力し、
前記比較部から入力した信号が不一致信号である場合は、前記演算部に出力済の第１のデータと第２データとを、再度、前記演算部に出力することを特徴とする。
【発明の効果】
【０００９】
本発明によれば、外乱が生じた場合は、出力タイミングが到来した際の第３のデータと第４のデータとの間でデータ値が一致しなくなり、演算部に出力済の第１のデータと第２データとを、再度、演算部に出力するため、出力済の第１のデータと第２データとを用いた演算を演算部に行わせることができ、外乱が発生しても正常な演算結果を出力することができる。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１に係るデータ処理装置の機能構成例を示す図。
【図２】実施の形態１に係るデータ処理装置の回路構成例を示す図。
【図３】実施の形態１に係るデータ処理装置における正常時のタイミングチャート図。
【図４】実施の形態１に係るデータ処理装置におけるクロック異常発生時のタイミングチャート図。
【図５】実施の形態１に係るデータ処理装置における誤動作発生時のタイミングチャート図。
【図６】実施の形態２に係るデータ処理装置の回路構成例を示す図。
【図７】実施の形態２に係るデータ処理装置における正常時のタイミングチャート図。
【図８】実施の形態２に係るデータ処理装置におけるクロック異常発生時のタイミングチャート図。
【図９】実施の形態２に係るデータ処理装置における誤動作発生時のタイミングチャート図。
【図１０】一般的なデータ処理装置の機能構成例を示す図。
【図１１】一般的なデータ処理装置の回路構成例を示す図。
【図１２】一般的なデータ処理装置における正常時のタイミングチャート図。
【図１３】一般的なデータ処理装置におけるクロック異常発生時のタイミングチャート図。
【図１４】確定状態と不確定状態を説明する図。
【発明を実施するための形態】
【００１１】
実施の形態１及び実施の形態２では、フォールト攻撃のように異常な外乱が発生しても、正常な演算結果を出力し、また、宇宙空間のように異常な外乱が頻発する環境においても、正常な演算結果を出力するデータ処理装置を説明する。
【００１２】
以下では、まず、一般的なデータ処理装置を説明し、その後、実施の形態１及び実施の形態２に係るデータ処理装置を説明する。
【００１３】
実施の形態１．
図１０は、一般的なデータ処理装置の構成図である。
一般的なデータ処理装置は、被演算データを切り替える切替器１００、演算を行う演算器２００、最終演算結果を出力する出力器４００とで構成される。
切替器１００は、入力データＫＩ、入力データＤＩ、バスデータＢｕｓ１を、クロックＣＫのタイミングで切り替えて、データＤａｔａ、データＫｅｙを出力する。
演算器２００はデータＤａｔａ、データＫｅｙを受けて、演算を行い、演算結果をバスデータＢｕｓ１に出力する。
出力器４００は、イネーブル信号Ｅを見て、最終演算結果がバスデータＢｕｓ１に出力されたことが分かると、クロックＣＫのタイミングでバスデータＢｕｓ１を保持して、データＤＯに出力する。
なお、図１０において、太い線の接続線は複数ビットの信号が入出力されることを表し、細い線の接続線は１ビットの信号が入出力されることを表している。
以降で説明する図面においても、太い線の接続線は複数ビットの信号が入出力されることを表し、細い線の接続線は１ビットの信号が入出力されることを表している。
【００１４】
このような一般的なデータ処理装置にて、フォールト攻撃を行う場合は、切替器１００、演算器２００に外乱を与えて、データの一部に故障を誘発させる。
具体的には、一定周期のクロックＣＫに、異なる周期のクロックを一瞬発生させて、バスデータＢｕｓ１の切替タイミングを変えることで、データＤａｔａの値に故障を誘発させる。
また、レーザーや放射線を演算器２００に照射することで、演算ビットの状態を変化させて、故障を誘発させる。
このように、故障を一瞬誘発し、その後は正常なデータで演算を行い、最終結果を故障データとして入手することで、フォールト攻撃は成立する。
図１０では図示していないが、切替器１００のループ制御や、イネーブル信号Ｅの生成を行う演算制御部への攻撃は対象外とする。
なぜなら、フォールト攻撃は正常な演算制御の下で、演算データの一部に故障を誘発させることで成り立つ攻撃であるからである。
また、宇宙空間のような外乱が多い環境では、切替器１００、演算器２００が放射線などにより誤動作して、データが破壊される。
【００１５】
図１１は一般的な演算装置の回路構成図である。
これを用いて、異常クロックにおけるフォールト攻撃の一例を説明する。
【００１６】
図１１において、演算回路２０１は演算を行う組合せ回路である。
フリップフロップ１０１は、入力データＫＩをクロックＣＫのタイミングで保持して、データＫｅｙとして出力するフリップフロップである。
セレクタ１０３は、入力データＤＩとバスデータＢｕｓ１をセレクタ信号Ｓ２で切り替えるセレクタ回路である。
フリップフロップ１０２は、セレクタ１０３の出力をクロックＣＫのタイミングで保持し、データＤａｔａとして出力するフリップフロップである。
イネーブル付フリップフロップ４０１は、イネーブル信号Ｅを判断し、クロックＣＫのタイミングでバスデータＢｕｓ１を保持するイネーブル付フリップフロップである。
図１０との対応は、フリップフロップ１０１、フリップフロップ１０２、セレクタ１０３が切替器１００に、演算回路２０１が演算器２００に、イネーブル付フリップフロップ４０１が出力器４００に相当する。
【００１７】
次に正常な動作について、図１２を用いて説明する。
図１２は、図１１の回路に正常なクロックＣＫが入力されたときのタイミングチャートである。
【００１８】
入力データＫＩは、クロックＣＫに同期して、図に示すように、＜Ｋ１＞、＜Ｋ２＞、・・・、＜Ｋｎ−１＞と入力されるデータである。
入力データＫＩの生成回路は図１１には図示されていない。
入力データＤＩは、＜Ｋ１＞と同じタイミングで＜Ｄ１＞が入力される。
その他のタイミングでは、特に意味を持たないので、＜Ｘ＞と示している。
セレクタ信号Ｓ２の値が、図１２のように”Ｈ”であれば、＜Ｋ１＞、＜Ｄ１＞がフリップフロップ１０１、フリップフロップ１０２で保持されるので、１クロック遅れたタイミングで、データＫｅｙ、データＤａｔａに現れる。
【００１９】
演算回路２０１にデータが入力されると演算が開始されるが、回路遅延によりある期間データが不安定で確定しない区間が存在する。
これを、バスデータＢｕｓ１では、ハッチングでバス表記している。
この区間ではデータが刻一刻と変化している。
この不確定区間を過ぎるとデータが安定し、確定したデータが出力される。
つまり、図１４に例示するように、演算回路２０１の出力データでは、データ値が一定していない不確定状態７１０とデータ値が一定している確定状態７２０とが存在する。
確定状態７２０は、次のデータＤａｔａ及びデータＫｅｙが演算回路２０１に入力されるまで持続する。
不確定状態７１０の時間、換言すると、確定状態７２０が持続する時間は、演算の種類によって異なる。
演算回路２０１では、入力されたデータＤａｔａとデータＫｅｙの組合せに応じて、複数種の演算が行われる。
演算完了までに要する時間は演算の種類により様々であり、演算完了までに長時間を要する演算の場合は、不確定状態７１０の時間が長く、従って、確定状態７２０が持続する時間は短くなる。
【００２０】
図１２では、＜Ｋ１＞、＜Ｄ１＞を演算した結果を＜Ｄ２＞と表記して、バスデータＢｕｓ１に示している。
＜Ｄ２＞と確定しているときは、セレクタ信号Ｓ２が“Ｌ”であるので、セレクタ１０３はバスデータＢｕｓ１を選択、すなわち、このタイミングでは＜Ｄ２＞を選択している。
クロックＣＫの立ち上がり時に、フリップフロップ１０１、フリップフロップ１０２が＜Ｋ２＞、＜Ｄ２＞を保持するので、データＫｅｙ、データＤａｔａは＜Ｋ２＞、＜Ｄ２＞に変化する。
このように、演算結果をループして演算が進行する。
イネーブル信号Ｅが“Ｈ”の区間で、クロックＣＫが立ち上がると、イネーブル付フリップフロップ４０１がバスデータＢｕｓ１を保持し、＜Ｄｎ＞を出力する。
このように、順次データＤａｔａが変化して、最終結果である＜Ｄｎ＞が出力される。
【００２１】
次に、異常なクロックＣＫが入力された場合のタイミングチャートを図１３に示す。
タイミングＴ０が異常なクロックＣＫの立ち上りタイミングである。
このタイミングＴ０におけるバスデータＢｕｓ１の状態を見ると、＜Ｋ２＞、＜Ｄ２＞が演算回路２０１に入力されてから、データが安定するまでの時間を経ていない区間でクロックの立ち上りが来たため、ハッチングのバス表記のデータを保持することになる。
データＤａｔａにおける、この保持された不確定なデータを＜ハッチングＤ３＞と表記する。
すなわち、故障したデータがデータＤａｔａに取り込まれた。
演算回路２０１は＜Ｋ３＞と＜ハッチングＤ３＞が入力されたので、データが不安定な区間ののち、データが確定した＜ハッチングＤ４＞を出力することになる。
＜ハッチングＤ３＞から＜ハッチングＤ４＞が生成されたので、故障したデータを引き継いだことになる。
このように、故障したデータを引き継いだ＜ハッチングＤｎ＞が生成され、最終結果として出力されると、フォールト攻撃は成立する。
【００２２】
図１に本実施の形態に係るデータ処理装置の機能構成例を示す。
本実施の形態の係るデータ処理装置は、被演算データを切り替える切替部１０、演算を行う演算部２０、演算部２０からのデータを比較する比較部３０、最終演算結果を出力する出力部４０とで構成される。
【００２３】
切替部１０は、入力データＫＩ、データＫｅｙ、入力データＤＩ、データＤａｔａ、バスデータＢｕｓ１を、クロックＣＫのタイミングで切り替えて、データＤａｔａ、データＫｅｙを出力する。
つまり、切替部１０は、外部より入力データＫＩと入力データＤＩを入力する。
切替部１０は、入力データＫＩは周期的に外部から入力するが、入力データＤＩは初回のみ入力する。
また、切替部１０は、繰り返し到来する出力タイミングであるクロックＣＫ立ち上がり時に、データＤａｔａとデータＫｅｙとを並行して出力するとともに、出力したデータＤａｔａとデータＫｅｙをフィードバック入力する。
更に、切替部１０は、演算部２０がデータＤａｔａとデータＫｅｙを用いた演算結果であるバスデータＢｕｓ１を入力する。
データＫｅｙは第１のデータの例であり、データＤａｔａは第２のデータの例であり、バスデータＢｕｓ１は第３のデータの例である。
また、演算部２０が出力するバスデータＢｕｓ２が第４のデータの例である。
切替部１０は、バスデータＢｕｓ２は入力しない。
詳細は後述するが、切替部１０は、クロックＣＫ立ち上がり時に比較部３０からセレクタ信号Ｓ１を入力し、入力したセレクタ信号Ｓ１の値を判断する。
値が“Ｈ”のセレクタ信号Ｓ１は、比較部３０においてバスデータＢｕｓ１とバスデータＢｕｓ２とを比較した結果、両者のデータ値が一致していたことを表す。
一方、値が“Ｌ”のセレクタ信号Ｓ１は、比較部３０においてバスデータＢｕｓ１とバスデータＢｕｓ２とを比較した結果、両者のデータ値が一致していなかったことを表す。
セレクタ信号Ｓ１の値が“Ｈ”であれば、前回の出力タイミングにおいて演算部２０に出力したデータＫｅｙと異なるデータ（具体的には、新たに入力した入力データＫＩ）を新たなデータＫｅｙとして演算部２０に出力するとともに、演算部２０から入力したバスデータＢｕｓ１を新たなデータＤａｔａとして出力する。
一方、セレクタ信号Ｓ１の値が“Ｌ”であれば、前回の出力タイミングにおいて演算部２０に出力したデータＫｅｙとデータＤａｔａとを、再度、演算部２０に出力する。
例えば、データＫｅｙは、演算部２０の暗号処理又は復号処理に用いられる鍵データであり、データＤａｔａは、演算部２０の暗号処理又は復号処理の対象となるデータである。
【００２４】
演算部２０は切替部１０から出力されたデータＤａｔａとデータＫｅｙとを並行して入力し、入力したデータＤａｔａとデータＫｅｙとを用いて所定の演算（例えば、暗号処理又は復号処理のための演算）を行い、演算結果をバスデータＢｕｓ１、バスデータＢｕｓ２として出力する。
実施の形態１では、後述するように、バスデータＢｕｓ２は、バスデータＢｕｓ１を遅延させたデータである。
【００２５】
比較部３０は、バスデータＢｕｓ１、バスデータＢｕｓ２を比較し、その結果をセレクタ信号Ｓ１として出力する。
つまり、演算部２０から出力されたバスデータＢｕｓ１とバスデータＢｕｓ２とを並行して入力し、同じタイミングで入力したバスデータＢｕｓ１のデータ値とバスデータＢｕｓ２のデータ値とを比較し、バスデータＢｕｓ１とバスデータＢｕｓ２との間でデータ値が一致する場合は、値が“Ｈ”のセレクタ信号Ｓ１を切替部１０に出力する。
一方、バスデータＢｕｓ１とバスデータＢｕｓ２との間でデータ値が一致しない場合は、値が“Ｌ”のセレクタ信号Ｓ１を切替部１０に出力する。
値が“Ｈ”のセレクタ信号Ｓ１は、一致信号の例に相当し、値が“Ｌ”のセレクタ信号Ｓ１は、不一致信号の例に相当する。
前述したように、バスデータＢｕｓ２は、バスデータＢｕｓ１を遅延させたデータである。
このため、正常時では、バスデータＢｕｓ１の確定状態７２０（図１４）のデータ値とバスデータＢｕｓ２の確定状態７２０のデータ値は同じである。
そして、比較部３０は、バスデータＢｕｓ１の確定状態７２０（図１４）のデータ値とバスデータＢｕｓ２の確定状態７２０のデータ値を並行して入力している間は、値が“Ｈ”のセレクタ信号Ｓを出力する。
なお、演算部２０における遅延量は、比較部３０においてバスデータＢｕｓ１の確定状態７２０のデータとバスデータＢｕｓ２の確定状態７２０のデータを並行して入力できる遅延量である。
一方、比較部３０は、確定状態７２０同士の組合せ以外の組合せでバスデータＢｕｓ１とバスデータＢｕｓ２を入力している間は、値が“Ｌ”のセレクタ信号Ｓを出力する。
【００２６】
出力部４０は、イネーブル信号Ｅを見て、最終演算結果がバスデータＢｕｓ１に出力されたことが分かると、クロックＣＫのタイミングでバスデータＢｕｓ１を保持して、データＤＯに出力する。
【００２７】
図２は実施の形態１に係るデータ処理装置の回路構成例を示す。
これを用いて、フォールト攻撃や外乱による誤動作に対して耐性があることを示す。
【００２８】
図２において、演算回路２１は演算を行う組合せ回路である。
セレクタ１３は入力データＫＩとデータＫｅｙをセレクタ信号Ｓ１、セレクタ信号Ｓ２で切り替えるセレクタ回路である。
フリップフロップ１１は、セレクタ１３からの信号をクロックＣＫのタイミングで保持して、データＫｅｙとして出力するフリップフロップである。
セレクタ１４は、入力データＤＩ、データＤａｔａとバスデータＢｕｓ１をセレクタ信号Ｓ１、セレクタ信号Ｓ２で切り替えるセレクタ回路である。
フリップフロップ１２は、セレクタ１４の出力をクロックＣＫのタイミングで保持し、データＤａｔａとして出力するフリップフロップである。
遅延素子２２は、バスデータＢｕｓ１を遅延させる遅延回路である。
ＮＸＯＲ素子３１はバスデータＢｕｓ１とバスデータＢｕｓ２のＮＸＯＲ（Ｎｏｔ−ｅＸｃｌｕｓｉｖｅ  ＯＲ）をとり、セレクタ信号Ｓ１を出力する回路である。
イネーブル付フリップフロップ４１は、イネーブル信号Ｅを判断し、クロックＣＫのタイミングでバスデータＢｕｓ１を保持するイネーブル付フリップフロップである。
図１との対応は、フリップフロップ１１、フリップフロップ１２、セレクタ１３、セレクタ１４が切替部１０に、演算回路２１、遅延素子２２が演算部２０に、ＮＸＯＲ素子３１が比較部３０に、イネーブル付フリップフロップ４１が出力部４０に相当する。
【００２９】
次に正常な動作について、図３を用いて説明する。
図３は、図２の回路に正常なクロックＣＫが入力されたときのタイミングチャートである。
【００３０】
入力データＫＩは、クロックＣＫに同期して、図に示すように、＜Ｋ１＞、＜Ｋ２＞、・・・、＜Ｋｎ−１＞と入力されるデータである。
入力データＫＩの生成回路は図２には図示されていない。
入力データＤＩは、＜Ｋ１＞と同じタイミングで＜Ｄ１＞が入力される。
その他のタイミングでは、特に意味を持たないので、＜Ｘ＞と示している。
セレクタ信号Ｓ１に関係なく、値が“Ｈ”のセレクタ信号Ｓ２がセレクタ１３に入力されると、セレクタ１３は入力データＫＩを、セレクタ１４は入力データＤＩを選択する。
ここで選択されたデータをフリップフロップ１１、フリップフロップ１２が保持するので、＜Ｋ１＞、＜Ｄ１＞が、１クロック遅れたタイミングで、データＫｅｙ、データＤａｔａに現れる。
【００３１】
演算回路２１にデータが入力されると演算が開始されるが、回路遅延によりある期間データが不安定で確定しないタイミングが存在する。
これを、バスデータＢｕｓ１では、ハッチング色のバス表記で示している。
この区間ではデータが刻一刻と変化している。この不確定区間を過ぎるとデータが安定し、確定したデータが出力される。
つまり、図１４に示したように、演算回路２１からの出力には、不確定状態７１０と確定状態７２０とが含まれる。
＜Ｋ１＞、＜Ｄ１＞を演算した結果を＜Ｄ２＞と表記して、バスデータＢｕｓ１に示している。
バスデータＢｕｓ２は、遅延素子２２による遅延分だけバスデータＢｕｓ１を遅延させたものであるので、図３ではバスデータＢｕｓ１が少し遅れた表記になっている。
ＮＸＯＲ素子３１には、バスデータＢｕｓ１とバスデータＢｕｓ２が入力されるので、両バスデータの値が一致した区間だけ“Ｈ”となるセレクタ信号Ｓ１となる。
つまり、バスデータＢｕｓ１の＜Ｄ２＞（確定状態のデータ）とバスデータＢｕｓ２の＜Ｄ２＞（確定状態のデータ）が重なる区間、セレクタ信号Ｓ１は“Ｈ”となる。
セレクタ信号Ｓ１が“Ｈ”、セレクタ信号Ｓ２が“Ｌ”であれば、セレクタ１３は入力データＫＩを、セレクタ１４はバスデータＢｕｓ１を選択する。
クロックＣＫの立ち上がり時に、フリップフロップ１１、フリップフロップ１２が＜Ｋ２＞、＜Ｄ２＞を保持するので、データＫｅｙは＜Ｋ２＞、データＤａｔａは＜Ｄ２＞となる。
このように、演算結果がループして、演算が進行して、データＤａｔａは、＜Ｄ３＞、＜Ｄ４＞、＜Ｄ５＞と変化していく。
イネーブル信号Ｅが“Ｈ”の区間で、クロックＣＫが立ち上がると、イネーブル付フリップフロップ４１がバスデータＢｕｓ１を保持し、＜Ｄｎ＞を出力する。
このように、データＤａｔａが順次変化して、最終結果が出力される。
【００３２】
次に、異常なクロックＣＫが入力された場合の、タイミングチャートを図４に示す。
【００３３】
図４において、タイミングＴ０が、規定周期を外れた異常なクロックＣＫの立ち上りタイミングである。
このタイミングＴ０におけるバスデータＢｕｓ１の状態を見ると、＜Ｋ２＞、＜Ｄ２＞が演算回路２１に入力されてから、データが安定するまでの時間を経ていない区間（すなわち、図１４の不確定状態７１０）でクロックの立ち上りが来たため、ハッチングのバス表記の状態である。
このタイミングＴ０では、セレクタ信号Ｓ１が“Ｌ”、セレクタ信号Ｓ２が“Ｌ”であるので、セレクタ１３はデータＫｅｙを、セレクタ１４はデータＤａｔａを選択する。
よって、クロックＣＫの立ち上がり時に、フリップフロップ１１、フリップフロップ１２が、データＫｅｙの＜Ｋ２＞、データＤａｔａの＜Ｄ２＞を保持することになる。
すなわち、タイミングＴ０以前のデータＫｅｙ、データＤａｔａを維持し、タイミングＴ０以前のデータＫｅｙ、データＤａｔａを演算回路２１に出力する。
タイミングＴ０後、データが不安定な区間を経て、バスデータＢｕｓ１は＜Ｄ３＞と確定し、遅延素子２２の遅延量だけ遅れて、バスデータＢｕｓ２も＜Ｄ３＞と確定する。
バスデータＢｕｓ１の＜Ｄ３＞（確定状態のデータ）とバスデータＢｕｓ２の＜Ｄ３＞（確定状態のデータ）が重なっている間に、次のクロックＣＫのタイミングＴ１が発生する。
このとき、正常時と同じくセレクタ信号Ｓ１が“Ｈ”、セレクタ信号Ｓ２が“Ｌ”であるので、セレクタ１３は入力データＫＩを、セレクタ１４はバスデータＢｕｓ１を選択する。
よって、データＫｅｙは＜Ｋ３＞に、データＤａｔａは＜Ｄ３＞に変化する。
以後、正常時と同じく演算が進行し、イネーブル信号Ｅが“Ｈ”の区間で、クロックＣＫが立ち上がると、イネーブル付フリップフロップ４１がバスデータＢｕｓ１を保持し、＜Ｄｎ＞を出力する。
【００３４】
なお、図２で図示していない入力データＫＩの生成回路は、セレクタ信号Ｓ１、セレクタ信号Ｓ２を監視しており、セレクタ信号Ｓ１が“Ｌ”、セレクタ信号Ｓ２が“Ｌ”のときに、クロックＣＫの立ち上りが発生した場合は、クロック立ち上りタイミング以前に出力していた入力データＫＩを、次のサイクルでも出力するものとする。
図４では、入力データＫＩにおいて、＜Ｋ３＞、＜Ｋ３＞と連続しているのが、これに相当する。
この結果、異常なクロックタイミングＴ０は無視されて、最終結果は正常な出力＜Ｄｎ＞となる。
つまり、フォールト攻撃は成立しない。
なお、異常なクロックタイミングＴ０は無視されるので、その分だけ最終結果が出力される時間は延びる。
【００３５】
次に、外乱が発生して演算回路２１が誤動作した場合の、タイミングチャートを図５に示す。
【００３６】
バスデータＢｕｓ１に＜Ｄａｍａｇｅｄ＞と書かれた区間に演算回路２１が誤動作したとしてタイミングチャートは書かれている。
誤動作している区間は、データは不安定で刻一刻と変化する（つまり、図１４の不確定状態７１０となっている）ため、＜Ｄａｍａｇｅｄ＞はハッチングで表記している。
この＜Ｄａｍａｇｅｄ＞の区間に発生したクロックＣＫの立ち上りタイミングＴ０におけるバスデータＢｕｓ１の状態は＜Ｄａｍａｇｅｄ＞である。
そのため、このタイミングＴ０では、セレクタ信号Ｓ１が“Ｌ”、セレクタ信号Ｓ２が“Ｌ”である。
よって、セレクタ１３はデータＫｅｙを、セレクタ１４はデータＤａｔａを選択する。
よって、クロックＣＫの立ち上がり時に、フリップフロップ１１、フリップフロップ１２が、データＫｅｙの＜Ｋ２＞、データＤａｔａの＜Ｄ２＞を保持することになる。
すなわち、タイミングＴ０以前のデータＫｅｙ、データＤａｔａを維持し、タイミングＴ０以前のデータＫｅｙ、データＤａｔａを演算回路２１に出力する。
タイミングＴ０後、データが不安定な区間を経て、バスデータＢｕｓ１は＜Ｄ３＞と確定し、遅延素子２２の遅延量だけ遅れて、バスデータＢｕｓ２も＜Ｄ３＞と確定する。
バスデータＢｕｓ１の＜Ｄ３＞（確定状態のデータ）とバスデータＢｕｓ２の＜Ｄ３＞（確定状態のデータ）が重なっている間に、次のクロックＣＫのタイミングＴ１が発生する。
このとき、正常時と同じくセレクタ信号Ｓ１が“Ｈ”、セレクタ信号Ｓ２が“Ｌ”であるので、セレクタ１３は入力データＫＩを、セレクタ１４はバスデータＢｕｓ１を選択する。
よって、データＫｅｙは＜Ｋ３＞に、データＤａｔａは＜Ｄ３＞に変化する。
以後、正常時と同じく演算が進行し、イネーブル信号Ｅが“Ｈ”の区間で、クロックＣＫが立ち上がると、イネーブル付フリップフロップ４１がバスデータＢｕｓ１を保持し、＜Ｄｎ＞を出力する。
【００３７】
なお、図２で図示していない入力データＫＩの生成回路は、セレクタ信号Ｓ１、セレクタ信号Ｓ２を監視しており、セレクタ信号Ｓ１が“Ｌ”、セレクタ信号Ｓ２が“Ｌ”のときに、クロックＣＫの立ち上りが発生した場合は、クロック立ち上りタイミング以前に出力していた入力データＫＩを、次のサイクルでも出力するものとする。
図５では、入力データＫＩにおいて、＜Ｋ３＞、＜Ｋ３＞と連続しているのが、これに相当する。
この結果、誤動作が発生した区間のクロックタイミングＴ０は無視されて、最終結果は正常な出力＜Ｄｎ＞となる。
つまり、誤動作による影響はない。
なお、誤動作が発生した区間のクロックタイミングＴ０は無視されるので、その分だけ最終結果が出力される時間は延びる。
【００３８】
以上のように、実施の形態１では、遅延素子を設けて、演算回路のデータ出力が安定、すなわち、一致することを確認し、演算ループが回るようにした。
さらに、演算回路のデータ出力が不安定な区間に異常なクロックを入力するフォールト攻撃に対しては、演算回路に入力されているデータを、異常クロック入力後の次のクロックサイクルでも維持するようにループを制御し、同一の演算を再度行うようにするとともに、演算回路のデータ出力が安定、すなわち、一致したことを確認して、次の演算に移るようにしたので、異常なクロックを使用するフォールト攻撃に対して耐性を有する効果がある。
さらに、実施の形態１では、正常時の演算時間が最も短く、異常時は演算時間が延びるのでフォールト攻撃に手間がかかるという効果もある。
【００３９】
また、遅延素子を設けて、演算回路のデータ出力が安定、すなわち、一致することを確認し、演算ループが回るようにしたことにより、演算回路の誤動作に対しても耐性を有する。
つまり、意図的で有る無しに関わらず外乱により演算回路が誤動作し、その区間にクロックが発生した場合は、演算回路に入力されているデータを、誤動作の発生した次のクロックサイクルでも維持するようにループを制御し、同一の演算を再度行うようにするとともに、演算回路のデータ出力が安定、すなわち、一致したことを確認して、次の演算に移るようにしたので、演算回路の誤動作に対して耐性を有する効果がある。
【００４０】
実施の形態２．
以上の実施の形態１では、遅延素子を用いて演算回路のデータ出力が安定することを確認するようにしたものであるが、演算結果を直接比較するような場合においても、フォールト攻撃や誤動作に対して耐性を有する実施の形態を示す。
【００４１】
図６は実施の形態２に係るデータ処理装置の回路構成例を示す。
これを用いて、フォールト攻撃や外乱による誤動作に対して耐性があることを示す。
【００４２】
図６において、演算回路２１は演算を行う組合せ回路であり、２系統ある。
つまり、図６では、演算回路２１ａと演算回路２１ｂが存在する。
演算回路２１ａと演算回路２１ｂは、それぞれ同時に、データＤａｔａとデータＫｅｙとを並行して入力し、並行して同じ演算を行う。
演算回路２１ａは演算結果をバスデータＢｕｓ１として出力し、演算回路２１ｂは演算結果をバスデータＢｕｓ２として出力する。
演算回路２１ａからのバスデータＢｕｓ１の出力と演算回路２１ｂからのバスデータＢｕｓ２の出力は同時である。
正常時では、バスデータＢｕｓ１の確定状態７２０のデータ値とバスデータＢｕｓ２の確定状態７２０のデータ値は一致する。
演算回路２１ａは第１の演算部の例に相当し、演算回路２１ｂは第２の演算部の例に相当する。
また、演算回路２１ａから出力されたバスデータＢｕｓ１は第３のデータの例に相当し、演算回路２１ｂから出力されたバスデータＢｕｓ２は第４のデータの例に相当する。
なお、本実施の形態においても、データＫｅｙが第１のデータの例であり、データＤａｔａが第２のデータの例である。
【００４３】
セレクタ１３は、入力データＫＩとデータＫｅｙをセレクタ信号Ｓ１、セレクタ信号Ｓ２で切り替えるセレクタ回路である。
フリップフロップ１１は、セレクタ１３からの信号をクロックＣＫのタイミングで保持して、データＫｅｙとして出力するフリップフロップである。
セレクタ１４は、入力データＤＩ、データＤａｔａとバスデータＢｕｓ１をセレクタ信号Ｓ１、セレクタ信号Ｓ２で切り替えるセレクタ回路である。
フリップフロップ１２は、セレクタ１４の出力をクロックＣＫのタイミングで保持し、データＤａｔａとして出力するフリップフロップである。
ＮＸＯＲ素子３１は、バスデータＢｕｓ１とバスデータＢｕｓ２のＮＸＯＲをとりセレクタ信号Ｓ１を出力する回路である。
イネーブル付フリップフロップ４１は、イネーブル信号Ｅを判断し、クロックＣＫのタイミングでバスデータＢｕｓ１を保持するイネーブル付フリップフロップである。
図２との差異は、遅延素子２２が存在しない代わりに２つの演算回路２１（演算回路２１ａと演算回路２１ｂ）が存在することであり、他の要素は、図２に示したものと同様である。
図１との対応は、フリップフロップ１１、フリップフロップ１２、セレクタ１３、セレクタ１４が切替部１０に、２系統の演算回路２１が演算部２０に、ＮＸＯＲ素子３１が比較部３０に、イネーブル付フリップフロップ４１が出力部４０に相当する。
【００４４】
次に正常な動作について、図７を用いて説明する。
図７は、図６の回路に正常なクロックＣＫが入力されたときのタイミングチャートである。
【００４５】
入力データＫＩは、クロックＣＫに同期して、図に示すように、＜Ｋ１＞、＜Ｋ２＞、・・・、＜Ｋｎ−１＞と入力されるデータである。
入力データＫＩの生成回路は図６には図示されていない。
入力データＤＩは、＜Ｋ１＞と同じタイミングで＜Ｄ１＞が入力される。
その他のタイミングでは、特に意味を持たないので、＜Ｘ＞と示している。
セレクタ信号Ｓ１に関係なく、値が“Ｈ”のセレクタ信号Ｓ２が入力されると、セレクタ１３は入力データＫＩを、セレクタ１４は入力データＤＩを選択する。
ここで選択されたデータをフリップフロップ１１、フリップフロップ１２が保持するので、＜Ｋ１＞、＜Ｄ１＞が、１クロック遅れたタイミングで、データＫｅｙ、データＤａｔａに現れる。
【００４６】
演算回路２１ａ及び演算回路２１ｂにデータが入力されると演算が開始されるが、回路遅延によりある期間データが不安定で確定しないタイミングが存在する。
これを、バスデータＢｕｓ１、バスデータＢｕｓ２では、ハッチングのバス表記で示している。
この区間ではデータが刻一刻と変化している。
この不確定区間を過ぎるとデータが安定し、確定したデータが出力される。
＜Ｋ１＞、＜Ｄ１＞を演算した結果を＜Ｄ２＞と表記して、バスデータＢｕｓ１、バスデータＢｕｓ２に示している。
ＮＸＯＲ素子３１には、バスデータＢｕｓ１とバスデータＢｕｓ２が入力されるので、両バスデータの値が一致した区間だけ“Ｈ”となるセレクタ信号Ｓ１となる。
つまり、バスデータＢｕｓ１の＜Ｄ２＞（確定状態のデータ）とバスデータＢｕｓ２の＜Ｄ２＞（確定状態のデータ）が重なる区間、セレクタ信号Ｓ１は“Ｈ”となる。
セレクタ信号Ｓ１が“Ｈ”、セレクタ信号Ｓ２が“Ｌ”であれば、セレクタ１３は入力データＫＩを、セレクタ１４はバスデータＢｕｓ１を選択する。
クロックＣＫの立ち上がり時に、フリップフロップ１１、フリップフロップ１２が＜Ｋ２＞、＜Ｄ２＞を保持するので、データＫｅｙは＜Ｋ２＞、データＤａｔａは＜Ｄ２＞となる。
このように、演算結果がループして、演算が進行して、データＤａｔａは、＜Ｄ３＞、＜Ｄ４＞、＜Ｄ５＞と変化していく。
イネーブル信号Ｅが”Ｈ”の区間で、クロックＣＫが立ち上がると、イネーブル付フリップフロップ４１がバスデータＢｕｓ１を保持し、＜Ｄｎ＞を出力する。
このように、データＤａｔａが順次変化して、最終結果が出力される。
【００４７】
次に、異常なクロックＣＫが入力された場合の、タイミングチャートを図８に示す。
【００４８】
図８において、タイミングＴ０が、規定周期を外れた異常なクロックＣＫの立ち上りタイミングである。
このタイミングＴ０におけるバスデータＢｕｓ１、バスデータＢｕｓ２の状態を見ると、＜Ｋ２＞、＜Ｄ２＞が演算回路１に入力されてから、データが安定するまでの時間を経ていない区間でクロックの立ち上りが来たため、ハッチングのバス表記の状態である。
このタイミングＴ０では、セレクタ信号Ｓ１が“Ｌ”、セレクタ信号Ｓ２が“Ｌ”であるので、セレクタ１３はデータＫｅｙを、セレクタ１４はデータＤａｔａを選択する。
よって、クロックＣＫの立ち上がり時に、フリップフロップ１１、フリップフロップ１２が、データＫｅｙの＜Ｋ２＞、データＤａｔａの＜Ｄ２＞を保持することになる。
すなわち、タイミングＴ０以前のデータＫｅｙ、データＤａｔａを維持し、タイミングＴ０以前のデータＫｅｙ、データＤａｔａを演算回路２１ａ及び演算回路２１ｂに出力する。
タイミングＴ０後、データが不安定な区間を経て、バスデータＢｕｓ１は＜Ｄ３＞と確定し、バスデータＢｕｓ２も＜Ｄ３＞と確定する。
バスデータＢｕｓ１の＜Ｄ３＞（確定状態のデータ）とバスデータＢｕｓ２の＜Ｄ３＞（確定状態のデータ）が重なっている間に、次のクロックＣＫのタイミングＴ１が発生する。
このとき、正常時と同じくセレクタ信号Ｓ１が“Ｈ”、セレクタ信号Ｓ２が“Ｌ”であるので、セレクタ１３は入力データＫＩを、セレクタ１４はバスデータＢｕｓ１を選択する。
よって、データＫｅｙは＜Ｋ３＞に、データＤａｔａは＜Ｄ３＞に変化する。
以後、正常時と同じく演算が進行し、イネーブル信号Ｅが“Ｈ”の区間で、クロックＣＫが立ち上がると、イネーブル付フリップフロップ４１がバスデータＢｕｓ１を保持し、＜Ｄｎ＞を出力する。
【００４９】
なお、図６で図示していない入力データＫＩの生成回路は、セレクタ信号Ｓ１、セレクタ信号Ｓ２を監視しており、セレクタ信号Ｓ１が“Ｌ”、セレクタ信号Ｓ２が“Ｌ”のときに、クロックＣＫの立ち上りが発生した場合は、クロック立ち上りタイミング以前に出力していた入力データＫＩを、次のサイクルでも出力するものとする。
図８では、入力データＫＩにおいて、＜Ｋ３＞、＜Ｋ３＞と連続しているのが、これに相当する。
この結果、異常なクロックタイミングＴ０は無視されて、最終結果は正常な出力＜Ｄｎ＞となる。
つまり、フォールト攻撃は成立しない。
なお、異常なクロックタイミングＴ０は無視されるので、その分だけ最終結果が出力される時間は延びる。
【００５０】
次に、外乱が発生して演算回路１が誤動作した場合の、タイミングチャートを図９に示す。
【００５１】
バスデータＢｕｓ１に＜Ｄａｍａｇｅｄ＞と書かれた区間に一方の演算回路２１が誤動作したとしてタイミングチャートは書かれている（図９では演算回路２１ａに誤動作が発生している）。
誤動作している区間は、データは不安定で刻一刻と変化するため、＜Ｄａｍａｇｅｄ＞はハッチングのバス表記で示している。
この＜Ｄａｍａｇｅｄ＞の区間に発生したクロックＣＫの立ち上りタイミングＴ０におけるバスデータＢｕｓ１の状態は＜Ｄａｍａｇｅｄ＞である。
一方、バスデータＢｕｓ２の状態は＜Ｄ３＞である。
そのため、このタイミングＴ０では、セレクタ信号Ｓ１が”Ｌ”、セレクタ信号Ｓ２が”Ｌ”である。
よって、セレクタ１３はデータＫｅｙを、セレクタ１４はデータＤａｔａを選択する。
よって、クロックＣＫの立ち上がり時に、フリップフロップ１１、フリップフロップ１２が、データＫｅｙの＜Ｋ２＞、データＤａｔａの＜Ｄ２＞を保持することになる。
すなわち、タイミングＴ０以前のデータＫｅｙ、データＤａｔａを維持し、タイミングＴ０以前のデータＫｅｙ、データＤａｔａを演算回路２１ａ及び演算回路２１ｂに出力する。
タイミングＴ０後、データが不安定な区間を経て、バスデータＢｕｓ１、バスデータＢｕｓ２は＜Ｄ３＞と確定する。
バスデータＢｕｓ１の＜Ｄ３＞とバスデータＢｕｓ２の＜Ｄ３＞が重なっている間に、次のクロックＣＫのタイミングＴ１が発生する。
このとき、正常時と同じくセレクタ信号Ｓ１が“Ｈ”、セレクタ信号Ｓ２が“Ｌ”であるので、セレクタ１３は入力データＫＩを、セレクタ１４はバスデータＢｕｓ１を選択する。
よって、データＫｅｙは＜Ｋ３＞に、データＤａｔａは＜Ｄ３＞に変化する。
以後、正常時と同じく演算が進行し、イネーブル信号Ｅが“Ｈ”の区間で、クロックＣＫが立ち上がると、イネーブル付フリップフロップ４１がバスデータＢｕｓ１を保持し、＜Ｄｎ＞を出力する。
【００５２】
なお、図６で図示していない入力データＫＩの生成回路は、セレクタ信号Ｓ１、セレクタ信号Ｓ２を監視しており、セレクタ信号Ｓ１が“Ｈ”、セレクタ信号Ｓ２が“Ｌ”のときに、クロックＣＫの立ち上りが発生した場合は、クロック立ち上りタイミング以前に出力していた入力データＫＩを、次のサイクルでも出力するものとする。
図９では、入力データＫＩにおいて、＜Ｋ３＞、＜Ｋ３＞と連続しているのが、これに相当する。
この結果、誤動作が発生した区間のクロックタイミングＴ０は無視されて、最終結果は正常な出力＜Ｄｎ＞となる。
つまり、誤動作による影響はない。
なお、誤動作が発生した区間のクロックタイミングＴ０は無視されるので、その分だけ最終結果が出力される時間は延びる。
【００５３】
以上のように、実施の形態２では、演算回路を２系統設けて、両者の演算回路のデータ出力が安定すなわち、一致することを確認し、演算ループが回るようにした。
さらに、演算回路のデータ出力が不安定な区間に異常なクロックを入力するフォールト攻撃に対しては、演算回路に入力されているデータを、異常クロック入力後の次のクロックサイクルでも維持するようにループを制御し、同一の演算を再度行うようにするとともに、演算回路のデータ出力が安定、すなわち、一致したことを確認して、次の演算に移るようにしたので、異常なクロックを使用するフォールト攻撃に対して耐性を有する効果がある。
さらに、実施の形態２では、正常時の演算時間が最も短く、異常時は演算時間が延びるのでフォールト攻撃に手間がかかるという効果もある。
【００５４】
また、演算回路を２系統設けて、両者の演算回路のデータ出力が安定すなわち、一致することを確認し、演算ループが回るようにしたことにより、演算回路の誤動作に対しても耐性を有する。
つまり、意図的で有る無しに関わらず外乱により演算回路が誤動作し、その区間にクロックが発生した場合は、演算回路に入力されているデータを、誤動作の発生した次のクロックサイクルでも維持するようにループを制御し、同一の演算を再度行うようにするとともに、演算回路のデータ出力が安定、すなわち、一致したことを確認して、次の演算に移るようにしたので、演算回路の誤動作に対して耐性を有する効果がある。
【００５５】
以上、実施の形態１及び実施の形態２では、
被演算データである入力データが入力され、演算結果が出力される演算部を中心とする演算装置であって、
演算部から、正常演算時に安定したデータが一致すると期待される複数の演算結果を出力し、その複数の演算結果が一致したことを確認し、次の演算を開始し、複数の演算結果が一致しない場合は、同一の演算を再度行う演算装置を説明した。
【００５６】
また、実施の形態１及び実施の形態２では、
被演算データは、
１）切替部入力データ、
２）切替部出力データ、
３）演算部出力データ
を切り替える切替部の出力データであって、
切替部は、演算部からの複数の演算結果を比較した結果に基づき、上記１）〜３）のデータを切り替え、
その複数の演算結果が一致した場合は、次の演算を開始し、
複数の演算結果が一致しない場合は、同一の演算を再度行う演算装置を説明した。
【００５７】
また、実施の形態１では、
演算部の複数の演算結果は、演算回路からの出力を遅延させることにより生成することを説明した。
【００５８】
また、実施の形態２では、
演算部の複数の演算結果は、演算回路を複数設けるにより生成することを説明した。
【符号の説明】
【００５９】
１０  切替部、１１  フリップフロップ、１２  フリップフロップ、１３  セレクタ、１４  セレクタ、２０  演算部、２１  演算回路、２２  遅延素子、３０  比較部、３１  ＮＸＯＲ素子、４０  出力部、４１  イネーブル付フリップフロップ。
【図１】
2013038488.tif 000003
【図２】
2013038488.tif 000004
【図３】
2013038488.tif 000005
【図４】
2013038488.tif 000006
【図５】
2013038488.tif 000007
【図６】
2013038488.tif 000008
【図７】
2013038488.tif 000009
【図８】
2013038488.tif 000010
【図９】
2013038488.tif 000011
【図１０】
2013038488.tif 000012
【図１１】
2013038488.tif 000013
【図１２】
2013038488.tif 000014
【図１３】
2013038488.tif 000015
【図１４】
2013038488.tif 000016