(57)【特許請求の範囲】
【請求項１】
第１装置と第２装置とで鍵を共有するための鍵共有方法であって、
整数x1, x2, y1, y2を第１装置の秘密鍵として第１装置の記憶部に格納する秘密鍵格納過程と、
有限群Gの元g1, g2∈Gと当該有限群G上での演算結果z=g1x1・g2x2∈G，w=g1y1・g2y2∈Gとを公開鍵として上記第１装置の記憶部に格納する第１公開鍵格納過程と、
上記公開鍵g1, g2, z，wを上記第２装置の記憶部に格納する第２公開鍵格納過程と、
第２装置の整数選択部が、ランダムな整数rを選択し、当該整数rを上記第２装置の記憶部に格納する整数選択過程と、
第２装置の第１暗号化部が、上記第２装置の記憶部から公開鍵g1と整数rとを読み込み、有限群G上での演算C1=g1r∈Gを行い、当該演算結果C1を上記第２装置の記憶部に格納する第１暗号化過程と、
第２装置の第２暗号化部が、上記第２装置の記憶部から公開鍵g2と整数rとを読み込み、有限群G上での演算C2=g2r∈Gを行い、当該演算結果C2を上記第２装置の記憶部に格納する第２暗号化過程と、
第２装置の関数演算部が、上記第２装置の記憶部から少なくとも演算結果C1, C2の一方を含む情報をH関数入力値として読み込み、当該H関数入力値によって定まる値に対し、値域を整数とする目的衝突困難なハッシュ関数Hを作用させ、その演算結果dを上記第２装置の記憶部に格納する第２装置関数演算過程と、
第２装置のシード演算部が、上記第２装置の記憶部から公開鍵z, wと整数rと演算結果dとを読み込み、有限群G上での演算σ=zr・wr・d∈Gを行い、当該演算結果σを上記第２装置の記憶部に格納する第２装置シード演算過程と、
第２装置の鍵演算部が、上記第２装置の記憶部から少なくとも演算結果σを読み込み、当該演算結果σをシードとした擬似ランダム関数Fσの関数値を算出し、その関数値を鍵Kとして上記第２装置の記憶部に格納する第２装置鍵演算過程と、
第２装置の送信部が、演算結果C1, C2を第１装置に送信する演算結果送信過程と、
演算結果C1, C2を上記第１装置の記憶部に格納する演算結果格納過程と、
第１装置の関数演算部が、上記第１装置の記憶部から少なくとも演算結果C1, C2の一方を含む情報をH関数入力値として読み込み、当該H関数入力値によって定まる値に対し、上記ハッシュ関数Hを作用させ、その演算結果dを上記第１装置の記憶部に格納する第１装置関数演算過程と、
第１装置のシード演算部が、上記第１装置の記憶部から演算結果C1, C2, dと秘密鍵x1, x2, y1, y2とを読み込み、有限群G上での演算σ=C1(x1+d・y1)・C2(x2+d・y2)∈Gを行い、当該演算結果σを上記第１装置の記憶部に格納する第１装置シード演算過程と、
第１装置の鍵演算部が、上記第１装置の記憶部から少なくとも演算結果σを読み込み、当該演算結果σをシードとした擬似ランダム関数Fσの関数値を算出し、その関数値を鍵Kとして上記第１装置の記憶部に格納する第１装置鍵演算過程と、
を有することを特徴とする鍵共有方法。
【請求項２】
請求項１に記載の鍵共有方法であって、
上記第２装置鍵演算過程は、上記第２装置の記憶部から少なくとも演算結果C1, C2の一方を含む情報を擬似ランダム関数入力値として読み込み、当該擬似ランダム関数入力値によって定まる値を入力とし、上記演算結果σをシードとした擬似ランダム関数Fσの関数値を算出し、その関数値を鍵Kとする過程であり、
上記第１装置鍵演算過程は、上記第１装置の記憶部から少なくとも演算結果C1, C2の一方を含む情報を擬似ランダム関数入力値として読み込み、当該擬似ランダム関数入力値によって定まる値を入力とし、上記演算結果σをシードとした擬似ランダム関数Fσの関数値を算出し、その関数値を鍵Kとする過程である、
ことを特徴とする鍵共有方法。
【請求項３】
第１装置と第２装置とで鍵を共有するための鍵共有方法であって、
整数x1, x2, y1, y2を第１装置の秘密鍵として第１装置の記憶部に格納する秘密鍵格納過程と、
有限群Gの元g1, g2∈Gと当該有限群G上での演算結果z=g1x1・g2x2∈G，w=g1y1・g2y2∈Gとを公開鍵として上記第１装置の記憶部に格納する第１公開鍵格納過程と、
上記公開鍵g1, g2, z，wを第２装置の記憶部に格納する第２公開鍵格納過程と、
第２装置の整数選択部が、ランダムな整数rを選択し、当該整数rを上記第２装置の記憶部に格納する整数選択過程と、
第２装置の第１暗号化部が、上記第２装置の記憶部から公開鍵g1と整数rとを読み込み、有限群G上での演算C1=g1r∈Gを行い、当該演算結果C1を上記第２装置の記憶部に格納する第１暗号化過程と、
第２装置の第２暗号化部が、上記第２装置の記憶部から公開鍵g2と整数rとを読み込み、有限群G上での演算C2=g2r∈Gを行い、当該演算結果C2を上記第２装置の記憶部に格納する第２暗号化過程と、
第２装置の関数演算部が、上記第２装置の記憶部から少なくとも演算結果C1, C2の一方を含む情報をH関数入力値として読み込み、当該H関数入力値によって定まる値に対し、値域を整数とする目的衝突困難なハッシュ関数Hを作用させ、その演算結果dを上記第２装置の記憶部に格納する第２装置関数演算過程と、
第２装置の第１シード演算部が、上記第２装置の記憶部から公開鍵z, wと整数rと演算結果dとを読み込み、有限群G上での演算σ1=zr・wr・d∈Gを行い、当該演算結果σ1を上記第２装置の記憶部に格納する第２装置第１シード演算過程と、
第２装置の第２シード演算部が、上記第２装置の記憶部から公開鍵z, wと整数rと演算結果dとを読み込み、有限群G上での演算σ2=zr・d・wr∈Gを行い、当該演算結果σ2を上記第２装置の記憶部に格納する第２装置第２シード演算過程と、
第２装置の鍵演算部が、上記第２装置の記憶部から少なくとも演算結果σ1, σ2を読み込み、当該演算結果σ1をシードとした擬似ランダム関数Fσ1の関数値と、当該演算結果σ2をシードとした擬似ランダム関数Fσ2の関数値との排他的論理和演算を行い、その演算結果を鍵Kとして上記第２装置の記憶部に格納する第２装置鍵演算過程と、
第２装置の送信部が、演算結果C1, C2を第１装置に送信する演算結果送信過程と、
演算結果C1, C2を上記第１装置の記憶部に格納する演算結果格納過程と、
第１装置の関数演算部が、上記第１装置の記憶部から少なくとも演算結果C1, C2の一方を含む情報をH関数入力値として読み込み、当該H関数入力値によって定まる値に対し、上記ハッシュ関数Hを作用させ、その演算結果dを上記第１装置の記憶部に格納する第１装置関数演算過程と、
第１装置の第１シード演算部が、上記第１装置の記憶部から演算結果C1, C2, dと秘密鍵x1, x2, y1, y2とを読み込み、有限群G上での演算σ1=C1(x1+d・y1)・C2(x2+d・y2)∈Gを行い、当該演算結果σ1を上記第１装置の記憶部に格納する第１装置第１シード演算過程と、
第１装置の第２シード演算部が、上記第１装置の記憶部から演算結果C1, C2, dと秘密鍵x1, x2, y1, y2とを読み込み、有限群G上での演算σ2=C1(d・x1+y1)・C2(d・x2+y2)∈Gを行い、当該演算結果σ2を上記第１装置の記憶部に格納する第１装置第２シード演算過程と、
第１装置の鍵演算部が、上記第１装置の記憶部から少なくとも演算結果σ1, σ2を読み込み、当該演算結果σ1をシードとした擬似ランダム関数Fσ1の関数値と、当該演算結果σ2をシードとした擬似ランダム関数Fσ2の関数値との排他的論理和演算を行い、その演算結果を鍵Kとして上記第１装置の記憶部に格納する第１装置鍵演算過程と、
を有することを特徴とする鍵共有方法。
【請求項４】
請求項３に記載の鍵共有方法であって、
上記第２装置鍵演算過程は、第２装置の鍵演算部が、少なくとも演算結果C1, C2の一方を含む情報を擬似ランダム関数入力値として読み込み、当該擬似ランダム関数入力値によって定まる値を入力とし、上記演算結果σ1をシードとした擬似ランダム関数Fσ1の関数値と、当該擬似ランダム関数入力値によって定まる値を入力とし、上記演算結果σ2をシードとした擬似ランダム関数Fσ2の関数値と、の排他的論理和演算を行い、その演算結果を鍵Kとする過程であり、
上記第１装置鍵演算過程は、第１装置の鍵演算部が、少なくとも演算結果C1, C2の一方を含む情報を擬似ランダム関数入力値として読み込み、当該擬似ランダム関数入力値によって定まる値を入力とし、上記演算結果σ1をシードとした擬似ランダム関数Fσ1の関数値と、当該擬似ランダム関数入力値によって定まる値を入力とし、上記演算結果σ2をシードとした擬似ランダム関数Fσ2の関数値と、の排他的論理和演算を行い、その演算結果を鍵Kとする過程である、
ことを特徴とする鍵共有方法。
【請求項５】
請求項２又は４に記載の鍵共有方法であって、
上記擬似ランダム関数入力値は、
公開鍵g1, g2, z，wと演算結果C1, C2とを含む、
ことを特徴とする鍵共有方法。
【請求項６】
請求項１から５の何れかに記載の鍵共有方法であって、
上記H関数入力値は、
公開鍵z，wと演算結果C1, C2とを含む、
ことを特徴とする鍵共有方法。
【請求項７】
第２装置と鍵を共有する第１装置であって、
整数x1, x2, y1, y2を第１装置の秘密鍵として格納し、有限群Gの元g1, g2∈Gと当該有限群G上での演算結果z=g1x1・g2x2∈G，w=g1y1・g2y2∈Gとを公開鍵として格納し、第２装置から送信された演算結果C1, C2を格納する記憶部と、
上記記憶部から少なくとも演算結果C1, C2の一方を含む情報をH関数入力値として読み込み、当該H関数入力値によって定まる値に対し、上記ハッシュ関数Hを作用させ、その演算結果dを上記記憶部に格納する関数演算部と、
上記記憶部から演算結果C1, C2, dと秘密鍵x1, x2, y1, y2とを読み込み、有限群G上での演算σ=C1(x1+d・y1)・C2(x2+d・y2)∈Gを行い、当該演算結果σを上記記憶部に格納するシード演算部と、
上記記憶部から少なくとも演算結果σを読み込み、当該演算結果σをシードとした擬似ランダム関数Fσの関数値を算出し、その関数値を鍵Kとして上記記憶部に格納する鍵演算部と、
を有することを特徴とする第１装置。
【請求項８】
第１装置と鍵を共有する第２装置であって、
整数x1, x2, y1, y2を第１装置の秘密鍵とした場合における、有限群Gの元g1, g2∈Gと当該有限群G上での演算結果z=g1x1・g2x2∈G，w=g1y1・g2y2∈Gとを第１装置の公開鍵として格納する記憶部と、
ランダムな整数rを選択し、当該整数rを上記記憶部に格納する整数選択部と、
上記記憶部から公開鍵g1と整数rとを読み込み、有限群G上での演算C1=g1r∈Gを行い、当該演算結果C1を上記記憶部に格納する第１暗号化部と、
上記記憶部から公開鍵g2と整数rとを読み込み、有限群G上での演算C2=g2r∈Gを行い、当該演算結果C2を上記記憶部に格納する第２暗号化部と、
上記記憶部から少なくとも演算結果C1, C2の一方を含む情報をH関数入力値として読み込み、当該H関数入力値によって定まる値に対し、値域を整数とする目的衝突困難なハッシュ関数Hを作用させ、その演算結果dを上記記憶部に格納する関数演算部と、
上記記憶部から少なくとも公開鍵z, wと整数rと演算結果dとを読み込み、有限群G上での演算σ=zr・wr・d∈Gを行い、当該演算結果σを上記記憶部に格納するシード演算部と、
上記記憶部から少なくとも演算結果σを読み込み、当該演算結果σをシードとした擬似ランダム関数Fσの関数値を算出し、その関数値を鍵Kとして上記記憶部に格納する鍵演算部と、
演算結果C1, C2を第１装置に送信する送信部と、
を有することを特徴とする第２装置。
【請求項９】
第２装置と鍵を共有する第１装置であって、
整数x1, x2, y1, y2を第１装置の秘密鍵として格納し、有限群Gの元g1, g2∈Gと当該有限群G上での演算結果z=g1x1・g2x2∈G，w=g1y1・g2y2∈Gとを公開鍵として格納し、第２装置から送信された演算結果C1, C2を格納する記憶部と、
上記記憶部から少なくとも演算結果C1, C2の一方を含む情報をH関数入力値として読み込み、当該H関数入力値によって定まる値に対し、上記ハッシュ関数Hを作用させ、その演算結果dを上記記憶部に格納する関数演算部と、
上記記憶部から少なくとも演算結果C1, C2, dと秘密鍵x1, x2, y1, y2とを読み込み、有限群G上での演算σ1=C1(x1+d・y1)・C2(x2+d・y2)∈Gを行い、当該演算結果σ1を上記記憶部に格納する第１シード演算部と、
上記記憶部から少なくとも演算結果C1, C2, dと秘密鍵x1, x2, y1, y2とを読み込み、有限群G上での演算σ2=C1(d・x1+y1)・C2(d・x2+y2)∈Gを行い、当該演算結果σ2を上記記憶部に格納する第２シード演算部と、
上記記憶部から少なくとも演算結果σ1, σ2を読み込み、当該演算結果σ1をシードとした擬似ランダム関数Fσ1の関数値と、当該演算結果σ2をシードとした擬似ランダム関数Fσ2の関数値との排他的論理和演算を行い、その演算結果を鍵Kとして上記記憶部に格納する鍵演算部と、
を有することを特徴とする第１装置。
【請求項１０】
第１装置と鍵を共有する第２装置であって、
整数x1, x2, y1, y2を第１装置の秘密鍵とした場合における、有限群Gの元g1, g2∈Gと当該有限群G上での演算結果z=g1x1・g2x2∈G，w=g1y1・g2y2∈Gとを第１装置の公開鍵として格納する記憶部と、
ランダムな整数rを選択し、当該整数rを上記記憶部に格納する整数選択部と、
上記記憶部から公開鍵g1と整数rとを読み込み、有限群G上での演算C1=g1r∈Gを行い、当該演算結果C1を上記記憶部に格納する第１暗号化部と、
上記記憶部から公開鍵g2と整数rとを読み込み、有限群G上での演算C2=g2r∈Gを行い、当該演算結果C2を上記記憶部に格納する第２暗号化部と、
上記記憶部から少なくとも演算結果C1, C2の一方を含む情報をH関数入力値として読み込み、当該H関数入力値によって定まる値に対し、上記ハッシュ関数Hを作用させ、その演算結果dを上記記憶部に格納する関数演算部と、
上記記憶部から少なくとも公開鍵z, wと整数rと演算結果dとを読み込み、有限群G上での演算σ1=zr・wr・d∈Gを行い、当該演算結果σ1を上記記憶部に格納する第１シード演算部と、
上記記憶部から少なくとも公開鍵z, wと整数rと演算結果dとを読み込み、有限群G上での演算σ2=zr・d・wr∈Gを行い、当該演算結果σ2を上記記憶部に格納する第２シード演算部と、
上記記憶部から少なくとも演算結果σ1, σ2を読み込み、当該演算結果σ1をシードとした擬似ランダム関数Fσ1の関数値と、当該演算結果σ2をシードとした擬似ランダム関数Fσ2の関数値との排他的論理和演算を行い、その演算結果を鍵Kとして上記記憶部に格納する鍵演算部と、
演算結果C1, C2を第１装置に送信する送信部と、
を有することを特徴とする第２装置。
【請求項１１】
請求項７又は９の第１装置としてコンピュータを機能させるためのプログラム。
【請求項１２】
請求項８又は１０の第２装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号技術に関し、特に鍵共有技術に関する。
【背景技術】
【０００２】
従来、強い安全性を持つ〔能動的攻撃に対しても安全な；CCA（Chosen-Cipertext Attacks：選択暗号文攻撃）‐安全な〕鍵共有方式がISO18033-2（例えば、非特許文献１参照）などで採用されているが、このような鍵共有方式は、大きく分けて、素因数分解に基づく方式（RSA-KEMなど）と離散対数（例えば、楕円離散対数）に基づく方式（ACE-KEMやPSEC-KEMなど）がある。これらの中では、鍵長などの実用性の点で、素因数分解に基づく方式よりも、楕円離散対数に基づく方式の方が実用性に優れている。
【０００３】
楕円離散対数に基づく鍵共有方式では、ACE-KEM、PSEC-KEM（ISO18033-2）及びKurosawa-Desmedt方式（例えば、非特許文献２参照）が代表的である。これらの方式の中で、ACE-KEMは、標準モデル（ハッシュ関数を具体的な関数に固定したモデル）でCCA-安全であるという点で、安全性の面に優れているが、演算量及び暗号文長の点でKurosawa-Desmedt方式よりも効率が悪い。Kurosawa-Desmedt方式はCCA-安全でないという点で安全性の問題がある。一方、PSEC-KEMはKurosawa-Desmedt方式と同等の効率の方式であるが、標準モデルではなく仮想的なランダムオラクルモデル（ハッシュ関数を極度に理想化したモデル）の下でしかCCA-安全性の保証がない。
【０００４】
上述のように、従来、効率がKurosawa-Desmedt方式やPSEC-KEMと同等であり、かつ標準モデルでCCA-安全である方式は提案されていなかった。
【非特許文献１】”ISO 18033-2: A Standard for Public-Key Encryption”、[online]、 [平成１９年１１月１５日検索]、インターネット＜http://www.shoup.net/＞
【非特許文献２】Kaoru Kurosawa and Yvo Desmed, “A New Paradigm of Hybrid Encryption Scheme,” Advances in Cryptology, CRYPTO 2004, volume 3152 of Lecture Notes in Computer Science, pages 426-442, 2004, Springer-Verlag
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明はこのような点に鑑みてなされたものであり、従来の方式と同等の効率を持ち、なおかつ標準モデルでCCA-安全である鍵共有技術を提供することを目的とする。
【課題を解決するための手段】
【０００６】
第1の本発明では、第１装置と第２装置とで鍵を共有するために、整数x1, x2, y1, y2を第１装置の秘密鍵とし、有限群Gの元g1, g2∈Gと当該有限群G上での演算結果z=g1x1・g2x2∈G，w=g1y1・g2y2∈Gとを第１装置の公開鍵とする。
【０００７】
第２装置は、その整数選択部がランダムな整数rを選択し、第１暗号化部が有限群G上での演算C1=g1r∈Gを行い、第２暗号化部が有限群G上での演算C2=g2r∈Gを行い、関数演算部が少なくとも演算結果C1, C2の一方を含む情報をH関数入力値とし、当該H関数入力値によって定まる値に対し、値域を整数とする目的衝突困難なハッシュ関数Hを作用させて演算結果dを算出し、シード演算部が、有限群G上での演算σ=zr・wr・d∈Gを行い、鍵演算部が、演算結果σをシードとした擬似ランダム関数Fσの関数値を算出し、その関数値を鍵Kとし、送信部が演算結果C1, C2を第１装置に送信する。なお、目的衝突困難（TCR: Target Collision Resistant）なハッシュ関数とは、異なる入力値に対する出力値が互いに同一となる確率が無視できるほど小さいハッシュ関数を意味する。また、擬似ランダム関数（Pseudo-Random Function）とは、入力値に対する出力値が真のランダム値と識別困難である関数を意味する。
【０００８】
第１装置は、その関数演算部が少なくとも演算結果C1, C2の一方を含む情報をH関数入力値とし、当該H関数入力値によって定まる値に対し、上記ハッシュ関数Hを作用させて演算結果dを生成し、シード演算部が有限群G上での演算σ=C1(x1+d・y1)・C2(x2+d・y2)∈Gを行い、鍵演算部が、当該演算結果σをシードとした擬似ランダム関数Fσの関数値を算出し、その関数値を鍵Kとする。
また、第２の本発明でも、第１装置と第２装置とで鍵を共有するために、整数x1, x2, y1, y2を第１装置の秘密鍵とし、有限群Gの元g1, g2∈Gと当該有限群G上での演算結果z=g1x1・g2x2∈G，w=g1y1・g2y2∈Gとを第１装置の公開鍵とする。
【０００９】
第２装置は、その整数選択部がランダムな整数rを選択し、第１暗号化部が有限群G上での演算C1=g1r∈Gを行い、第２暗号化部が有限群G上での演算C2=g2r∈Gを行い、関数演算部が少なくとも演算結果C1, C2の一方を含む情報をH関数入力値とし、当該H関数入力値によって定まる値に対し、値域を整数とする目的衝突困難なハッシュ関数Hを作用させて演算結果dを算出し、第１シード演算部が有限群G上での演算σ1=zr・wr・d∈Gを行い、第２シード演算部が有限群G上での演算σ2=zr・d・wr∈Gを行い、鍵演算部が、演算結果σ1をシードとした擬似ランダム関数Fσ1の関数値と、当該演算結果σ2をシードとした擬似ランダム関数Fσ2の関数値との排他的論理和演算を行い、その演算結果を鍵Kとし、送信部が、演算結果C1, C2を第１装置に送信する。
【００１０】
第１装置は、その関数演算部が、少なくとも演算結果C1, C2の一方を含む情報をH関数入力値とし、当該H関数入力値によって定まる値に対し、上記ハッシュ関数Hを作用させて演算結果dを算出し、第１シード演算部が有限群G上での演算σ1=C1(x1+d・y1)・C2(x2+d・y2)∈Gを行い、第２シード演算部が有限群G上での演算σ2=C1(d・x1+y1)・C2(d・x2+y2)∈Gを行い、当該演算結果σ1をシードとした擬似ランダム関数Fσ1の関数値と、当該演算結果σ2をシードとした擬似ランダム関数Fσ2の関数値との排他的論理和演算を行い、その演算結果を鍵Kとする。
【発明の効果】
【００１１】
本発明により、従来の方式と同等の効率を持ち、なおかつ標準モデルでCCA-安全な鍵共有が可能となる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明を実施するための最良の形態を図面を参照して説明する。
〔準備〕
まず、用語の説明を行う。  
＜有限群＞
以下の各実施形態では、離散対数問題が難しい有限群Gを用い、その位数をpとする。なお、離散対数問題が難しいとは、離散対数問題を多項式時間で解くことが困難であることを意味する。また、このような有限群Gの実現例としては、例えば、楕円曲線暗号に用いられる楕円曲線上の有理点のなす群や、エルガマル暗号等に用いられる有限体の乗法群などを用いることができる（例えば、『岡本龍明，山本博資著、「現代暗号」、産業図書出版、ISBN4-7828-5353-X（参考文献１）』等参照）。なお、有限群Gとして楕円曲線上の有理点のなす群を用いる場合、その元は楕円曲線上の点であり、有限体の乗法群を用いる場合、その元は整数である。また、楕円曲線上の有理点のなす群をコンピュータ上で実現するための具体的方法には様々なものが存在し、実際、楕円曲線上の有理点のなす群で構成され、コンピュータ上で実装可能な様々な楕円曲線暗号方式が存在する（例えば、参考文献１や『イアン・Ｆ・ブラケ、ガディエル・セロッシ、ナイジェル・Ｐ・スマート＝著、鈴木治郎＝訳、「楕円曲線暗号」、出版＝ピアソン・エデュケーション、ISBN4-89471-431-0（参考文献２）』等参照）。
【００１３】
また、有限群G上の演算とは、有限群Gで定義された演算を意味する。例えば、有限群Gが楕円曲線上の有理点のなす群である場合、楕円曲線上の楕円加算や楕円スカラー倍算やそれらの組み合わせが「有限群G上の演算」に相当する。この場合、αβ∈Gは、楕円曲線上の点αを楕円スカラー倍（β倍）する演算を意味し、α・β∈Gは、楕円曲線上の点αと点βとの楕円加算を意味する。また、楕円スカラー倍演算をコンピュータ上で実行する具体的な方法としては、二進展開法、移動窓法等の公知の演算方法を例示できる（例えば、参考文献２等参照）。また、例えば、有限群Ｇが有限体の乗法群であった場合、ｑ（ただし、ｇは２以上の整数、q=2p+1）を法としたべき乗演算や積演算が「有限群G上の演算」に相当する。この場合、αβ∈Gは、αβmod qの演算を意味し、α・β∈Gは、(α・β) mod qの演算を意味する。
【００１４】
＜目的衝突困難なハッシュ関数＞
目的衝突困難（TCR: Target Collision Resistant）なハッシュ関数とは、異なる入力値に対する出力値が互いに同一となる確率が無視できるほど小さいハッシュ関数を意味する。本形態の目的衝突困難なハッシュ関数は、以下のように定義される。
まず、集合Domkと集合Rngk（kは自然数のセキュリティパラメータ）との間を対応付けるハッシュ関数Hを想定する。また、このようなハッシュ関数Hの各セキュリティパラメータkに対する鍵空間が、KHkで示されるビット列による確率空間であるとする。さらに、入力１ｋ（kビットデータ）に対する出力値の分布がKHkと等しくなる確率的多項式時間アルゴリズムが存在するものとする。また、セキュリティパラメータkと、KHkからその分布に従って任意に選択したh（h ←R KHk）と、集合Domkからその分布に従って任意に選択した集合D（D ←RDomk）と、集合Rngkからその分布に従って任意に選択した集合Rと（R ←R Rngk）のインデックスが付されたこのようなハッシュ関数Hhk,D,Rが、集合Dの要素を集合Rの要素にマッピングする関数であるものとする。なお、「α ←R β」は、集合βからその分布に従って任意に選択した集合αを意味する。さらに、１ｋ，h及び集合Dの要素ρの入力に対して関数値Hhk,D,R(ρ)を出力する決定論多項式アルゴリズムが存在するものとする。
【００１５】
そして、確率的多項式時間マシーンAを想定し、全てのキュリティパラメータkに対するハッシュ関数Hhk,D,Rの優位性を以下のように定義する。なお、Pr[・]は事象・の確率を示し、ρ*は集合Dから一様に選択された値（ρ*←U D）を示す。また、「α←β」はβをαとして設定することを意味する。
AdvTCRH,A(k)←Pr[ρ∈D∧ρ≠ρ*∧Hhk,D,R(ρ)=Hhk,D,R(ρ*)|ρ ←R A(1k,ρ*,h,D,R)]  …(1)
ここで、どのような確率的多項式時間マシーンAに対しても優位性AdvTCRH,A(k)がセキュリティパラメータkにおいて無視できる程度に小さい場合、ハッシュ関数Hを目的衝突困難なハッシュ関数と呼ぶ。なお、このような目的衝突困難なハッシュ関数は、SHA-1などの実用的なハッシュ関数を用いて容易に構成できる。
【００１６】
＜擬似ランダム関数＞
擬似ランダム関数（Pseudo-Random Function）とは、入力値に対する出力値が真のランダム値と識別困難である関数を意味する。本形態の擬似ランダム関数は、以下のように定義される。
まず、シードSeedkと集合Domkと集合Rngkとの間を関連付ける関数Fを想定する。ここで、シードSeedkはランダムな値である。さらに、セキュリティパラメータkと、Seedkからその分布に従って任意に選択した集合Σ（Σ ←R Seedk）と、集合Σから一様に選択したσ（σ ←U Σ）と、集合Domkからその分布に従って任意に選択した集合D（D ←R Domk）と、集合Rngkからその分布に従って任意に選択した集合Rと（R ←RRngk）のインデックスが付されたこのような関数Fσk,Σ,D,Rが、集合Dの要素を集合Rにマッピングする関数であるものとする。
【００１７】
そして、オラクルOにアクセス可能な確率的多項式時間マシーンAOを想定し、全てのキュリティパラメータkに対する関数Fσk,Σ,D,Rの優位性を以下のように定義する。なお、Fは関数Fσk,Σ,D,Rであり、RFはDをFに写す真のランダム関数である。また、「A(α)→β」は、Aが入力αに対してβ∈{0, 1}を出力することを意味する。
AdvPRFF,A(k)←｜Pr[AF(1k,D,R)→1] - Pr[ARF(1k,D,R)→1]| …(2)
ここで、どのような確率的多項式時間マシーンAに対しても優位性AdvPRFF,A(k)がセキュリティパラメータkにおいて無視できる程度に小さい場合、関数Fを擬似ランダム関数と呼ぶ。なお、このような目擬似ランダム関数は、SHA-1などの実用的なハッシュ関数を用いて容易に構成できる。
【００１８】
〔第１実施形態〕
次に、本発明の第１実施形態について説明する。
＜全体構成＞
図１（ａ）は、第１実施形態の鍵共有システム１の構成を例示した図である。
図１（ａ）に例示するように、本形態の鍵共有システム１は、鍵を共有する第１装置１０と第２装置とを有し、それらはインターネット等の安全ではないネットワーク３０を通じて通信可能に接続されている。なお、第１装置１０と第２装置２０との間の通信はネットワーク３０を通じて行われるが、以下ではその旨を省略して説明する。
【００１９】
＜ハードウェア構成＞
図１（ｂ）は、第１装置１０のハードウェア構成を例示したブロック図である。
図１（ｂ）に例示するように、この例の第１装置１０は、ＣＰＵ（Central Processing Unit）１０ａ、入力部１０ｂ、出力部１０ｃ、補助記憶装置１０ｄ、ＲＡＭ（Random Access Memory）１０ｆ、ＲＯＭ（Read Only Memory）１０ｅ及びバス１０ｇを有している。
ＣＰＵ１０ａは、読み込まれた各種プログラムに従って様々な演算処理を実行する。また、入力部１０ｂは、データが入力される入力ポート、キーボード、マウス等であり、出力部１０ｃは、データを出力する出力ポート、ディスプレイ等である。補助記憶装置１０ｄは、例えば、ハードディスク、ＭＯ（Magneto-Optical disc）、半導体メモリ等であり、ＲＡＭ１０ｆは、ＳＲＡＭ (Static Random Access Memory)、ＤＲＡＭ (Dynamic Random Access Memory)等である。また、バス１０ｇは、ＣＰＵ１０ａ、入力部１０ｂ、出力部１０ｃ、補助記憶装置１０ｄ、ＲＡＭ１０ｆ及びＲＯＭ１０ｅを通信可能に接続している。
なお、第２装置２０のハードウェア構成は、第１装置１０のそれと同様であるため説明を省略する。
【００２０】
＜ハードウェアとソフトウェアとの協働＞
図２は、第１実施形態の第１装置１０及び第２装置２０の機能構成を例示したブロック図である。なお、図２における矢印はデータの流れを示すが、制御部１３ａ，２３ａに出入りするデータの流れに対応する矢印は省略してある。
第１実施形態の第１装置１０及び第２装置２０は、それぞれ、上述のようなハードウェアに所定のプログラムが読み込まれ、ＣＰＵが実行することによって構築される。
【００２１】
図２に例示するように、本形態の第１装置１０は、記憶部１１と、送信部１２ａと、受信部１２ｂと、制御部１３ａと、関数演算部１３ｂと、シード演算部１３ｃと、鍵演算部１３ｄとを有する。なお、記憶部１１は、例えば、キャッシュメモリ、レジスタ、ＲＡＭ、若しくは補助記憶装置、又はそれらを結合した記憶領域である。また、送信部１２ａ及び受信部１２ｂは、所定のプログラムが読み込まれたＣＰＵの制御のもと駆動するＬＡＮカード、モデム等の通信装置である。さらに、制御部１３ａ、関数演算部１３ｂ、シード演算部１３ｃ及び鍵演算部１３ｄは、例えば、所定のプログラムがＣＰＵに読み込まれ、実行されることによって構築される演算部である。
【００２２】
また、本形態の第２装置２０は、記憶部２１と、送信部２２ａと、受信部２２ｂと、制御部２３ａと、整数選択部２３ｂと、第１暗号化部２３ｃと、第２暗号化部２３ｄと、関数演算部２３ｅと、シード演算部２３ｆと、鍵演算部２３ｇとを有する。なお、記憶部２１、例えば、キャッシュメモリ、レジスタ、ＲＡＭ、若しくは補助記憶装置、又はそれらを結合した記憶領域である。また、送信部２２ａ及び受信部２２ｂは、所定のプログラムが読み込まれたＣＰＵの制御のもと駆動するＬＡＮカード、モデム等の通信装置である。さらに、制御部２３ａ、整数選択部２３ｂ、第１暗号化部２３ｃ、第２暗号化部２３ｄ、関数演算部２３ｅ、シード演算部２３ｆ及び鍵演算部２３ｇは、例えば、所定のプログラムがＣＰＵに読み込まれ、実行されることによって構築される演算部である。また、第１装置１０，第２装置２０は、それぞれ、制御部１３ａ，２３ａの制御の下、各処理を実行する。
【００２３】
＜鍵共有処理＞
次に、本形態の鍵共有処理について説明する。
図３は、第１実施形態の鍵共有処理を説明するためのフローチャートである。以下、この図を用いて本形態の鍵共有処理を説明する。
まず、第１装置の秘密鍵として(x1, x2, y1, y2)∈{0,1,...,p-1}4が設定され、これらが第１装置１０の記憶部１１に格納される（秘密鍵格納過程／ステップＳ１）。なお、演算の効率面からは、秘密鍵を(x1, x2, y1, y2)∈{0,1,...,p-1}4のように設定するのが好ましいが、任意の４つの整数(x1, x2, y1, y2)を第１装置１０の秘密鍵としてもよい。また、有限群Gの元g1, g2∈Gと当該有限群G上での演算結果z=g1x1・g2x2∈G，w=g1y1・g2y2∈Gとを公開鍵として第１装置１０の記憶部１１に格納する（第１公開鍵格納過程／ステップＳ２）。次に、公開鍵g1, g2, z，wが送信部１２ａに送られ、送信部１２ａはこれらを第２装置２０に送信する（ステップＳ３）。送信された公開鍵g1, g2, z，wは、第２装置２０の受信部２２ｂで受信され、第２装置２０の記憶部２１に格納される（第２公開鍵格納過程／ステップＳ４）。
【００２４】
次に、第２装置２０の整数選択部２３ｂが、ランダムな整数r∈{0,1,...,p-1}を選択し、当該整数rを第２装置２０の記憶部２１に格納する（整数選択過程／ステップＳ５）。なお、演算の効率面からは、整数rを{0,1,...,p-1}から選択することが好ましいが、整数rをこれ以外の範囲から選択してもよい。
次に、第２装置２０の第１暗号化部２３ｃが、第２装置２０の記憶部２１から公開鍵g1と整数rとを読み込み、有限群G上での演算
C1=g1r∈G  …(3)
を行い、当該演算結果C1を第２装置２０の記憶部２１に格納する（第１暗号化過程／ステップＳ６）。さらに、第２装置２０の第２暗号化部２３ｄが、第２装置２０の記憶部２１から公開鍵g2と整数rとを読み込み、有限群G上での演算
C2=g2r∈G  …(4)
を行い、当該演算結果C2を第２装置２０の記憶部２１に格納する（第２暗号化過程／ステップＳ７）。次に、第２装置２０の関数演算部２３ｅが、第２装置２０の記憶部２１から演算結果C1, C2と公開鍵z, wとをH関数入力値として読み込み、当該H関数入力値によって定まる値に対し、値域を整数とする目的衝突困難なハッシュ関数Hを作用させ、その演算結果
d=H(z, w, C1, C2)   …(5)
を第２装置２０の記憶部２１に格納する（第２装置関数演算過程／ステップＳ８）。なお、演算効率の面からは、値域を{0,1,...,p-1}とする目的衝突困難なハッシュ関数（H(X)∈{0,1,...,p-1}）を用いることが望ましい（以下、同様）。また、「H関数入力値によって定まる値」の例としては、例えば、有限群Gが有限体の乗法群の場合には、z, w, C1, C2のビット結合値やそれらの排他的論理和等を例示できる。また、例えば、有限群Gが楕円曲線上の有理点のなす群である場合には、楕円曲線上の点z, w, C1, C2の各座標値（ｘ座標値とｙ座標値）のビット結合値や、各ｘ座標値若しくはｙ座標値のビット結合値や、それらの排他的論理和等を、「H関数入力値によって定まる値」として用いることができる。
【００２５】
その後、第２装置２０のシード演算部２３ｆが、第２装置２０の記憶部２１から公開鍵z, wと整数rと演算結果dとを読み込み、有限群G上での演算
σ=zr・wr・d∈G  …(6)
を行い、当該演算結果σを第２装置２０の記憶部２１に格納する（第２装置シード演算過程／ステップＳ９）。そして、第２装置２０の鍵演算部２３ｇが、第２装置２０の記憶部２１から演算結果σと、公開鍵(g1, g2, z, w)と、演算結果C1, C2とを読み込み、当該演算結果σをシードとし、公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値を入力とした擬似ランダム関数Fσの関数値を算出し、その関数値を鍵
K=Fσ(g1, g2, z, w, C1, C2)   …(7)
として第２装置２０の記憶部２１に格納する（第２装置鍵演算過程／ステップＳ１０）。なお、「公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値」の例としては、例えば、有限群Gが有限体の乗法群の場合には、g1, g2, z, w, C1, C2のビット結合値やそれらの排他的論理和等を例示できる。また、例えば、有限群Gが楕円曲線上の有理点のなす群である場合には、楕円曲線上の点g1, g2, z, w, C1, C2の各座標値（ｘ座標値とｙ座標値）のビット結合値や、各ｘ座標値若しくはｙ座標値のビット結合値や、それらの排他的論理和等を、「公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値」として用いることができる。また、演算結果σをシードとし、公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値を入力とした擬似ランダム関数Fσの関数値とは、例えば、演算結果σと「公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値」とを擬似ランダム関数Fσの入力とし、出力された関数値を意味し、より具体的には、例えば、演算結果σと「公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値」とのビット結合値に対して擬似ランダム関数Fσを作用させた演算結果を意味する。
【００２６】
その後、演算結果C1, C2が第２装置２０の送信部２２ａに送られ、送信部２２ａが、演算結果C1, C2を第１装置１０に送信する（演算結果送信過程／ステップＳ１１）。送信された演算結果C1, C2は、第１装置１０の受信部１２ｂで受信され、第１装置１０の記憶部１１に格納される（演算結果格納過程／ステップＳ１２）。
【００２７】
次に、第１装置１０の関数演算部１３ｂが、第１装置１０の記憶部１１から演算結果C1, C2と公開鍵z, wをH関数入力値として読み込み、ステップＳ８と同様に、当該H関数入力値によって定まる値に対し、ハッシュ関数Hを作用させ、その演算結果
d=H(z, w, C1, C2)   …(8)
を第１装置１０の記憶部１１に格納する（第１装置関数演算過程／ステップＳ１３）。次に、第１装置１０のシード演算部１３ｃが、第１装置１０の記憶部１１から演算結果C1, C2, dと秘密鍵x1, x2, y1, y2とを読み込み、有限群G上での演算
σ=C1(x1+d・y1)・C2(x2+d・y2)  …(9)
を行い、当該演算結果σを第１装置１０の記憶部１１に格納する（第１装置シード演算過程／ステップＳ１４）。その後、第１装置１０の鍵演算部１３ｄが、第１装置１０の記憶部１１から演算結果σと公開鍵(g1, g2, z, w)とを読み込み、ステップＳ１０と同様に、当該演算結果σをシードとし、公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値を入力とした擬似ランダム関数Fσの関数値を算出し、その関数値を鍵
K=Fσ(g1, g2, z, w, C1, C2)   …(10)
として第１装置１０の記憶部１１に格納する（第１装置鍵演算過程／ステップＳ１５）。
以上の処理により、第１装置１０と第２装置２０とで鍵Kが共有される。
【００２８】
＜第１装置１０と第２装置２０とで鍵Kが共有される理由＞
C1, C2が正しく作られていれば以下を満たし、第１装置１０で算出されるシードσ（式(9)）と第２装置２０で算出されるシードσ（式(6)）とが等しくなり、擬似ランダム関数Fσの関数値である鍵K（式(7)(10)）も等しくなる。
σ=C1(x1+d・y1)・C2(x2+d・y2) （式(9)より）
={g1(x1+d・y1)・g2(x2+d・y2)}r（式(3)(4)より）
=(g1x1・g2x2)r・(g1y1・g2y2)d・r
= z r・wd・r（公開鍵z=g1x1・g2x2∈G，w=g1y1・g2y2∈Gより）
=式(6)
【００２９】
〔第２実施形態〕
次に、本発明の第２実施形態について説明する。なお、以下では、第１実施形態との相違点を中心に説明し、第１実施形態と共通する事項については説明を省略する。
＜全体構成＞
本形態の鍵共有システムは、第１実施形態の第１装置１０を第１装置１１０に置換し、第２装置２０を第２装置１２０に置換したものである。
＜ハードウェア構成＞
第１装置１１０及び第２装置１２０のハードウェア構成は、第１実施形態で説明した第１装置１０及び第２装置２０のハードウェア構成と同様であるため、説明を省略する。
【００３０】
＜ハードウェアとソフトウェアとの協働＞
図４は、第２実施形態の第１装置１１０及び第２装置１２０の機能構成を例示したブロック図である。なお、図４における矢印はデータの流れを示すが、制御部１３ａ，２３ａに出入りするデータの流れに対応する矢印は省略してある。また、図４において第１実施形態と共通する部分については、図２と同じ符号を付して説明を簡略化する。
【００３１】
第２実施形態の第１装置１１０及び第２装置１２０は、それぞれ、上述のようなハードウェアに所定のプログラムが読み込まれ、ＣＰＵが実行することによって構築される。
図４に例示するように、本形態の第１装置１１０は、記憶部１１と、送信部１２ａと、受信部１２ｂと、制御部１３ａと、関数演算部１３ｂと、第１シード演算部１１３ｃと、第２シード演算部１１３ｅと、鍵演算部１１３ｄとを有する。なお、第１シード演算部１１３ｃ、第２シード演算部１１３ｅ及び鍵演算部１１３ｄは、例えば、所定のプログラムがＣＰＵに読み込まれ、実行されることによって構築される演算部である。
【００３２】
また、本形態の第２装置２２０は、記憶部２１と、送信部２２ａと、受信部２２ｂと、制御部２３ａと、整数選択部２３ｂと、第１暗号化部２３ｃと、第２暗号化部２３ｄと、関数演算部２３ｅと、第１シード演算部１２３ｆと、第２シード演算部１２３ｈと、鍵演算部１２３ｇとを有する。なお、第１シード演算部１２３ｆ、第２シード演算部１２３ｈ及び鍵演算部１２３ｇは、例えば、所定のプログラムがＣＰＵに読み込まれ、実行されることによって構築される演算部である。
【００３３】
＜鍵共有処理＞
次に、本形態の鍵共有処理について説明する。
図５は、第２実施形態の鍵共有処理を説明するためのフローチャートである。以下、この図を用いて本形態の鍵共有処理を説明する。なお、図５において第１実施形態と共通する処理については図３と同じステップ番号を付し、説明を省略する。
まず、第１装置１１０と第２装置１２０とが第１実施形態で説明したステップＳ１〜Ｓ８の処理を実行した後、第２装置１２０の第１シード演算部１２３ｆが、第２装置１２０の記憶部２１から公開鍵z, wと整数rと演算結果dとを読み込み、有限群G上での演算
σ1=zr・wr・d∈G  …(11)
を行い、当該演算結果σを第２装置１２０の記憶部２１に格納する（第２装置第１シード演算過程／ステップＳ１０９）。
【００３４】
また、第２装置１２０の第２シード演算部１２３ｈが、第２装置１２０の記憶部２１から公開鍵z, wと整数rと演算結果dとを読み込み、有限群G上での演算
σ2=zr・d・wr∈G  …(12)
を行い、当該演算結果σ2を第２装置１２０の記憶部２１に格納する（第２装置第２シード演算過程／ステップＳ１１０）。
【００３５】
そして、第２装置１２０の鍵演算部１２３ｇが、第２装置１２０の記憶部２１から演算結果σ1, σ2と、公開鍵(g1, g2, z, w)と、演算結果C1, C2とを読み込み、当該演算結果σ1をシードとし、公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値を入力とした擬似ランダム関数Fσ1(g1, g2, z, w, C1, C2)の関数値と、当該演算結果σ2をシードとし、公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値を入力とした擬似ランダム関数Fσ2(g1, g2, z, w, C1, C2)の関数値との排他的論理和演算を行い、その演算結果を鍵
K= Fσ1(g1, g2, z, w, C1, C2) (+) Fσ2(g1, g2, z, w, C1, C2)   …(13)
として第２装置１２０の記憶部２１に格納する（第２装置鍵演算過程／ステップＳ１１１）。なお、「α（＋）β」は、αとβとの排他的論理和を意味する。
【００３６】
その後、第１装置１１０と第２装置１２０とが第１実施形態で説明したステップＳ１１〜Ｓ１３の処理を実行する。次に、第１装置１１０の第１シード演算部１１３ｃが、第１装置１１０の記憶部１１から演算結果C1, C2, dと秘密鍵x1, x2, y1, y2とを読み込み、有限群G上での演算
σ1=C1(x1+d・y1)・C2(x2+d・y2)∈G  …(14)
を行い、当該演算結果σ1を第１装置１１０の記憶部１１に格納する（第１装置第１シード演算過程／ステップＳ１１４）。また、第１装置１１０の第２シード演算部１１３ｅが、第１装置１１０の記憶部１１から演算結果C1, C2, dと秘密鍵x1, x2, y1, y2とを読み込み、有限群G上での演算
σ2=C1(d・x1+y1)・C2(d・x2+y2)∈G  …(15)
を行い、当該演算結果σ2を第１装置１１０の記憶部１１に格納する（第１装置第２シード演算過程／ステップＳ１１５）。
【００３７】
そして、第１装置１１０の鍵演算部１１３ｄが、第１装置１１０の記憶部１１から演算結果σ1, σ2と、公開鍵(g1, g2, z, w)と、演算結果C1, C2とを読み込み、当該演算結果σ1をシードとし、公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値を入力とした擬似ランダム関数Fσ1(g1, g2, z, w, C1, C2)の関数値と、当該演算結果σ2をシードとし、公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値を入力とした擬似ランダム関数Fσ2(g1, g2, z, w, C1, C2)の関数値との排他的論理和演算を行い、その演算結果を鍵
K= Fσ1(g1, g2, z, w, C1, C2) (+) Fσ2(g1, g2, z, w, C1, C2)   …(16)
として第１装置１１０の記憶部１１に格納する（第１装置鍵演算過程／ステップＳ１１６）。
以上の処理により、第１装置１１０と第２装置１２０とで鍵Kが共有される。
【００３８】
＜第１装置１１０と第２装置１２０とで鍵Kが共有される理由＞
C1, C2が正しく作られていれば以下を満たし、第１装置１１０で算出されるシードσ１，σ２（式(14)(15)）と第２装置２１０で算出されるシードσ１，σ２（式(11)(12)）とがそれぞれ等しくなり、擬似ランダム関数Fσの関数値である鍵K（式(13)(16)）も等しくなる。
σ1=C1(x1+d・y1)・C2(x2+d・y2) （式(14)より）
={g1(x1+d・y1)・g2(x2+d・y2)}r（式(3)(4)より）
=(g1x1・g2x2)r・(g1y1・g2y2)d・r
= z r・wd・r（公開鍵z=g1x1・g2x2∈G，w=g1y1・g2y2∈Gより）
=式(11)
σ2=C1(d・x1+y1)・C2(d・x2+y2)（式(15)より）
={g1(d・x1+y1)・g2(d・x2+y2)}r（式(3)(4)より）
=(g1x1・g2x2)d・r・(g1y1・g2y2)r
= zd・r・wr（公開鍵z=g1x1・g2x2∈G，w=g1y1・g2y2∈Gより）
=式(12)
【００３９】
〔各実施形態の効果〕
第１実施形態の鍵共有方式における暗号化処理時（ステップＳ６〜Ｓ１０）の計算量は、有限群G上での指数演算３回分に相当する。また、復号処理時（ステップＳ１３〜Ｓ１５）の計算量は、有限群G上での指数演算１回分に相当する。また、ステップＳ１１で送信される暗号文C1, C2のサイズは、有限群Gの２要素のサイズに相当する。また、この方式の安全性は、有限群GでDDH仮定が保たれ、Hが目的衝突困難なハッシュ関数であり、Fが擬似ランダム関数であることにより、標準モデルでCCA-安全であることが示される。
【００４０】
また、第２実施形態の鍵共有方式における暗号化処理時（ステップＳ６〜Ｓ１１１）の計算量は、有限群G上での指数演算４回分に相当する。また、復号処理時（ステップＳ１３〜Ｓ１１５）の計算量は、有限群G上での指数演算２回分に相当する。また、ステップＳ１１で送信される暗号文C1, C2のサイズは、有限群Gの２要素のサイズに相当する。また、この方式の安全性は、有限群GでDDH仮定が保たれ、Hが目的衝突困難なハッシュ関数であり、Fが擬似ランダム関数であることにより、標準モデルでCCA-安全よりも強い安全性であるCPCA-安全であることが示される。
【００４１】
なお、Kurosawa-Desmedt方式においては、暗号化処理時及び復号処理時に計算量、暗号文のサイズは、何れも第１実施形態の鍵共有方式と同等である。しかし、その安全性は、CCA-安全を満たさない。
PSEC-KEMにおいては、暗号化処理時の計算量は、有限群G上での指数演算２回分に相当する。また、復号処理時の計算量は、有限群G上での指数演算２回分に相当する。また、暗号文のサイズは有限群Gの２要素のサイズに相当する。この方式の安全性は、ランダムオラクルモデルでCCA-安全であることが示されるが、標準モデルでは示されない。
以上より、上述の各実施形態の方式が、従来の方式のうちで最も効率のよいKurosawa-Desmedt方式及びPSEC-KEMとほぼ同等の効率であって、かつ安全性ではそれらの方式よりも優れていることが分かる。
【００４２】
〔変形例等〕
なお、本発明は上述の実施の形態に限定されるものではない。例えば、上述の各実施形態のステップＳ８，Ｓ１３では、演算結果C1, C2と公開鍵z, wとをH関数入力値とした。しかし、演算結果C1, C2と公開鍵z, wとを含むその他の情報をH関数入力値としてもよい。また、演算結果C1, C2の一方と公開鍵z, wとをH関数入力値としてもよいし、演算結果C1, C2の一方と公開鍵z, wの一方とをH関数入力値としてもよいし、演算結果C1, C2の一方とその他の情報とをH関数入力値としてもよい。
【００４３】
また、第１実施形態のステップＳ１０，Ｓ１５では、演算結果σをシードとし、公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値を入力とした擬似ランダム関数Fσの関数値を算出し、その関数値を鍵K=Fσ(g1, g2, z, w, C1, C2)とした。また、第２実施形態のステップＳ１１１，Ｓ１１６では、演算結果σ1をシードとし、公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値を入力とした擬似ランダム関数Fσ1(g1, g2, z, w, C1, C2)の関数値と、当該演算結果σ2をシードとし、公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値を入力とした擬似ランダム関数Fσ2(g1, g2, z, w, C1, C2)の関数値との排他的論理和演算を行い、その演算結果を鍵K= Fσ1(g1, g2, z, w, C1, C2) (+) Fσ2(g1, g2, z, w, C1, C2)とした。しかし、第１，２実施形態において、「公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値」の代わりに他の情報を用いることとしてもよい。例えば、「公開鍵(g1, g2, z, w)と演算結果C1, C2とによって定まる値」の代わりに、「z, w, C1, C2によって定まる値」や「C1, C2によって定まる値」や「C1によって定まる値」や「g1, g2, z, w, C1, C2の一部によって定まる値」やnull値等を用いてもよい。
【００４４】
また、上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。例えば、ステップＳ１〜Ｓ４の処理は、この順序で行われる必要はない。具体的には、ステップＳ１の処理はステップＳ１４までの何れかに時点で実行されればよく、ステップＳ２の処理はステップＳ１５までの何れかに時点で実行されればよく、ステップＳ３，Ｓ４の処理はステップＳ６までの何れかの時点で実行されればよい。
その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
【００４５】
また、上述の構成をコンピュータによって実現する場合、各装置が有すべき機能の処理内容はプログラムによって記述される。そして、このプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。
この処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、例えば、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等どのようなものでもよいが、具体的には、例えば、磁気記録装置として、ハードディスク装置、フレキシブルディスク、磁気テープ等を、光ディスクとして、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ（Random Access Memory）、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）等を、光磁気記録媒体として、ＭＯ（Magneto-Optical disc）等を、半導体メモリとしてＥＥＰ−ＲＯＭ（Electronically Erasable and Programmable-Read Only Memory）等を用いることができる。
【００４６】
また、このプログラムの流通は、例えば、そのプログラムを記録したＤＶＤ、ＣＤ−ＲＯＭ等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。更に、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。
【００４７】
このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記録媒体に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、更に、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるＡＳＰ（Application Service Provider）型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの（コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等）を含むものとする。
【００４８】
また、この形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【産業上の利用可能性】
【００４９】
本発明の産業上の利用分野としては、例えば、共通鍵を共有して共通鍵暗号通信を行う暗号通信分野を例示できる。
【図面の簡単な説明】
【００５０】
【図１】図１（ａ）は、第１実施形態の鍵共有システム１の構成を例示した図である。図１（ｂ）は、第１装置のハードウェア構成を例示したブロック図である。
【図２】図２は、第１実施形態の第１装置及び第２装置の機能構成を例示したブロック図である。
【図３】図３は、第１実施形態の鍵共有処理を説明するためのフローチャートである。
【図４】図４は、第２実施形態の第１装置及び第２装置の機能構成を例示したブロック図である。
【図５】図５は、第２実施形態の鍵共有処理を説明するためのフローチャートである。
【符号の説明】
【００５１】
１０，１１０  第１装置
２０，１２０  第２装置
【図１】
0005038868.tif 000002
【図２】
0005038868.tif 000003
【図３】
0005038868.tif 000004
【図４】
0005038868.tif 000005
【図５】
0005038868.tif 000006