(57)【要約】【課題】  安全性を確保しつつ、少ない処理負荷で鍵交換を可能にする鍵交換方法、及び、鍵交換処理装置を提供する。【解決手段】  鍵交換処理置１０の乱数生成部１−６が種から乱数を生成する。一方向性ハッシュ関数部１−８が、生成された乱数で示される回数分、ハッシュ関数により繰返し演算を行うことにより、種から鍵を算出する。鍵交換部１−２が、算出された鍵を他の鍵交換処理装置と交換する。【選択図】  図１
2006121215.tif 000002
【特許請求の範囲】
【請求項１】
２つの鍵交換処理装置間で暗号化通信を行うための鍵を交換する鍵交換方法において、
前記２つの鍵交換処理装置が、乱数生成の基となるデータである種から乱数を生成する乱数生成ステップと、
前記２つの鍵交換処理装置が、前記乱数生成ステップにおいて生成された乱数で示される回数分ハッシュ関数による繰返し演算を行うことにより、前記種から鍵を算出する一方向性ハッシュ関数ステップと、
前記２つの鍵交換処理装置同士が、前記一方向性ハッシュ関数ステップにおいて算出された鍵を交換する鍵交換ステップと
を有することを特徴とする鍵交換方法。
【請求項２】
前記鍵交換ステップにおいて交換された鍵同士の値が等しい場合に、前記乱数生成ステップから前記鍵交換ステップまでの処理を所定回数繰り返すことを特徴とする
請求項１に記載の鍵交換方法。
【請求項３】
前記鍵交換ステップにおいて交換された鍵同士の値が等しい場合に、該交換された鍵のハッシュ関数による演算前の値を前記２つの鍵交換処理装置間における共通鍵として用いることを特徴とする
請求項１又は２に記載の鍵交換方法。
【請求項４】
前記一方向性ハッシュ関数ステップにおける処理を繰り返す場合に、
今回使用する種から鍵を算出する代わりに、今回使用する種と、前回算出された鍵のハッシュ関数による演算前の値と、を結合したメッセージから鍵を算出することを特徴とする
請求項２又は３に記載の鍵交換方法。
【請求項５】
他の装置と暗号化通信を行うための鍵を交換する鍵交換処理装置において、
乱数生成の基となるデータである種を複数保持するパラメータ保持手段と、
前記パラメータ保持手段により保持されている複数の種の中から１つの種を選択する種選択手段と、
前記種選択手段により選択された種から乱数を生成する乱数生成手段と、
前記乱数生成手段により生成された乱数で示される回数分ハッシュ関数による繰返し演算を行うことにより、前記種から鍵を算出する一方向性ハッシュ関数手段と、
前記一方向性ハッシュ関数手段により算出された鍵を他の装置と交換する鍵交換手段と
を備えることを特徴とする鍵交換処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化通信を行うための鍵を交換する鍵交換方法、及び、鍵交換処理装置に関する。
【背景技術】
【０００２】
第三者に知られることなく、安全に２者間、もしくはそれ以上の間で安全な通信を行うために、データを暗号化して伝送されることがよく行われる。その時に利用される暗号技術として現在広く利用されている方法を大きく分類すると、共通鍵暗号方式と、公開鍵暗号方式との２通りが存在する。
公開鍵暗号方式は、各端末により秘密に保持され、かつ、データを暗号化するための秘密鍵と、暗号化されたデータを復号化ための公開鍵とを用いた暗号化方式である（例えば、特許文献１参照）。一方、共通鍵暗号方式は、共通鍵と呼ばれる２者間でのみ共有しているデータをもとに、秘密にしたいデータを第三者に分からないデータに変換する方式である。この共通鍵暗号方式は、公開鍵暗号方式に比べ、一般的に暗号化スピードが速いという長所がある。このため、今後の伝送路の高速化に対応するためにも、通常のトラフィックデータに対する暗号化方式として共通鍵暗号方式を採用するのが適している。ところが、暗号化を行う時に最も重要なパラメータである共通鍵は第三者に知られてはならず、かつ、トラフィックデータの通信を開始する以前に何らかの安全な手段で共有しておかなくてはならない。これを解決する手段として、Ｄ−Ｈ（Ｄｉｆｆｉｅ−Ｈｅｌｌｍａｎ）鍵交換方式（Diffe,W.and Hellman M.E.::New directions is cryptography, IEEE Trans.on Inform.Theory,Vol.I T‐22,No.6,pp.644‐654,1976）が提案されている。
【０００３】
端末Ｔｘと端末Ｔｙの間で鍵を共有する場合、次のようにして鍵を共有する。まず、大きな素数Ｐと任意数Ａを２者間で共有しておく。このＰとＡは秘密ではなく、第三者にしられてもよい。次に、端末Ｔｘと端末Ｔｙの双方がそれぞれ、任意数ｘ及びｙを選択する。これらの値から、端末Ｔｘ、端末Ｔｙの双方で、次式により公開情報ＸとＹを計算する（ａ（ｍｏｄ  ｂ）は、ａをｂで割った余りを表す。以下、このような表記を行う）。
端末Ｔｘ  ：Ｘ＝Ａｘ（ｍｏｄ  Ｐ）
端末Ｔｙ  ：Ｙ＝Ａｙ（ｍｏｄ  Ｐ）
【０００４】
次に、このＸとＹの値を、それぞれの通信相手に送信し、次式によりＫｘｙ、Ｋｙｘを計算する。
端末Ｔｘ  ：Ｋｘｙ＝Ｙｘ（ｍｏｄ  Ｐ）
端末Ｔｙ  ：Ｋｙｘ＝Ｘｙ（ｍｏｄ  Ｐ）
この二つの値は、次式よりＫｘｙ＝Ｋｙｘとなることが分かり、共有秘密情報として扱うことができ、共通鍵等に使用することが可能となる。
Ｋｘｙ＝Ｙｘ（ｍｏｄ  Ｐ）
Ｋｙｘ＝Ｘｙ（ｍｏｄ  Ｐ）
【０００５】
上記のように、秘密情報ｘ及びｙを、計算により求められた公開情報Ｘ及びＹから求めることは、計算量的に非常に困難である。これは一般的に離散対数問題と呼ばれる。
離散対数問題とは、ｐを素数として、ａ＜ｐなるａと正整数ｘに対し、ｙ＝ａxｍｏｄ  ｐなるｘを求めることが不可能に近い関数問題のことをいう。この離散対数問題は一方向性関数の一つである。一方向性関数とは、関数ｆと、当該関数ｆにｘを代入して算出された値ｙとが与えられていた場合に、ｘを求めることが困難な関数ｆのことをいう。
【０００６】
さらに、秘密情報ｘ及びｙのサイズとして、通常数１００ビット程度〜２０００ビット程度を使用するため、鍵の総当り攻撃にも強い。しかしながら、近年計算機の性能の向上により、鍵を推定するために必要な処理時間が短縮されつつある。したがって、共通鍵を推定されることを防ぐために、あるタイミングで新たな共通鍵に変更するといったことがよく行われる。図５には、従来の鍵管理システムの構成を示す。従来の鍵管理システムでは、鍵管理サーバが各端末の鍵管理を行い、定期的にインターネットを介して鍵を各機器に配信し、各端末の鍵を変更していた。また、保守管理サーバが端末機器を監視し、鍵が破られたときに鍵管理サーバは迅速に鍵の交換を行っていた。このような中央集権的なシステムは維持管理費用が発生し、商品売買等の利益追求型ビジネスモデル（ＢｔｏＣ（Business to Consumer））にしか利用できない。しかし、今後ＩＰｖ６環境でのネットワークが進展してくるとＣｔｏＣ（Consumer to Consumer）型のＮＰＯ（非営利団体）型モデルが発展すると考えられる。このような場合には鍵管理サーバが運営するビジネスモデルは考えられず、端末同士で鍵交換を行うシステムとなる。
【特許文献１】特開２００３−１２４９２７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ＩＰｖ６環境下での組込機器の鍵管理に関しては、解決しなければならない問題点が多い。一例をあげると、組込機器がＩＰｖ６環境下での暗号通信のための標準プロトコルであるＩＰＳｅｃ（Internet Protocol Security）を用いる際には、ＳＡ（Security Association）の確立及び通信相手の認証にＩＫＥ（internet key exchange）プロトコルを利用している。ＲＦＣ（Request For Comments）では、ＩＫＥにおける通信相手の認証に関しては、事前共有鍵方式、デジタル署名認証方式、公開鍵暗号化方式、改良公開鍵暗号方式の４種類が規定されているが、現状では事前共有鍵方式のみが利用されている。このＩＫＥにおいては、定期的に端末間の共通鍵を変更する必要があるが、このときの交換方法としてＤ−Ｈ鍵交換方式が使用されている。Ｄ−Ｈ鍵交換方式においては多倍長剰余演算を行う必要があるため、ＣＰＵ処理能力の低い組込機器が２０４８ビット長の離散対数を処理するのは実現性がない。このように、多倍長剰余演算であるＤ−Ｈ鍵交換方式の組み込み機器への導入は、コストパフォーマンスの上からは略不可能である。
【０００８】
また、一般的な８ビットＣＰＵを有する装置においてＤ−Ｈ鍵交換方式を用いた場合、鍵交換に４５０秒程度の処理時間が報告されている。ＣＰＵ処理能力の低い装置においても、処理負荷をかけずに安全に鍵交換を行う仕組みが必要となる。
この発明は上記の問題点を解決するためになされたものであり、安全性を確保しつつ、少ない処理負荷で鍵交換を可能にする鍵交換方法、及び、鍵交換処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、請求項１に記載の発明は、２つの鍵交換処理装置間で暗号化通信を行うための鍵を交換する鍵交換方法において、前記２つの鍵交換処理装置が、乱数生成の基となるデータである種から乱数を生成する乱数生成ステップと、前記２つの鍵交換処理装置が、前記乱数生成ステップにおいて生成された乱数で示される回数分ハッシュ関数による繰返し演算を行うことにより、前記種から鍵を算出する一方向性ハッシュ関数ステップと、前記２つの鍵交換処理装置同士が、前記一方向性ハッシュ関数ステップにおいて算出された鍵を交換する鍵交換ステップとを有することを特徴とする鍵交換方法を提供する。
この方法によれば、鍵交換処理装置は、多倍長演算を行う必要のないハッシュ関数を用いて、乱数で示される回数分演算を行うことにより鍵を算出するため、安全性を確保しつつ、少ない処理負荷で鍵交換を行うことができる。
【００１０】
請求項２に記載の発明は、請求項１に記載の鍵交換方法において、前記鍵交換ステップにおいて交換された鍵同士の値が等しい場合に、前記乱数生成ステップから前記鍵交換ステップまでの処理を所定回数繰り返すことを特徴とする。
この方法によれば、ハッシュ関数により算出された鍵をさらにハッシュ関数を用いて複数回演算を行うことにより、第三者に種や共通鍵を推定されることがより困難となり、安全性を高めることができる。
【００１１】
請求項３に記載の発明は、請求項１又は２に記載の鍵交換方法において、前記鍵交換ステップにおいて交換された鍵同士の値が等しい場合に、該交換された鍵のハッシュ関数による演算前の値を前記２つの鍵交換処理装置間における共通鍵として用いることを特徴とする。
この方法によれば、２つの鍵交換処理装置間で交換した鍵を直接共通鍵として使用しないことで、鍵交換時に鍵を第三者に傍受された場合の安全性を高めることができる。
【００１２】
請求項４に記載の発明は、請求項２又は３に記載の鍵交換方法において、前記一方向性ハッシュ関数ステップにおける処理を繰り返す場合に、今回使用する種から鍵を算出する代わりに、今回使用する種と、前回算出された鍵のハッシュ関数による演算前の値と、を結合したメッセージから鍵を算出することを特徴とする。
この方法によれば、演算が複雑となるため、第三者に種や共通鍵を容易に推定されることがなくなり、安全性を高めることができる。
【００１３】
請求項５に記載の発明は、他の装置と暗号化通信を行うための鍵を交換する鍵交換処理装置において、乱数生成の基となるデータである種を複数保持するパラメータ保持手段と、前記パラメータ保持手段により保持されている複数の種の中から１つの種を選択する種選択手段と、前記種選択手段により選択された種から乱数を生成する乱数生成手段と、前記乱数生成手段により生成された乱数で示される回数分ハッシュ関数による繰返し演算を行うことにより、前記種から鍵を算出する一方向性ハッシュ関数手段と、前記一方向性ハッシュ関数手段により算出された鍵を他の装置と交換する鍵交換手段とを備えることを特徴とする鍵交換処理装置を提供する。
この構成によれば、鍵交換処理装置は、多倍長演算を行う必要のないハッシュ関数を用いて、乱数で示される回数分演算を行うことにより鍵を算出するため、安全性を確保しつつ、少ない処理負荷で高速に鍵交換を行うことができる。
【発明の効果】
【００１４】
このように本発明によれば、鍵交換処理装置は、多倍長演算を行う必要のないハッシュ関数を用いて、乱数で示される回数分演算を行うことにより鍵を算出するため、安全性を確保しつつ、少ない処理負荷で鍵交換を行うことができる。
【発明を実施するための最良の形態】
【００１５】
以下、図を参照して、発明の実施の形態について説明する。
図１は、本発明の実施の形態に係る鍵交換処理装置１の構成を示すブロック図である。同図に示すように、鍵交換処理装置１は、ＣＰＵ処理制御部１−１と、鍵交換部１−２と、暗号化／復号化処理部１−３と、通信処理部１−４と、種選択部１−５と、乱数生成部１−６と、パラメータ保持部１−７と、一方向性ハッシュ関数部１−８と、通信インターフェース（Ｉ／Ｆ）回路１−９とを含んで構成されている。鍵交換処理装置１は、比較的ＣＰＵ処理能力の低い組込機器であり、例えば、携帯電話機、ＰＤＡ（Personal Digital Assistance）、ＩＣカード等が含まれる。
【００１６】
ＣＰＵ処理制御部１−１は、ＣＰＵ（Central Processing Unit）で構成され、鍵交換処理装置１全体の制御を行う。パラメータ保持部１−７は、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）等のデータを記憶する記憶媒体で構成され、乱数生成の基となるデータである複数の種（シード）や、相手の鍵交換処理装置１のアドレスと対応する共有秘密情報及び共通鍵を保持する。
【００１７】
種選択部１−５は、パラメータ保持部１−７に保持されている複数の種の中から、乱数生成用の種を選択する。種を選択する方法としては、例えば、２つの鍵交換処理装置１の間において事前に通信を行うことにより、使用する種と、当該種を使用する順番とをあらかじめ取り決めておく方法がある。また、他の方法としては、パラメータ保持部１−７に保持されている複数の種のうちの最大値と、所定の乱数値との２進数の論理和の値を種とする方法がある。
乱数生成部１−６は、パラメータ保持部１−７に保持されている種に基づいて、鍵交換処理に必要となる任意数を生成する。このときに乱数生成部１−６は、あらかじめＲＯＭに記憶されている擬似乱数生成用の関数を用いて擬似乱数を生成する。ここで、擬似乱数とは、基になる種の値によって生成される乱数の値が一定となる乱数のことである。
【００１８】
一方向性ハッシュ関数部１−８は、あらかじめＲＯＭに記憶されているハッシュ関数を用いて演算を行う。具体的には、一方向性ハッシュ関数部１−８は、１回目の鍵交換で交換する鍵を生成する際には、乱数生成部１−６により生成された乱数で示される回数分、ハッシュ関数により繰返し演算を行うことにより、種から鍵を算出する。すなわち、一方向性ハッシュ関数部１−８は、種をハッシュ関数に代入してハッシュ値を算出し、当該算出されたハッシュ値を再度ハッシュ関数に代入して次のハッシュ値を算出する、といったハッシュ値を算出する処理を、乱数回数分繰り返す。
【００１９】
また、一方向性ハッシュ関数部１−８は、２回目の繰返し以降に鍵を算出する際には、１回目のように今回使用する種から鍵を算出する代わりに、今回使用する種と、前回算出された鍵のハッシュ関数による１回の演算前の値と、を結合したデータから鍵を算出する。
鍵の「ハッシュ関数による１回の演算前の値」とは、鍵を１回ハッシュ関数で逆算した値、すなわち、当該鍵を算出するためにハッシュ関数による演算が実施された回数よりも、１回少なくハッシュ関数による演算が実施されて算出された値のことである。一方向性ハッシュ関数部１−８は、演算の履歴をＲＡＭに記憶しておくことで、当該値を容易に取得することができる。
【００２０】
具体的な数式で示すと、鍵の交換回数をｎ（ｎは２以上の整数）回とした場合、一方向性ハッシュ関数部１−８は、以下の式を用いてｉ（１≦ｉ≦ｎ、ｉは整数）回目の鍵の値を算出する。
Ｋｉ＝ＨNi（Ｓｉ）                              （ｉ＝１の場合）
Ｋｉ＝ＨNi（ＨN(i-1)-1（Ｓ（ｉ−１））、Ｓｉ）    （２≦ｉ≦ｎの場合）
（Ｋｉ：ｉ回目に算出される鍵、Ｓｉ：ｉ回目に使用される種、Ｎｉ：ｉ回目に使用される乱数値、Ｈ（ｘ）：ハッシュ関数、ＨNi（ｘ）：ハッシュ関数によるＮｉ回の繰返し演算、Ｈ（ｘ、ｙ）：ｘとｙとを結合したメッセージのハッシュ関数代入による演算）
【００２１】
なお、鍵交換処理装置１は、ｎ回目に一方向性ハッシュ関数部１−８が交換した鍵同士の値が等しい場合には、当該交換された鍵のハッシュ関数による１回の演算前の値を２つの鍵交換処理装置１の間における共通鍵として用いる。当該共通鍵は以下の式で表される。
Ｋｎ-1＝ＨNn-1（ＨN(n-1)-1（Ｓ（ｎ−１））、Ｓｎ）
（Ｋｎ-1：Ｋｎのハッシュ関数による１回の演算前の値）
【００２２】
ここで、ハッシュ関数とは、オリジナルのメッセージを、一般的にそれよりも短い固定長のハッシュ値（メッセージダイジェスト）に変換する関数である。ハッシュ関数によってオリジナルのメッセージはデータ量の少ないハッシュ値に変換されるため、鍵交換処理装置１が当該算出されたハッシュ値を用いて各種処理を行う場合に処理負荷を軽減することができる。代表的なハッシュ関数としては、ＳＨＡ−１、ＭＤ−５が存在する。
【００２３】
ハッシュ関数とは一方向性関数の一種である。一方向性関数とは、図２に示すように、ハッシュ関数による演算でＨn-1からＨnを算出することは簡単であるが、ＨnをＨn-1へ戻すことが困難な関数である。
鍵交換部１−２は、一方向性ハッシュ関数部１−８により算出された鍵を、他の鍵交換処理装置１と交換する。
暗号／復号化処理部１−３は、共通鍵を用いたデータの暗号化／復号化処理を行う。通信処理部１−４は、送信パケットの構築や受信パケットの解析を行う。
【００２４】
（第１動作例）
次に、図３を参照しながら、鍵交換処理装置１ａと鍵交換処理装置１ｂとの間で行われる鍵交換方法の動作例を説明する。
ここでは、あらかじめ乱数生成用の種として種Ｓ１、種Ｓ２の２つが用意され、各鍵交換処理装置１ａ、１ｂのパラメータ保持部１−７に保持されているものとする。また、本動作例における鍵交換の回数を２回とする。また、鍵交換処理装置１ａと鍵交換処理装置１ｂとは同じ動作を行うため、以下の説明においては、鍵交換処理装置１ａ，１ｂの両方の機能部の動作を説明しているものとする。
【００２５】
まず、１回目の鍵交換処理においては、種選択部１−５は、種Ｓ１を鍵交換処理装置１ａ，１ｂ間で利用することに取り決める。乱数生成部１−６は、種Ｓ１に基づいて乱数Ｎ１をお互いに発生させる（ステップＳ１１）。
次に、一方向性ハッシュ関数部１−８は、関数ＨN1を用いて種Ｓ１から鍵Ｋ１を生成する（ステップＳ１２）。具体的には、一方向性ハッシュ関数部１−８は、ハッシュ関数を用いて種Ｓ１からハッシュ値を算出し、さらに、ハッシュ関数を用いて当該算出されたハッシュ値から新たなハッシュ値を算出する、というハッシュ関数による繰返し演算を、乱数Ｎ１で示される数値回数分行うことにより、鍵Ｋ１を算出する。
【００２６】
鍵交換部１−２は、算出された鍵Ｋ１を鍵交換処理装置１ａ，１ｂの間で交換する（ステップＳ１３）。交換された鍵Ｋ１同士の値が同じであれば、２回目に進む。
２回目の鍵交換処理においては、種選択部１−５は、種Ｓ２を２回目に使用する種として選択する。乱数生成部１−６は、種Ｓ２から乱数Ｎ２を生成する（ステップＳ１４）。
次に、一方向性ハッシュ関数部１−８は、鍵Ｋ１のハッシュ関数による１回の演算前の値ＨN1-1（Ｓ１）と種Ｓ２とを結合したメッセージ（ＨN1-1（Ｓ１）、Ｓ２）を生成する。一方向性ハッシュ関数部１−８は、関数ＨN2にメッセージ（ＨN1-1（Ｓ１）、Ｓ２）を代入することにより鍵Ｋ２を算出する（ステップＳ１５）。具体的には、一方向性ハッシュ関数部１−８は、乱数Ｎ２で示される数値回数分ハッシュ関数による演算を実施することにより、メッセージ（ＨN1-1（Ｓ１）、Ｓ２）から鍵Ｋ２を算出する。
【００２７】
鍵交換部１−２は、算出した鍵Ｋ２を鍵交換処理装置１ａ，１ｂの間で交換する（ステップＳ１６）。
交換した鍵Ｋ２同士の値が同じであれば、鍵交換処理装置１ａ，１ｂは、鍵Ｋ２のハッシュ関数による１回の演算前の値、すなわち、鍵Ｋ２より１回少なくハッシュ関数による演算が実施された値Ｋ２‐1を互いの共通鍵として利用する（ステップＳ１７）。
【００２８】
この方式は、種Ｓ１，Ｓ２が悪意の第三者に知られなければ、一方向性ハッシュ関数が多倍長演算を行う必要がなく処理負荷が少ないことと、可逆性の困難さとにより、装置１ａ，１ｂ間の鍵共有を高速かつ安全に行うことを可能とする。
なお、本動作例においては、説明を簡単にするため、種をＳ１とＳ２との２種類としていることより、生成可能な鍵は種類であるため実用的ではない。
【００２９】
（第２動作例）
次に図４を参照しながら、第２動作例に係る鍵交換方法を説明する。本動作例は、実用的な例であり、鍵交換処理装置１ａ，１ｂのパラメータ保持部１−７は、乱数生成用の種を数千〜数万種記憶している。その種の最小値がＳ１であり最大値がＳｎであるものとする。また、本動作例における鍵の交換回数は２回であるものとする。
【００３０】
まず、本動作例における１回目のデータ交換処理においては、鍵交換処理装置１ａからある毎回変る不確定情報に基く乱数シード（種）を鍵交換処理装置１ｂへ送信する(ステップＳ２１)。乱数生成部１−６は、乱数シードに基づいて乱数Ｎ１を生成する（ステップＳ２２）。種選択部１−５は、あらかじめパラメータ保持部１−７に記憶している種のテーブルの最大値Ｓｎと乱数Ｎ１とで２進数の論理和（ＡＮＤ）を取ることにより、パラメータ保持部１−７から種Ｓ１と種Ｓｎとの間の種Ｓｘを選択する（ステップＳ２３）。
【００３１】
２回目のデータ交換処理においては、乱数生成部１−６が、種Ｓｘから乱数Ｎ２を生成する（ステップＳ２４）。一方向性ハッシュ関数部１−８は、種Ｓｘをメッセージとして、ハッシュ関数による演算を乱数Ｎ１が示す数値回数分実施することにより、種Ｓｘから鍵Ｋ１を算出する（ステップＳ２５）。
鍵交換部１−２は、鍵Ｋ１を鍵交換処理装置１ａ，１ｂの間で交換し（ステップＳ２６）、鍵Ｋ１同士の値が同じであれば３回目へ進む。
【００３２】
３回目のデータ交換処理においては、種選択部１−５は、種の最大値Ｓｎと乱数Ｎ２とで２進数の論理和（ＡＮＤ）を取ることにより、パラメータ保持部１−７から種Ｓｙを選択する（ステップＳ２７）。次に、乱数生成部１−６は、種Ｓｙから乱数Ｎ３を生成する（ステップＳ２８）。
次に、一方向性ハッシュ関数部１−８は、鍵Ｋ１のハッシュ関数による１回の演算前の値ＨN2-1（Ｓｘ）と、種Ｓｙとを結合したメッセージを生成する。一方向性ハッシュ関数部１−８は、結合したメッセージ（ＨN2-1（Ｓｘ）、Ｓｙ）を関数ＨN3に代入して鍵Ｋ２を算出する(ステップＳ２９)。具体的には、一方向性ハッシュ関数部１−８は、乱数Ｎ３で示される数値回数分ハッシュ関数による演算を実施することにより、メッセージ（ＨN2-1（Ｓｘ）、Ｓｙ）から鍵Ｋ２を算出する。
【００３３】
鍵交換部１−２は、鍵Ｋ２を鍵交換処理装置１ａ，１ｂの間で交換する（ステップＳ３０）。交換した鍵Ｋ２同士の値が同じである場合には、鍵交換処理装置１ａ，１ｂは、鍵Ｋ２のハッシュ関数による１回の演算前の値Ｋ２-1を互いの共通鍵として利用する（ステップＳ３１）。
このように、鍵交換処理装置１ａ，１ｂは、Ｄ−Ｈ方式のように多倍長剰余演算を行う必要のないハッシュ関数を用いて、乱数で示される回数分演算を行うことにより鍵を算出するため、安全性を確保しつつ、少ない処理負荷で鍵交換を行うことができる。このような鍵交換方式を用いた場合には、従来のＤ‐Ｈ方式による処理時間に対し約１００００倍程度処理時間を短縮することができ、鍵交換の高速化を実現することができる。特に、組込機器におけるＣＰＵのパフォーマンスは著しく能力的に制限されており、鍵生成や鍵交換処理をハードウェアによって実現する場合にはコストアップとなるが、本発明においてはソフトウェアにより実現することができる。
【００３４】
なお、上述した動作例においては鍵の交換回数を２回として説明したが、これに限定されることはなく、３回以上鍵交換を行っても構わない。多くの回数鍵交換を行うほど、ハッシュ関数により演算される回数が増えるため、処理負荷は増加するが安全性を高めることができる。
また、上述した実施形態においては、２回目の鍵交換のための鍵Ｋ２を算出するための関数を１回目と異なる関数としたが、２回目においても１回目と同一の関数を用いて鍵を算出してもよい。しかしながら、２回目において、例えば、図３のステップＳ１５に示すように、種Ｓ２のみを関数ＨN2に代入して演算を行うよりも、メッセージ（ＨN1-1（Ｓ１）、Ｓ２）を関数ＨN2に代入して演算を行った方が、メッセージがハッシュ関数により演算される回数が増加し演算が複雑となるため、安全性を高めることができる。
【００３５】
また、図３に示す動作例では、メッセージを結合する際に、２回目に使用する種Ｓ２に対して、１回目に算出した鍵Ｋ１の、ハッシュ関数による１回の演算前の値であるＨN1-1（Ｓ１）を結合したが、１回の演算前の値に限定されず、例えば、乱数Ｎ１が３以上である場合には２回前でもよいし、乱数Ｎ１が偶数の場合には乱数値の１／２回前の値でも構わない。
【００３６】
また、図３に示す動作例では、鍵Ｋ２のハッシュ関数による１回の演算前の値であるＫ２-1を共通鍵としたが、これに限定されず、鍵Ｋ２交換時に鍵Ｋ２が第三者に傍受された場合の対策として、第三者が鍵Ｋ２から予測することが不可能な値を共通鍵とすればよい。例えば、乱数Ｎ２が２以上の場合には、共通鍵を鍵Ｋ２のハッシュ関数による２回の演算前の値Ｋ２-2としても構わない。また、鍵Ｋ２交換時に鍵Ｋ２が傍受される可能性が低い場合には、鍵Ｋ２をそのまま共通鍵として用いることも可能である。
【産業上の利用可能性】
【００３７】
特に組込機器において、高速で安全な鍵交換に利用することができる。
【図面の簡単な説明】
【００３８】
【図１】本発明の実施の形態に係る鍵交換処理装置の構成を示すブロック図である。
【図２】同実施の形態に係る一方向性関数の特性を説明するための図である。
【図３】同実施の形態に係る鍵交換方法の第１動作例を示す図である。
【図４】同実施の形態に係る鍵交換方法の第２動作例を示す図である。
【図５】従来のＢｔｏＣ型の鍵管理システムの構成を示す図である。
【符号の説明】
【００３９】
１      鍵交換処理装置
１−１  ＣＰＵ処理制御部
１−２  鍵交換部
１−３  暗号／復号化処理部
１−４  通信処理部
１−５  種選択部
１−６  乱数生成部
１−７  パラメータ保持部
１−８  一方向性ハッシュ関数部
１−９  通信Ｉ／Ｆ回路
【図１】
2006121215.tif 000003
【図２】
2006121215.tif 000004
【図３】
2006121215.tif 000005
【図４】
2006121215.tif 000006
【図５】
2006121215.tif 000007