(57)【要約】  選択メッセージペアを使った特殊PAに対して耐タンパ性を備える。定数乗器３９０１は、基数および法nを入力し、基数aに対して所定定数を指数とし法nに関するべき乗剰余演算を実行し、演算結果を基数bとして出力する。個人鍵変換器３９０４は、個人鍵dを入力し、dを所定定数で割った商として個人鍵d’を演算する。補正鍵生成器３９０７は、上記割り算の余りとして補正鍵d”を生成する。べき乗剰余演算器３９０５は、基数bに対してd’を指数としべき乗剰余演算を実行する。べき乗剰余演算器３９０６は、基数aに対してd”を指数としべき乗剰余演算を実行し、補正値を出力する。補正演算器３９０８は、べき乗剰余演算器３９０５および３９０６の各出力を乗算処理し、その結果を暗号処理結果として出力する。
2012090289.tif 000002
【特許請求の範囲】
【請求項１】
第１の基数aおよび法nを入力し、前記第１の基数aに対して所定定数を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を第２の基数bとして出力する定数乗器と、
第１の個人鍵dを入力し、前記第１の個人鍵dを前記所定定数で割った商として第２の個人鍵d’を演算する個人鍵変換器と、
前記第１の個人鍵dを前記所定定数で割った余りとして補正鍵d”を生成する補正鍵生成器と、
前記第２の基数bに対して前記第２の個人鍵d’を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を出力する第１のべき乗剰余演算器と、
前記第１の基数aに対して前記補正鍵d”を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を補正値として出力する第２のべき乗剰余演算器と、
前記第１のべき乗剰余演算器が出力する演算結果および前記第２のべき乗剰余演算器が出力する補正値を入力して、前記法nのもとでの乗算処理である補正演算を実行し、前記補正演算の演算結果を、前記第１の基数aに対して前記第１の個人鍵ｄを指数とし前記法nに関するべき乗剰余演算を実行した場合に得られる暗号処理結果として出力する補正演算器と
を備えることを特徴とする暗号処理装置。
【請求項２】
第１の楕円曲線上の点Aを入力し、前記第１の点Aに対して所定定数をスカラー値として点のスカラー倍算を実行し、演算結果を第２の楕円曲線上の点Bとして出力する定数倍器と、
第１の個人鍵dを入力し、前記第１の個人鍵dを前記所定定数で割った商として第２の個人鍵d’を演算する個人鍵変換器と、
前記第１の個人鍵dを前記所定定数で割った余りとして補正鍵d”を生成する補正鍵生成器と、
前記第２の点Bに対して前記第２の個人鍵d’をスカラー値として点のスカラー倍算を実行し、演算結果を出力する第１の点のスカラー倍算器と、
前記第１の点Aに対して前記補正鍵d”をスカラー値として点のスカラー倍算を実行し、演算結果を補正値として出力する第２の点のスカラー倍算器と、
前記第１の点のスカラー倍算器が出力する演算結果および前記第２の点のスカラー倍算器が出力する補正値を入力して、楕円曲線上の点の加算処理である補正演算を実行し、前記補正演算の演算結果を、前記第１の点Aに対して前記第１の個人鍵ｄをスカラー値として点のスカラー倍算を実行した場合に得られる暗号処理結果として出力する補正演算器と、
を備えることを特徴とする暗号処理装置。
【請求項３】
前記所定定数は１つ以上の素数を公約数とする値を有する、
ことを特徴とする請求項１または２に記載の暗号処理装置。
【請求項４】
前記所定定数は所定の乱数を公約数とする値を有する、
ことを特徴とする請求項３に記載の暗号処理装置。
【請求項５】
前記個人鍵変換器および前記補正鍵生成器は、暗号処理に先立って事前に、前記第２の個人鍵d’の演算と、前記補正鍵d”の生成を実行する、
ことを特徴とする請求項１または２に記載の暗号処理装置。
【請求項６】
コンピュータが、
第１の基数aおよび法nを入力し、前記第１の基数aに対して所定定数を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を第２の基数bとして出力し、
第１の個人鍵dを入力し、前記第１の個人鍵dを前記所定定数で割った商として第２の個人鍵d’を演算し、
前記第１の個人鍵dを前記所定定数で割った余りとして補正鍵d”を生成し、
前記第２の基数bに対して前記第２の個人鍵d’を指数とし前記法nに関する第１のべき乗剰余演算を実行し、演算結果を出力し、
前記第１の基数aに対して前記補正鍵d”を指数とし前記法nに関する第２のべき乗剰余演算を実行し、演算結果を補正値として出力し、
前記第１のべき乗剰余演算の演算結果および前記第２のべき乗剰余演算の演算結果である補正値を入力して、前記法nのもとでの乗算処理である補正演算を実行し、前記補正演算の演算結果を、前記第１の基数aに対して前記第１の個人鍵ｄを指数とし前記法nに関するべき乗剰余演算を実行した場合に得られる暗号処理結果として出力する、
ことを特徴とする暗号処理方法。
【請求項７】
コンピュータが、
第１の楕円曲線上の点Aを入力し、前記第１の点Aに対して所定定数をスカラー値として点のスカラー倍算を実行し、演算結果を第２の楕円曲線上の点Bとして出力し、
第１の個人鍵dを入力し、前記第１の個人鍵dを前記所定定数で割った商として第２の個人鍵d’を演算し、
前記第１の個人鍵dを前記所定定数で割った余りとして補正鍵d”を生成し、
前記第２の点Bに対して前記第２の個人鍵d’をスカラー値として点の第１のスカラー倍算を実行し、演算結果を出力し、
前記第１の点Aに対して前記補正鍵d”をスカラー値として点の第２のスカラー倍算を実行し、演算結果を補正値として出力し、
前記第１の点のスカラー倍算の演算結果および前記第２の点のスカラー倍算の演算結果である補正値を入力して、楕円曲線上の点の加算処理である補正演算を実行し、前記補正演算の演算結果を、前記第１の点Aに対して前記第１の個人鍵ｄをスカラー値として点のスカラー倍算を実行した場合に得られる暗号処理結果として出力する、
ことを特徴とする暗号処理方法。
【請求項８】
前記所定定数は１つ以上の素数を公約数とする値を有する、
ことを特徴とする請求項６または７に記載の暗号処理方法。
【請求項９】
前記所定定数は所定の乱数を公約数とする値を有する、
ことを特徴とする請求項８に記載の暗号処理方法。
【請求項１０】
暗号処理に先立って事前に、前記第２の個人鍵d’の演算と、前記補正鍵d”の生成を実行する、
ことを特徴とする請求項６または７に記載の暗号処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号処理における耐タンパ性を向上した暗号処理装置および方法に関する。
【背景技術】
【０００２】
近年、情報セキュリティ技術の重要性がますます高まってきている。また、情報セキュリティの基盤技術の１つとして、公開鍵暗号（public-key cryptography）が盛んに研究されている。【０００３】
公開鍵暗号にはいくつか種類があり、べき乗剰余演算を利用するRivest, Shamir, Adleman（RSA）、Diffie-Hellman（DH）といったアルゴリズムや、楕円曲線上の点のスカラー倍算を利用する楕円曲線暗号（Elliptical Curve Cryptography；ECC）などが知られている。【０００４】
公開鍵暗号の利用においては、セキュリティの維持のために、個人鍵（private key）を秘密に保つことが重要である。ところが、近年では個人鍵を解読する（break）ための、いくつかの攻撃手法が知られている。よって、公開鍵暗号を用いた処理を行う機器が耐タンパ性である（tamper-proof）ためには、少なくとも既知の攻撃手法に対する対策が当該機器において実装されている必要がある。【０００５】
例えば、サイドチャネル攻撃の１種として、電力解析（Power Analysis；ＰＡ）攻撃と呼ばれる攻撃手法が知られている。また、ＰＡには、単純電力解析（Simple Power Analysis；SPA）と電力差分解析（Differential Power Analysis；DPA）の２種類がある。【０００６】
よって、公開鍵暗号を用いた処理を行う機器には、SPA攻撃に対する安全性とDPA攻撃に対する安全性が求められる。例えば、SPA攻撃への対策の１つには「A&D-always法」と呼ばれる手法があり、DPA攻撃への対策の１つにはデータをランダム化する手法がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０００−１３２０９６号公報
【特許文献２】特開２００３−２３３３０７号公報
【特許文献３】国際公開ＷＯ２００９／１２２４６１号公報
【非特許文献】
【０００８】
【非特許文献１】[IEEE P1363] IEEE P1363/D13 (Draft Version 13, November 12, 1999) main document, Standard Specifications for Public Key Cryptography, http://grouper.ieee.org/groups/1363/P1363/draft.html
【非特許文献２】[Kocher99] P.Kocher, J,Jaffe and B.Jun "Differential Power Anaysis", Crypto'99, LNCS 1666, pp.388-397, Springer-Verlag, 1999.
【非特許文献３】Jean-Sebastein Coron, ”Resistance against Differential Power Analysis for Elliptic Curve Cryposystems”, Cryptographic Hardware and Embedded Systems (CHES’99), LNCS 1717, pp.144-157, Springer-Verlag, 1999.
【非特許文献４】“Portable Data Carrier Provided with Access Protection by Dividing up Codes”, European Patent No. EP1262037.
【発明の概要】
【発明が解決しようとする課題】
【０００９】
従来、A&D-always法によるSPA対策と、ランダム化の手法によるDPA対策を組み合わせることで、SPAとDPAの両方に安全となり、電力解析を完全に防ぐことができると考えられていた。【００１０】
しかし、発明者は、これらの対策法を用いたとしても、電力波形を利用することで個人鍵dの値を解読できる攻撃法を考えた。この攻撃を、本出願では「特殊PA」と呼ぶことにする。【００１１】
まず、個人鍵dがランダム化されていない場合の特殊PAとして、次のような攻撃が可能であることを発見した。すなわち、べき乗剰余演算を搭載したデバイスに対しては、P3 =
Q3 (mod n)かつP≠Qを満たす選択メッセージペアP,Qを用いた特殊PAにより、攻撃者はdの全体の2/3のビット値を解読できることがわかった。点のスカラー倍算機能を搭載したデバイスに対しても、3P=3QかつP≠Qを満たす選択メッセージペアP,Qを用いた特殊PAにより、同様の攻撃を行うことで攻撃者はdの全体の2/3のビット値を解読できることがわかった。さらにこの攻撃は、3以上の素数αに対してPα= Qα(mod n)かつP≠Q(もしくはαP=αQかつP≠Q)を満たす選択メッセージペアを用いた特殊PAに拡張することができることがわかった。【００１２】
次に、個人鍵dがランダム化されている場合の特殊PAとして、次のような攻撃が可能であることを発見した。すなわち、ランダム化された個人鍵が、Pを入力した場合とQを入力した場合で同一となるようにランダム化された指数を一致させることにより、ランダム化されていない場合と同様の攻撃手法を適用できることがわかった。このための最も簡単な方法は、Pを与えた場合のランダムな個人鍵と、Qを与えた場合のランダム化された個人鍵が一致するまで、Qを与えた場合の電力測定を複数回繰り返すことである。そして、この電力測定時間は決して短くないが、十分現実的な時間内に攻撃を成功させるのに必要な電力測定を完了することができることがわかった。電力測定は、スマートカード等の低速なデバイスによる演算処理と通信時間のため、測定時間は電力測定回数に比例した秒単位の時間を必要とする。しかし、いったん電力測定を完了し、電力測定データのPCへの転送が完了したならば、高性能PCによる高速な解析が可能となる。【００１３】
そこで本発明の課題は、特殊PAに対する耐タンパ性を備えた暗号処理装置および方法を提供することである。
【課題を解決するための手段】
【００１４】
一態様によれば、第１の基数aおよび法nを入力し、前記第１の基数aに対して所定定数を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を第２の基数bとして出力する定数乗器と、第１の個人鍵dを入力し、前記第１の個人鍵dを前記所定定数で割った商として第２の個人鍵d’を演算する個人鍵変換器と、前記第１の個人鍵dを前記所定定数で割った余りとして補正鍵d”を生成する補正鍵生成器と、前記第２の基数bに対して前記第２の個人鍵d’を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を出力する第１のべき乗剰余演算器と、前記第１の基数aに対して前記補正鍵d”を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を補正値として出力する第２のべき乗剰余演算器と、前記第１のべき乗剰余演算器が出力する演算結果および前記第２のべき乗剰余演算器が出力する補正値を入力して、前記法nのもとでの乗算処理である補正演算を実行し、前記補正演算の演算結果を、前記第１の基数aに対して前記第１の個人鍵ｄを指数とし前記法nに関するべき乗剰余演算を実行した場合に得られる暗号処理結果として出力する補正演算器とを備えることを特徴とする暗号処理装置を提供する。
【発明の効果】
【００１５】
選択メッセージペアを使った特殊PAを含む攻撃に対して、耐タンパ性を備えることが可能となる。
【図面の簡単な説明】
【００１６】
【図１】RSAとECCの演算の対応関係を示す表1を示す図である。
【図２】電力解析の概要を説明する図である。
【図３】単純電力解析(SPA)と電力差分解析(DPA)の説明図である。
【図４】バイナリ法を用いたべき乗剰余演算処理のアルゴリズムを示す図である。
【図５】バイナリ法によるべき乗剰余演算処理の説明図である。
【図６】図５のバイナリ法に対してSPAを用いた場合の電力波形例を示す図である。
【図７】バイナリ法を用いた点のスカラー倍算処理のアルゴリズムを示す図である。
【図８】バイナリ法による点のスカラー倍算処理の説明図である。
【図９】図７のバイナリ法に対してSPAを用いた場合の電力波形例を示す図である。
【図１０】DPAにおける差分波形による個人鍵ビットの判定動作の説明図である。
【図１１】データのランダム化によるDPA対策法の説明図である。
【図１２】A&D-always法を用いたべき乗剰余演算(ModExp_ADalways関数)のアルゴリズムを示す図である。
【図１３】A&D-always法の説明図である。
【図１４】A&D-always法に対してSPAを用いた場合の電力波形を示す図である。
【図１５】A&D-always法を用いた点のスカラー倍算(PointMul_ADalways関数)のアルゴリズムを示す図である。
【図１６】A&D-always法によるSPA対策法と従来法1に示すDPA対策法の組み合わせによるべき乗剰余演算(ModExp_RMUL_and_Adalways関数)のアルゴリズムを示す図である。
【図１７】A&D-always法によるSPA対策法と従来法2に示すDPA対策法の組み合わせによるべき乗剰余演算(ModExp_RDIV_and_Adalways関数)のアルゴリズムを示す図である。
【図１８】A&D-always法によるSPA対策法と従来法1に示すDPA対策法の組み合わせによる点のスカラー倍算アルゴリズム(PointMul_RMUL_and_ADalways関数)のアルゴリズムを示す図である。
【図１９】A&D-always法によるSPA対策法と従来法2に示すDPA対策法の組み合わせによる点のスカラー倍算アルゴリズム(PointMul_RDIV_and_ADalways関数)のアルゴリズムを示す図である。
【図２０】乗算におけるデータ値と消費電力の相関関係を示す図である。
【図２１】点の加算データ値と消費電力の相関関係を示す図である。
【図２２】特殊PAにおいて作成する差分波形の基本形(個人鍵がランダム化されていない場合)を示す図である。
【図２３】d=(111)2=7, 選択メッセージペアP,Q(P3=Q3,P≠Q)を与えた場合の特殊PAの差分波形を示す図である。
【図２４】A&D-always法を実行した場合の指数の1ビット増値d[u-i]と、ビット増前後の指数値が３の倍数であるかどうかの正否の関係を示す表2を示す図である。
【図２５】図２４の表の関係を表現した状態遷移図である。
【図２６】図２５の状態遷移を2回実行したときの全パターンを示す図である。
【図２７】図２６の2回分の状態遷移利用した攻撃法の説明図である。
【図２８】2ビット解読を利用した、2ビット部分鍵解読失敗時のフォロー解読動作の説明図である。
【図２９】下位ビットフォロー解読の成功確率を分析するための説明図である。
【図３０】上位ビットフォロー解読の成功確率を分析するための説明図である。
【図３１】図３１  A&D-always法を実行した場合の指数の1ビット増値d[u-i]と、ビット増前後の指数値が素数αの倍数であるかどうかの正否の関係を示す表3を示す図である。
【図３２】Pα=Qα (mod n)かつP≠Q(もしくはαP=αQかつP≠Q)を用いた特殊PAの解読能力を示す表4を示す図である。
【図３３】特殊PAにおいて作成する差分波形の基本形(個人鍵がランダム化されている場合)を示す図である。
【図３４】個人鍵P,Qがランダム化されたときの、特殊PAによる差分波形の作成法（その１）の説明図である。
【図３５】ランダム化された個人鍵が一致する場合の差分波形(上)と異なる場合の差分波形(下)を示す図である。
【図３６】個人鍵P,Qがランダム化されたときの、特殊PAによる差分波形の作成法（その２）の説明図である。
【図３７】第１〜第３実施形態の暗号処理装置の第１のハードウェア構成例を示す図である。
【図３８】第１〜第３実施形態の暗号処理装置の第２のハードウェア構成例を示す図である。
【図３９】第１，第２，第３の実施形態の暗号処理装置に共通の機能構成図である。
【図４０】第１〜第６の実施形態によって生成される電力差分波形を示す図である。
【図４１】第４，第５，第６の実施形態の暗号処理装置に共通の機能構成図である。
【図４２】第１の実施形態の制御処理を示すフローチャートである。
【図４３】第１，第２，第３の実施形態におけるべき乗剰余演算処理の詳細（その１）を示すフローチャートである。
【図４４】第１，第２，第３の実施形態におけるべき乗剰余演算処理の詳細（その２）を示すフローチャートである。
【図４５】第２の実施形態の制御処理を示すフローチャートである。
【図４６】第３の実施形態の制御処理を示すフローチャートである。
【図４７】第４の実施形態の制御処理を示すフローチャートである。
【図４８】第４，第５，第６の実施形態における点のスカラー倍算処理の詳細（その１）を示すフローチャートである。
【図４９】第４，第５，第６の実施形態における点のスカラー倍算処理の詳細（その２）を示すフローチャートである。
【図５０】第５の実施形態の制御処理を示すフローチャートである。
【図５１】第６の実施形態の制御処理を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。説明の順序は以下のとおりである。
後述の第１〜第６の実施形態の暗号処理装置は、A&D-always法によるSPA対策機能とランダム化の手法によるDPA対策機能を実装し、かつ特殊PAに対する対策機能を実装した、べき乗剰余演算または楕円曲線上の点に対するスカラー倍算を行う装置である。そこで、第１〜第６の実施形態についての理解を助けるために、まず、べき乗剰余演算および楕円曲線上の演算について説明する。また、第１〜第６の実施形態についての理解を助けるために、第１〜第３の比較例についても説明する。さらに、発明者が発見した、個人鍵dがランダム化されていない場合の特殊PA法と個人鍵dがランダム化されている場合の特殊PA法について説明する。その後、本願の発明者が比較例および特殊PAについての検討から得た知見と、当該知見に基づいて発明者が開発した第１〜第６の実施形態について、順に説明する。
【００１８】
＜べき乗剰余演算の概略＞
まず、べき乗剰余演算について説明する。RSAおよびDHでは、べき乗剰余演算と呼ばれる処理を用いた演算が行われる。べき乗剰余演算とは、基数a, 指数x, 法nに対して、式（０．１）を計算する演算である。
z=ax (mod n)     (0.1)
【００１９】
RSAおよびDHでは、xを秘密情報とした処理が行われる。例えばRSAの復号演算においては、暗号文c、個人鍵d、公開法nから、式（０．２）を満たすmを計算することで復号処理が行われる。
m=cd (mod n)     (0.2)
【００２０】
DH鍵交換では、通信相手の公開鍵c、個人鍵d、公開法nから、上記式（０．２）を計算することで、共有鍵mを得る。電子署名においては、署名対象データc、個人鍵d、法nから、上記式（０．２）を計算することで、電子署名mを得る。
【００２１】
以下の説明では、一般式として、式（０．３）を用いることにする。
v=ad (mod n)     (0.3)
【００２２】
いずれの処理においても、個人鍵dの値を知らない第三者は、c,nの値を知っていたとしても、正しい復号処理結果、共有鍵、電子署名処理結果であるmを算出することができない。
【００２３】
＜ECCの演算の概略＞
次に、楕円曲線上の演算について説明する。ECCで使われる楕円曲線のうちで主なものは、素体ＧＦ（ｐ）上で定義される式（１．１）の楕円曲線と、2の拡大体GF(2m)上で定義される式（１．２）の楕円曲線である（なお、GFはGalois fieldの略であり、pは素数である）。
【００２４】
y2=x3+ａx+ｂ(mod p)              (1.1)
ただし、ｐは素数
a,bは楕円曲線パラメータ（0≦a,b＜p）
a,b,x,y∈GF(p)
y2+xy=x3+ａx2+ｂ (mod f(x))              (1.2)
ただし、f(x)はGF(2m)の多項式
a,bは楕円曲線パラメータ（0≦a,b＜p）
a,b,x,y∈GF(2m)
【００２５】
上述のように、a,bは、楕円曲線パラメータと呼ばれ、楕円曲線を一意に決定するためのパラメータである。
【００２６】
式（１．１）で表される楕円曲線上の点Aは、式（１．１）を満たすxとyの組によりA=(x,y)と表される。同様に、式（１．２）で表される楕円曲線上の点Aは、式（１．２）を満たすxとyの組によりA=(x,y)と表される。
【００２７】
また、楕円曲線上の特殊な点として無限遠点（point at infinity, or infinite point）とベースポイントが定義される。無限遠点を以下では「O」（大文字のオー）、ベースポイントを以下では「G」と表記する。ベースポイントGは、楕円曲線上の点の一つで、楕円曲線暗号の利用者間で共通して使用され、公開鍵／個人鍵ペア生成をはじめ、楕円曲線暗号を用いた各種機能において使用される。
【００２８】
なお、本明細書の以下の議論は、式（１．１）の楕円曲線についても式（１．２）の楕円曲線についても同様に成り立つ。よって、以下では式（１．１）と（１．２）の区別について言及せずに、単に「楕円曲線」、「点A」、「点（x,y）」、「x座標」、「y座標」、「楕円曲線パラメータａおよびｂ」などの表記を用いることがある。
【００２９】
楕円曲線上の点同士に対して、ある演算（以下「加算」といい、「+」と表す）を定義すると、楕円曲線上の点の集合は可換群をなすことが知られている。無限遠点Oは零元（すなわち加算における単位元）にあたる。また、楕円曲線上の任意の点A（点Aは無限遠点Oでもよい）に対して式（１．３）が成り立つ。
A+O=O+A=A                                                    (1.3)
【００３０】
以下では点Aの逆元を−Aと表記する。点−Aのx座標とy座標は、楕円曲線が定義される体GF(p)またはGF(2m)上の加算または減算により計算することができる。具体的には、点A=（x,y）の逆元である点−Aは、楕円曲線が式（１．１）で定義される場合は式（１．４）により表され、楕円曲線が式（１．２）で定義される場合は式（１．５）により表される。
-A=(x, -y)                                             (1.4)
-A=(x, x+y)                                            (1.5)
【００３１】
なお、ある点A１と点A２に対してA３=A１+A２と表される点A３のx座標とy座標も、点A１とA２のx座標とy座標を用いて、体GF(p)またはGF(2m)上の加減乗除により計算することができる。ここで、A２＝A１である場合には、A３＝A１＋A１を２A１とも表し、点A１から点A３＝２A１を求める演算を２倍算（doubling）という。２倍算も、体GF(p)またはGF(2m)上の加減乗除により実現される。
【００３２】
また、減算は、式（１．６）のように逆元の加算として定義される。
A1-A2=A1+(-A2)                                          (1.6)
【００３３】
さらに、楕円曲線上の点Aに対しては、スカラー値と呼ばれる整数xを用いて、スカラー倍算（scalar multiplication）と呼ばれる演算が定義される。点のスカラー倍算は、楕円曲線上の点A、スカラー値と呼ばれる整数xから、
V=xA                                               (1.7)
を満たす楕円曲線上の点Vを計算する処理である。
【００３４】
ECCでは、xを秘密情報とした処理が行われる。例えばECDH鍵交換の場合、通信相手の公開鍵となる楕円曲線上の点をA、個人鍵をdとすると、
V=dA                                               (1.8)
を満たす楕円曲線上の点Vを計算することで、安全な鍵共有を実現する。個人鍵dの値を知らない第三者は正しい共有鍵の値を算出することができない。
【００３５】
式（１．８）においては、dが個人鍵であり、攻撃者などの不正な第三者に漏洩してはならない値である。すなわち、ECCにおいては、dの値の保護が重要な耐タンパ機能となる。
【００３６】
数学的には、式（１．８）においてd以外の値が既知だとしても、dを計算する計算量が大きすぎるため、現実的な時間内にｄを求めることが難しい離散対数問題として知られている。より具体的には、楕円曲線パラメータ(Elliptic Curve Parameter)が160ビット以上の場合、A,Vの値を知っていたとしても、dの値を求めることが困難であることが知られている。
【００３７】
楕円曲線暗号における公開鍵（public key）と個人鍵（private key）として、前述したベースポイントG、個人鍵を表すスカラー値dに対し、公開鍵はV=dGを満たすVにより与えられる。すなわち、公開鍵Vは楕円曲線上の点であり、個人鍵dはスカラー値である。たとえ点GとVが攻撃者に知られていても、点GとVから個人鍵dを計算することは、莫大な計算量を必要とするので非常に困難である。これも、前述した離散対数問題の計算困難性として知られている。
【００３８】
さらに、ECCは、DHアルゴリズムによる鍵共有（key agreement）や、ディジタル署名アルゴリズム（Digital Signature Algorithm;DSA）などにも利用可能である。何の目的でECCが利用されるにしろ、ECCを利用した処理はスカラー倍算を含む。DH鍵共有を例に説明すれば次のとおりである。
【００３９】
例えば、第１の装置の個人鍵がdＡであり、第２の装置の個人鍵がdＢであるとする。すると、第１の装置の公開鍵QＡは、ベースポイントGからQＡ=dＡGと計算され、第２の装置の公開鍵QＢは、ベースポイントGからQＢ=dＢGと計算される。このように、公開鍵の生成のためにスカラー倍算が行われる。
【００４０】
また、第１の装置は自らの公開鍵QＡを第２の装置に送り、第２の装置は自らの公開鍵QＢを第１の装置に送る。すると、第１の装置はスカラー倍算によりdＡQＢを計算し、第２の装置もスカラー倍算によりdＢQＡを計算する。その結果、式（１．９）に示すように、第１の装置と第２の装置は同じ鍵Kを共有することができる。
K=dAQB=dA(dBG)=dB(dAG)=dBQA                                 (1.9)
【００４１】
ECCが、上記に例示したDH鍵共有以外の目的に利用される場合も、やはりスカラー倍算が行われる。
【００４２】
＜電力解析（PA）について＞
このように、数学的に求めることが困難な個人鍵dは、電力解析（Power Analysis;PA）を用いることで容易に解読することができることが知られている。PAの基本メカニズムは、式（０．３）を計算するべき乗剰余演算の処理手順、または式（１．８）を計算する点のスカラー倍算の処理手順に大きな関連がある。以下では、べき乗剰余演算および点のスカラー倍算の演算手順について説明したうえで、べき乗剰余演算およびスカラー倍算に対するＰＡを説明する。
【００４３】
直感的には、図１の表１に示す対応関係があり、これらの関係を踏まえることで、RSAとECCの演算を同時に理解することが容易となる。図１において、RSAにおけるべき乗剰余演算「ad (mod n)」は、ECCにおける点のスカラー倍算「dA」に対応する。RSAにおける乗算「a×d(mod n)」は、ECCにおける点の加算「A+B」に対応する。RSAにおける除算「a×d-1(mod n)」は、ECCにおける点の減算「A-B」に対応する。RSAにおける２乗算「a2 (mod n)」は、ECCにおける点の２倍算「2A」に対応する。RSAにおける値「1」は、ECCにおける「無限遠点O」に対応する。RSAにおける値「1」に関する乗算「1×a=a×1=a」は、ECCにおける「無限遠点O」に関する加算「O+A=A+O=A」に対応する。RSAにおける値「1」の２乗算「12 =1」は、ECCにおける「無限遠点O」の２倍算「2O=O」に対応する。
【００４４】
ＰＡは、1998年に発見された解析法（非特許文献２）である。図２に示されるように、暗号機能を実行中（以下、暗号処理）のスマートカード等のデバイスの消費電力を測定し、測定されたデータを用いることでデバイスの内部に格納されたユーザの秘密情報を推定、解析する方法である。（図２）
【００４５】
＜PAの種類：単純電力解析（SPA）と電力差分解析（DPA）＞
PAには、単純電力解析(Simple Power Analysis, SPA)と、電力差分解析(Differential Power Analysis, DPA)の２種類がある（図３）。いずれの攻撃も、暗号デバイスの内部状態を電力波形を用いて観察することで、個人鍵を解読する攻撃である。
【００４６】
SPAは、単一の電力波形を用いた攻撃法である。図３（ａ）に示されるように、処理内容と暗号鍵の相関関係を利用して、電力波形の形状から、暗号デバイスで実行されている処理内容を直接的に観察することで、個人鍵（暗号鍵、秘密鍵）を解読する。
【００４７】
DPAは、複数の電力波形の差分を用いた攻撃法である。図３（ｂ）に示されるように、処理内容と暗号鍵の相関関係を利用して、複数の電力波形の差分から、暗号デバイス内部で処理されているデータ値を間接的に観察することで、個人鍵（暗号鍵、秘密鍵）を解読する。
【００４８】
以上のように、PA攻撃は、スカラー倍算を実行中の装置の消費電力を測定することで、個人鍵として使われるスカラー値dを解読しようとする、非破壊攻撃の一種である。よって、何の目的でRSA,DHやECCが利用されるにしろ、個人鍵dの漏洩防止の対策としては、べき乗剰余演算やスカラー倍算を実行中の装置の消費電力波形が個人鍵dの特徴を示さないようにすることが有効である。もしPA攻撃に対して何の対策もとられないと、べき乗剰余演算やスカラー倍算を実行中の装置の消費電力波形の特徴から、個人鍵dが解読されてしまう危険性がある。SPAとDPAは異なる種類の攻撃法であるため、PAに対する対策を行うためにはSPAとDPAの両方に対する対策法が必要である。
【００４９】
後述の第１〜第６の実施形態の暗号処理装置は、SPA攻撃に対してもDPA攻撃に対しても安全であるように、かつ後述する特殊PAに対しても安全であるように、設計されている。そこで、第１〜第６の実施形態の利点についての理解を助けるため、続いて、いくつかの比較例について説明する。
【００５０】
＜バイナリ法（第１の比較例）＞
まず、第１の比較例として、「バイナリ法」について説明する。以下、この方法を第１の比較例と呼ぶ。バイナリ法は、SPA攻撃に対してもDPA攻撃に対しても脆弱である。
【００５１】
始めに、べき乗剰余演算におけるバイナリ法について説明する。
例えば、式（０．３）におけるn,a,dが共に1024ビット以上の長さをもつ場合、式（０．３）に記されるべき乗剰余を単純に計算した場合、(mod n)を用いた掛け算をd回必要とするが、21024以上の計算量を必要とするため現実的ではない。この計算量をlog2dに削減するためのテクニックとして、バイナリ法と呼ばれる演算法が知られている。
【００５２】
べき乗剰余演算におけるバイナリ法のアルゴリズムを図４に、処理概略を図５に示す。
ここで説明の便宜上、個人鍵dのビット長をuとする。また、個人鍵dのiビット目をd[i]と表記する（0≦i≦u-1）。d[0]が最下位ビット（Least Significant Bit;LSB）でありd[u-1]が最上位ビット（Most Significant Bit;MSB）である。すると、uビットの個人鍵dは、式（２．１）のように表現される。
d=d[u-1]|| …||d[1]||d[0]                             (2.1)
ここで、“||”は、１ビット以上の長さのビット列同士の連結（concatenation）を示す。
【００５３】
すると、式（０．３）と式（２．１）より、式（２．２）が得られる。
ad (mod n)=a**(2u-1d[u-1]+・・・+21d[1]+20d[0]) (mod n)
= a**(2u-1d[u-1]) (mod n)×・・・a**(21d[1]) (mod n)×a**(20d[0]) (mod n)
ただし、「**」はべき乗演算を示す。                (2.2)
【００５４】
バイナリ法は式（２．２）を利用した計算手順である。式（２．２）において、dのビット値d[i]を上位ビットから下位ビット(すなわちi=u-1から0)の順にスキャンし、dのビット値d[i]に応じて、下記式（２．３）の演算を行う。
【００５５】
ｄ[i] =1の場合：2乗算(v := v×v (mod n))の後に、
乗算(v:=v×a (mod n))を実行。
ｄ[i] =0の場合：2乗算(v := v×v (mod n))のみを実行。
(2.3)
【００５６】
例えば、個人鍵dが(1100101)2の場合について具体的に説明すると、バイナリ法は式（２．４）にしたがってべき乗剰余演算を実現する手法である。
【００５７】
ad (mod n)=(((((((12×a)2)×a)2)2)2×a)2)2×a (mod n)       (2.4)
【００５８】
すなわち、スカラー倍算の結果を変数vで表すことにすると、バイナリ法では式（２．５）のとおり、変数vがまず値1により初期化される（図４の４０１行）。
v=O                                           (2.5)
【００５９】
その後、MSBからLSBへと順に（図４の４０２行から４０５行のループ処理）、式（２．３）が実行される。すなわち、２乗算によりv×v (mod n)を求め（図４の４０３行）、その後、もしd[i]=1ならば乗算を行い、得られた結果を変数vに代入する（図４の４０４行）、という処理が繰り返される。そして、最終的に変数vに得られた値が出力される（図４の４０６行）。
【００６０】
具体的には、d[6]=1なので、式（２．６）のとおり、６ビット目に対応して２乗算と乗算が行われる（図５のＤ６とＡ６）。
v=12×a (mod n)                               (2.6)
【００６１】
そして、d[5]=1なので、式（２．７）のとおり、５ビット目に対応して２乗算と乗算が行われる（図５のＤ５とＡ５）。
v=(12×a)2×a (mod n)                         (2.7)
【００６２】
また、d[4]=0なので、式（２．８）のとおり、４ビット目に関しては２乗算のみが行われ、加算は行われない（図５のＤ４）。
v=((12×a)2×a)2 (mod n)                       (2.8)
【００６３】
同様に、d[3]=0なので、式（２．９）のとおり、３ビット目に関しても２乗算のみが行われ、加算は行われない（図５のＤ３）。
v=(((12×a)2×a)2)2 (mod n)                    (2.9)
【００６４】
次の２ビット目に関しては、d[2]=1なので、式（２．１０）のとおり、２乗算と乗算が行われる（図５のＤ２とＡ２）。
v=((((12×a)2×a)2)2)2×a (mod n)               (2.10)
【００６５】
また、次の１ビット目に関しては、d[1]=0なので、式（２．１１）のとおり、２乗算のみが行われ、乗算は行われない（図５のＤ１）。
v=(((((12×a)2×a)2)2)2×a)2(mod n)            (2.11)
【００６６】
そして、最後の０ビット目に関しては、d[0]=1なので、式（２．１２）のとおり、２乗算と乗算が行われる（図５のＤ０とＡ０）。
v=(((((((12×a)2×a)2)2)2×a)2)2×a (mod n)      (2.12)
【００６７】
以上のようにしてd[i]=1であるiビット目に対応して乗算された点aの指数は、式（２．１２）から理解されるように、2ｉである。よって、上記の式（２．５）〜（２．１２）とともに例示した手順により、確かに式（２．４）にしたがって、v=ad (mod n)が得られる。
【００６８】
上記の例から明らかなとおり、バイナリ法によれば、２乗算の回数は個人鍵dのビット長uに等しく、乗算の回数は個人鍵dのハミング重み（Hamming weight）に等しい。よって、バイナリ法によるべき乗剰余演算の計算量は、2ｕのオーダではなく、uのオーダに抑えられる。
【００６９】
ここで、バイナリ法においては、２乗算と乗算の演算シーケンスが、そのままdのビット値と連動しており、SPAはこの性質を利用してdを解読する。つまり、図６の電力波形例に示されるように、乗算と２乗算の処理の違いを、電力波形を用いて区別できるような環境においては、以下のような解読が可能となる。すなわち、２乗算のあとに乗算を実行しているならば指数dのビット値は1であると解読できる（図６の６０１または６０３）。一方、２乗算のみを実行しているならば指数dのビット値は0であると解読できる（図６の６０２）。この解読をdの全ビットについて行うことでSPAが成功する。
【００７０】
SPAへの対策法として、dのビット値に関係なく乗算と２乗算の演算パターンを一定化する方法が知られており、後に述べるA&D-always法もこの対策法を実現する手法である。
次に、点のスカラー倍算におけるバイナリ法について説明する。
【００７１】
例えば個人鍵dが160ビットである場合、dは非常に大きな数（例えば、2160に近い数）である可能性がある。よって、式（１．８）の定義どおりにスカラー倍算を実行することは、非常に多くの回数の点の加算をともなうため、非現実的である。バイナリ法は、べき乗剰余演算の場合と同様に、スカラー倍算の計算量のオーダを個人鍵dのビット数のオーダに抑えるための手法である。
【００７２】
点のスカラー倍算におけるバイナリ法のアルゴリズムを図７に、処理概略を図８に示す。
説明の便宜上、べき乗剰余演算の場合と同様に、個人鍵dのビット長をuとする。また、個人鍵dのiビット目をd[i]と表記する（0≦i≦u-1）。d[0]が最下位ビット（LSB）でありd[u-1]が最上位ビット（MSB）である。これにより、uビットの個人鍵dは、べき乗剰余演算の場合と同様に、前述した式（２．１）のように表現される。
【００７３】
すると、式（１．８）と式（２．１）より、式（３．１）が得られる。
dA=2u-1d[u-1]A+・・・+21d[1]A+20d[0]A                    (3.1)
【００７４】
バイナリ法は式（３．１）を利用した計算手順である。式（３．１）において、dのビット値d[i]を上位ビットから下位ビット(すなわちi=u-1から0)の順にスキャンし、dのビット値d[i]に応じて、下記式（３．２）の演算を行う。
【００７５】
ｄ[i] =1の場合：2倍算(v := 2×v)の後に、加算(v:=v+A )を実行。
ｄ[i] =0の場合：2倍算(v := 2×v)のみを実行。
(3.2)
【００７６】
点のスカラー倍算における式（３．２）とべき乗剰余演算における式（２．３）の関係は、前述した図１の対応関係より、理解することができる。
【００７７】
例えば、個人鍵dが(1100101)2の場合について具体的に説明すると、バイナリ法は式（３．３）にしたがってスカラー倍算を実現する手法である。
dA=2(2(2(2(2(2(2O+A)+A)))+A))+A=26A+25A+22A+A           (3.3)
【００７８】
すなわち、スカラー倍算の結果を変数Vで表すことにすると、バイナリ法では式（３．４）のとおり、変数Vがまず無限遠点Oにより初期化される（図７の７０１行）。
V=O                                            (3.4)
【００７９】
その後、MSBからLSBへと順に（図７の７０２行から７０５行のループ処理）、式（３．２）が実行される。すなわち、２倍算により2Vを求め（図７の７０３行）、その後、もしd[i]=1ならば点Aの加算を行い、得られた結果を変数Vに代入する（図７の７０４行）、という処理が繰り返される。そして、最終的に変数Vに得られた値が出力される（図７の７０６行）。ここで、図７の７０３行の「ECDBL(V)」は、変数Vの値に対して２倍算2Vを計算する関数処理を示す。また、図７の７０４行「ECADD(V,A)」は、変数Vの値に変数Aの値を加算する関数処理を示す。
【００８０】
具体的には、d[6]=1なので、式（３．５）のとおり、６ビット目に対応して２倍算と加算が行われる（図８のＤ６とＡ６）。
V=2O+A                                         (3.5)
【００８１】
そして、d[5]=1なので、式（３．６）のとおり、５ビット目に対応して２倍算と加算が行われる（図８のＤ５とＡ５）。
V=2(2O+A)+A                                    (3.6)
【００８２】
また、d[4]=0なので、式（３．７）のとおり、４ビット目に関しては２倍算のみが行われ、加算は行われない（図８のＤ４）。
V=2(2(2O+A)+A)                                 (3.7)
【００８３】
同様に、d[3]=0なので、式（３．８）のとおり、３ビット目に関しても２倍算のみが行われ、加算は行われない（図８のＤ３）。
V=2(2(2(2O+A)+A))                              (3.8)
【００８４】
次の２ビット目に関しては、d[2]=1なので、式（３．９）のとおり、２倍算と加算が行われる（図８のＤ２とＡ２）。
V=2(2(2(2(2O+A)+A)))+A                         (3.9)
【００８５】
また、次の１ビット目に関しては、d[1]=0なので、式（３．１０）のとおり、２倍算のみが行われ、加算は行われない（図８のＤ１）。
V=2(2(2(2(2(2O+A)+A)))+A)                      (3.10)
【００８６】
そして、最後の０ビット目に関しては、d[0]=1なので、式（３．１１）のとおり、２倍算と加算が行われる（図８のＤ０とＡ０）。
V=2(2(2(2(2(2(2O+A)+A)))+A))+A                 (3.11)
【００８７】
以上のようにしてd[i]=1であるiビット目に対応して加算された点Aの係数は、式（３．１１）から理解されるように、2ｉである。よって、上記の式（３．４）〜（３．１１）とともに例示した手順により、確かに式（３．３）にしたがって、V=dAが得られる。
【００８８】
上記の例から明らかなとおり、バイナリ法によれば、２倍算の回数は個人鍵dのビット長uに等しく、加算の回数は個人鍵dのハミング重み（Hamming weight）に等しい。よって、バイナリ法によるスカラー倍算の計算量は、べき乗剰余演算の場合と同様に、2ｕのオーダではなく、uのオーダに抑えられる。
【００８９】
ここで、点のスカラー倍算のバイナリ法においては、２倍算と加算の演算シーケンスが、そのままdのビット値と連動しており、SPAはこの性質を利用してdを解読する。つまり、図９の電力波形例に示されるように、点の加算と２倍算の処理の違いを、電力波形を用いて区別できるような環境においては、以下のような解読が可能となる。すなわち、２倍算のあとに加算を実行しているならば指数dのビット値は1であると解読できる（図９の９０１または９０３）。一方、２倍算のみを実行しているならば指数dのビット値は0であると解読できる（図９の９０２）。この解読をdの全ビットについて行うことでSPAが成功する。
【００９０】
べき乗剰余演算の場合と同様に、点のスカラー倍算におけるSPAへの対策法としても、dのビット値に関係なく加算と２倍算の演算パターンを一定化する方法が知られており、後に述べるA&D-always法がこの対策法を実現する手法である。
【００９１】
上述のべき乗剰余演算または点のスカラー倍算におけるバイナリ法は、SPA攻撃だけではなく、DPA攻撃に対しても脆弱である。なお、DPA攻撃への安全性に関する説明の理解を助けるために、DPAによる攻撃を行う場合の基本アイデアを説明する。
【００９２】
バイナリ法は、d=d[u-1]|| … ||d[1] ||d[0]（式（２．１））に対して、ad (mod n)（べき乗剰余演算の場合）またはdA（点のスカラー倍算の場合）を計算するために、
ad[u-1](mod n)→ad[u-1]||d[u-2](mod n)→ad[u-1]||d[u-2] ||d[u-3](mod n)→...
または、
d[u-1]A→(d[u-1]||d[u-2])A→(d[u-1]||d[u-2]||d[u-3])A→...
のように、スカラー値または指数（d）のビットを上位から１つずつ増やしながら、最終的にad (mod n)またはdAを計算する。
【００９３】
図４または図７に示す変数iに関するループ処理（図４の４０２から４０５または図７の７０２から７０５）を１回実行するごとに、指数が1ビット増えた計算結果が変数vまたはVに格納される。
【００９４】
例えば、d=(1101)2の場合、
C(1)2(mod n)→C(11)2(mod n)→C(110)2(mod n)→C(1101)2(mod n)
または、
(1)2A→(11)2A→(110)2A→(1101)2A
の順に計算を行う。
【００９５】
DPAを行う攻撃者は、「指数またはスカラー値のビット値を1つずつ増やしながら計算を行う」というバイナリ法の性質を利用して、dのビットを1ビットずつ予想しながら、その予想が正しいかどうかを電力波形により識別することを繰り返す。一般的な総当り法による攻撃の場合、個人鍵の解読は2d （べき乗剰余演算の場合）またはd（点のスカラー倍算の場合）に比例した手間が必要である。これに対して、DPAを用いることで、d（べき乗剰余演算の場合）またはlog2d（点のスカラー倍算の場合）に比例した手間で個人鍵を解読することができる。
【００９６】
例えば、dの最上位ビットが0の場合、a0 (mod n)（べき乗剰余演算の場合）または0A (mod n)（点のスカラー倍算の場合）で表されるデータ値が暗号デバイス内部で計算され、内部のメモリにロード／ストアされる。一方、dの最上位ビットが、１の場合、a1 (mod n)（べき乗剰余演算の場合）または1A (mod n) （点のスカラー倍算の場合）で表されるデータ値が暗号デバイス内部で計算され、内部のメモリにロード／ストアされる。
【００９７】
暗号デバイスを含めた一般的なハードウェアは、ロード・ストアされるデータ値のハミング重み（'1'）に比例した電力を消費するという性質が知られている。DPAはこの性質を利用することで、ロード／ストアされたデータ値がa0 (mod n)もしくはa1 (mod n)（べき乗剰余演算の場合）、または1Aもしくは0A（点のスカラー倍算の場合）のいずれであるかを判別することができる。この結果、例えばdの最上位ビットが1であることが分かった後に、1つ下位のビット値を解読するためには、同様の手順を用いて、以下の判別を行う。すなわち、ロード／ストアされたデータ値がa(10)2 (mod n)もしくはa(11)2 (mod n)（べき乗剰余演算の場合）、または(10)2Aもしくは(11)2A（点のスカラー倍算の場合）のいずれであるかを判別する。
【００９８】
DPAの具体的な手順は以下の(DPA-1)から(DPA-6)に示される。
(DPA-1)     暗号文VとしてV=Mj(j=1,2,…,L)を入力した消費電力
Powj(t) (j=1,2,…,L)を測定する。
ただし、tは時刻情報である。
(DPA-2)     i:=u-1;に初期化する
(DPA-3)     攻撃者は、d[i]のビット値を予想する。
【００９９】
(DPA-4)     攻撃者は、既知のMj,d[u-1]||… ||d[i+1]と、
予想されたd[i]から、
Gj=(d[u-1]||…||d[i+1]||d[i])Mj
の値をj=1,2,..,Lそれぞれについて計算する。
この計算の結果に応じて、以下に示す基準により、
L個の消費電力データPowj(t)を２つのグループに分類する。
グループ1 ：Mjに対し、Gjのx座標(またはy座標、のどちらか
に着目)の最下位ビットが1となるPowj(t)の集合
グループ0 ：Mjに対し、Gjのx座標(またはy座標、のどちらか
に着目)の最下位ビットが0となるPowj(t)の集合
【０１００】
(DPA-5)     上記でグループ分けした消費電力データに対し、
(グループ1に属するPowj(t)の平均)−(グループ0に属するPowj(t)の平均)
で示される差分波形Diff(t)を作成する。
その結果、図１０（ａ）に示すようなスパイクが差分波形に現
れる場合、予想したd[i]が正しいと判定し、
図１０（ｂ）に示すような平坦な波形の場合、
予想したd[i]が誤っていると判定する。
【０１０１】
(DPA-6)     i:=i-1と計算した結果、i30の場合、まだ解読していないビット
があるため、(DPA-3)に戻る。i<0の場合、全てのdのビット値
が解読できたので終了する。
【０１０２】
DPA-5において、d[i]の予想が正しい場合は、Gjで表される常にデータ値のx座標(y座標)の最下位ビットが全て'1'となる消費電力のグループ１から、x座標(y座標)の最下位ビットが全て'0'となる消費電力のグループ０を引いているので、この'0','1'の消費出力差がスパイクとして出現する（図１０（ａ））。d[i]の予想が誤っている場合は、Gjのx座標(y座標)の最下位ビットはグループ0,1ともに'0'と'1'が混在しているため、消費電力の差が発生しないので、平坦な波形となる（図１０（ｂ））。
【０１０３】
DPA対策法として、図１１に示すデータのランダム化と呼ばれる方法が知られている。DPA対策なしの場合、図１１（ａ）に示すような挙動となる。すなわち、計算データ値の系列ad[u-1](mod n)→ad[u-1]||d[u-2](mod n)→ad[u-1]||d[u-2] ||d[u-3](mod n)→...（べき乗剰余演算）、またはd[u-1]A→(d[u-1]||d[u-2])A→(d[u-1]||d[u-2]||d[u-3])A→...（点のスカラー倍算）が個人鍵d[i]の値から一意に決定する。これに対し、図１１（ｂ）に示すように、乱数を用いてこの計算データ値をかく乱することで、計算データの系列値がランダム化される。このため、消費電力と個人鍵の相関を隠蔽し、DPAに安全な処理を実現することができる。なお、演算の最後には、ランダム化した分を補正するための正規化の処理が実行され、最終的にべき乗剰余演算値ad (mod n)またはスカラー倍算値dAが得られる。後に述べる「ランダム化A&D-always法」と呼ばれる方法（第３の比較例）では、A&D-always法をベースとすることでSPA対策を実現しつつ、データのランダム化を併用することでDPA対策も同時に実現している。
【０１０４】
＜A&D-always法を用いたPA対策法（第２の比較例）＞
SPAに対する対策法のひとつとして、A&D-always法と呼ばれる方法が知られている。以下、この方法を第２の比較例と呼ぶ。A&D-always法は、Add-and-Double-always法の省略であり、個人鍵dのビット値に関係なく、常に2乗算と乗算（べき乗剰余演算の場合）または点の２倍算と加算（点のスカラー倍算の場合）を同じパターンで実行することが特徴である。
【０１０５】
A&D-always法を用いたべき乗剰余演算アルゴリズムを図１２に示す。A&D-always法の概略を図１３に示す。
個人鍵dのビット長をuとする。また、個人鍵dのiビット目をd[i]と表記する（0≦i≦u-1）。d[0]が最下位ビット（LSB）でありd[u-1]が最上位ビット（MSB）である。これにより、uビットの個人鍵dは、前述した式（２．１）のように表現される。また、べき乗剰余演算における基数をa、法をnとする。出力値v=ad (mod n)である。
【０１０６】
基本的には、d[i]=0の場合の演算結果（図１３の各「２乗算」の出力）をバッファt[0]に（図１２の１２０１行、１２０３行）、d[i]=1の場合の演算結果（図１３の各「乗算」の出力）をバッファt[1]に（図１２の１２０４行）、それぞれ計算する。そして、d[i]のビット値に応じて正しい値（図１３の「セレクト」の出力）をバッファt[0]にコピーする（図１２の１２０５行）。以上の演算を、dの全ビットに対して繰り返す（図１２の１２０２行から１２０６行までのループ処理）。
【０１０７】
図１３の第１段、第２段として示されるように、各演算段において、t[0]とt[1]の計算に、それぞれ２乗算と乗算を実行するため、dのビット値に関係なく、常に２乗算と乗算が繰り返される。このため、電力波形は図１４に示されるようになり、波形からdのビット値を得ることができないため、SPAに安全となる。
【０１０８】
なお、後のランダム化法による説明を容易にするために、基数a、秘密鍵d、法nに対して図１２のアルゴリズムによってべき乗剰余演算に対するA&D-always法を実行する処理を、関数ModExp_ADalways(a, d, n)と表現する。
【０１０９】
A&D-always法は、ECCにおける点のスカラー倍算に対しても適用できる。図１５に、A&D-always法を用いた点のスカラー倍算アルゴリズムを示す。また、概略は、前述した図１３に示される。
個人鍵dの表現は、べき乗剰余演算の場合と同様である。また、点のスカラー倍算における楕円曲線上の点をAとする。出力値v=dAである。
【０１１０】
べき乗剰余演算の場合と同様に、d[i]=0の場合の演算結果（図１３の各「ECDBL」の出力）をバッファT[0]に（図１５の１５０１行、１５０３行）、d[i]=1の場合の演算結果（図１３の各「ECADD」の出力）をバッファT[1]に（図１５の１５０４行）、それぞれ計算する。そして、d[i]のビット値に応じて正しい値（図１３の「セレクト」の出力）をバッファT[0]にコピーする（図１５の１５０５行）。以上の演算を、dの全ビットに対して繰り返す（図１５の１５０２行から１５０６行までのループ処理）。ここで、図１５の１５０３行の「ECDBL(T[0])」は、バッファT[0]の値に対して２倍算2T[0]を計算する関数処理を示す。また、図１５の１５０４行「ECADD(T[0],T[1])」は、バッファT[0]の値にバッファT[1]の値を加算する関数処理を示す。
【０１１１】
図１３の第１段、第２段として示されるように、各演算段において、T[0]に対応するt[0]とT[1]に対応するt[1]の計算に、それぞれ点の２倍算（「ECDBL」）と点の加算（「ECADD」）を実行するため、dのビット値に関係なく、常に点の２倍算と点の加算が繰り返される。このため、電力波形は図１４に示されるようになり、波形からdのビット値を得ることができないため、べき乗剰余演算の場合と同様に、SPAに安全となる。
【０１１２】
なお、後のランダム化法による説明を容易にするために、秘密鍵d、楕円曲線上の点Aに対して図１４のアルゴリズムによって点のスカラー倍算に対するA&D-always法を実行する処理を、関数PointMul_ADalways(d, A)と表現する。
【０１１３】
＜ランダム化A&D-always法によるDPA対策法（第３の比較例）＞
A&D-always法を用いることで、SPAを防ぐことができるが、DPAを防ぐことはできない。DPAへの対策法として、個人鍵dをランダム化する方法が、非特許文献３に開示されている。以下、この方法を、従来法１と呼ぶ。
従来法１従来法２  従来法１は、dを用いたべき乗剰余もしくはスカラー倍算を実行する代わりに、
dj’=d+rj#E   (rj:20ビット乱数)     (4.1)
を満たすdj’を用いたべき乗剰余もしくはスカラー倍算を実行する。rjは演算を実行するごとに変化する乱数rjであり、#Eは位数と呼ばれるパラメータである。従来法１においては、セキュリティと処理速度のトレードオフを考慮し、乱数rjは20ビットが推奨されている。位数#Eは、べき乗剰余もしくは点のスカラー倍算における周期を表す値である。そして、べき乗剰余演算の場合、
a#E=1 (mod n)     (4.2)
の等式が、点のスカラー倍算の場合
#EA=O     (4.3)
の等式が、任意のaもしくはAについて成立することが知られている。従来法１を用いることで、dj’の全ビットが乱数rjによってランダム化された値となるため、DPAに対して安全となる。また、#Eの周期性を考慮すると、
adj(mod n)= ad+rj#E =ad ×(a#E)rj=ad ×1=ad(mod n)
および
dj’A=dA+rj(#EA)=dA+O=dA
であり、計算結果は個人鍵dに対する計算結果と一致する。
【０１１４】
従来法１は、乱数を用いた乗算により指数をランダム化するDPA対策法であった。これに対して、乱数を用いた除算により指数をランダム化する方法が非特許文献４に開示されている。従来法２以下、この方法を、従来法２と呼ぶ。
【０１１５】
従来法２では、指数dと乱数rjから新しい指数dj’,ejを以下の式（４．４）および（４．５）に従い計算する。
dj’=ed/rju           (4.4)
ej’=d (mod rj)       (4.5)
ただし、exuはxの整数部を表す記号であり、例えばe3.3u=3, e7.8u=7, e6u=6である。乱数rjは、従来法１と同様に、演算を実行するごとに変化する20ビット乱数である。 式（４．４）および（４．５）で表されるdj’, ej’を生成することで、dをrjで割ったときの商と余りの値をそれぞれdj’, ej’に与えられる。従来法２では、この生成された値を用いて、
(ari)dj’ ×aej’ (mod n)      (4.6)
に示されるべき乗剰余演算、もしくは
dj’(rjA)+ej’A              (4.7)
に示される点のスカラー倍算を行う。rj, dj’, ej’の全ビット値はランダム化されているため、DPAに安全な処理を実現することができる。また、dj’, ej’はそれぞれdをrjで割ったときの商と余りの値であるため、
d=dj’×rj+ej                (4.8)
が成立する。すなわち、式（４．８）により式（４．６）と（４．７）はそれぞれ
(ari)dj’ ×aej’ (mod n)=adj’rj+ej’ (mod n)=ad (mod n)
dj’(rjA)+ej’A=(dj’ × rj +ej )A=dA
と変形でき、個人鍵dに対する計算結果と一致する。
【０１１６】
電力解析への対策を行うためには、SPAとDPAの片方だけ防ぐのではなく、同時に防ぐ必要がある。なぜなら、いずれの攻撃が成功しても、攻撃者は個人鍵dの値を得ることができるからである。SPA,DPA対策を実行するためには、SPA対策とDPA対策を組み合わせる方法が一般的である（図15）。これらの対策法を組み合わせることで、両方の攻撃を防ぐことができる。
【０１１７】
電力解析への対策を行うためには、SPAとDPAの片方だけ防ぐのではなく、同時に防ぐ必要がある。なぜなら、いずれの攻撃が成功しても、攻撃者は個人鍵dの値を得ることができるからである。SPA,DPA対策を実行するためには、SPA対策とDPA対策を組み合わせる方法が一般的である。これらの対策法を組み合わせることで、両方の攻撃を防ぐことができる。
【０１１８】
すなわち、A&D-always法によるSPA対策法と、従来法１に示すDPA対策法もしくは従来法２に示すDPA対策法を組み合わせることで、SPAとDPAの両方を防ぐことができる。
A&D-always法によるSPA対策法と従来法１に示すDPA対策法の組み合わせによるべき乗剰余演算のアルゴリズムを図１６に、A&D-always法によるSPA対策法と従来法２に示すDPA対策法の組み合わせによるべき乗剰余演算のアルゴリズムを図１７に示す。
【０１１９】
図１６は非常にシンプルである。まず、20ビット乱数rjを生成する（１６０１行）。次に、この乱数rjと入力値である秘密鍵dおよび位数#Eを用いて、式（４．１）に示す個人鍵のランダム化を行う（１６０２行）。そして、その結果であるdj’=d+#Erjを指数、基数aと法nを入力値として、図１２のA&D-always法によるべき乗剰余演算の関数ModExp_Adalwaysを実行する（１６０３行）。すなわち、入力値である個人鍵dの代わりにランダム化された個人鍵dj’を使ってA&D-always法が実行される。そして、この結果vが出力される（１６０４行）。このべき乗剰余演算は、A&D-always法を用いたSPA対策を行っている。
【０１２０】
図１７は、１７０１行で20ビット乱数rjを生成し、その後１７０２行と１７０３行にて式（４．４）と（４．５）に示されるランダム化を行った個人鍵dj’とej’を生成する。その後、１７０４行において、rjを指数、基数aと法nを入力値として、図１２のA&D-always法によるべき乗剰余演算の関数ModExp_Adalwaysを実行する。これにより、a’=arj (mod n)を計算する。次に、１７０５行において、dj’を指数、基数aと法nを入力値として、A&D-always法によるべき乗剰余演算の関数ModExp_Adalwaysを実行する。これにより、t= (a’)dj’ (mod n)を計算する。さらに、１７０６行において、ej’を指数、基数aと法nを入力値として、A&D-always法によるべき乗剰余演算の関数ModExp_Adalwaysを実行する。これにより、u=aej’ (mod n)を計算する。最後に、１７０７行にて乗算処理v:=t×u (mod n)を計算する。これら１７０４，１７０５，１７０６，１７０７行の計算により、式（４．６）が計算され、最終結果v=ad (mod n)を得る。１７０４，１７０５，１７０６，１７０７行に示すべき乗剰余演算は、A&D-always法を用いたSPA対策を行っている。
【０１２１】
図１６，図１７に示すアルゴリズムは、点のスカラー倍算にも容易に拡張できる。A&D-always法によるSPA対策法と従来法１に示すDPA対策法の組み合わせによる点のスカラー倍算のアルゴリズムを図１８に、A&D-always法によるSPA対策法と従来法２に示すDPA対策法の組み合わせによる点のスカラー倍算のアルゴリズムを図１９に示す。
【０１２２】
図１８において、１８０１，１８０２行は、それぞれ図１６の１６０１，１６０２行と同じ処理を実行する。１８０３行は、図１６の１６０３行のA&D-always法によるべき乗剰余演算の関数ModExp_Adalwaysの代わりに、楕円曲線上の点Aを入力として、A&D-always法による点のスカラー倍算の関数PointMul_ADalwaysを実行する。これにより、最終結果V=dAを得て出力される（１８０４行）。
【０１２３】
図１９において、１９０１，１９０２，１９０３行は、それぞれ図１７の１７０１，１７０２，１７０３行と同じ処理を実行する。１９０４，１９０５，１９０６行は、図１７の１７０４，１７０５，１７０６行のA&D-always法によるべき乗剰余演算の関数ModExp_Adalwaysの代わりに、楕円曲線上の点Aを入力とし、A&D-always法による点のスカラー倍算の関数PointMul_ADalwaysを実行する。これにより、A’，T，Uをそれぞれ得る。そして、１９０７行は、図１７の１７０７行の乗算処理の代わりに点の加算V:=T＋Uを計算する。これら１９０４，１９０５，１９０６，１９０７行の計算により、式（４．７）が計算され、最終結果V=dAを得て出力される（１９０８行）。
【０１２４】
＜特殊PAによる攻撃法＞
上述の第３の比較例に示されるように、A&D-always法によるSPA対策と、従来法１もしくは従来法２に示すDPA対策を組み合わせることで、SPAとDPAの両方に安全となり、電力解析を完全に防ぐことができると考えられていた。
【０１２５】
しかし、発明者独自の分析により、これらの対策法を用いたとしても、電力波形を利用することで個人鍵dの値を解読できる攻撃法が発見された。この攻撃を、本発明の明細書では「特殊PA」と呼ぶことにする。
【０１２６】
SPA,DPA対策を行っていたとしても、特殊PAに対する対策を行わなければ個人鍵dの情報が攻撃者に漏洩するので、この攻撃に対する対策は重要な課題と考えられる。
以下では、本発明が課題とする特殊PAによる攻撃法について説明を行う。
【０１２７】
べき乗剰余演算において実行される乗算(t´u (mod n))や点のスカラー倍算処理において実行される点の加算(T+U)の演算処理を行っているときの電力波形は、データ値に依存する。データ値と消費電力の差異を表す簡単な事例を図２０に示す。例えば、1×2 (mod n)の消費電力波形と、3×4(modn)の消費電力波形の差分を作成すると、乗算におけるデータ値の相違から、これら２つの消費電力は異なるため、差分波形にスパイクが現れる（図２０（ａ））。これに対し、1×2 (mod n)の消費電力波形同士の差分を取ると、消費電力が同一のため平坦な波形となる（図２０（ｂ））。同様の性質は、点の加算についても成立する（図２１）。すなわち、例えば、すなわち、A+2Aの消費電力波形と、3A+4Aの消費電力波形の差分を作成すると、乗算におけるデータ値の相違から、これら２つの消費電力は異なるため、差分波形にスパイクが現れる（図２１（ａ））。これに対し、A+2Aの消費電力波形同士の差分を取ると、消費電力が同一のため平坦な波形となる（図２１（ｂ））。図２０，図２１に示される性質は一般的に知られている性質であるが、特殊PAはこの性質を攻撃に応用する。
【０１２８】
＜個人鍵dがランダム化されていない場合の特殊PA＞
べき乗剰余演算および点のスカラー倍算に対する特殊PA攻撃を説明する。ここでは、A&D-always法によるSPA対策を行う、個人鍵dのランダム化は行われないデバイスを攻撃対象と仮定する。個人鍵dのランダム化を伴うデバイスへの攻撃は、この次に説明する。
【０１２９】
特殊PAにおいては、攻撃者は、図２２に示されるように、べき乗剰余の基数としてa=Pを入力した場合（図２２（ａ））と、a=Qを入力した場合（図２２（ｂ））のそれぞれの消費電力波形を測定し、波形の差分（図２２（ｃ））を作成する。このとき、２乗算(S)の差分波形において、ピークが発生している部分と平坦な部分を識別し、このピーク／平坦な部分のパターン情報を元に、個人鍵dを解読する（ただし、最初のSは常に平坦となるため、攻撃者は無視する）。
【０１３０】
ここで、a=P, a=Qは、攻撃者が意図的に選択する値であり、P,Qを選択メッセージペアと呼ぶ。この値の設定方法には複数のバリエーションが考えられる。本発明の発明者が発見した攻撃法においては、べき乗剰余演算を用いるRSAやDHにおいては、P≠Q, かつPα=Qα (mod n)を満たすP,Qを選択する。ただし、αは3以上の素数である。また、点のスカラー倍算を用いるECCの場合は、αP=αQ,P≠Qを満たすP,Qを選択する。
【０１３１】
最初に、特殊PAの基本形である、α=3の場合の攻撃法について説明する。この攻撃法では、べき乗剰余演算の場合、P1Q, かつPα=Qα (mod n)を満たす選択メッセージペアを入力し、差分波形を作成する。その結果、図２２に対応する図２３に例示されるように、べき乗剰余演算の指数部が3の倍数となる時に差分波形は平坦となり、3の倍数でない時に差分波形はピークを示す。
【０１３２】
すなわち、差分波形を観察することで、左からi番目のSの差分がスパイクであるか平坦であるかを観察することで、dの最上位からi-1ビット値d[u-1]||…||d[u - i+1 ]が3の倍数であるか、そうでないかを攻撃者は判別できる。図２３の例では、左から2番目のSの差分波形はスパイクであるが、3番目のSの差分波形は平坦である。事実、図２３の例においては、d[2]||d[1]||d[0]=(111)2に対して、d[2]=1であり３の倍数ではないが、d[2]||d[1]=(11)2=3であり3の倍数である。
【０１３３】
A&D-always法の計算処理は、ad[u-1]||…||d[u-i+1](mod n)の値から、指数を1ビット増やしたad[u-1]||…||d[u-i +1]||d[u- i] (mod n)を計算することを、dの全ビット分について繰り返す処理である。このことを考慮すると、d[u-1]||…||d[u-i+1]の値が3の倍数であることの正否と、d[u-1]||…||d[u-i + 1]||d[u - i ]が3の倍数であることの正否の関係は、1ビット増えたビット値d[u-i]の値に応じて決定し、その関係は図２４の表２に示される通りとなる。
【０１３４】
表２において、3の倍数でない部分は破線囲っている。例えば、表２において、d[u-1]||…||d[u-i+1]が3の倍数=3kであるとき、d[u-i]=0ならばd[u-1]||…||d[u-i+1]||d[u-i]=d[u-1]||…||d[u-i+1]||0=3k×2=6kであり３の倍数となり、d[u-i]=1ならばd[u-1]||…||d[u-i+1]||d[u-i]=d[u-1]||…||d[u-i+1]||1=3k×2+1=6k+1であり3の倍数ではなくなる。表２のほかのマスについても、同様の分析を行うことができ、その結果が表２として与えられている。ここで、攻撃者は、特殊PAを用いて、白色と灰色がどのような順番で並ぶかを観察することができることを考慮すると、攻撃者は次のような解読が行える。すなわち、白色(3の倍数)が観察されたとき続いて白色（３の倍数）が観察されるならば、d[u-i]=0であることを攻撃者は解読できる。また、白色（３の倍数）が観察されたとき続いて灰色（3の倍数でない）が観察されるならば、d[u-i]=1であることを攻撃者は解読できる。すなわち、攻撃者は白色と灰色のパターンから、dのビット値を解読することに成功する。また、表２において、d[u-1]||…||d[u-i+1]が3の倍数でない=3k+1のパターンに着目すると、これに続いて3の倍数となるパターンはd[u-i]=1に限定されることがわかる。すなわち、灰色に続いて白色が観察されるのは、d[u-i]=1に限定されることが分かる。
【０１３５】
このような観察によるdのビット値の解読は、その他の白色と灰色の他の組み合わせについても成功する。それを説明するために、表２に記した関係を状態遷移として記した図を、図２５に示す。
【０１３６】
図２５は、現在の状態は、d[u-1]||…||d[u-i+1] (mod 3) (=0,1, or 2)の値を表しており、d[u-i]のビット値を遷移条件として、新しい状態d[u-1]||…||d[u-i+1]||d[u-i] (mod 3) (=0,1 or 2)に遷移する状態遷移図である。白色の状態は3の倍数であることを、灰色の状態は3の倍数ではないことを表す。この状態遷移図では、３つの各状態に対し、遷移条件であるd[u-i]の値が2通りあるので、取りうるd[u-i]の値は2´3=6通りである。
【０１３７】
これらのd[u-i]の値に応じた６通りの状態遷移条件のうち、以下の３パターンについては、既に説明したとおりd[u-i]の値が解読できるパターンである。
・状態0(白色)a状態0(白色)の遷移、d[u-i]=0    (5.1)
・状態0(白色)a状態1(灰色)の遷移、d[u-i]=1    (5.2)
・状態1(灰色)a状態0(白色)の遷移、d[u-i]=1    (5.3)
【０１３８】
すなわち、d[u-i]の値が取りうる６通りのパターンのうち、３パターンが解読できるため、dの全体のビット値の半分が解読できることになる。上記には灰色から灰色の遷移は含まれないが、図２５の遷移図の性質を利用することで、灰色から灰色の遷移についても、一部のd[u-i]のビット値を解読できる。この解読について説明するために、図２５の状態遷移図において、2回分の遷移の全パターンを網羅した結果を図２６に示す。
【０１３９】
状態0,1,2から始まるパターンがそれぞれ４通り(2ビット分の遷移=22通り)であるので、合計3´4=12パターンとなる。これらの12パターンそれぞれについて、攻撃者が観察可能な情報も合わせて図２６に示す。攻撃者が観察可能な情報は記号により記されており、白色は”W”により、灰色は”G”により表現される。図２６に示された、WもしくはGが３連続するパターンにおいて、”GGG”以外の７パターンは全て一意に識別できるパターンであるので、鍵ビットを一意に解読できる。すなわち、全12パターン中7パターンが鍵ビットを解読できるパターンであるので、少なくとも全体のビット値の7/12を解読可能である。すくなくとも、と表現したのは、図２６を用いた解読手法は１回の解読により２ビット連続での解読が可能であるという性質を利用すると、さらに解読できるビット長を伸ばすことができるからである。この考え方を図２７に示す。
【０１４０】
図２７に示す攻撃法では、攻撃者は最初に”G”と”W”の全パターンを識別する。この後、GもしくはWから構成されるパターンを、３パターン単位で読み込み、図２６のパターンと照合することで、2ビット単位の部分鍵を解読するプロセスを繰り返す。このとき、３パターン単位の読み込みは、最も右端の３パターンから開始し、次に読み込むときは最右端の”G”W”の1個分を除いた３パターンを読み込む、その次は最右端の”G”W”の2個分を除いた３パターンを読み込む、といったように、右から左にスライドする読み込みを繰り返す。３パターンが”GGG”以外については、2ビット部分鍵を解読することが可能である。すなわち、確率7/12で2ビット部分鍵を解読でき、確率5/12で2ビット部分鍵を解読できないことになる。図２７に示した例では、３パターン単位で読み込まれるデータの系列は、１回目”GGW”すなわち部分鍵=01, 2回目”GGG”すなわち部分鍵=??, ３回目”WGG”すなわち部分鍵=10, ４回目”GWG”すなわち部分鍵=11である。２回目が”GGG”のため、部分鍵の解読に失敗している。しかし、図２７に示されるように、１回目と３回目では部分鍵の解読に成功しているため、全体のビット解読としては２回目の部分鍵の解読に成功する。つまり、p回目に解読できないパターンに確率5/12で遭遇したとしても、図２８に示されるように、もしp-1回目で部分鍵のビット解読に成功すればp回目の2-bit部分鍵の下位ビットを解読することができ、p+1回目で部分鍵のビット解読に成功p回目の2-bit部分鍵の上位ビットを解読することができる。
【０１４１】
すなわち、p回目の2ビット部分鍵解読が失敗したときでも、p-1回目もしくはp+1回目の2ビット部分鍵解読が成功すれば、p回目の下位ビット、上位ビットの片方もしくは両方を解読することができる。ここで、以下の用語定義を行う。
【０１４２】
・p回目の2ビット部分鍵解読が失敗したときに、p-1回目の部分鍵解読が成功することで、p回目の下位ビットが成功することを、本書では下位ビットフォロー解読と呼ぶことにする。
・p回目の2ビット部分鍵解読が失敗したときに、p+1回目の部分鍵解読が成功することで、p回目の上位ビットが成功することを、本書では上位ビットフォロー解読と呼ぶことにする。
・下位ビットフォロー解読と上位ビットフォロー解読を総合して、フォロービット解読と呼ぶ。
【０１４３】
下位ビットフォロー解読が成功する確率と、上位ビットフォロー解読が成功する確率を求めることで、確率5/12で鍵解読が失敗した場合の部分鍵の2ビット値が判明する確率を求めることができる。下位ビットフォロー解読の成功確率は、p回目でパターン”GGG”が観測されるとき、p-1回目で観測されるパターンが解読可能なパターンである確率である。上位ビットフォロー解読の成功確率は、p回目でパターン”GGG”が観測されるとき、p+1回目で観測されるパターンが解読可能なパターンである確率である。これらの確率は、図２９，図３０に示されるパターン網羅により容易に求めることができ、下位ビットフォロー解読、上位ビットフォロー解読確率の成功確率のいずれもが1/5となる。よって、３パターン単位から一意に解読できる7/12に加え、フォロー解読により5/12×1/5= 1/12のビット値を追加で解読することができるので、全体として7/12+1/12=8/12=2/3のビット値を解読することができる。
【０１４４】
以上に述べたように、べき乗剰余演算を搭載したデバイスに対しては、P3 =Q3 (mod n)かつP≠Qを満たす選択メッセージペアP,Qを用いた特殊PAにより、攻撃者はdの全体の2/3のビット値を解読することができる。点のスカラー倍算機能を搭載したデバイスに対しても、3P=3QかつP≠Qを満たす選択メッセージペアP,Qを用いた特殊PAにより、同様の攻撃を行うことで攻撃者はdの全体の2/3のビット値を解読することができる。
【０１４５】
さらにこの攻撃は、3以上の素数αに対してPα =Qα (mod n)かつP≠Q(もしくはαP=αQかつP≠Q)を満たす選択メッセージペアを用いた特殊PAに拡張することができる。この拡張の基本的な考え方は、α=3について与えられている図２４の表２を、αが5以上である任意の素数に拡張することが基点となる。その結果を、図３１の表３として与える。
【０１４６】
表３において、表２と同様に、d[u-1]||…||d[u-i+1]もしくはd[u-1]||…||d[u-i+1]||d[u-i]の値が、αの倍数でないときは破線で囲んでいる。d[u-i]の値に応じたこれらの遷移のうち、
・αの倍数(白色)→αの倍数の遷移、d[u-i]=0    (5.4)
・αの倍数 (白色)→αの倍数ではない(破線枠内)の遷移、d[u-i]=1  (5.5)
・αの倍数ではない(灰色)→αの倍数の遷移、d[u-i]=1    (5.6)
の３種類が、攻撃者にとって観察できる情報であり、かつd[u-i]の値を一意に決定できる遷移である。なぜなら、（５．４）（５．５）（５．６）以外の遷移は、全て破線枠内から破線枠内への遷移であるからである。全体の遷移パターン2αのうち、3パターンが鍵を一意に識別できる遷移であるので、全体の鍵ビットのうち3/(2α)が攻撃者によって解読できることになる。
【０１４７】
以上、Pα=Qα (mod n)かつP≠Q(もしくはαP=αQかつP≠Q)を用いた特殊PAによる解読方法をまとめると、図３２の表４に示すとおりになる。すなわち、αの値が3であるときには、漏洩する個人ビットの割合は2/3であり、5以上の素数であるときには、漏洩する個人ビットの割合は3/(2α)であることがわかる。
【０１４８】
＜個人鍵dがランダム化されている場合の特殊PA＞
以上が、A&D-always法によるSPA対策に対する特殊PAである。今までは、攻撃対象が個人鍵dがランダム化されていない場合を想定していた。以下では、個人鍵dをランダム化した場合の特殊PAについて説明する。ランダム化されていない場合と比較して、攻撃者のコストは増えるが、コスト増は現実的な時間内に抑えることができ、かつdをランダム化していない場合と同じ効果を得ることができる。
【０１４９】
最初に、A&D-always法によるSPA対策と、従来法１によるDPA対策の組み合わせに対する攻撃法を説明する。従来法１によるDPA対策を用いることで、個人鍵dの代わりに、式（４．１）で示されるdj’=d+rj#Eが用いられる。個人鍵がランダム化された場合の特殊PAの差分波形作成法を図３３に示す。図２２と同様に、Pα=Qα (mod n)かつP≠Q(もしくはαP=αQかつP≠Q)を満たす選択メッセージペアP,Qを与えたときの電力を測定し、差分波形を作成する電力差分を作成する。図２２との違いは、ランダム化された個人鍵が、Pを入力した場合とQを入力した場合で同一となるように、攻撃者は工夫を行う必要があることである。
【０１５０】
P,Q間でランダム化された指数を一致させる最も簡単な方法は、図３４に示されるように、Pを与えた場合のランダムな個人鍵と、Qを与えた場合のランダム化された個人鍵が一致するまで、Qを与えた場合の電力測定を複数回繰り返すことである。
【０１５１】
個人鍵は20ビット乱数によってランダム化されていることを考慮すると、Qを与えた場合の電力測定を220回繰り返すことで、ランダム化された個人鍵が一致することが期待される。220回はおよそ100万回であるので、1秒に1回電力測定を行う場合、電力測定に100万秒=100万/8.64万=11.6の日数を必要とする。この電力測定時間は決して短くないが、十分現実的な時間内に攻撃を成功させるのに必要な電力測定を完了することができる。電力測定は、スマートカード等の低速なデバイスによる演算処理と通信時間のため、測定時間は電力測定回数に比例した秒単位の時間を必要とするが、いったん電力測定を完了し、電力測定データのPCへの転送が完了したならば、高性能PCによる高速な解析が可能となる。すなわち、上記で算出した、電力測定が完了する時間(11.6日)が、そのまま攻撃者にとっての時間的コストとなる。
【０１５２】
上記の220回の差分をとるプロセスにおいては、P,Q間でランダム化された指数が一致する場合と一致しない場合があるが、一致の有無は電力波形の差分により容易に識別することができる。なぜなら、図３５（ａ）に示されるように、ランダム化された個人鍵が一致する場合は、1024回(べき乗剰余演算の場合)もしくは160回(点のスカラー倍算の場合)の差分波形において、全てについて平坦な波形が現れる可能性がある。これに対し、図３５（ｂ）に示されるように、一致しない場合は、個人鍵のビット値が一致するのは高々先頭20ビットに限定されるため、先頭の20回以降は必ず差分波形にピークが現れるからである。これら２種類の現象を識別することは容易であるため、攻撃者はランダム化された個人鍵が一致する場合についての差分波形を得ることができる。
【０１５３】
もし攻撃者が、P,Q共に同一のランダム化された個人鍵dj’である場合の差分波形を得ることに成功した場合、個人鍵がランダム化されていないときと同様の手法を用いることで、dj’のビット値全体の2/3(α=3)のビット値、もしくは全体の3/(2α)のビット値を求めることができる。個人鍵dj’を用いたべき乗剰余処理、もしくは点のスカラー倍算の結果は、個人鍵dを用いた場合の演算結果と一致することを考慮すると、実質的にはdj’は個人鍵dと同等の鍵である。すなわち、特殊PAを用いることで、DPAを用いた場合でも、個人鍵のビット値全体の2/3(α=3)のビット値、もしくは全体の3/(2α)のビット値を求めることができる。
【０１５４】
今までのべた方法は、攻撃を成功させるために100万回の電力測定を必要としていたが、電力測定方法を工夫することで、電力測定回数を2000回に抑えることも可能である。それは、図３６に示されるように、Pを与えた場合とQを与えた場合の電力測定回数を複数繰り返し、P,Q間で多対多の電力差分を作成することである。P,Qそれぞれ1000回(合計2000回)の電力測定を行うことで、可能な電力差分のペアの組み合わせは1000´1000=100万となるため、20ビット乱数が一致するペアが含まれることが期待される。この場合、電力測定回数は2000回であり、1日以内に攻撃が完了すると見込まれる。
【０１５５】
以上が、A&D-always法によるSPA対策と従来法１によるDPA対策の組み合わせに対する特殊PAを用いた攻撃法であり、その効果は図３２の表４に示されるとおりである。
【０１５６】
次に、A&D-always法によるSPA対策と従来法２によるDPA対策の組み合わせに対する特殊PAを用いた攻撃法を説明する。基本的には、A&D-always法+従来法１と同じであり、ランダム化された指数が一致する場合に差分曲線を作成し、平坦、ピークのパターンから鍵ビットの解析を行う。図１７の１７０４，１７０５，１７０６および図１９の１９０４，１９０５，１９０６から分かるように、従来法２におけるランダム化された指数は、rj,dj’,ej’の３種であり、これらは個人鍵dに対して式（４．４），（４．５），（４．８）に示される関係を満たす。A&D-always法+従来法１で述べた攻撃法と同様の手法を用いることで、図１７の１７０４，１７０５，１７０６および図１９の１９０４，１９０５，１９０６に記されるべき乗剰余演算、もしくは点のスカラー倍算で用いられるrj,dj’,ej’の３種の値の全体のビット値の2/3(α=3)のビット値、もしくは3/(2α)のビット値 (αは5以上の素数)を求めることができる。式（４．８）から、
d= dj’×rj+ej
であるので、rj,dj’,eｊ’のビット情報から、dの全体のビット値の2/3(α=3)のビット値、もしくは3/(2α)のビット値(αは5以上の素数)を求めることができる。
【０１５７】
以上説明したように、特殊PAを用いることで、A&D-always法によるSPA対策、A&D-always法によるSPA対策と従来法１によるDPA対策の組み合わせ、A&D-always法によるSPA対策と従来法２によるDPA対策の組み合わせの全てについて、図３２の表４で示される割合の鍵ビット値を求めることができる。
【０１５８】
以上のようにして、特殊PA攻撃によって、従来のSPA対策およびDPA対策だけでは耐タンパ性が十分ではないことが明らかとなった。
そこで、以下に説明する第１〜第６の実施形態では、SPAおよびDPAに加えて、特殊PAに対する耐タンパ性をも備えた暗号処理装置および方法を提供するものである。
【０１５９】
図３７は、第１〜第６の実施形態の暗号処理装置の第１のハードウェア構成例を示す図である。
図３７の暗号処理装置３７００は、Central Processing Unit（ＣＰＵ）３７０１、Read Only Memory（ＲＯＭ）３７０２、Random Access Memory（ＲＡＭ）３７０３、通信回路３７０４、および通信インタフェース（Ｉ／Ｆ）３７０５を有する。通信回路３７０４は、通信Ｉ／Ｆ３７０５を介して他の装置との間で通信を行う。
【０１６０】
そして、ＣＰＵ３７０１、ＲＯＭ３７０２、ＲＡＭ３７０３、および通信回路３７０４は、バス３７０６により互いに接続されている。また、暗号処理装置３７００は、電源端子３７０７とグランド端子３７０８を有し、暗号処理装置３７００内の各部へは、不図示の配線と電源端子３７０７を介して電源電圧が供給される。暗号処理装置３７００内の各部は、不図示の配線を介してグランド端子３７０８とも接続されている。
【０１６１】
ＣＰＵ３７０１は、ＲＯＭ３７０２に予め記憶されたプログラムをＲＡＭ３７０３にロードし、ＲＡＭ３７０３をワーキングエリアとして用いながらプログラムを実行することで、各種の処理を行う。例えば、ＣＰＵ３７０１は、図４２〜図５１の各フローチャートで示される制御処理を実行する。
【０１６２】
なお、ＲＯＭ３７０２の代わりにフラッシュメモリなどの他の種類の不揮発性記憶装置が使われてもよい。フラッシュメモリなどの書き換え可能な記憶装置がＲＯＭ３７０２の代わりに使われる場合は、プログラムは、通信Ｉ／Ｆ３７０５を介して暗号処理装置３７００にダウンロードされ、暗号処理装置３７００にインストールされてもよい。
【０１６３】
また、暗号処理装置３７００は、通信Ｉ／Ｆ３７０５を介して他の装置と通信することができる。例えば、暗号処理装置３７００は、暗号処理装置３７００自身の公開鍵などの情報を、通信Ｉ／Ｆ３７０５を介して他の装置に送信してもよいし、他の装置の公開鍵などの情報を、通信Ｉ／Ｆ３７０５を介して受信してもよい。
【０１６４】
通信Ｉ／Ｆ３７０５の種類は、暗号処理装置３７００の種類に応じた任意の種類でよい。例えば、暗号処理装置３７００は、スマートカードでもよいし、プリンタカートリッジなどのアクセサリ部品に組み込まれるＬＳＩチップでもよいし、家電製品に組みこまれるＬＳＩチップでもよい。例えば、暗号処理装置３７００が接触式スマートカードの場合は、通信Ｉ／Ｆ３７０５は通信用端子を含んでもよいし、暗号処理装置３７００が非接触式スマートカードの場合は、通信Ｉ／Ｆ３７０５はアンテナを含んでもよい。
【０１６５】
通信回路３７０４は、通信Ｉ／Ｆ３７０５の種類と通信プロトコルに応じて、適宜の処理を行う。例えば、通信回路３７０４は、ディジタル・アナログ変換、アナログ・ディジタル変換、変調、復調、符号化、復号などの処理を行ってもよい。
【０１６６】
なお、PA攻撃を行う攻撃者は、通信Ｉ／Ｆ３７０５を介してべき乗剰余演算における基数データや点のスカラー倍算における楕円曲線上の点のデータを暗号処理装置３７００に入力する。そして、入力されたデータに関して暗号処理装置３７００が処理を行っているときの消費電力を測定することで、暗号処理装置３７００の個人鍵を推測する。例えば、攻撃者は、電源端子３７０７に抵抗器を接続することで、消費電力の測定を行う。
【０１６７】
図３８は、第１〜第３の実施形態の暗号処理装置の第２のハードウェア構成例を示す図である。図３８の暗号処理装置３７１０は、ＣＰＵ３７０１とＲＯＭ３７０２の代わりにECCハードウェア回路３７１１を有する。
【０１６８】
また、暗号処理装置３７１０は、図３７の暗号処理装置３７００と同様のＲＡＭ３７０３と通信回路３７０４と通信Ｉ／Ｆ３７０５を有する。そして、暗号処理装置３７１０において、ECCハードウェア回路３７１１とＲＡＭ３７０３と通信回路３７０４は互いにバス３７０６で接続されている。また、暗号処理装置３７１０にも図３７の暗号処理装置３７００と同様の電源端子３７０７とグランド端子３７０８がある。
【０１６９】
暗号処理装置３７１０においては、ＲＯＭ３７０２からプログラムを読み出して実行するＣＰＵ３７０１の代わりに、ECCハードウェア回路３７１１が図４２〜図５１の各フローチャートで示される制御処理を行う。ECCハードウェア回路３７１１は、例えば、Application Specific Integrated Circuit（ＡＳＩＣ）でもよいし、ECCハードウェア回路３７１１の少なくとも一部がField Programmable Gate Array（ＦＰＧＡ）により実現されていてもよい。また、ECCハードウェア回路３７１１も、不図示の配線により電源端子３７０７およびグランド端子３７０８と接続されている。
【０１７０】
なお、実施形態によっては、暗号処理装置が、汎用プロセッサとしての図３７のＣＰＵ３７０１と、ＣＰＵ３７０１が実行するプログラムを格納する図３７のＲＯＭ３７０２と、コプロセッサとしての図３８のECCハードウェア回路３７１１を有していてもよい。そして、図４２〜図５１の各フローチャートで示される制御処理の一部をＣＰＵ３７０１が行い、残りの一部をECCハードウェア回路３７１１が行ってもよい。その場合も、暗号処理装置は、図３７および図３８と同様に、ＲＡＭ３７０３と通信回路３７０４と通信Ｉ／Ｆ３７０５を有する。
【０１７１】
図３９は、第１，第２，第３の実施形態の暗号処理装置に共通の機能構成図である。図３９に示される暗号処理装置３９００は、図３７または図３８に例示したハードウェアにより実現することができる。
特殊PAへの対策を施した図３９に示される第１，第２，第３の実施形態の機能構成では、べき乗剰余演算における基数を、定数乗した結果を、新しい基数として演算を行う。
【０１７２】
図３９において、定数乗器３９０１は、基数aと法nを入力し、また、対策用定数記憶部３９０２から対策用定数C(α)を読み込む。そして、定数乗器３９０１は、べき乗剰余演算ad (mod n)を計算するために、最初に基数aをC(α)乗またはr’（=C(α)×乱数r）乗し新たな基数b= aC(a) (mod n)またはb= ar’(mod n)を計算する。ただし、対策用定数記憶部３９０２に記憶される対策用定数C(α)は、想定される特殊PAの攻撃強度に応じて設定する定数であり、具体的には、選択メッセージペアPa=Qa (mod n)を生成するための素数αの全ての値の積で与えられる。例えば、α=3の攻撃を想定して防ぐ場合は、C(α)=3である。例えばα=3とα=5の攻撃を想定して防ぐ場合はC(α)=3×5=15である。例えばα=3とα=7の攻撃を想定して防ぐ場合はC(α)=3×7=21である。例えばα=3、α=5およびα=7の攻撃を想定して防ぐ場合はC(α)=3×5×7=105である。
【０１７３】
想定する攻撃の種類を多く想定しC(α)を設定することで、セキュリティを高めることができるが、計算処理時間のオーバーヘッドはC(α)のビット長に比例するため、C(α)の設定はセキュリティと処理時間のトレードオフとなる。しかし、図３２の表４に示されるように、αを大きくするほど漏洩する鍵ビットの割合は減っていくので、C(α)は7以下の全ての素数の積に設定するのが妥当である。
【０１７４】
図３９において、個人鍵変換器３９０４は、個人鍵記憶部３９０３に記憶された個人鍵dを個人鍵d’に変換する。個人鍵d’は、個人鍵dを対策用定数C(α)またはr’（=C(α)×乱数r）で割った商として演算する。
【０１７５】
補正鍵生成器３９０７は、個人鍵記憶部３９０３に記憶された個人鍵dから補正鍵d”を生成する。補正鍵d”は、個人鍵dを対策用定数C(α)またはr’（=C(α)×乱数r）で割った余りとして演算する。
【０１７６】
べき乗剰余演算器３９０５は、定数乗器３９０１が生成した新たな基数bと法nを使って、個人鍵変換器３９０４が出力する個人鍵d’に対して、べき乗剰余演算t=bd’ (mod n)を計算する。この計算は例えば、図１２に示したA&D-always法によって実行される。
【０１７７】
べき乗剰余演算器３９０６は、入力される基数aと法nを使って、補正鍵生成器３９０７が出力する補正鍵d”に対して、べき乗剰余演算u=ad” (mod n)を計算し、補正値uを出力する。
【０１７８】
補正演算器３９０８は、べき乗剰余演算器３９０５および３９０６が出力した各演算結果tおよびuを入力して、乗算t×u (mod n)の補正演算を実行し、最終的なべき乗剰余演算結果ad(mod n)に等価な結果を出力する。
【０１７９】
ここで、個人鍵変換器３９０４および補正鍵生成器３９０７は、式（６．１）を満足する個人鍵d’および補正鍵d”を計算して出力する。
d=c(α)×d’＋d”         (6.1)
この関係式を使うと、暗号処理のべき乗剰余演算値ad (mod n)は、式（６．２）として表すことができる。
v=ad (mod n)
=a(c(α)d’+d”) (mod n)
=(ac(α))d’×ad” (mod n)
=bd’×ad” (mod n)
=t×u (mod n)           (6.2)
式（６．２）より、式（６．１）を満たすように対策用定数C(α)を決定することにより、図３９の構成により、確かに暗号処理のべき乗剰余演算値ad (mod n)を出力できることがわかる。
【０１８０】
また、対策用定数C(α)に乱数rを導入することにより、個人鍵変換器３９０４および補正鍵生成器３９０７は、式（６．３）を満足する個人鍵d’および補正鍵d”を計算して出力するように構成することもできる。
d=(c(α)×r)×d’＋d”
=r’d’＋d”            (6.3)
この関係式を使うと、暗号処理のべき乗剰余演算値ad (mod n)は、式（６．４）として表すことができる。
v=ad (mod n)
=a(r’d’+d”) (mod n)
=(ar’)d’×ad” (mod n)
=bd’×ad” (mod n)
=t×u (mod n)           (6.4)
式（６．４）より、式（６．３）を満たすように対策用定数C(α)を決定し、かつ図３９の定数乗器３９０１、個人鍵変換器３９０４、および補正鍵生成器３９０７において、対策用定数C(α)の代わりに値r’を使用する。これにより、確かに暗号処理のべき乗剰余演算値ad (mod n)を出力できることがわかる。
【０１８１】
図３９の構成に基づく第１，第２、第３の実施形態による対策法では、次の処理が実行される。すなわち、暗号処理のためのべき乗剰余演算において、入力された値aを基数として用いるのではなく、上記手順に従い設定された対策用定数C(α) またはr’（=C(α)×乱数r）により定数乗された値b= aC(α) (mod n)またはb= ar’ (mod n)を新しい基数として用いる。選択メッセージP, Qを入力したときの新しい基数bは、それぞれ
PC(α) (mod n)     (6.5)
QC(α) (mod n)     (6.6)
となるが、想定されたαに対して、式（６．５）と（６．６）は常に同一となる。なぜならば、Pα= Qα(mod n)の等式が成立し、かつC(α)は、想定されたαの値全てに対する公約数であるので、式（６．５）と（６．６）はPα= Qα(mod n)の両辺を整数乗した結果であり、これらは等しくなる。
【０１８２】
基数が同一であるべき乗剰余演算同士の電力差分を作成しても、攻撃者は有意な情報を得ることはできない。なぜなら、図４１に示されるように、基数がP,Q間で同一となるため（図４０（ａ）および（ｂ））、これらの差分を作成しても常に平坦な波形となり（図４０（ｃ））、攻撃者は鍵のビットを解読するための有意な情報を得ることができないからである。
【０１８３】
なお、べき乗剰余演算器３９０６によるべき乗剰余演算では、入力された基数aをそのまま用いるため、特殊PAに対して脆弱である。ただし、補正鍵d”のビット長を、個人鍵dのビット長と比較して非常に短くしているため、特殊PAによる攻撃の影響を最小限にとどめることができる。dに対するd”のビット長は実施例によって異なる。詳細は、第１，第２，第３の各実施例にて述べる。
【０１８４】
図４１は、第４，第５，第６の実施形態の暗号処理装置に共通の機能構成図である。図４１に示される暗号処理装置４１００は、図３７または図３８に例示したハードウェアにより実現することができる。
【０１８５】
本発明による特殊PAへの対策を施した図４１に示される第４，第５，第６の実施形態の機能構成では、点のスカラー倍算における楕円曲線上の点を、定数倍算した結果を、新しい楕円曲線上の点として演算を行う。
【０１８６】
図４１の構成は、基本的には、図３９におけるべき乗剰余ad (mod n)を点のスカラー倍算dAに、乗算ｔ×u (mod n)を点の加算T+Uに置き換えることで実現できる。これは、図１に示される関係から明らかである。
【０１８７】
図４１において、定数倍器４１０１は、楕円曲線上の点Aを入力し、また、対策用定数記憶部４１０２から対策用定数C(α)を読み込む。そして、定数倍器４１０１は、点のスカラー倍算dAを計算するために、最初に最初に点AをC(α)倍またはr’（=C(α)×乱数r）倍し新たな楕円曲線上の点B= C(α)AまたはB= r’Aを計算する。ただし、対策用定数記憶部４１０２に記憶される対策用定数C(α)は、図３９の場合と同様の基準で選定される。
【０１８８】
図４１において、個人鍵変換器４１０４は、個人鍵記憶部４１０３に記憶された個人鍵dを個人鍵d’に変換する。個人鍵d’は、個人鍵dを対策用定数C(α)またはr’（=C(α)×乱数r）で割った商として演算する。
【０１８９】
補正鍵生成器４１０７は、個人鍵記憶部４１０３に記憶された個人鍵dから補正鍵d”を生成する。補正鍵d”は、個人鍵dを対策用定数C(α)またはr’（=C(α)×乱数r）で割った余りとして演算する。
【０１９０】
点のスカラー倍算器４１０５は、定数倍器４１０１が生成した新たな点Bを使って、個人鍵変換器４１０４が出力する個人鍵d’に対して、点のスカラー倍算T= d’Bを計算する。この計算は例えば、図１５に示したA&D-always法によって実行される。
【０１９１】
点のスカラー倍算器４１０６は、入力される点Aを使って、補正鍵生成器４１０７が出力する補正鍵d”に対して、点のスカラー倍算U=d”Aを計算し、補正値uを出力する。
補正演算器４１０８は、点のスカラー倍算器４１０５および４１０６が出力した各演算結果tおよびuを入力して、加算T+Uの補正演算を実行し、最終的な点のスカラー倍算結果dAに等価な結果を出力する。
【０１９２】
ここで、個人鍵変換器４１０４および補正鍵生成器４１０７は、図３９の場合の式（６．１）を満足する個人鍵d’および補正鍵d”を計算して出力する。この関係式を使うと、暗号処理の点のスカラー倍算値dAは、式（６．７）として表すことができる。
v=dA=(c(α)×d’＋d”)A
=d’c(α)A+d”A
=d’B+d”A
=T+U                   (6.7)
式（６．７）より、式（６．１）を満たすように対策用定数C(α)を決定することにより、図４１の構成により、確かに暗号処理の点のスカラー倍算値dAを出力できることがわかる。
【０１９３】
また、対策用定数C(α)に乱数rを導入することにより、個人鍵変換器４１０４および補正鍵生成器４１０７は、図３９の場合の式（６．３）を満足する個人鍵d’および補正鍵d”を計算して出力するように構成することもできる。この関係式を使うと、暗号処理の点のスカラー倍算値dAは、式（６．８）として表すことができる。
v= dA=((c(α)×r)×d’＋d”)A
=d’(c(α)×r)A+d”A
=d’B+d”A
=T+U                   (6.8)
式（６．８）より、式（６．３）を満たすように対策用定数C(α)を決定し、かつ図４１の定数倍器４１０１、個人鍵変換器４１０４、および補正鍵生成器４１０７において、対策用定数C(α)の代わりに値r’を使用する。これにより、確かに暗号処理の点のスカラー倍算値dAを出力できることがわかる。
【０１９４】
図４１の構成に基づく第４，第５、第６の実施形態による対策法では、次の処理が実行される。すなわち、暗号処理のための点のスカラー倍算において、入力された値Aを楕円曲線上の点として用いるのではなく、上記手順に従い設定された対策用定数C(α)またはr’（=C(α)×乱数r）により定数倍算された値B= C(α)AまたはB= r’Aを新しい楕円曲線上の点として用いる。選択メッセージP, Qを入力したときの新しい点Bは、それぞれ
C(α)P          (6.9)
C(α)Q          (6.10)
となるが、想定されたαに対して、式（６．９）と（６．１０）は常に同一となる。なぜならば、αP=αQの等式が成立し、かつC(α)は、想定されたαの値全てに対する公約数であるので、式（６．９）と（６．１０）はαP=αQの両辺を整数倍した結果であり、これらは等しくなる。
【０１９５】
これにより、図３９の場合と同様の原理で、基数が同一であるべき乗剰余演算同士の電力差分を作成しても、攻撃者は有意な情報を得ることはできない。なぜなら、基数がP,Q間で同一となるため、これらの差分を作成しても常に平坦な波形となり、攻撃者は鍵のビットを解読するための有意な情報を得ることができないからである。
【０１９６】
なお、図２９の場合と同様に、点のスカラー倍算器４１０６による点のスカラー倍算では、入力された楕円曲線上の点Aをそのまま用いるため、特殊PAに対して脆弱である。ただし、補正鍵d”のビット長を、個人鍵dのビット長と比較して非常に短くしているため、特殊PAによる攻撃の影響を最小限にとどめることができる。dに対するd”のビット長は実施例によって異なる。詳細は、第４，第５，第６の各実施例にて述べる。
【０１９７】
図３９および図４１で、定数乗器３９０１、定数倍器４１０１、個人鍵変換器３９０４，４１０４、べき乗剰余演算器３９０５，３９０６、点のスカラー倍算器４１０５，４１０６、補正鍵生成器３９０７，４１０７、および補正演算器３９０８，４１０８は、以下の構成として実現できる。すなわち、これらの各部は、図３７のＣＰＵ３７０１が実行する処理であってもよいし、図３８のECCハードウェア回路３７１１が実行する処理であってもよいし、ＣＰＵ３７０１とECCハードウェア回路３７１１の組み合わせにより実行される処理であってもよい。その場合に、これらの処理を実行するプログラムは、図３７または図３８のＲＯＭ３７０２またはＲＡＭ３７０３に記憶させて、実行することができる。また、対策用定数記憶部３９０２，４１０２および個人鍵記憶部３９０３，４１０３は、例えば図３７または図３８のＲＯＭ３７０２またはＲＡＭ３７０３に記憶させることができる。
【０１９８】
図３９または図４１において、基数a、法n、点Aは、暗号処理装置３９００または４１００以外の装置から暗号処理装置に与えられる点でもよい。例えば、基数aや点Aは、外部装置の公開鍵でもよい。外部装置の公開鍵は、例えば、DH鍵共有のために外部装置から暗号処理装置３９００または４１００へと通知されることもあるし、DSAによる認証のために外部装置から暗号処理装置３９００または４１００へと通知されることもある。
【０１９９】
基数a，法nや点Aが暗号処理装置３９００または４１００以外の装置から暗号処理装置に与えられる点である場合、基数a，法nや点Aは、通信Ｉ／Ｆ３７０５と通信回路３７０４により取得される。
【０２００】
図３９の補正演算器３９０８または図４１の補正演算器４１０８は、演算結果を他の装置に送信してもよいし、DSAによる認証のための処理を行ってもよいし、DH鍵共有のための処理を行ってもよい。場合によっては、通信回路３７０４と通信Ｉ／Ｆ３７０５を利用して、演算結果を外部に出力してもよい。例えば、暗号処理装置３９００または４１００が、ホスト（例えばプリンタなど）により認証されるアクセサリ部品（例えばプリンタカートリッジなど）に含まれる場合等である。
【０２０１】
次に、図３９の暗号処理装置３９００の具体的な処理を示す第１の実施形態について、以下に説明する。図４２は、第１の実施形態の制御処理を示すフローチャートである。以下、このフローチャートの処理について説明する。
【０２０２】
事前に生成された個人鍵d(ステップ４２００)に対して、dをC(α)で割ったときの商と余りを計算し、それぞれd’とd’’に与える（ステップ４２０２）。これは、式（６．１）および（６．２）に基づく処理であり、個人鍵変換器４１０４および補正鍵生成器３９０７の機能に対応する。
【０２０３】
基数aをC(α)乗した結果aC(α) (mod n)をbに与える(ステップ４２０３)。これは、定数乗器３９０１の機能に対応する。
bを基数、d’を指数としたべき乗剰余演算を実行し、t = bd’ (mod n)としてtに与える(ステップ４２０４)。これは、べき乗剰余演算器３９０５の機能に対応する。
【０２０４】
aを基数、d”を指数としたべき乗剰余演算を実行することで、補正値u=ad”(mod n)を生成する(ステップ４２０５)。これは、べき乗剰余演算器３９０６の機能に対応する。
tと補正値uから、v=t×u (mod n)を計算する(ステップ４２０６)。これは、補正演算器３９０８の機能に対応する。
【０２０５】
最後に、vを計算結果ad (mod n)として出力する(ステップ４２０７)。
ステップ４２０５においては、基数aをそのまま用いたべき乗剰余演算が実行され、この処理は特殊PAに対して脆弱である。しかし、このべき乗剰余で用いられる指数は、d”=
d (mod C(α))であり、そのビット長はC(α)のビット長(log2C(α))と同じである。C(α) = 3×5×7=105を用いた場合、特殊PAの攻撃にさらされるビット長はわずかlog2105 = 7ビットであり、個人鍵全体のビット長(1024ビット以上)と比較すると、特殊PAによる攻撃の影響を無視できるほど小さくすることができる。
【０２０６】
図４３は、図４２のステップ４２０３，４２０４，４２０５において実行されるべき乗剰余演算処理の詳細（その１）を示すフローチャートである。このフローチャートの処理は、図１２に示したA&D-always法を用いたべき乗剰余演算処理のアルゴリズムに基づくものである。
【０２０７】
ステップ４３００で、図１２に示される入力値が入力される。
ステップ４３０１は、図１２の１２０１行に対応する。
ステップ４３０２，４３０６，４３０７は、図１２の１２０２のｆｏｒ文のループ処理に対応している。
【０２０８】
ステップ４３０３は、図１２の１２０３行に対応し、２乗算を実行する。
ステップ４３０４は、図１２の１２０４行に対応し、乗算を実行する。
ステップ４３０５は、図１２の１２０５行に対応する。
【０２０９】
ステップ４３０８，４３０９は、図１２の１２０７行に対応する。
このフローチャートでは、指数dの値に関係なく、常に２乗算(４３０３)と乗算(４３０４)の演算パターンが一定化される。
【０２１０】
図４４は、図４２のステップ４２０３，４２０４，４２０５において実行されるべき乗剰余演算処理の詳細（その２）を示すフローチャートである。図４３のフローチャートでは、指数dを1ビットずつ増やしながらべき乗剰余演算を行なった。これに対し、図４４のフローチャートでは、ステップ４４０１と４４０２の初期化処理の後、ステップ４４０４と４４０５のループ制御処理によって、w[i] = ai (mod n) (i=0,1,..,2k -1)で示されるkビットテーブルを計算する（ステップ４４０３）。
【０２１１】
その後、ステップ４４０６と４４０７の初期化処理の後、ステップ４４１０と４４１１のループ制御処理によって、指数dをkビットずつ増やしながらべき乗剰余演算を実行する。図４３のフローチャートと同様に、指数dの値に関係なく、常に２乗算 （ステップ４４０８）と乗算（ステップ４４０９）の演算パターンが一定化される。
【０２１２】
次に、図３９の暗号処理装置３９００の具体的な処理を示す第２の実施形態について、以下に説明する。図４５は、第２の実施形態の制御処理を示すフローチャートである。以下、このフローチャートの処理について説明する。
【０２１３】
図４５において、図４２の第１の実施形態と同じ処理には、同じ番号を付してある。
第２の実施形態の制御処理が第１の実施形態の制御処理と異なる点は、個人鍵dに対して、dをC(a)で割ったときの商と余りの計算処理を、事前処理において個人鍵dを生成するした時点で実行し、それぞれd’とd’’に与える点である（ステップ４５００）。これは、式（６．１）および（６．２）に基づく処理であり、図３９の個人鍵変換器３９０４と補正鍵生成器３９０７の機能に対応する。事前処理として実行することで、べき乗剰余演算を実行するごとに割り算処理の実行を不要とすることができる。
【０２１４】
図４５のステップ４２０１、およびステップ４２０３から４２０７までの各処理は、図４２の第１の実施形態の場合と同じである。
ステップ４２０５において特殊PAに対して脆弱となるビット数は、第１の実施形態の場合と同様に、わずか7ビット程度である。
【０２１５】
次に、図３９の暗号処理装置３９００の具体的な処理を示す第３の実施形態について、以下に説明する。図４６は、第３の実施形態の制御処理を示すフローチャートである。以下、このフローチャートの処理について説明する。
【０２１６】
図４６において、図４２の第１の実施形態と同じ処理には、同じ番号を付してある。
第３の実施形態の制御処理が第１の実施形態の制御処理と異なる点は、対策用定数C(α)に乱数ｒを付加している点である。
【０２１７】
まず、個人鍵dが事前に生成され（ステップ４２００）、基数aと法nが入力される（ステップ４２０１）。
その後、２０ビットの乱数ｒが生成される（ステップ４６０１）。
【０２１８】
次に、式（６．３）に基づき、r’=c(α)×rが演算される（ステップ４６０２）。
続いて、事前に生成された個人鍵dに対して、dをr’で割ったときの商と余りを計算し、それぞれd’とd’’に与える（ステップ４６０３）。これは、式（６．３）および（６．４）に基づく処理であり、個人鍵変換器４１０４および補正鍵生成器３９０７の機能に対応する。
【０２１９】
基数aをr’乗した結果ar'(mod n)をbに与える(ステップ４６０４)。これは、定数乗器３９０１の機能に対応する。
その後、図４２の場合と同様に、ステップ４２０４，４２０５，４２０６，４２０７の各処理が順次実行され、式（６．４）に基づく制御処理に従って、最終的なべき乗剰余演算値v=ad (mod n)が出力される。
【０２２０】
ステップ４２０５においては、基数aをそのまま用いたべき乗剰余演算が実行され、この処理は特殊PAに対して脆弱である。そのビット長は、第１または第２の実施形態に比較して乱数rのビット長だけ長くなり、(C(α)のビット長)+20(=log2C(α)+20)となる。C(α)=3×5×7=105を用いた場合、特殊PAの攻撃にさらされるビット長はわずか20+log2105=27ビットであり、個人鍵全体のビット長(1024ビット以上)と比較すると、特殊PAによる攻撃の影響を無視できるほど小さくすることができる。
【０２２１】
第１または第２の実施形態に比較して、特殊PAの攻撃にさらされるビット長は長くなるが、ステップ４２０４，４２０５，４２０６のべき乗剰余演算の指数が全てランダム化されているため、DPAに対する安全性が高いというメリットがある。
【０２２２】
第３の実施形態におけるステップ４６０３の処理自体は、前述した従来法２の式（４．４）および（４．５）の処理と類似である。しかしながら、第３の実施形態では、ステップ４６０１で生成した乱数rに対して、ステップ４６０２に示す乱数rのC(α)倍処理r’=r´C(α)を行うという特徴を有するのに対して、従来法２ではそれに相当する処理を行わない。この特徴の差異が効果の差異となる。すなわち、第３の実施形態では、C(α)の整数倍であるr’に対して、基数bをaのr’乗値として与えることで、特殊PAに対しても安全な処理を実現できる。これに対し、従来法２では、生成された乱数rをそのまま用いて、基数bをaのr 乗値として与える。このrは乱数であり、C(α)の倍数とは限らないため、非常に高い確率(Φ(C(α))/C(α))で特殊PAが成功する。ただし、Φ(x)はオイラー関数と呼ばれ、xを素因数分解して得られる構成する全ての素数から1を引いた値の積によって計算される。例えば、Φ(3)=3-1=2, Φ(3×5)=(3-1)×(5-1)=2×4=8, Φ(3×5×7)=(3-1)×(5-1)×(7-1)=2×4×6=48である。
【０２２３】
第３の実施形態は、特殊PAに対して、強い耐タンパ性を有するという特徴がある。
次に、図４１の暗号処理装置４１００の具体的な処理を示す第４の実施形態について、以下に説明する。図４７は、第４の実施形態の制御処理を示すフローチャートである。以下、このフローチャートの処理について説明する。
【０２２４】
事前に生成された個人鍵d(ステップ４７００)に対して、dをC(α)で割ったときの商と余りを計算し、それぞれd’とd’’に与える（ステップ４７０２）。これは、式（６．１）および（６．７）に基づく処理であり、個人鍵変換器４１０４および補正鍵生成器４１０７の機能に対応する。
【０２２５】
点AをC(α)倍した結果C(α)AをBに与える(ステップ４７０３)。これは、定数倍器４１０１の機能に対応する。
Bに対してd’倍する点のスカラー倍算を実行し、T= d’BとしてTに与える(ステップ４7０４)。これは、点のスカラー倍算器４１０５の機能に対応する。
【０２２６】
点Aをd”倍した点のスカラー倍算を実行することで、補正値U= d”Aを生成する(ステップ４７０５)。これは、点のスカラー倍算器４１０６の機能に対応する。
Tと補正値Uから、V=T+Uを計算する(ステップ４７０６)。これは、補正演算器４１０８の機能に対応する。
【０２２７】
最後に、Vを計算結果ｄAとして出力する(ステップ４７０７)。
ステップ４７０５においては、点Aをそのまま用いた点のスカラー倍算が実行され、この処理は特殊PAに対して脆弱である。しかし、このべき乗剰余で用いられる指数は、d”= d (mod C(α))であり、そのビット長はC(α)のビット長(log2C(α))と同じである。C(α) = 3×5×7=105を用いた場合、特殊PAの攻撃にさらされるビット長はわずかlog2105 = 7ビットであり、個人鍵全体のビット長(1024ビット以上)と比較すると、特殊PAによる攻撃の影響を無視できるほど小さくすることができる。
【０２２８】
図４８は、図４７のステップ４７０３，４７０４，４７０５において実行される点のスカラー倍算処理の詳細（その１）を示すフローチャートである。このフローチャートの処理は、図１５に示したA&D-always法を用いた点のスカラー倍算のアルゴリズムに基づくものである。
【０２２９】
ステップ４８００で、図１５に示される入力値が入力される。
ステップ４８０１は、図１５の１５０１行に対応する。
ステップ４８０２，４８０６，４８０７は、図１５の１５０２のｆｏｒ文のループ処理に対応している。
【０２３０】
ステップ４８０３は、図１５の１５０３行に対応し、２倍算を実行する。
ステップ４８０４は、図１５の１５０４行に対応し、加算を実行する。
ステップ４８０５は、図１５の１５０５行に対応する。
【０２３１】
ステップ４８０８，４８０９は、図１５の１５０７行に対応する。
このフローチャートでは、スカラー値dの値に関係なく、常に２倍算(４８０３)と加算(４８０４)の演算パターンが一定化される。
【０２３２】
図４９は、図４７のステップ４７０３，４７０４，４７０５において実行される点のスカラー倍算処理の詳細（その２）を示すフローチャートである。図４８のフローチャートでは、指数dを1ビットずつ増やしながら点のスカラー倍算を行なった。これに対し、図４９のフローチャートでは、ステップ４９０１と４９０２の初期化処理の後、ステップ４９０４と４９０５のループ制御処理によって、w[i]=iA (mod n) (i=0,1,..,2k -1)で示されるkビットテーブルを計算する（ステップ４９０３）。
【０２３３】
その後、ステップ４９０６と４９０７の初期化処理の後、ステップ４９１０と４９１１のループ制御処理によって、指数dをkビットずつ増やしながら点のスカラー倍算を実行する。図４８のフローチャートと同様に、指数dの値に関係なく、常に２倍算 （ステップ４９０８）と加算（ステップ４９０９）の演算パターンが一定化される。
【０２３４】
次に、図４１の暗号処理装置４１００の具体的な処理を示す第５の実施形態について、以下に説明する。図５０は、第５の実施形態の制御処理を示すフローチャートである。以下、このフローチャートの処理について説明する。
【０２３５】
図５０において、図４７の第４の実施形態と同じ処理には、同じ番号を付してある。
第５の実施形態の制御処理が第４の実施形態の制御処理と異なる点は、個人鍵dに対して、dをC(a)で割ったときの商と余りの計算処理を、事前処理において個人鍵dを生成するした時点で実行し、それぞれd’とd’’に与える点である（ステップ５０００）。これは、式（６．１）および（６．７）に基づく処理であり、図４１の個人鍵変換器４１０４と補正鍵生成器４１０７の機能に対応する。事前処理として実行することで、点のスカラー倍算を実行するごとに割り算処理の実行を不要とすることができる。
【０２３６】
図５０のステップ４７０１、およびステップ４７０３から４７０７までの各処理は、図４７の第４の実施形態の場合と同じである。
ステップ４７０５において特殊PAに対して脆弱となるビット数は、第４の実施形態の場合と同様に、わずか7ビット程度である。
【０２３７】
次に、図４１の暗号処理装置４１００の具体的な処理を示す第６の実施形態について、以下に説明する。図５１は、第６の実施形態の制御処理を示すフローチャートである。以下、このフローチャートの処理について説明する。
【０２３８】
図５１において、図４７の第４の実施形態と同じ処理には、同じ番号を付してある。
第６の実施形態の制御処理が第４の実施形態の制御処理と異なる点は、対策用定数C(α)に乱数ｒを付加している点である。
【０２３９】
まず、個人鍵dが事前に生成され（ステップ４７００）、点Aが入力される（ステップ４７０１）。
その後、２０ビットの乱数ｒが生成される（ステップ５１０１）。
【０２４０】
次に、式（６．３）に基づき、r’=c(α)×rが演算される（ステップ５１０２）。
続いて、事前に生成された個人鍵dに対して、dをr’で割ったときの商と余りを計算し、それぞれd’とd’’に与える（ステップ５１０３）。これは、式（６．３）および（６．８）に基づく処理であり、個人鍵変換器４１０４および補正鍵生成器４１０７の機能に対応する。
【０２４１】
点Aをr’倍した結果r’AをBに与える(ステップ５１０４)。これは、定数倍器４１０１の機能に対応する。
その後、図４７の場合と同様に、ステップ４７０４，４７０５，４７０６，４７０７の各処理が順次実行され、式（６．８）に基づく制御処理に従って、最終的な点のスカラー倍算値V=dAが出力される。
【０２４２】
ステップ４７０５においては、点Aをそのまま用いた点のスカラー倍算が実行され、この処理は特殊PAに対して脆弱である。そのビット長は、第１または第２の実施形態に比較して乱数rのビット長だけ長くなり、(C(α)のビット長)+20(=log2C(α)+20)となる。C(α)=3×5×7=105を用いた場合、特殊PAの攻撃にさらされるビット長はわずか20+log2105=27ビットであり、個人鍵全体のビット長(1024ビット以上)と比較すると、特殊PAによる攻撃の影響を無視できるほど小さくすることができる。
【０２４３】
第１または第２の実施形態に比較して、特殊PAの攻撃にさらされるビット長は長くなるが、ステップ４７０４，４７０５，４７０６の点のスカラー倍算処理の指数が全てランダム化されているため、DPAに対する安全性が高いというメリットがある。
【０２４４】
第３の実施形態の場合と同様に、第６の実施形態におけるステップ５１０３の処理自体は、前述した従来法２の式（４．４）および（４．５）の処理と類似である。しかしながら、第６の実施形態では、ステップ５１０１で生成した乱数rに対して、ステップ５１０２に示す乱数rのC(α)倍処理r’=r´C(α)を行うという特徴を有するのに対して、従来法２ではそれに相当する処理を行わない。この特徴の差異が効果の差異となる。すなわち、第６の実施形態では、C(α)の整数倍であるr’に対して、点BをAのr’倍算値として与えることで、特殊PAに対しても安全な処理を実現できる。
【符号の説明】
【０２４５】
３７００、３７１０  暗号処理装置
３７０１  ＣＰＵ（Central Processing Unit）
３７０２  ＲＯＭ（Read Only Memory）
３７０３  ＲＡＭ（Random Access Memory）
３７０４  通信回路
３７０５  通信インタフェース（Ｉ／Ｆ）
３７０６  バス
３７０７  電源端子
３７０８  グランド端子
３７１１  ECCハードウェア回路
３９０１  定数乗器
３９０２、４１０２  対策用定数記憶部
３９０３、４１０３  個人鍵記憶部
３９０４、４１０４  個人鍵変換部
３９０５  べき乗剰余演算器
３９０６  べき乗剰余演算器
３９０７、４１０７  補正鍵生成器
３９０８、４１０８  補正演算器
４１０１  定数倍器
４１０５  点のスカラー倍算器
４１０６  点のスカラー倍算器
【図１】
2012090289.tif 000003
【図２】
2012090289.tif 000004
【図３】
2012090289.tif 000005
【図４】
2012090289.tif 000006
【図５】
2012090289.tif 000007
【図６】
2012090289.tif 000008
【図７】
2012090289.tif 000009
【図８】
2012090289.tif 000010
【図９】
2012090289.tif 000011
【図１０】
2012090289.tif 000012
【図１１】
2012090289.tif 000013
【図１２】
2012090289.tif 000014
【図１３】
2012090289.tif 000015
【図１４】
2012090289.tif 000016
【図１５】
2012090289.tif 000017
【図１６】
2012090289.tif 000018
【図１７】
2012090289.tif 000019
【図１８】
2012090289.tif 000020
【図１９】
2012090289.tif 000021
【図２０】
2012090289.tif 000022
【図２１】
2012090289.tif 000023
【図２２】
2012090289.tif 000024
【図２３】
2012090289.tif 000025
【図２４】
2012090289.tif 000026
【図２５】
2012090289.tif 000027
【図２６】
2012090289.tif 000028
【図２７】
2012090289.tif 000029
【図２８】
2012090289.tif 000030
【図２９】
2012090289.tif 000031
【図３０】
2012090289.tif 000032
【図３１】
2012090289.tif 000033
【図３２】
2012090289.tif 000034
【図３３】
2012090289.tif 000035
【図３４】
2012090289.tif 000036
【図３５】
2012090289.tif 000037
【図３６】
2012090289.tif 000038
【図３７】
2012090289.tif 000039
【図３８】
2012090289.tif 000040
【図３９】
2012090289.tif 000041
【図４０】
2012090289.tif 000042
【図４１】
2012090289.tif 000043
【図４２】
2012090289.tif 000044
【図４３】
2012090289.tif 000045
【図４４】
2012090289.tif 000046
【図４５】
2012090289.tif 000047
【図４６】
2012090289.tif 000048
【図４７】
2012090289.tif 000049
【図４８】
2012090289.tif 000050
【図４９】
2012090289.tif 000051
【図５０】
2012090289.tif 000052
【図５１】
2012090289.tif 000053
【手続補正書】
【提出日】平成26年4月18日(2014.4.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
第１の基数aおよび法nを入力し、前記第１の基数aに対して所定定数を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を第２の基数bとして出力する定数乗器と、
第１の個人鍵dを入力し、前記第１の個人鍵dを前記所定定数で割った商として第２の個人鍵d’を演算する個人鍵変換器と、
前記第１の個人鍵dを前記所定定数で割った余りとして補正鍵d”を生成する補正鍵生成器と、
前記第２の基数bに対して前記第２の個人鍵d’を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を出力する第１のべき乗剰余演算器と、
前記第１の基数aに対して前記補正鍵d”を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を補正値として出力する第２のべき乗剰余演算器と、
前記第１のべき乗剰余演算器が出力する演算結果および前記第２のべき乗剰余演算器が出力する補正値を入力して、前記法nのもとでの乗算処理である補正演算を実行し、前記補正演算の演算結果を、前記第１の基数aに対して前記第１の個人鍵ｄを指数とし前記法nに関するべき乗剰余演算を実行した場合に得られる暗号処理結果として出力する補正演算器と
を備えることを特徴とする暗号処理装置。
【請求項２】
第１の楕円曲線上の点Aを入力し、前記第１の点Aに対して所定定数をスカラー値として点のスカラー倍算を実行し、演算結果を第２の楕円曲線上の点Bとして出力する定数倍器と、
第１の個人鍵dを入力し、前記第１の個人鍵dを前記所定定数で割った商として第２の個人鍵d’を演算する個人鍵変換器と、
前記第１の個人鍵dを前記所定定数で割った余りとして補正鍵d”を生成する補正鍵生成器と、
前記第２の点Bに対して前記第２の個人鍵d’をスカラー値として点のスカラー倍算を実行し、演算結果を出力する第１の点のスカラー倍算器と、
前記第１の点Aに対して前記補正鍵d”をスカラー値として点のスカラー倍算を実行し、演算結果を補正値として出力する第２の点のスカラー倍算器と、
前記第１の点のスカラー倍算器が出力する演算結果および前記第２の点のスカラー倍算器が出力する補正値を入力して、楕円曲線上の点の加算処理である補正演算を実行し、前記補正演算の演算結果を、前記第１の点Aに対して前記第１の個人鍵ｄをスカラー値として点のスカラー倍算を実行した場合に得られる暗号処理結果として出力する補正演算器と、
を備えることを特徴とする暗号処理装置。
【請求項３】
前記所定定数は１つ以上の素数を公約数とする値を有する、
ことを特徴とする請求項１または２に記載の暗号処理装置。
【請求項４】
前記所定定数は所定の乱数を公約数とする値を有する、
ことを特徴とする請求項３に記載の暗号処理装置。
【請求項５】
前記個人鍵変換器および前記補正鍵生成器は、暗号処理に先立って事前に、前記第２の個人鍵d’の演算と、前記補正鍵d”の生成を実行する、
ことを特徴とする請求項１または２に記載の暗号処理装置。
【請求項６】
暗号処理装置が行う暗号処理方法であって、
前記暗号処理装置の備える定数乗器が、第１の基数aおよび法nを入力し、前記第１の基数aに対して所定定数を指数とし前記法nに関するべき乗剰余演算を実行し、演算結果を第２の基数bとして出力し、
前記暗号処理装置の備える個人鍵変換器が、第１の個人鍵dを入力し、前記第１の個人鍵dを前記所定定数で割った商として第２の個人鍵d’を演算し、
前記暗号処理装置の備える補正鍵生成器が、前記第１の個人鍵dを前記所定定数で割った余りとして補正鍵d”を生成し、
前記暗号処理装置の備える第１のべき乗剰余演算器が、前記第２の基数bに対して前記第２の個人鍵d’を指数とし前記法nに関する第１のべき乗剰余演算を実行し、演算結果を出力し、
前記暗号処理装置の備える第２のべき乗剰余演算器が、前記第１の基数aに対して前記補正鍵d”を指数とし前記法nに関する第２のべき乗剰余演算を実行し、演算結果を補正値として出力し、
前記暗号処理装置の備える補正演算器が、前記第１のべき乗剰余演算の演算結果および前記第２のべき乗剰余演算の演算結果である補正値を入力して、前記法nのもとでの乗算処理である補正演算を実行し、前記補正演算の演算結果を、前記第１の基数aに対して前記第１の個人鍵ｄを指数とし前記法nに関するべき乗剰余演算を実行した場合に得られる暗号処理結果として出力する、
ことを特徴とする暗号処理方法。
【請求項７】
暗号処理装置が行う暗号処理方法であって、
前記暗号処理装置の備える定数倍器が、第１の楕円曲線上の点Aを入力し、前記第１の点Aに対して所定定数をスカラー値として点のスカラー倍算を実行し、演算結果を第２の楕円曲線上の点Bとして出力し、
前記暗号処理装置の備える個人鍵変換器が、第１の個人鍵dを入力し、前記第１の個人鍵dを前記所定定数で割った商として第２の個人鍵d’を演算し、
前記暗号処理装置の備える補正鍵生成器が、前記第１の個人鍵dを前記所定定数で割った余りとして補正鍵d”を生成し、
前記暗号処理装置の備える第１の点のスカラー倍算器が、前記第２の点Bに対して前記第２の個人鍵d’をスカラー値として点の第１のスカラー倍算を実行し、演算結果を出力し、
前記暗号処理装置の備える第２の点のスカラー倍算器が、前記第１の点Aに対して前記補正鍵d”をスカラー値として点の第２のスカラー倍算を実行し、演算結果を補正値として出力し、
前記暗号処理装置の備える補正演算器が、前記第１の点のスカラー倍算の演算結果および前記第２の点のスカラー倍算の演算結果である補正値を入力して、楕円曲線上の点の加算処理である補正演算を実行し、前記補正演算の演算結果を、前記第１の点Aに対して前記第１の個人鍵ｄをスカラー値として点のスカラー倍算を実行した場合に得られる暗号処理結果として出力する、
ことを特徴とする暗号処理方法。
【請求項８】
前記所定定数は１つ以上の素数を公約数とする値を有する、
ことを特徴とする請求項６または７に記載の暗号処理方法。
【請求項９】
前記所定定数は所定の乱数を公約数とする値を有する、
ことを特徴とする請求項８に記載の暗号処理方法。
【請求項１０】
前記個人鍵変換器および前記補正鍵生成器が、暗号処理に先立って事前に、前記第２の個人鍵d’の演算と、前記補正鍵d”の生成を実行する、
ことを特徴とする請求項６または７に記載の暗号処理方法。
【国際調査報告】
2012090289.tif 000054
2012090289.tif 000055