(57)【要約】【課題】秘密鍵をユークリッド除算式による乱数と商と剰余によって表現したべき乗剰余演算の演算コストを低減することにある【解決手段】秘密鍵をユークリッド除算による乱数と商と剰余によって表現したべき乗剰余演算を用いてRSA暗号処理を行う。特に、RSA暗号処理に用いるべき乗剰余演算の法nのビット長の正の整数分の一のビット長を持つ乱数rで秘密鍵を除して商と剰余に分解し、分解した商をさらに前記乱数で除して商と剰余に分解する処理を行うことにより、秘密鍵を前記乱数rの2次以上の高次式として扱う。これにより、小さなビット長の乱数rを用いる演算か可能になる。【選択図】図１
2012242539.tif 000002
【特許請求の範囲】
【請求項１】
秘密鍵をユークリッド除算による乱数と商と剰余によって表現したべき乗剰余演算を用いてRSA暗号処理を行うセキュリティシステムであって、
RSA暗号処理に用いるべき乗剰余演算の法nのビット長の正の整数分の一のビット長を持つ乱数rで秘密鍵を除して商と剰余に分解し、分解した商をさらに前記乱数で除して商と剰余に分解する処理を行うことにより、秘密鍵を前記乱数rの2次以上の高次式として処理する、セキュリティシステム。
【請求項２】
秘密鍵を前記乱数rの2次以上の高次式として暗号文を平文に復号するべき乗剰余演算として、
前記乱数rの最高次数に係る定数を、暗号文に対するべき指数としてべき乗剰余演算を行い、
その演算結果の剰余に対して前記乱数rをべき指数とするべき乗演算値と、前記乱数rの次の低位次数に係る定数をべき指数とする前記暗号文に対するべき乗演算値との積に対する法nを用いたべき乗剰余演算を、前記乱数rの最低次数に係る定数を用いるまで順次繰り返す処理を行う、請求項１記載のセキュリティシステム。
【請求項３】
カード基板に前記RSA暗号処理を行うマイクロコンピュータを搭載してICカードを構成する、請求項２記載のセキュリティシステム。
【請求項４】
秘密鍵をユークリッド除算による乱数rと商Dと剰余とによって表現したべき乗剰余演算を用いてRSA暗号処理を行うセキュリティシステムであって、
前記乱数rはRSA暗号処理に用いるべき乗剰余演算の法nのビット長の1/k（kは正の整数）のビット長を持ち、
前記RSA暗号処理において、前記乱数rで秘密鍵dを除して商と剰余に分解し、分解した商をさらに前記乱数で除して商と剰余に分解する処理を行うことにより、秘密鍵ｄを、
d = d[k]*rk + d[k-1]*rk-1 + d[k-2]*rk-2 + … + d[2]*r2 + d[1]*r + d[0]
で示される前記乱数rのk次の高次式として処理する、セキュリティシステム。
【請求項５】
秘密鍵を前記乱数rのk次の高次式として暗号文を平文に復号するべき乗剰余演算において、
前記乱数rのk次に係る定数を、暗号文に対するべき指数としてべき乗剰余演算
C=cd[k] mod n
を行い、
その演算結果の剰余Cに対して前記乱数rをべき指数とするべき乗演算値Crと、前記乱数rの次の低位次数k-iに係る定数d[k-i]をべき指数とする前記暗号文cに対するべき乗演算値cd[k-i]との積に対する法nを用いたべき乗剰余演算Cr *cd[k-i] mod nを、前記乱数rの最低次数０に係る定数d[0]を用いるまで順次繰り返す処理を行って、
前記暗号文cに対する平文mを
m=(cd[k]*r^k)*(cd[k-1]*r^(k-1))*(cd[k-2]*r^(k-2))*...*(cd[2]*r^2)*(cd[1]*r)*(cd[0])、
m=(((...((( cd[k])r *cd[k-1])r *cd[k-2])r *...)r *cd[2])r *cd[1])r *cd[0]
として得る、請求項４記載のセキュリティシステム。
【請求項６】
秘密鍵をユークリッド除算による乱数と商と剰余によって表現したべき乗剰余演算を用いてRSA暗号処理を行うプログラム処理回路を有し、
前記プログラム処理回路は、RSA暗号処理に用いるべき乗剰余演算の法nのビット長の正の整数分の一のビット長を持つ乱数rで秘密鍵を除して商と剰余に分解し、分解した商をさらに前記乱数で除して商と剰余に分解する処理を行うことにより、秘密鍵を前記乱数rの2次以上の高次式として処理する、マイクロコンピュータ。
【請求項７】
前記プログラム処理回路は、秘密鍵を前記乱数rの2次以上の高次式として暗号文を平文に復号するべき乗剰余演算として、
前記乱数rの最高次数に係る定数を、暗号文に対するべき指数としてべき乗剰余演算を行い、
その演算結果の剰余に対して前記乱数rをべき指数とするべき乗演算値と、前記乱数rの次の低位次数に係る定数をべき指数とする前記暗号文に対するべき乗演算値との積に対する法nを用いたべき乗剰余演算を、前記乱数rの最低次数に係る定数を用いるまで順次繰り返す処理を行う、請求項６記載のマイクロコンピュータ。
【請求項８】
前記プログラム処理回路が実行することによって前記RSA暗号処理を行うためのプログラムを格納する耐タンパー性能を備えたプログラムメモリ領域を有する、請求項７記載のマイクロコンピュータ。
【請求項９】
前記秘密鍵を格納する耐タンパー性能を備えた不揮発性メモリ領域を有する、請求項８記載のマイクロコンピュータ。
【請求項１０】
前記プログラム処理回路として、中央処理装置と、前記中央処理装置の制御に基づいて演算を行うコプロセッサとを有し、
前記コプロセッサは、ユークリッド除算を行うユークリッド除算部と、前記中央処理装置の制御に基づいてべき乗演算を行うべき乗演算部とを有する、請求項９記載のマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＲＳＡ（Rivest-Shamir-Adleman）アルゴリズムを用いて暗号化及び復号を行うマイクロコンピュータ及びセキュリティーシステムに関し、例えばＩＣ（Integrated Circuit）カードに適用して有効な技術に関する。
【背景技術】
【０００２】
RSAアルゴリズムを用いたセキュリティシステムにおいてＲＳＡ暗号演算処理に際しては、電力解析等によって秘密鍵が漏洩しないように対策しなければならない。このため、mを平文、cを暗号文、nを公開鍵（厳密には公開係数であるが本明細書では単に公開鍵若しくはべき乗剰余演算の法又は除数とも記すものとする）、dを秘密鍵（厳密には秘密指数であるが本明細書では単に秘密鍵とも記すものとする）、とするとき、べき乗剰余m=cd mod nのＲＳＡ基本関数は、秘密鍵と消費電力との相関がなくなるようランダム化する必要がある。法（除数）n=p*q（記号*は乗算を意味する）の因数分解が既知である場合、乱数rに対しcd = cd + r*(p-1)*(q-1)となるため、秘密鍵をランダム化することは難しくない。これにより、dの代わりにランダム化されたべき指数d + r*(p-1)*(q-1)を使用することが出来る。しかし、この方法は因数pとqが既知でない場合には適用出来ない。素因数pとqは公開鍵の一部ｎの生成に用いられるが、一旦ｎが生成された後処理で必ず既知とされるべき性質のものではない。こういった状況は、実際のＲＳＡ実装においてたびたび発生する。このような素因数を用いて秘密鍵を複数に分割する技術について例えば特許文献１に記載がある。
【０００３】
この点に関しては、d = r*d[1] + d[0]となるよう、乱数r を生成し、d[1]とd[0]<r を計算することによって解決することができる。ここで、d[1]はユークリッド除算d/rの商であり、d[0]は剰余を表す。その後、C=cr mod nを計算し、その計算結果を利用して、Cd[1]*cd[0] mod nの結果を得る。実際の計算は、(cr)d[1]*cd[0] mod nとなる。秘密鍵をユークリッド除算式による乱数と商と剰余によって表現して演算する技術については例えば特許文献２，３に記載がある。
【０００４】
尚、ユークリッド除算とはユークリッド整域における除算であることを意味するものであるが、本明細書ではユークリッド除算を単に除算とも記す。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】日本国特開２００４−４３４１号公報
【特許文献２】米国特許明細書第７４４７９１３号明細書
【特許文献３】日本国特表２００３−５１８８７２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明者は、秘密鍵をユークリッド除算式による乱数と商と剰余によって表現して演算する技術について検討した。これによれば、上記乱数rは上記法nのビットに応じて大きな数になる。例えば、法ｎが約２０００ビットのとき、乱数rは約１０００ビットになる。したがって、このような大きな整数のユークリッド除算の計算には非常に高いコストを要する。要するに、データ処理能力の高いプロセッサ若しくはアクセラレータが必要になる。ICカードに代表されるようなデータ処理能力に限りのある装置では、コプロセッサなどのアクセラレータを用いて実用的な速度でべき乗剰余乗算を行って剰余を出力することは可能であるが、そのようなハードウェアモジュールとしてのアクセラレータから直接、除数(r)に大きな整数を用いてユークリッド除算を行うことは容易ではない。これについて特許文献２，３では考慮されていない。
【０００７】
本発明の目的は、秘密鍵をユークリッド除算式による乱数と商と剰余によって表現したときのべき乗剰余演算の演算コストを低減することにある。
【０００８】
本発明の前記並びにその他の目的と新規な特徴は本明細書の記述及び添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００９】
本願において開示される発明のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【００１０】
すなわち、秘密鍵をユークリッド除算による乱数と商と剰余によって表現したべき乗剰余演算を用いてRSA暗号処理を行う。特に、RSA暗号処理に用いるべき乗剰余演算の法nのビット長の正の整数分の一のビット長を持つ乱数rで秘密鍵を除して商と剰余に分解し、分解した商をさらに前記乱数で除して商と剰余に分解する処理を行うことにより、秘密鍵を前記乱数rの2次以上の高次式として扱う。これにより、小さなビット長の乱数rを用いる演算か可能になる。
【００１１】
また、秘密鍵を前記乱数rの2次以上の高次式として暗号文を平文に復号するべき乗剰余演算では、前記乱数rの各次数に係る定数毎に暗号文に対するべき指数としてべき乗剰余演算を順次階層的に行う。これにより、暗号文の復号に際して、前記乱数rの2次以上の高次式における各項に対応する演算が軽減される。
【発明の効果】
【００１２】
本願において開示される発明のうち代表的なものによって得られる効果を簡単に説明すれば下記のとおりである。
【００１３】
すなわち、秘密鍵をユークリッド除算式による乱数と商と剰余によって表現したべき乗剰余演算の演算コストを低減することができる。
【図面の簡単な説明】
【００１４】
【図１】図１は本発明の一実施の形態に係るＲＳＡ復号処理を例示するフローチャートである。
【図２】図２はバイナリ法によるべき乗剰余計算アルゴリズムを例示するフローチャートである。
【図３】図３はユークリッド除算によるランダム化べき乗処理を例示するフローチャートである。
【図４】図４は高速多重べき乗演算処理として、２つのべき指数a、bによるべき乗、Ca*cb mod nを計算するためのアルゴリズムを例示するフローチャートである。
【図５】図５は配列d[k], …, d[0]の計算処理を例示するフローチャートである。
【図６】図６はgビットの除数 rによるD’のユークリッド除算処理を例示するフローチャートである。
【図７】図７はランダム化べき指数によるcd mod nの計算処理を例示するフローチャートである。
【図８】図８はランダム化べき指数によるcd mod nの計算処理を採用したＩＣカード用のマイクロコンピュータの構成を例示するブロックダイアがラムである。
【図９】図９はＩＣカードによるＲＳＡ復号処理を行うハードウェア部とハードウェア部間のデータの受け渡しについて例示した説明図である。
【発明を実施するための形態】
【００１５】
１．実施の形態の概要
先ず、本願において開示される発明の代表的な実施の形態について概要を説明する。代表的な実施の形態についての概要説明で括弧を付して参照する図面中の参照符号はそれが付された構成要素の概念に含まれるものを例示するに過ぎない。
【００１６】
〔１〕＜秘密鍵を、商と剰余をパラメータとして持ち乱数rの2次以上の高次式に分解＞
本発明の代表的な実施の形態に係るセキュリティシステムは、秘密鍵をユークリッド除算による乱数と商と剰余によって表現したべき乗剰余演算を用いてRSA暗号処理を行うシステムである。特に、RSA暗号処理に用いるべき乗剰余演算の法nのビット長の正の整数分の一のビット長を持つ乱数rで秘密鍵を除して商と剰余に分解し、分解した商をさらに前記乱数で除して商と剰余に分解する処理を行うことにより、秘密鍵を前記乱数rの2次以上の高次式として処理する（Ｓ１３）。
【００１７】
これにより、小さなビット長の乱数rを用いる演算が可能になる。rの値はランダムであるから、rを用いたべき乗はランダム化され、電力解析による秘密鍵の漏洩防止に資することができる。特に、rを用いたべき乗は、法n=p*qの因数p、qを知らなくてもランダム化することが可能である。また、rは法よりもk倍小さいため、rのサイズを自由に選択することが出来る。特にrのビット長が十分短い場合に、ユークリッド除算を効率的に計算することが出来る。例えば、rが16ビットの場合、多くのCPUアーキテクチャの命令セットで使用される、32ビットのユークリッド除算を連続して行うことにより、商と剰余を効率的に計算することが出来る。このような32ビットのユークリッド除算処理を専用ハードウェア回路へ実装する場合にはこれを低コストで実現することが可能である。
【００１８】
〔２〕＜乱数rの2次以上の高次式として扱われる秘密鍵を用いた復号処理＞
項１のセキュリティシステムは、秘密鍵を前記乱数rの2次以上の高次式として暗号文を平文に復号するべき乗剰余演算として、前記乱数rの最高次数に係る定数を、暗号文に対するべき指数としてべき乗剰余演算を行い、その演算結果の剰余に対して前記乱数rをべき指数とするべき乗演算値と、前記乱数rの次の低位次数に係る定数をべき指数とする前記暗号文に対するべき乗演算値との積に対する除数nを用いたべき乗剰余演算を、前記乱数rの最低次数に係る定数を用いるまで順次繰り返す処理を行う（Ｓ１４）。
【００１９】
これにより、暗号文の復号に際して、前記乱数rの2次以上の高次式における各項に対応する演算が軽減される。
【００２０】
〔３〕＜ICカード＞
項２のセキュリティシステムは、カード基板に前記RSA暗号処理を行うマイクロコンピュータ（１）を搭載してICカード（１０）を構成する。
【００２１】
CPUパワーが限られたICカードにおいても電力解析による秘密鍵の漏洩防止が保証される。
【００２２】
〔４〕＜秘密鍵を、商と剰余をパラメータとして持ち乱数rの2次以上の高次式に分解＞
本発明の更に具体的な実施の形態に係るセキュリティシステムは、秘密鍵をユークリッド除算による乱数rと商Dと剰余とによって表現したべき乗剰余演算を用いてRSA暗号処理を行うシステムである。特に、前記乱数rはRSA暗号処理に用いるべき乗剰余演算の法nのビット長の1/k（kは正の整数）のビット長を持つ。前記RSA暗号処理において、前記乱数rで秘密鍵dを除して商と剰余に分解し、分解した商をさらに前記乱数で除して商と剰余に分解する処理を行うことにより、秘密鍵ｄを、
d = d[k]*rk + d[k-1]*rk-1 + d[k-2]*rk-2 + … + d[2]*r2 + d[1]*r + d[0]
で示される前記乱数rのk次の高次式として処理する（Ｓ１３、図５）。
上記秘密鍵としてのべき指数ｄに関する高次式は、例えば以下の処理ステップで演算することができる。
法nのビット長よりk倍小さいビット長の乱数rを生成する。D’=dに設定する。
Step 0：ユークリッド除算D’/rの商と剰余、Dとd[0]を計算する。D’=D に設定する。 
Step 1：ユークリッド除算D’/rの商と剰余、Dとd[1]を計算する。D’=D に設定する。
Step 2：ユークリッド除算D’/rの商と剰余、Dとd[2]を計算する。D’=D に設定する。
…
Step k-2：ユークリッド除算D’/rの商と剰余、Dとd[k-2]を計算。D’=D に設定する。
Step k-1：ユークリッド除算D’/rの商と剰余、Dとd[k-1]を計算。D’=D に設定する。
Step k：ユークリッド除算D’/rの商と剰余、Dとd[k]を計算。D’=D に設定する。
【００２３】
これにより、項１と同様の作用効果を得る。
【００２４】
〔５〕＜乱数rの2次以上の高次式として扱われる秘密鍵を用いた復号処理＞
項４のセキュリティシステムは更に、秘密鍵を前記乱数rのk次の高次式として暗号文を平文に復号するべき乗剰余演算において、前記乱数rのk次に係る定数を、暗号文に対するべき指数としてべき乗剰余演算
C=cd[k] mod n
を行い、その演算結果の剰余Cに対して前記乱数rをべき指数とするべき乗演算値Crと、前記乱数rの次の低位次数k-iに係る定数d[k-i]をべき指数とする前記暗号文cに対するべき乗演算値cd[k-i]との積に対する法nを用いたべき乗剰余演算Cr *cd[k-i] mod nを、前記乱数rの最低次数０に係る定数d[0]を用いるまで順次繰り返す処理を行って、前記暗号文cに対する平文mを
m=(cd[k]*r^k)*(cd[k-1]*r^(k-1))*(cd[k-2]*r^(k-2))*...*(cd[2]*r^2)*(cd[1]*r)*(cd[0])、
m=(((...((( cd[k])r *cd[k-1])r *cd[k-2])r *...)r *cd[2])r *cd[1])r *cd[0]
として得る（Ｓ１４，図６、図7）。
上記べき乗剰余演算は、例えば以下の処理ステップで演算することができる。
Step k：べき乗C=cd[k] mod n を計算する。
Step k-1：べき乗C=Cr *cd[k-1] mod nを計算する。
Step k-2：べき乗C=Cr *cd[k-2] mod nを計算する。
…
Step 2：べき乗C=Cr *cd[2] mod nを計算する。
Step 1：べき乗C=Cr * cd[1] mod n を計算する。
Step 0：べき乗m=Cr * cd[0] mod n を計算する。
【００２５】
これにより、項２と同様の作用効果を得る。
【００２６】
〔６〕＜秘密鍵を、商と剰余をパラメータとして持ち乱数rの2次以上の高次式に分解＞
本発明の更に別の実施の形態に係るマイクロコンピュータ（１）は、秘密鍵をユークリッド除算による乱数と商と剰余によって表現したべき乗剰余演算を用いてRSA暗号処理を行うプログラム処理回路（２，３）を有する。前記プログラム処理回路は、RSA暗号処理に用いるべき乗剰余演算の法nのビット長の正の整数分の一のビット長を持つ乱数rで秘密鍵を除して商と剰余に分解し、分解した商をさらに前記乱数で除して商と剰余に分解する処理を行うことにより、秘密鍵を前記乱数rの2次以上の高次式として処理する（Ｓ１３）。
【００２７】
これによれば、項１と同様の作用効果を奏し、小さなビット長の乱数rを用いる演算が可能になる。
【００２８】
〔７〕＜乱数rの2次以上の高次式として扱われる秘密鍵を用いた復号処理＞
項６のマイクロコンピュータにおいて、前記プログラム処理回路は、秘密鍵を前記乱数rの2次以上の高次式として暗号文を平文に復号するべき乗剰余演算として、前記乱数rの最高次数に係る定数を、暗号文に対するべき指数としてべき乗剰余演算を行い、その演算結果の剰余に対して前記乱数rをべき指数とするべき乗演算値と、前記乱数rの次の低位次数に係る定数をべき指数とする前記暗号文に対するべき乗演算値との積に対する法nを用いたべき乗剰余演算を、前記乱数rの最低次数に係る定数を用いるまで順次繰り返す処理を行う（Ｓ１４）。
【００２９】
これによれば、項２と同様に作用効果を奏する。
【００３０】
〔８〕＜プログラムメモリ領域＞
項７のマイクロコンピュータにおいて、前記プログラム処理回路が実行することによって前記RSA暗号処理を行うためのプログラムを格納する耐タンパー性能を備えたプログラムメモリ領域（６）を有する。
【００３１】
これによれば、上記RSA暗号処理を実現する環境を容易に実現することができる。
【００３２】
〔９〕＜秘密鍵を格納する不揮発性メモリ領域＞
項８のマイクロコンピュータにおいて、前記秘密鍵を格納する耐タンパー性能を備えた不揮発性メモリ領域（４）を有する。
【００３３】
これによれば、秘密鍵に対する不正アクセス防止を更に万全とする事ができる。
【００３４】
〔１０〕＜外部インタフェース回路＞
項９のマイクロコンピュータにおいて、前記プログラム処理回路として、中央処理装置（２）と、前記中央処理装置の制御に基づいて演算を行うコプロセッサ（３）とを有し、前記コプロセッサは、ユークリッド除算を行うユークリッド除算部（３１）と、前記中央処理装置の制御に基づいてべき乗演算を行うべき乗演算部（３４）とを有する。
【００３５】
これにより、RSA暗号処理演算の高速化に資することができる。
【００３６】
２．実施の形態の詳細
実施の形態について更に詳述する。
【００３７】
＜電力解析に対して保護されていないRSA＞
先ず、電力解析に対して秘密鍵の漏洩防止が充分に対策されていない場合を一例としてＲＳＡ処理における剰余乗算処理の基本的なアルゴリズムを説明する。
【００３８】
RSA暗号システムは、c を暗号化されたメッセージ、d を秘密鍵とするm=cd mod n等のべき乗剰余演算を行う。結果mは復号されたメッセージ(平文)を表す。
【００３９】
図２にはバイナリ法によるべき乗剰余計算アルゴリズムが例示される。
【００４０】
RSAのべき乗剰余演算は、通常は図２に示すバイナリ法により実装される。べき指数のビットを左から右にスキャンし（Ｓ１)、アキュムレータを２乗（m2）してステップＳ２の演算を行う。スキャンされたビットがゼロ以外のとき、底cとの乗算を計算し（m*c）してステップＳ３の演算を行う。このプロセスは、全ビットがスキャンされるまで繰り返される。しかし、アタッカによってべき乗の入力cを制御される可能性があり、アタッカがこの入力を十分な回数行い、それによって得られた消費電力を観察することにより、消費電力曲線におけるノイズの平均値が割り出され、秘密鍵が漏洩されてしまう可能性がある。このため、べき乗演算時に秘密鍵（べき指数）をランダム化することが重要となる。
【００４１】
図３にはユークリッド除算によるランダム化べき乗処理の概略が例示される。ここでは、RSA暗号システムに適用可能な、ランダム化されたべき乗を計算するための既に提供されているソリューションの概要を示すものである。法の半分のサイズの乱数rを使って、べき指数を２つに分解する。すなわち、d=d[1]*r + d[0]とする（Ｓ４）。数値d[0]、d[1]は、ユークリッド除算d/rの商と剰余を表す。
【００４２】
ステップＳ４で求められたべき指数に対してステップＳ４及ぶステップＳ５の処理を行うことによって暗号文ｃが平文ｍに復号される。ステップＳ５，Ｓ６の処理におけるべき乗cr mod n、Cd[1] mod n、cd[0] mod nの演算において、べき指数はランダムであり、そのビット数は元のべき指数dのサイズの半分である。また、Cd[1] mod nとcd[0] modの２つのべき乗を、約１つ分のコストで、同時に計算することが出来る。これについては後述する。しかしながら、このアルゴリズムのべき乗部は、速度の面で大きく不利とはならないが、d[1]、d[0]の計算を効率的に行うことが出来ないため、実際には、処理時間全体に大きく影響する。以下、その処理時間を短縮もしくは演算コストを低減する構成について説明する。
【００４３】
先ず、本発明の実施の形態でも利用する高速多重べき乗演算処理について説明する。ここで説明する高速多重べき乗演算処理は図３におけるステップＳ６の処理にも適用可能なものである。
【００４４】
図４には高速多重べき乗演算処理として、２つのべき指数a、bによるべき乗、Ca*cb mod nを計算するためのアルゴリズムが例示される。単純な方式としては図１のバイナリ法を使ってCa mod nとcb mod nを別々に計算するが、高速多重べき乗演算処理ではそれらのべき乗を同時に計算して効率化するものである。図４では、入力c、C、事前計算値c*C mod nでテーブルを初期化し（Ｓ７）、２つのべき指数a、bの２進表記をスキャンする（Ｓ８）。べき乗のアキュムレータは２乗されて（X2）ステップS9の処理が行われるが、乗算工程（Ｓ１０、Ｓ１１)では、以下の（ａ）〜（ｄ）うちのいずれかが行われる。
（ａ）２つのべき指数のビットがゼロのとき、乗算工程はスキップされ、次の反復に進む。
（ｂ）aのべき指数のビットがゼロ以外で、bのべき指数のビットがゼロのとき、Cの乗算を計算する。
（ｃ）aのべき指数のビットがゼロで、bのべき指数のビットがゼロ以外のとき、cの乗算を計算する。
（ｄ）２つのべき指数のビットがゼロ以外のとき、c*C mod nの乗算を計算する。
【００４５】
図４のアルゴリズムで必要となるのは、多くてg-1回の２乗と g-1回の乗算、また平均g-1回の２乗と3/4*(g-1)回の乗算であり、2*(g-1)回の２乗とg-1回の乗算に関する単純な方式と比べて演算コストは非常に有利となる。
【００４６】
＜電力解析に対して保護されたRSA＞
次に、電力解析に対して保護されたRSA暗号処理を実現するために、反復ユークリッド除算によるランダム化べき乗を採用した本発明の実施の形態について説明する。
【００４７】
本発明の実施の形態において説明する、反復ユークリッド除算による高速ランダム化べき乗演算の特徴的な点は、d[1]、d[0]の２つの数値だけでなく、小さい数値d[i]でより長い配列が得られるよう、ユークリッド除算を繰り返すことである。その結果、配列を長くすることで、ユークリッド除算に含まれるオペランドのビット長を短くすることが可能となり、これによって、より効率的にソフトウェアとハードウェアの実装を行うことが可能になる。
【００４８】
図１には電力解析に対して保護されたRSA復号処理が全体的に例示される。
【００４９】
先ず、暗号文c、秘密鍵d、法n、パラメータg,t,kを入力する（Ｓ１１）。次にgビットの乱数rを生成する（Ｓ１２)。gは法nの1/kのビット数とされる。
【００５０】
次に、d[k], d[k-1], …, d[0]の計算を行う（Ｓ１３)。この計算手法の具体例については図５に基づいて後述することとする。
【００５１】
ステップＳ１３の計算は、前記乱数rで秘密鍵dを除して商と剰余に分解し、分解した商をさらに前記乱数で除して商と剰余に分解する処理を繰り返し行えばよい。例えば、D’=dに設定して以下のステップを順次実行すればよい。
Step 0：ユークリッド除算D’/rの商と剰余、Dとd[0]を計算する。D’=D に設定する。 
Step 1：ユークリッド除算D’/rの商と剰余、Dとd[1]を計算する。D’=D に設定する。
Step 2：ユークリッド除算D’/rの商と剰余、Dとd[2]を計算する。D’=D に設定する。
…
Step k-2：ユークリッド除算D’/rの商と剰余、Dとd[k-2]を計算。D’=D に設定する。
Step k-1：ユークリッド除算D’/rの商と剰余、Dとd[k-1]を計算。D’=D に設定する。
Step k：ユークリッド除算D’/rの商と剰余、Dとd[k]を計算。D’=D に設定する。
【００５２】
これによってべき指数としての秘密鍵ｄは、
d = d[k]*rk + d[k-1]*rk-1 + d[k-2]*rk-2 + … + d[2]*r2 + d[1]*r + d[0]
となる。
【００５３】
次に、m=cd mod n の計算を行う（Ｓ１４）。この計算手法の具体例については図７に基づいて後述することとする。
【００５４】
ステップＳ１４の計算は、前記乱数rのk次に係る定数を、暗号文に対するべき指数としてべき乗剰余演算
C=cd[k] mod n
を行い、その演算結果の剰余Cに対して前記乱数rをべき指数とするべき乗演算値Crと、前記乱数rの次の低位次数k-iに係る定数d[k-i]をべき指数とする前記暗号文cに対するべき乗演算値cd[k-i]との積に対する法nを用いたべき乗剰余演算Cr *cd[k-i] mod nを、前記乱数rの最低次数０に係る定数d[0]を用いるまで順次繰り返す処理を行えばよい。例えば、このべき乗剰余演算は以下の処理ステップで演算することができる。
Step k： C=cd[k] mod n を計算する。
Step k-1： C=Cr *cd[k-1] mod nを計算する。
Step k-2： C=Cr *cd[k-2] mod nを計算する。
…
Step 2： C=Cr *cd[2] mod nを計算する。
Step 1： C=Cr * cd[1] mod n を計算する。
Step 0： m=Cr * cd[0] mod n を計算する。
【００５５】
これにより、メッセージmとして、
m=(cd[k]*r^k)*(cd[k-1]*r^(k-1))*(cd[k-2]*r^(k-2))*...*(cd[2]*r^2)*(cd[1]*r)*(cd[0])、
m=(((...((( cd[k])r *cd[k-1])r *cd[k-2])r *...)r *cd[2])r *cd[1])r *cd[0]
を得る。
【００５６】
図１の処理を更に詳述する。
【００５７】
図５には配列d[k], …, d[0]の計算処理が例示される。この処理における中心的な演算は、ユークリッド除算D’/rであり、商Dと、d[i]<rとなる剰余d[i]を出力する（Ｓ２１）。この計算処理においては、従来の計算方法と比べて、乱数rのビット長に対する選択自由度がより高いことに注目されたい。特に、rのビット長が短い場合、ユークリッド除算D’/rに対し、次の図６に示すように、ハードウェア・ソフトウェア上で効率的に計算することが出来る。
【００５８】
図６にはgビットの除数 rによるD’のユークリッド除算処理、即ち図５のステップＳ２１の処理が例示される。D”を最大でも2gビットとしたときの、最小単位のユークリッド除算D”/rに依存していることに注意する。gが十分小さい値の場合、このようなgビット除数による、2gビット整数のユークリッド除算の計算は簡単である。これは、例えばg=16の場合、一般的には主流のCPUアーキテクチャによって直接サポートされる、16ビット除数r による32ビット整数D”の除算に相当する。当然ながら、アーキテクチャによっては、gの値が異なる方が望ましい場合もある。
【００５９】
図７にはランダム化べき指数によるcd mod nの計算処理が例示される。ここでは、べき乗cd mod nを計算するための、配列d[k],…,d[0]の使用について示す。gビットのべき指数によるkのべき乗Cr*cd[i] mod nが存在する。gビットのべき指数は、最大べき指数dよりk倍小さいため、これらのべき乗演算は、最大べき乗と比べて約k倍速くなる。このため、本実施の形態では、通常のRSAべき乗演算と同程度の速度でランダム化を行い、秘密鍵dの漏洩を防ぐことが出来る。べき乗Cr*cd[i] mod nの計算可能な手法は図４に示されるとおりである。
【００６０】
図８には上記ランダム化べき指数によるcd mod nの計算処理を採用したICカード用のマイクロコンピュータのハードウェア構成が例示される。
【００６１】
同図に示されるICカード用のマイクロコンピュータ１はＩＣカード１０に適用される。ICカード用のマイクロコンピュータ１は、他の電子機器と通信するための外部入出力インタフェース部（IO）７や、EEPROMのような電気的に書き換え可能な不揮発性メモリ４から読み出されるデータ（d,n,t,g,k）と中間データを保存するためのRAM５を使って、ROM６に格納されたRSA復号プログラムなどのプログラムを実行する中央処理装置（CPU）２を備える。接触インタフェース型のＩＣカード10の場合には図示を省略するカード基板の表面に形成された接触端子に外部入出力インタフェース部（IO）７が接続される。近接非接触通信を行うＩＣカード10の場合には図示を省略するカード基板にアンテナが形成され、外部入出力インタフェース部（IO）７は近接非接触通信のためのアナログ高周波部を有し、このアナログ高周波部に前記アンテナが接続される。
【００６２】
乱数rは乱数生成部（RNG）８で生成する。ICカード用のマイクロコンピュータ１の内部回路は内部バス９で相互に接続される。不揮発性メモリ４は耐タンパー性能を備える。不揮発性メモリの耐タンパー性とは、記憶情報の不正アクセスや回路の改変に対する防護力を意味する。耐タンパ性を高める技術として、例えばLSIを解析するために保護層をはがすと、内部の回路まで破壊されるようにする技術などがある。
【００６３】
ICカード用のマイクロコンピュータ１は、CPU２で実行されるRSA暗号処理プログラムによって、暗号化されたメッセージを復号するために用いられる。復号には、演算コストの非常に高いべき乗演算が用いられる。このため、ICカード用のマイクロコンピュータ１は、プログラム処理回路としてCPU2のほかに、高速な復号を可能とするアクセラレータとしてのコプロセッサ３を搭載指定する。さらにICカード用のマイクロコンピュータ１は、EEPROM４に格納された、RSA復号プログラムで使用される秘密鍵を保護するために、上記ランダム化べき指数によるcd mod nの演算処理を必要とするため、コプロセッサ３は、ユークリッド除算部３１を用いて図５で説明したプロセスを実行する配列計算部３２と、高速多重べき乗演算部３４を用いて図７のプロセスを実行するべき乗演算部３３で構成される。
【００６４】
図９にはＩＣカード用のマイクロコンピュータ１によるＲＳＡ復号処理を行うハードウェア部とハードウェア部間のデータ通信について例示される。図９には示していないが、CPU２は復号プログラムを実行することで、ハードウェア部の処理とハードウェア部間のデータ通信に対する制御を行う。
【００６５】
ICカード用のマイクロコンピュータ１は外部入出力インタフェース部７から暗号文cを受信する。復号の結果は、コプロセッサ３で計算されたメッセージm=cd mod nである。また、暗号文cとともにコプロセッサ３に入力するデータには、EEPROM４に格納された秘密鍵d、dのビット長t、乱数のビット長g、ceil(t/g)とするパラメータkと、RNG８で生成する乱数rがある。ceil(t/g)はt/gの小数点以下を繰り上げた整数値を返す関数である。
【００６６】
コプロセッサ３は、図６のユークリッド除算を行うユークリッド除算部３１と、図５のプロセスを実行する配列計算部３２を使って、d[k-1], …, d[0]の配列を計算する。配列計算部３２は、RNG８から得るgビットの乱数rを必要とする。その後、図６のプロセスを実行するユークリッド除算部を使って、秘密鍵dを乱数rで割るユークリッド除算の連続によりd[i]を計算する。
【００６７】
d[k], …, d[0]の配列を得た後、図７のプロセスを実行するべき乗演算部３３は、cd mod nのべき乗剰余を計算する。具体的には、べき乗演算部はC=Cr*cd[i] mod n の計算をk回繰り返す。ここで、小さい指数rとd[i]のべき乗演算は、図４のプロセスを実行する高速多重べき乗演算部によって行われる。結果は復号化されたメッセージm = cd mod nとなる。
【００６８】
＜RSA復号の具体例＞
次にRSA復号処理の具体例を説明する。
【００６９】
RSA暗号化のための法nを53*59=3127、公開指数eを17、RSA復号化のための秘密鍵dを2129とすると、べき乗演算c=me mod n = 10002129 mod 3127 = 2931でメッセージm=1000を暗号化できる。実際には、暗号文c=2931の復号化はcd mod n = 29312129 mod 3127 = 1000となる。
【００７０】
復号のランダム化と秘密鍵dの漏洩防止のため、上記実施の形態に示す方法を使用する。ここで、指数のビット長tを12ビット、乱数のビット長を4ビットとすると、k=ceil(t/g)=3となり、べき乗演算に使う配列は4つの4ビット d[3], d[2], d[1], d[0]となる。
【００７１】
はじめに、配列の計算について説明する。4ビットの乱数rを生成し、例えば、r=11の場合、最初はD’=d=2129となる。193*11+6=2129で、一番目の除算D’/r = 2129/11の剰余は6、商は193となるため、D=193、d[0]=6とする。二番目の除算D’/r = 193/11の剰余は6、商は17となるため、D=17、d[1]=6とする。三番目の除算D’/r = 17/11の剰余は6、商は1となるため、d[2]=6、d[3]=1とする。この結果、配列が1,6,6,6となる。実際には1*113 + 6*112 + 6*111 + 6*110=2129となる。
【００７２】
乱数が異なると、異なる配列が生成される。例えば、r=12の場合、一番目の除算2129/12の剰余はd[0]=6で、商は177となる。二番目の除算177/12の剰余はd[1]=9で、商は14となり、三番目の除算14/11の剰余は2で、商は1となる。この結果、配列は1,2,9,5となる。実際には1*123 + 2*122 + 9*121 + 5*120=2129となる。
【００７３】
乱数が4ビット、最上位ビットが1であることから、配列の組み合わせは8通りとなる。実際にはさらに大きな整数を使用するため、幾通りもの配列を実現し、低コストでの計算が可能となるような乱数のビット長を選ばなければならない。この点について16ビットの乱数は有利であるが、他の設定も可能である。
【００７４】
例の残りの部分において、配列を1,2,9,5、r=12とする。d[3]=1であるため、CをC=c1 mod 3127=2931で初期化する。一番目のべき乗演算では、図４の高速多重べき乗演算部を使ってC=Cr*cd[2] mod n = 293112*29312 mod 3127を計算する。テーブルをT[0,1] = 2931, T[1,0] = 2931とT[1,1] = 2931*2931 mod 3127 = 892で初期化する。指数はa=12=(1100)2、b=2=(0010)2である。
【００７５】
a3=1、b3=0であるため、T[1,0]=2931でアキュムレータを初期化する。
【００７６】
次に、二乗算C2 mod n = 2931*2931 mod 3127 = 892を計算する。a2=1、b2=0であるため、掛算C=C*T[1,0] mod n = 892*2931 mod 3127 = 280を行う。
【００７７】
次に、二乗算C2 mod n = 280*280 mod 3127 = 225を計算する。a1=0、b1=1であるため、掛算C=C*T[0,1] mod n = 225*2931 mod 3127 = 2805を行う。
【００７８】
次に、二乗算C2 mod n = 2805*2805 mod 3127 = 493を計算する。a0=0、b0=0であるため、掛算は行わない。
【００７９】
一番目の多重べき乗演算の結果はC=493となる。同様に、二番目の多重べき乗演算はCr*cd[1] mod n = 49312*29319 mod 3127で、詳細を割愛すると、結果はC=2109となる。最後の多重べき乗演算はCr*cd[0] mod n = 210912*29315 mod 3127で、結果は、復号化されたメッセージC=1000となる。
【００８０】
以上本発明者によってなされた発明を実施形態に基づいて具体的に説明したが、本発明はそれに限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能であることは言うまでもない。
【００８１】
例えば、法ｎ、乱数ｒなどのサイズは適宜決定すればよい。本発明はICカードに適用される場合だけに限定されるものではなく、携帯電話やPDAなどの携帯端末などにも広く適用することができる。本発明に持ちいれCPUは32ビットに限定されず、16ビット又は64ビットなどであってもよい。
【符号の説明】
【００８２】
１  ICカード用のマイクロコンピュータ
２  ＣＰＵ
３  コプロセッサ
４  不揮発性メモリ(EEPRPM)
５  RAM
６  ROM
７  外部入出力インタフェース部（IO）
８  乱数生成部（RNG）
９  内部バス
１０  ＩＣカード
【図１】
2012242539.tif 000003
【図２】
2012242539.tif 000004
【図３】
2012242539.tif 000005
【図４】
2012242539.tif 000006
【図５】
2012242539.tif 000007
【図６】
2012242539.tif 000008
【図７】
2012242539.tif 000009
【図８】
2012242539.tif 000010
【図９】
2012242539.tif 000011