(57)【特許請求の範囲】
【請求項１】
通信リンクを介して複数の端末の間で通信がなされる通信システムにおいて、所定の値よりも大きなハミング・ウェイトを有する整数をｋとして、公開鍵暗号化方式における秘密鍵ｋと公開成分として用いる群の元とを取得することにより、前記複数の端末の間での通信において所要のレベルのセキュリティを提供する方法であって、前記公開成分は前記群の生成元のｋ回の合成に対応し、この方法は、
ｉ）前記複数の端末の中の１つの端末における整数生成器が、前記所定の値よりも小さなハミング・ウェイトを有する整数ｋ’を生じるステップと、
ｉｉ）前記１つの端末における暗号化モジュールが、前記群の前記生成元のｋ’回の合成を実行して、中間的なセッション・パラメータを提供するステップと、
ｉｉｉ）前記暗号化モジュールが、前記所定の値よりも大きなハミング・ウェイトを有する整数をｉとして、前記中間的なセッション・パラメータと前記生成元のｉ回の合成から導かれる秘密の値γとを合成し、前記群の元を得るステップと、
ｉｖ）前記暗号化モジュールが、前記整数ｋ’とｉとを合成して、対応する秘密鍵成分ｋを提供するステップと、
を含むことを特徴とする方法。
【請求項２】
請求項１記載の方法において、前記秘密の値は、予め計算され秘密にされていることを特徴とする方法。
【請求項３】
請求項１記載の方法において、前記群は、ｍｏｄｐの整数から成る乗法群であることを特徴とする方法。
【請求項４】
請求項３記載の方法において、前記中間的なセッション・パラメータと前記秘密の値とは、乗法によって合成されることを特徴とする方法。
【請求項５】
請求項１記載の方法において、前記群は、有限体上の楕円曲線であることを特徴とする方法。
【請求項６】
請求項５記載の方法において、前記秘密の値と前記中間的なセッション・パラメータとは、有限体上の楕円曲線上の加算を実行することによって合成されることを特徴とする方法。
【請求項７】
請求項１記載の方法において、前記秘密の値は、乱数をベキとして生成することによって得られることを特徴とする方法。
【請求項８】
請求項７記載の方法において、前記乱数と結果的に得られる秘密の値とは、前記中間的なセッション・パラメータと合成されるために、記憶され抽出されることを特徴とする方法。
【請求項９】
請求項１記載の方法において、前記秘密の値は、項の合成によって導かれ、これらの項のそれぞれは、前記群の生成元の整数回の合成から導かれる値を有することを特徴とする方法。
【請求項１０】
請求項９記載の方法において、前記秘密の値は前記群の元のそれぞれの生成と共に変化し、前記項の少なくとも１つは連続的な秘密の値に非線形性を導入することを特徴とする方法。
【請求項１１】
請求項１０記載の方法において、前記項の前記１つは、前記合成における時間変動する整数を含むことを特徴とする方法。
【請求項１２】
請求項９記載の方法において、前記項に対応する値は記憶され、前記値の順序を交換されたものが取得されて連続的な署名における項として用いられることを特徴とする方法。
【請求項１３】
請求項１２記載の方法において、前記項の少なくとも１つは、連続的な秘密の値に非線形性を導入することを特徴とする方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、公開鍵暗号化システムに関し、更に詳しくは、公開鍵プロトコルと共に用いるセッション・パラメータの生成に関する。
【０００２】
【従来の技術】
公開鍵データ暗号化システムは、広く知られており、更に確実なものとして、有限群（finite group）の離散対数問題（discrete log problem）の多項式での表現不可能性（intractability）に基づくものがある。この公開鍵暗号化システムでは、群の元（要素、element）と生成元（generator）とを用いる。生成元とは、それ以外のすべての元が、この生成元に基礎となる群演算を反復して行うことによって、すなわち、生成元の反復的な合成（コンポジション）によって、得ることができるような元である。便宜的には、これは、生成元の整数ベキの累乗計算として考えることができ、基礎となる群演算に応じて、生成元のｋ回の乗算として、又は、生成元のｋ回の加算として見ることができる。このような公開鍵暗号化システムでは、整数ｋが、秘密鍵として用いられ、秘密とされる。対応する公開鍵は、生成元αの整数ｋのベキの累乗を計算することによって得られ、これにより、αkの形式の公開鍵が得られる。整数ｋの値は、αkの値が知られている場合でも、導くことはできない。
【０００３】
公開及び秘密鍵は、通話者（correspondents）の一方が受信者の公開鍵αkを用いてデータを暗号化するようなメッセージの交換において、用いられる。受信者は、暗号化されたメッセージを受け取り、自分の秘密鍵を用いてそのメッセージを復号化して、内容を検索する。メッセージが途中で捕捉されても、整数ｋを導くことができないので、内容を得ることはできない。
【０００４】
同様の技術を用いて、デジタル署名を用いることにより、メッセージの真正を確認することができる。この技術では、メッセージの送信者は、秘密鍵ｋを用いてメッセージに署名を行い、受信者は、送信者の公開鍵αkを用いてメッセージを復号化することによって、送信者からのメッセージを確認することができる。平文のメッセージの関数と回復されたメッセージの関数とを比較することによって、メッセージの真正が確認される。
【０００５】
【発明が解決しようとする課題】
両方の技術において、群の元αの累乗を計算することが必要となる。セキュリティのために、ｋは、比較的大きな数であって、従って、累乗の計算が、比較的長くなるようにしなければならない。指数ベキが長期的な公開鍵として用いられる場合には、計算時間は、特に考慮すべきことではない。しかし、デジタル署名方式では、短期的なセッション鍵が、長期的な公開鍵と共に用いられる。それぞれのメッセージは、異なる秘密鍵ｋを用いて署名され、対応する公開セッション鍵αkが計算され、メッセージと共に送信されなければならない。従って、累乗（exponentiation）の計算において、いくらかの効率化が必要となる。
【０００６】
累乗の計算時間は、比較的小さなハミング・ウェイト（Hamming weight）を有する整数ベキ（integer exponent）ｋを用いることにより減少させることができる。ハミング・ウェイトが小さいとは、この整数の２進表現における１の数が小さいということであり、すなわち、別の基数においても同様に、ベキが非ゼロの係数を有することである。しかし、ハミング・ウェイトの小さな整数は、平方根攻撃（square root attack）を含む様々な攻撃に対して脆弱であるために、暗号化プロトコルにおいて用いることは推奨されていない。
【０００７】
従って、本発明の目的は、上述の短所を解消又は克服する、公開鍵交換プロトコルのためのセッション・パラメータの計算方法を提供することである。
【０００８】
【課題を解決するための手段】
一般的に表現すると、本発明は、所定の値よりも小さなハミング・ウェイトを有する整数ｋ'が選択されるような公開鍵交換プロトコルにおいて用いられるベキを計算する方法を提供する。生成元αに対する累乗計算が実行され、結果として得られる中間的なセッション・パラメータであるαk'が、秘密の値γと数学的に組み合わ（合成）される。γは、前記の所定の値よりも大きなハミング・ウェイトを有するランダムな整数ｉから導かれる。αと中間的なセッション・パラメータとを数学的に組み合わせることにより、そのベキのハミング・ウェイトが前記の所定の値よりも大きなセッション・パラメータが得られ、これは、計算の観点から見て安全であると考えられる。
【０００９】
秘密の値γは、リアルタイムの累乗計算が整数ｋ'を用いたベキの生成に限定されるように、予め計算しておくことができる。
【００１０】
この方法は、乗法群（multiplicative group）Ｚ＊pと共に用いることができるし、又は、有限体上の楕円曲線などのそれ以外の群と共に用いることもできる。
【００１１】
【発明の実施の形態】
以下では、本発明の実施例を図面を参照して説明する。
【００１２】
図１を参照すると、データ通信システム１０は、１対の通話者１２、１４を含む。通話者１２、１４は、それぞれが、メッセージＭを生成し、そのメッセージＭを、通信リンク１６を介して、他方の通話者に送ることができ、それぞれが、暗号化モジュール１８を有しており、送信の前と受信時とにメッセージＭを処理する。
【００１３】
通話者１４があるメッセージが通話者１２によって生成されたものであると確認するために、メッセージＭの署名とそのメッセージの受信時に送信者を確認することを可能にする様々なプロトコルが作られてきている。説明の目的で、ここでは、メッセージＭに署名する単純なエルガマル（El Gamal）型のプロトコルを用いることにする。もちろん、これ以外のより複雑なプロトコルを用いても同様な効果を得ることができる。同様に、このセッション・パラメータの生成は、デジタル署名以外のディフィ・ヘルマン（Diffie Hellman）暗号化方式にも用いることができる。
【００１４】
図２に示されているように、メッセージＭに署名するために、通話者１２は、整数ｋ’を整数生成器２０から選択し、選択された整数ｋ’をコンパレータ２２でチェックすることにより、整数ｋ’が計算的に安全でない（computationally insecure）と通常考えられる所定のレベルよりも小さなハミング・ウェイトを有していることを確認する。例えば、１５５の体では、１５よりも小さなハミング・ウェイトを有する整数ｋ’を用いることができる。必要であれば、乱数を発生させ、ハミング・ウェイトをコーム（comb）２４で調整し、それが計算を容易にする所定のレベルよりも小さいことを確認する。
【００１５】
生成元αのｋ'回の組合せ（合成）が次に行われる。ｍｏｄｐ（ｐを法とする合同関係）の整数の乗法群を用いる公開鍵システムでは、中間的なセッション鍵αk'は、「平方及び加算」アルゴリズムなどの既知の累乗アルゴリズムを用いて、累乗器（exponentiator）２６で計算される。２進数の桁の過半数はゼロであるから、累乗計算は比較的迅速に行われて、中間的なセッション・パラメータが得られる。
【００１６】
通話者１２は、次に、テーブル２８から、αiの形式の元γの予め計算された値を検索する。整数ｉは乱数であり、そのハミング・ウェイトは、５０％のオーダーであると想定することができる。ｉの値とγの対応する値とを含むテーブル２８は、安全に維持されている。
【００１７】
γの秘密の値と中間的なセッション・パラメータαk'とは、算術プロセッサ３０において乗算され、セッション・パラメータαk'+I＝αを得る。２つの成分の乗算は、比較的迅速に行われるので、セッション・パラメータαkは、リアルタイムで計算することができる。
【００１８】
同時に、ｉ＋ｋ'に等しい値ｋが、算術プロセッサ３０において計算され、暗号化モジュール１８においてメッセージＭを暗号化する、すなわち、メッセージＭに署名するのに用いられる。メッセージＭと署名とは、セッション・パラメータαkと共に、通信チャネル１６上を、受信者１４に送信される。受信者１４は、次に、セッション・パラメータαkを用いて署名されたメッセージを復号化し、復号化されたメッセージを、送信されたメッセージと比較して、それらが同じであることを確認する。
【００１９】
整数ｋ'に対して比較的小さなハミング・ウェイトを用いることにより、セッション・パラメータαkが脆弱になることはないが、これは、秘密の値γが適切なハミング・ウェイトを有しているからである。従って、整数ｋのハミング・ウェイトもまた、セキュリティの目的に関しては、適切である。
【００２０】
この技術は、図３に示されているように、楕円曲線暗号化システムにおいても用いることができる。図３では、同じ構成要素は、同じ参照番号に添え字のａを付すことによって、識別している。楕円曲線暗号化システムでは、公開鍵として用いられる群の元は、生成元Ｐのｋ回の加算から得られる点ｋＰに対応する。基礎となる体の演算は加算であるので、群の元ｋＰは、生成元Ｐのｋ乗のベキの累乗を表す。公開鍵ｋＰのセキュリティは、曲線上の点の加算の結果として、又は、複数回の加算と同等の整数による点の乗算の結果として、生じる。
【００２１】
曲線上の１対の点の加算は、比較的複雑であり、複数回の加算が要求されることによって、楕円曲線暗号化システムの本来のより大きな強度から生じる長所のいくらかは相殺されてしまう。
【００２２】
そのような暗号化システムの使用を容易にするために、これは通常は安全ではないと考えられるのであるが、所定の値よりも小さなハミング・ウェイトを有する整数ｋ'が、生成器２０ａによって、選択される。中間的なセッション・パラメータｋ'Ｐが、点Ｐのｋ'回の合成によって、すなわち、楕円点アキュムレータ２６ａにおける最初の点Ｐをｋ'回加算することによって、計算される。比較的小さなハミング・ウェイトのために、ｋ'Ｐの値の計算を容易にするのに必要な点の加算が少なくなる。
【００２３】
秘密の値γは、ランダムに生成され所定の値よりも大きなハミング・ウェイトを有する整数ｉから、予め計算される。γの値は、点Ｐのｉ回の加算から、すなわち、α＝ｉＰから得られる。ここで、αとＩとは、テーブル２８ａに記憶されている。
【００２４】
中間的なセッション・パラメータｋ'Ｐと値ｉＰとは、算術プロセッサ３０ａに与えられ、新たな値ｋＰが得られる。整数ｋは、ｋ'とｉとの加算と暗号化モジュールにおいて準備される結果的な署名とから、送信者１２によって、プロセッサ３０ａにおいて計算される。
【００２５】
しかし、比較的小さなハミング・ウェイトを有する最初のｋ'の選択は、やはり、中間的なセッション・パラメータを得るための計算時間を短縮し、秘密の値とのその後の数学的な合成により、その乗算値ｋが要求されるハミング・ウェイトを有するセッション・パラメータが得られる。
【００２６】
それぞれの場合に、整数ｋ'に対して用いられる比較的小さなハミング・ウェイトの使用は、所定の値よりも大きなハミング・ウェイトを有するランダムな整数との合成によって、マスクされる。
【００２７】
楕円曲線暗号化システムが変則的（anomalous）な曲線を用いる場合には、累乗は、平方及び加算のアルゴリズムによって、得られる。
【００２８】
別の実施例が、図４に示されている。この図では、同じ参照番号の前に１を付すことによって、同じ構成要素を示している。図４の実施例では、追加的な項が整数ｋの計算に導入され、セキュリティを強化している。整数ｋは、整数生成器１２０によって生成された小さなハミング・ウェイトの項ｋ'と追加的な整数ｋC、ｋL、ｋDから導かれる変動する項との組合せから得られ、次の形式を有する。
【００２９】
【数１】
ｋ＝ｋ'＋ｋ＊C＋ｋ＊L＋ｋ＊D
同様に、次も成立する。
【００３０】
【数２】
ｋＰ＝ｋ'Ｐ＋ｋ＊CＰ＋ｋ＊LＰ＋ｋ＊DＰ
整数ｋC、ｋL、ｋDは、予め計算された対応する値ｋCＰ、ｋLＰ、ｋDＰと共に、ルックアップ・テーブル１２８に記憶されている。図４では、整数ｋC、ｋL、ｋDは、別々の値の組であるとされているが、後に説明するように、１組の整数を用いることもできる。テーブル１２８における整数の値は、典型的にはセッション鍵ｋのそれぞれの生成の際に増加するインクリメント・カウンタ３２の出力である基準項ｔに対して、インデックスが付けられている。
【００３１】
好適実施例では、項ｋ＊Cは、与えられた値ｔに対してルックアップ・テーブル１２８から検索される整数に対応する定数項である。項ｋ＊L、ｋ＊Dは、セッション鍵ｋのそれぞれの生成に対して変動するように基準項ｔによって修正される整数ｋL及びｋDによって与えられる。
【００３２】
項ｋ＊Lは、ｔ・ｋIの形式の線形項であり、項ｋ＊Dは、２t・ｋDの形式を有する。ｔが変動すると、ｋC、ｋL、ｋDは、ルックアップ・テーブルから変動し、対応する値であるｋ＊L及びｋ＊Dが、基準項ｔの値と共に変動する。
【００３３】
従って、この実施例では、値ｋは、次の形式を有する。ただし、ｋCt、ｋLt、ｋDtは、ｋC、ｋL、ｋDの時間ｔにおける値である。
【００３４】
【数３】
ｋ＝ｋ'＋ｋCt＋ｔｋLt＋２tｋDt
従って、動作においては、図４に示されているように、セッション鍵ｋの生成の開始時には、小さなハミング・ウェイトを有するｋ'の値が、生成器１２８から選択され、対応する値ｋ'Ｐが累乗器１２６によって、計算される。カウンタ３２の出力は、ルックアップ・テーブル１２８が対応する値ｋC、ｋL、ｋDと関連する点であるｋCＰ、ｋLＰ、ｋDＰとを検索する基準項として用いられる。
【００３５】
項ｋCＰは、項ｋ＊CＰに対応し、従って、算術プロセッサ１３０において、ｋ'Ｐに加算される。項ｋ＊Ｌは、テーブル１２８から検索された点ｋLＰのｔ回の加算から得られ、プロセッサ１３０において、値ｋ'Ｐ＋ｋCＰに加算される。
【００３６】
同様にして、項ｋ＊DＰは、テーブル１２８から検索されたｋDＰの２t回の加算から得られ、先の値に加算されて、セッション鍵ｋＰを与える。同じように、ｋの値は、ｋ'、ｋC、ｋ＊L、ｋ＊Dの加算から得ることができる。
【００３７】
それぞれの加算は、楕円曲線上の１対の点の加算を含むことを理解すべきである。ｋ＊LＰ及びｋ＊DＰの計算は、ｔの値の２進表現における点の連続的な２倍化（doubling）又は置換（substitution）を用いて、比較的容易に得られる。
【００３８】
更に、ｋ＊C、ｋ＊L、ｋ＊Dの使用は、連続的な署名が計算され追加的な複雑さが導入されるにつれて、順序を交換される。
【００３９】
値は、適切に小さなハミング・ウェイトを有するように選択される。同様にして、ｋL又はｋDの値は、計算を容易にするために好ましい場合には、比較的小さなハミング・ウェイトを有するように選択されるが、ｔ＝０において適切なセキュリティを与えるために十分なハミング・ウェイトをｋCが有していることが好ましい。しかし、一般的には、ｋC、ｋL、ｋDの値は、計算的なセキュリティのために、適切なハミング・ウェイトを有していることが好ましい。後に述べるように、署名の間で要求される計算は、減少させることができ、それによって、ｋL及びｋDの値を所定のレベルよりも上に維持することが望ましくなる。上述の例では、ｋC、ｋL、ｋDの値は、異なる値の組から選択されることが想定されていた。しかし、これらの値は、値を所定の態様で順序を交換することによって、同じテーブルから選択することもできるし、又は、計算を単純化するために、それぞれの項において用いられる同じ整数でもよい。
【００４０】
同様にして、ｋの形式は、上述した定数項、線形項及び２倍化項に加えて非線形性や複雑さを導入するために追加的な及び／又は異なる項を含むことがありうる。更には、適切な場合には、ｋの計算において、フロベニウス（Frobenius）作用素など追加的な関数を含むこともありうる。これらの追加的な項の選択に際しては、計算が容易になるように、また、最終的なハミング・ウェイトが計算的に安全であると考えられている所定の値よりも大きくなるように、選択がなされる。
【００４１】
図５には、ｋ及びｋＰの連続的な値を決定する別のアルゴリズムが示されている。
【００４２】
ｋが次のような形式を有していると仮定する。
【００４３】
【数４】
ｋ＝ｋ'＋ｋC＋ｔｋL＋２tｋD
及び
【数５】
ｋＰ＝ｋ'Ｐ＋ｋCＰ＋ｔｋLＰ＋２tｋDＰ
まず、ｋC、ｋL、ｋDの値と、対応する値であるｋCＰ、ｋLＰ、ｋDＰとが、レジスタ３４に記憶される。
【００４４】
時間ｔにおける新たな値は、ｋ'（ｔ）＋ｋ''（ｔ）である。ただし、ここで、ｋ''（ｔ）＝ｋC＋ｔｋL＋２tｋDである。ｋ'（ｔ）は、生成器２００によって生成された小さなハミング・ウェイトを有する新たな整数である。
【００４５】
ｋの新たな値を計算するために、ｋ''（ｔ）の値が、レジスタ３４に記憶された値を用いて、算術プロセッサ２３０において計算される。ｋ''（ｔ）の結果的な値は、ｋ'（ｔ）に加算され、ｋの新たな値を得る。
【００４６】
ｋの次の値、すなわち、ｋ（ｔ＋１）の計算を容易にするために、ｋ''（ｔ）と２tｋDの計算された値が、ｋC及びｋLと共に記憶される。
【００４７】
ｋ（ｔ＋１）を得るためには、ｋ'（ｔ＋１）を得て、ｋ''（ｔ＋１）を生成することが必要である。これは、記憶された値をもちいることによって、次のように、容易に達成される。
【００４８】
【数６】
0004462511.tif 000002
これらの項は、それぞれが、レジスタ３４に記憶され、容易に検索が可能であり、ｋ''（ｔ＋１）の値を与え、この値が、ｋ'（ｔ＋１）と組み合わされて、時間（ｔ＋１）における新たなｋを与える。
【００４９】
レジスタ３４は、更新され、ｋ''（ｔ）の値が、保持されているｋLの値であるｋ''（ｔ＋１）と交換され、２tｋDの値が２(t+1)ｋDと交換される。
【００５０】
時間（ｔ＋２）におけるｋの次の値も、同様にして得ることができる。
【００５１】
類似の手順が、ｋ（ｔ＋１）＋Ｐの値を計算する際にも利用できる。
【００５２】
ｋ''（ｔ）Ｐ、ｋLＰ、２tｋDＰの値は、レジスタ３４に記憶されている。
【００５３】
ｋ'（ｔ＋１）Ｐは、上述の場合と同じように、楕円点アキュムレータ２２６における複数回の点の加算によって得ることができる。
【００５４】
ｋ''（ｔ＋１）Ｐの値は、ｋ''（ｔ）Ｐ＋ｔｋLＰ＋２tｋDＰを計算することによって、得られる。
【００５５】
これらの項は、それぞれが、レジスタ３４に記憶され、容易に検索が可能である。
【００５６】
これらの項は、時間（ｔ＋１）に対する項に対応することによって更新されるが、これを容易にするために、点２tｋDＰが最初に２倍されて、２(t+1)ｋDＰを得る。次に、これが、記憶され、ｋLＰ及びｋ''（ｔ）に加算されて、ｋ''（ｔ＋１）Ｐを得る。これは、再び記憶され、ｋ'（ｔ＋１）Ｐに加算され、ｋ（ｔ＋１）Ｐの新たな値を得る。
【００５７】
従って、計算ｋ''（ｔ＋１）Ｐは、１つの点の２倍と３つの点の加算とによって達成され、これは、ｋ'の小さなハミング・ウェイトと組み合わされて、システム・パラメータの非常に効果的な生成につながる。
【００５８】
上述のように、セッション・パラメータｋ及びαkの連続的な生成のために、記憶された値の関連するついを含むレジスタの順序を交換することによって、追加的な複雑さを導入することができる。
【００５９】
まとめると、セッション・パラメータの生成は、計算の容易さのために、ハミング・ウェイトが小さな整数を用い、その整数を、予め計算されている値又は値の組と組み合わせて小さなハミング・ウェイトをマスクすることによって、容易になる。追加的な複雑さは、値の組に非線形項を提供することによって、又は、署名の間で値の組の順序を交換することによって、導入することができる。このようにして、連続的なセッション値が、攻撃に対して抵抗性を有しながら、計算は効率的に行うことができる。
【００６０】
上述の計算は、具体的な応用例に応じて、集積回路において実行することができるし、又は、汎用コンピュータ上のソフトウェアにおいて実行することができる。
【図面の簡単な説明】
【図１】データ通信システムの概略図である。
【図２】乗法群Ｚ＊pにおけるセッション・パラメータの生成を示す流れ図である。
【図３】楕円曲線におけるセッション・パラメータの生成を示す流れ図である。
【図４】セッション・パラメータの生成の別の実施例に関する図３と類似の流れ図である。
【図５】セッション・パラメータの生成の更に別の実施例を示す流れ図である。
【図１】
0004462511.tif 000003
【図２】
0004462511.tif 000004
【図３】
0004462511.tif 000005
【図４】
0004462511.tif 000006
【図５】
0004462511.tif 000007