(57)【特許請求の範囲】
【請求項１】
データ及び／またはプログラムの秘密配布方法であって、当該方法が、
送信すべき前記データ及び／またはプログラムに、発行ユニットにおいて、付与手段により電子署名を与える工程、
前記電子署名を、前記データ及び／またはプログラムを受信するユニットにおいて、検査手段により検査する工程であって、当該検査に乗算及び除算を必要とするモジュラー乗算の実行を含むもの、
を有してなり、
前記モジュラー乗算が、モンゴメリー乗算であって、前記モンゴメリー乗算において、２を底とする因数及び偶数指数による補助乗算が行われたときに、前記補助乗算の因数が相殺されるように、前記データ及び／またはプログラムを発行するユニットにおいて、前記電子署名に前記モンゴメリー乗算から導かれる因数を乗算手段により乗じておくことを特徴とする方法。
【請求項２】
前記データ及び／またはプログラムが、前記発行ユニットから、前記受信するユニットとして機能するスマートカード端末あるいはスマートカードに転送されることを特徴とする請求項１記載の方法。
【発明の詳細な説明】
【０００１】
本発明は、特許請求項１の前文にしたがうデータ及び／またはプログラムの、秘密配布方法に関する。
【０００２】
発行ユニットによる極めて多数の類似の端末またはスマートカードにソフトウエアＳＷを配布するための方法が、特に遠隔通信機能により、次第に度をましながら用いられている。発行ユニットは、ソフトウエアＳＷの信頼性を保証するために公開キー法を用いてソフトウエアＳＷの電子署名を生成する。
【０００３】
発行ユニットは署名されるべきソフトウエアＳＷに対して、その他のデータとともに、主として、ソフトウエアに依存するハッシュ値Ｈ(ＳＷ)を含む保証Ｍを計算するために、一般に知られている方法を用いる。Ｈ(ＳＷ)は広く知られているハッシング法である。発行ユニットは、非公開キーＤにより保証Ｍを暗号化する。この暗号化の結果が電子署名Ｓである。発行ユニットはソフトウエアＳＷを署名Ｓと一緒に端末またはスマートカードに送信する。端末またはスマートカードで、生成された保証の値Ｍが発行ユニットの公開キーＥ＝Ｄ−１を用いて署名Ｓから計算される。さらに、端末またはスマートカード、すなわち受信ユニットはソフトウエアＳＷのハッシュ値Ｈ(ＳＷ)を計算し、Ｈ(ＳＷ)が保証Ｍに正しく入れられているか否かを検査する。正しく入れられていれば受信ユニットはソフトウエアＳＷを受け入れ、そうでなければソフトウエアＳＷを受け入れない。
【０００４】
電子署名を生成するための最もよく知られた公開キー法は、ＲＳＡ法である。ＲＳＡ法の変形がラビン(Rabin)法、あるいはウイリアムズ(Williams)によるラビン法の変形である。
【０００５】
発行ユニットは２つの素数Ｐ＝３ (ｍｏｄ ８)及びＱ＝７ (ｍｏｄ ８)をランダムに選択する。これらは発行ユニットの非公開キーを構成する。公開キーは、値Ｎ＝Ｐ＊Ｑである。署名メッセージＭに対し、発行ユニットは署名：
Ｓ＝Ｍ１/２ (ｍｏｄ Ｐ＊Ｑ)
を計算する。受信ユニットは：
Ｍ＝Ｓ２ (ｍｏｄ Ｎ)
を計算することにより署名を検証できる。ラビン法の秘密性は、（もし存在すれば）素数を法とする数を開平することは容易であるが、一方合成数を法とするランダムに選ばれた数を開平することは少なくとも合成数を因数分解すると同様に困難であるという事実に基づいている。
【０００６】
必ずしも全ての数が素数ＰまたはＱを法とする平方剰余ではなく；さらに、Ｐ及びＱを法とする平方剰余は通常４つの平方根をもつ。特別なＰ及びＱを選択することにより、いかなる数Ｍに対しても４つの数Ｍ，Ｎ−Ｍ，Ｎ/２及びＮ−Ｍ/２の内の正に１つが（Ｍが奇数で、Ｎ/２が(Ｍ＋Ｎ)/２ (Ｐ＊Ｑ)で置き換えられた場合に）Ｐを法とし、またＱも法とする平方剰余である。この主張は平方剰余の相互法則に対する補助定理から導かれる。
【０００７】
メッセージＭに対して付加条件Ｍ＝４ (ｍｏｄ ８)が必要であれば、Ｎ＝Ｐ＊Ｑ＝３＊７＝５ (ｍｏｄ ８)という関係のため，以下の：
Ｍ＝０，Ｎ−Ｍ＝１，Ｍ/２＝２，Ｎ−Ｍ/２＝３ (ｍｏｄ ４)
が成立する。すなわち、４つの数Ｍ，Ｎ−Ｍ，Ｎ/２及びＮ−Ｍ/２は最後の２ビット位置で互いに異なる。
【０００８】
メッセージＭを署名するため、発行ユニットはまず４つの値Ｍ，Ｎ−Ｍ，Ｎ/２またはＮ−Ｍ/２のいずれがＰを法とし、またＱも法とする平方剰余であるかを検査する。これはヤコビの記号(Ｍ/Ｐ)及び(Ｍ/Ｑ)を計算することにより実効的に行うことができ：
(Ｍ/Ｐ)＝１，(Ｍ/Ｑ)＝１であれば、Ｍ’＝Ｍ；
(Ｍ/Ｐ)＝−１，(Ｍ/Ｑ)＝−１であれば、Ｍ’＝−Ｍ；
(Ｍ/Ｐ)＝−１，(Ｍ/Ｑ)＝１であれば、Ｍ’＝Ｍ/２；
(Ｍ/Ｐ)＝１，(Ｍ/Ｑ)＝−１であれば、Ｍ’＝−Ｍ/２；
である。Ｍ’はいずれの条件にも合致する値であるとする。よってメッセージＭに対する署名は：
Ｓ＝(Ｍ’)(Ｐ＊Ｑ−Ｐ−Ｑ＋５)/８ (ｍｏｄ Ｎ)
である。したがって：
Ｓ２＝Ｍ’＊(Ｍ’)[(Ｐ−１)/２]＊[(Ｑ−１)/２] (ｍｏｄ Ｎ)
が成立する。
【０００９】
(Ｍ’)[(Ｐ−１)/２]＝１ (ｍｏｄ Ｐ)というフェルマーの小定理にしたがえば、Ｍ’はＰを法とする平方剰余である。同様に(Ｍ’)[(Ｑ−１)/２]＝１ (ｍｏｄ Ｑ)も成立する。中国剰余定理により、さらに(Ｍ’)[(Ｐ−１)/２]＊[(Ｑ−１)/２]＝１ (ｍｏｄ Ｐ＊Ｑ)が導かれる。したがって：
Ｓ２＝Ｍ’ (ｍｏｄ Ｎ)＝Ｐ＊Ｑ
が成立する。
【００１０】
署名Ｓを検証するため、端末Ｂはまず値：
Ｍ’＝Ｓ２ (ｍｏｄ Ｎ)
を計算する。
【００１１】
Ｍ＝４ (ｍｏｄ ８)が与えらた場合、Ｍ’についてあり得る４つの値は終わりの２ビットの位置で互いに異なるから、ＭはＭ’から容易に計算できて：
Ｍ’＝０ (ｍｏｄ ４)であれば、Ｍ＝Ｍ’
Ｍ’＝１ (ｍｏｄ ４)であれば、Ｍ＝Ｎ−Ｍ’
Ｍ’＝２ (ｍｏｄ ４)であれば、Ｍ＝２Ｍ’
Ｍ’＝３ (ｍｏｄ ４)であれば、Ｍ＝２(Ｎ−Ｍ’)
である。
【００１２】
スマートカードまたは端末Ｂ上の署名を検証するためには、モジュラー乗算が必要である。すなわち、受信ユニットは：
Ｍ’＝Ｓ＊Ｓ (ｍｏｄ Ｎ)
を計算する。
【００１３】
これには乗算及び除算が必要となる。除算は乗算よりもかなり複雑で手がかかる。したがって、署名を検証するための既知の手段の欠点は、発行ユニットより通常は計算能力が劣るソフトウエア受信ユニットが、同様の複雑で手がかかる計算操作を行わなければならないことである。
【００１４】
したがって本発明の課題は、上記の欠点を回避する、ソフトウエアの秘密配布方法を提示することである。
【００１５】
この課題は特許請求項１の前文の特徴に始まる請求項１の特徴を備えることにより解決される。
【００１６】
本発明の有用な実施形態は従属請求項に提示される。
【００１７】
本発明にしたがえば、長数(long-number)演算（試行除算）に対する通常の標準的な方法の代わりに、モンゴメリー(Montgomery)による方法を用いて電子署名が検証される。モンゴメリーは、積Ｚ＝Ｘ＊Ｙ (ｍｏｄ Ｎ)の代わりに、以下の値：
Ｚ０＝Ｘ＊Ｙ＊Ｌ−ｉ (ｍｏｄ Ｎ)
を計算する、モジュラー乗算のためのより高速な方法を説明している。ここでＬは長数演算が行われる基底である。一般に８ビットプロセッサではＬ＝２８が、また１６ビットプロセッサではＬ＝２１６が用いられ、以下同様である。ｉの値は少なくとも、条件：
Ｌｉ＞Ｎ
を満たすに十分な大きさでなければならない。
【００１８】
モンゴメリー法の利点は、モジュラー乗算における試行除算ステップが省略されることである。他方で、望ましくない因数Ｌ−ｉ （ｍｏｄ Ｎ）の計算が乗算の実行に付加される。この望ましくない効果は、ＲＳＡ法によるモジュラー累乗において以下のようにして補償することができる。
【００１９】
ＲＳＡ累乗ＡＥ (ｍｏｄ Ｎ)の計算は通常、指数法則Ａ２ｘ＝Ａｘ＊Ａｘ (ｍｏｄ Ｎ)及びＡ２ｘ＋１＝(Ａｘ＊Ａｘ)＊Ａ (ｍｏｄ Ｎ)を繰り返し適用することにより、行われる。第１ステップにおいてＸ＝(Ｅ/２)が設定され、以降のステップにおいて、ＸはＸ＝１が成立するまで(Ｘ/２)で置き換えられる。ここで(Ｘ)はＸ以下の最大の整数である。すなわちモジュラー累乗は事実上、Ａ (ｍｏｄ Ｎ)に基づく一連の二乗演算及び乗算に等しい。
【００２０】
モンゴメリー法によるモジュラー乗算においては、以下の：
【数１】
0004708565.tif 000002
が計算される。この計算は固定値：
【数２】
0004708565.tif 000003
とのモンゴメリー乗算を１回必要とし、Ａ０＝Ａ＊Ｌｉ (ｍｏｄ Ｎ)が成立する。明らかに：
Ａｘ＊Ａｙ＊Ｌｉ(ｍｏｄ Ｎ)＝(Ａｘ＊Ｌｉ)＊(Ａｙ＊Ｌｉ)＊Ｌ-ｉ(ｍｏｄ Ｎ)＝Ａｘ＋ｙ＊Ｌｉ (ｍｏｄ Ｎ)
が成立する。すなわち、(Ａｘ＊Ｌｉ)及び(Ａｙ＊Ｌｉ)を用いてＡｘ＊Ａｙ＊Ｌｉの値をただ１回のモンゴメリー乗算により計算できる。値Ａ０＝Ａｌ＊Ｌｉから始めて二乗演算及びＡ０の乗算を繰り返すことにより、ＡＥ＊Ｌｉの値を容易に計算することができる。さらに中間結果ＡＥ＊Ｌｉを１回モンゴメリー乗算することにより所望の最終結果ＡＥが得られる。
【００２１】
１，…，Ｎの中からランダムに選ばれる指数をもつモジュラー累乗における、必要な補償のために付加される計算負荷は、比較的軽い。
【００２２】
ソフトウエアが端末またはスマートカードにダウンロードされる時には、署名の検査が端末またはスマートカードで行われなければならない。端末は計算能力が通常低いから、署名検査はできる限り簡単に実現されなければならない。
【００２３】
ラビンの署名検査とモンゴメリー乗算の従来の組合せでは、署名Ｓが端末Ｂに転送される。
【００２４】
端末Ｂは：
Ｍ０＝(Ｓ＊Ｓ)＊Ｌ−ｉ (ｍｏｄ Ｎ)
Ｍ’＝(Ｍ０＊(Ｌ２ｉ (ｍｏｄ Ｎ)))＊Ｌ−ｉ (ｍｏｄ Ｎ)
を計算する。したがって、明らかにＭ’＝Ｓ２ (ｍｏｄ Ｎ)が成立する。この方法はＮを法とするモンゴメリー乗算が２回必要であり、値Ｌ２ｉ (ｍｏｄ Ｎ)も受信ユニットに格納されなければならない。
【００２５】
本発明の有用な実施形態にしたがえば、従来方法と異なり、モンゴメリー乗算あるいは値Ｌ２ｉ (ｍｏｄ Ｎ)の格納を必要としない、以下の改変がなされる。
署名Ｓの代わりに修正署名：
Ｓ’＝Ｓ＊Ｌｉ/２ (ｍｏｄ Ｎ)
が受信ユニットに転送される。Ｌは２の直羃であるから、市販のプロセッサによりＬｉ/２を容易に計算できる。受信ユニットはモンゴメリー法により、値：
(Ｓ’＊Ｓ’)＊Ｌ−ｉ (ｍｏｄ Ｎ)＝(Ｓ＊Ｌｉ/２＊Ｓ＊Ｌｉ/２)＊Ｌ−ｉ (ｍｏｄ Ｎ)
＝Ｓ２ (ｍｏｄ Ｎ)＝Ｍ’ (ｍｏｄ Ｎ)
を次に計算する。
【００２６】
すなわち、本発明の署名検査法は端末においてモンゴメリー乗算を１回しか必要としない。