(57)【要約】【課題】サイドチャネル攻撃に対して高い耐性を有する暗号装置を提供する。【解決手段】暗号装置は、秘密データを記憶しているメモリと暗号処理部とを有する。暗号処理部は、第１および第２処理データを生成する演算器と、秘密データの値ｄ［ｊ］を設定データの値Ｄｓと比較する比較器４１と、当該比較結果に対応した値の判定子ｃを生成する判定器４２と、第１判定子ｃにビット毎の論理否定演算を施して判定子＜ｃ＞を生成する論理否定演算器４３と、第１処理データと判定子ｃとにビット毎の論理積演算を施して第１演算データを生成する論理積演算器４４と、第２処理データと判定子＜ｃ＞とにビット毎の論理積演算を施して第２演算データを生成する論理積演算器４５と、第１演算データと第２演算データとにビット毎の論理和演算を施す論理和演算器４６とを含む。【選択図】図４
2008141385.tif 000002
【特許請求の範囲】
【請求項１】
平文データ系列の暗号化あるいは暗号文データ系列の復号化を実行する暗号方法であって、
（ａ）メモリから秘密データを読み出すステップと、
（ｂ）当該読み出された秘密データを用いて前記平文データ系列の暗号化または前記暗号文データ系列の復号化を実行するステップと、を有し、
前記ステップ（ｂ）は、
（ｃ）第１処理データおよび第２処理データを生成するステップと、
（ｄ）前記秘密データの値を設定データの値と比較するステップと、
（ｅ）当該比較結果に対応した０または１のいずれか一方の値のみのビット列からなる第１判定子を生成するとともに、前記第１判定子にビット毎の論理否定演算を施して第２判定子を生成するステップと、
（ｆ）前記第１処理データと前記第１判定子とにビット毎の論理積演算を施して第１演算データを生成するとともに、前記第２処理データと前記第２判定子とにビット毎の論理積演算を施して第２演算データを生成するステップと、
（ｇ）前記第１演算データと前記第２演算データとにビット毎の論理和演算を施して出力データを生成するステップと、
を含み、前記出力データを用いて前記平文データ系列の暗号化または前記暗号文データ系列の復号化を実行することを特徴とする暗号方法。
【請求項２】
請求項１記載の暗号方法であって、前記ステップ（ｄ）では、前記秘密データの値と前記設定データの値との大小関係が比較されることを特徴とする暗号方法。
【請求項３】
請求項１または２記載の暗号方法であって、
前記ステップ（ａ）では、前記秘密データとして秘密鍵が最上位ビットから最下位ビットの順番でビット毎に前記メモリから順次読み出され、
前記ステップ（ｄ）では、前記ステップ（ａ）で読み出された秘密鍵の各ビットの値が前記設定データの値と比較され、
前記ステップ（ｃ）は、前記秘密鍵のビット毎に、所定の整数を法として前記ステップ（ｇ）で生成された出力データの値の２乗の剰余を前記第１処理データの値として算出するとともに、前記所定の整数を法として前記出力データの値と暗号鍵との積の剰余を前記第２処理データの値として算出するステップを含むことを特徴とする暗号方法。
【請求項４】
平文データ系列の暗号化あるいは暗号文データ系列の復号化を実行する暗号方法であって、
（ａ）メモリから秘密データを読み出すステップと、
（ｂ）当該読み出された秘密データを用いて前記平文データ系列の暗号化または前記暗号文データ系列の復号化を実行するステップと、を有し、
前記ステップ（ｂ）は、
（ｃ）前記秘密データの値を処理データの値と比較するステップと、
（ｄ）当該比較結果に対応した０または１のいずれか一方の値のみのビット列からなる判定子を生成するステップと、
（ｅ）前記判定子と前記処理データとにビット毎の論理積演算を施して演算データを生成するステップと、
（ｆ）前記演算データと前記秘密データとに加算または減算を施して出力データを生成するステップと、
を含み、前記出力データを用いて前記平文データ系列の暗号化または前記暗号文データ系列の復号化を実行することを特徴とする暗号方法。
【請求項５】
請求項４記載の暗号方法であって、前記ステップ（ｃ）では、前記秘密データの値と前記処理データの値との大小関係が比較されることを特徴とする暗号方法。
【請求項６】
請求項４または５記載の暗号方法であって、前記ステップ（ｂ）は、第１処理データと第２処理データとを加算して前記秘密データを生成するステップをさらに含み、前記ステップ（ｆ）では、前記秘密データの値から前記演算データの値が減算されることを特徴とする暗号方法。
【請求項７】
平文データ系列の暗号化あるいは暗号文データ系列の復号化を実行する暗号装置であって、
秘密データを記憶しているメモリと、
前記メモリから読み出された秘密データを用いて前記平文データ系列の暗号化または前記暗号文データ系列の復号化を実行する暗号処理部と、を有し、
前記暗号処理部は、
第１処理データと第２処理データとを生成する演算器と、
前記秘密データの値を設定データの値と比較する比較器と、
当該比較結果に対応した０または１のいずれか一方の値のみのビット列からなる第１判定子を生成する判定器と、
前記第１判定子にビット毎の論理否定演算を施して第２判定子を生成する論理否定演算器と、
前記第１処理データと前記第１判定子とにビット毎の論理積演算を施して第１演算データを生成する第１論理積演算器と、
前記第２処理データと前記第２判定子とにビット毎の論理積演算を施して第２演算データを生成する第２論理積演算器と、
前記第１演算データと前記第２演算データとにビット毎の論理和演算を施して出力データを生成する論理和演算器と、
を含むことを特徴とする暗号装置。
【請求項８】
請求項７記載の暗号装置であって、前記比較器は、前記秘密データの値と前記設定データの値との大小関係を比較し、当該比較結果を前記判定器に与えることを特徴とする暗号装置。
【請求項９】
請求項７または８記載の暗号装置であって、
前記暗号処理部は、前記秘密データとして秘密鍵を最上位ビットから最下位ビットの順番でビット毎に前記メモリから順次読み出し、当該読み出された秘密鍵の各ビットを前記比較器に与える制御部をさらに備え、
前記演算器は、前記秘密鍵のビット毎に、所定の整数を法として前記出力データの値の２乗の剰余を前記第１処理データの値として算出するとともに、前記所定の整数を法として前記出力データの値と暗号鍵との積の剰余を前記第２処理データの値として算出することを特徴とする暗号装置。
【請求項１０】
平文データ系列の暗号化あるいは暗号文データ系列の復号化を実行する暗号装置であって、
秘密データを記憶しているメモリと、
前記メモリから読み出された秘密データを用いて前記平文データ系列の暗号化または前記暗号文データ系列の復号化を実行する暗号処理部と、を有し、
前記暗号処理部は、
前記秘密データの値を処理データの値と比較する比較器と、
当該比較結果に対応した０または１のいずれか一方の値のみのビット列からなる判定子を生成する判定器と、
前記判定子と前記処理データとにビット毎の論理積演算を施して演算データを生成する論理積演算器と、
前記演算データと前記秘密データとに加算または減算を施して出力データを生成する加減算器と、
を含むことを特徴とする暗号装置。
【請求項１１】
請求項１０記載の暗号装置であって、前記比較器は、前記秘密データの値と前記処理データの値との大小関係を比較し、当該比較結果を前記判定器に与えることを特徴とする暗号装置。
【請求項１２】
請求項１０または１１記載の暗号装置であって、前記暗号処理部は、第１処理データと第２処理データとを加算して前記秘密データを生成する加算器をさらに備え、前記加減算器は、前記秘密データの値から前記論理積演算器の出力値を減算することを特徴とする暗号装置。
【請求項１３】
メモリから秘密データを読み出し、当該読み出された秘密データを用いて前記平文データ系列の暗号化あるいは前記暗号文データ系列の復号化を実行する暗号処理をプロセッサに実行させる暗号プログラムであって、
前記暗号処理は、
（ａ）第１処理データおよび第２処理データを生成する処理と、
（ｂ）前記秘密データの値を設定データの値と比較する処理と、
（ｃ）当該比較結果に対応した０または１のいずれか一方の値のみのビット列からなる第１判定子を生成するとともに、前記第１判定子にビット毎の論理否定演算を施して第２判定子を生成する処理と、
（ｄ）前記第１処理データと前記第１判定子とにビット毎の論理積演算を施して第１演算データを生成するとともに、前記第２処理データと前記第２判定子とにビット毎の論理積演算を施して第２演算データを生成する処理と、
（ｅ）前記第１演算データと前記第２演算データとにビット毎の論理和演算を施して出力データを生成する処理と、
を含み、前記出力データは前記平文データ系列の暗号化または前記暗号文データ系列の復号化に使用されることを特徴とする暗号プログラム。
【請求項１４】
メモリから秘密データを読み出し、当該読み出された秘密データを用いて前記平文データ系列の暗号化あるいは前記暗号文データ系列の復号化を実行する暗号処理をプロセッサに実行させる暗号プログラムであって、
前記暗号処理は、
（ａ）前記秘密データの値を処理データの値と比較する処理と、
（ｂ）当該比較結果に対応した０または１のいずれか一方の値のみのビット列からなる判定子を生成する処理と、
（ｃ）前記判定子と前記処理データとにビット毎の論理積演算を施して演算データを生成する処理と、
（ｄ）前記演算データと前記秘密データとに加算または減算を施して出力データを生成する処理と、
を含み、前記出力データは前記平文データ系列の暗号化または前記暗号文データ系列の復号化に使用されることを特徴とする暗号プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理技術に関する。
【背景技術】
【０００２】
インターネットなどのデジタル通信網上での電子商取引や電子申請のセキュリティを確保するために暗号技術は必須の技術である。この種の暗号技術としては、たとえば、ＲＳＡ暗号や楕円曲線暗号などの公開鍵暗号方式（public key cryptosystem）や、ストリーム暗号などの共通鍵暗号方式（symmetric key cryptosystem）が知られている。公開鍵暗号方式や共通鍵暗号方式では、平文データ系列の暗号化あるいは暗号文データ系列の復号に必要な秘密鍵は公開されず、通常、暗号装置に組み込まれたメモリに記録されている。
【０００３】
物理的あるいは論理的に暗号モジュール内部の秘密情報を読み取ろうとする攻撃に対する耐性は「耐タンパ性（Tamper Proofness）」と呼ばれている。スマートカードは、当該スマートカードの半導体チップに組み込まれたメモリに秘密鍵が記録されるため、高い耐タンパ性を持つといわれていた。しかしながら、暗号処理または復号処理中の消費電力や実行時間などのサイドチャネル情報を測定し、当該測定結果を解析して秘密鍵を得る攻撃法（以下、「サイドチャネル攻撃」という。）が多数提案されている。このサイドチャネル攻撃を用いれば、半導体チップ内のメモリに記録された秘密鍵であってもこれを読み出すことができるといわれている。たとえば、単純電力解析（ＳＰＡ：Simple Power Analysis）や差分電力解析（ＤＰＡ：Differential Power Analysis）によるサイドチャネル攻撃を用いれば、暗号装置の消費電力を示す信号波形の測定結果を解析することにより秘密鍵などの秘密データが推定され得る。サイドチャネル攻撃に関する従来技術は、たとえば、特許文献１（特開２００１−２６８０７２号公報）に開示されている。
【特許文献１】特開２００１−２６８０７２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
暗号処理では、通常、比較演算の結果に応じた条件分岐が発生する。この条件分岐が発生する場合とそれが発生しない場合とでは消費電力や実行時間に差が生じることがある。特に秘密鍵の値に応じて条件分岐が発生する場合は、それが発生しない場合と比べて消費電力や処理時間に違いが生じ、かかる消費電力や処理時間の違いが測定され解析されることにより秘密鍵が割り出される危険がある。さらに、暗号モジュールがメモリにアクセスして当該メモリから秘密鍵の値を読み出す際に、その読み出しアドレスが測定され、その測定結果が統計的に解析されることで秘密鍵が割り出される危険も存在する。
【０００５】
図１は、暗号処理で使用されるベキ乗剰余演算の典型的なアルゴリズムを示すフローチャートである。このフローチャートは、Ｓ≡Ａd （ｍｏｄ ｐ）という合同式を演算するものである。ここで、ｐは奇素数であり、Ａは公開鍵であり、ｄはｎビット長の秘密鍵を表す。図１に示されるように、最初に整数変数Ｓに「１」の値が設定され（ステップＳ１）、次いで、整数変数ｊに「ｎ−１」の値が設定される（ステップＳ２）。ステップＳ３では、ｐを法として整数Ｓと整数Ｓとの積の剰余が算出され、整数変数Ｓはその剰余に設定される。ステップＳ４では、秘密鍵ｄのｊ番目ビット値ｄ［ｊ］が「１」の値であるか否かが判定される。ｄ［ｊ］が「１」の値であれば、ステップＳ５において、ｐを法として整数Ｓと公開鍵Ａとの積の剰余が算出され、整数変数Ｓはその剰余に設定される。その後、ステップＳ６で、変数ｊが「０」の値に到達したか否かが判定される。変数ｊが「０」の値に達していなければ、変数ｊがデクリメントされ（ステップＳ７）、その後、ステップＳ３〜Ｓ６の手順が繰り返し実行される。他方、ステップＳ４でビット値ｄ［ｊ］が「１」の値ではないと判定されたとき、ステップＳ５の手順がスキップされ、ステップＳ６の処理が実行される。最終的にステップＳ６で変数ｊが「０」の値に達したと判定されたとき、ベキ乗剰余の演算結果である整数Ｓが出力される（ステップＳ８）。
【０００６】
前述の通り、ステップＳ４で秘密鍵ｄのビット値ｄ［ｊ］が「１」の値ではないと判定されたときはステップＳ５の手順がスキップされるという条件分岐が発生する。このため、秘密鍵ｄのビット値が「１」の値か否かに応じて暗号モジュールの消費電力や処理時間に違いが生じ、この違いに基づいて秘密鍵ｄが容易に推定される危険がある。
【０００７】
また、図２は、暗号処理で使用される加算剰余演算の典型的なアルゴリズムを示すフローチャートである。このフローチャートは、Ｓ≡Ｘ＋Ｙ （ｍｏｄ ｐ）という合同式を演算するものである。ここで、ｐは奇素数であり、Ｘ，Ｙは、整数についての剰余環Ｚ／ｐＺの元である。図２に示されるように、整数Ｘ，Ｙの加法演算がなされ、整数変数Ｓはその演算結果に設定される（ステップＳ１０）。次いで、整数Ｓが法ｐの値以上であるか否かが判定される（ステップＳ１１）。整数Ｓが法ｐの値以上であると判定されたときは、整数Ｓから法ｐの値が減算され、整数変数Ｓはその減算結果に設定される（ステップＳ１２）。そして、加算剰余の演算結果である整数Ｓが出力される（ステップＳ１３）。他方、整数Ｓが法ｐの値以上ではないと判定されたときは、ステップＳ１２の手順はスキップされ、整数Ｓが出力される（ステップＳ１３）という条件分岐が発生する。このため、整数Ｓが法ｐの値以上か否かに応じて暗号モジュールの消費電力や処理時間に違いが生じ、この違いに基づいて演算結果が容易に推定される危険がある。
【０００８】
近年、セキュリティ機能は、スマートカードのみならず、比較的大きな規模のシステムにも組み込まれている。この種のシステムでは、スマートカードと同様の安全性が確保されているとは限らない。たとえば、その種のシステムがプリント基板を有する場合、第三者は、当該プリント基板上の配線を流れる電流を測定し、当該測定結果を解析して秘密鍵を不正に入手し得る可能性がある。
【０００９】
上記に鑑みて本発明の目的の一つは、サイドチャネル攻撃に対して高い耐性を有する暗号装置を提供することである。
【課題を解決するための手段】
【００１０】
前記目的を達成すべく、本発明に係る第１の暗号方法は、平文データ系列の暗号化あるいは暗号文データ系列の復号化を実行する暗号方法であって、（ａ）メモリから秘密データを読み出すステップと、（ｂ）当該読み出された秘密データを用いて前記平文データ系列の暗号化または前記暗号文データ系列の復号化を実行するステップと、を有し、前記ステップ（ｂ）は、（ｃ）第１処理データおよび第２処理データを生成するステップと、（ｄ）前記秘密データの値を設定データの値と比較するステップと、（ｅ）当該比較結果に対応した０または１のいずれか一方の値のみのビット列からなる第１判定子を生成するとともに、前記第１判定子にビット毎の論理否定演算を施して第２判定子を生成するステップと、（ｆ）前記第１処理データと前記第１判定子とにビット毎の論理積演算を施して第１演算データを生成するとともに、前記第２処理データと前記第２判定子とにビット毎の論理積演算を施して第２演算データを生成するステップと、（ｇ）前記第１演算データと前記第２演算データとにビット毎の論理和演算を施して出力データを生成するステップと、を含み、前記出力データを用いて前記平文データ系列の暗号化または前記暗号文データ系列の復号化を実行するものである。
【００１１】
本発明に係る第２の暗号方法は、平文データ系列の暗号化あるいは暗号文データ系列の復号化を実行する暗号方法であって、（ａ）メモリから秘密データを読み出すステップと、（ｂ）当該読み出された秘密データを用いて前記平文データ系列の暗号化または前記暗号文データ系列の復号化を実行するステップと、を有し、前記ステップ（ｂ）は、（ｃ）前記秘密データの値を処理データの値と比較するステップと、（ｄ）当該比較結果に対応した０または１のいずれか一方の値のみのビット列からなる判定子を生成するステップと、（ｅ）前記判定子と前記処理データとにビット毎の論理積演算を施して演算データを生成するステップと、（ｆ）前記演算データと前記秘密データとに加算または減算を施して出力データを生成するステップと、を含み、前記出力データを用いて前記平文データ系列の暗号化または前記暗号文データ系列の復号化を実行するものである。
【００１２】
本発明に係る第１の暗号装置は、平文データ系列の暗号化あるいは暗号文データ系列の復号化を実行する暗号装置であって、秘密データを記憶しているメモリと、前記メモリから読み出された秘密データを用いて前記平文データ系列の暗号化または前記暗号文データ系列の復号化を実行する暗号処理部と、を有し、前記暗号処理部は、第１処理データと第２処理データとを生成する演算器と、前記秘密データの値を設定データの値と比較する比較器と、当該比較結果に対応した０または１のいずれか一方の値のみのビット列からなる第１判定子を生成する判定器と、前記第１判定子にビット毎の論理否定演算を施して第２判定子を生成する論理否定演算器と、前記第１処理データと前記第１判定子とにビット毎の論理積演算を施して第１演算データを生成する第１論理積演算器と、前記第２処理データと前記第２判定子とにビット毎の論理積演算を施して第２演算データを生成する第２論理積演算器と、前記第１演算データと前記第２演算データとにビット毎の論理和演算を施して出力データを生成する論理和演算器と、を含むものである。
【００１３】
本発明に係る第２の暗号装置は、平文データ系列の暗号化あるいは暗号文データ系列の復号化を実行する暗号装置であって、秘密データを記憶しているメモリと、前記メモリから読み出された秘密データを用いて前記平文データ系列の暗号化または前記暗号文データ系列の復号化を実行する暗号処理部と、を有し、前記暗号処理部は、前記秘密データの値を処理データの値と比較する比較器と、当該比較結果に対応した０または１のいずれか一方の値のみのビット列からなる判定子を生成する判定器と、前記判定子と前記処理データとにビット毎の論理積演算を施して演算データを生成する論理積演算器と、前記演算データと前記秘密データとに加算または減算を施して出力データを生成する加減算器と、を含むものである。
【００１４】
本発明に係る第１の暗号プログラムは、メモリから秘密データを読み出し、当該読み出された秘密データを用いて前記平文データ系列の暗号化あるいは前記暗号文データ系列の復号化を実行する暗号処理をプロセッサに実行させる暗号プログラムであって、前記暗号処理は、（ａ）第１処理データおよび第２処理データを生成する処理と、（ｂ）前記秘密データの値を設定データの値と比較する処理と、（ｃ）当該比較結果に対応した０または１のいずれか一方の値のみのビット列からなる第１判定子を生成するとともに、前記第１判定子にビット毎の論理否定演算を施して第２判定子を生成する処理と、（ｄ）前記第１処理データと前記第１判定子とにビット毎の論理積演算を施して第１演算データを生成するとともに、前記第２処理データと前記第２判定子とにビット毎の論理積演算を施して第２演算データを生成する処理と、（ｅ）前記第１演算データと前記第２演算データとにビット毎の論理和演算を施して出力データを生成する処理と、を含み、前記出力データは前記平文データ系列の暗号化または前記暗号文データ系列の復号化に使用されるものである。
【００１５】
そして、本発明に係る第２の暗号プログラムは、メモリから秘密データを読み出し、当該読み出された秘密データを用いて前記平文データ系列の暗号化あるいは前記暗号文データ系列の復号化を実行する暗号処理をプロセッサに実行させる暗号プログラムであって、前記暗号処理は、（ａ）前記秘密データの値を処理データの値と比較する処理と、（ｂ）当該比較結果に対応した０または１のいずれか一方の値のみのビット列からなる判定子を生成する処理と、（ｃ）前記判定子と前記処理データとにビット毎の論理積演算を施して演算データを生成する処理と、（ｄ）前記演算データと前記秘密データとに加算または減算を施して出力データを生成する処理と、を含み、前記出力データは前記平文データ系列の暗号化または前記暗号文データ系列の復号化に使用されるものである。
【発明の効果】
【００１６】
前述の通り、本発明に係る第１の暗号方法、暗号装置および暗号プログラムによれば、第１判定子と第１処理データとにビット毎の論理積演算を施すことで第１演算データが生成され、第２判定子と第２処理データとにビット毎の論理積演算を施すことで第２演算データが生成され、そして、第１演算データと第２演算データとのビット毎の論理和演算を施すことで出力データが生成される。これにより、第１判定子のビット値が「１」のみからなる値（＝「１１…１１」）の場合は、第２判定子のビット値が「０」のみからなる値（＝「００…００」）になるので第１演算データを示す出力データが生成され、第２判定子のビット値が「１」のみからなる値（＝「１１…１１」）の場合には、第１判定子のビット値が「０」のみからなる値（＝「００…００」）になるので第２演算データを示す出力データが生成される。このような処理は、秘密データの値に応じた条件分岐処理を発生させず、秘密データの値に応じた処理量の違いを発生させない。それゆえ、本発明に係る第１の暗号方法、暗号装置および暗号プログラムは、条件分岐処理を要しない暗号処理を可能にし、サイドチャネル攻撃を困難にするという効果を奏する。
【００１７】
また、本発明に係る第２の暗号方法、暗号装置および暗号プログラムによれば、判定子と処理データとにビット毎の論理積演算を施すことで演算データが生成され、この演算データと秘密データとに加減算を施すことで出力データが生成される。これにより、判定子のビット値が「０」のみからなる値（＝「００…００」）の場合は秘密データを示す出力データが生成され、判定子のビット値が「１」のみからなる値（＝「１１…１１」）の場合には秘密データと処理データとを加減算して得られる出力データが生成される。このような処理は、秘密データの値に応じた条件分岐処理を発生させず、秘密データの値に応じた処理量の違いを発生させない。それゆえ、本発明に係る第２の暗号方法、暗号装置および暗号プログラムは、条件分岐処理を要しない暗号処理を可能にし、サイドチャネル攻撃を困難にするという効果を奏する。
【００１８】
したがって、本発明に係る暗号方法、暗号装置および暗号プログラムは、サイドチャネル攻撃に対する高い耐性を実現するものである。
【発明を実施するための最良の形態】
【００１９】
以下、本発明に係る種々の実施例について説明する。
【００２０】
図３は、暗号装置１の概略構成を示すブロック図である。この暗号装置１は、演算装置１０、外部ＲＯＭ２０および外部ＲＡＭ３０を有する。これら演算装置１０、外部ＲＯＭ２０および外部ＲＡＭ３０は、外部バス２を介してデータ信号や制御信号を相互に転送できる。また暗号装置１は、公開鍵暗号方式や共通鍵暗号方式などの秘密鍵を利用して平文データ系列の暗号化あるいは暗号文データ系列の復号化を実行する機能を有する。
【００２１】
演算装置１０は、ＣＰＵを含むプロセッサ１１、キャッシュメモリ１２、補助演算部１３、内部ＲＡＭ１４およびインターフェース（Ｉ／Ｆ）１６を有し、これらキャッシュメモリ１２、補助演算部１３および内部ＲＡＭ１４は、内部バス１５を介してデータ信号や制御信号を相互に転送できる。また、演算装置１０は、インターフェース１６を介して外部バス２と接続されている。内部ＲＡＭ１４は秘密鍵などの秘密データ１４ａを記憶している。
【００２２】
外部ＲＯＭ２０は、演算装置１０で暗号処理（暗号化および復号化を含む。）に使用されるべき暗号プログラム（またはプログラムコード）２０ｂを記録している。演算装置１０のプロセッサ１１は、外部ＲＯＭ２０に記録された暗号プログラム２０ｂをロードして実行する機能を持つ。暗号プログラム２０ｂの実行に必要な各種の設定データ２０ａも、外部ＲＯＭ２０に記録されている。補助演算部１３は、暗号処理の一部を補助的に実行する機能を有し、たとえば剰余演算器や乗算器を有することができる。プロセッサ１１は、暗号プログラム２０ｂを実行する際、補助演算部１３に内部バス１５を介してデータを転送し、その転送データを補助演算部１３に処理させて当該処理結果を受け取ることができる。なお、外部ＲＡＭ３０は、暗号処理の過程で生成された秘密性の低いデータを一時的に格納するものである。
【００２３】
上記構成を有する暗号装置１の動作を以下に説明する。図４は、演算装置１０により実現される機能ブロック群の一例を概略的に示す図である。この機能ブロック群は、演算制御部４０、比較器４１、判定器４２、論理否定演算器４３、論理積演算器４４，４５および論理和演算器４６で構成されている。これら機能ブロック４０〜４６の全部または一部は、暗号プログラム２０ｂで実現されてもよいし、あるいは、補助演算部１３に組み込まれたハードウェア構成で実現されてもよい。
【００２４】
図４を参照すると、演算制御部４０は、内部ＲＡＭ１４（図３）から秘密データをビット単位でロードするとともに、暗号処理に使用される第１処理データおよび第２処理データを生成する。秘密データのビット値ｄ［ｊ］（ｊは、秘密データのｊ番目ビットを示す。）は比較器４１に与えられる。ｎビット長（ｎは正整数）の第１処理データの値Ｓは論理積演算器４４に与えられ、ｎビット長の第２処理データの値Ｔは、論理積演算器４５に与えられる。
【００２５】
比較器４１は、秘密データのビット値ｄ［ｊ］を設定データ値Ｄｓと比較し、当該比較結果を判定器４２に与える。比較器４１は、たとえば、ビット値ｄ［ｊ］と設定データ値Ｄｓとの大小関係を比較結果として与えればよいが、特に制限されない。判定器４２は、比較器４１から供給された比較結果に対応した「０」または「１」のいずれか一方の値のみのビット列からなる第１判定子ｃを生成する。この第１判定子ｃのビット長は、第１処理データおよび第２処理データのビット長と同じである。
【００２６】
論理否定演算器４３は、第１判定子ｃにビット毎の論理否定演算を施して第２判定子＜ｃ＞を生成する。たとえば、第１判定子ｃが７ビットの「０００００００」の値を持つ場合、第２判定子＜ｃ＞は「１１１１１１１」の値を持つこととなり、第１判定子ｃが７ビットの「１１１１１１１」の値を持つ場合、第２判定子＜ｃ＞は「０００００００」の値を持つことになる。
【００２７】
論理積演算器４４は、第１処理データの値Ｓと第１判定子ｃとにビット毎の論理積演算を施して第１演算データの値Ｓ＆ｃを生成する（ここで、「＆」は論理積演算記号を表す）。一方、論理積演算器４５は、第２処理データの値Ｔと第２判定子＜ｃ＞とにビット毎の論理積演算を施して第２演算データの値Ｔ＆＜ｃ＞を生成する。
【００２８】
論理和演算器４６は、第１演算データの値Ｓ＆ｃと第２演算データの値Ｔ＆＜ｃ＞とにビット毎の論理和演算を施して出力データの値Ｓｏ（＝Ｓ＆ｃ｜Ｔ＆＜ｃ＞）を生成する（ここで、「｜」は論理和演算記号を表す）。そして、演算制御部４０は、論理和演算器４６の出力値Ｓｏを用いて任意の暗号処理を実行することができる。
【００２９】
上記構成では、比較器４１の判定結果に応じた条件分岐処理が発生しないので、秘密データのビット値ｄ［ｊ」に応じた条件分岐処理も発生しない。よって、条件分岐処理による消費電力や処理時間の違いはほとんど発生しないこととなる。このため、たとえ、秘密データのビット値ｄ［ｊ］の読み出しアドレスを物理的に測定できたとしても、その測定値と、消費電力や処理時間などのサイドチャネル情報との間の関連を見つけることは難しい。したがって、図４の機能ブロック群を有する暗号装置１は、サイドチャネル攻撃に対する高い耐性を有する。
【００３０】
図４の機能ブロック群を用いてベキ乗剰余演算を実行することが可能である。図５は、Ｓ≡Ａd （ｍｏｄ ｐ）という合同式のベキ乗剰余演算の手順を示すフローチャートである。ここで、ｐは奇素数であり、Ａは公開鍵である。ｄはｎビット長の秘密鍵を表し、ｄ［ｊ］は秘密鍵ｄのｊ番目ビットの値である。
【００３１】
図５を参照すると、最初に、演算制御部４０は、整数変数Ｓに「１」の値を設定し（ステップＳ２０）、次いで、秘密鍵ｄのビット位置を示す整数変数ｊに、最上位ビットを示す「ｎ−１」の値を設定する（ステップＳ２１）。ステップＳ２２では、演算制御部４０は、ｐを法として整数変数Ｓの２乗の剰余（＝Ｓ×Ｓ （ｍｏｄ ｐ））を第１処理データの値Ｓとして算出する。次のステップＳ２３では、演算制御部４０は、ｐを法として整数Ｓと公開鍵Ａとの積の剰余（＝Ｓ×Ａ （ｍｏｄ ｐ））を第２処理データの値Ｔとして算出する。
【００３２】
一方、ステップＳ２４では、比較器４１は、ビット値ｄ［ｊ］と設定データ値Ｄｓ（＝１）との大小関係を比較し、判定器４２は、当該比較結果に基づいて、ビット値ｄ［ｊ］が設定データ値Ｄｓ（＝１）に一致すれば、「０」のビット値のみからなるｎビット長の値に第１判定子ｃを設定し、ビット値ｄ［ｊ］が設定データ値Ｄｓ（＝１）に一致しなければ、「１」のビット値のみからなるｎビット長の値に第１判定子ｃを設定する。ステップＳ２５では、論理否定演算器４３は、第１判定子ｃにビット毎の論理否定演算を施して第２判定子＜ｃ＞を生成する。
【００３３】
続くステップＳ２６では、論理積演算器４４、論理積演算器４５および論理和演算器４６が協働して、Ｓ＆ｃ｜Ｔ＆＜ｃ＞というビット毎の論理演算を実行して出力値Ｓ（＝Ｓｏ）を生成し、この値Ｓを演算制御部４０に与える。
【００３４】
そして、演算制御部４０は、秘密鍵ｄのビット位置ｊが最下位ビットを示す「０」の値に一致したか否かを判定し（ステップＳ２７）、ビット位置ｊが「０」に達していなければ、ビット位置ｊをデクリメントして（ステップＳ２８）、上記ステップＳ２２〜Ｓ２７の手順を繰り返し実行させる。
【００３５】
最終的に、ステップＳ２７でビット位置ｊが「０」に達したと判定したとき、演算制御部４０は、論理和演算器４６の出力値Ｓｏをベキ乗剰余の演算結果として出力する（ステップＳ２９）。
【００３６】
次に、図６は、演算装置１０により実現される機能ブロック群の他の例を概略的に示す図である。この機能ブロック群は、演算制御部５０、比較器５１、判定器５２、論理積演算器５３および加減算器５４で構成されている。これら機能ブロック５０〜５４の全部または一部は、暗号プログラム２０ｂで実現されてもよいし、あるいは、補助演算部１３に組み込まれたハードウェア構成で実現されてもよい。
【００３７】
図６を参照すると、演算制御部４０は、内部ＲＡＭ１４（図３）から読み出された秘密データの値Ｓと、処理データの値Ｐとを比較器５１に与える。この秘密データは、暗号処理の過程で発生して内部ＲＡＭ１４に一時的に格納されたものである。
【００３８】
比較器５１は、秘密データの値Ｓを処理データの値Ｐと比較し、当該比較結果を判定器５２に与える。判定器５２は、比較器５１から供給された比較結果に対応した「０」または「１」のいずれか一方の値のみのビット列からなる判定子ｃを生成する。この判定子ｃのビット長は、秘密データのビット長と同じである。
【００３９】
論理積演算器５３は、処理データの値Ｐと判定子ｃとにビット毎の論理積演算を施して演算データを生成しこれを加減算器５４に供給する。加減算器５４は、秘密データの値Ｓと演算データの値（＝Ｐ＆ｃ）とに加算または減算を施して出力値Ｓｏ（＝Ｓ±（Ｐ＆ｃ））を生成する。
【００４０】
図６の機能ブロック群では、比較器５１の判定結果に応じた条件分岐処理が発生しないので、秘密データの値Ｓに応じた条件分岐処理も発生しない。よって、条件分岐処理による消費電力や処理時間の違いはほとんど発生しないこととなる。このため、たとえ、秘密データの値Ｓの読み出しアドレスを物理的に測定できたとしても、その測定値と、消費電力や処理時間などのサイドチャネル情報との間の関連を推定することは難しい。したがって、図６の機能ブロック群を有する暗号装置１は、サイドチャネル攻撃に対する高い耐性を有する。このような機能ブロック群は、公知のモンゴメリ乗算やＣＲＴ（中国人法剰余定理：Chinese Remainder Theorem）の実装に使用することが可能である。
【００４１】
図６の機能ブロック群を用いて加算剰余演算を実行することができる。図７は、Ｓ≡Ｘ＋Ｙ （ｍｏｄ Ｐ）という合同式の加算剰余演算の手順を示すフローチャートである。ここで、Ｐは奇素数であり、Ｘ，Ｙは、任意の加法群（たとえば、整数についての剰余環Ｚ／ｐＺ）の元である。
【００４２】
図７を参照すると、ステップＳ３０で、演算制御部５０は、整数Ｘ，Ｙの加法演算を実行し、秘密データの値Ｓをその演算結果（＝Ｘ＋Ｙ）に設定する。次いで、比較器５１は、秘密データの値Ｓと処理データの値Ｐとの大小関係を比較し、当該比較結果を示す値Ｃｂを与える（ステップＳ３１）。値Ｃｂは、たとえば、秘密データの値Ｓから処理データの値Ｐを減算して得られた減算値（＝Ｓ−Ｐ）がゼロ以上であれば「１」の値に設定され、減算値（＝Ｓ−Ｐ）がゼロ未満であれば「０」の値に設定されればよい。
【００４３】
ステップＳ３２では、判定器５２は、その比較結果を示す値Ｃｂが設定値「１」に一致すれば、「１」の論理値のみからなるｎビット長の値に判定子ｃを設定し、値Ｃｂが設定値「１」に一致しなければ、「０」の論理値のみからなるｎビット長の値に判定子ｃを設定することができる。
【００４４】
続くステップＳ３３では、論理積演算器５３は、処理データの値Ｐと判定子ｃとにビット毎の論理積演算を施して演算データの値Ｐ＆ｃを生成する。ステップＳ３４，Ｓ３５では、加減算器５４は、秘密データの値Ｓから演算データの値Ｐ＆ｃを減算して出力値Ｓｏ（＝Ｓ−Ｐ＆ｃ）を生成し出力する。
【図面の簡単な説明】
【００４５】
【図１】暗号処理で使用されるベキ乗剰余演算の典型的なアルゴリズムを示すフローチャートである。
【図２】暗号処理で使用される加算剰余演算の典型的なアルゴリズムを示すフローチャートである。
【図３】本発明の実施例に係る暗号装置の概略構成を示すブロック図である。
【図４】図３の演算装置により実現される演算回路の一例を概略的に示すブロック図である。
【図５】本発明の実施例に係るベキ乗剰余演算の手順を示すフローチャートである。
【図６】図３の演算装置により実現される演算回路の他の例を概略的に示すブロック図である。
【図７】本発明の実施例に係る加算剰余演算の手順を示すフローチャートである。
【符号の説明】
【００４６】
１  暗号装置
１０  演算装置
１１  プロセッサ
１３  補助演算部
１４  内部ＲＡＭ
１４ａ  秘密データ
２０ｂ  暗号プログラム（または暗号プログラムコード）
４０  演算制御部
４１  比較器
４２  判定器
４３  論理否定演算器
４４，４５，５３  論理積演算器
４６  論理和演算器
５０  加算器
５１  比較器
５２  判定器
５４  加減算器
【図１】
2008141385.tif 000003
【図２】
2008141385.tif 000004
【図３】
2008141385.tif 000005
【図４】
2008141385.tif 000006
【図５】
2008141385.tif 000007
【図６】
2008141385.tif 000008
【図７】
2008141385.tif 000009