(57)【特許請求の範囲】
【請求項１】
バイナリ法を用いてＳ＝Ｃｅｍｏｄｎの演算を行う、べき乗剰余演算装置において、
複数ビットで表現される正の整数であるＣ、ｅ、及びｎを入力する入力手段と、
前記ｅを２進数表現ｅｉ（ｋ（ｅのビット長）＞ｉ≧０）としたときに、ｋ回の二乗剰余演算と、ｅｉ＝１となるビットの数と等しい回数の乗算剰余演算との繰り返し演算を行う演算手段と、
前記乗算剰余演算の演算回数をカウントするカウント手段と、
前記カウント手段によりカウントされた前記演算回数と、ｅｉ＝１となるビットの数に設定された設定回数とを比較し、当該比較結果に基づいて前記演算回数が前記設定回数でない場合に異常であると判定する判定手段と、
前記判定手段により異常であると判定された場合、エラー処理を行う処理手段と、
を備えることを特徴とする、べき乗剰余演算装置。
【請求項２】
前記Ｃは検証対象データ、前記ｅは公開鍵指数、前記ｎは公開鍵モジュラスであり、
前記判定手段により異常でないと判定された場合において前記繰り返し演算により算出された前記Ｓと、べき乗剰余演算による暗号化の対象となる平文データとが一致するか否かを判定することにより前記Ｃの検証を行う検証手段を更に備えることを特徴とする請求項１に記載のべき乗剰余演算装置。
【請求項３】
バイナリ法を用いてＳ＝Ｃｅｍｏｄｎの演算を行うＩＣカードにおいて、
複数ビットで表現される正の整数であるＣ、ｅ、及びｎを入力する入力手段と、
前記ｅを２進数表現ｅｉ（ｋ（ｅのビット長）＞ｉ≧０）としたときに、ｋ回の二乗剰余演算と、ｅｉ＝１となるビットの数と等しい回数の乗算剰余演算との繰り返し演算を行う演算手段と、
前記乗算剰余演算の演算回数をカウントするカウント手段と、
前記カウント手段によりカウントされた前記演算回数と、ｅｉ＝１となるビットの数に設定された設定回数とを比較し、当該比較結果に基づいて前記演算回数が前記設定回数でない場合に異常であると判定する判定手段と、
前記判定手段により異常であると判定された場合、エラー処理を行う処理手段と、
を備えることを特徴とするＩＣカード。
【請求項４】
バイナリ法を用いてＳ＝Ｃｅｍｏｄｎの演算を行うコンピュータにより実行されるべき乗剰余演算方法であって、
複数ビットで表現される正の整数であるＣ、ｅ、及びｎを入力するステップと、
前記ｅを２進数表現ｅｉ（ｋ（ｅのビット長）＞ｉ≧０）としたときに、ｋ回の二乗剰余演算と、ｅｉ＝１となるビットの数と等しい回数の乗算剰余演算との繰り返し演算を行うステップと、
前記乗算剰余演算の演算回数をカウントするステップと、
前記カウントされた前記演算回数と、ｅｉ＝１となるビットの数に設定された設定回数とを比較し、当該比較結果に基づいて前記演算回数が前記設定回数でない場合に異常であると判定する判定ステップと、
前記判定ステップにおいて異常であると判定された場合、エラー処理を行うステップと、
を含むことを特徴とする、べき乗剰余演算方法。
【請求項５】
バイナリ法を用いてＳ＝Ｃｅｍｏｄｎの演算を行うコンピュータに、
複数ビットで表現される正の整数であるＣ、ｅ、及びｎを入力するステップと、
前記ｅを２進数表現ｅｉ（ｋ（ｅのビット長）＞ｉ≧０）としたときに、ｋ回の二乗剰余演算と、ｅｉ＝１となるビットの数と等しい回数の乗算剰余演算との繰り返し演算を行うステップと、
前記乗算剰余演算の演算回数をカウントするステップと、
前記カウントされた前記演算回数と、ｅｉ＝１となるビットの数に設定された設定回数とを比較し、当該比較結果に基づいて前記演算回数が前記設定回数でない場合に異常であると判定する判定ステップと、
前記判定ステップにおいて異常であると判定された場合、エラー処理を行うステップと、
を実行させることを特徴とする、べき乗剰余演算プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＲＳＡ（Rivest Shamir Adleman scheme）暗号や、Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ鍵共有（Ｋｅｙ  Ａｇｒｅｅｍｅｎｔ）等の公開鍵暗号方式の実装に用いられるべき乗剰余演算装置等の技術分野に関する。
【背景技術】
【０００２】
従来から、ＩＣチップ等が搭載されるＩＣカードや携帯型情報端末においては、当該ＩＣチップに格納される個人情報等は、一般に、ＲＳＡ（Rivest Shamir Adleman scheme）暗号方式により暗号化されて不揮発性メモリに書き込まれ、暗号化された個人情報等が読み出される際には復号されて出力されるようになっている。ＲＳＡ暗号では、べき乗剰余演算によって、下記（１）式に基づき暗号化処理が行われ、下記（２）式に基づき復号処理が行われる。
【０００３】
Ｃ＝Ｍｄｍｏｄｎ ・・・（１）
Ｍ＝Ｃｅｍｏｄｎ ・・・（２）
【０００４】
ここで、Ｍ は暗号化の対象となる平文、Ｃは暗号化された平文（つまり、暗号文）、ｄ（べき値）は秘密鍵（プライベート鍵）指数、ｅ（べき値）は公開鍵指数、ｎは公開鍵モジュラスである。また、公開鍵モジュラスｎは、素数ｐとｑの積である。
【０００５】
上述した暗号化処理及び復号処理におけるべき乗剰余演算では、一般に、バイナリ法（繰り返し二乗法）が用いられる。このバイナリ法を用いた暗号化処理におけるべき乗剰余演算アルゴリズムを以下に示す。
Ｓ＝１
for（ｊ＝ｋ−１ to ０）
Ｓ＝Ｓ２ｍｏｄｎ
if（ｄｉ＝１） then
Ｓ＝Ｓ＊Ｍｍｏｄｎ
end if
end for
【０００６】
ここで、ｋはｄのビット長であり、ｄｉはｄの２進数表現である。暗号化処理におけるべき乗剰余演算アルゴリズムでは、Ｓの初期値を“１”とする二乗剰余演算（Ｓ２ｍｏｄｎ）と、ｄｉ＝１となるビットの数と等しい回数の乗算剰余演算（Ｓ＊Ｍｍｏｄｎ）との繰返し演算が行われる。
【０００７】
また、バイナリ法を用いた復号処理におけるべき乗剰余演算アルゴリズムを以下に示す。
Ｓ＝１
for（ｊ＝ｋ−１ to ０）
Ｓ＝Ｓ２ｍｏｄｎ
if（ｅｉ＝１） then
Ｓ＝Ｓ＊Ｃｍｏｄｎ
end if
end for
【０００８】
ここで、ｋはｅのビット長であり、ｅｉはｅの２進数表現である。復号処理におけるべき乗剰余演算アルゴリズムでは、Ｓの初期値を“１”とする二乗剰余演算（Ｓ２ｍｏｄｎ）と、ｅｉ＝１となるビットの数と等しい回数の乗算剰余演算（Ｓ＊Ｃｍｏｄｎ）との繰返し演算が行われる。
【０００９】
ところで、上述したように、べき乗剰余演算においてバイナリ法を用いる場合、ｄｉやｅｉが１であるか０であるかによって演算方法が異なる（つまり、乗算剰余演算が行われるか否かが異なる）。このため、べき乗剰余演算中の消費電力の変動を観測して秘密鍵の導出を試みるＳＰＡ（Simple Power Analysis）やＤＰＡ（Differential Power Analysis）等のサイドチャネル攻撃がなされるという問題があった。また、消費電力の代わりに電磁界の変動を観測するＳＥＭＡ（Simple ElectroMagnetic Analysis）やＤＥＭＡ（Differential ElectroMagnetic Analysis）と呼ばれる攻撃手法も知られている。このようなサイドチャネル攻撃に対する対策として、例えば秘密鍵を用いた演算中のデータを乱数などでマスク（ブラインディング）することによって演算中のデータと秘密鍵を無相関にする対策が知られている。例えば、特許文献１には、秘密鍵指数を、乱数を用いてブラインディングする技術が開示されている。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特許5412274号
【非特許文献１】Shay Gueron,  Jean-Pierre Seifert,"Is It Wise to Publish Your Public RSA Keys?",Fault Diagnosis and Tolerance in Cryptography (FDTC 2006), Lecture Notes in Computer Science Volume 4236, 2006, pp.1-12
【発明の概要】
【発明が解決しようとする課題】
【００１１】
ところで、非特許文献１では、Dr. Jean-Pierre Seifertらにより、署名検証時の「べき乗剰余演算」のタイミングを狙って故障利用攻撃を実行し、ニセの署名であっても署名検証に成功させる攻撃“Bypass Fault Attack”が報告されている。例えば、秘密鍵ｄを知らない攻撃者は、署名検証に成功できる正しい署名値（暗号文）Ｃを作れないため、元の平文Ｍを署名検証ステップの入力として与える。そして、当該攻撃者は、上述した乗算剰余演算を１回だけ行われたタイミングで攻撃することで、指数ｅをｅ＝１とさせた演算結果（すなわち、Ｍの１乗なのでＭのまま）を、署名検証判断ルーチンに与え、署名検証をすりぬける。この手法により、攻撃者は、例えばＣＡ局の正しい署名が付いていないニセの公開鍵証明書であっても、署名検証を成功させて受け容れさせることができる。従来、このような“Bypass Fault Attack”に対して有効な対策は知られていなかった。
【００１２】
そこで、本発明は、上記点等に鑑みてなされたものであり、“Bypass Fault Attack”等の攻撃に対して有効に対応することが可能な、べき乗剰余演算装置、ＩＣカード、べき乗剰余演算方法、及び、べき乗剰余演算プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、請求項１に記載の発明は、バイナリ法を用いてＳ＝Ｃｅｍｏｄｎの演算を行う、べき乗剰余演算装置において、複数ビットで表現される正の整数であるＣ、ｅ、及びｎを入力する入力手段と、前記ｅを２進数表現ｅｉ（ｋ（ｅのビット長）＞ｉ≧０）としたときに、ｋ回の二乗剰余演算と、ｅｉ＝１となるビットの数と等しい回数の乗算剰余演算との繰り返し演算を行う演算手段と、前記乗算剰余演算の演算回数をカウントするカウント手段と、前記カウント手段によりカウントされた前記演算回数と、ｅｉ＝１となるビットの数に設定された設定回数とを比較し、当該比較結果に基づいて前記演算回数が前記設定回数でない場合に異常であると判定する判定手段と、前記判定手段により異常であると判定された場合、エラー処理を行う処理手段と、を備えることを特徴とする。
【００１６】
請求項２に記載の発明は、請求項１に記載のべき乗剰余演算装置において、前記Ｃは検証対象データ、前記ｅは公開鍵指数、前記ｎは公開鍵モジュラスであり、前記判定手段により異常でないと判定された場合において前記繰り返し演算により算出された前記Ｓと、べき乗剰余演算による暗号化の対象となる平文データとが一致するか否かを判定することにより前記Ｃの検証を行う検証手段を更に備えることを特徴とする。
【００１７】
請求項３に記載の発明は、バイナリ法を用いてＳ＝Ｃｅｍｏｄｎの演算を行うＩＣカードにおいて、複数ビットで表現される正の整数であるＣ、ｅ、及びｎを入力する入力手段と、前記ｅを２進数表現ｅｉ（ｋ（ｅのビット長）＞ｉ≧０）としたときに、ｋ回の二乗剰余演算と、ｅｉ＝１となるビットの数と等しい回数の乗算剰余演算との繰り返し演算を行う演算手段と、前記乗算剰余演算の演算回数をカウントするカウント手段と、前記カウント手段によりカウントされた前記演算回数と、ｅｉ＝１となるビットの数に設定された設定回数とを比較し、当該比較結果に基づいて前記演算回数が前記設定回数でない場合に異常であると判定する判定手段と、前記判定手段により異常であると判定された場合、エラー処理を行う処理手段と、を備えることを特徴とする。
【００１８】
請求項４に記載の発明は、バイナリ法を用いてＳ＝Ｃｅｍｏｄｎの演算を行うコンピュータにより実行されるべき乗剰余演算方法であって、複数ビットで表現される正の整数であるＣ、ｅ、及びｎを入力するステップと、前記ｅを２進数表現ｅｉ（ｋ（ｅのビット長）＞ｉ≧０）としたときに、ｋ回の二乗剰余演算と、ｅｉ＝１となるビットの数と等しい回数の乗算剰余演算との繰り返し演算を行うステップと、前記乗算剰余演算の演算回数をカウントするステップと、前記カウントされた前記演算回数と、ｅｉ＝１となるビットの数に設定された設定回数とを比較し、当該比較結果に基づいて前記演算回数が前記設定回数でない場合に異常であると判定する判定ステップと、前記判定ステップにおいて異常であると判定された場合、エラー処理を行うステップと、を含むことを特徴とする。
【００１９】
請求項５記載の発明は、バイナリ法を用いてＳ＝Ｃｅｍｏｄｎの演算を行うコンピュータに、複数ビットで表現される正の整数であるＣ、ｅ、及びｎを入力するステップと、前記ｅを２進数表現ｅｉ（ｋ（ｅのビット長）＞ｉ≧０）としたときに、ｋ回の二乗剰余演算と、ｅｉ＝１となるビットの数と等しい回数の乗算剰余演算との繰り返し演算を行うステップと、前記乗算剰余演算の演算回数をカウントするステップと、前記カウントされた前記演算回数と、ｅｉ＝１となるビットの数に設定された設定回数とを比較し、当該比較結果に基づいて前記演算回数が前記設定回数でない場合に異常であると判定する判定ステップと、前記判定ステップにおいて異常であると判定された場合、エラー処理を行うステップと、を実行させることを特徴とする。
【発明の効果】
【００２０】
本発明によれば、前記二乗剰余演算または前記乗算剰余演算の演算回数をカウントし、カウントされた前記演算回数と予め設定された設定回数とを比較し、当該比較結果に基づいて異常であるか否かを判定し、異常であると判定された場合、エラー処理を行うので、“Bypass Fault Attack”等の攻撃等による異常を迅速に検知して有効に対応することができる。
【図面の簡単な説明】
【００２１】
【図１】ＩＣカード１の概要構成例を示す図である。
【図２】コプロセッサ１１により実行される復号処理の一例を示すフローチャートである。
【図３】コプロセッサ１１により実行される復号処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００２２】
以下、図面を参照して本発明の実施形態について詳細に説明する。なお、以下に説明する実施形態は、ＩＣチップに対して本発明を適用した場合の実施の形態である。
【００２３】
先ず、図１を参照して、ＩＣカード１の概要構成及び機能について説明する。図１は、ＩＣカード１の概要構成例を示す図である。なお、ＩＣカード１は、キャッシュカード、クレジットカード、社員カード等として使用される。或いは、ＩＣカード１は、スマートフォンや携帯電話機等の通信機器に組み込まれる。なお、ＩＣチップ１ａは、通信機器の回路基板上に直接組み込んで構成するようにしてもよい。
【００２４】
図１に示すように、ＩＣカード１に搭載されるＩＣチップ１ａは、ＣＰＵ（Central Processing Unit）１０、コプロセッサ１１、ＲＯＭ（Read Only Memory）１２、ＲＡＭ（Random Access Memory）１３、不揮発性メモリ１４、及びＩ／Ｏ回路１５を備えて構成される。コプロセッサ１１は、本発明のべき乗剰余演算装置及びコンピュータの一例であり、主に、ＣＰＵ１０の補助する検証処理を行うものである。また、本実施形態において、コプロセッサ１１は、検証装置の一例である。不揮発性メモリ１４としては、例えば、フラッシュメモリが適用される。或いは「Electrically Erasable Programmable Read-Only Memory」が適用されてもよい。Ｉ／Ｏ回路１５は、外部端末２とのインターフェイスを担う。接触式のＩＣチップ１ａの場合、Ｉ／Ｏ回路１５には、例えば、Ｃ１〜Ｃ８の８個の端子が備えられている。例えば、Ｃ１端子は電源端子、Ｃ２端子はリセット端子、Ｃ３端子はクロック端子、Ｃ５端子はグランド端子、Ｃ７端子は外部端末２との間で通信を行うための端子である。一方、非接触式のＩＣチップ１ａの場合、Ｉ／Ｏ回路１５には、例えば、アンテナ、及び変復調回路が備えられている。なお、外部端末２の例としては、ＩＣカード発行機、ＡＴＭ、改札機、認証用ゲート等が挙げられる。或いは、ＩＣチップ１ａが通信機器に組み込まれる場合、外部端末２には通信機器の機能を担う制御部が該当する。
【００２５】
ＲＯＭ１２または不揮発性メモリ１４には、ＣＰＵ１０、及びコプロセッサ１１に実行させるプログラム、及び各種データが記憶されている。不揮発性メモリ１４に記憶されるプログラムには、ＣＰＵ１０に実行させるコマンド処理を規定するコマンド処理プログラムが含まれる。また、不揮発性メモリ１４に記憶されるプログラムには、コプロセッサ１１に実行させる暗号化処理を規定する暗号化処理プログラム、及びコプロセッサ１１に実行させる復号処理を規定する復号処理プログラム（本発明のべき乗剰余演算プログラムを含む）が含まれる。また、不揮発性メモリ１４には、セキュアな記憶領域が設けられており、この記憶領域には、暗号化処理で用いられる秘密鍵ｄ、復号処理で用いられる公開鍵（ａ，ｎ）等が記憶される。
【００２６】
ＣＰＵ１０は、外部端末２から送信されたコマンドを受信すると、コマンド処理プログラムに従って当該コマンドに応じたコマンド処理を実行する。特に、コマンド処理が、データの暗号化、またはデータの復号を伴う場合、ＣＰＵ１０は、暗号化処理、または復号処理をコプロセッサ１１に実行させる。コプロセッサ１１は、本発明における入力手段、演算手段、カウント手段、判定手段、処理手段、検証手段の一例である。コプロセッサ１１は、例えば、べき乗剰余演算部、カウンタ、検証部、及び複数のレジスタ等を備え、暗号化処理プログラム、または復号処理プログラムに従って、暗号化処理、または復号処理を実行する。この復号処理において、コプロセッサ１１は、バイナリ法を用いたＳ＝Ｃｅｍｏｄｎの演算を行う。なお、ＣＰＵ１０が、コプロセッサ１１の代わりに、本発明におけるカウント手段、判定手段、処理手段、及び検証手段として機能してもよい。この場合、ＣＰＵ１０は、例えば、カウンタ、及び検証部を備える。
【００２７】
具体的には、コプロセッサ１１は、複数ビットで表現される正の整数であるＣ（検証対象データ）、ｅ（公開鍵指数）、及びｎ（公開鍵モジュラス）を、ＲＡＭ１３または不揮発性メモリ１４から入力する（読み込む）。コプロセッサ１１は、入力したｅを２進数表現ｅｉとしたとき、ｋ回の二乗剰余演算（Ｓ２ｍｏｄｎ）と、ｅｉ＝１となるビットの数と等しい回数の乗算剰余演算（Ｓ＊Ｃｍｏｄｎ）との繰り返し演算を行う。ここで、ｋはｅのビット長であり、ｅｉはｅの２進数表現である（ｋ＞ｉ≧０）。また、２進数表現したｅの各ビットをE[j]と表記すると、ｅは、下記（３）式で表すことができる。
【００２８】
ｅ＝2k-1E[k-1] + 2k-2E[k-2] + ・・・ + 22E[2] + 2E[1] + E[0]・・・（３）
【００２９】
繰り返し演算は、乗算と除算（ｍｏｄ算）から構成される。乗算は、初期値を１とするＳの値に対してＳ＊Ｓ、またはＳ＊Ｍを行う部分である。除算は、それぞれの乗算で得られた値に対してｍｏｄｎ（ｎで割ったときの余りを求める演算）を行う部分である。繰返し演算では、乗算と除算を１対の演算として、ｅのビット値に従って行なわれる。すなわち、ｅの最上位ビットから最下位ビットまでの各ビットの内容によって乗算と除算が行なわれる。
【００３０】
コプロセッサ１１、またはＣＰＵ１０は、上記繰り返し演算において、二乗剰余演算または乗算剰余演算の演算回数をカウントする。そして、コプロセッサ１１は、カウントされた上記演算回数と予め設定された設定回数とを比較し、当該比較結果に基づいて異常であるか否かを判定し、異常であると判定した場合、エラー処理を行う。また、コプロセッサ１１は、異常でないと判定した場合において上記繰り返し演算により算出されたＳと、べき乗剰余演算による暗号化の対象となるＭ（平文データ）とが一致するか否かを判定することによりＣの検証を行う。
【００３１】
次に、図２及び図３を参照して、コプロセッサ１１により実行される復号処理の具体例を説明する。図２及び図３は、コプロセッサ１１により実行される復号処理の一例を示すフローチャートである。なお、以下の説明では、コプロセッサ１１が、二乗剰余演算または乗算剰余演算の演算回数をカウントし、カウントされた演算回数と予め設定された設定回数とを比較し、当該比較結果に基づいて異常であるか否かを判定し、異常であると判定した場合、エラー処理を行うものとしているが、このような一連の処理は、ＣＰＵ１０により行われるように構成してもよい。
【００３２】
（実施例１）
先ず、図２を参照して、コプロセッサ１１により実行される復号処理を説明する。図２に示す復号処理は、繰り返し演算において乗算剰余演算の演算回数が“１”である場合に異常であると判定する例である。  
【００３３】
図２に示す処理は、例えば、ＣＰＵ１０から、署名検証指令があった場合に開始される。なお、図２に示す処理の前提として、上記設定回数が“１”に設定される。図２に示す処理が開始されると、コプロセッサ１１は、Ｍ（平文データ）、Ｃ（検証対象データ）、ｅ（公開鍵指数）、及びｎ（公開鍵モジュラス）を、例えば、ＲＡＭ１３または不揮発性メモリ１４から入力し、ＭをＭレジスタに格納し、ＣをＣレジスタに格納し、ｅをＥレジスタに格納し、ｎをＮレジスタに格納する。なお、Ｅレジスタには、ｅを２進数で表現した各ビットの値が格納される。そして、コプロセッサ１１は、ｋを“ｅのビット長”とし、Ｓを“１”（初期値）とし、ｃｔを“０”とする（ステップＳ１）。例えば、Ｋレジスタに“ｅのビット長”が格納され、Ｓレジスタに“１”が格納され、ＣＴレジスタに“０”が格納される。
【００３４】
次いで、コプロセッサ１１は、ビットの位置（最上位から最下位まで）を示すｊを“ｋ−１”とする（ステップＳ２）。例えば、Ｊレジスタに“ｋ−１”が格納される。次いで、コプロセッサ１１は、べき乗剰余演算部により、二乗剰余演算（Ｓ２ｍｏｄｎ）を行ってＳを算出する（ステップＳ３）。こうして算出されたＳによりＳレジスタに格納されている値が更新される。次いで、コプロセッサ１１は、Ｅレジスタを参照して、ｅｊが“１”であるか否かを判定する（ステップＳ４）。コプロセッサ１１は、ｅｊが“１”であると判定した場合（ステップＳ４：ＹＥＳ）、ステップＳ５へ進む。一方、コプロセッサ１１は、ｅｊが“１”でない（つまり、ｅｊが“０”である）と判定した場合（ステップＳ４：ＮＯ）、ステップＳ７へ進む。
【００３５】
ステップＳ５では、コプロセッサ１１は、べき乗剰余演算部により、乗算剰余演算（Ｓ＊Ｃｍｏｄｎ）を行ってＳを算出する。こうして算出されたＳによりＳレジスタに格納されている値が更新される。次いで、コプロセッサ１１は、カウンタにより、ｃｔの値（乗算剰余演算のカウント値）に“１”を加算（１カウントアップ）する（ステップＳ６）。これにより、ＣＴレジスタに格納されている値が更新される。
【００３６】
ステップＳ７では、コプロセッサ１１は、ｊの値から“１”を減算する。これにより、Ｊレジスタに格納されている値が更新される。次いで、コプロセッサ１１は、Ｊレジスタを参照して、ｊの値が“０”以上であるか否かを判定する（ステップＳ８）。コプロセッサ１１は、ｊの値が“０”以上であると判定した場合（ステップＳ８：ＹＥＳ）、ステップＳ３に戻り、ステップＳ３以降の処理を繰り返す。一方、コプロセッサ１１は、ｊの値が“０”以上でない（つまり、繰り返し演算が、ｋ回行われた）と判定した場合（ステップＳ８：ＮＯ）、ステップＳ９へ進む。
【００３７】
ステップＳ９では、コプロセッサ１１は、ＣＴレジスタを参照して、ｃｔが“１”（設定回数）であるか（つまり、カウントされた乗算剰余演算の演算回数と、設定回数とを比較し、当該比較結果に基づいて異常であるか）否かを判定する。つまり、図２の例では、乗算剰余演算の演算回数が“１”であるか否かが判定される。コプロセッサ１１は、ｃｔが“１”であると判定した場合（ステップＳ９：ＹＥＳ）、異常があったと判断（異常検知）して、エラー処理を行う（ステップＳ１０）。つまり、乗算剰余演算の演算回数が“１”である場合、乗算剰余演算が１回だけ行われたタイミングで攻撃されたことが想定されるため、エラー処理を行うのである。このエラー処理では、コプロセッサ１１は、例えばＣＰＵ１０へ警報出力（例えば、攻撃等の異常があったことを示すメッセージを出力）して、図２に示す処理を終了する（つまり、警告終了でリターン）。或いは、エラー処理では、コプロセッサ１１は、動作を停止してもよい。
【００３８】
ＣＰＵ１０は、コプロセッサ１１からの警報出力を入力した場合、ＩＣチップ１ａの動作を停止、またはＩＣチップ１ａにおいて起動中の特定のプログラムの動作を停止する。或いは、この場合、ＣＰＵ１０は、外部端末２へエラー応答を送信する。エラー応答は、ＩＣチップ１ａ内でエラーが発生したことを示す。なお、ＣＰＵ１０は、ＩＣチップ１ａまたは上記特定のプログラムの動作を停止すると共に、外部端末２へエラー応答を送信してもよい。
【００３９】
一方、ステップＳ９において、コプロセッサ１１は、ｃｔが“１”でないと判定した場合（ステップＳ９：ＮＯ）、繰り返し演算により算出されたＳ（Ｓレジスタに最終的に格納されている値）と、べき乗剰余演算による暗号化の対象となるＭ（Ｍレジスタに格納されている値）とが一致するか否かを検証部により判定する（ステップＳ１１）。これにより、入力されたＣの検証が行われる。コプロセッサ１１は、ＳとＭとが一致すると判定した場合（ステップＳ１１：ＹＥＳ）、検証成功を示すメッセージをＣＰＵ１０へ出力し（ステップＳ１２）、図２に示す処理を終了する。一方、コプロセッサ１１は、ＳとＭとが一致しないと判定した場合（ステップＳ１１：ＮＯ）、検証失敗を示すメッセージをＣＰＵ１０へ出力し（ステップＳ１３）、図２に示す処理を終了する。ＣＰＵ１０は、コプロセッサ１１からの検証成功、または検証失敗に応じた処理を行うことになる。なお、ステップＳ１１の処理は、ＣＰＵ１０が行うように構成してもよい。この場合、コプロセッサ１１は、ｃｔが“１”でないと判定した場合（ステップＳ９：ＮＯ）、繰り返し演算により算出されたＳ（Ｓレジスタに最終的に格納されている値）をＣＰＵ１０へ出力することになる。
【００４０】
以上説明したように、上記実施例１によれば、例えば、検証対象データ（本来、暗号文Ｃ）としてＭが入力され、上記乗算剰余演算が１回だけ行われたタイミングで攻撃された場合であっても、この攻撃による異常を検知して、エラー処理を行うことができる。よって、“Bypass Fault Attack”等の攻撃等による異常を迅速に検知して有効に対応することができる。
【００４１】
なお、ｃｔの値に“１”を加算する処理は、ステップＳ５の直後ではなく、例えば、ステップＳ３とステップＳ４の間で行われるように構成してもよい。この場合、二乗剰余演算の演算回数がカウントされることになる。この場合も、上記設定回数が“１”であってもよいが、正常な繰り返し演算（二乗剰余演算）はｋ回行われる。そのため、上記設定回数をｋとし、ステップＳ９では、コプロセッサ１１は、ｃｔがｋ未満であるか否かを判定し、ｃｔがｋ未満ある場合、エラー処理を行うように構成してもよい。この構成により、べき乗剰余演算においてバイナリ法を用いる場合の反復演算が実行された回数を把握することができるので、演算中に攻撃を受けた可能性を検知することができる。
【００４２】
（実施例２）
次に、図３を参照して、コプロセッサ１１により実行される復号処理を説明する。図２に示す復号処理は、繰り返し演算において乗算剰余演算の演算回数が“ｅｊ＝１となるビットの数”でない場合に異常であると判定する例である。なお、図３に示すステップＳ２９以外の処理は、図２に示す処理と同様であるので、重複する説明を省略する。ステップＳ２９では、コプロセッサ１１は、ｃｔが“ｅｊ＝１となるビットの数”であるか否かを判定する。そして、コプロセッサ１１は、ｃｔが“ｅｊ＝１となるビットの数”であると判定した場合（ステップＳ２９：ＹＥＳ）、ステップＳ３１へ進んで、検証を行う。一方、コプロセッサ１１は、ｃｔが“ｅｊ＝１となるビットの数”でないと判定した場合（ステップＳ２９：ＮＯ）、ステップＳ３０へ進んで、エラー処理を行う。例えば、公開鍵指数ｅ＝６５５３７である場合、この２進数表現は、“１０００００００００００００００１”となり、１７ビットのうち、２ビットに“１”が立っているので、正常な繰り返し演算（二乗剰余演算）が行われた場合、ステップＳ２９において、ｃｔの値は“２”となっているはずである。このため、もし、ｃｔが“２”でなければ、コプロセッサ１１は、異常があったと判断（異常検知）して、エラー処理を行う。
【００４３】
以上説明したように、上記実施例２によれば、“Bypass Fault Attack”等の攻撃を、より精度良く検知して、エラー処理を行うことができる。よって、“Bypass Fault Attack”等の攻撃等による異常を精度良く検知して有効に対応することができる。更に、上記実施例２によれば、“Bypass Fault Attack”に限らず、現時点で未知の攻撃によって、バイナリ法の反復演算が攪乱された場合でも、異常を検出することができる。
【００４４】
なお、上記実施形態においては、ＩＣチップに対して本発明を適用した場合の例であるが、本発明は、ＩＣチップ以外の組込み型のマイクロプロセッサ等に対して適用可能である。また、上記実施形態においては、本発明の各手段がソフトウェアにより構成する場合の例を説明したが、本発明の各手段はハードウェアにより構成されてもよい。
【符号の説明】
【００４５】
１  ＩＣカード
１ａ  ＩＣチップ
１０  ＣＰＵ
１１  コプロセッサ
１２  ＲＯＭ
１３  ＲＡＭ
１４  不揮発性メモリ
１５  Ｉ／Ｏ回路
【図１】
0006354376.tif 000002
【図２】
0006354376.tif 000003
【図３】
0006354376.tif 000004