(57)【要約】【課題】  低性能ＣＰＵを搭載した機器を使用する場合でも、機器にタイムアウト検出をさせることなく鍵交換を成功させることが可能な共有鍵交換方法を提供する。【解決手段】  機器Ａから公開値Ｘを受信すると、機器Ｂは、公開値Ｙの算出にかかる時間及び共有鍵Ｋの算出にかかる時間を推定し、鍵交換処理のために機器Ｂ側で必要とする演算所要時間Ｔｂを求め、機器Ａに送信して応答遅延時間を予告する（Ｓ３０６、Ｓ３０７）。その後、機器Ｂは、実際に公開値Ｙ及び共有鍵Ｋを算出する（Ｓ３０９、Ｓ３１０）。機器Ａは、演算所要時間Ｔｂを受信し、機器Ｂからの応答待ち期限（タイムアウト時間）を、この受信から演算所要時間Ｔｂが経過した時点に延長して設定する（Ｓ３１１）。【選択図】  図３
2004248270.tif 000002
【特許請求の範囲】
【請求項１】
暗号化／改ざん認証処理が施されたデータを送受信するために、２つの通信機器間で行われる共有鍵を交換する共有鍵交換方法であって、
少なくとも一方の通信機器が、
対向する他方の通信機器が共有鍵を取得するために必要な情報を、当該他方の通信機器に送信する情報送信ステップと、
前記他方の通信機器が次の応答タイミングまでに行う所定の演算にかかる時間に基づいて、前記他方の通信機器からの応答待ちの期限を設定する設定ステップとを備え、
前記他方の通信機器が、
前記所定の演算を行って前記情報から共有鍵を取得する取得ステップと、
前記応答タイミングで前記一方の通信機器へ所定の応答を送信する応答送信ステップとを備えることを特徴とする、共有鍵交換方法。
【請求項２】
各々の前記通信機器は、自己の公開値を算出して相手の通信機器に送信し、また相手の通信機器から相手の公開値を受信して、当該相手の公開値に基づいて共有鍵を算出することで共有鍵の交換を実現し、
前記一方の通信機器の前記設定ステップが、前記他方の通信機器において前記公開値の算出までにかかる時間又は前記共有鍵の算出までにかかる時間の少なくともいずれかに基づいて、前記応答待ちの期限を設定することを特徴とする、請求項１に記載の共有鍵交換方法。
【請求項３】
一方の通信機器が、自機器で生成した共有鍵又は共有鍵を生成するための情報に所定の暗号化を施して他方の通信機器へ送信し、他方の通信機器が、一方の通信機器から受信する暗号化された共有鍵を復号又は共有鍵を生成するための情報を復号して共有鍵を生成し、共有鍵取得の応答を一方の通信機器へ送信することで共有鍵の交換を実現し、
前記一方の通信機器の前記設定ステップが、前記他方の通信機器において前記暗号化された共有鍵の復号にかかる時間又は共有鍵を生成するための情報の復号及び共有鍵の生成にかかる時間に基づいて、前記応答待ちの期限を設定することを特徴とする、請求項１に記載の共有鍵交換方法。
【請求項４】
他方の通信機器が、前記一方の通信機器から要求メッセージを受信した後、共有鍵又は共有鍵を生成するための情報を、一方の通信機器から受信する公開鍵を用いて暗号化して一方の通信機器へ送信することで共有鍵の交換を実現し、
前記一方の通信機器の前記設定ステップが、前記他方の通信機器において前記共有鍵又は共有鍵を生成するための情報の暗号化にかかる時間に基づいて、前記応答待ちの期限を設定することを特徴とする、請求項１に記載の共有鍵交換方法。
【請求項５】
前記所定の演算は、共有鍵の取得に伴う認証処理のための演算、又は共有鍵の取得に伴う認証処理のための演算かつ共有鍵を取得するための演算であることを特徴とする、請求項１に記載の共有鍵交換方法。
【請求項６】
一方の通信機器が、認証のためのデジタル署名がされたデータを他方の通信機器へ送信し、他方の通信機器が、一方の通信機器から受信するデジタル署名がされたデータに従って本人性認証処理を行うことで、認証処理を実現し、
前記一方の通信機器の前記設定ステップが、前記他方の通信機器において前記本人性認証処理にかかる時間に基づいて、前記応答待ちの期限を設定することを特徴とする、請求項５に記載の共有鍵交換方法。
【請求項７】
一方の通信機器が、認証のための公開鍵暗号を利用したデータを他方の通信機器へ送信し、他方の通信機器が、一方の通信機器から受信する公開鍵暗号を利用したデータに従って本人性認証処理を行うことで、認証処理を実現し、
前記一方の通信機器の前記設定ステップが、前記他方の通信機器において前記本人性認証処理にかかる時間に基づいて、前記応答待ちの期限を設定することを特徴とする、請求項５に記載の共有鍵交換方法。
【請求項８】
前記他方の通信機器が、
前記所定の演算にかかる演算所要時間を推定する推定ステップと、
前記推定した演算所要時間を前記一方の通信機器へ送信する時間送信ステップとをさらに備え、
前記一方の通信機器が、前記演算所要時間を前記他方の通信機器から受信する受信ステップをさらに備えることを特徴とする、請求項１に記載の共有鍵交換方法。
【請求項９】
前記一方の通信機器が、前記他方の通信機器に前記演算所要時間の問い合わせを行うステップをさらに備え、
前記他方の通信機器が、前記一方の通信機器からの問い合わせに応じて、前記推定ステップ及び前記時間送信ステップを実行することを特徴とする、請求項８に記載の共有鍵交換方法。
【請求項１０】
前記他方の通信機器が、推定する前記演算所要時間を事前に保存していることを特徴とする、請求項８に記載の共有鍵交換方法。
【請求項１１】
前記他方の通信機器が、次の応答タイミングまでに応答が遅れる内容の通知を、前記一方の通信機器に少なくとも１回送信するステップをさらに備え、
前記一方の通信機器は、前記他方の通信機器から前記通知を受信するステップをさらに備え、前記設定ステップで、前記通知に基づいて前記応答待ちの期限を設定することを特徴とする、請求項１に記載の共有鍵交換方法。
【請求項１２】
前記一方の通信機器が、メッセージを送信してから前記他方の通信機器より前記所定の演算後の応答を受信するまでの時間を計測して、前記所定の演算にかかる時間を取得することを特徴とする、請求項１に記載の共有鍵交換方法。
【請求項１３】
前記他方の通信機器において、次の応答タイミングまでに前記公開値及び前記共有鍵の算出が実行される場合、
前記一方の通信機器の設定ステップが、前記他方の通信機器が前記公開値及び前記共有鍵を算出するまでにかかる合計時間に基づいて、前記公開値の送信又は前記共有鍵の算出完了に関する応答待ちの期限を設定することを特徴とする、請求項２に記載の共有鍵交換方法。
【請求項１４】
前記他方の通信機器において、次の応答タイミングまでに前記公開値の算出が実行される場合、
前記一方の通信機器の設定ステップが、前記他方の通信機器が前記公開値を算出するまでにかかる時間に基づいて、前記公開値の送信又は前記共有鍵の算出完了に関する応答待ちの期限を設定することを特徴とする、請求項２に記載の共有鍵交換方法。
【請求項１５】
前記他方の通信機器において、次の応答タイミングまでに前記共有鍵の算出が実行される場合、
前記一方の通信機器の設定ステップが、前記他方の通信機器が前記共有鍵を算出するまでにかかる時間に基づいて、前記公開値の送信又は前記共有鍵の算出完了に関する応答待ちの期限を設定することを特徴とする、請求項２に記載の共有鍵交換方法。
【請求項１６】
前記通信機器は、
前記共有鍵の算出完了後に完了通知を相手の通信機器に送信するステップと、
相手の通信機器から前記完了通知を受けるまで、鍵交換処理失敗の判断を行わないステップとをさらに備えることを特徴とする、請求項２に記載の共有鍵交換方法。
【請求項１７】
ＩＫＥのメッセージシーケンスにおいて、前記情報送信ステップ、設定ステップ、取得ステップ及び応答送信ステップが実行されることを特徴とする、請求項２に記載の共有鍵交換方法。
【請求項１８】
暗号化／改ざん認証処理が施されたデータを送受信するために、対向する相手の通信機器との間で共有鍵を交換する通信機器であって、
相手の通信機器が共有鍵を取得するために必要な情報を、当該相手の通信機器に送信する情報送信部と、
相手の通信機器から応答を受信する受信部と、
相手の通信機器が次の応答タイミングまでに行う所定の演算にかかる時間に基づいて、前記受信部で受信する相手の通信機器からの応答の応答待ちの期限を設定する設定部とを備える、通信機器。
【請求項１９】
所定の演算を行って、相手の通信機器から受信する共有鍵を取得するために必要な情報から共有鍵を取得する取得部と、
所定の応答タイミングで、相手の通信機器へ所定の応答を送信する応答送信部とをさらに備える、請求項１８に記載の通信機器。
【請求項２０】
前記取得部は、
自己の公開値を算出して相手の通信機器に送信する公開値算出部と、
相手の通信機器から相手の公開値を受信して、当該相手の公開値に基づいて共有鍵を算出する共有鍵算出部とを含み、
前記設定部が、相手の通信機器において前記公開値の算出までにかかる時間又は前記共有鍵の算出までにかかる時間の少なくともいずれかに基づいて、前記応答待ちの期限を設定することを特徴とする、請求項１８に記載の通信機器。
【請求項２１】
前記取得部は、共有鍵を算出する共有鍵算出部を含み、
前記情報送信部が、前記共有鍵算出部で算出した共有鍵又はその共有鍵を生成するための情報に、所定の暗号化を施して相手の通信機器へ送信し、
前記設定部が、相手の通信機器において前記暗号化された共有鍵の復号にかかる時間、又は前記暗号化された共有鍵を生成するための情報の復号及び共有鍵の生成にかかる時間に基づいて、前記応答待ちの期限を設定することを特徴とする、請求項１８に記載の通信機器。
【請求項２２】
任意のメッセージを送信した後、暗号化された共有鍵又は共有鍵を生成するための情報を相手の通信機器から受信する場合、前記設定部が、相手の通信機器において共有鍵又は共有鍵を生成するための情報の暗号化にかかる時間に基づいて、前記応答待ちの期限を設定することを特徴とする、請求項１８に記載の通信機器。
【請求項２３】
認証のためのデジタル署名がされたデータを相手の通信機器へ送信する場合、前記設定部が、相手の通信機器においてデジタル署名がされたデータに従って本人性認証処理にかかる時間に基づいて、前記応答待ちの期限を設定することを特徴とする、請求項１８に記載の通信機器。
【請求項２４】
認証のための公開鍵暗号を利用したデータを相手の通信機器へ送信する場合、前記設定部が、相手の通信機器において公開鍵暗号を利用したデータに従った本人性認証処理にかかる時間に基づいて、前記応答待ちの期限を設定することを特徴とする、請求項１８に記載の通信機器。
【請求項２５】
前記設定部は、相手の通信機器から受信する前記所定の演算にかかる時間を推定した演算所要時間に基づいて、前記所定の演算にかかる時間を取得することを特徴とする、請求項１８に記載の通信機器。
【請求項２６】
暗号化／改ざん認証処理が施されたデータを送受信するために、対向する相手の通信機器との間で共有鍵を交換する通信機器であって、
相手の通信機器から共有鍵を取得するために必要な情報を受信する受信部と、
前記受信部で受信した情報から共有鍵を取得するまでに要する時間に関する情報を、相手の通信機器へ送信する時間送信部と、
所定の演算を行って、前記受信部で受信した情報から共有鍵を取得する取得部と、
所定の応答タイミングで、相手の通信機器へ所定の応答を送信する応答送信部とを備える、通信機器。
【請求項２７】
次の応答タイミングまでに行う所定の演算にかかる演算所要時間を推定する推定部をさらに備え、
前記時間送信部は、前記推定部で推定された演算所要時間を相手の通信機器へ送信することを特徴とする、請求項２６に記載の通信機器。
【請求項２８】
次の応答タイミングまでに行う所定の演算にかかる演算所要時間を推定する推定部と、
前記推定部で推定された演算所要時間を相手の通信機器へ送信する時間送信部とをさらに備える、請求項１９に記載の通信機器。
【請求項２９】
相手の通信機器に前記次の応答タイミングまでに行う所定の演算にかかる時間の問い合わせを行う問い合わせ送信部をさらに備える、請求項１８に記載の通信機器。
【請求項３０】
次の応答タイミングまでに応答が遅れる内容の通知を、相手の通信機器に少なくとも１回送信する遅延通知送信部をさらに備える、請求項１９に記載の通信機器。
【請求項３１】
前記時間送信部は、次の応答タイミングまでに応答が遅れる内容の通知を、相手の通信機器に少なくとも１回送信することを特徴とする、請求項２６に記載の通信機器。
【請求項３２】
前記設定部は、メッセージを送信してから相手の通信機器より前記所定の演算後の応答を受信するまでの時間を計測して、前記所定の演算にかかる時間を取得することを特徴とする、請求項１８に記載の通信機器。
【請求項３３】
暗号化／改ざん認証処理が施されたデータを送受信するために行われる共有鍵を交換する方法を、２つの通信機器間で実現させるためのプログラムであって、
少なくとも一方の通信機器に、
対向する他方の通信機器が共有鍵を取得するために必要な情報を、当該他方の通信機器に送信する情報送信ステップと、
前記他方の通信機器が次の応答タイミングまでに行う所定の演算にかかる時間に基づいて、前記他方の通信機器からの応答待ちの期限を設定する設定ステップとを実行させ、
前記他方の通信機器が、
前記所定の演算を行って前記情報から共有鍵を取得する取得ステップと、
前記応答タイミングで前記一方の通信機器へ所定の応答を送信する応答送信ステップとを実行させるための、プログラム。
【請求項３４】
暗号化／改ざん認証処理が施されたデータを送受信するために行われる共有鍵を交換する方法を２つの通信機器間で実現させるためのプログラムが記録された、コンピュータ読み取り可能な記録媒体であって、
少なくとも一方の通信機器に、
対向する他方の通信機器が共有鍵を取得するために必要な情報を、当該他方の通信機器に送信する情報送信ステップと、
前記他方の通信機器が次の応答タイミングまでに行う所定の演算にかかる時間に基づいて、前記他方の通信機器からの応答待ちの期限を設定する設定ステップとを実行させ、
前記他方の通信機器が、
前記所定の演算を行って前記情報から共有鍵を取得する取得ステップと、
前記応答タイミングで前記一方の通信機器へ所定の応答を送信する応答送信ステップとを実行させるためのプログラムを記録する、記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有鍵交換方法及び通信機器に関し、より特定的には、ネットワークを介して秘匿性の高いデータを送受信する機器間で、暗号化／認証用の秘密鍵を交換及び共有するための共有鍵交換方法に関する。
【背景技術】
【０００２】
近年のインターネットの普及により、電子メールや電子商取引等のネットワークを介したサービスも増大し、家庭内にもネットワークに接続できる電化製品、いわゆる「ネット家電」が増えつつある。このネット家電は、エアコンや電子レンジ等の白物家電にも及んでおり、宅外からエアコンを制御したり、電子レンジの調理プログラムをサーバからダウンロードしたりできるサービス等が提案されている。しかしながら、このネットワークの普及拡大に伴い、悪意を持った第三者が、ネットワーク上の電子データを改ざんや盗用（無断視聴）したり、他人になりすましてサービスを受けたりする、といった問題が浮上している。このため、ネットワーク上のセキュリティ対策が重要となってきている。
【０００３】
ネットワーク上のセキュリティ機能を実現する取り組みとしては、暗号化技術や認証技術を使ったプロトコルが、様々に規格化又は実用化されている。例えば、ＩＰパケットのレベルでのセキュリティ機能を規定したプロトコルとして、ＩＰｓｅｃ（ＩＰ  Ｓｅｃｕｒｉｔｙ  ｐｒｏｔｏｃｏｌ）がある。ＩＰｓｅｃとは、インターネット技術タスクフォース（ＩＥＴＦ；Ｉｎｔｅｒｎｅｔ  Ｅｎｇｉｎｅｅｒｉｎｇ  Ｔａｓｋ  Ｆｏｒｃｅ）によって標準化されたプロトコルであり、その内容はＩＥＴＦの仕様書「ＲＦＣ２４０１」（非特許文献１）等によって規定されている。このＩＰｓｅｃでは、ＩＰパケットそのものを暗号化することで盗用者から通信内容を保護し、秘密の漏洩を防ぐことができる。また、ＩＰパケットに認証（完全性チェック）用の値を追加することで、通信経路でデータが改ざんされなかったことを保証することができる。
【０００４】
ところで、ＩＰｓｅｃ等のプロトコルを使って、機器間で暗号化／認証処理がされたデータを送受信する場合、データ送受信に先立って、暗号化／認証処理に用いる鍵（以下、セッション共有鍵と呼ぶ）を両方の機器で共有する必要がある。ここで、ユーザが手動でセッション共有鍵を設定するのは煩雑であり、多くの機器間で通信するシステムには向かない。また、１つのセッション共有鍵を長時間にわたって使い続けると、第三者にセッション共有鍵を解読されてしまう可能性が高まるため、必要に応じてセッション共有鍵を更新する必要がある。このようなことから、セッション共有鍵を機器間で共有するために必要な生成、配布、交換及び更新の処理を、安全かつ簡単に自動的に行うことが好ましく、これについて様々な手法が提案されている。
【０００５】
例えば、２つの機器間で１つの秘密対称鍵（セッション共有鍵）を交換させる方法として、広く使われている基本技術に、ディフィ−ヘルマン（ＤＨ法）の鍵交換方法がある。このディフィ−ヘルマンの鍵交換方法（以下、ＤＨ法と記す）は、上述したＩＰｓｅｃの鍵交換及び管理プロトコルとして標準使用が規定されているＩＫＥ（Ｉｎｔｅｒｎｅｔ  Ｋｅｙ  Ｅｘｃｈａｎｇｅ）にも用いられている。このＩＫＥの概要は、ＩＥＴＦの仕様書「ＲＦＣ２４０７」〜「ＲＦＣ２４０９」（非特許文献２〜４）に開示されている。
【０００６】
以下、従来の共有鍵交換（共有及び配信）方法の具体例として、ＤＨ法を説明する。
図１８は、ＩＥＴＦの仕様書「ＲＦＣ２６３１」（非特許文献５）で規定されているＤＨ法を説明するための図である。なお、図１８の機器Ａ及び機器Ｂは、暗号通信及び鍵交換を行う機器の組である。また、機器Ａと機器Ｂとが、鍵交換を行う前に変数ｇ及び変数ｎの値を予め知っているものとする（ステップＳ１８０１、Ｓ１８０２）。この変数ｇ及び変数ｎは、鍵交換処理における演算に用いられる変数であるが、その値は第三者（盗用者）に知られていてもよい。
【０００７】
まず、機器Ａは、自機器固有の秘密値ａを生成する（ステップＳ１８０３）。次に、機器Ａは、この秘密値ａと変数ｇ及び変数ｎとを用いて、次式（１）によって公開値Ｘを算出する（ステップＳ１８０４）。この式（１）は、変数ｇを秘密値ａの数だけ乗算し（べき乗演算）、その値を変数ｎで割った余り（モジュロ演算）を、公開値Ｘとすることを意味する。そして、機器Ａは、算出した公開値Ｘを機器Ｂに送信する（ステップＳ１８０５）。
Ｘ＝ｇ＾a  ｍｏｄ  ｎ  …（１）
【０００８】
一方、機器Ｂは、機器Ａから公開値Ｘを受信すると、自機器固有の秘密値ｂを生成する（ステップＳ１８０６）。次に、機器Ｂは、この秘密値ｂと変数ｇ及び変数ｎとを用いて、次式（２）によって公開値Ｙを算出する（ステップＳ１８０７）。さらに、機器Ｂでは、機器Ａから受信した公開値Ｘ、秘密値ｂ及び変数ｎを用いて、次式（３）によってセッション共有鍵Ｋを算出する（ステップＳ１８０８）。そして、機器Ｂは、算出した公開値Ｙを機器Ａに送信する（ステップＳ１８０９）。
Ｙ＝ｇ＾b  ｍｏｄ  ｎ  …（２）
Ｋ＝Ｘ＾b  ｍｏｄ  ｎ  …（３）
【０００９】
最後に、機器Ａは、機器Ｂから公開値Ｙを受信すると、この公開値Ｙ及び秘密値ａを用いて、次式（４）によってセッション共有鍵Ｋを算出する（ステップＳ１８１０）。
Ｋ＝Ｙ＾a  ｍｏｄ  ｎ  …（４）
【００１０】
ここで、上記式（３）及び式（４）は、次式（５）の関係が成立する。
Ｙ＾a  ｍｏｄ  ｎ＝Ｘ＾b  ｍｏｄ  ｎ＝ｇ＾(a×b)  ｍｏｄ  ｎ  …（５）
そのため、機器Ａ及び機器Ｂは、セッション共有鍵Ｋとして同じ値を算出することができる。従って、各機器でセッション共有鍵Ｋを算出した後には、このセッション共有鍵Ｋを用いて暗号化／認証処理したデータを送受信することができる（ステップＳ１８１１）。
【００１１】
盗用者が、既知である変数ｇ、変数ｎ、公開値Ｘ及び公開値Ｙに基づいて、セッション共有鍵Ｋを見つけ出すことは、いわゆる離散対数問題と言われており、大変難しいことは周知の事実である。特に、変数ｎを極めて大きく（数百ビットから数千ビット）に設定した場合には、離散対数を解くことは事実上不可能である。以上のように、ＤＨ法を使用することにより、機器Ａと機器Ｂとの間で安全にセッション共有鍵Ｋを共有させることができる。
【００１２】
なお、上述したＩＫＥの場合には、ＤＨ法の手順だけでなく、その前後に機器間でやり取りする手順も規定されている。以下、図１９を用いてＩＫＥでの鍵交換方法を簡単に説明する。なお、ＩＫＥにおいては、最初に鍵交換の要求を相手に送る側の機器をイニシエータと呼び、その要求を受け付ける側の機器をレスポンダと呼ぶ。また、ＩＫＥでは、Ｐｈａｓｅ１とＰｈａｓｅ２という２段階の鍵交換を規定している。
【００１３】
まず、Ｐｈａｓｅ１の段階において、イニシエータとレスポンダとは、始めに鍵交換と暗号化／認証処理とに用いる各種パラメータを折衝する（ステップＳ１９０１）。例えば、ＤＨ法で用いる変数ｇ及び変数ｎの値や、ステップＳ１９０３で用いる暗号化／認証のアルゴリズムも、このステップＳ１９０１で決められる。変数ｇ及び変数ｎの値については、値そのもの、あるいは変数ｇ及び変数ｎの値を特定できる所定のグループ番号等で取り決めればよい。次に、上述したＤＨ法の鍵交換を行い、セッション共有鍵Ｋ＿Ｐｈａｓｅ１を共有する（ステップＳ１９０２）。Ｐｈａｓｅ１の最後には、イニシエータとレスポンダとが相互に本当に正しい相手かどうかを認証（本人性確認）するための手順を行う（ステップＳ１９０３）。このステップＳ１９０３の認証で使用するメッセージは、セッション共有鍵Ｋ＿Ｐｈａｓｅ１に基づく鍵によって暗号化／認証処理された後、送受信される。お互いの機器を認証するための情報としては、ＩＤやハッシュ値等を使用することができる。例えば、セッション共有鍵Ｋ＿Ｐｈａｓｅ１とステップＳ１９０２で交換したデータ等とを連結し、それを鍵つきハッシュ関数の入力値として計算したハッシュ値を、ステップＳ１９０３においてメッセージの暗号化／認証を行う鍵として使用できる。
【００１４】
次に、Ｐｈａｓｅ２の段階において、イニシエータとレスポンダとの間で実際に送受信したいデータに施す暗号化／認証処理を決定する。このＰｈａｓｅ２のメッセージには、ステップＳ１９０３と同様に、セッション共有鍵Ｋ＿Ｐｈａｓｅ１に基づく鍵で暗号化／認証処理が施される。Ｐｈａｓｅ２における最初の２メッセージでは、変数ｇ及び変数ｎの値の提案又は通知、暗号化／認証のアルゴリズム等の折衝と、ＤＨ法の公開値Ｘ及び公開値Ｙの交換が行われる（ステップＳ１９０４）。Ｐｈａｓｅ２では、パラメータ（変数ｇ、変数ｎ、秘密値ａ及び秘密値ｂ）の値を、Ｐｈａｓｅ１のパラメータと異なる値にすることができる。イニシエータとレスポンダとは、ステップＳ１９０４のＤＨ法で計算されるセッション共有鍵Ｋ＿Ｐｈａｓｅ２に基づいて、実際のデータに適用する暗号化／認証処理の鍵を生成し、暗号化／認証処理済みのデータを送受信する（ステップＳ１９０５）。
【００１５】
なお、ＩＫＥでは、上述した手順以外にも、一方のメッセージが他方の機器に届かなかった場合のメッセージの再送や、セッション共有鍵の更新手順等も規定されている。
【非特許文献１】標準仕様書「ＲＦＣ２４０１」、ＩＥＴＦ、［平成１５年１２月９日検索］、インターネット＜ＵＲＬ：http://www.ietf.org/rfc/rfc2401.txt＞
【非特許文献２】標準仕様書「ＲＦＣ２４０７」、ＩＥＴＦ、［平成１５年１２月９日検索］、インターネット＜ＵＲＬ：http://www.ietf.org/rfc/rfc2407.txt＞
【非特許文献３】標準仕様書「ＲＦＣ２４０８」、ＩＥＴＦ、［平成１５年１２月９日検索］、インターネット＜ＵＲＬ：http://www.ietf.org/rfc/rfc2408.txt＞
【非特許文献４】標準仕様書「ＲＦＣ２４０９」、ＩＥＴＦ、［平成１５年１２月９日検索］、インターネット＜ＵＲＬ：http://www.ietf.org/rfc/rfc2409.txt＞
【非特許文献５】標準仕様書「ＲＦＣ２６３１」、ＩＥＴＦ、［平成１５年１２月９日検索］、インターネット＜ＵＲＬ：http://www.ietf.org/rfc/rfc2631.txt＞
【発明の開示】
【発明が解決しようとする課題】
【００１６】
上述したように、ＤＨ法は、べき乗演算とモジュロ演算とを含んでおり、桁数の大きい数値を使用する場合の処理負荷が非常に重いことが知られている。例えば、ＩＫＥで規定されているＤＨグループ２の場合には、ｇ＝２、ｎ＝１０２４（ビット）の値を使用して公開値Ｘ、公開鍵Ｙ及びセッション共有鍵Ｋが計算される。しかしながら、ネット家電のように低コストのＣＰＵを搭載する機器では、高い計算能力が望めず、以下のような３つの課題が発生すると考えられる。
【００１７】
まず、第１の課題としては、対向する（相手側の）機器におけるタイムアウト検出により、鍵交換処理が失敗する恐れがあることが挙げられる。図２０は、この課題を説明するためのシーケンス図である。図２０のステップＳ２００１〜Ｓ２００６は、図１８のＳ１８０１〜Ｓ１８０６と同じ処理であり、機器Ａから機器ＢにＤＨ法の公開値Ｘが送信される。次に、機器Ｂは、図１８のステップＳ１８０７及びＳ１８０８と同様に公開値Ｙ及びセッション共有鍵Ｋの算出を行うが、ＣＰＵの計算能力が低いため非常に長い処理時間を要する（ステップＳ２００７、Ｓ２００８）。
【００１８】
機器Ａは、自分の公開値Ｘを送信した後（ステップＳ２００５）、機器Ｂからの応答、すなわち公開値Ｙの受信を待つわけであるが、通常、通信経路中のパケットロスや対向する機器の障害等の事態に備えて、再送やタイムアウトの処理を持たせている。図２０の機器Ａの場合は、機器Ｂからの応答が無ければ再送間隔Ｔ［秒］時間毎に公開値Ｘのメッセージを再送する（ステップＳ２０１０〜Ｓ２０１２）。それでも機器Ｂからの応答が無い場合には、所定の時間（図２０の例では、Ｔ×４［秒］）が経過した後にタイムアウトを検出して、鍵交換が失敗したと判断する（ステップＳ２０１３）。
【００１９】
その後、機器Ｂで公開値Ｙ及びセッション共有鍵Ｋの算出が終了し、機器Ａに公開値Ｙを送信したとしても（ステップＳ２００９）、その時には機器Ａではすでに機器Ｂとの鍵交換処理実行状態をリセットしている。そのため、公開値Ｙを含むメッセージは、無効なメッセージと判断して廃棄されてしまう（ステップＳ２０１４）。
【００２０】
次に、第２の課題としては、鍵の寿命が設定されている場合、寿命満了までに鍵の更新が完了しない恐れがあることが挙げられる。同一の鍵を長時間にわたって使用すると、その間に鍵を解読されることが全くないとは言えない。そこで、ＩＫＥでは、鍵に寿命を設けておき、適当な時間が経つと、それまでの鍵の使用を終了し、別の新しい鍵を使用することができるようにしている。具体的には、鍵交換成功によって鍵が作成されると、その鍵に寿命が設定される。あるいは、鍵交換の手順を開始する際に、その鍵に付与する寿命満了の時刻を機器Ａと機器Ｂとの間で取り決めておく。その鍵の寿命が満了になる前に、次の新しい鍵を作成し、使用中の鍵の寿命が満了となる前に、この新しい鍵に切り替える。このような鍵の更新処理を、リキー処理と呼ぶ。ＤＨ法に伴う演算に時間がかかると、リキー処理が遅れ、古い鍵の寿命満了までに鍵の更新ができず、古い鍵を使い続けるうちに、その寿命が満了するとパケットの暗号化ができなくなる。
【００２１】
次に、第３の課題としては、機器上の他のアプリケーションの実行を妨害する恐れがあることが挙げられる。ネット家電のように低性能のＣＰＵを搭載している機器で、ＤＨ法等の高負荷な演算処理を連続して実行すると、長時間にわたってネット家電のＣＰＵをこの演算だけで占有してしまい、ＣＰＵリソースが枯渇することになる。そのため、ネット家電上で動作する他のアプリケーションの実行が妨げられ、正常に動作しなくなる可能性がある。
【００２２】
それ故に、本発明の第１の目的は、低性能ＣＰＵを搭載した機器を使用する場合でも、機器にタイムアウト検出をさせることなく鍵交換を成功させることが可能な共有鍵交換方法及びその通信機器を提供することである。また、本発明の第２の目的は、低性能ＣＰＵを搭載した機器を使用する場合でも、リキー処理を正常に行うことが可能な共有鍵交換方法及びその通信機器を提供することである。さらに、本発明の第３の目的は、低性能ＣＰＵを搭載した機器では、他のアプリケーションの実行を妨げることなく同時に鍵交換も成功させることが可能な共有鍵交換方法及びその通信装置を提供することである。
【課題を解決するための手段】
【００２３】
本発明は、暗号化／改ざん認証処理が施されたデータを送受信するために、２つの通信機器間で行われる共有鍵を交換する共有鍵交換方法、及びその方法を実行する通信機器に向けられている。そして、上記第１の目的を達成させるために、本発明の共有鍵交換方法では、各通信機器が以下のステップを実行することを特徴とし、本発明の通信機器では、そのステップを実行可能な構成を備えていることを特徴としている。
【００２４】
少なくとも一方の通信機器が、対向する他方の通信機器が共有鍵を取得するために必要な情報を、当該他方の通信機器に送信する情報送信ステップ（情報送信部）と、他方の通信機器が次の応答タイミングまでに行う所定の演算にかかる時間に基づいて、他方の通信機器からの応答待ちの期限を設定する設定ステップ（設定部）とを実行する（備える）。そして、他方の通信機器が、所定の演算を行って情報から共有鍵を取得する取得ステップ（取得部）と、応答タイミングで一方の通信機器へ所定の応答を送信する応答送信ステップ（応答送信部）とを実行する（備える）。
【００２５】
ここで、各々の通信機器が、自己の公開値を算出して相手の通信機器に送信し、また相手の通信機器から相手の公開値を受信して、当該相手の公開値に基づいて共有鍵を算出することで共有鍵の交換を実現する場合には、一方の通信機器の設定ステップが、他方の通信機器において公開値の算出までにかかる時間又は共有鍵の算出までにかかる時間の少なくともいずれかに基づいて、応答待ちの期限を設定する。
【００２６】
また、一方の通信機器が、自機器で生成した共有鍵又は共有鍵を生成するための情報に所定の暗号化を施して他方の通信機器へ送信し、他方の通信機器が、一方の通信機器から受信する暗号化された共有鍵を復号又は共有鍵を生成するための情報を復号して共有鍵を生成し、共有鍵取得の応答を一方の通信機器へ送信することで共有鍵の交換を実現する場合には、一方の通信機器の設定ステップが、他方の通信機器において暗号化された共有鍵の復号にかかる時間又は共有鍵を生成するための情報の復号及び共有鍵の生成にかかる時間に基づいて、応答待ちの期限を設定する。
【００２７】
また、他方の通信機器が、一方の通信機器から要求メッセージを受信した後、共有鍵又は共有鍵を生成するための情報を、一方の通信機器から受信する公開鍵を用いて暗号化して一方の通信機器へ送信することで共有鍵の交換を実現する場合には、一方の通信機器の設定ステップが、他方の通信機器において共有鍵又は共有鍵を生成するための情報の暗号化にかかる時間に基づいて、応答待ちの期限を設定する。
【００２８】
なお、所定の演算は、共有鍵の取得に伴う認証処理のための演算、又は共有鍵の取得に伴う認証処理のための演算かつ共有鍵を取得するための演算であってもよい。典型的には、一方の通信機器が、認証のためのデジタル署名がされたデータ又は公開鍵暗号を利用したデータを他方の通信機器へ送信し、他方の通信機器が、一方の通信機器から受信するデジタル署名がされたデータ又は公開鍵暗号を利用したデータに従って本人性認証処理を行うことで、認証処理を実現する場合、一方の通信機器の設定ステップが、他方の通信機器において本人性認証処理にかかる時間に基づいて、応答待ちの期限を設定すればよい。
【００２９】
一方の通信機器の設定部は、相手の通信機器から受信する所定の演算にかかる時間を推定した演算所要時間に基づいて、所定の演算にかかる時間を取得すればよい。好ましい取得方法としては、他方の通信機器が、所定の演算にかかる演算所要時間を推定する推定ステップ（推定部）と、推定した演算所要時間を一方の通信機器へ送信する時間送信ステップ（時間送信部）とをさらに実行する（備える）。そして、一方の通信機器が、演算所要時間を他方の通信機器から受信する受信ステップを実行する。
このとき、一方の通信機器が、他方の通信機器に演算所要時間の問い合わせを実行し（問い合わせ部）、他方の通信機器が、一方の通信機器からの問い合わせに応じて、推定ステップ及び時間送信ステップを実行してもよい。
他方の通信機器が推定する演算所要時間は、事前に保存されていてもよい。また、この事前に保存する演算所要時間は、過去の所定の演算にかかった最大時間とするのが好ましい。
【００３０】
また、上記以外の方法として、他方の通信機器が、次の応答タイミングまでに応答が遅れる内容の通知を、一方の通信機器に少なくとも１回送信するステップを実行してもよい。この場合、一方の通信機器は、他方の通信機器から通知を受信するステップをさらに実行し、設定ステップで、通知に基づいて応答待ちの期限を設定すればよい。また、一方の通信機器が、メッセージを送信してから他方の通信機器において所定の演算後の応答を受信するまでの時間を計測して、所定の演算にかかる時間を取得するようにしてもよい。
【００３１】
なお、通信機器が相手の公開値に基づいて共有鍵を算出する共有鍵交換処理において、他方の通信機器が、次の応答タイミングまでに公開値及び／又は共有鍵の算出を実行する場合（公開値算出部、共有鍵算出部）、一方の通信機器の設定ステップが、他方の通信機器が公開値及び／又は共有鍵を算出するまでにかかる合計時間に基づいて、公開値の送信又は共有鍵の算出完了に関する応答待ちの期限を設定することが好ましい。
【００３２】
ここで、通信機器は、共有鍵の算出完了後に完了通知を相手の通信機器に送信するステップと、相手の通信機器から完了通知を受けるまで、鍵交換処理失敗の判断を行わないステップとを実行してもよい。また、ＩＫＥのメッセージシーケンスにおいて、情報送信ステップ、設定ステップ、取得ステップ及び応答送信ステップが実行されてもよい。
【００３３】
一方、上記第２及び第３の目的を達成させるために、本発明の共有鍵交換方法では、各通信機器が以下のステップを実行することを特徴とし、本発明の通信機器では、そのステップを実行可能な構成を備えていることを特徴としている。
【００３４】
各々の通信機器が、共有鍵を算出するために行う所定の演算にかかる演算所要時間を推定する推定ステップ（推定部）と、相手の通信機器との間で共有鍵の交換を完了すべき時刻までに共有鍵の交換処理を完了させるための処理開始時刻を、演算所要時間に基づいて算定する算定ステップ（算定部）とを実行する（備える）。そして、いずれか一方の通信機器が、処理開始時刻に鍵交換処理を開始する開始ステップ（開始部）をさらに実行する（備える）。
【００３５】
この場合、他方の通信機器が、推定ステップで推定した演算所要時間を、一方の通信機器へ送信する時間送信ステップ（時間送信部）をさらに実行する（備え）。そして、一方の通信機器が、他方の通信機器から演算所要時間を受信するステップ（受信部）をさらに実行し（備え）、算定ステップにおいて自己の演算所要時間と他方の通信機器の演算所要時間とに基づいて、処理開始時刻を算定してもよい。
【００３６】
また、一方の通信機器が、他方の通信機器に演算所要時間の問い合わせを行うステップ（問い合わせ部）をさらに実行し（備え）、他方の通信機器が、一方の通信機器からの問い合わせに応じて、推定ステップ及び時間送信ステップを実行してもよい。
【００３７】
また、算定ステップで算定した処理開始時刻が早い方の通信機器が、その処理開始時刻に開始ステップを実行することが好ましい。
また、通信機器が、共有鍵の算出が新規であるか更新であるかを判定する判定ステップ（判定部）をさらに実行し（備え）、更新である場合には、共有鍵を算出するために行う所定の演算が所定の小単位に分割されて時間的に負荷分散されることが好ましい。この負荷分散は、共有鍵を算出するために行う所定の演算にかかる時間が長い方の通信機器が実行すればよい。
さらに、推定ステップは、共有鍵を算出するために自機器が行う所定の演算にかかる実時間の２倍の時間を演算所要時間として推定することが好ましい。
【００３８】
好ましくは、この共通鍵交換方法は、一連の処理手順を通信機器に実行させるためのプログラムの形式で提供される。このプログラムは、コンピュータ読み取り可能な記録媒体に記録されてもよい。
【発明の効果】
【００３９】
上記のように、本発明の共有鍵交換方法によれば、いずれかの通信機器が公開値及び共有鍵の算出に所定以上の時間を要する（低性能である）場合であっても、演算の遅延によって影響する時間又は遅延する旨の通知を対向する通信機器に予め推定して通知する。これにより、低性能の機器がまだ鍵交換処理の演算をしている間に対向する機器が応答なしと判断してしまうという従来の課題が生じないため、問題なく鍵交換を成功させることができる。また、共有鍵更新時の鍵交換処理も共有鍵の寿命が満了する前に行うことができる。さらに、この共有鍵更新時には、高負荷の演算を時間的に負荷分散させることが可能となり、低性能の機器でも、鍵交換の処理が長期間にわたってＣＰＵを占有することがなくなる。
【発明を実施するための最良の形態】
【００４０】
本発明が提供する共有鍵交換方法を説明する前に、まず共有鍵交換方法を使用する機器によるネットワーク構成について説明する。
図１−Ａ及び図１−Ｂは、本発明の共有鍵交換方法が適用されるネットワーク構成の一例を示す図である。本発明の共有鍵交換方法に適した実装形態は、ネット家電とインターネット等の公衆網（ＷＡＮ）との接続を中継するＧＷ型機器（ルータやゲートウェイ（ＧＷ）等）に実装されるケース（図１−Ａ）と、ネット家電に相当するホスト型機器に実装されるケース（図１−Ｂ）との２種類に分類できる。
【００４１】
まず、図１−Ａでは、本発明の共有鍵交換方法は、ＧＷ型機器１０１及び１０２に実装されている。ＧＷ型機器１０１とＧＷ型機器１０２とは、公衆網１０７を介して接続されている。また、ＧＷ型機器１０１は、自分のＬＡＮ１０８内の端末１０３及び１０４とも接続されている。同様に、ＧＷ型機器１０２は、自分のＬＡＮ１０９内の端末１０５及び１０６とも接続されている。
【００４２】
ＬＡＮ１０８内の端末とＬＡＮ１０９内の端末とは、ＧＷ型機器１０１及び１０２を中継して通信できる。暗号化／認証処理は、ＧＷ型機器１０１とＧＷ型機器１０２との間を行き来するデータに対して実行される。すなわち、暗号化／認証処理は、この２つのＧＷ型機器間で終端している。ＧＷ型機器１０１は、ＬＡＮ１０８内の端末から受信するデータを暗号化／認証処理して対向するＧＷ型機器１０２に送信し、またＧＷ型機器１０２から受信する暗号化／認証処理後のデータを復号化／認証処理してＬＡＮ１０８内の端末に送出する。ＧＷ型機器１０２は、ＬＡＮ１０９内の端末から受信するデータを暗号化／認証処理して対向するＧＷ型機器１０１に送信し、またＧＷ型機器１０１から受信する暗号化／認証処理後のデータを復号化／認証処理してＬＡＮ１０９内の端末に送出する。また、共有鍵の交換処理も、ＧＷ型機器１０１とＧＷ型機器１０２との間で行われる。
【００４３】
一方、図１−Ｂでは、本発明の共有鍵交換方法は、ホスト型機器１１０及び１１１に実装されている。ホスト型機器１１１は、公衆網１０７を介してＧＷ型機器１０１又はホスト型機器１１０と接続されている。また、ＧＷ型機器１０１は、上記と同様に、自分のＬＡＮ１０８内の端末１０３及び１０４とも接続されている。
【００４４】
ホスト型機器１１１とＬＡＮ１０８内の端末とは、ＧＷ型機器１０１を中継して通信できる。暗号化／認証処理は、ホスト型機器１１１とＧＷ型機器１０１と間を行き来するデータに対して実行される。ホスト型機器１１１は、ＧＷ型機器１０１とは異なり、自分内部の発着データを自ら暗号化／認証処理する。さらに、ホスト型機器１１１は、同様の機能を持つホスト型機器１１０との間で、暗号化／認証処理済みのデータを通信できる。また、共有鍵の交換処理に関しては、ホスト型機器１１１とＧＷ型機器１０１との間、及びホスト型機器１１１とホスト型機器１１０との間で、それぞれ独立して行われる。
【００４５】
次に、本発明の共有鍵交換方法が実装される機器の機能ブロックについて、図２−Ａ及び図２−Ｂを参照して説明する。図２−Ａは、図１−Ａで説明したＧＷ型機器１０２の機能ブロックの一例を示す図である。図２−Ａにおいて、ＧＷ型機器１０２は、共有鍵交換部２０１と、データベース（ＤＢ）管理部２０２と、データベース（ＤＢ）部２０３と、暗号化／認証処理部２０４と、通信プロトコル処理部２０５及び２０６と、ＬＡＮインタフェース（Ｉ／Ｆ）２０７と、ＷＡＮインタフェース（Ｉ／Ｆ）２０８とを備える。図２−Ｂは、図２−Ａの共有鍵交換部２０１の詳細な構成の一例を示すブロック図である。なお、図２−Ｂは、本実施形態で説明する全ての処理を表した機能ブロックである。よって、各実施形態で説明する機器Ａ及び機器Ｂが構成に含む機能ブロック及びデータの流れは、その処理内容に応じてそれぞれ異なることになる。設定部は、演算所要時間の設定、小処理単位の設定等の各種の設定処理を主に行う。推定部は、演算所要時間の推定処理を主に行う。取得部は、演算や復号化によって公開値、共有鍵又は公開鍵を取得する取得処理を主に行う。判定部は、共有鍵交換処理について新規／更新を判定する判定処理を行う。これらの処理は、後で詳細に説明する。
【００４６】
ＧＷ型機器１０２は、ＷＡＮインタフェース２０８を介して公衆網（ＷＡＮ）に接続されており、他のＧＷ型機器等と通信できる。また、ＧＷ型機器１０２は、ＬＡＮインタフェース２０７を介してＬＡＮに接続されており、ＬＡＮ内の端末等と通信できる。通信プロトコル処理部２０５及び２０６は、ＩＰレイヤやＴＣＰレイヤ等の通信プロトコルを処理する部分であり、ＬＡＮ内の端末と公衆網を介した機器との間で送受信されるパケットのルーティング処理等も行う。
【００４７】
共有鍵交換部２０１は、本発明の共有鍵交換方法に基づく処理を行う構成部分である。共有鍵交換部２０１では、対向機器であるＧＷ型機器１０１と鍵交換用の通信を行い、ＧＷ型機器１０１とセッション共有鍵を共有する。セッション共有鍵は、データベース管理部２０２を介してデータベース部２０３に記録される。
【００４８】
データベース部２０３は、暗号化／認証処理に用いるセッション共有鍵を保存する記録部であり、鍵だけでなく暗号アルゴリズム等の情報も保存する。データベース部２０３への情報の登録や削除等の処理は、データベース管理部２０２が行う。暗号化／認証処理部２０４は、データベース部２０３の鍵情報等を参照して、パケットの暗号化・復号化／認証（完全性チェック）の処理を行う。具体的には、暗号化／認証処理部２０４は、ＬＡＮインタフェース２０７及び通信プロトコル処理部２０５を介して、ＬＡＮ内の端末から平文の（暗号化されていない）送信パケットを受け取る。この送信パケットを受け取ると、暗号化／認証処理部２０４は、データの暗号化／認証処理用のデータ追加等の処理を行い、通信プロトコル処理部２０６及びＷＡＮインタフェース２０８を介して公衆網に送出する。従って、暗号化／認証処理部２０４以降の通信プロトコル処理部２０６及びＷＡＮインタフェース２０８を介して送信されるパケットは、暗号化済みとなる。また、公衆網側から到着した暗号化済みの受信パケットについては、上記とは逆の手順で、暗号化／認証処理部２０４で復号化処理を行い、ＬＡＮ内の端末に対して平文のデータを送出する。
【００４９】
以下、本発明が提供する共有鍵交換方法の実施形態を、ＤＨ法による鍵交換処理に適用させた場合を一例に挙げて説明する。なお、各実施形態における機器Ａ及び機器Ｂは、暗号化／認証処理と共有鍵交換処理とを実行する機器の組とする。具体的には、図１−ＡにおけるＧＷ型機器１０１とＧＷ型機器１０２との組、図１−ＢにおけるＧＷ型機器１０１とホスト型機器１１１との組、又はホスト型機器１１０とホスト型機器１１１との組のいずれかに対応する。また、各実施形態の処理シーケンスで示す機器の処理は、図２−Ａにおける共有鍵交換部２０１で行われる。
【００５０】
（第１の実施形態）
以下に説明する第１〜第９の実施形態は、発明が解決しようとする課題において説明した従来の共有鍵交換方法に残存する第１の課題を解決するための方法である。本発明では、第１の課題を解決するため、時間がかかる演算処理がある場合にその処理に関する応答待ち期限（タイムアウト時間）を延長する制御を行う。本発明は、鍵交換処理の手順に応じて最適な制御形態を実現することが可能であるが、その中で代表的な９つの制御形態を第１〜第９の実施形態で順に説明する。
【００５１】
図３は、本発明の第１の実施形態に係る共有鍵交換方法を説明するための処理シーケンス図である。図３において、機器Ｂは、機器Ａに比べて処理能力が劣っている（例えば、低い性能のＣＰＵを搭載している）低性能の機器であるとする。また、機器Ａ（イニシエータ）から鍵交換処理が開始されて、機器Ｂ（レスポンダ）との間で鍵の共有が実現されるものとする。さらに、機器Ａ及び機器Ｂは、鍵交換処理を実行する前に、鍵交換処理の演算に用いられる変数ｇ及び変数ｎの値を予め知っているものとする（ステップＳ３０１、Ｓ３０２）。
【００５２】
鍵交換処理を開始すると、機器Ａは、まず自機器固有の秘密値ａを生成する（ステップＳ３０３）。次に、機器Ａは、この秘密値ａと変数ｇ及び変数ｎとを用い、上記式（１）の演算によって公開値Ｘを算出する（ステップＳ３０４）。そして、機器Ａは、算出した公開値Ｘを機器Ｂに送信する（ステップＳ３０５）。ここまでの処理は、上述した従来の処理（図１８のステップＳ１８０３〜Ｓ１８０５）と同様である。これらの処理は、機器Ａ側の取得部及び送信部によって行われる（図２−Ｂを参照）。
【００５３】
機器Ａから公開値Ｘを受信すると、機器Ｂは、上記式（２）の演算による公開値Ｙの算出にかかる時間Ｔｂ１（秘密値ｂの生成にかかる時間も含む）、及び上記式（３）の演算による共有鍵Ｋの算出にかかる時間Ｔｂ２を推定し、鍵交換処理のために機器Ｂ側で必要とする演算所要時間Ｔｂ（＝Ｔｂ１＋Ｔｂ２）を求める（ステップＳ３０６）。これらの処理は、機器Ｂ側の受信部及び推定部によって行われる（図２−Ｂを参照）。この演算所要時間Ｔｂは、公開値の送信が遅延することに関する情報であり、低性能である機器Ｂが機器Ａに対して公開値及び共有鍵の算出に所定以上の時間を要することを通知するための情報である。演算所要時間Ｔｂは、例えば次のようにして求められる。事前に機器Ｂ上で、既知の変数ｇ及び変数ｎによる公開値Ｙ及び共有鍵Ｋの算出を試験的に実行しておき、その値Ｔｉｍｅ［ｇ，ｎ］を保存しておく。そして、次式（６）のように、この値に予め定めておいた固定値αを加えたものを、演算所要時間Ｔｂとして求める。固定値αは、機器Ａと機器Ｂとの間で行われるメッセージ送受信による遅延時間と揺らぎを考慮した値である（以下の各実施形態において同じ）。
Ｔｂ＝Ｔｉｍｅ［ｇ，ｎ］＋α  …（６）
【００５４】
機器Ｂは、求めた演算所要時間Ｔｂを機器Ａに送信して、この演算所要時間Ｔｂが経過するまでに公開値Ｙを応答することを機器Ａに予告する（ステップＳ３０７）。この送信の後、機器Ｂは、自機器固有の秘密値ｂを生成する（ステップＳ３０８）、そして、機器Ｂは、この秘密値ｂと変数ｇ及び変数ｎとを用い、上記式（２）の演算によって公開値Ｙを算出する（ステップＳ３０９）。さらに、機器Ｂは、公開値Ｘを用いて上記式（３）の演算によって共有鍵Ｋを算出する（ステップＳ３１０）。そして、機器Ｂは、算出した公開値Ｙを機器Ａに送信する（ステップＳ３１２）。これらの処理は、機器Ｂ側の取得部及び送信部によって行われる（図２−Ｂを参照）。
【００５５】
機器Ａは、機器Ｂから演算所要時間Ｔｂを受信すると（ステップＳ３０７）、機器Ｂからの応答待ち期限（タイムアウト時間）を、この受信から演算所要時間Ｔｂが経過した時点に延長して設定する（ステップＳ３１１）。すなわち、機器Ａは、機器Ｂから公開値Ｙを受信できなかったという判断を、最大演算所要時間Ｔｂが経過するまで待つようにする。そして、機器Ａは、タイムアウト時間までに機器Ｂから公開値Ｙを受信すると（ステップＳ３１２）、ＤＨ法による公開値の応答と判断する。従って、機器Ａ側でも、秘密値ａ、変数ｎ及び公開値Ｙを用い、上記式（４）の演算によって共有鍵Ｋを正しく計算することができ（ステップＳ３１３）、機器Ａ及び機器Ｂの両方で鍵交換が成功する。これらの処理は、機器Ａ側の設定部及び取得部によって行われる（図２−Ｂを参照）。
【００５６】
以上のように、本発明の第１の実施形態に係る共有鍵交換方法によれば、低性能の機器は、鍵交換処理に必要な演算所要時間を事前に推定し、応答メッセージの最大遅延時間を対向する機器に予告しておく。そして、予告を受けた機器は、受信した演算所要時間に従って、応答メッセージの有無を判断するタイムアウト時間を延長して設定する。これにより、いずれかの機器が低性能であっても、低性能の機器がまだ鍵交換処理の演算をしている間に対向する機器が応答なしと判断してしまうという従来の課題が生じないため、問題なく鍵交換を成功させることができる。
【００５７】
（第２の実施形態）
図４は、本発明の第２の実施形態に係る共有鍵交換方法を説明するための処理シーケンス図である。図４において、機器Ａと機器Ｂとの関係は、上記第１の実施形態と同様である。また、図４のステップＳ４０１〜Ｓ４０４及びＳ４０７の処理は、上記図３のステップＳ３０１〜Ｓ３０５の処理と同様である。
【００５８】
本第２の実施形態では、機器Ｂが、機器Ａから公開値Ｘを受信するまでに秘密値ｂを生成し（ステップＳ４０５）、上記式（２）の演算によって公開値Ｙを算出している（ステップＳ４０６）。そして、機器Ａから公開値Ｘを受信すると（ステップＳ４０７）、機器Ｂは、上記式（３）の演算による共有鍵Ｋの算出にかかる時間Ｔｂ２を推定し、鍵交換処理のために機器Ｂ側で必要とする演算所要時間Ｔｂ（＝Ｔｂ２）を求める（ステップＳ４０８）。演算所要時間Ｔｂ２は、例えば上記式（６）の演算を利用して求めることができる。そして、機器Ｂは、求めた演算所要時間Ｔｂ２を機器Ａに送信して、この演算所要時間Ｔｂ２が経過するまでに公開値Ｙを応答することを機器Ａに予告する（ステップＳ４０９）。この送信の後、機器Ｂは、上記式（３）の演算によって共有鍵Ｋを算出し（ステップＳ４１０）、算出した公開値Ｙを機器Ａに送信する（ステップＳ４１２）。
【００５９】
機器Ａは、機器Ｂから演算所要時間Ｔｂ２を受信すると（ステップＳ４０９）、機器Ｂからの応答待ち期限（タイムアウト時間）を、この受信から演算所要時間Ｔｂ２が経過した時点に延長して設定する（ステップＳ４１１）。そして、機器Ａは、タイムアウト時間までに機器Ｂから公開値Ｙを受信すると（ステップＳ４１２）、ＤＨ法による公開値の応答と判断する。従って、機器Ａ側でも共有鍵Ｋを正しく計算することができ（ステップＳ４１３）、機器Ａ及び機器Ｂの両方で鍵交換が成功する。
【００６０】
以上のように、本発明の第２の実施形態に係る共有鍵交換方法によれば、低性能の機器は、自分の公開値の算出が、対向する機器の公開値を受信するまでに完了している場合には、共有鍵の算出に必要な時間だけを考慮した演算所要時間を事前に推定すれば、上記第１の実施形態と同様に、鍵交換を成功させることができる。
【００６１】
（第３の実施形態）
図５は、本発明の第３の実施形態に係る共有鍵交換方法を説明するための処理シーケンス図である。図５において、機器Ａと機器Ｂとの関係は、上記第１の実施形態と同様である。また、図５のステップＳ５０１〜Ｓ５０５の処理は、上記図３のステップＳ３０１〜Ｓ３０５の処理と同様である。
【００６２】
機器Ａから公開値Ｘを受信すると（ステップＳ５０５）、機器Ｂは、上記式（２）の演算によって公開値Ｙの算出にかかる時間Ｔｂ１を推定し、鍵交換処理のために機器Ｂ側で必要とする演算所要時間Ｔｂ（＝Ｔｂ１）を求める（ステップＳ５０６）。演算所要時間Ｔｂ１は、例えば上記式（６）の演算を利用して求めることができる。そして、機器Ｂは、求めた演算所要時間Ｔｂ１を機器Ａに送信して、この演算所要時間Ｔｂ１が経過するまでに公開値Ｙを応答することを機器Ａに予告する（ステップＳ５０７）。この送信の後、機器Ｂは、秘密値ｂを生成し（ステップＳ５０８）、上記式（２）の演算によって公開値Ｙを算出し（ステップＳ５０９）、算出した公開値Ｙを機器Ａに送信する（ステップＳ５１１）。そして、公開値Ｙの送信の後に、機器Ｂは、上記式（３）の演算によって共有鍵Ｋを算出する（ステップＳ５１２）。
【００６３】
機器Ａは、機器Ｂから演算所要時間Ｔｂ１を受信すると（ステップＳ５０７）、機器Ｂからの応答待ち期限（タイムアウト時間）を、この受信から演算所要時間Ｔｂ１が経過した時点に延長して設定する（ステップＳ５１０）。そして、機器Ａは、タイムアウト時間までに機器Ｂから公開値Ｙを受信すると（ステップＳ５１１）、ＤＨ法による公開値の応答と判断する。従って、機器Ａ側でも共有鍵Ｋを正しく計算することができ（ステップＳ５１３）、機器Ａ及び機器Ｂの両方で鍵交換が成功する。
【００６４】
以上のように、本発明の第３の実施形態に係る共有鍵交換方法によれば、低性能の機器は、算出後すぐに公開値を対向する機器へ送信する場合には、公開値の算出に必要な時間だけを考慮した演算所要時間を事前に推定すれば、上記第１の実施形態と同様に、鍵交換を成功させることができる。
【００６５】
（第４の実施形態）
上記第１〜第３の実施形態では、機器Ａから機器Ｂに公開値Ｘが送信された後に、機器Ｂから機器Ａに演算所要時間Ｔｂが送信される基本手順を説明した。しかし、演算所要時間Ｔｂが送信された後に、公開値Ｘが送信される応用手順であっても、同様の効果を得ることができる。以下、上記第１の実施形態で示した基本手順を、この応用手順に代えた実施形態を説明する。
【００６６】
図６は、本発明の第４の実施形態に係る共有鍵交換方法を説明するための処理シーケンス図である。図６において、機器Ａと機器Ｂとの関係は、上記第１の実施形態と同様である。
【００６７】
鍵交換処理を開始すると、機器Ａは、まず機器Ｂに対して演算所要時間の問い合わせを行う（ステップＳ６０１）。機器Ａから問い合わせを受けると、機器Ｂは、公開値Ｙの算出にかかる時間Ｔｂ１及び共有鍵Ｋの算出にかかる時間Ｔｂ２を推定し、鍵交換処理のために機器Ｂ側で必要とする演算所要時間Ｔｂ（＝Ｔｂ１＋Ｔｂ２）を求める（ステップＳ６０２）。機器Ｂは、求めた演算所要時間Ｔｂを機器Ａに送信して、公開値Ｘを受信してからこの演算所要時間Ｔｂが経過するまでに公開値Ｙを応答することを機器Ａに予告する（ステップＳ６０３）。
【００６８】
機器Ａは、機器Ｂから演算所要時間Ｔｂを受信すると、秘密値ａを生成し、上記式（１）の演算によって公開値Ｘを算出し、算出した公開値Ｘを機器Ｂに送信する（ステップＳ６０６〜Ｓ６０８）。また、機器Ｂは、機器Ａから公開値Ｘを受信すると、秘密値ｂを生成し、上記式（２）及び式（３）の演算によって公開値Ｙ及び共有鍵Ｋをそれぞれ算出し、算出した公開値Ｙを機器Ａに送信する（ステップＳ６０９〜Ｓ６１１、Ｓ６１３）。機器Ａは、機器Ｂから演算所要時間Ｔｂを受信すると（ステップＳ６０３）、機器Ｂからの応答待ち期限（タイムアウト時間）を、公開値Ｘの送信時から演算所要時間Ｔｂが経過した時点に延長して設定する（ステップＳ６１２）。そして、機器Ａは、タイムアウト時間までに機器Ｂから公開値Ｙを受信すると（ステップＳ６１３）、ＤＨ法による公開値の応答と判断する。
【００６９】
なお、この第４の実施形態では、上記第１の実施形態で示した基本手順を応用手順に代えた場合を説明したが、上記第２及び第３の実施形態についても同様に、基本手順を応用手順に代えることが可能である。すなわち、ステップＳ６０９及びＳ６１０をステップＳ６０８の前に実行してもよいし、ステップＳ６１１をステップＳ６１３の後に実行してもよい。また、第４の実施形態では、機器Ｂの演算所要時間だけを機器Ａに通知する手順を説明したが、機器Ａも演算所要時間を推定し、機器Ａと機器Ｂとがお互いの演算所要時間を通知し合う手順にしてもよい。
【００７０】
（第５の実施形態）
上記第１〜第４の実施形態では、機器Ａ及び機器Ｂの双方で変数ｇ及び変数ｎの値が既知である場合を説明した。しかし、変数ｇ及び変数ｎの値が、鍵交換処理の前にネゴシエーションされるような場合も考えられる。この場合において、上記第４の実施形態のように最初に演算所要時間の問い合わせが発生する手順であると、演算所要時間の推定方法が変わってくる。そこで、本第５の実施形態では、変数ｇ及び変数ｎの値が未知であり、かつ最初に演算所要時間の問い合わせが発生する手順による共有鍵交換方法を説明する。
【００７１】
図７は、本発明の第５の実施形態に係る共有鍵交換方法を説明するための処理シーケンス図である。図７において、機器Ａと機器Ｂとの関係は、変数ｇ及び変数ｎが未知であること以外は、上記第４の実施形態と同様である。
【００７２】
鍵交換処理を開始すると、機器Ａは、まず機器Ｂに対して演算所要時間の問い合わせを行う（ステップＳ７０１）。機器Ａから問い合わせを受けると、機器Ｂは、公開値Ｙの算出にかかる時間Ｔｂ１及び共有鍵Ｋの算出にかかる時間Ｔｂ２を推定し、鍵交換処理のために機器Ｂ側で必要とする演算所要時間Ｔｂ（＝Ｔｂ１＋Ｔｂ２）を求める（ステップＳ７０２）。この演算所要時間Ｔｂは、例えば次のようにして求められる。事前に機器Ｂ上で、変数ｇ及び変数ｎの取り得る値の様々な組み合わせによる演算を複数回試験的に実行しておき、その最大値Ｔｉｍｅ＿ｍａｘ＿ａｌｌを保存しておく。そして、次式（７）のように、この最大値に予め定めておいた固定値αを加えたものを、演算所要時間Ｔｂとして求める。
Ｔｂ＝Ｔｉｍｅ＿ｍａｘ＿ａｌｌ＋α  …（７）
【００７３】
機器Ｂは、求めた演算所要時間Ｔｂを機器Ａに送信して、公開値Ｘを受信してからこの演算所要時間Ｔｂが経過するまでに公開値Ｙを応答することを機器Ａに予告する（ステップＳ７０３）。機器Ａは、機器Ｂから演算所要時間Ｔｂを受信すると、変数ｇ及び変数ｎを生成して機器Ｂに通知する（ステップＳ７０４、Ｓ７０５）。これに対して、機器Ｂは、機器Ａから変数ｇ及び変数ｎを取得して了解の応答を返送する（ステップＳ７０６、Ｓ７０７）。機器Ａが、機器Ｂから変数ｇ及び変数ｎについて了解の応答を受信した以降の処理（ステップＳ７０９〜Ｓ７１６）は、上記図６のステップＳ６０７〜Ｓ６１４と同様である。
【００７４】
以上のように、本発明の第５の実施形態に係る共有鍵交換方法によれば、演算所要時間の問い合わせ処理の後に変数ｇ及び変数ｎの値がネゴシエーションされるような場合でも、最大の演算所要時間を推定することによって、問題なく鍵交換を成功させることができる。
【００７５】
なお、この第５の実施形態では、上記第４の実施形態（図６）で示した応用手順において変数ｇ及び変数ｎの値がネゴシエーション場合を説明したが、第４の実施形態のなお書きで記載した応用手順についても、同様に適用させることが可能である。また、演算所要時間の取得処理（ステップＳ７０１〜Ｓ７０３）を、変数ｇ及び変数ｎの取得処理（ステップＳ７０４〜Ｓ７０７）の後に行ってもよい。また、機器Ａから機器Ｂへの変数ｇ及び変数ｎの通知は、公開値Ｘの生成後に、ステップＳ７１０において公開値Ｘと同時に通知するようにしてもよい。
【００７６】
（第６の実施形態）
上記第２の実施形態（図４）では、機器Ａによる公開値Ｘの算出と機器Ｂによる公開値Ｙの算出とが、並列的に行われる手順を説明した。しかしながら、この並列的手順の場合には、低性能である機器Ｂが、公開値Ｘを受信するまでに公開値Ｙの算出を完了していないことも考えられる。例えば、上記第５の実施形態で説明したように、鍵交換処理の前に変数ｇ及び変数ｎの値がネゴシエーションされるような場合である。そこで、本第６の実施形態では、変数ｇ及び変数ｎの値が未知である場合において、公開値Ｘ及び公開値Ｙの算出が並列的に行われ、かつ最初に演算所要時間の問い合わせが発生する手順による共有鍵交換方法を説明する。
【００７７】
図８−Ａ及び図８−Ｂは、本発明の第６の実施形態に係る共有鍵交換方法を説明するための処理シーケンス図である。図８−Ａ及び図８−Ｂにおいて、機器Ａと機器Ｂとの関係は、変数ｇ及び変数ｎが未知であること以外は、上記第２の実施形態と同様である。
【００７８】
図８−Ａにおいて、鍵交換処理を開始すると、機器Ａは、まず機器Ｂに対して演算所要時間の問い合わせを行う（ステップＳ８０１）。機器Ａから問い合わせを受けると、機器Ｂは、公開値Ｙの算出にかかる時間Ｔｂ１及び共有鍵Ｋの算出にかかる時間Ｔｂ２を推定し、鍵交換処理のために機器Ｂ側で必要とする演算所要時間Ｔｂ（＝Ｔｂ１＋Ｔｂ２）を求める（ステップＳ８０２）。この演算所要時間Ｔｂは、例えば次のようにして求められる。事前に機器Ｂ上で、変数ｎ及び変数ｇの取り得る値の様々な組み合わせによる演算を複数回試験的に実行しておき、公開値Ｙの算出に関する最大値Ｔｉｍｅ＿ｍａｘＹ＿ａｌｌ及び共有鍵Ｋの算出に関する最大値Ｔｉｍｅ＿ｍａｘＫ＿ａｌｌを個別に保存しておく。そして、次式（８−１）及び式（９−１）のように、これらの最大値に予め定めておいた固定値αを加えたものを、それぞれ演算所要時間Ｔｂ１及びＴｂ２として求め、それらを加算して演算所要時間Ｔｂを求める。
Ｔｂ１＝Ｔｉｍｅ＿ｍａｘＹ＿ａｌｌ＋α  …（８−１）
Ｔｂ２＝Ｔｉｍｅ＿ｍａｘＫ＿ａｌｌ＋α  …（９−１）
【００７９】
機器Ｂは、求めた演算所要時間Ｔｂを機器Ａに送信して、演算所要時間Ｔｂが経過するまでに公開値Ｙを応答することを機器Ａに予告する（ステップＳ８０３）。機器Ａは、機器Ｂから演算所要時間Ｔｂを受信すると、変数ｇ及び変数ｎを生成して機器Ｂに通知する（ステップＳ８０４、Ｓ８０５）。これに対して、機器Ｂは、機器Ａから変数ｇ及び変数ｎを取得して、了解の応答を返送する（ステップＳ８０６、Ｓ８０７）。その後、機器Ｂは、秘密値ｂを生成し、上記式（２）の演算によって公開値Ｙを算出する（ステップＳ８１１、Ｓ８１２）。
【００８０】
機器Ａは、機器Ｂから変数ｇ及び変数ｎについて了解の応答を受信すると、秘密値ａを生成し、上記式（１）の演算によって公開値Ｘを算出する（ステップＳ８０８、Ｓ８０９）。そして、機器Ａは、算出した公開値Ｘを機器Ｂに送信する（ステップＳ８１３）。公開値Ｘの受信後、機器Ｂは、共有鍵Ｋを算出した後、公開値Ｙを機器Ａに送信する（ステップＳ８１４、Ｓ８１６）。
【００８１】
機器Ａは、公開値Ｘを機器Ｂへ送信すると（ステップＳ８１３）、機器Ｂからの応答待ち期限（タイムアウト時間）を、公開値Ｘの送信時から演算所要時間Ｔｂが経過した時点に延長して設定する（ステップＳ８１５）。そして、機器Ａは、タイムアウト時間までに機器Ｂから公開値Ｙを受信すると（ステップＳ８１６）、ＤＨ法による公開値の応答と判断する。従って、機器Ａ側でも共有鍵Ｋを正しく計算することができ（ステップＳ８１７）、機器Ａ及び機器Ｂの両方で鍵交換が成功する。
【００８２】
以上のように、本発明の第６の実施形態に係る共有鍵交換方法によれば、機器Ａによる公開値Ｘの算出と機器Ｂによる公開値Ｙの算出とが、並列的に行われるような場合でも、確実に鍵交換処理を成功させることができる。
【００８３】
なお、この第６の実施形態による応用手順は、機器Ａによる公開値Ｘの算出と機器Ｂによる公開値Ｙの算出とが並列的に行われる手順であれば適用可能である。従って、図８のステップＳ８１４をステップＳ８１６の後に実行してもよい。また、演算所要時間の取得処理（ステップＳ８０１〜Ｓ８０３）を、変数ｇ及び変数ｎの取得処理（ステップＳ８０４〜Ｓ８０７）の後に行ってもよい。
【００８４】
また、図８−Ｂに示すように、機器Ｂでの共有鍵Ｋの算出処理（ステップＳ８３８）の前に、公開値Ｙの送信処理（ステップＳ８３６）を行ってもよい、この場合には、機器Ｂは、公開値Ｙの算出にかかる演算所要時間Ｔｂ１だけを推定して、機器Ａに送信しておく（ステップＳ８２２、Ｓ８２３）。そして、機器Ａは、公開値Ｘの送信後、機器Ｂからの応答待ち期限（タイムアウト時間）を、この送信から演算所要時間Ｔｂ１が経過した時点に延長して設定する（ステップＳ８３５）。この処理により、機器Ａは、機器Ｂからの公開値Ｙを、タイムアウトを生じさせることなく受信することができる（ステップＳ８３６）。
【００８５】
（第７の実施形態）
現状のＩＫＥでは、機器Ｂが公開値Ｙを機器Ａに通知した時に、共有鍵Ｋの算出まで完了しているべきか否かの規定はなく、機器Ｂの共有鍵Ｋの算出完了を機器Ａ側でタイムアウト時間を設けて待つような規定もない。しかし、上記第３の実施形態（図５）のように、低性能である機器Ｂが、公開値Ｙの送信後に共有鍵Ｋを時間をかけて生成するような場合、次のような問題が生じることがある。例えば、機器Ａ側が、共有鍵Ｋを算出した後にデータを共有鍵Ｋで暗号化して送信した場合、機器Ｂで共有鍵Ｋの算出が完了していないと、機器Ｂは受信した暗号化データを廃棄してしまう場合があるという問題がある。また、機器Ａが、共有鍵Ｋを算出した後に機器Ｂに何らかのメッセージを送信し、共有鍵Ｋを使用した応答を機器Ｂから待っている場合、機器Ｂで共有鍵Ｋの算出が遅れていると、機器Ａでの応答待ちのタイムアウトが発生してしまうという問題がある。そこで、本第７の実施形態では、公開値Ｙの送信後に機器Ｂが共有鍵Ｋを生成するまでタイムアウト時間を設ける共有鍵交換方法を説明する。
【００８６】
図９−Ａ及び図９−Ｂは、本発明の第７の実施形態に係る共有鍵交換方法を説明するための処理シーケンス図である。図９−Ａ及び図９−Ｂにおいて、機器Ａと機器Ｂとの関係は、上記第１の実施形態と同様である。また、図９−Ａ及び図９−ＢのステップＳ９０１〜Ｓ９０５の処理は、上記図３のステップＳ３０１〜Ｓ３０５の処理と同様である。
【００８７】
機器Ａから公開値Ｘを受信すると（ステップＳ９０５）、機器Ｂは、公開値Ｙの算出にかかる時間Ｔｂ１及び共有鍵Ｋの算出にかかる時間Ｔｂ２を推定し、鍵交換処理のために機器Ｂ側で必要とする演算所要時間Ｔｂ１及びＴｂ２を求める（ステップＳ９０６）。この演算所要時間Ｔｂ１及びＴｂ２は、上記式（８−２）及び式（９−２）に従って、既知の変数ｇ及び変数ｎを用いた事前の試験的な公開値Ｙ及び共有鍵Ｋの算出によって求められる。
Ｔｂ１＝Ｔｉｍｅ＿ｍａｘＹ［ｇ，ｎ］＋α  …（８−２）
Ｔｂ２＝Ｔｉｍｅ＿ｍａｘＫ［ｇ，ｎ］＋α  …（９−２）
【００８８】
そして、機器Ｂは、求めた演算所要時間Ｔｂ１及びＴｂ２を機器Ａに送信して、演算所要時間Ｔｂ１が経過するまでに公開値Ｙを応答すること、及びその応答からさらに演算所要時間Ｔｂ２が経過するまでに共有鍵Ｋの算出が完了することを機器Ａに予告する（ステップＳ９０７）。その後、機器Ｂは、秘密値ｂを生成し、上記式（２）の演算によって公開値Ｙを算出し、算出した公開値Ｙを機器Ａに送信する（ステップＳ９０８、Ｓ９０９、Ｓ９１１）。そして、機器Ｂは、公開値Ｙの送信の後に共有鍵Ｋを算出する（ステップＳ９１２）。
【００８９】
機器Ａは、機器Ｂから演算所要時間Ｔｂ１及びＴｂ２を受信すると（ステップＳ９０７）、機器Ｂからの応答待ち期限（タイムアウト時間）を、この受信から演算所要時間Ｔｂ１が経過した時点に延長して設定する（ステップＳ９１０）。そして、機器Ａは、タイムアウト時間までに機器Ｂから公開値Ｙを受信すると（ステップＳ９１１）、ＤＨ法による公開値の応答と判断し、自分の共有鍵Ｋを生成する（ステップＳ９１３）。
【００９０】
図９−Ａの例は、暗号化データが廃棄される問題に対応した方法である。この方法では、機器Ａは、共有鍵Ｋを生成した後は、公開値Ｙを受信した時点から演算所要時間Ｔｂ２の経過を待って、機器Ｂに暗号化されたデータを送信する（ステップＳ９１４、Ｓ９１５）。この処理により、機器Ｂ側で暗号化データが廃棄されることを回避できる。
図９−Ｂの例は、機器Ａ側で応答待ちがタイムアウトする問題に対応した方法である。この方法では、機器Ａは、共有鍵Ｋを生成した後に何らかのメッセージを送信した後、機器Ｂからの応答待ち期限（タイムアウト時間）を、この送信から演算所要時間Ｔｂ２が経過した時点に延長して設定する（ステップＳ９２４、Ｓ９２５）。この処理により、機器Ａは、機器Ｂから応答メッセージを受信することができる（ステップＳ９２６）。
【００９１】
以上のように、本発明の第７の実施形態に係る共有鍵交換方法によれば、機器Ｂによる共有鍵Ｋの算出が公開値Ｙの送信後に行われるような場合でも、確実に鍵交換処理を成功させることができる。
【００９２】
なお、この第７の実施形態による応用手順は、低性能である機器Ｂによる共有鍵Ｋの算出が公開値Ｙの送信後に行われる手順であれば適用可能である。従って、図９−Ａ及び図９−ＢのステップＳ９０６及びＳ９０７をステップＳ９０１の前に実行してもよいし、それに加えてさらにステップＳ９０８及びＳ９０９をステップＳ９０５の前に実行してもよい。
【００９３】
（第８の実施形態）
上記第１〜第７の実施形態では、機器Ｂ（レスポンダ）側が低性能である場合を説明したが、本第８の実施形態では、鍵交換処理を開始する機器Ａ（イニシエータ）が低性能である場合の共有鍵交換方法を説明する。
【００９４】
図１０−Ａ及び図１０−Ｂは、本発明の第８の実施形態に係る共有鍵交換方法を説明するための処理シーケンス図である。図１０−Ａ及び図１０−Ｂにおいて、機器Ａは、機器Ｂに比べて処理能力が劣っている低性能の機器であるとする。また、機器Ａ（イニシエータ）から鍵交換処理が開始されて、機器Ｂ（レスポンダ）との間で鍵の共有が実現されるものとする。
【００９５】
まず、図１０−Ａにおいて、鍵交換処理を開始すると、機器Ａは、上記式（１）の演算による公開値Ｘの算出にかかる時間Ｔａ１（秘密値ａの生成にかかる時間も含む）を推定し、鍵交換処理のために機器Ａ側で必要とする演算所要時間Ｔａ（＝Ｔａ１）を求める（ステップＳ１００１）。この演算所要時間Ｔａ１は、例えば次のようにして求められる。事前に機器Ａ上で、変数ｇ及び変数ｎの取り得る値の様々な組み合わせによる演算を複数回試験的に実行しておき、その最大値Ｔｉｍｅ＿ｍａｘ＿ａｌｌを保存しておく。そして、次式（１０）のように、この最大値に予め定めておいた固定値αを加えたものを、演算所要時間Ｔａ１として求める。
Ｔａ１＝Ｔｉｍｅ＿ｍａｘ＿ａｌｌ＋α  …（１０）
【００９６】
機器Ａは、求めた演算所要時間Ｔａ１を機器Ｂに送信して、この演算所要時間Ｔａ１が経過するまでに公開値Ｘを送信することを機器Ｂに予告する（ステップＳ１００２）。次に、機器Ａは、変数ｇ及び変数ｎを生成して機器Ｂに通知する（ステップＳ１００３、Ｓ１００４）。これに対して、機器Ｂは、機器Ａから変数ｇ及び変数ｎを取得して了解の応答を返送する（ステップＳ１００５、Ｓ１００６）。機器Ｂから変数ｇ及び変数ｎについて了解の応答を受信すると、機器Ａは、秘密値ａを生成し、上記式（１）の演算によって公開値Ｘを算出し、算出した公開値Ｘを機器Ｂに送信する（ステップＳ１００７、Ｓ１００８、Ｓ１０１０）。
【００９７】
機器Ｂは、機器Ａに変数ｇ及び変数ｎについて了解の応答を送信すると（ステップＳ１００６）、機器Ａからの応答待ち期限（タイムアウト時間）を、この送信から演算所要時間Ｔａ１が経過した時点に延長して設定する（ステップＳ１００９）。すなわち、機器Ｂは、機器Ａから公開値Ｘを受信できなかったという判断を、最大演算所要時間Ｔａが経過するまで待つようにする。そして、機器Ｂは、タイムアウト時間までに機器Ａから公開値Ｘを受信すると（ステップＳ１０１０）、秘密値ｂを生成し、上記式（２）及び式（３）の演算によって公開値Ｙ及び共有鍵Ｋをそれぞれ算出する（ステップＳ１０１１〜Ｓ１０１３）。そして、機器Ｂは、算出した公開値Ｙを機器Ａに送信する（ステップＳ１０１４）。
【００９８】
図１０−Ａの例は、共有鍵Ｋの算出に対してメッセージ送信が発生しない場合を示したものである。この例では、機器Ａは、機器Ｂから公開値Ｙを受信すると（ステップＳ１０１４）、ＤＨ法による公開値の応答と判断する。従って、機器Ａ側でも共有鍵Ｋを正しく計算することができ（ステップＳ１０１５）、機器Ａ及び機器Ｂの両方で鍵交換が成功する。
【００９９】
次に、図１０−Ｂの例は、共有鍵Ｋの算出に対してメッセージ送信が発生する場合を示したものであり、機器Ａが、公開値Ｙの受信後に共有鍵Ｋを時間をかけて生成するような場合に生じる問題に対応させた方法である。すなわち、機器Ｂが、公開値Ｙを送信した後に機器Ａから共有鍵Ｋの算出完了の通知を待っている場合である。
この場合には、機器Ａは、演算所要時間Ｔａ１と同様にして、上記式（４）の演算による共有鍵Ｋの算出にかかる演算所要時間Ｔａ２をさらに推定し（ステップＳ１０２１）、演算所要時間Ｔａ２も機器Ｂに送信しておく（ステップＳ１０２２）。機器Ｂは、公開値Ｙの送信後、機器Ａからの応答待ち期限（タイムアウト時間）を、この送信から演算所要時間Ｔａ２が経過した時点に延長して設定する（ステップＳ１０３４、Ｓ１０３６）。この処理により、機器Ｂは、機器Ａからの共有鍵Ｋの算出完了の応答メッセージを、タイムアウトを生じさせることなく受信することができる（ステップＳ１０３７）。
【０１００】
以上のように、本発明の第８の実施形態に係る共有鍵交換方法によれば、鍵交換処理を開始する機器側が低性能であっても、この機器がまだ鍵交換処理の演算をしている間に対向する機器が応答なしと判断してしまうという従来の課題が生じないため、問題なく鍵交換を成功させることができる。
【０１０１】
なお、この第８の実施形態では、上記第５の実施形態（図７）で示した応用手順に対応させて鍵交換処理を開始する機器側が低性能である場合の手順を説明した。しかし、この手順は、低性能の機器側における公開値Ｘや共有鍵Ｋの算出の前に、対向する機器が演算所要時間を取得できる手順であれば（第６の実施形態等）、同様に適用させることが可能である。
【０１０２】
また、第８の実施形態では、鍵交換処理を開始する機器Ａ（イニシエータ）が低性能である場合の共有鍵交換方法を説明したが、機器Ａ（イニシエータ）及び対向する機器Ｂの両方が低性能であることも考えられ、この場合には、上述した各実施形態を適宜組み合わせて実現することができる。
【０１０３】
（第９の実施形態）
上記第１〜第８の実施形態では、低性能の機器が、演算所要時間という時間情報を対向する機器へ通知し、対向する機器が、通知に応じてタイムアウト時間を延長させる共有鍵交換方法を説明した。次に、本第９の実施形態では、演算所要時間の通知を行わない共有鍵交換方法を説明する。
【０１０４】
図１１は、本発明の第９の実施形態に係る共有鍵交換方法を説明するための処理シーケンス図である。図１１において、機器Ａと機器Ｂとの関係は、上記第１の実施形態と同様である。また、図１１のステップＳ１１０１〜Ｓ１１０５の処理は、上記図３のステップＳ３０１〜Ｓ３０５の処理と同様である。
【０１０５】
機器Ａから公開値Ｘを受信すると（ステップＳ１１０５）、機器Ｂは、後で公開値Ｙを送信することの通知を機器Ａに応答する（ステップＳ１１０６）。この通知の後、機器Ｂは、秘密値ｂの生成を開始して、上記式（２）及び式（３）の演算によって公開値Ｙの算出及び共有鍵Ｋの算出（ステップＳ１１０７〜Ｓ１１０９）を順次実行する。またこの算出と並行して、機器Ｂは、公開値Ｙの算出及び共有鍵Ｋの算出が完了するまで、機器Ａから後述する状況確認／再送要求を受けるたびに上記通知を行う（ステップＳ１１１１、Ｓ１１１３、Ｓ１１１５）。
【０１０６】
機器Ａは、機器Ｂから公開値Ｙを受信するまで（ステップＳ１１１６）、機器Ｂから後で公開値Ｙが送信されることの通知を受けるたびに（ステップＳ１１０６、Ｓ１１１１、Ｓ１１１３、Ｓ１１１５）、所定の再送間隔Ｔ［秒］で状況確認／再送要求を行う（ステップＳ１１１０、Ｓ１１１２、Ｓ１１１４）。具体的には、機器Ａは、再送間隔Ｔ［秒］を所定のタイムアウト時間より短く設定し、機器Ｂから後で公開値Ｙが送信されることの通知を受けると、それまでの時間計測をリセットして新たに時間計測を開始することを行う。このように設定すれば、タイムアウトの発生はなくなる。又は、後で公開値Ｙが送信されることの通知を機器Ｂから一度受けると、機器Ａが、再送間隔Ｔを設定せずに無限に公開値Ｙの受信を待ちつづける処理に切り替えるようにしてもよい。
【０１０７】
そして、機器Ａは、機器Ｂから公開値Ｙを受信すると（ステップＳ１１１６）、ＤＨ法による公開値の応答と判断する。従って、機器Ａ側でも共有鍵Ｋを正しく計算することができ（ステップＳ１１１７）、機器Ａ及び機器Ｂの両方で鍵交換が成功する。
【０１０８】
以上のように、本発明の第９の実施形態に係る共有鍵交換方法によれば、低性能の機器において鍵交換処理に必要な演算所要時間を事前に推定することなく、鍵交換を成功させることができる。
【０１０９】
なお、この第９の実施形態では、上記第１の実施形態による手順に、状況確認／再送要求及び後で公開値Ｙが送信されることの通知を適用させた場合を説明したが、第２〜第８の実施形態による手順に適用させても同様の効果を奏することができる。ここで、第３の実施形態（図５）等のように公開値Ｙの算出後（ステップＳ５０９）に直ちに公開値Ｙを送信する（ステップＳ５１１）場合には、公開値Ｙを受信した機器Ａは、その後機器Ｂに対して、共有鍵Ｋの算出が完了したかどうかの状況確認を行い、これに対して機器Ｂは、共有鍵Ｋの演算中であることを機器Ａに回答すればよい。
【０１１０】
また、図１１のステップＳ１１０５及びＳ１１０６において、送受信の失敗（パケットロス）が起きることもある。よって、機器Ａが、後で公開値Ｙが送信されることの通知（ステップＳ１１０６）を待つことなく、公開値Ｘの送信後（ステップＳ１１０５）に直ちに再送間隔Ｔの時間計測を開始するようにしてもよい。
【０１１１】
なお、上記第１〜第９の実施形態では、ＤＨ法の鍵交換時に使用する演算が、離散対数問題を利用したべき乗演算／モジュロ演算である場合を説明したが、本発明の適用範囲はこの演算に限定されるものではない。例えば、ＤＨ法の変形として、楕円曲線に基づく数学的集合を用いた演算方法を用いてもよい。また、ＤＨ法に関する演算所要時間の推定方法として、事前に計算した結果を保存しておく方法を説明したが、この方法に限定するものではない。例えば、その時点のＣＰＵ使用率を測定し、ＣＰＵ使用率が他のアプリケーション等の実行によって高い場合には、演算所要時間を長く推定してもよい。さらに、複数の機器との間の鍵交換が同時期に集中する可能性がある場合には、複数のＤＨ法の処理がキューに溜まる可能性がある。そのため、ＤＨ法の処理待ちキュー等を設け、処理順番に応じて演算所要時間を長く推定してもよい。
【０１１２】
また、上記第１〜第９の実施形態で説明した処理シーケンスでは、本発明の適用をＤＨ法の演算と公開値のやり取りの部分に限定して説明したが、その他のＤＨ法を利用する鍵交換プロトコル部分に適用してもよい。例えば、図１９で説明したように、ＩＫＥのシーケンスでは２箇所（Ｐｈａｓｅ１、２）でＤＨ法の鍵交換を利用しているが、各実施形態で説明したメッセージを、ＩＫＥのその他のメッセージと連携させて実行してもよい。具体的には、図６のステップＳ６０１及びＳ６０３で行っている演算所要時間Ｔｂの問い合わせ及び通知は、ＩＫＥのＰｈａｓｅ１の各種パラメータの折衝（図１９のステップＳ１９０１）の中で行ってもよい。
【０１１３】
また、上記第１〜第９の実施形態では、高性能である機器が、低性能である機器側から演算所要時間の通知又は後で応答を送信することの通知を受ける場合を説明した。しかし、高性能である機器は、低性能である機器側からこのような通知を受けることなく、低性能である機器からの応答待ち期限（タイムアウト時間）の制御を行うことも可能である。以下に、この方法について説明する。
【０１１４】
この方法では、高性能である機器が、低性能である機器へ所定のメッセージ（公開値の送信等）を送信してから、低性能である機器から応答を受信するまでの時間を計測することを行う。具体例としては、高性能である機器が、低性能である機器へ所定のメッセージを送信するときに、メッセージ送信時刻Ｔ１、低性能である機器を特定する情報（ＩＰアドレス等）、及び処理中の鍵交換の種類を特定する情報（識別ＩＤ等）を、鍵交換情報として記録しておく。その後、高性能である機器が、低性能である機器から応答メッセージを受信したときのメッセージ受信時刻Ｔ２を取得する。高性能である機器は、応答メッセージに含まれる鍵交換情報を抽出して、予め記録しておいた対応する鍵交換情報の時刻Ｔ１を用いて、時間（Ｔ１−Ｔ２）を算出して記録しておく。この時間（Ｔ１−Ｔ２）の算出は、応答メッセージの受信期限を満了した後（タイムアウトして鍵交換が失敗した場合）でも行われる。そして、高性能である機器は、以降に同じ種類の鍵交換処理を実行する場合には、この算出した時間（Ｔ１−Ｔ２）に基づいてタイムアウト時間を設定する。
【０１１５】
なお、この方法では、時間（Ｔ１−Ｔ２）を算出するまでの間は、予め定められているタイムアウト時間のデフォルト値によって交換処理が失敗する場合もあるが、次回から失敗しないようにタイムアウト時間を調整することができる。なお、失敗するのを避けたい場合には、タイムアウト時間のデフォルト値を十分に大きく設定しておけばよい。また、最初に算出した時間（Ｔ１−Ｔ２）を継続して使用してもよいし、鍵交換処理を行う毎に上述した計測を行って更新していってもよい。また、算出した時間（Ｔ１−Ｔ２）を必ず使用する必要がなく、デフォルト値よりも長い場合にだけタイムアウト時間を調整してもよい。さらに、算出した時間（Ｔ１−Ｔ２）がデフォルト値よりも短い場合には、タイムアウト時間を短縮してもよい。
【０１１６】
この方法であると、既存の鍵交換プロトコルとの互換性があるため、１つの通信機器だけに本発明を実装させるだけで（もう一方の通信機器は既存の機器を使っても）、タイムアウトによる鍵交換失敗の問題を防ぐことができる。
【０１１７】
（第１０の実施形態）
以下に説明する第１０及び第１１の実施形態は、上述した第１の課題を解決すると共に第２の課題をも解決するための方法である。本発明では、第２の課題を解決するためにリキー処理（後述する）の開始タイミングを制御することを行っており、鍵交換処理の開始以前に演算所要時間のやり取りが行われる手順（第４の実施形態等）に適用可能である。その中で特徴的な２つの制御形態を、第１０及び第１１の実施形態によって説明する。
【０１１８】
実施形態の説明に先立って、リキー処理の概要を図１２を参照して説明する。
背景技術でも述べたように、同じ共有鍵を長時間にわたって使用すると、その間に共有鍵が第三者によって解読されることが全く無いとは言えない。そこで、これに対応するために、作成する共有鍵に寿命を設定する。そして、現在使用中の共有鍵の寿命が満了になる前に所定のリキー処理によって次の新しい共有鍵を作成し、使用中の共有鍵の寿命が満了する前にこの新しい共有鍵に切り替えることを行う。本第１０の実施形態では、このリキー処理の完了時刻（ｔ＿ｅｎｄ）が、現在使用中の共有鍵の寿命満了時刻（ｅｎｄ）よりも前になるように、リキー処理の開始時刻（ｔ＿ｓｔａｒｔ）を算出し、リキー処理を開始する方法である。なお、本発明を実現するためには、鍵寿命が、リキー処理の開始から完了までに必要な時間（処理手順に応じて、上述した演算所要時間Ｔａ１、Ｔａ２、Ｔｂ１及びＴｂ２のいずれか又は組み合わせで定まる）以上に設定されている必要がある。この鍵寿命の設定は、一般的に図１９の各種パラメータの折衝処理（ステップＳ１９０１）において行われる。
【０１１９】
図１３は、本発明の第１０の実施形態に係る共有鍵交換方法を説明するための処理シーケンス図である。図１３において、機器Ｂは、機器Ａに比べて処理能力が劣っている低性能の機器であるとする。また、機器Ａ（イニシエータ）からリキー処理が開始されて、機器Ｂ（レスポンダ）との間で新たな鍵の共有が実現されるものとする。さらに、機器Ａ及び機器Ｂは、リキー処理を実行する前に、リキー処理の演算に用いられる変数ｇ及び変数ｎの値を予め知っているものとする（ステップＳ１３０６、Ｓ１３０７）。
【０１２０】
リキー処理を開始するにあたり、機器Ａは、まず機器Ｂに対して演算所要時間の問い合わせを行う（ステップＳ１３０１）。これと共に、機器Ａは、公開値Ｘの算出にかかる時間Ｔａ１及び共有鍵Ｋの算出にかかる時間Ｔａ２を推定し、リキー処理のために機器Ａ側で必要とする演算所要時間Ｔａ（Ｔａ１及びＴａ２）を求める（ステップＳ１３０２）。この演算所要時間Ｔｂ１及びＴｂ２は、例えば次のようにして求められる。事前に機器Ａ上で、変数ｇ及び変数ｎの取り得る値の様々な組み合わせによる演算を複数回試験的に実行しておき、公開値Ｘの算出に関する最大値Ｔｉｍｅ＿ｍａｘＸ＿ａｌｌ及び共有鍵Ｋの算出に関する最大値Ｔｉｍｅ＿ｍａｘＫ＿ａｌｌを個別に保存しておく。そして、次式（１１）及び式（１２）のように、これらの最大値に予め定めておいた固定値αを加えたものを、それぞれ演算所要時間Ｔａ１及びＴａ２として求める。
Ｔａ１＝Ｔｉｍｅ＿ｍａｘＸ＿ａｌｌ＋α  …（１１）
Ｔａ２＝Ｔｉｍｅ＿ｍａｘＫ＿ａｌｌ＋α  …（１２）
【０１２１】
一方、機器Ａから問い合わせを受けた機器Ｂは、公開値Ｙの算出にかかる時間Ｔｂ１及び共有鍵Ｋの算出にかかる時間Ｔｂ２を推定し、リキー処理のために機器Ｂ側で必要とする演算所要時間Ｔｂ（Ｔｂ１及びＴｂ２）を求める（ステップＳ１３０３）。この演算所要時間Ｔｂ１及びＴｂ２は、例えば上記式（８−１）及び式（９−１）によって求められる。そして、機器Ｂは、求めた演算所要時間Ｔｂ１及びＴｂ２を機器Ａに送信する（ステップＳ１３０４）。
【０１２２】
機器Ａは、機器Ｂから演算所要時間Ｔｂ１及びＴｂ２を受信すると（ステップＳ１３０４）、演算所要時間Ｔｂ１及びＴｂ２と自分の演算所要時間Ｔａ１及びＴａ２とに基づいて、次式（１３）を満足する任意のリキー処理の開始時刻ｔ＿ｓｔａｒｔを算定する（ステップＳ１３０５）。
ｔ＿ｓｔａｒｔ＜ｅｎｄ−（Ｔａ１＋Ｔａ２＋Ｔｂ１＋Ｔｂ２）−α  …（１３）
【０１２３】
ここで、ｅｎｄは、現在使用中の共有鍵の寿命満了時刻であり、一般的には機器Ａと機器Ｂと同じ時刻に設定される。しかし、この時刻が異なることがまれにあり、その場合には機器Ａにおける鍵の寿命満了時刻ｔ＿ｅｎｄＡと、機器Ｂにおける鍵の寿命満了時刻ｔ＿ｅｎｄＢとの差の絶対値分（｜ｔ＿ｅｎｄＢ−ｔ＿ｅｎｄＡ｜）だけ計算値に余裕を加えればよい。一般的には、秘密値、公開値及び共有鍵の演算に要する時間の数倍から１０倍以上の時間を鍵寿命に設定する場合が多いので、ほとんど問題は生じない。
【０１２４】
このため、機器Ａは、演算所要時間の問い合わせを、ステップＳ１３０１〜Ｓ１３０５の処理に必要な時間（ｔ＿ＡＢ）を見込んで早めに開始しなければならないことになる。これを実現するためには、現在の共有鍵を生成した直後に、ステップＳ１３０１〜Ｓ１３０５を実行して、次のリキー処理の開始時刻ｔ＿ｓｔａｒｔを予め算定しておけばよい。そして、時刻（ｔ＿ｓｔａｒｔ−ｔ＿ＡＢ）が来たら、ステップＳ１３０１〜Ｓ１３０５を再度実行して、その時の最新の演算所要時間を問い合わせて、開始時刻ｔ＿ｓｔａｒｔを算定し直すようにしてもよい。
【０１２５】
機器Ａは、算定された開始時刻ｔ＿ｓｔａｒｔが来るとリキー処理を開始する。まず、機器Ａは、秘密値ａを生成し、上記式（１）の演算によって公開値Ｘを算出し、算出した公開値Ｘを機器Ｂに送信する（ステップＳ１３０８〜Ｓ１３１０）。一方、機器Ｂは、機器Ａから公開値Ｘを受信すると、秘密値ｂを生成し、上記式（２）及び式（３）の演算によって公開値Ｙを算出及び新たな共有鍵Ｋを算出する（ステップＳ１３１１〜Ｓ１３１３）。そして、機器Ｂは、算出した公開値Ｙを機器Ａに送信する（ステップＳ１３１５）。
【０１２６】
機器Ａは、機器Ｂから受信した演算所要時間Ｔｂに基づいて、機器Ｂからの応答待ち期限（タイムアウト時間）を、公開値Ｘの送信から演算所要時間Ｔｂ（＝Ｔｂ１＋Ｔｂ２）が経過した時点に延長して設定する（ステップＳ１３１４）。そして、機器Ａは、タイムアウト時間までに機器Ｂから公開値Ｙを受信すると（ステップＳ１３１５）、ＤＨ法による公開値の応答と判断する。従って、機器Ａ側でも新たな共有鍵Ｋを正しく計算することができ（ステップＳ１３１６）、現在使用中の共有鍵の寿命が満了になる前（ｔ＿ｅｎｄ）に、機器Ａ及び機器Ｂの両方で新たな鍵交換、すなわちリキー処理が成功する。これ以降は、この新しい共有鍵Ｋが使用される。
【０１２７】
以上のように、本発明の第１０の実施形態に係る共有鍵交換方法によれば、各機器において鍵交換処理に必要な演算所要時間を事前に推定し、一方の機器がこの推定値に基づいてリキー処理の開始時刻を算定する。これにより、現在使用中の共有鍵の寿命が満了になる前に、リキー処理を成功させることができる。
【０１２８】
なお、演算所要時間Ｔａ１による公開値Ｘの演算（ステップＳ１３０８、Ｓ１３０９）と演算所要時間Ｔｂ１による公開値Ｙの演算（ステップＳ１３１１、Ｓ１３１２）とが並列的に行われる場合には、上記式（１３）に代えて次式（１４）を用いることができる。なお、ＭＡＸ（Ｔａ１、Ｔｂ１）は、Ｔａ１とＴｂ１の大きい方の値を示す。
ｔ＿ｓｔａｒｔ＜ｅｎｄ−ＭＡＸ（Ｔａ１、Ｔｂ１）
−（Ｔａ２＋Ｔｂ２）−α  …（１４）
【０１２９】
また、演算所要時間Ｔａ２による共有鍵Ｋの演算（ステップＳ１３１６）と演算所要時間Ｔｂ２による共有鍵Ｋの演算（ステップＳ１３１３）とが並列的に行われる場合には、上記式（１３）に代えて次式（１５）を用いることができる。なお、ＭＡＸ（Ｔａ２、Ｔｂ２）は、Ｔａ２とＴｂ２の大きい方の値を示す。
ｔ＿ｓｔａｒｔ＜ｅｎｄ−（Ｔａ１＋Ｔｂ１）
−ＭＡＸ（Ｔａ２、Ｔｂ２）−α  …（１５）
【０１３０】
また、上記公開値の演算と共有鍵の演算との両方が並列的に行われる場合には、次式（１６）を用いることができる。
ｔ＿ｓｔａｒｔ＜ｅｎｄ−ＭＡＸ（Ｔａ１、Ｔｂ１）
−ＭＡＸ（Ｔａ２、Ｔｂ２）−α  …（１６）
【０１３１】
（第１１の実施形態）
図１４は、本発明の第１１の実施形態に係る共有鍵交換方法を説明するための処理シーケンス図である。図１４において、機器Ｂは、機器Ａに比べて処理能力が劣っている低性能の機器であるとする。この第１１の実施形態では、それぞれの機器が自分の演算所要時間だけに基づいて、リキー処理の開始時刻ｔ＿ｓｔａｒｔを推定する。従って、低性能の機器が、結果的にリキー処理のイニシエータになる。
【０１３２】
機器Ａは、公開値Ｘの算出にかかる時間Ｔａ１及び共有鍵Ｋの算出にかかる時間Ｔａ２を推定し、リキー処理のために機器Ａ側で必要とする演算所要時間Ｔａ（Ｔａ１及びＴａ２）を求める（ステップＳ１４０１）。この演算所要時間Ｔａ１及びＴａ２は、例えば上記式（１１）及び式（１２）によって求められる。また、機器Ｂは、公開値Ｙの算出にかかる時間Ｔｂ１及び共有鍵Ｋの算出にかかる時間Ｔｂ２を推定し、リキー処理のために機器Ｂ側で必要とする演算所要時間Ｔｂ（Ｔｂ１及びＴｂ２）を求める（ステップＳ１４０２）。この演算所要時間Ｔｂ１及びＴｂ２は、例えば上記式（８−１）及び式（９−１）によって求められる。
【０１３３】
機器Ａは、推定した演算所要時間Ｔａ１及びＴａ２に基づいて、次式（１７）を満足する任意のリキー処理の開始時刻ｔ＿ｓｔａｒｔＡを算定する（ステップＳ１４０３）。また、機器Ｂは、推定した演算所要時間Ｔｂ１及びＴｂ２に基づいて、次式（１８）を満足する任意のリキー処理の開始時刻ｔ＿ｓｔａｒｔＢを算定する（ステップＳ１４０４）。この式（１７）及び式（１８）では、対応する機器が同一の性能である場合を仮定しており、各式の右辺において演算所要時間をそれぞれ２倍にしている。なお、上述したように鍵の寿命満了時刻が機器Ａと機器Ｂとで異なる場合には、式（１７）及び式（１８）の「ｅｎｄ」をそれぞれ「ｅｎｄ＿Ａ」及び「ｅｎｄ＿Ｂ」として演算すればよい。
ｔ＿ｓｔａｒｔＡ＜ｅｎｄ−（Ｔａ１＋Ｔａ２）×２−α  …（１７）
ｔ＿ｓｔａｒｔＢ＜ｅｎｄ−（Ｔｂ１＋Ｔｂ２）×２−α  …（１８）
【０１３４】
この例では、機器Ｂが機器Ａよりも低性能であるので、通常上記式（１７）の右辺よりも式（１８）の右辺の方が早い時間となる。従って、この場合、開始時刻ｔ＿ｓｔａｒｔＢが来ると、機器Ｂによってリキー処理が開始される。機器Ｂは、変数ｇ及び変数ｎを生成して機器Ａに通知し、リキー処理を開始したことを宣言する（ステップＳ１４０５、Ｓ１４０６）。この宣言によって、機器Ａは、算定した自分のリキー処理の開始時刻ｔ＿ｓｔａｒｔＡに拘束されることなく各処理ステップを行うこととなる。機器Ａは、機器Ｂから変数ｇ及び変数ｎを取得して了解の応答を返送する（ステップＳ１４０７、Ｓ１４０８）。機器Ａから変数ｇ及び変数ｎについて了解の応答を受信すると、機器Ｂは、秘密値ｂを生成し、上記式（２）の演算によって公開値Ｙを算出し、算出した公開値Ｙを機器Ａに送信する（ステップＳ１４０７、Ｓ１４０８、Ｓ１４１０）。なお、新たな変数ｇ及び変数ｎを使用しない（前の数値を使用する）場合は、リキー処理開始の通知とその了解の応答を行うだけでよい。
【０１３５】
機器Ａは、機器Ｂに変数ｇ及び変数ｎについて了解の応答を送信すると（ステップＳ１４０８）、機器Ｂからの応答待ち期限（タイムアウト時間）を、この送信から演算所要時間Ｔｂ１が経過した時点に延長して設定する（ステップＳ１４１１）。そして、機器Ａは、タイムアウト時間までに機器Ｂから公開値Ｙを受信すると（ステップＳ１４１２）、秘密値ａを生成し、上記式（１）及び式（４）の演算によって公開値Ｘ及び共有鍵Ｋを算出し、算出した公開値Ｘを機器Ｂに送信する（ステップＳ１４１１〜Ｓ１４１４）。
【０１３６】
機器Ｂは、機器Ａから公開値Ｘを受信すると、ＤＨ法による公開値の応答と判断する。従って、機器Ｂ側でも共有鍵Ｋを正しく計算することができ（ステップＳ１４１５）、現在使用中の共有鍵の寿命が満了になる前に、機器Ａ及び機器Ｂの両方で新たな鍵交換、すなわちリキー処理が成功する。これ以降は、この新しい共有鍵Ｋが使用される。
【０１３７】
以上のように、本発明の第１１の実施形態に係る共有鍵交換方法によれば、各機器において鍵交換処理に必要な演算所要時間を事前に推定し、各々の機器がこの推定値に基づいてリキー処理の開始時刻を算定して、開始時刻が早い機器が処理を開始する。これにより、お互いに対向する機器の演算所要時間を知ることなく、現在使用中の共有鍵の寿命が満了になる前に、リキー処理を成功させることができる。
【０１３８】
なお、演算所要時間の推定は、機器Ａ及び機器Ｂにおいて現在使用中又は過去に使用した鍵交換処理時に行った処理時間、又はＣＰＵ負荷値を所定の記憶部（図２のデータベース部２０３）にそれぞれ記憶しておき、その数値に基づいて行ってもよい。また、演算所要時間は、図１４のステップＳ１４０１及びＳ１４０２の推定処理時における機器Ａ及び機器Ｂの各ＣＰＵ負荷値と、上記処理時間又はＣＰＵ負荷値とから推定してもよい。
【０１３９】
なお、これまで鍵の寿命が時間の単位で規定されることを前提に説明してきたが、時間以外の単位で鍵の寿命を規定するシステムもある。例えば、鍵を使って暗号化したパケットのバイト数（累積数）の上限を設け、バイト数単位で鍵の寿命を規定するシステムである。この場合、寿命満了時刻をバイト数から推定し、上述した処理によってリキー処理の開始時刻を決定できる。具体的には、過去の履歴から、単位時間当たりの暗号通信パケットの送受信バイト数を求め、鍵の寿命のバイト数分だけ送受信にかかる時間を求め、寿命満了時刻として推定する。
【０１４０】
（第１２の実施形態）
以下に説明する第１２の実施形態は、上述した第１及び第２の課題を解決すると共に第３の課題をも解決するための方法である。本発明では、第３の課題を解決するために、リキー処理の場合に限り、時間がかかる演算処理を負荷分散させることを行う。本発明は、上記第１０及び第１１の実施形態と同様に、鍵交換処理の開始以前に演算所要時間のやり取りが行われる手順に適用可能である。本第１２の実施形態では、代表的な制御形態を説明する。
【０１４１】
まず、第１２の実施形態で行う制御の概念を説明する。上記解決しようとする課題において、ネット家電のように低性能の機器で、ＤＨ法等の高負荷な演算処理を実行すると、他のアプリケーションの実行に影響を与えると述べた。しかし、これはＤＨ法の演算処理を連続させて行う場合の話であり、実際の鍵交換処理は、常に連続実行させて最短時間で完了させる必要はない。具体的には、パケット通信を行う端末の要請等により鍵を新規に交換する場合には、鍵交換の遅延時間が端末のアプリケーションでの遅延としてユーザに知覚されてしまうので、できるだけ早く鍵交換を完了させる必要がある。一方、一旦鍵を交換した後で定期的に鍵を更新するリキー処理の場合は、現在の鍵を使用した通信を行いながら新しい鍵の交換を行うので、寿命満了までに完了すれば、鍵交換処理の開始から完了までの時間は長くてもよい。このことから、第１２の実施形態では、鍵交換処理を最短時間で完了させるべきか否かを判定し、最短時間による処理が必要とされないリキー処理の場合は、高負荷の処理を小単位に分けて実行し、時間的に負荷分散させることを行う。
【０１４２】
図１５は、本発明の第１２の実施形態に係る共有鍵交換方法を説明するための処理シーケンス図である。図１５において、機器Ｂは、機器Ａに比べて処理能力が劣っている低性能の機器であるとする。また、機器Ａ（イニシエータ）から鍵交換処理が開始されて、機器Ｂ（レスポンダ）との間で鍵の共有が実現されるものとする。さらに、機器Ａ及び機器Ｂは、鍵交換処理を実行する前に、鍵交換処理の演算に用いられる変数ｇ及び変数ｎの値を予め知っているものとする（ステップＳ１５０６、Ｓ１５０７）。
【０１４３】
まず、低性能である機器Ｂでは、事前に、ＤＨ法の公開値Ｙ及び共有鍵Ｋの演算に伴う全処理を、複数の均等な処理単位（以下、小処理単位と呼ぶ）に分けておく。さらに、所定の単位時間に１小処理単位を実行した時のＣＰＵ使用率（Ｕｃｐｕ）を実測した結果を記録しておくものとする。また、機器Ｂが行うべき全ての小処理単位の数をＴｏｔａｌとする。さらに、機器Ａと機器Ｂとの間で現在共有している鍵の寿命が、時刻ｅｎｄで満了することが分かっているものとする。
【０１４４】
図１５において、機器Ａは、機器Ｂに鍵更新時の演算所要時間を問い合わせる（ステップＳ１５０１）。この問い合わせのタイミングは、時刻ｅｎｄから十分余裕を持ったタイミングで行うのが好ましく、新たに鍵交換処理を開始する時点でもよいし、鍵交換が完了した定常状態中であってもよい。機器Ｂは、機器Ａから演算所要時間の問い合わせを受けると、その時点における他のアプリケーションの平均的なＣＰＵ使用率（Ａｃｐｕ）を測定する。そして、機器Ｂは、他のアプリケーションの処理を維持したまま、ＤＨ法の演算に使用できる残りのＣＰＵ使用率（Ｄｃｐｕ）、及び単位時間に実行可能な小処理単位の数ｎｕｍを推定し、次式（１９）〜式（２１）の演算によって演算所要時間Ｔｂｂを求める（ステップＳ１５０３）。
Ｄｃｐｕ＝１００−Ａｃｐｕ  …（１９）
ｎｕｍ＝Ｄｃｐｕ／Ｕｃｐｕ  …（２０）
Ｔｂｂ＝Ｔｏｔａｌ×Ｕｃｐｕ／Ｄｃｐｕ＋α  …（２１）
機器Ｂは、求めた演算所要時間Ｔｂｂを、機器Ａに送信する（ステップＳ１５０４）。
【０１４５】
一方、機器Ａ側でも、上記式（１９）〜式（２１）の演算に準じて、自分のＤＨ法に伴う演算所要時間Ｔａａを求めておく（ステップＳ１５０２）。そして、機器Ａは、機器Ｂから演算所要時間Ｔｂｂを受信すると、演算所要時間Ｔｂｂと演算所要時間Ｔａａとに基づいて、次式（２２）を満足する鍵交換処理の開始時刻ｔ＿ｓｔａｒｔを算定する（ステップＳ１５０５）。
ｔ＿ｓｔａｒｔ＜ｅｎｄ−（Ｔａａ＋Ｔｂｂ）  …（２２）
この算出が終わると、機器Ａは、開始時刻ｔ＿ｓｔａｒｔが到来するまで待機し、到来した時点で秘密値ａを生成し、上記式（１）の演算によって公開値Ｘを算出し、算出した公開値Ｘを機器Ｂに送信する（ステップＳ１５０８〜Ｓ１５１０）。
【０１４６】
機器Ｂは、機器Ａから公開値Ｘを受信すると、その公開値Ｘに基づいてすでに存在する鍵の更新が要されているのか、新規に鍵を作成することが要求されているのかを判定する（ステップＳ１５１１）。具体的には、機器Ｂは、鍵の情報を記憶してデータベース（図２中のデータベース部２０３に対応）を検索し、対応する鍵が存在する場合は「更新」、存在しない場合は「新規作成」と判定する。この処理は、機器Ｂ側の判定部によって行われる（図２−Ｂを参照）。機器Ｂは、判定結果に応じて以後のＤＨ法の演算の実行方法を変える。すなわち、鍵の「新規作成」と判定された場合には、機器Ｂとしての最短の時間で実行し、「鍵の更新」と判定された場合には、機器Ａに通知した演算所要時間Ｔｂｂの時間をかけてゆっくり処理する。図１５の処理シーケンスでは、要求が「鍵の更新」と判定された場合を示しており、機器Ｂは、単位時間当たりに、Ｄｃｐｕ／Ｕｃｐｕ個の小処理単位を実行し、演算所要時間Ｔｂｂの時間をかけて公開値Ｙを算出し、機器Ａに送信する（ステップＳ１５１２〜１５１４）。
【０１４７】
一方、機器Ａは、機器Ｂからの応答待ち期限（タイムアウト時間）を、公開値Ｘの送信から演算所要時間Ｔｂｂが経過した時点に延長して設定する（ステップＳ１５１５）。そして、機器Ａは、タイムアウト時間までに機器Ｂから公開値Ｙを受信すると（ステップＳ１５１６）、上記式（４）の演算によって新たな共有鍵Ｋを算出する（ステップＳ１５１７）。
【０１４８】
以上のように、本発明の第１２の実施形態によれば、鍵交換処理を最短時間で完了させるべきか否かを判定し、最短で完了させる必要がない鍵更新のような処理に限定して、鍵交換処理に伴う高負荷の演算を時間的に負荷分散させる。これにより、低性能の機器でも、鍵交換の処理が長期間にわたってＣＰＵを占有することがなくなり、同じＣＰＵ上で動作する他のアプリケーションも正しく動作できるようになる。さらに、高負荷の演算を時間的に負荷分散する際に鍵の寿命を考慮することで、鍵交換の処理遅延時間が通常より長くなっても、現在行っている暗号化／認証処理等による通信を問題なく継続できる。なお、対向する機器への応答として公開値を送信するまでの遅延時間が長くなるが、鍵更新のように鍵交換の処理遅延の長さがユーザのパケット送受信に影響を与えないので、特に問題とはならない。
【０１４９】
なお、一例として、機器Ｂにおいて、ＤＨ法の演算に必要なＣＰＵの処理量がＩｍ＝２００ＭＩ（ＭＩ＝メガインストラクション）であり、複数の均等な処理単位、すなわち小処理単位として２ＭＩに分ける場合、Ｔｏｔａｌの値は１００（処理単位）である。機器ＢのＣＰＵの処理能力が１００ＭＩＰＳ（ＭＩＰＳ＝ＭＩ／秒）の場合、小処理単位の２ＭＩを単位時間の間に実行する時のＣＰＵ使用率Ｕｃｐｕは、２％である。機器ＢのＣＰＵの処理能力を他のアプリケーションに５０ＭＩＰＳだけ使用する場合、残りＣＰＵ使用率Ｄｃｐｕは、５０％である。従って、単位時間に実行可能なＤＨ法の処理単位数Ｄｃｐｕ／Ｕｃｐｕは、２５（処理単位／秒）である。よって、Ｔｏｔａｌ×Ｕｃｐｕ／Ｄｃｐｕは、１００／２５＝４秒になる。２０％の揺らぎなどの余裕を見込めば、遅延時間は、４．８秒とすればよい。
【０１５０】
また、処理の負荷分散を効率よく行える方法を以下に説明する。
この方法では、鍵交換が終了したら、機器Ａ及び機器Ｂは、可能な限り速やかに次の鍵更新処理に入る。まず、機器Ｂは、ＣＰＵ使用量Ｉｍの推定を行う（ステップＳ１５０３）。ＣＰＵ使用量Ｉｍは、例えば、機器Ｂが実施した鍵の作成処理の実行命令数（単位：ＭＩ）で表すことができる。前回のＣＰＵ使用量Ｉｍを記憶しておいて、その値を使用してもよい。機器Ａは、現在時刻から鍵の寿命満了時刻（ｅｎｄ）までの残り時間から演算所要時間Ｔａａを差し引いた時間ＴＷｂを求め（ステップＳ１５０５）、これを機器Ｂへの割り当て時間ＴＷｂとして公開値Ｘと共に機器Ｂに通知する（ステップＳ１５１０）。機器Ｂは、単位時間当たりのＣＰＵ使用率（Ｉｍ／ＴＷｂ＋β）をＣＰＵに割り当てて（ステップＳ１５１１）、秘密値ｂの生成、公開値Ｙの演算及び共有鍵Ｋの演算を行う（ステップＳ１５１２〜Ｓ１５１４）。βは、処理の揺らぎや前後に必要な処理を行うための余裕分である。一般的に、時間ＴＷｂを大きくすれば、単位時間当たりのＣＰＵ使用率（Ｉｍ／ＴＷｂ＋β）を、１００％より十分小さい値にすることができる。そうすれば、残ったＣＰＵ使用率の部分を、鍵交換処理以外のアプリケーションに割り振る余裕ができる。演算所要時間Ｔｂｂの代わりに、機器Ｂ用の割り当て時間ＴＷｂ＋αが、タイムアウト待ち時間として設定される。この場合、ステップＳ１５０１は不要になる。
【０１５１】
このようにすれば、機器Ｂにおいて、鍵交換処理に割く単位時間当たりのＣＰＵ処理量を常に低くできるので、他のアプリケーションに回せるＣＰＵ処理量を多めに確保しておける。また、上記単位時間当たりのＣＰＵ使用率（Ｉｍ／ＴＷｂ＋β）を割り当ての最小量とし、他のアプリケーションの生起が少なくてＣＰＵ処理能力に余裕がある時間帯には、より大きいＣＰＵ使用率を割り当てて、早めに鍵交換処理を進めるようにしてもよい。
【０１５２】
また、図１５の手順が、機器Ａと機器Ｂとで公開値の演算及び共有鍵の演算が並列的に行われる手順になっても、上述と同様に処理の負荷分散を効率よく行うことができる。この場合には、機器Ｂが、ＣＰＵ使用量Ｉｍの推定を行い、現在時刻から鍵の寿命満了時刻までの残り時間ＴＹｂを算出し、単位時間当たりのＣＰＵ使用率（Ｉｍ／ＴＹｂ＋β）をＣＰＵに割り当てる。そして、機器Ｂが秘密値ｂの生成、公開値Ｙの演算及び共有鍵Ｋの演算を行う。一般的に、残り時間ＴＹｂを大きくすれば、単位時間当たりのＣＰＵ使用率（Ｉｍ／ＴＹｂ＋β）を、１００％より十分小さい値にすることができる。そうすれば、残ったＣＰＵ使用率の部分を、鍵交換処理以外のアプリケーションに割り振る余裕ができる。一方、機器Ａは、自分のＣＰＵ使用量の推定を行う。前回のＣＰＵ使用量は、機器ＡにおいてもＩｍである。機器Ａは、現在時刻から鍵の寿命満了時刻までの残り時間ＴＹａを算出し、単位時間当たりのＣＰＵ使用率（Ｉｍ／ＴＹａ＋β）をＣＰＵに割り当てる。そして、機器Ａは、秘密値ａの生成、公開値Ｘの演算及び共有鍵Ｋの演算を行う。なお、機器ＡにおけるＣＰＵ使用量が、機器Ｂの場合とは異なる場合には、機器ＡにおけるＣＰＵ使用量を用いればよい。
【０１５３】
なお、機器Ａ及び機器Ｂの演算進行速度がほぼ同じになるので、公開値Ｘの通知及び公開値Ｙの通知は、ほぼ同じ時刻に行われることになる。よって、機器ＢのＣＰＵ処理能力が低くても、機器Ｂの共有鍵Ｋの演算完了が、鍵の寿命満了時刻に間に合うことになる。
【０１５４】
（その他の応用実施形態）
上記第１〜第１２で説明した実施形態は、暗号化／認証処理を施したデータを送受信する２つの通信機器の間で共有鍵を交換する場合の共有鍵交換方法について説明した。特に、ＤＨ法の方法やＩＫＥの方法に特化して説明したが、相手の機器から受信した公開値と自分が生成した秘密値とに基づいて共有鍵を計算することができるものであれば、ＤＨ法やＩＫＥ以外の共有鍵交換方法に対しても適用可能である。
【０１５５】
例えば、図１６に示すような、セッション共有鍵（又はセッション共有鍵を交換するための情報）を公開鍵で暗号化して配布するような場合である。この場合、機器Ｂ（ユーザ側）が低性能であると、ステップＳ１６０７（網掛け部分）で行われる処理の時間が長くなり、機器Ａ（鍵発行局側）で応答受信がタイムアウトする可能性がある。従って、この場合には、例えば、機器Ｂが、ステップＳ１６０３を実行するまでに公開鍵暗号処理にかかる演算所要時間を機器Ａに通知するか、ステップＳ１６０３の後に公開鍵による暗号化データの送信が遅れる旨を通知すればよい。
【０１５６】
また、図１７に示すような、鍵管理センタを経由させて機器Ａ及び機器Ｂに鍵を配布するような場合である。この場合、図１７のステップＳ１７０２〜Ｓ１７０５、Ｓ１７１３、Ｓ１７１５、Ｓ１７１６及びＳ１７１８（網掛け部分）の処理において処理の時間が長くなり、対向する機器で応答受信がタイムアウトする可能性がある。従って、この場合には、各機器が、該当するステップを実行するまでにその処理にかかる演算所要時間又は処理が遅れる旨を通知すればよい。
【０１５７】
さらに、上記各実施形態では、本発明のタイムアウト時間の遅延制御を、高い負荷がかかる処理として鍵交換処理を一例に説明したが、鍵交換処理に伴うデジタル署名による認証や公開暗号鍵を利用した認証等にも適用させることができる。これらに応用した場合にも、認証処理において演算に時間がかかり応答が遅れる処理のタイムアウト時間を、予め求めた演算所要時間に基づいて延長することができる。
【０１５８】
典型的には、上記各実施形態で説明した共有鍵交換方法は、記憶装置（ＲＯＭ、ＲＡＭ、ハードディスク等）に格納された上述した処理手順を実行可能な所定のプログラムデータが、ＣＰＵによって解釈実行されることで実現される。この場合、プログラムデータは、記録媒体を介して記憶装置内に導入されてもよいし、記録媒体上から直接実行されてもよい。なお、この記録媒体は、ＲＯＭ、ＲＡＭ、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ、メモリカード、ハードディスク等の記録媒体を言う。また、記憶媒体は、電話回線や搬送路等の通信媒体も含む概念である。
【０１５９】
以下の方法及び装置は、特許請求の範囲として明示的にクレームはしていないが、上述の記載内容から導き出せる方法及び装置である。
【０１６０】
方法１．前記他方の通信機器が、
前記所定の演算にかかる演算所要時間を推定する推定ステップと、
前記推定した演算所要時間を前記一方の通信機器へ送信する時間送信ステップとをさらに備え、
前記一方の通信機器が、前記演算所要時間を前記他方の通信機器から受信する受信ステップをさらに備えることを特徴とする、請求項２〜５に記載の共有鍵交換方法。
方法２．前記一方の通信機器が、前記他方の通信機器に前記演算所要時間の問い合わせを行うステップをさらに備え、
前記他方の通信機器が、前記一方の通信機器からの問い合わせに応じて、前記推定ステップ及び前記時間送信ステップを実行することを特徴とする、方法１に記載の共有鍵交換方法。
方法３．前記他方の通信機器が、推定する前記演算所要時間を事前に保存していることを特徴とする、方法１に記載の共有鍵交換方法。
方法４．前記事前に保存している前記演算所要時間は、過去の前記所定の演算にかかった最大時間であることを特徴とする、方法３に記載の共有鍵交換方法。
方法５．前記他方の通信機器が、次の応答タイミングまでに応答が遅れる内容の通知を、前記一方の通信機器に少なくとも１回送信するステップをさらに備え、
前記一方の通信機器は、前記他方の通信機器から前記通知を受信するステップをさらに備え、前記設定ステップで、前記通知に基づいて前記応答待ちの期限を設定することを特徴とする、請求項２〜５に記載の共有鍵交換方法。
方法６．前記一方の通信機器が、メッセージを送信してから前記他方の通信機器より前記所定の演算後の応答を受信するまでの時間を計測して、前記所定の演算にかかる時間を取得することを特徴とする、請求項２〜５に記載の共有鍵交換方法。
装置１．前記取得部は、
自己の公開値を算出して相手の通信機器に送信する公開値算出部と、
相手の通信機器から相手の公開値を受信して、当該相手の公開値に基づいて共有鍵を算出する共有鍵算出部とを含み、
前記設定部が、相手の通信機器において前記公開値の算出までにかかる時間又は前記共有鍵の算出までにかかる時間の少なくともいずれかに基づいて、前記応答待ちの期限を設定することを特徴とする、請求項１９に記載の通信機器。
装置２．前記取得部は、共有鍵を算出する共有鍵算出部を含み、
前記情報送信部が、前記共有鍵算出部で算出した共有鍵又はその共有鍵を生成するための情報に、所定の暗号化を施して相手の通信機器へ送信し、
前記設定部が、相手の通信機器において前記暗号化された共有鍵の復号にかかる時間、又は前記暗号化された共有鍵を生成するための情報の復号及び共有鍵の生成にかかる時間に基づいて、前記応答待ちの期限を設定することを特徴とする、請求項１９に記載の通信機器。
装置３．任意のメッセージを送信した後、暗号化された共有鍵又は共有鍵を生成するための情報を相手の通信機器から受信する場合、前記設定部が、相手の通信機器において共有鍵又は共有鍵を生成するための情報の暗号化にかかる時間に基づいて、前記応答待ちの期限を設定することを特徴とする、請求項１９に記載の通信機器。
装置４．認証のためのデジタル署名がされたデータを相手の通信機器へ送信する場合、前記設定部が、相手の通信機器においてデジタル署名がされたデータに従って本人性認証処理にかかる時間に基づいて、前記応答待ちの期限を設定することを特徴とする、請求項１９に記載の通信機器。
装置５．認証のための公開鍵暗号を利用したデータを相手の通信機器へ送信する場合、前記設定部が、相手の通信機器において公開鍵暗号を利用したデータに従った本人性認証処理にかかる時間に基づいて、前記応答待ちの期限を設定することを特徴とする、請求項１９に記載の通信機器。
装置６．前記設定部は、相手の通信機器から受信する前記所定の演算にかかる時間を推定した演算所要時間に基づいて、前記所定の演算にかかる時間を取得することを特徴とする、請求項１９に記載の通信機器。
装置７．相手の通信機器に前記次の応答タイミングまでに行う所定の演算にかかる時間の問い合わせを行う問い合わせ送信部をさらに備える、請求項１９に記載の通信機器。
装置８．前記時間送信部は、相手の通信機器からの問い合わせに応じて、前記演算所要時間を送信することを特徴とする、請求項２７及び２８に記載の通信機器。
装置９．推定する前記演算所要時間を事前に保存していることを特徴とする、請求項２７及び２８に記載の通信機器。
装置１０．前記事前に保存している前記演算所要時間は、過去の前記所定の演算にかかった最大時間であることを特徴とする、装置９に記載の通信機器。
装置１１．前記設定部は、メッセージを送信してから相手の通信機器より前記所定の演算後の応答を受信するまでの時間を計測して、前記所定の演算にかかる時間を取得することを特徴とする、請求項１９に記載の通信機器。
装置１２．相手の通信機器において、次の応答タイミングまでに前記公開値及び前記共有鍵の算出が実行される場合、
前記設定部が、相手の通信機器が前記公開値及び前記共有鍵を算出するまでにかかる合計時間に基づいて、前記公開値の送信又は前記共有鍵の算出完了に関する応答待ちの期限を設定することを特徴とする、請求項２０に記載の通信機器。
装置１３．相手の通信機器において、次の応答タイミングまでに前記公開値の算出が実行される場合、
前記設定部が、相手の通信機器が前記公開値を算出するまでにかかる時間に基づいて、前記公開値の送信又は前記共有鍵の算出完了に関する応答待ちの期限を設定することを特徴とする、請求項２０に記載の通信機器。
装置１４．相手の通信機器において、次の応答タイミングまでに前記共有鍵の算出が実行される場合、
前記設定部が、相手の通信機器が前記共有鍵を算出するまでにかかる時間に基づいて、前記公開値の送信又は前記共有鍵の算出完了に関する応答待ちの期限を設定することを特徴とする、請求項２０に記載の通信機器。
装置１５．前記共有鍵の算出完了後に完了通知を相手の通信機器に送信する完了送信部と、
相手の通信機器から前記完了通知を受けるまで、鍵交換処理失敗の判断を行わない完了受信部とをさらに備えることを特徴とする、請求項２０に記載の通信機器。
【０１６１】
方法Ａ−１．暗号化／改ざん認証処理が施されたデータを送受信するために、２つの通信機器間で行われる共有鍵を交換する共有鍵交換方法であって、
各々の通信機器が、
共有鍵を算出するために行う所定の演算にかかる演算所要時間を推定する推定ステップと、
相手の通信機器との間で共有鍵の交換を完了すべき時刻までに共有鍵の交換処理を完了させるための処理開始時刻を、前記演算所要時間に基づいて算定する算定ステップとを備え、
いずれか一方の通信機器が、前記処理開始時刻に鍵交換処理を開始する開始ステップをさらに備えることを特徴とする、共有鍵交換方法。
方法Ａ−２．他方の通信機器が、前記推定ステップで推定した前記演算所要時間を、前記一方の通信機器へ送信する時間送信ステップをさらに備え、
前記一方の通信機器が、前記他方の通信機器から前記演算所要時間を受信するステップをさらに備え、前記算定ステップにおいて自己の前記演算所要時間と前記他方の通信機器の演算所要時間とに基づいて、前記処理開始時刻を算定することを特徴とする、方法Ａ−１に記載の共有鍵交換方法。
方法Ａ−３．前記一方の通信機器が、前記他方の通信機器に前記演算所要時間の問い合わせを行うステップをさらに備え、
前記他方の通信機器が、前記一方の通信機器からの問い合わせに応じて、前記推定ステップ及び前記時間送信ステップを実行することを特徴とする、方法Ａ−２に記載の共有鍵交換方法。
方法Ａ−４．前記算定ステップで算定した処理開始時刻が早い方の通信機器が、その処理開始時刻に前記開始ステップを実行することを特徴とする、方法Ａ−１に記載の共有鍵交換方法。
方法Ａ−５．前記通信機器が、共有鍵の算出が新規であるか更新であるかを判定する判定ステップをさらに備え、前記更新である場合には、前記共有鍵を算出するために行う所定の演算が所定の小単位に分割されて時間的に負荷分散されることを特徴とする、方法Ａ−１〜Ａ−４のいずれかに記載の共有鍵交換方法。
方法Ａ−６．前記負荷分散は、前記共有鍵を算出するために行う所定の演算にかかる時間が長い方の通信機器が実行することを特徴とする、方法Ａ−５に記載の共有鍵交換方法。
方法Ａ−７．前記推定ステップは、共有鍵を算出するために自機器が行う所定の演算にかかる実時間の２倍の時間を前記演算所要時間として推定することを特徴とする、方法Ａ−１に記載の共有鍵交換方法。
装置Ａ−１．暗号化／改ざん認証処理が施されたデータを送受信するために、対向する相手の通信機器との間で共有鍵を交換する通信機器であって、
共有鍵を算出するために行う所定の演算にかかる演算所要時間を推定する推定部と、
相手の通信機器との間で共有鍵の交換を完了すべき時刻までに共有鍵の交換処理を完了させるための処理開始時刻を、前記演算所要時間に基づいて算定する算定部と、
前記処理開始時刻に鍵交換処理を開始する処理部とを備えることを特徴とする、通信機器。
装置Ａ−２．相手の通信機器から前記演算所要時間を受信する受信部をさらに備え、
前記算定部が、自己の前記演算所要時間と相手の通信機器の演算所要時間とに基づいて、前記処理開始時刻を算定することを特徴とする、装置Ａ−１に記載の通信機器。
装置Ａ−３．前記推定部で推定した前記演算所要時間を、相手の通信機器へ送信する時間送信部をさらに備えることを特徴とする、装置Ａ−１に記載の通信機器。
装置Ａ−４．相手の通信機器に前記演算所要時間の問い合わせを行う問い合わせ部をさらに備えることを特徴とする、装置Ａ−２に記載の通信機器。
装置Ａ−５．相手の通信機器からの問い合わせに応じて、前記演算所要時間を相手の通信機器に送信することを特徴とする、装置Ａ−３に記載の通信機器。
装置Ａ−６．前記処理部は、算定した処理開始時刻が相手の通信機器の処理開始時刻よりも早い場合に、鍵交換処理を開始することを特徴とする、装置Ａ−１に記載の通信機器。
装置Ａ−７．共有鍵の算出が新規であるか更新であるかを判定する判定部をさらに備え、
更新である場合には、前記共有鍵を算出するために行う所定の演算が所定の小単位に分割されて時間的に負荷分散されることを特徴とする、装置Ａ−１に記載の通信機器。
装置Ａ−８．前記負荷分散は、前記共有鍵を算出するために行う所定の演算にかかる時間が長い場合に実行されることを特徴とする、装置Ａ−７に記載の通信機器。
【産業上の利用可能性】
【０１６２】
本発明の共有鍵交換方法は、ネットワークを介して秘匿性の高いデータを送受信する通信機器間等に利用可能であり、特に暗号化／認証用の秘密鍵を交換及び共有する場合等に有用である。
【図面の簡単な説明】
【０１６３】
【図１−Ａ】本発明の共有鍵交換方法が適用されるネットワーク構成の一例を示す図
【図１−Ｂ】本発明の共有鍵交換方法が適用されるネットワーク構成の一例を示す図
【図２−Ａ】本発明の共有鍵交換方法が実装される機器の機能ブロックの一例を示す図
【図２−Ｂ】図２−Ａの共有鍵交換部の詳細な構成の一例を示すブロック図
【図３】本発明の第１の実施形態に係る共有鍵交換方法を説明する処理シーケンス図
【図４】本発明の第２の実施形態に係る共有鍵交換方法を説明する処理シーケンス図
【図５】本発明の第３の実施形態に係る共有鍵交換方法を説明する処理シーケンス図
【図６】本発明の第４の実施形態に係る共有鍵交換方法を説明する処理シーケンス図
【図７】本発明の第５の実施形態に係る共有鍵交換方法を説明する処理シーケンス図
【図８−Ａ】本発明の第６の実施形態に係る共有鍵交換方法を説明する処理シーケンス図
【図８−Ｂ】本発明の第６の実施形態に係る共有鍵交換方法を説明する他の処理シーケンス図
【図９−Ａ】本発明の第７の実施形態に係る共有鍵交換方法を説明する処理シーケンス図
【図９−Ｂ】本発明の第７の実施形態に係る共有鍵交換方法を説明する他の処理シーケンス図
【図１０−Ａ】本発明の第８の実施形態に係る共有鍵交換方法を説明する処理シーケンス図
【図１０−Ｂ】本発明の第８の実施形態に係る共有鍵交換方法を説明する他の処理シーケンス図
【図１１】本発明の第９の実施形態に係る共有鍵交換方法を説明する処理シーケンス図
【図１２】本発明の第１０及び第１１の実施形態における鍵更新処理（リキー処理）のタイムチャートを示す図
【図１３】本発明の第１０の実施形態に係る共有鍵交換方法を説明する処理シーケンス図
【図１４】本発明の第１１の実施形態に係る共有鍵交換方法を説明する処理シーケンス図
【図１５】本発明の第１２の実施形態に係る共有鍵交換方法を説明する処理シーケンス図
【図１６】本発明の共有鍵交換方法を鍵交換以外の通信形態に適用させた場合の処理シーケンス図
【図１７】本発明の共有鍵交換方法を鍵交換以外の通信形態に適用させた場合の処理シーケンス図
【図１８】従来の基本的な共有鍵交換方法（ＤＨ法）を説明する処理シーケンス図
【図１９】ＲＦＣ２４０７〜２４０９で開示されているＩＫＥの処理手順の概要を示すシーケンス図
【図２０】従来の共有鍵交換方法の問題点を説明するための図
【符号の説明】
【０１６４】
１０１、１０２  ＧＷ型機器
１０３〜１０６  端末
１０７  公衆網
１０８、１０９  ＬＡＮ
１１０、１１１  ホスト型機器
２０１  共有鍵交換部
２０２  データベース（ＤＢ）管理部
２０３  データベース（ＤＢ）部
２０４  暗号化／認証処理部
２０５、２０６  通信プロトコル処理部
２０７  ＬＡＮインタフェース（Ｉ／Ｆ）
２０８  ＷＡＮインタフェース（Ｉ／Ｆ）
【図１−Ａ】
2004248270.tif 000003
【図１−Ｂ】
2004248270.tif 000004
【図２−Ａ】
2004248270.tif 000005
【図２−Ｂ】
2004248270.tif 000006
【図３】
2004248270.tif 000007
【図４】
2004248270.tif 000008
【図５】
2004248270.tif 000009
【図６】
2004248270.tif 000010
【図７】
2004248270.tif 000011
【図８−Ａ】
2004248270.tif 000012
【図８−Ｂ】
2004248270.tif 000013
【図９−Ａ】
2004248270.tif 000014
【図９−Ｂ】
2004248270.tif 000015
【図１０−Ａ】
2004248270.tif 000016
【図１０−Ｂ】
2004248270.tif 000017
【図１１】
2004248270.tif 000018
【図１２】
2004248270.tif 000019
【図１３】
2004248270.tif 000020
【図１４】
2004248270.tif 000021
【図１５】
2004248270.tif 000022
【図１６】
2004248270.tif 000023
【図１７】
2004248270.tif 000024
【図１８】
2004248270.tif 000025
【図１９】
2004248270.tif 000026
【図２０】
2004248270.tif 000027