(57)【要約】【課題】異常動作の検出にかかる検算処理を行うことなく、故障利用攻撃に対する耐性を向上させることが可能な暗号演算装置を提供する。【解決手段】クロック信号に同期してデータの取り込みを行うレジスタに対し、有効符号データと無効符号データとを交互に入力するとともに、当該レジスタに入力されるデータ値の状態を監視し、有効符号データで安定したと判定する毎に当該有効符号データをレジスタが保持するようクロック信号を制御する。【選択図】        図２
2009027472.tif 000002
【特許請求の範囲】
【請求項１】
データ入力線から入力されるデータをクロック信号に同期して取り込み、当該取り込んだデータを有効符号データとして保持するレジスタと、
前記データ入力線に流れるデータ値を監視し、当該データ値が安定する毎にイネーブル信号とディスエーブル信号とを交互に出力する制御回路と、
前記イネーブル信号に応じて前記レジスタに保持された有効符号データを出力するとともに、前記ディスエーブル信号に応じて前記有効符号データ以外の無効符号データを出力する選択出力回路と、
前記選択出力回路から出力された有効符号データを暗号化又は復号化して前記データ入力線に出力するとともに、前記選択出力回路から出力された無効符号データを前記データ入力線に出力する組み合わせ回路と、
前記制御回路から出力されるイネーブル信号及びディスエーブル信号に応じて、前記クロック信号を制御するクロックフィルタと、
を備え、
前記制御回路は、前記データ入力線に有効符号データが入力されたと判定した場合に前記ディスエーブル信号を出力し、前記データ入力線に前記無効符号データが入力されたと判定した場合に前記イネーブル信号を出力することを特徴とする暗号演算装置。
【請求項２】
前記クロックフィルタは、外部から入力される外部クロック信号のアサート期間とネゲート期間とを前記イネーブル信号及びディスエーブル信号に応じて制御し、前記クロック信号とすることを特徴とする請求項１に記載の暗号演算装置。
【請求項３】
前記クロックフィルタは、前記外部クロック信号がアサート期間で且つ前記イネーブル信号が出力された場合にのみ前記クロック信号をアサート期間へと遷移させ、前記外部クロック信号がネゲート期間で且つ前記ディスエーブル信号が出力された場合にのみ前記クロック信号をネゲート期間へと遷移させることを特徴とする請求項２に記載の暗号演算装置。
【請求項４】
前記クロックフィルタは、入力される全てのデータ値が一致するまで出力するデータ値を変えない論理素子を有することを特徴とする請求項１〜３の何れか一項に記載の暗号演算装置。
【請求項５】
前記制御回路は、前記レジスタに前記有効符号データが保持されたと判定した場合に、前記ディスエーブル信号を出力することを特徴とする請求項１に記載の暗号演算装置。
【請求項６】
前記レジスタに入力されるデータ値の論理和を演算するＯＲ回路を更に備え、
前記制御回路は、前記ＯＲ回路の演算結果に基づいて、前記データ入力線に流れるデータ値を監視することを特徴とする請求項１又は５に記載の暗号演算装置。
【請求項７】
前記制御回路は、前記ＯＲ回路の演算結果と、前記クロックフィルタから出力されるクロック信号のデータ値とが一致する毎に、そのデータ値を反転したデータ値を前記イネーブル信号又はディスエーブル信号として出力することを特徴とする請求項６に記載の暗号演算装置。
【請求項８】
前記制御回路は、入力される全てのデータ値が一致するまで出力するデータ値を変えない論理素子を有することを特徴とする請求項６又は７に記載の暗号演算装置。
【請求項９】
前記レジスタから出力されるデータ値を論理演算し、この演算結果に基づいて当該レジスタに前記無効符号データが保持されたことを検出する検出回路を更に備えたことを特徴とする請求項１に記載の暗号演算装置。
【請求項１０】
前記データ入力線は、複数の信号線を有し、
前記複数の信号線のうち、対となる二つの信号線毎に１ビットのデータを表すよう符号化されたデータが流れることを特徴とする請求項１に記載の暗号演算装置。
【請求項１１】
前記組み合わせ回路は、ハザードフリー回路であることを特徴とする請求項１に記載の暗号演算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データの暗号化／復号化を行う暗号演算装置に関する。
【背景技術】
【０００２】
情報の暗号化や署名を行う技術として公開鍵暗号が用いられている。公開鍵暗号は、共通鍵暗号と比較して演算量が多いことが欠点であるが、鍵共有の問題がないため広く利用されており、ＲＳＡ暗号、Ｒａｂｉｎ暗号、ＥｌＧａｍａｌ暗号、楕円曲線暗号等様々な方法が提案されている。
【０００３】
公開鍵暗号では、暗号化するための鍵と復号化するための鍵とが異なっており、暗号化に用いる鍵は公開され、復号化に用いる鍵は秘密に保持される。例えば、ユーザＡがユーザＢに秘匿したメッセージを送りたい場合、ユーザＡはユーザＢの公開鍵を用いてメッセージを暗号化し、暗号化したメッセージをユーザＢに送信する。暗号化されたメッセージを受け取ったＢは、公開鍵に対応する自分の秘密鍵を用いて暗号化されたメッセージを復号化することができる。
【０００４】
また、ユーザＡが自分の秘密鍵を用いてメッセージに署名を付けてユーザＢに送ることで、メッセージを受け取ったユーザＢはユーザＡの公開鍵を使って付加された署名を検証することで、通信相手がユーザＡであることを認証することもできる。
【０００５】
ＲＳＡ暗号方式では、素数ｐ，ｑからｎ＝ｐｑを生成し、ｇｃｄ（ｅ，ｌｃｍ（ｐ−１，ｑ−１））＝１となるようなｅを定め、ｄ＝ｅ-1ｍｏｄ（ｌｃｍ（ｐ−１，ｑ−１））を計算し、公開鍵をｅ，ｎ、秘密鍵をｄとする。暗号化メッセージの復号や、メッセージの署名生成等の秘密情報を用いた処理を行う場合、べき乗剰余演算の高速化手法として中国人剰余定理（Chinese  Reminder  Theorem：ＣＲＴ）が一般に用いられる。以下、メッセージＭに対する署名Ｓ＝Ｍdｍｏｄｎの生成方法を例に、ＣＲＴについて説明する。
【０００６】
署名作成者は、ｎ＝ｐｑの素因数ｐ，ｑを知っているので、下記式（１）〜（３）の値を予め算出しておくことができる。
【０００７】
【数１】
2009027472.tif 000003
【０００８】
署名を施したいメッセージをＭとすると、下記式（４）〜（６）の関係式を順次計算することで署名Ｓは生成される。
【０００９】
【数２】
2009027472.tif 000004
【００１０】
上記式（４）〜（６）では、剰余演算の法としてｎの約半分の長さであるｐ，ｑを用いており、Ｓ＝Ｍdｍｏｄｎをそのまま計算するよりも約３倍の高速処理が可能である。
【００１１】
しかし、ＣＲＴを用いた実装方法では、故障利用解析と呼ばれる攻撃手法によって秘密情報が暴かれる可能性がある。故障利用解析とは、暗号処理を行っている間に、異常クロックや異常電圧等を意図的に発生させることで動作エラーを引き起こし、エラー結果から内部で用いている秘密情報を推定する攻撃方法である。例として、ＲＳＡ暗号のＣＲＴ利用実装に対する攻撃方法について説明する。
【００１２】
異常クロックや異常電圧等の発生により、上記した式（５）でのＳpの計算時に誤動作が生じ、間違った値Ｓp’（≠Ｓp）に変化したとすると、式（６）で導出されるＳも下記式（７）に示したように間違った値Ｓ’となる。
【００１３】
【数３】
2009027472.tif 000005
【００１４】
ここで、Ｓ’とＳとの差は、下記式（８）で表され、ｑの倍数となることが分かる。即ち、ｎ＝ｐｑであるので、Ｓ’−Ｓとｎの最大公約数を求めることで、ｑを得ることが可能となる（ｇｃｄ（Ｓ’−Ｓ，ｎ）＝ｑ）。
【００１５】
【数４】
2009027472.tif 000006
【００１６】
従来、上記攻撃手法に対する対策技術として種々の技術が提案されている。例えば、特許文献１には、Ｃ＝Ｓe’ｍｏｄｎ（ｅ’はｄｐの法ｐ−１における逆元）を計算することで、ＣがＭと等しいかを否かを検算し、検算結果が誤っているときには演算結果を出力しないことで、攻撃者が秘密情報を含む情報を入手できないようにする技術が開示されている。
【００１７】
【特許文献１】特開２００５−１６５２９０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１８】
しかしながら、特許文献１の技術では、故障利用攻撃に対抗するができるものの、検算処理に係るべき乗剰余演算が余分に必要となるため、その分時間を要するという問題がある。
【００１９】
本発明は上記に鑑みてなされたものであって、異常動作の検出にかかる検算処理を行うことなく、故障利用攻撃に対する耐性を向上させることが可能な暗号演算装置を提供することを目的とする。
【課題を解決するための手段】
【００２０】
上述した課題を解決し、目的を達成するために、本発明は、データ入力線から入力されるデータをクロック信号に同期して取り込み、当該取り込んだデータを有効符号データとして保持するレジスタと、前記データ入力線に流れるデータ値を監視し、当該データ値が安定する毎にイネーブル信号とディスエーブル信号とを交互に出力する制御回路と、前記イネーブル信号に応じて前記レジスタに保持された有効符号データを出力するとともに、前記ディスエーブル信号に応じて前記有効符号データ以外の無効符号データを出力する選択出力回路と、前記選択出力回路から出力された効符号データを暗号化又は復号化して前記データ入力線に出力するとともに、前記選択出力回路から出力された無効符号データを前記データ入力線に出力する組み合わせ回路と、前記制御回路から出力されるイネーブル信号及びディスエーブル信号に応じて、前記クロック信号を制御するクロックフィルタと、を備え、前記制御回路は、前記データ入力線に有効符号データが入力されたと判定した場合に前記ディスエーブル信号を出力し、前記データ入力線に前記無効符号データが入力されたと判定した場合に前記イネーブル信号を出力することを特徴とする。
【発明の効果】
【００２１】
本発明によれば、データ入力線を流れるデータに応じてクロック信号を制御することで、レジスタに入力されるデータが有効符号データである場合にのみ、レジスタに保持させることができる。これにより、クロック信号に対する故障利用解析攻撃を未然に防ぐことが可能となるため、異常動作の検出にかかる検算処理を行うことなく、故障利用攻撃に対する耐性を向上させることができる。
【発明を実施するための最良の形態】
【００２２】
以下に添付図面を参照して、暗号演算装置の最良な実施形態を詳細に説明する。
【００２３】
［第１の実施形態］
図１は、暗号演算装置１０の構成を概略的に示したブロック図である。また、図２は、暗号演算装置１０の回路構成を示した図である。以下、暗号演算装置１０の構成を図１、２を参照して説明する。
【００２４】
暗号演算装置１０は、制御回路１１と、クロックフィルタ１２と、データパス部１３と、記憶部１４とを備えている。
【００２５】
制御回路１１は、信号線Ｌ３２を流れるデータ値の状態を監視し、このデータ値が安定したと判定する毎に、クロックフィルタ１２及びデータパス部１３に出力するデータ値の状態を遷移させるステートマシン回路である。なお、ここで「安定」とは、信号線Ｌ３２に流れるデータが遷移途中でないことを意味し、より具体的には、信号線Ｌ３２に後述する有効符号データ又は無効符号データの導通が確認できたことを意味する。以下、制御回路１１について説明する。
【００２６】
図２に示したように、制御回路１１は、ＡＮＤ型の論理素子であるＡＮＤ素子１１１と、Ｃ素子１１２、１１３、１１４、１１５と、を備えている。ここでＣ素子１１２、１１３、１１４、１１５は、入力されるデータの値が全て同じ値になるまで出力が変動しないという特性を有した論理素子（ＭｕｌｌｅｒのＣ素子）である。なお、Ｃ素子については、例えば、当麻喜弘著、順序回路論、昭晃堂（１９７６）等に詳細な説明がある。
【００２７】
図３−１は、Ｃ素子の一例として、２入力１出力型のＣ素子を模式的に示した図である。また、図３−２は、図３−１で示したＣ素子の真理値表を示した図である。
【００２８】
図３−２に示したように、Ｃ素子の入力端に入力されるデータ（入力信号）１、２の値が同じ値となるときのみ、Ｃ素子から出力されるデータ（出力信号）がその値に変化するようになっている。なお、「＊」で示した箇所は、前回のデータ値から変化しないことを意味している。
【００２９】
図２に戻り、ＡＮＤ素子１１１の入力端は、信号線Ｌ１１を介して図示しない外部装置と、信号線Ｌ１２を介してＣ素子１１３の出力端とに接続されている。ここで、信号線Ｌ１１からは、図示しない外部装置から制御回路１１のリセットを指示するリセット信号（ＲＳＴ）が入力されるようになっている。また、ＡＮＤ素子１１１の出力端は、信号線Ｌ１３を介してＣ素子１１２の入力端と、Ｃ素子１１５の入力端と、に夫々接続されている。
【００３０】
Ｃ素子１１２の入力端は、信号線Ｌ１３を介してＡＮＤ素子１１１の出力端と、信号線Ｌ１４を介してＣ素子１１４の出力端とに接続されている。また、Ｃ素子１１２の出力端は、信号線Ｌ１５を介してＣ素子１１３の入力端と、Ｃ素子１１５の入力端と、に夫々接続されている。
【００３１】
Ｃ素子１１３の入力端は、信号線Ｌ１４を介してＣ素子１１４の出力端と、信号線Ｌ１５を介してＣ素子１１２の出力端とに接続されている。なお、Ｃ素子１１４、Ｃ素子１１２からのデータ値は反転された状態で入力される。また、Ｃ素子１１３の出力端は、信号線Ｌ１２を介してＡＮＤ素子１１１の入力端に接続されている。
【００３２】
Ｃ素子１１４の入力端は、信号線Ｌ１６を介してＯＲ素子１３２１の出力端と、信号線Ｌ１７を介してＯＲ素子１３２２の出力端と、信号線Ｌ２２を介してクロックフィルタ１２（Ｃ素子１２１）の出力端と、に接続されている。また、Ｃ素子１１４の出力端は、信号線Ｌ１４を介して、Ｃ素子１１２の入力端と、Ｃ素子１１３の入力端と、に夫々接続されている。
【００３３】
Ｃ素子１１５の入力端は、信号線Ｌ１３を介してＡＮＤ素子１１１の出力端と、信号線Ｌ１５を介してＣ素子１１２の出力端とに接続されている。なお、Ｃ素子１１２からのデータ値は反転された状態で入力される。また、Ｃ素子１１５の出力端は、信号線Ｌ１８を介してクロックフィルタ１２（Ｃ素子１２１）の入力端と、ＡＮＤ回路１３４（ＡＮＤ素子１３４１〜１３４４）の入力端と、に夫々接続されている。
【００３４】
制御回路１１は、上述した各論理回路による論理演算により、クロックフィルタ１２及びデータパス部１３から入力されるデータ値に応じて、イネーブル信号（１）とディスエーブル信号（０）とを交互に出力する。具体的には、リセット信号が「１」のとき、信号線Ｌ１６、１７を介してデータ値「０」、クロックフィルタ１２からＣＬＫ２信号のネゲート値「０」が入力されると、制御回路１１からはイネーブル信号「１」が出力される。また、リセット信号が「１」のとき、信号線Ｌ１６、１７を介してデータ値「１」、クロックフィルタ１２からＣＬＫ２信号のアサート値「１」が入力されると、制御回路１１からはディスエーブル信号「０」が出力される。
【００３５】
クロックフィルタ１２は、外部から入力されるＣＬＫ信号のアサート期間（１）とネゲート期間（０）とのタイミングを、制御回路１１（Ｃ素子１１５）から出力されるデータのデータ値に基づいて制御し、この結果をＣＬＫ２信号として出力する。なお、クロックフィルタ１２に入力されるＣＬＫ信号は、図示しない外部のクロック生成装置により生成されているものとする。以下、クロックフィルタ１２について説明する。
【００３６】
図２に示したように、クロックフィルタ１２は、上述したＣ素子１１２等と同様の特性を有したＣ素子１２１を備えている。このＣ素子１２１の入力端は、信号線Ｌ１８を介してＣ素子１１５の出力端と、ＣＬＫ信号が入力される信号線Ｌ２１と、が接続されている。また、Ｃ素子１２１の出力端は、信号線Ｌ２２を介してＣ素子１１４の入力端と、レジスタ１３３の制御入力端と、に夫々接続されている。
【００３７】
クロックフィルタ１２は、Ｃ素子１２１の論理演算により、制御回路１１からのデータ値が「１」で且つＣＬＫ信号が「１」の場合にのみ、出力するＣＬＫ２信号を「０」から「１」へと遷移させる。また同様に、クロックフィルタ１２は、制御回路１１からのデータ値が「０」で且つＣＬＫ信号が「０」の場合にのみ、出力するＣＬＫ２信号を「１」から「０」へと遷移させる。
【００３８】
データパス部１３は、外部から入力されたデータ（外部データ）に対して、記憶部１４に記憶された鍵情報（秘密鍵又は公開鍵）を用いて暗号化又は復号化を施し、その結果を外部へと出力する。なお、データパス部１３に入力される外部データは、平文であってもよいし所定の暗号化方式により暗号化された暗号化済データであってもよい。
【００３９】
図２に示したように、データパス部１３は、セレクタ１３１と、ＯＲ回路１３２と、レジスタ１３３と、ＡＮＤ回路１３４と、組み合わせ回路１３５と、を備えている。なお、データパス部１３内において各回路を接続する接続線は４本単位で接続されており、このうち対となる２本毎の信号線を用いて１ビット分のデータが表されるよう構成されている。
【００４０】
セレクタ１３１は、図示しない外部装置から信号線Ｌ３１を介して入力される外部データと、信号線Ｌ３５を介して入力される組み合わせ回路１３５の出力データと、の何れか一つを選択的に切り替え、信号線Ｌ３２に出力する。
【００４１】
具体的に、セレクタ１３１は、図示しない外部装置から入力される切り替え信号に応じて、出力対象となるデータを選択的に切り替え、何れか一方のデータを信号線Ｌ３２へと出力する。なお、本実施形態では、切り替え信号に応じた制御により、暗号化又は復号化対象となる外部データが、後述する有効符号データに符号化された状態で信号線Ｌ３２へと出力され、レジスタ１３３に予め保持（ラッチ）されているものとする。
【００４２】
ＯＲ回路１３２は、ＯＲ型の論理素子（ＯＲ素子１３２１、１３２２）を有している。ＯＲ素子１３２１、１３２２の入力端には、４本の信号線Ｌ３２のうち対となる２本の信号線が夫々接続されている。ＯＲ素子１３２１、１３２２の出力端は、信号線Ｌ１６、Ｌ１７を介してＣ素子１１４の入力端に夫々接続されている。
【００４３】
レジスタ１３３は、クロックフィルタ１２から入力されるＣＬＫ２信号の値がアサート（１）の時、信号線Ｌ３２を介して入力されるデータ（有効符号データ）を取り込み、当該データをラッチする一時記憶装置である。レジスタ１３３にラッチされたデータは、信号線Ｌ３３を介してＡＮＤ回路１３４に出力される。
【００４４】
ＡＮＤ回路１３４は、ＡＮＤ型の論理素子（ＡＮＤ素子１３４１〜１３４４）を有している。ＡＮＤ素子１３４１〜１３４４の各々の入力端には、信号線Ｌ３３を構成する４本の信号線が１本ずつ接続されているとともに、制御回路１１（Ｃ素子１１５）とを繋ぐ信号線Ｌ１８が夫々接続されている。なお、ＡＮＤ素子１３４１〜１３４４のうち、対となるＡＮＤ素子の各々に、１ビットを表す１対の信号線が１本ずつ接続されているものとする。
【００４５】
また、ＡＮＤ素子１３４１〜１３４４の各々の出力端は、信号線Ｌ３４１〜Ｌ３４４を介して組み合わせ回路１３５と接続されている。なお、ＡＮＤ素子１３４１〜１３４４から出力されるデータは、対となる２つのＡＮＤ素子で１ビットを表すよう構成されている。
【００４６】
ＡＮＤ素子１３４１〜１３４４から出力されるデータは、信号線Ｌ３４１〜Ｌ３４４を介して組み合わせ回路１３５へと夫々出力される。なお、ＡＮＤ素子１３４１〜１３４４のうち、対となる２つのＡＮＤ素子からの出力で１ビットを表すよう構成されているものとする。本実施形態では、ＡＮＤ回路１３４から出力されるデータのうち、その値が（０，０）となるもの、即ち、対となる２つのＡＮＤ素子からの出力が全て「０」となるものを、無効符号データとする。
【００４７】
ここで、ＡＮＤ素子１３４１〜１３４４から出力されるデータ値は、制御回路１１から信号線Ｌ１８を介して入力されるデータ値により決定される。つまり、制御回路１１から出力されるデータ値が「０」のとき、無効符号データが組み合わせ回路１３５に出力されることになる。なお、制御回路１１から出力されるデータ値が「１」であるときには、レジスタ１３３にラッチされたデータが有効符号データとして組み合わせ回路１３５に出力される。
【００４８】
組み合わせ回路１３５は、ＲＳＡ暗号方式等の所定の暗号化／復号化ロジックを実装したハザードフリーの組み合わせ回路である。ハザードフリーの組み合わせ回路とすることで、ＯＲ素子１３２１、１３２２の出力が「１」であるとき、信号線Ｌ３２が安定していることが保証される。ここで、図４、５を参照して、「ハザード」について説明する。
【００４９】
図４は、ハザードが生じる原理を説明するための回路図である。また、図５は、図４で示した各回路（ＡＮＤ素子Ｇ１、ＯＲ素子Ｇ２、Ｇ３）に入力される入力信号Ｉ１、Ｉ２、Ｉ３と、当該各回路から出力される出力信号ＯＧ１、ＯＧ２、ＯＧ３との関係を示したタイミングチャートである。
【００５０】
図４において、Ｇ１はＡＮＤ素子、Ｇ２はＯＲ素子、Ｇ３はＯＲ素子、Ｇ４はＮＯＴ素子を示している。外部から入力された入力信号Ｉ１〜Ｉ３は、Ｇ１、Ｇ２、Ｇ４を介し、Ｇ３から出力信号ＯＧ３として出力されるようになっている。
【００５１】
ここで、図５に示したように、入力信号Ｉ１が「０」、入力信号Ｉ３が「１」のとき、入力信号Ｉ２が「１」から「０」に変化する場合を考える。この場合、信号遅延や素子遅延が生じないとすると、ＯＲ素子Ｇ３の出力信号ＯＧ３は「１」のまま変化しない。しかしながら、実際には信号線や論理素子を信号が通過する際に遅延が生じるため、ＡＮＤ素子Ｇ１、ＯＲ素子Ｇ２の出力信号ＯＧ１、ＯＧ２が変化したときに、ＯＲ素子Ｇ３の出力信号ＯＧ３に影響する場合がある。
【００５２】
例えば、配線遅延はなく素子遅延だけが生じていると仮定すると、ＡＮＤ素子Ｇ１の出力信号ＯＧ１の変化はＮＯＴ素子Ｇ４があるため、ＯＲ素子Ｇ２の出力信号ＯＧ２の変化よりも若干遅れることになる。そのため、ＯＲ素子Ｇ３の出力信号ＯＧ３は、図５中矢印で示したように「１」→「０」→「１」と瞬間的に変化する。このように配線遅延や素子遅延のため瞬間的に生じる信号値の変化をハザードという。このようなハザードがある組み合わせ回路の場合、その出力が安定しているか否かを出力信号線の値のみで判断することは難しい。そのため、組み合わせ回路１３５は、このようなハザードが生じない回路、即ち、ハザードフリーな回路により構成する。このように組み合わせ回路１３５をハザードフリーな回路とすることで、ＯＲ素子１３２１，１３２２で組み合わせ回路１３５の出力が安定したことを監視することができる。なお、ハザードフリーな回路の構成方法については、例えば、当麻喜弘著、順序回路論、昭晃堂（１９７６）等に詳細が説明されている。
【００５３】
また、組み合わせ回路１３５は、記憶部１４に記憶された鍵情報（秘密鍵又は公開鍵）に基づき、ＡＮＤ回路１３４から入力されるレジスタ１３３にラッチされたデータ（有効符号データ）に対し、暗号化又は復号化のための所定の処理を施す。具体的には、外部データとして平文が入力された場合には、鍵情報（秘密鍵）を用いて暗号化を行う。また、外部データとして暗号化されたデータが入力された場合には、鍵情報（公開鍵）を用いて復号化を行う。
【００５４】
ここで、記憶部１４は、不揮発性の記憶媒体であって、鍵情報を予め記憶しているものとする。なお、復号化の際に用いる鍵情報は、暗号化済みデータの暗号化に用いられた秘密鍵に対応する公開鍵であるものとする。
【００５５】
また、組み合わせ回路１３５は、所定の演算処理を所定回数繰り返すことで暗号化／復合化を行うブロック暗号化／復合化方式のロジックを実装しているものとする。ブロック暗号化／復合化方式は、各回の演算処理を行った後の演算結果を、有効符号データとしてレジスタ１３３に一旦格納し、この演算結果を用いて次回の演算処理を行い、その演算結果をレジスタ１３３に上書き、つまり、演算結果を更新処理しながら暗号化／復合化が実行される。
【００５６】
また、組み合わせ回路１３５は、ＡＮＤ回路１３４から無効符号データ（０，０）が入力された場合には、当該無効符号データを信号線Ｌ３５を介してセレクタ１３１へとそのまま出力する。
【００５７】
なお、本実施形態では、無効符号データと、当該無効符号データ以外の有効符号データとが、制御回路１１の制御により組み合わせ回路１３５に交互に入力されるようになっている。これにより、制御回路１１は、信号線Ｌ３２に流れるデータが安定したこと、即ち、信号線Ｌ３２に無効符号データ又は有効符号データが流れたことを、ＯＲ回路１３２を介して判定することができる。以下、この理由について説明する。
【００５８】
まず、無効符号データ（０，０）に対する有効符号データを（０，１）と（１，０）とする。制御回路１１（Ｃ素子１１５）から出力されたデータが「０」のとき、ＡＮＤ素子１３４１〜１３４４からの出力は全て「０」となり、組み合わせ回路１３５には無効符号データが入力される。この結果、組み合わせ回路１３５からは、無効符号データがセレクタ１３１に出力される。このとき、ＯＲ素子１３２１、１３２２の出力は、ともに「０」となり、この値のデータがＣ素子１１４へと入力される。つまり、制御回路１１は、ＯＲ回路１３２から出力されるデータ値に基づいて、無効符号データが信号線Ｌ３２に入力されたことを確認することができる。
【００５９】
次に、制御回路１１から出力されるデータが「１」になることで、レジスタ１３３がラッチしているデータ（有効符号データ）がＡＮＤ回路１３４を介して、組み合わせ回路１３５に入力される。組み合わせ回路１３５は、信号線Ｌ３５を介して演算結果をセレクタ１３１に出力する。このとき、組み合わせ回路１３５は、ハザードフリーの回路であることから、出力されるデータは（０，０）から（０，１）又は（１，０）に一度だけ遷移する。つまり、レジスタ１３３に入力されるデータの値を監視するＯＲ回路１３２の出力値が「１」になったときには、組み合わせ回路１３５の演算結果がレジスタ１３３の入力として準備できたことを意味する。
【００６０】
このように、無効符号データを入力することで組み合わせ回路１３５の出力信号を初期化した後、有効符号データを入力するという一連の流れを繰り返すことで、レジスタ１３３に有効符号データが入力されたか否かを逐次確認することができる。
【００６１】
仮に無効符号データを入力しない場合、組み合わせ回路１３５は常に有効符号データを出力することになるため、レジスタ１３３に入力される信号の値が正しい値であるか、あるいは遷移途中の値であるかを判断することができない。そのため、暗号化／復号化の演算時に動作エラーが発生したとしても、それを認識することができない。これに対し、本実施形態では上記の構成としたことで、レジスタ１３３への入力データが安定状態にあることを判定することができるため、演算時における動作エラーの発生を未然に防止することができる。
【００６２】
また、暗号演算装置１０では、クロックフィルタ１２を用いることで、データパス部１３の信号線が安定しているときのみ外部からＣＬＫ信号が入力されるようになっている。即ち、誤動作の原因となるレジスタ１３３への入力信号が安定する前にＣＬＫ２信号が立ち上がり、本来の計算結果とは違う値をラッチしてしまうということを防ぐことができる。以下、このクロックフィルタ１２の動作について説明する。
【００６３】
暗号演算装置１０を正常に動作させるためには、レジスタ１３３への入力信号が安定しているときにＣＬＫ信号が入力される必要がある。そのため、本暗号演算装置１０では、クロックフィルタ１２のＣ素子１２１を用いることで、データパス部１３の信号線が安定しているときのみ、外部から入力されたＣＬＫ信号が入力されるよう制御する。
【００６４】
具体的には、制御回路１１からの出力信号はレジスタ１３３への入力データが有効符号データ又は無効符号データで安定した毎に遷移することから、これをＣ素子１２１への入力信号として利用する。制御回路１１の出力信号は、レジスタ１３３への入力信号が安定していないとき、外部からのＣＬＫ信号が「０」から「１」又は「１」から「０」に遷移したとしてもクロックフィルタ１２からの出力は遷移しない。つまり、クロックフィルタ１２から出力されるＣＬＫ２信号は、入力されたＣＬＫ信号の周波数に係わらずレジスタ１３３への入力データが安定したときのみ「０」又は「１」に遷移する。
【００６５】
そのため、ＣＬＫ信号が攻撃者に操作されたとしても制御回路１１及びクロックフィルタ１２によって、ＣＬＫ２信号はレジスタ１３３への入力データが安定したときのみ遷移するようになり、レジスタ１３３が誤動作を起こすような値をラッチしない回路構成とすることができる。
【００６６】
図６は、制御回路１１の各論理素子の動作を説明するためのタイミングチャートである。図６において、ＲＳＴはリセット信号、Ａ１はＡＮＤ素子１１１の出力信号、Ｃ１はＣ素子１１２の出力信号、Ｃ２はＣ素子１２１の出力信号、Ｃ３はＣ素子１１３の出力信号、Ｃ４はＣ素子１１４の出力信号、Ｃ５はＣ素子１１５の出力信号、Ｏ１はＯＲ回路１３２の出力信号を示している。また、ＣＬＫは外部からＣ素子１２１に入力されるＣＬＫ信号を示している。
【００６７】
まず、時刻ｔ１において暗号演算装置１０を初期化するリセット信号の値が「０」とする。レジスタ１３３への入力信号が無効符号データ（０，０）で安定した時刻ｔ２に、リセット信号が「１」になることでＡＮＤ素子１１１の出力データが「１」に遷移する。この遷移に伴い、時刻ｔ３にＣ素子１１５の出力データが「１」（イネーブル）となり、レジスタ１３３が保持するデータがＡＮＤ回路１３４を介して組み合わせ回路１３５に入力される。
【００６８】
続いて、ＯＲ回路１３２の出力信号が「１」となることで、制御回路１１はレジスタ１３３への入力信号が有効符号データで安定したことを検知する。さらに、時刻ｔ２からＣＬＫ信号が「１」であることで、クロックフィルタ１２にあるＣ素子１２１の出力データ、即ち、ＣＬＫ２信号が時刻ｔ３に立ち上がり「１」となる。時刻ｔ４において、Ｃ素子１１４の出力データが「１」になることで、Ｃ素子１１２の出力データは「１」に遷移する。これを受けてＣ素子１１３の出力データが「０」に遷移することで、ＡＮＤ素子１１１の出力データは「０」となり、時刻ｔ５でＣ素子１１５の出力データは「０」（ディスエーブル）へと遷移する。これにより、組み合わせ回路１３５への入力は全て無効符号データ（０，０）となる。
【００６９】
この結果、時刻ｔ６において、Ｃ素子１１４の出力データは「０」となり、続いてＣ素子１１２の出力データは「０」、Ｃ素子１１３の出力データは「１」となる。Ｃ素子１１３の出力データが「１」になることで、時刻ｔ７でＡＮＤ素子１１１の出力が「１」となり、Ｃ素子１１５の出力データが「１」（イネーブル）となる。以降同様の動作が繰り返され、無効符号データと有効符号データとが交互に組み合わせ回路１３５に流れることになる。
【００７０】
以上のように、本実施形態によれば、信号線Ｌ３２を流れるデータ値に応じてＣＬＫ信号を制御することで、レジスタ１３３に入力されるデータが有効符号データである場合にのみ、当該レジスタ１３３に保持させることができる。これにより、ＣＬＫ信号に対する故障利用解析攻撃を未然に防ぐことが可能となるため、異常動作の検出にかかる検算処理を行うことなく、故障利用攻撃に対する耐性を向上させることができる。
【００７１】
［第２の実施形態］
上述した第１の実施形態では、ＣＬＫ信号に対する故障利用解析攻撃を検出することが可能な暗号演算装置１０について説明した。本実施形態では、電源電圧が０Ｖや定格電圧以上の異常電圧が印加された場合の故障利用解析攻撃を検出することが可能な暗号演算装置２０について説明する。
【００７２】
図７は、暗号演算装置２０の回路構成を示した図である。なお、暗号演算装置２０の概略構成については図１と同様であるため図示を省略する。また、第１の実施形態と同様の部材についてはその説明を省略する。
【００７３】
電源電圧に外乱を加える故障利用解析攻撃としては、電源電圧を０Ｖにする方法と、定格電圧以上の電圧を印加するという方法とが考えられる。前者の場合、攻撃者は電源電圧を０Ｖとすることで、レジスタ１３３がラッチするデータを（０，０）、即ち無効符号データとし暗号演算装置１０の誤動作を誘発させる。また、後者の場合、攻撃者は電源電圧に定格以上の電圧を印加することで、レジスタ１３３がラッチするデータを（１，１）とし暗号演算装置１０の誤動作を誘発させる。即ち、これら（０，０）及び（１，１）は、本来ならばレジスタ１３３にラッチされることのない異常データである。
【００７４】
そのため、暗号演算装置２０では、信号線Ｌ３３を流れるデータ値を監視し、有効符号データ以外の異常データがレジスタ１３３にラッチされたことを検出することが可能な検出回路１３６を備えている。以下、検出回路１３６について説明する。
【００７５】
図７に示したように、本実施形態の暗号演算装置２０では、信号線Ｌ３３の夫々に信号線Ｌ３６が接続されており、当該信号線Ｌ３６を介してレジスタ１３３にラッチされたデータ値が検出回路１３６に入力されるようなっている。
【００７６】
検出回路１３６は、ＸＯＲ型の論理素子（ＸＯＲ素子１３６１、１３６２）を有している。ＸＯＲ素子１３６１、１３６２の入力端には、信号線Ｌ３３の対となる２本の信号線を流れるデータ値が夫々入力されている。また、異常データの検出は、ＸＯＲ素子１３６１、１３６２から夫々出力されるデータ値に基づいて行われる。
【００７７】
具体的には、有効符号データ（０，１）、（１，０）以外の異常データ（０，０）、（１，１）がレジスタ１３３にラッチされた場合、ＸＯＲ素子１３６１（又はＸＯＲ素子１３６２）からはデータ値「０」が出力されることになる。そのため、検出回路１３６から「０」が出力された場合には、データパス部１３（暗号演算装置２０）にエラーが発生していると判定することができる。
【００７８】
以上のように、本実施形態によれば、電源電圧に外乱を加える故障利用解析攻撃が行われた場合であっても、レジスタ１３３がラッチしたデータ値に基づいて異常データの検出を行うことができるため、異常動作の検出にかかる検算処理を行うことなく、故障利用攻撃に対する耐性を向上させることができる。
【００７９】
なお、本実施形態では、検出回路としてＸＯＲ素子を用いた態様を説明したが、これに限らず、他の態様としてもよい。例えば、ＮＯＲ素子を用いて異常データ（０，０）を検出し、ＮＡＮＤ素子を用いて異常データ（１，１）を検出する態様としてもよい。
【００８０】
以上、発明の実施の形態について説明したが、本発明はこれに限定されるものではなく、本発明の主旨を逸脱しない範囲での種々の変更、置換、追加などが可能である。
【図面の簡単な説明】
【００８１】
【図１】暗号演算装置の構成を示したブロック図である。
【図２】暗号演算装置の回路構成の一例を示した図である。
【図３−１】Ｃ素子を模式的に示した図である。
【図３−２】Ｃ素子の真理値表を示した図である。
【図４】ハザードが生じる原理を説明するための図である。
【図５】ハザードが生じる原理を説明するための図である。
【図６】制御回路の動作を示したタイミングチャートである。
【図７】暗号演算装置の回路構成の一例を示した図である。
【符号の説明】
【００８２】
１０  暗号演算装置
１１  制御回路
１１１  ＡＮＤ素子
１１２  Ｃ素子
１１３  Ｃ素子
１１４  Ｃ素子
１１５  Ｃ素子
１２  クロックフィルタ
１２１  Ｃ素子
１３  データパス部
１３１  セレクタ
１３２  ＯＲ回路
１３２１  ＯＲ素子
１３２２  ＯＲ素子
１３３  レジスタ
１３４  ＡＮＤ回路
１３４１  ＡＮＤ素子
１３４２  ＡＮＤ素子
１３４３  ＡＮＤ素子
１３４４  ＡＮＤ素子
１３５  組み合わせ回路
１４  記憶部
２０  暗号演算装置
１３６  検出回路
１３６１  ＸＯＲ素子
１３６２  ＸＯＲ素子
【図１】
2009027472.tif 000007
【図２】
2009027472.tif 000008
【図３−１】
2009027472.tif 000009
【図３−２】
2009027472.tif 000010
【図４】
2009027472.tif 000011
【図５】
2009027472.tif 000012
【図６】
2009027472.tif 000013
【図７】
2009027472.tif 000014