(57)【特許請求の範囲】
【請求項１】
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｓ∈Ｋｎに基づいてＮ組のメッセージを生成するメッセージ生成部と、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力して、Ｎ個の第１情報を選択する第１情報選択部と、
Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報を生成する第２情報生成部と、
Ｎ個の前記第１情報及びＮ個の前記第２情報を電子署名として、前記多次多変数多項式の組Ｆ及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する検証者に提供する署名提供部と、
を備え、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報であり、
前記多次多変数多項式の組Ｆは、Ｆｂ（ｘ，ｙ）＝ＦＡ（ｘ＋ｙ）−ＦＡ（ｘ）−ＦＡ（ｙ）で定義されるＦｂ（ｘ，ｙ）がｘ及びｙに関して双線形となる２次多項式ＦＡと、３次以上の次数を有する項との和で表現される、
情報処理装置。
【請求項２】
前記多次多変数多項式の組Ｆは、Ｆｂ（ｘ，ｙ）＝Ｆ（ｘ＋ｙ）−Ｆ（ｘ）−Ｆ（ｙ）で定義されるＦｂ（ｘ，ｙ）がｘ及びｙに関して双線形となるように設定される、
請求項１に記載の情報処理装置。
【請求項３】
前記多次多変数多項式の組Ｆは、前記公開鍵を生成するユーザ毎に異なる情報を用いて生成される、
請求項１に記載の情報処理装置。
【請求項４】
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する情報保持部と、
前記多次多変数多項式の組Ｆ及びベクトルｓ∈Ｋｎに基づいて生成されたＮ組のメッセージを取得するメッセージ取得部と、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力することで選択されたＮ個の第１情報と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報とで構成される電子署名を取得する署名取得部と、
前記メッセージ、前記多次多変数多項式の組Ｆ、前記ベクトルｙ、及び前記電子署名に基づいて前記文書Ｍの正当性を検証する署名検証部と、
を備え、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報であり、
前記多次多変数多項式の組Ｆは、Ｆｂ（ｘ，ｙ）＝ＦＡ（ｘ＋ｙ）−ＦＡ（ｘ）−ＦＡ（ｙ）で定義されるＦｂ（ｘ，ｙ）がｘ及びｙに関して双線形となる２次多項式ＦＡと、３次以上の次数を有する項との和で表現される、
情報処理装置。
【請求項５】
前記多次多変数多項式の組Ｆは、Ｆｂ（ｘ，ｙ）＝Ｆ（ｘ＋ｙ）−Ｆ（ｘ）−Ｆ（ｙ）で定義されるＦｂ（ｘ，ｙ）がｘ及びｙに関して双線形となるように設定される、
請求項４に記載の情報処理装置。
【請求項６】
前記多次多変数多項式の組Ｆは、前記公開鍵を生成するユーザ毎に異なる情報を用いて生成される、
請求項４に記載の情報処理装置。
【請求項７】
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｓ∈Ｋｎに基づいてＮ組のメッセージを生成するステップと、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力して、Ｎ個の第１情報を選択するステップと、
Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報を生成するステップと、
Ｎ個の前記第１情報及びＮ個の前記第２情報を電子署名として、前記多次多変数多項式の組Ｆ及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する検証者に提供するステップと、
を含み、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報であり、
前記多次多変数多項式の組Ｆは、Ｆｂ（ｘ，ｙ）＝ＦＡ（ｘ＋ｙ）−ＦＡ（ｘ）−ＦＡ（ｙ）で定義されるＦｂ（ｘ，ｙ）がｘ及びｙに関して双線形となる２次多項式ＦＡと、３次以上の次数を有する項との和で表現される、
プロセッサにより実行される署名提供方法。
【請求項８】
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持するステップと、
前記多次多変数多項式の組Ｆ及びベクトルｓ∈Ｋｎに基づいて生成されたＮ組のメッセージを取得するステップと、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力することで選択されたＮ個の第１情報と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報とで構成される電子署名を取得するステップと、
前記メッセージ、前記多次多変数多項式の組Ｆ、前記ベクトルｙ、及び前記電子署名に基づいて前記文書Ｍの正当性を検証するステップと、
を含み、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報であり、
前記多次多変数多項式の組Ｆは、Ｆｂ（ｘ，ｙ）＝ＦＡ（ｘ＋ｙ）−ＦＡ（ｘ）−ＦＡ（ｙ）で定義されるＦｂ（ｘ，ｙ）がｘ及びｙに関して双線形となる２次多項式ＦＡと、３次以上の次数を有する項との和で表現される、
プロセッサにより実行される署名検証方法。
【請求項９】
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｓ∈Ｋｎに基づいてＮ組のメッセージを生成するメッセージ生成機能と、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力して、Ｎ個の第１情報を選択する第１情報選択機能と、
Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報を生成する第２情報生成機能と、
Ｎ個の前記第１情報及びＮ個の前記第２情報を電子署名として、前記多次多変数多項式の組Ｆ及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する検証者に提供する署名提供機能と、
をコンピュータに実現させるためのプログラムであり、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報であり、
前記多次多変数多項式の組Ｆは、Ｆｂ（ｘ，ｙ）＝ＦＡ（ｘ＋ｙ）−ＦＡ（ｘ）−ＦＡ（ｙ）で定義されるＦｂ（ｘ，ｙ）がｘ及びｙに関して双線形となる２次多項式ＦＡと、３次以上の次数を有する項との和で表現される、
プログラム。
【請求項１０】
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する情報保持機能と、
前記多次多変数多項式の組Ｆ及びベクトルｓ∈Ｋｎに基づいて生成されたＮ組のメッセージを取得するメッセージ取得機能と、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力することで選択されたＮ個の第１情報と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報とで構成される電子署名を取得する署名取得機能と、
前記メッセージ、前記多次多変数多項式の組Ｆ、前記ベクトルｙ、及び前記電子署名に基づいて前記文書Ｍの正当性を検証する署名検証機能と、
をコンピュータに実現させるためのプログラムであり、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報であり、
前記多次多変数多項式の組Ｆは、Ｆｂ（ｘ，ｙ）＝ＦＡ（ｘ＋ｙ）−ＦＡ（ｘ）−ＦＡ（ｙ）で定義されるＦｂ（ｘ，ｙ）がｘ及びｙに関して双線形となる２次多項式ＦＡと、３次以上の次数を有する項との和で表現される、
プログラム。
【請求項１１】
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｓ∈Ｋｎに基づいてＮ組のメッセージを生成するメッセージ生成機能と、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力して、Ｎ個の第１情報を選択する第１情報選択機能と、
Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報を生成する第２情報生成機能と、
Ｎ個の前記第１情報及びＮ個の前記第２情報を電子署名として、前記多次多変数多項式の組Ｆ及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する検証者に提供する署名提供機能と、
をコンピュータに実現させるためのプログラムが記録された、コンピュータにより読み取り可能な記録媒体であり、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報であり、
前記多次多変数多項式の組Ｆは、Ｆｂ（ｘ，ｙ）＝ＦＡ（ｘ＋ｙ）−ＦＡ（ｘ）−ＦＡ（ｙ）で定義されるＦｂ（ｘ，ｙ）がｘ及びｙに関して双線形となる２次多項式ＦＡと、３次以上の次数を有する項との和で表現される、
記録媒体。
【請求項１２】
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する情報保持機能と、
前記多次多変数多項式の組Ｆ及びベクトルｓ∈Ｋｎに基づいて生成されたＮ組のメッセージを取得するメッセージ取得機能と、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力することで選択されたＮ個の第１情報と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報とで構成される電子署名を取得する署名取得機能と、
前記メッセージ、前記多次多変数多項式の組Ｆ、前記ベクトルｙ、及び前記電子署名に基づいて前記文書Ｍの正当性を検証する署名検証機能と、
をコンピュータに実現させるためのプログラムが記録された、コンピュータにより読み取り可能な記録媒体であり、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報であり、
前記多次多変数多項式の組Ｆは、Ｆｂ（ｘ，ｙ）＝ＦＡ（ｘ＋ｙ）−ＦＡ（ｘ）−ＦＡ（ｙ）で定義されるＦｂ（ｘ，ｙ）がｘ及びｙに関して双線形となる２次多項式ＦＡと、３次以上の次数を有する項との和で表現される、
記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本技術は、情報処理装置、署名提供方法、署名検証方法、プログラム、及び記録媒体に関する。
【背景技術】
【０００２】
情報処理技術や通信技術の急速な発展に伴い、公文書、私文書を問わず、文書の電子化が急速に進んでいる。これに伴い、多くの個人や企業は、電子文書の安全管理に大きな関心を寄せている。こうした関心の高まりを受け、各方面で電子文書の盗聴や偽造等のタンパリング行為に対する対抗策が盛んに研究されるようになってきた。電子文書の盗聴に対しては、例えば、電子文書を暗号化することにより安全性が確保される。また、電子文書の偽造に対しては、例えば、電子署名を利用することにより安全性が確保される。但し、利用する暗号や電子署名が高いタンパリング耐性を有していなければ、十分な安全性が保証されない。
【０００３】
電子署名は、電子文書の作成者を特定するために利用される。そのため、電子署名は、電子文書の作成者しか生成できないようにすべきである。仮に、悪意ある第三者が同じ電子署名を生成できてしまうと、その第三者が電子文書の作成者に成りすますことができてしまう。つまり、悪意ある第三者により電子文書が偽造されてしまう。こうした偽造を防止するため、電子署名の安全性については様々な議論が交わされてきた。現在広く利用されている電子署名方式としては、例えば、ＲＳＡ署名方式やＤＳＡ署名方式などが知られている。
【０００４】
ＲＳＡ署名方式は、「大きな合成数に対する素因数分解の困難性（以下、素因数分解問題）」を安全性の根拠とする。また、ＤＳＡ署名方式は、「離散対数問題に対する解の導出の困難性」を安全性の根拠とする。これらの根拠は、古典的なコンピュータを利用して素因数分解問題や離散対数問題を効率的に解くアルゴリズムが存在しないことに起因する。つまり、上記の困難性は、古典的なコンピュータにおける計算量的な困難性を意味する。しかしながら、量子コンピュータを用いると、素因数分解問題や離散対数問題に対する解答が効率的に算出されてしまうと言われている。
【０００５】
現在利用されている電子署名方式や公開鍵認証方式の多くは、ＲＳＡ署名方式やＤＳＡ署名方式と同様、素因数分解問題や離散対数問題の困難性に安全性の根拠をおいている。そのため、こうした電子署名方式や公開鍵認証方式は、量子コンピュータが実用化された場合に、その安全性が確保されないことになる。そこで、素因数分解問題や離散対数問題など、量子コンピュータにより容易に解かれてしまう問題とは異なる問題に安全性の根拠をおく新たな電子署名方式及び公開鍵認証方式の実現が求められている。量子コンピュータにより容易に解くことが難しい問題としては、例えば、多変数多項式問題がある。
【０００６】
多変数多項式問題に安全性の根拠をおく電子署名方式としては、例えば、ＭＩ（Ｍａｔｓｕｍｏｔｏ−Ｉｍａｉ  ｃｒｙｐｔｏｇｒａｐｈｙ）、ＨＦＥ（Ｈｉｄｄｅｎ  Ｆｉｅｌｄ  Ｅｑｕａｔｉｏｎ  ｃｒｙｐｔｏｇｒａｐｈｙ）、ＯＶ（Ｏｉｌ−Ｖｉｎｅｇａｒ  ｓｉｇｎａｔｕｒｅ  ｓｃｈｅｍｅ）、ＴＴＭ（Ｔａｍｅｄ  Ｔｒａｎｓｆｏｒｍａｔｉｏｎ  Ｍｅｔｈｏｄ  ｃｒｙｐｔｏｇｒａｐｈｙ）に基づく方式が知られている。例えば、下記の非特許文献１、２には、ＨＦＥに基づく電子署名方式が開示されている。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】Ｊａｃｑｕｅｓ  Ｐａｔａｒｉｎ  Ａｓｙｍｍｅｔｒｉｃ  Ｃｒｙｐｔｏｇｒａｐｈｙ  ｗｉｔｈ  ａ  Ｈｉｄｄｅｎ  Ｍｏｎｏｍｉａｌ．  ＣＲＹＰＴＯ  １９９６，  ｐｐ．４５−６０．
【非特許文献２】Ｐａｔａｒｉｎ，  Ｊ．，  Ｃｏｕｒｔｏｉｓ，  Ｎ．，  ａｎｄ  Ｇｏｕｂｉｎ，  Ｌ．  ＱＵＡＲＴＺ，  １２８−Ｂｉｔ  Ｌｏｎｇ  Ｄｉｇｉｔａｌ  Ｓｉｇｎａｔｕｒｅｓ．  Ｉｎ  Ｎａｃｃａｃｈｅ，Ｄ．，  Ｅｄ．  Ｔｏｐｉｃｓ  ｉｎ  Ｃｒｙｐｔｏｌｏｇｙ  −  ＣＴ−ＲＳＡ  ２００１  （Ｓａｎ  Ｆｒａｎｃｉｓｃｏ，  ＣＡ，  ＵＳＡ，  Ａｐｒｉｌ  ２００１），  ｖｏｌ．  ２０２０  ｏｆ  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ，  Ｓｐｒｉｎｇｅｒ−Ｖｅｒｌａｇ．，  ｐｐ．２８２−２９７．
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記の通り、多変数多項式問題は、量子コンピュータを用いても解くことが困難なＮＰ困難問題と呼ばれる問題の一例である。通常、ＨＦＥなどに代表される多変数多項式問題を利用した公開鍵認証方式は、特殊なトラップドアが仕込まれた多次多変数連立方程式を利用している。例えば、ｘ１，…，ｘｎに関する多次多変数連立方程式Ｆ（ｘ１，…，ｘｎ）＝ｙと線形変換Ａ及びＢが用意され、線形変換Ａ及びＢが秘密に管理される。この場合、多次多変数連立方程式Ｆ、線形変換Ａ及びＢがトラップドアとなる。
【０００９】
トラップドアＦ，Ａ，Ｂを知っているエンティティは、ｘ１，…，ｘｎに関する方程式Ｂ（Ｆ（Ａ（ｘ１，…，ｘｎ）））＝ｙ’を解くことができる。一方、トラップドアＦ，Ａ，Ｂを知らないエンティティは、ｘ１，…，ｘｎに関する方程式Ｂ（Ｆ（Ａ（ｘ１，…，ｘｎ）））＝ｙ’を解くことができない。この仕組みを利用することにより、多次多変数連立方程式の解答困難性を安全性の根拠とする公開鍵認証方式や電子署名方式が実現される。
【００１０】
上記の通り、こうした公開鍵認証方式や電子署名方式を実現するには、Ｂ（Ｆ（Ａ（ｘ１，…，ｘｎ）））＝ｙを満たすような特殊な多次多変数連立方程式を用意する必要がある。また、署名生成時に多次多変数連立方程式Ｆを解く必要がある。そのため、利用可能な多次多変数連立方程式Ｆは、比較的容易に解けるものに限られていた。すなわち、これまでの方式においては、比較的容易に解ける３つの関数（トラップドア）Ｂ、Ｆ、Ａを合成した形の多次多変数連立方程式Ｂ（Ｆ（Ａ（ｘ１，…，ｘｎ）））＝ｙしか用いることができず、十分な安全性を確保することが難しかった。
【００１１】
本技術は、上記の事情に鑑みて、効率的に解く手段（トラップドア）が知られていない多次多変数連立方程式を用いて高い安全性及び高い効率を有する電子署名方式を実現することが可能な、新規かつ改良された情報処理装置、署名提供方法、署名検証方法、プログラム、及び記録媒体の提供を意図して考案されたものである。
【課題を解決するための手段】
【００１２】
本技術のある観点によれば、環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｓ∈Ｋｎに基づいてＮ組のメッセージを生成するメッセージ生成部と、１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力して、Ｎ個の第１情報を選択する第１情報選択部と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報を生成する第２情報生成部と、Ｎ個の前記第１情報及びＮ個の前記第２情報を電子署名として、前記多次多変数多項式の組Ｆ及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する検証者に提供する署名提供部と、を備え、前記ベクトルｓは署名鍵であり、前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、情報処理装置が提供される。
【００１３】
また、本技術の別の観点によれば、環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する情報保持部と、前記多次多変数多項式の組Ｆ及びベクトルｓ∈Ｋｎに基づいて生成されたＮ組のメッセージを取得するメッセージ取得部と、１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力することで選択されたＮ個の第１情報と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報とで構成される電子署名を取得する署名取得部と、前記メッセージ、前記多次多変数多項式の組Ｆ、前記ベクトルｙ、及び前記電子署名に基づいて前記文書Ｍの正当性を検証する署名検証部と、を備え、前記ベクトルｓは署名鍵であり、前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、情報処理装置が提供される。
【００１４】
また、本技術の別の観点によれば、環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｓ∈Ｋｎに基づいてＮ組のメッセージを生成するステップと、１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力して、Ｎ個の第１情報を選択するステップと、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報を生成するステップと、Ｎ個の前記第１情報及びＮ個の前記第２情報を電子署名として、前記多次多変数多項式の組Ｆ及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する検証者に提供するステップと、を含み、前記ベクトルｓは署名鍵であり、前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、署名提供方法が提供される。
【００１５】
また、本技術の別の観点によれば、環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持するステップと、前記多次多変数多項式の組Ｆ及びベクトルｓ∈Ｋｎに基づいて生成されたＮ組のメッセージを取得するステップと、１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力することで選択されたＮ個の第１情報と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報とで構成される電子署名を取得するステップと、前記メッセージ、前記多次多変数多項式の組Ｆ、前記ベクトルｙ、及び前記電子署名に基づいて前記文書Ｍの正当性を検証するステップと、を含み、前記ベクトルｓは署名鍵であり、前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、署名検証方法が提供される。
【００１６】
また、本技術の別の観点によれば、環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｓ∈Ｋｎに基づいてＮ組のメッセージを生成するメッセージ生成機能と、１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力して、Ｎ個の第１情報を選択する第１情報選択機能と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報を生成する第２情報生成機能と、Ｎ個の前記第１情報及びＮ個の前記第２情報を電子署名として、前記多次多変数多項式の組Ｆ及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する検証者に提供する署名提供機能と、をコンピュータに実現させるためのプログラムであり、前記ベクトルｓは署名鍵であり、前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、プログラムが提供される。
【００１７】
また、本技術の別の観点によれば、環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する情報保持機能と、前記多次多変数多項式の組Ｆ及びベクトルｓ∈Ｋｎに基づいて生成されたＮ組のメッセージを取得するメッセージ取得機能と、１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力することで選択されたＮ個の第１情報と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報とで構成される電子署名を取得する署名取得機能と、前記メッセージ、前記多次多変数多項式の組Ｆ、前記ベクトルｙ、及び前記電子署名に基づいて前記文書Ｍの正当性を検証する署名検証機能と、をコンピュータに実現させるためのプログラムであり、前記ベクトルｓは署名鍵であり、前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、プログラムが提供される。
【００１８】
また、本技術の別の観点によれば、環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｓ∈Ｋｎに基づいてＮ組のメッセージを生成するメッセージ生成機能と、１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力して、Ｎ個の第１情報を選択する第１情報選択機能と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報を生成する第２情報生成機能と、Ｎ個の前記第１情報及びＮ個の前記第２情報を電子署名として、前記多次多変数多項式の組Ｆ及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する検証者に提供する署名提供機能と、をコンピュータに実現させるためのプログラムが記録された、コンピュータにより読み取り可能な記録媒体であり、前記ベクトルｓは署名鍵であり、前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、記録媒体が提供される。
【００１９】
また、本技術の別の観点によれば、環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する情報保持機能と、前記多次多変数多項式の組Ｆ及びベクトルｓ∈Ｋｎに基づいて生成されたＮ組のメッセージを取得するメッセージ取得機能と、１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力することで選択されたＮ個の第１情報と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報とで構成される電子署名を取得する署名取得機能と、前記メッセージ、前記多次多変数多項式の組Ｆ、前記ベクトルｙ、及び前記電子署名に基づいて前記文書Ｍの正当性を検証する署名検証機能と、をコンピュータに実現させるためのプログラムが記録された、コンピュータにより読み取り可能な記録媒体であり、前記ベクトルｓは署名鍵であり、前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、記録媒体が提供される。
【発明の効果】
【００２０】
以上説明したように本技術によれば、効率的に解く手段（トラップドア）が知られていない多次多変数連立方程式を用いて、高い安全性及び高い効率を有する公開鍵認証方式又は電子署名方式を実現することが可能になる。
【図面の簡単な説明】
【００２１】
【図１】公開鍵認証方式のアルゴリズム構成について説明するための説明図である。
【図２】電子署名方式のアルゴリズム構成について説明するための説明図である。
【図３】ｎパスの公開鍵認証方式について説明するための説明図である。
【図４】本技術の第１実施形態（３パス）に係る公開鍵認証方式のアルゴリズムについて説明するための説明図である。
【図５】同実施形態に係る公開鍵認証方式の拡張アルゴリズムについて説明するための説明図である。
【図６】同実施形態に係る公開鍵認証方式の並列化アルゴリズムについて説明するための説明図である。
【図７】同実施形態に係る公開鍵認証方式の具体的なアルゴリズムについて説明するための説明図である。
【図８】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムについて説明するための説明図である。
【図９】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムについて説明するための説明図である。
【図１０】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムについて説明するための説明図である。
【図１１】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムの並列化について説明するための説明図である。
【図１２】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムを電子署名方式のアルゴリズムに変形する方法について説明するための説明図である。
【図１３】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムを効率的な電子署名方式のアルゴリズムに変形する方法について説明するための説明図である。
【図１４】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムの並直列構成について説明するための説明図である。
【図１５】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムの直並列構成について説明するための説明図である。
【図１６】本技術の第２実施形態（５パス）に係る公開鍵認証方式のアルゴリズムについて説明するための説明図である。
【図１７】同実施形態に係る公開鍵認証方式の拡張アルゴリズムについて説明するための説明図である。
【図１８】同実施形態に係る公開鍵認証方式の並列化アルゴリズムについて説明するための説明図である。
【図１９】同実施形態に係る公開鍵認証方式の拡張アルゴリズムに対する並列化について説明するための説明図である。
【図２０】同実施形態に係る公開鍵認証方式の具体的なアルゴリズムについて説明するための説明図である。
【図２１】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムについて説明するための説明図である。
【図２２】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムについて説明するための説明図である。
【図２３】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムについて説明するための説明図である。
【図２４】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムについて説明するための説明図である。
【図２５】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムについて説明するための説明図である。
【図２６】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムについて説明するための説明図である。
【図２７】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムについて説明するための説明図である。
【図２８】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムの並列化について説明するための説明図である。
【図２９】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムの並列化について説明するための説明図である。
【図３０】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムの更なる効率化について説明するための説明図である。
【図３１】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムの更なる効率化について説明するための説明図である。
【図３２】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムの並直列構成について説明するための説明図である。
【図３３】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムの並直列構成について説明するための説明図である。
【図３４】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムの直並列構成について説明するための説明図である。
【図３５】同実施形態に係る公開鍵認証方式の効率的なアルゴリズムの直並列構成について説明するための説明図である。
【図３６】第１及び第２実施形態に係る対話プロトコルの頑強性を向上させるための工夫について説明するための説明図である。
【図３７】第１及び第２実施形態に係る対話プロトコルの頑強性を向上させるための工夫について説明するための説明図である。
【図３８】本技術の各実施形態に係るアルゴリズムを実行することが可能な情報処理装置のハードウェア構成例について説明するための説明図である。
【図３９】本技術の第１及び第２実施形態に係る公開鍵認証方式の効率を比較した図表である。
【図４０】本技術の第１及び第２実施形態に係る公開鍵認証方式において用いられるパラメータの好適な設定方法及びその効果について説明するための説明図である。
【発明を実施するための形態】
【００２２】
以下に添付図面を参照しながら、本技術の好適な実施の形態について詳細に説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略する。
【００２３】
［説明の流れについて］
ここで、以下に記載する本技術の実施形態に関する説明の流れについて簡単に述べる。まず、図１を参照しながら、公開鍵認証方式のアルゴリズム構成について説明する。次いで、図２を参照しながら、電子署名方式のアルゴリズム構成について説明する。次いで、図３を参照しながら、ｎパスの公開鍵認証方式について説明する。
【００２４】
次いで、図４を参照しながら、本技術の第１実施形態（３パス）に係る公開鍵認証方式のアルゴリズムについて説明する。次いで、図５を参照しながら、同実施形態に係る公開鍵認証方式の拡張アルゴリズムについて説明する。次いで、図６を参照しながら、同実施形態に係る公開鍵認証方式の並列化アルゴリズムについて説明する。次いで、図７を参照しながら、同実施形態に係る公開鍵認証方式の具体的なアルゴリズムについて説明する。次いで、図８〜図１５を参照しながら、同実施形態に係る公開鍵認証方式の効率的なアルゴリズム及びその変形例などについて説明する。
【００２５】
次いで、図１６を参照しながら、本技術の第２実施形態（５パス）に係る公開鍵認証方式のアルゴリズムについて説明する。次いで、図１７を参照しながら、同実施形態に係る公開鍵認証方式の拡張アルゴリズムについて説明する。次いで、図１８及び図１９を参照しながら、同実施形態に係る公開鍵認証方式の並列化アルゴリズムについて説明する。次いで、図２０を参照しながら、同実施形態に係る公開鍵認証方式の具体的なアルゴリズムについて説明する。次いで、図２１〜図３５を参照しながら、同実施形態に係る公開鍵認証方式の効率的なアルゴリズム及びその変形例などについて説明する。
【００２６】
次いで、本技術の第１及び第２実施形態に係る効率的なアルゴリズムを２次以上の多変数多項式に適用するための拡張手法について説明する。次いで、本技術の第１及び第２実施形態に係る対話プロトコルの頑強性を高める仕組みについて説明する。また、図３６及び図３７を参照しながら、イレギュラーな要求に起因する秘密鍵の漏洩を回避する仕組み及び偽証の機会をなくす仕組みについて述べる。次いで、図３８を参照しながら、本技術の第１及び第２実施形態に係る各アルゴリズムを実現することが可能な情報処理装置のハードウェア構成例について説明する。
【００２７】
最後に、本実施形態の技術的思想について纏め、当該技術的思想から得られる作用効果について簡単に説明する。
【００２８】
（説明項目）
１：はじめに
１−１：公開鍵認証方式のアルゴリズム
１−２：電子署名方式のアルゴリズム
１−３：ｎパスの公開鍵認証方式
２：第１実施形態
２−１：公開鍵認証方式のアルゴリズム
２−２：拡張アルゴリズム
２−３：並列化アルゴリズム
２−４：具体例（２次多項式を利用する場合）
２−５：効率的なアルゴリズム
２−６：電子署名方式への変形
２−６−１：変形方法
２−６−２：電子署名アルゴリズムの効率化
２−７：多次多変数連立方程式の形式
２−７−１：共通鍵ブロック暗号に関する形式
２−７−２：ハッシュ関数に関する形式
２−７−３：ストリーム暗号に関する形式
２−８：直列・並列ハイブリッドアルゴリズム
３：第２実施形態
３−１：公開鍵認証方式のアルゴリズム
３−２：拡張アルゴリズム
３−３：並列化アルゴリズム
３−４：具体例（２次多項式を利用する場合）
３−５：効率的なアルゴリズム
３−６：直列・並列ハイブリッドアルゴリズム
４：効率的なアルゴリズムの拡張
４−１：多変数多項式の高次化について
４−２：拡張方式（高次項の追加）
５：頑強性を高める仕組み
５−１：システムパラメータの設定方法
５−２：イレギュラーな要求に対する応答方法
５−２−１：証明者による応答方法について
５−２−２：検証者による応答方法について
６：ハードウェア構成例
７：まとめ
【００２９】
＜１：はじめに＞
はじめに、本技術に係る実施形態について詳細に説明するに先立ち、公開鍵認証方式のアルゴリズム、電子署名方式のアルゴリズム、及びｎパスの公開鍵認証方式について、その概要を簡単に説明する。
【００３０】
［１−１：公開鍵認証方式のアルゴリズム］
まず、図１を参照しながら、公開鍵認証方式のアルゴリズムについて概要を説明する。図１は、公開鍵認証方式のアルゴリズムについて概要を説明するための説明図である。
【００３１】
公開鍵認証は、ある人（証明者）が、公開鍵ｐｋ及び秘密鍵ｓｋを利用して、他の人（検証者）に本人であることを納得させるために利用される。例えば、証明者Ａの公開鍵ｐｋＡは、検証者Ｂに公開される。一方、証明者Ａの秘密鍵ｓｋＡは、証明者Ａにより秘密に管理される。公開鍵認証の仕組みにおいては、公開鍵ｐｋＡに対応する秘密鍵ｓｋＡを知る者が証明者Ａ本人であるとみなされる。
【００３２】
公開鍵認証の仕組みを利用して証明者Ａが証明者Ａ本人であることを検証者Ｂに証明するには、対話プロトコルを介して、証明者Ａが公開鍵ｐｋＡに対応する秘密鍵ｓｋＡを知っているという証拠を検証者Ｂに提示すればよい。そして、証明者Ａが秘密鍵ｓｋＡを知っているという証拠が検証者Ｂに提示され、その証拠を検証者Ｂが確認し終えた場合、証明者Ａの正当性（本人であること）が証明されたことになる。
【００３３】
但し、公開鍵認証の仕組みには、安全性を担保するために以下の条件が求められる。
【００３４】
１つ目の条件は、「対話プロトコルを実行した際に秘密鍵ｓｋを持たない偽証者により偽証が成立してしまう確率を限りなく小さくする」ことである。この１つ目の条件が成り立つことを「健全性」と呼ぶ。つまり、健全性とは、「秘密鍵ｓｋを持たない偽証者により、対話プロトコルの実行中に無視できない確率で偽証が成立することはないこと」と言い換えられる。２つ目の条件は、「対話プロトコルを実行したとしても、証明者Ａが有する秘密鍵ｓｋＡの情報が検証者Ｂに一切漏れることがない」ことである。この２つ目の条件が成り立つことを「零知識性」と呼ぶ。
【００３５】
安全に公開鍵認証を行うには、健全性及び零知識性を有する対話プロトコルを利用する必要がある。仮に、健全性及び零知識性を有しない対話プロトコルを用いて認証処理を行った場合には、偽証された可能性及び秘密鍵の情報が漏れてしまった可能性が否定できないため、処理自体が成功裡に完了しても証明者の正当性を証明したことにはならない。従って、対話プロトコルの健全性及び零知識性を如何に保証するかが重要になる。
【００３６】
（モデル）
公開鍵認証方式のモデルには、図１に示すように、証明者と検証者という２つのエンティティが存在する。証明者は、鍵生成アルゴリズムＧｅｎを用いて、証明者固有の秘密鍵ｓｋと公開鍵ｐｋの組を生成する。次いで、証明者は、鍵生成アルゴリズムＧｅｎを用いて生成した秘密鍵ｓｋと公開鍵ｐｋの組を利用して検証者と対話プロトコルを実行する。このとき、証明者は、証明者アルゴリズムＰを利用して対話プロトコルを実行する。上記の通り、証明者は、証明者アルゴリズムＰを利用し、対話プロトコルの中で秘密鍵ｓｋを保有している証拠を検証者に提示する。
【００３７】
一方、検証者は、検証者アルゴリズムＶを利用して対話プロトコルを実行し、証明者が公開している公開鍵に対応する秘密鍵を、その証明者が保有しているか否かを検証する。つまり、検証者は、証明者が公開鍵に対応する秘密鍵を保有しているか否かを検証するエンティティである。このように、公開鍵認証方式のモデルは、証明者と検証者という２つのエンティティ、及び、鍵生成アルゴリズムＧｅｎ、証明者アルゴリズムＰ、検証者アルゴリズムＶという３つのアルゴリズムにより構成される。
【００３８】
なお、以下の説明において、「証明者」「検証者」という表現を用いるが、これらの表現はあくまでもエンティティを意味するものである。従って、鍵生成アルゴリズムＧｅｎ、証明者アルゴリズムＰを実行する主体は、「証明者」のエンティティに対応する情報処理装置である。同様に、検証者アルゴリズムＶを実行する主体は、情報処理装置である。これら情報処理装置のハードウェア構成は、例えば、図３８に示した通りである。つまり、鍵生成アルゴリズムＧｅｎ、証明者アルゴリズムＰ、検証者アルゴリズムＶは、ＲＯＭ９０４、ＲＡＭ９０６、記憶部９２０、リムーバブル記録媒体９２８などに記録されたプログラムに基づいてＣＰＵ９０２などにより実行される。
【００３９】
（鍵生成アルゴリズムＧｅｎ）
鍵生成アルゴリズムＧｅｎは、証明者により利用される。鍵生成アルゴリズムＧｅｎは、証明者に固有の秘密鍵ｓｋと公開鍵ｐｋとの組を生成するアルゴリズムである。鍵生成アルゴリズムＧｅｎにより生成された公開鍵ｐｋは公開される。そして、公開された公開鍵ｐｋは、検証者により利用される。一方、鍵生成アルゴリズムＧｅｎにより生成された秘密鍵ｓｋは、証明者が秘密に管理する。そして、証明者により秘密に管理される秘密鍵ｓｋは、公開鍵ｐｋに対応する秘密鍵ｓｋを証明者が保有していることを検証者に対して証明するために利用される。形式的に、鍵生成アルゴリズムＧｅｎは、セキュリティパラメータ１λ（λは０以上の整数）を入力とし、秘密鍵ｓｋと公開鍵ｐｋを出力するアルゴリズムとして、下記の式（１）のように表現される。
【００４０】
【数１】
0005790291.tif 000002
【００４１】
（証明者アルゴリズムＰ）
証明者アルゴリズムＰは、証明者により利用される。証明者アルゴリズムＰは、公開鍵ｐｋに対応する秘密鍵ｓｋを証明者が保有していることを検証者に対して証明するためのアルゴリズムである。つまり、証明者アルゴリズムＰは、秘密鍵ｓｋと公開鍵ｐｋとを入力とし、対話プロトコルを実行するアルゴリズムである。
【００４２】
（検証者アルゴリズムＶ）
検証者アルゴリズムＶは、検証者により利用される。検証者アルゴリズムＶは、対話プロトコルの中で、公開鍵ｐｋに対応する秘密鍵ｓｋを証明者が保有しているか否かを検証するアルゴリズムである。検証者アルゴリズムＶは、公開鍵ｐｋを入力とし、対話プロトコルの実行結果に応じて０又は１（１ｂｉｔ）を出力するアルゴリズムである。なお、検証者は、検証者アルゴリズムＶが０を出力した場合には証明者が不正なものであると判断し、１を出力した場合には証明者が正当なものであると判断する。形式的に、検証者アルゴリズムＶは、下記の式（２）のように表現される。
【００４３】
【数２】
0005790291.tif 000003
【００４４】
上記の通り、意味のある公開鍵認証を実現するには、対話プロトコルが健全性及び零知識性という２つの条件を満たしている必要がある。しかし、証明者が秘密鍵ｓｋを保有していることを証明するためには、証明者が秘密鍵ｓｋに依存した手続きを実行し、その結果を検証者に通知した上で、その通知内容に基づく検証を検証者に実行させる必要がある。秘密鍵ｓｋに依存した手続きを実行するのは、健全性を担保するために必要である。一方で、秘密鍵ｓｋの情報が一切検証者に漏れないようにする必要がある。そのため、これらの要件を満たすように、上記の鍵生成アルゴリズムＧｅｎ、証明者アルゴリズムＰ、検証者アルゴリズムＶを巧妙に設計する必要がある。
【００４５】
以上、公開鍵認証方式のアルゴリズムについて、その概要を説明した。
【００４６】
［１−２：電子署名方式のアルゴリズム］
次に、図２を参照しながら、電子署名方式のアルゴリズムについて概要を説明する。図２は、電子署名方式のアルゴリズムについて概要を説明するための説明図である。
【００４７】
紙文書とは異なり、ある電子化されたデータに対して押印したり署名を記載したりすることはできない。そのため、電子化されたデータの作成者を証明するためには、紙文書に押印したり署名を記載したりするのと同等の効果が得られる電子的な仕組みを必要とする。この仕組みが電子署名である。電子署名とは、データの作成者しか知らない署名データをデータに関連付けて受領者に提供し、その署名データを受領者側で検証する仕組みのことを言う。
【００４８】
（モデル）
電子署名方式のモデルには、図２に示すように、署名者及び検証者という２つのエンティティが存在する。そして、電子署名方式のモデルは、鍵生成アルゴリズムＧｅｎ、署名生成アルゴリズムＳｉｇ、署名検証アルゴリズムＶｅｒという３つのアルゴリズムにより構成される。
【００４９】
署名者は、鍵生成アルゴリズムＧｅｎを利用して署名者固有の署名鍵ｓｋと検証鍵ｐｋとの組を生成する。また、署名者は、署名生成アルゴリズムＳｉｇを利用して文書Ｍに付与する電子署名σを生成する。つまり、署名者は、文書Ｍに電子署名を付与するエンティティである。一方、検証者は、署名検証アルゴリズムＶｅｒを利用して文書Ｍに付与された電子署名σを検証する。つまり、検証者は、文書Ｍの作成者が署名者であるか否かを確認するために、電子署名σを検証するエンティティである。
【００５０】
なお、以下の説明において、「署名者」「検証者」という表現を用いるが、これらの表現はあくまでもエンティティを意味するものである。従って、鍵生成アルゴリズムＧｅｎ、署名生成アルゴリズムＳｉｇを実行する主体は、「署名者」のエンティティに対応する情報処理装置である。同様に、署名検証アルゴリズムＶｅｒを実行する主体は、情報処理装置である。これら情報処理装置のハードウェア構成は、例えば、図３８に示した通りである。つまり、鍵生成アルゴリズムＧｅｎ、署名生成アルゴリズムＳｉｇ、署名検証アルゴリズムＶｅｒは、ＲＯＭ９０４、ＲＡＭ９０６、記憶部９２０、リムーバブル記録媒体９２８などに記録されたプログラムに基づいてＣＰＵ９０２などにより実行される。
【００５１】
（鍵生成アルゴリズムＧｅｎ）
鍵生成アルゴリズムＧｅｎは、署名者により利用される。鍵生成アルゴリズムＧｅｎは、署名者固有の署名鍵ｓｋと検証鍵ｐｋとの組を生成するアルゴリズムである。鍵生成アルゴリズムＧｅｎにより生成された検証鍵ｐｋは公開される。一方、鍵生成アルゴリズムＧｅｎにより生成された署名鍵ｓｋは、署名者により秘密に管理される。そして、署名鍵ｓｋは、文書Ｍに付与される電子署名σの生成に利用される。例えば、鍵生成アルゴリズムＧｅｎは、セキュリティパラメータ１λ（λは０以上の整数）を入力とし、署名鍵ｓｋ及び公開鍵ｐｋを出力する。この場合、鍵生成アルゴリズムＧｅｎは、形式的に、下記の式（３）のように表現することができる。
【００５２】
【数３】
0005790291.tif 000004
【００５３】
（署名生成アルゴリズムＳｉｇ）
署名生成アルゴリズムＳｉｇは、署名者により利用される。署名生成アルゴリズムＳｉｇは、文書Ｍに付与される電子署名σを生成するアルゴリズムである。署名生成アルゴリズムＳｉｇは、署名鍵ｓｋと文書Ｍとを入力とし、電子署名σを出力するアルゴリズムである。この署名生成アルゴリズムＳｉｇは、形式的に、下記の式（４）のように表現することができる。
【００５４】
【数４】
0005790291.tif 000005
【００５５】
（署名検証アルゴリズムＶｅｒ）
署名検証アルゴリズムＶｅｒは、検証者により利用される。署名検証アルゴリズムＶｅｒは、電子署名σが文書Ｍに対する正当な電子署名であるか否かを検証するアルゴリズムである。署名検証アルゴリズムＶｅｒは、署名者の検証鍵ｐｋ、文書Ｍ、電子署名σを入力とし、０又は１（１ｂｉｔ）を出力するアルゴリズムである。この署名検証アルゴリズムＶｅｒは、形式的に、下記の式（５）のように表現することができる。なお、検証者は、署名検証アルゴリズムＶｅｒが０を出力した場合（公開鍵ｐｋが文書Ｍと電子署名σを拒否する場合）に電子署名σが不当であると判断し、１を出力した場合（公開鍵ｐｋが文書Ｍと電子署名σを受理する場合）に電子署名σが正当であると判断する。
【００５６】
【数５】
0005790291.tif 000006
【００５７】
以上、電子署名方式のアルゴリズムについて、その概要を説明した。
【００５８】
［１−３：ｎパスの公開鍵認証方式］
次に、図３を参照しながら、ｎパスの公開鍵認証方式について説明する。図３は、ｎパスの公開鍵認証方式について説明するための説明図である。
【００５９】
上記の通り、公開鍵認証方式は、対話プロトコルの中で、証明者が公開鍵ｐｋに対応する秘密鍵ｓｋを保有していることを検証者に証明する認証方式である。また、対話プロトコルは、健全性及び零知識性という２つの条件を満たす必要がある。そのため、対話プロトコルの中では、図３に示すように、証明者及び検証者の双方がそれぞれ処理を実行しながらｎ回の情報交換を行う。
【００６０】
ｎパスの公開鍵認証方式の場合、証明者アルゴリズムＰを用いて証明者により処理（工程＃１）が実行され、情報Ｔ１が検証者に送信される。次いで、検証者アルゴリズムＶを用いて検証者により処理（工程＃２）が実行され、情報Ｔ２が証明者に送信される。さらに、ｋ＝３〜ｎについて処理の実行及び情報Ｔｋの送信が順次行われ、最後に処理（工程＃ｎ＋１）が実行される。このように、情報がｎ回送受信される方式のことを「ｎパス」の公開鍵認証方式と呼ぶ。
【００６１】
以上、ｎパスの公開鍵認証方式について説明した。
【００６２】
＜２：第１実施形態＞
以下、本技術の第１実施形態について説明する。本実施形態は、多次多変数連立方程式に対する求解問題の困難性に安全性の根拠をおく公開鍵認証方式及び電子署名方式に関する。但し、本実施形態は、ＨＦＥ電子署名方式などの従来手法とは異なり、効率的に解く手段（トラップドア）を持たない多次多変数連立方程式を利用する公開鍵認証方式及び電子署名方式に関する。
【００６３】
［２−１：公開鍵認証方式のアルゴリズム］
まず、図４を参照しながら、本実施形態に係る公開鍵認証方式（以下、本手法）のアルゴリズムについて説明する。図４は、本手法のアルゴリズムについて説明するための説明図である。なお、本手法は、鍵生成アルゴリズムＧｅｎ、証明者アルゴリズムＰ、検証者アルゴリズムＶにより構成される。以下、各アルゴリズムの構成について説明する。
【００６４】
（鍵生成アルゴリズムＧｅｎ）
鍵生成アルゴリズムＧｅｎは、環Ｋ上で定義されるｍ本の多変数多項式ｆ１（ｘ１，…，ｘｎ），…，ｆｍ（ｘ１，…，ｘｎ）、及びベクトルｓ＝（ｓ１，…，ｓｎ）∈Ｋｎを生成する。次に、鍵生成アルゴリズムＧｅｎは、ｙ＝（ｙ１，…，ｙｍ）←（ｆ１（ｓ），…，ｆｍ（ｓ））を計算する。そして、鍵生成アルゴリズムＧｅｎは、（ｆ１（ｘ１，…，ｘｎ），…，ｆｍ（ｘ１，…，ｘｎ），ｙ）を公開鍵ｐｋに設定し、ｓを秘密鍵に設定する。なお、以下では、ベクトル（ｘ１，…，ｘｎ）をｘと表記し、多変数多項式の組（ｆ１（ｘ），…，ｆｍ（ｘ））をＦ（ｘ）と表記することにする。
【００６５】
（証明者アルゴリズムＰ、検証者アルゴリズムＶ）
次に、図４を参照しながら、対話プロトコルの中で証明者アルゴリズムＰが実行する処理及び検証者アルゴリズムＶが実行する処理について説明する。
【００６６】
上記の対話プロトコルの中で、証明者は、秘密鍵ｓの情報を検証者に一切漏らさずに、「自身がｙ＝Ｆ（ｓ）を満たすｓを知っていること」を検証者に示す。一方、検証者は、証明者がｙ＝Ｆ（ｓ）を満たすｓを知っているか否かを検証する。なお、公開鍵ｐｋは、検証者に公開されているものとする。また、秘密鍵ｓは、証明者により秘密に管理されているものとする。以下、図４に示したフローチャートに沿って説明を進める。
【００６７】
工程＃１：
まず、証明者アルゴリズムＰは、任意に数ｗを選択する。次いで、証明者アルゴリズムＰは、擬似乱数生成器Ｇ１に数ｗを適用してベクトルｒ∈Ｋｎ及び数ｗＡを生成する。つまり、証明者アルゴリズムＰは、（ｒ，ｗＡ）←Ｇ１（ｗ）を計算する。次いで、証明者アルゴリズムＰは、擬似乱数生成器Ｇ２に数ｗＡを適用して多変数多項式ＦＡ（ｘ）＝（ｆＡ１（ｘ），…，ｆＡｍ（ｘ））を生成する。つまり、証明者アルゴリズムＰは、ＦＡ←Ｇ２（ｗＡ）を計算する。
【００６８】
工程＃１（続き）：
次いで、証明者アルゴリズムＰは、ｚ←ｓ−ｒを計算する。この計算は、秘密鍵ｓをベクトルｒによりマスクする操作に相当する。さらに、証明者アルゴリズムＰは、ＦＢ（ｘ）←Ｆ（ｘ＋ｒ）＋ＦＡ（ｘ）を計算する。この計算は、ｘに関して多変数多項式Ｆ（ｘ＋ｒ）を多変数多項式ＦＡ（ｘ）によりマスクする操作に相当する。
【００６９】
工程＃１（続き）：
次いで、証明者アルゴリズムＰは、ＦＡ（ｚ）及びｚのハッシュ値ｃ１を生成する。つまり、証明者アルゴリズムＰは、ｃ１←Ｈ１（ＦＡ（ｚ），ｚ）を計算する。また、証明者アルゴリズムＰは、数ｗＡのハッシュ値ｃ２を生成する。つまり、証明者アルゴリズムＰは、ｃ２←Ｈ２（ｗＡ）を計算する。さらに、証明者アルゴリズムＰは、多変数多項式ＦＢのハッシュ値ｃ３を生成する。つまり、証明者アルゴリズムＰは、ｃ３←Ｈ３（ＦＢ（ｘ））を計算する。なお、上記のＨ１（…）、Ｈ２（…）、Ｈ３（…）は、ハッシュ関数である。このハッシュ値（ｃ１，ｃ２，ｃ３）は、メッセージとして検証者アルゴリズムＶに送られる。このとき、ｓに関する情報、ｒに関する情報、ｚに関する情報が検証者に一切漏れない点に注意されたい。
【００７０】
工程＃２：
メッセージ（ｃ１，ｃ２，ｃ３）を受け取った検証者アルゴリズムＶは、３つの検証パターンのうち、どの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムＶは、検証パターンの種類を表す３つの数値｛０，１，２｝の中から１つの数値を選択し、選択した数値を要求ｄに設定する。この要求ｄは証明者アルゴリズムＰに送られる。
【００７１】
工程＃３：
要求ｄを受け取った証明者アルゴリズムＰは、受け取った要求ｄに応じて検証者アルゴリズムＶに送る返答σを生成する。ｄ＝０の場合、証明者アルゴリズムＰは、返答σ＝ｗを生成する。ｄ＝１の場合、証明者アルゴリズムＰは、返答σ＝（ｗＡ，ｚ）を生成する。ｄ＝２の場合、証明者アルゴリズムＰは、返答σ＝（ＦＢ（ｚ），ｚ）を生成する。工程＃３で生成された返答σは、検証者アルゴリズムＶに送られる。このとき、ｄ＝０の場合にはｚに関する情報が検証者に一切漏れておらず、ｄ＝１又は２の場合にはｒに関する情報が検証者に一切漏れない点に注意されたい。
【００７２】
工程＃４：
返答σを受け取った検証者アルゴリズムＶは、受け取った返答σを利用して以下の検証処理を実行する。
【００７３】
ｄ＝０の場合、検証者アルゴリズムＶは、（ｒＡ，ｗＢ）←Ｇ１（σ）を計算する。さらに、検証者アルゴリズムＶは、ＦＣ←Ｇ２（ｗＢ）を計算する。そして、検証者アルゴリズムＶは、ｃ２＝Ｈ２（ｗＢ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ｃ３＝Ｈ３（Ｆ（ｘ＋ｒＡ）＋ＦＣ（ｘ））の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【００７４】
ｄ＝１の場合、検証者アルゴリズムＶは、（ｗＢ，ｚＡ）←σとする。さらに、検証者アルゴリズムＶは、ＦＣ←Ｇ２（ｗＢ）を計算する。そして、検証者アルゴリズムＶは、ｃ１＝Ｈ１（ＦＣ（ｚＡ），ｚＡ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ｃ２＝Ｈ２（ｗＢ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【００７５】
ｄ＝２の場合、検証者アルゴリズムＶは、（ＦＤ，ｚＡ）←σとする。そして、検証者アルゴリズムＶは、ｃ１＝Ｈ１（ＦＤ（ｚＡ）−ｙ，ｚＡ））の等号が成り立つか否かを検証する。さらに、検証者アルゴリズムＶは、ｃ３＝Ｈ３（ＦＤ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【００７６】
以上、本手法に係る各アルゴリズムの構成について説明した。
【００７７】
（本手法の健全性について）
ここで、本手法の健全性について説明を補足する。本手法の健全性は、「検証者アルゴリズムＶが選択可能な要求ｄ＝０，１，２の全てについて、証明者アルゴリズムＰが正しい返答σを返したならば、下記の式（６）及び式（７）を満たすＦＤ、ＦＣ、ｒＡ、ｚＡが計算可能になる」という論理に基づいて保証されている。
【００７８】
【数６】
0005790291.tif 000007
【００７９】
上記の健全性が保証されることにより、多次多変数連立方程式の求解問題を解かない限りにおいて２／３より高い確率で偽証が成功することは不可能であると保証される。つまり、検証者の要求ｄ＝０，１，２の全てに正しく回答するためには、偽証者が上記の式（６）及び式（７）を満たすＦＤ、ＦＣ、ｒＡ、ｚＡを計算できる必要がある。言い換えると、偽証者はＦ（ｓ）＝ｙを満たすｓを計算できる必要がある。但し、検証者の要求ｄ＝０，１，２の高々２つについて偽証者が正しく回答できてしまう可能性は残る。そのため、偽証の成功確率は２／３となる。なお、上記の対話プロトコルを十分な回数実行することで、偽証の成功確率は無視できるほど小さくなる。
【００８０】
以上、本手法の健全性について説明した。
【００８１】
（変形例）
ここで、上記アルゴリズムの一変形例を紹介する。上記の鍵生成アルゴリズムＧｅｎは、ｙ←Ｆ（ｓ）を計算し、公開鍵を（Ｆ，ｙ）に設定していた。一方、本変形例において、鍵生成アルゴリズムＧｅｎは、（ｙ１，…，ｙｍ）←Ｆ（ｓ）及び（ｆ１＊（ｘ），…，ｆｍ＊（ｘ））←（ｆ１（ｘ）−ｙ１，…，ｆｍ（ｘ）−ｙｍ）を計算し、公開鍵を（ｆ１＊，…，ｆｍ＊）に設定する。このように変形すると、ｙ＝０として対話プロトコルを実行することが可能になる。
【００８２】
また、上記の証明者アルゴリズムＰは、ＦＢ（ｚ）及びｚからメッセージｃ１を生成していた。しかし、ＦＢ（ｚ）＝ＦＡ（ｚ）の関係があることにより、ＦＡ（ｚ）及びｚからメッセージｃ１を生成するように変形しても、同様の対話プロトコルが実現される。また、ＦＢ（ｚ）のハッシュ値とｚのハッシュ値とを別々に計算し、それぞれをメッセージとして検証者アルゴリズムＶに送るように証明者アルゴリズムＰの構成を変形してもよい。
【００８３】
また、上記の証明者アルゴリズムＰは、数ｗに擬似乱数生成器Ｇ１を適用してベクトルｒ及び数ｗＡを生成していた。また、上記の証明者アルゴリズムＰは、数ｗＡを擬似乱数生成器Ｇ２に適用して多変数多項式ＦＡ（ｘ）を生成していた。しかし、Ｇ１を恒等写像とし、最初からｗ＝（ｒ，ＦＡ）を算出するように証明者アルゴリズムＰの構成を変形してもよい。この場合には、数ｗをＧ１に適用する必要はない。なお、Ｇ２についても同様である。
【００８４】
また、上記の対話プロトコルにおいては公開鍵を（Ｆ，ｙ）としている。公開鍵に含まれる多変数多項式Ｆは秘密鍵ｓｋに依らないパラメータである。そのため、証明者毎に多変数多項式Ｆを設定せず、システム全体で共通の多変数多項式Ｆを利用するように構成されていてもよい。この場合、証明者毎に設定される公開鍵はｙだけで済むことになり、公開鍵のサイズを小さくすることが可能になる。但し、安全性の観点から、証明者毎に多変数多項式Ｆを設定する方が好ましいケースも考えられる。このようなケースにおける多変数多項式Ｆの設定方法については後段において詳述する。
【００８５】
また、上記の対話プロトコルにおいては公開鍵を（ｆ１，…，ｆｍ，ｙ）としているが、Ｆ＝（ｆ１，…，ｆｍ）は適当に選択してもよいパラメータである。そのため、証明者及び検証者は、例えば、乱数のシードｗｐｋを用意し、擬似乱数生成器Ｇ＊を利用してＦ←Ｇ＊（ｗｐｋ）を計算してもよい。この場合、公開鍵は（ｗｐｋ，ｙ）となり、（Ｆ，ｙ）を公開鍵として公開する場合よりも、公開鍵のサイズを小さくすることが可能になる。
【００８６】
上記のアルゴリズムでは、ハッシュ関数Ｈ１，Ｈ２，Ｈ３を用いてｃ１，ｃ２，ｃ３を計算しているが、ハッシュ関数の代わりにコミットメント関数ＣＯＭを用いてもよい。コミットメント関数ＣＯＭは、文字列Ｓと乱数ρの２つを引数にとる関数である。コミットメント関数の例としては、Ｓｈａｉ  ＨａｌｅｖｉとＳｉｌｖｉｏ  Ｍｉｃａｌｉによって国際会議ＣＲＹＰＴＯ１９９６で発表された方式などがある。
【００８７】
このコミットメント関数を用いる場合、ｃ１，ｃ２，ｃ３を計算する前に、乱数ρ１，ρ２，ρ３を用意し、ハッシュ関数Ｈ１（・），Ｈ２（・），Ｈ３（・）を適用する代わりにコミットメント関数ＣＯＭ（・，ρ１），ＣＯＭ（・，ρ２），ＣＯＭ（・，ρ２）を適用してｃ１，ｃ２，ｃ３を生成する。但し、検証者がｃｉを生成するために必要なρｉは、返答σに含めて送られる。なお、これらの変形は、後述する全てのアルゴリズムに適用可能である。
【００８８】
以上、本手法の変形例について説明した。
【００８９】
［２−２：拡張アルゴリズム］
次に、図５を参照しながら、本手法を拡張した公開鍵認証方式（以下、拡張手法）のアルゴリズムについて説明する。図５は、拡張手法に基づく対話プロトコルの流れについて説明するための説明図である。
【００９０】
ここで説明する拡張手法は、１パス目に送信するメッセージ（ｃ１，ｃ２，ｃ３）を１つのハッシュ値ｃに変換して検証者に送るというものである。但し、３パス目で送る返答σを用いても復元できないメッセージについては、返答σと共に検証者に送られる。この拡張手法を適用すると、対話プロトコルの中で検証者に送る情報量を減らすことが可能になる。以下、拡張手法に係る各アルゴリズムの構成について詳細に説明する。
【００９１】
（鍵生成アルゴリズムＧｅｎ）
鍵生成アルゴリズムＧｅｎは、環Ｋ上で定義されるｍ本の多変数多項式ｆ１（ｘ１，…，ｘｎ），…，ｆｍ（ｘ１，…，ｘｎ）、及びベクトルｓ＝（ｓ１，…，ｓｎ）∈Ｋｎを生成する。次に、鍵生成アルゴリズムＧｅｎは、ｙ＝（ｙ１，…，ｙｍ）←（ｆ１（ｓ），…，ｆｍ（ｓ））を計算する。そして、鍵生成アルゴリズムＧｅｎは、（ｆ１（ｘ１，…，ｘｎ），…，ｆｍ（ｘ１，…，ｘｎ），ｙ）を公開鍵ｐｋに設定し、ｓを秘密鍵に設定する。なお、以下では、ベクトル（ｘ１，…，ｘｎ）をｘと表記し、多変数多項式の組（ｆ１（ｘ），…，ｆｍ（ｘ））をＦ（ｘ）と表記することにする。
【００９２】
（証明者アルゴリズムＰ、検証者アルゴリズムＶ）
次に、図５を参照しながら、対話プロトコルの中で証明者アルゴリズムＰが実行する処理及び検証者アルゴリズムＶが実行する処理について説明する。
【００９３】
上記の対話プロトコルの中で、証明者は、秘密鍵ｓの情報を検証者に一切漏らさずに、「自身がｙ＝Ｆ（ｓ）を満たすｓを知っていること」を検証者に示す。一方、検証者は、証明者がｙ＝Ｆ（ｓ）を満たすｓを知っているか否かを検証する。なお、公開鍵ｐｋは、検証者に公開されているものとする。また、秘密鍵ｓは、証明者により秘密に管理されているものとする。以下、図５に示したフローチャートに沿って説明を進める。
【００９４】
工程＃１：
まず、証明者アルゴリズムＰは、任意に数ｗを選択する。次いで、証明者アルゴリズムＰは、擬似乱数生成器Ｇ１に数ｗを適用してベクトルｒ∈Ｋｎと数ｗＡを生成する。つまり、証明者アルゴリズムＰは、（ｒ，ｗＡ）←Ｇ１（ｗ）を計算する。次いで、証明者アルゴリズムＰは、擬似乱数生成器Ｇ２に数ｗＡを適用して多変数多項式ＦＡ（ｘ）＝（ｆＡ１（ｘ），…，ｆＡｍ（ｘ））を生成する。つまり、証明者アルゴリズムＰは、ＦＡ←Ｇ２（ｗＡ）を計算する。
【００９５】
工程＃１（続き）：
次いで、証明者アルゴリズムＰは、ｚ←ｓ−ｒを計算する。この計算は、秘密鍵ｓをベクトルｒによりマスクする操作に相当する。さらに、証明者アルゴリズムＰは、ＦＢ（ｘ）←Ｆ（ｘ＋ｒ）＋ＦＡ（ｘ）を計算する。この計算は、ｘについての多項式の組Ｆ（ｘ＋ｒ）を多項式の組ＦＡ（ｘ）によりマスクする操作に相当する。
【００９６】
工程＃１（続き）：
次いで、証明者アルゴリズムＰは、ＦＢ（ｚ）とｚのハッシュ値ｃ１を生成する。つまり、証明者アルゴリズムＰは、ｃ１←Ｈ１（ＦＢ（ｚ），ｚ）を計算する。また、証明者アルゴリズムＰは、数ｗＡのハッシュ値ｃ２を生成する。つまり、証明者アルゴリズムＰは、ｃ２←Ｈ２（ｗＡ）を計算する。さらに、証明者アルゴリズムＰは、多項式の組ＦＢのハッシュ値ｃ３を生成する。つまり、証明者アルゴリズムＰは、ｃ３←Ｈ３（ＦＢ）を計算する。なお、上記のＨ１（…）、Ｈ２（…）、Ｈ３（…）は、ハッシュ関数である。拡張方式の場合、証明者アルゴリズムＰは、ハッシュ値の組（ｃ１，ｃ２，ｃ３）をハッシュ関数Ｈに適用してハッシュ値ｃを生成し、生成したハッシュ値ｃを検証者アルゴリズムＶに送る。
【００９７】
工程＃２：
ハッシュ値ｃを受け取った検証者アルゴリズムＶは、３つの検証パターンのうち、どの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムＶは、検証パターンの種類を表す３つの数値｛０，１，２｝の中から１つの数値を選択し、選択した数値を要求ｄに設定する。この要求ｄは証明者アルゴリズムＰに送られる。
【００９８】
工程＃３：
要求ｄを受け取った証明者アルゴリズムＰは、受け取った要求ｄに応じて検証者アルゴリズムＶに送る返答σを生成する。ｄ＝０の場合、証明者アルゴリズムＰは、返答（σ，ｃ＊）＝（ｗ，ｃ１）を生成する。ｄ＝１の場合、証明者アルゴリズムＰは、返答（σ，ｃ＊）＝（（ｗＡ，ｚ），ｃ３）を生成する。ｄ＝２の場合、証明者アルゴリズムＰは、返答（σ，ｃ＊）＝（（ＦＢ，ｚ），ｃ２）を生成する。工程＃３で生成された返答（σ，ｃ＊）は、検証者アルゴリズムＶに送られる。
【００９９】
工程＃４：
返答σを受け取った検証者アルゴリズムＶは、受け取った返答（σ，ｃ＊）を利用して以下の検証処理を実行する。
【０１００】
ｄ＝０の場合、検証者アルゴリズムＶは、（ｒＡ，ｗＢ）←Ｇ１（σ）を計算する。次いで、検証者アルゴリズムＶは、ＦＣ←Ｇ２（ｗＢ）を計算する。次いで、検証者アルゴリズムＶは、ｃ２Ａ＝Ｈ２（ｗＢ）を計算する。次いで、検証者アルゴリズムＶは、ｃ３Ａ＝Ｈ３（Ｆ（ｘ＋ｒＡ）＋ＦＣ（ｘ））を計算する。その後、検証者アルゴリズムＶは、ｃ＝Ｈ（ｃ＊，ｃ２Ａ，ｃ３Ａ）の等号が成り立つか否かを検証する。そして、検証者アルゴリズムＶは、検証が成功した場合に認証成功を示す値１を出力し、検証が失敗した場合に認証失敗を示す値０を出力する。
【０１０１】
ｄ＝１の場合、検証者アルゴリズムＶは、（ｗＢ，ｚＡ）←σとする。次いで、検証者アルゴリズムＶは、ＦＣ←Ｇ２（ｗＢ）を計算する。次いで、検証者アルゴリズムＶは、ｃ１Ａ＝Ｈ１（ＦＣ（ｚＡ），ｚＡ）を計算する。次いで、検証者アルゴリズムＶは、ｃ２Ａ＝Ｈ２（ｗＢ）を計算する。その後、検証者アルゴリズムＶは、ｃ＝Ｈ（ｃ１Ａ，ｃ２Ａ，ｃ＊）の等号が成り立つか否かを検証する。そして、検証者アルゴリズムＶは、検証が成功した場合に認証成功を示す値１を出力し、検証が失敗した場合に認証失敗を示す値０を出力する。
【０１０２】
ｄ＝２の場合、検証者アルゴリズムＶは、（ＦＤ，ｚＡ）←σとする。次いで、検証者アルゴリズムＶは、ｃ１Ａ＝Ｈ１（ＦＤ（ｚＡ）−ｙ，ｚＡ）を計算する。次いで、検証者アルゴリズムＶは、ｃ３Ａ＝Ｈ３（ＦＤ）を計算する。その後、検証者アルゴリズムＶは、ｃ＝Ｈ（ｃ１Ａ，ｃ＊，ｃ３Ａ）の等号が成り立つか否かを検証する。そして、検証者アルゴリズムＶは、検証が成功した場合に認証成功を示す値１を出力し、検証が失敗した場合に認証失敗を示す値０を出力する。
【０１０３】
以上、拡張手法に係る各アルゴリズムの構成について説明した。拡張手法を適用することにより、対話プロトコルの中で送受信される情報量を削減することが可能になる。
【０１０４】
［２−３：並列化アルゴリズム］
先に述べた通り、本手法又は拡張手法に係る対話プロトコルを適用すれば、偽証が成功する確率を２／３以下に抑制することができる。従って、この対話プロトコルを２回実行すれば、偽証が成功する確率を（２／３）２以下に抑制することができる。さらに、この対話プロトコルをＮ回実行すると、偽証が成功する確率は（２／３）Ｎとなり、Ｎを十分に大きい数（例えば、Ｎ＝１４０）にすれば、偽証が成功する確率は無視できる程度に小さくなる。
【０１０５】
対話プロトコルを複数回実行する方法としては、例えば、メッセージ、要求、返答のやり取りを逐次的に複数回繰り返す直列的な方法と、１回分のやり取りで複数回分のメッセージ、要求、返答のやり取りを行う並列的な方法とが考えられる。ここでは、本手法に係る対話プロトコルを並列的な方法に係る対話プロトコル（以下、並列化アルゴリズム）に拡張する方法について説明する。例えば、並列化アルゴリズムは図６のようになる。以下、図６を参照しながら、並列化アルゴリズムの内容について説明する。
【０１０６】
（鍵生成アルゴリズムＧｅｎ）
鍵生成アルゴリズムＧｅｎは、環Ｋ上で定義されるｍ本の多変数多項式ｆ１（ｘ１，…，ｘｎ），…，ｆｍ（ｘ１，…，ｘｎ）、及びベクトルｓ＝（ｓ１，…，ｓｎ）∈Ｋｎを生成する。次に、鍵生成アルゴリズムＧｅｎは、ｙ＝（ｙ１，…，ｙｍ）←（ｆ１（ｓ），…，ｆｍ（ｓ））を計算する。そして、鍵生成アルゴリズムＧｅｎは、（ｆ１（ｘ１，…，ｘｎ），…，ｆｍ（ｘ１，…，ｘｎ），ｙ）を公開鍵ｐｋに設定し、ｓを秘密鍵に設定する。なお、以下では、ベクトル（ｘ１，…，ｘｎ）をｘと表記し、多変数多項式の組（ｆ１（ｘ），…，ｆｍ（ｘ））をＦ（ｘ）と表記することにする。
【０１０７】
（証明者アルゴリズムＰ、検証者アルゴリズムＶ）
次に、図６を参照しながら、対話プロトコルの中で証明者アルゴリズムＰが実行する処理及び検証者アルゴリズムＶが実行する処理について説明する。
【０１０８】
上記の対話プロトコルの中で、証明者は、秘密鍵ｓの情報を検証者に一切漏らさずに、「自身がｙ＝Ｆ（ｓ）を満たすｓを知っていること」を検証者に示す。一方、検証者は、証明者がｙ＝Ｆ（ｓ）を満たすｓを知っているか否かを検証する。なお、公開鍵ｐｋは、検証者に公開されているものとする。また、秘密鍵ｓは、証明者により秘密に管理されているものとする。以下、図６に示したフローチャートに沿って説明を進める。
【０１０９】
工程＃１：
まず、証明者アルゴリズムＰは、ｉ＝１〜Ｎについて、以下の処理（１）〜処理（８）を実行する。
処理（１）：証明者アルゴリズムＰは、任意に数ｗｉを選択する。
処理（２）：証明者アルゴリズムＰは、擬似乱数生成器Ｇ１に数ｗｉを適用してベクトルｒｉ∈Ｋｎと数ｗｉＡを生成する。つまり、証明者アルゴリズムＰは、（ｒｉ，ｗｉＡ）←Ｇ１（ｗｉ）を計算する。
処理（３）：証明者アルゴリズムＰは、擬似乱数生成器Ｇ２に数ｗｉＡを適用して多変数多項式の組ＦｉＡ（ｘ）を生成する。つまり、証明者アルゴリズムＰは、ＦｉＡ←Ｇ２（ｗｉＡ）を計算する。
処理（４）：証明者アルゴリズムＰは、ｚｉ←ｓｉ−ｒｉを計算する。この計算は、秘密鍵ｓｉをベクトルｒｉによりマスクする操作に相当する。
処理（５）：証明者アルゴリズムＰは、ＦｉＢ（ｘ）←Ｆ（ｘ＋ｒｉ）＋ＦｉＡ（ｘ）を計算する。この計算は、ｘについての多項式の組Ｆ（ｘ＋ｒｉ）を多項式の組ＦｉＡ（ｘ）によりマスクする操作に相当する。
処理（６）：証明者アルゴリズムＰは、ＦｉＢ（ｚｉ）及びｚｉのハッシュ値ｃ１，ｉを生成する。つまり、証明者アルゴリズムＰは、ｃ１，ｉ←Ｈ１（ＦｉＢ（ｚｉ），ｚｉ）を計算する。
処理（７）：証明者アルゴリズムＰは、数ｗｉＡのハッシュ値ｃ２，ｉを生成する。つまり、証明者アルゴリズムＰは、ｃ２，ｉ←Ｈ２（ｗｉＡ）を計算する。
処理（８）：証明者アルゴリズムＰは、多項式の組ＦｉＢのハッシュ値ｃ３，ｉを生成する。つまり、証明者アルゴリズムＰは、ｃ３，ｉ←Ｈ３（ＦｉＢ）を計算する。
なお、上記のＨ１（…）、Ｈ２（…）、Ｈ３（…）は、ハッシュ関数である。また、ハッシュ値（ｃ１，ｉ，ｃ２，ｉ，ｃ３，ｉ）はメッセージである。
【０１１０】
ｉ＝１〜Ｎについて、上記の処理（１）〜処理（８）が実行された後、工程＃１で生成されたメッセージ（ｃ１，ｉ，ｃ２，ｉ，ｃ３，ｉ）（ｉ＝１〜Ｎ）は、検証者アルゴリズムＶに送られる。
【０１１１】
工程＃２：
メッセージ（ｃ１，ｉ，ｃ２，ｉ，ｃ３，ｉ）（ｉ＝１〜Ｎ）を受け取った検証者アルゴリズムＶは、ｉ＝１〜Ｎのそれぞれについて、３つの検証パターンのうち、どの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムＶは、ｉ＝１〜Ｎのそれぞれについて、検証パターンの種類を表す３つの数値｛０，１，２｝の中から１つの数値を選択し、選択した数値を要求ｄｉに設定する。この要求ｄｉは証明者アルゴリズムＰに送られる。
【０１１２】
工程＃３：
要求ｄｉ（ｉ＝１〜Ｎ）を受け取った証明者アルゴリズムＰは、受け取った要求ｄｉに応じて検証者アルゴリズムＶに送る返答σｉを生成する。このとき、証明者アルゴリズムＰは、ｉ＝１〜Ｎについて、以下の処理（１）〜処理（３）を実行する。
処理（１）：ｄｉ＝０の場合、証明者アルゴリズムＰは、返答σｉ＝ｗｉを生成する。
処理（２）：ｄｉ＝１の場合、証明者アルゴリズムＰは、返答σｉ＝（ｗｉＡ，ｚｉ）を生成する。
処理（３）：ｄｉ＝２の場合、証明者アルゴリズムＰは、返答σｉ＝（ＦｉＢ，ｚｉ）を生成する。
上記の処理（１）〜処理（３）の処理が実行された後、返答σｉ（ｉ＝１〜Ｎ）は、検証者アルゴリズムＶに送られる。
【０１１３】
工程＃４：
返答σｉ（ｉ＝１〜Ｎ）を受け取った検証者アルゴリズムＶは、受け取った返答σｉ（ｉ＝１〜Ｎ）を利用して以下の検証処理を実行する。なお、以下の処理は、ｉ＝１〜Ｎについて実行される。
【０１１４】
ｄｉ＝０の場合、検証者アルゴリズムＶは、（ｒｉＡ，ｗｉＢ）←Ｇ１（σｉ）を計算する。さらに、検証者アルゴリズムＶは、ＦｉＣ←Ｇ２（ｗｉＢ）を計算する。そして、検証者アルゴリズムＶは、ｃ２，ｉ＝Ｈ２（ｗｉＢ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ｃ３，ｉ＝Ｈ３（Ｆ（ｘ＋ｒｉＡ）＋ＦｉＣ（ｘ））の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０１１５】
ｄｉ＝１の場合、検証者アルゴリズムＶは、（ｗｉＢ，ｚｉＡ）←σｉとする。さらに、検証者アルゴリズムＶは、ＦｉＣ←Ｇ２（ｗｉＢ）を計算する。そして、検証者アルゴリズムＶは、ｃ１，ｉ＝Ｈ１（ＦｉＣ（ｚｉＡ），ｚｉＡ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ｃ２＝Ｈ２（ｗｉＢ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０１１６】
ｄｉ＝２の場合、検証者アルゴリズムＶは、（ＦｉＤ，ｚｉＡ）←σｉとする。そして、検証者アルゴリズムＶは、ｃ１，ｉ＝Ｈ１（ＦｉＤ（ｚｉＡ）−ｙ，ｚｉＡ）の等号が成り立つか否かを検証する。さらに、検証者アルゴリズムＶは、ｃ３，ｉ＝Ｈ３（ＦｉＤ（ｘ））の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０１１７】
以上、本手法の対話プロトコルを並列的に実行する方法について説明した。上記のように、本手法の対話プロトコルを繰り返し実行することにより、偽証が成功する確率を無視できる程度まで低減させることが可能になる。
【０１１８】
なお、工程＃１の後で（ｃ１，１，ｃ１，２，ｃ１，３，…，ｃＮ，１，ｃＮ，２，ｃＮ，３）を検証者に送信する代わりに、ハッシュ値ｃ＝Ｈ（ｃ１，１，ｃ１，２，ｃ１，３，…，ｃＮ，１，ｃＮ，２，ｃＮ，３）を送信するように変形してもよい。但し、返答から復元できないメッセージの存在を考慮し、このようなメッセージが返答と共に証明者から検証者へと送られるように対話プロトコルを変形する必要がある。この変形を適用すると、１パス目で送るメッセージが１つのハッシュ値ｃだけとなり、大幅に通信量が削減される。例えば、Ｎ回の並列的繰り返し構成の場合、送るべき情報の数を２Ｎ−１個削減することが可能になる。
【０１１９】
（好適なパラメータの設定方法について）
さて、本実施形態に係る対話プロトコルは、受動的攻撃に対する安全性が保証されている。しかし、この対話プロトコルを並列的に繰り返し実行する上記の方法を適用した場合、能動的攻撃に対する安全性が確実に保証されていることを証明できるようにするには、以下に示すような条件が必要になる。
【０１２０】
上記の対話プロトコルは、１組の鍵ペア（公開鍵ｙ、秘密鍵ｓ）を用いて、「証明者がｙについてｙ＝Ｆ（ｓ）となるｓを知っていること」を検証者に検証させるためのアルゴリズムであった。そのため、検証で受理される対話を行った場合、「対話の際に証明者がｓを用いた」という情報を検証者に知られてしまう可能性が否定できない。また、多変数多項式Ｆについて衝突困難性が保証されてない。そのため、上記の対話プロトコルを並列的に繰り返し実行する場合、能動的攻撃に対する安全性が確実に保証されていることを無条件で証明することは難しい。
【０１２１】
そこで、本件発明者は、検証で受理される対話を行った場合においても、「対話の際に証明者がｓを用いた」という情報を検証者に知られないようにする方法について検討した。そして、本件発明者は、上記の対話プロトコルを並列的に繰り返し実行する場合においても、能動的攻撃に対する安全性を保証することが可能になる方法を考案した。この方法は、公開鍵として用いる多変数多項式ｆ１，…，ｆｍの数ｍをその変数の数ｎよりも十分に小さな値に設定するというものである。例えば、２ｍ−ｎ≪１となるようにｍ及びｎが設定される（例えば、ｎ＝１６０、ｍ＝８０の場合２−８０≪１である。）。
【０１２２】
多次多変数方程式の求解問題に対する解答の困難性に安全性の根拠をおく方式において、秘密鍵ｓ１と、それに対応する公開鍵ｐｋとが与えられても、その公開鍵ｐｋに対応する別の秘密鍵ｓ２を生成することは難しい。そのため、公開鍵ｐｋに対する秘密鍵ｓが２つ以上存在することを保証すれば、検証で受理される対話を行った場合においても、「対話の際に証明者がｓを用いた」という情報を検証者に知られないようにすることが可能になる。つまり、この保証が成り立てば、対話プロトコルを並列的に繰り返し実行する場合においても、能動的攻撃に対する安全性を保証することが可能になる。
【０１２３】
図４０を参照しながら、ｍ本のｎ変数多次多項式で構成される関数Ｆ：Ｋｎ→Ｋｍについて考えると（但し、ｎ＞ｍ）、２つ目の原像を持たない定義域の要素数は、最大で｜Ｋ｜ｍ−１個しか存在しない。そのため、｜Ｋ｜ｍ−ｎを十分に小さくすると、２つ目の原像を持たない定義域の要素が選択される確率を無視できる程度にまで小さくすることができる。つまり、ｎ変数多次多項式ｆ１，…，ｆｍの数ｍがその変数の数ｎよりも十分に小さな値に設定されていれば、公開鍵ｐｋに対して２つ以上の秘密鍵ｓが存在することを保証できる。その結果、検証で受理される対話を行った場合においても、「対話の際に証明者がｓを用いた」という情報を検証者に知られないようにすることが可能になり、対話プロトコルを並列的に繰り返し実行する場合においても、能動的攻撃に対する安全性が保証される。
【０１２４】
以上説明したように、ｎ変数多次多項式ｆ１，…，ｆｍの数ｍがその変数の数ｎよりも小さな値（ｎ＞ｍ；好ましくは２ｍ−ｎ≪１）に設定する設定条件を課すことで、対話プロトコルを並列的に繰り返し実行する場合の安全性を保証することが可能になる。
【０１２５】
［２−４：具体例（２次多項式を利用する場合）］
次に、図７を参照しながら、多変数多項式Ｆとしてｎ変数２次多項式を利用する場合について説明する。図７は、本手法の一具体例について説明するための説明図である。
【０１２６】
（鍵生成アルゴリズムＧｅｎ）
鍵生成アルゴリズムＧｅｎは、環Ｋ上で定義されるｍ本の２次多項式ｆ１（ｘ１，…，ｘｎ），…，ｆｍ（ｘ１，…，ｘｎ）、及びベクトルｓ＝（ｓ１，…，ｓｎ）∈Ｋｎを生成する。次に、鍵生成アルゴリズムＧｅｎは、ｙ＝（ｙ１，…，ｙｍ）←（ｆ１（ｓ），…，ｆｍ（ｓ））を計算する。そして、鍵生成アルゴリズムＧｅｎは、（ｆ１，…，ｆｍ，ｙ）を公開鍵ｐｋに設定し、ｓを秘密鍵に設定する。なお、以下では、ベクトル（ｘ１，…，ｘｎ）をｘと表記し、２次多項式の組（ｆ１（ｘ），…，ｆｍ（ｘ））をＦ（ｘ）と表記する。但し、２次多項式ｆｉ（ｘ）は、下記の式（８）のように表現されるものとする。
【０１２７】
【数７】
0005790291.tif 000008
【０１２８】
（証明者アルゴリズムＰ、検証者アルゴリズムＶ）
次に、図７を参照しながら、対話プロトコルの中で証明者アルゴリズムＰ及び検証者アルゴリズムＶにより実行される処理について説明する。
【０１２９】
工程＃１：
まず、証明者アルゴリズムＰは、任意に数ｗを選択する。次いで、証明者アルゴリズムＰは、擬似乱数生成器Ｇ１に数ｗを適用してベクトルｒ∈Ｋｎと数ｗＡを生成する。つまり、証明者アルゴリズムＰは、（ｒ，ｗＡ）←Ｇ１（ｗ）を計算する。次いで、証明者アルゴリズムＰは、擬似乱数生成器Ｇ２に数ｗＡを適用して１次多項式の組ｆ１Ａ（ｘ），…，ｆｍＡ（ｘ）を生成する。つまり、証明者アルゴリズムＰは、（ｆ１Ａ，…，ｆｍＡ）←Ｇ２（ｗＡ）を計算する。但し、１次多項式ｆｉＡ（ｘ）は、下記の式（９）のように表現される。また、１次多項式の組（ｆ１Ａ（ｘ），…，ｆｍＡ（ｘ））をＦＡ（ｘ）と表記する。
【０１３０】
【数８】
0005790291.tif 000009
【０１３１】
工程＃１（続き）：
次いで、証明者アルゴリズムＰは、ｚ←ｓ−ｒを計算する。この計算は、秘密鍵ｓをベクトルｒによりマスクする操作に相当する。さらに、証明者アルゴリズムＰは、ＦＢ（ｘ）←Ｆ（ｘ＋ｒ）＋ＦＡ（ｘ）を計算する。この計算は、ｘに関して２次多項式Ｆ（ｘ＋ｒ）を１次多項式ＦＡ（ｘ）によりマスクする操作に相当する。Ｆ（ｘ＋ｒ）の中においてｒに関する情報はｘの１次の項にしか現れない。そのため、ｒに関する情報は全てＦＡ（ｘ）によりマスクされる。
【０１３２】
工程＃１（続き）：
次いで、証明者アルゴリズムＰは、ＦＡ（ｚ）及びｚのハッシュ値ｃ１を生成する。つまり、証明者アルゴリズムＰは、ｃ１←Ｈ１（ＦＡ（ｚ），ｚ）を計算する。また、証明者アルゴリズムＰは、数ｗＡのハッシュ値ｃ２を生成する。つまり、証明者アルゴリズムＰは、ｃ２←Ｈ２（ｗＡ）を計算する。さらに、証明者アルゴリズムＰは、多変数多項式ＦＢのハッシュ値ｃ３を生成する。つまり、証明者アルゴリズムＰは、ｃ３←Ｈ３（ＦＢ）を計算する。なお、上記のＨ１（…）、Ｈ２（…）、Ｈ３（…）は、ハッシュ関数である。工程＃１で生成されたメッセージ（ｃ１，ｃ２，ｃ３）は、検証者アルゴリズムＶに送られる。
【０１３３】
工程＃２：
メッセージ（ｃ１，ｃ２，ｃ３）を受け取った検証者アルゴリズムＶは、３つの検証パターンのうち、どの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムＶは、検証パターンの種類を表す３つの数値｛０，１，２｝の中から１つの数値を選択し、選択した数値を要求ｄに設定する。この要求ｄは証明者アルゴリズムＰに送られる。
【０１３４】
工程＃３：
要求ｄを受け取った証明者アルゴリズムＰは、受け取った要求ｄに応じて検証者アルゴリズムＶに送る返答σを生成する。ｄ＝０の場合、証明者アルゴリズムＰは、返答σ＝ｗを生成する。ｄ＝１の場合、証明者アルゴリズムＰは、返答σ＝（ｗＡ，ｚ）を生成する。ｄ＝２の場合、証明者アルゴリズムＰは、返答σ＝（ＦＢ（ｚ），ｚ）を生成する。工程＃３で生成された返答σは、検証者アルゴリズムＶに送られる。
【０１３５】
工程＃４：
返答σを受け取った検証者アルゴリズムＶは、受け取った返答σを利用して以下の検証処理を実行する。
【０１３６】
ｄ＝０の場合、検証者アルゴリズムＶは、（ｒＡ，ｗＢ）←Ｇ１（σ）を計算する。さらに、検証者アルゴリズムＶは、ＦＣ←Ｇ２（ｗＢ）を計算する。そして、検証者アルゴリズムＶは、ｃ２＝Ｈ２（ｗＢ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ｃ３＝Ｈ３（Ｆ（ｘ＋ｒＡ）＋ＦＣ（ｘ））の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０１３７】
ｄ＝１の場合、検証者アルゴリズムＶは、（ｗＢ，ｚＡ）←σとする。さらに、検証者アルゴリズムＶは、ＦＣ←Ｇ２（ｗＢ）を計算する。そして、検証者アルゴリズムＶは、ｃ１＝Ｈ１（ＦＣ（ｚＡ），ｚＡ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ｃ２＝Ｈ２（ｗＢ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０１３８】
ｄ＝２の場合、検証者アルゴリズムＶは、（ＦＤ，ｚＡ）←σとする。そして、検証者アルゴリズムＶは、ｃ１＝Ｈ１（ＦＤ（ｚＡ）−ｙ，ｚＡ））の等号が成り立つか否かを検証する。さらに、検証者アルゴリズムＶは、ｃ３＝Ｈ３（ＦＤ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０１３９】
以上、本手法の一具体例について説明した。
【０１４０】
［２−５：効率的なアルゴリズム］
次に、本手法に係るアルゴリズムを効率化する方法について述べる。２次多項式の組（ｆ１（ｘ），…，ｆｍ（ｘ））は、下記の式（１０）のように表現することができる。但し、ｘ＝（ｘ１，…，ｘｎ）である。また、Ａ１，…，Ａｍは、ｎ×ｎ行列である。さらに、ｂ１，…，ｂｍはそれぞれｎ×１ベクトルである。
【０１４１】
【数９】
0005790291.tif 000010
【０１４２】
この表現を用いると、多変数多項式Ｆは、下記の式（１１）及び式（１２）のように表現することができる。この表現が成り立つことは、下記の式（１３）から容易に確認することができる。
【０１４３】
【数１０】
0005790291.tif 000011
【０１４４】
このようにＦ（ｘ＋ｙ）をｘに依存する第１の部分と、ｙに依存する第２の部分と、ｘ及びｙの両方に依存する第３の部分とに分けたとき、第３の部分に対応する項Ｆｂ（ｘ，ｙ）は、ｘ及びｙについて双線形になる。この性質を利用すると、効率的なアルゴリズムを構築することが可能になる。
【０１４５】
例えば、ベクトルｔ∈Ｋｎ、ｅ∈Ｋｍを用いて、多変数多項式Ｆ（ｘ＋ｒ）のマスクに利用する多変数多項式ＦＡ（ｘ）をＦＡ（ｘ）＝Ｆｂ（ｘ，ｔ）＋ｅと表現する。この場合、多変数多項式Ｆ（ｘ＋ｒ）とＦＡ（ｘ）との和は、下記の式（１４）のように表現される。
【０１４６】
ここで、ｔＡ＝ｒ＋ｔ、ｅＡ＝Ｆ（ｒ）＋ｅとおけば、多変数多項式ＦＢ（ｘ）＝Ｆ（ｘ＋ｒ）＋ＦＡ（ｘ）は、ベクトルｔＡ∈Ｋｎ、ｅＡ∈Ｋｍにより表現することができる。そのため、ＦＡ（ｘ）＝Ｆｂ（ｘ，ｔ）＋ｅに設定すれば、Ｋｎ上のベクトル及びＫｍ上のベクトルを用いてＦＡ及びＦＢを表現できるようになり、通信に必要なデータサイズを大幅に減らすことが可能になる。具体的には、数千〜数万倍程度、通信効率が向上する。
【０１４７】
【数１１】
0005790291.tif 000012
【０１４８】
なお、上記の変形により、ＦＢ（或いはＦＡ）からｒに関する情報が一切漏れることはない。例えば、ｅＡ及びｔＡ（或いはｅ及びｔ）を与えられても、ｅ及びｔ（或いはｅＡ及びｔＡ）を知らない限り、ｒの情報を一切知ることはできない。従って、上記の変形を本手法に施したとしても、零知識性は担保される。以下、図８〜図１０を参照しながら、本手法に係る効率的なアルゴリズムについて説明する。なお、鍵生成アルゴリズムＧｅｎの構成は変わらないため、ここでは詳細な説明を省略する。
【０１４９】
（効率的なアルゴリズムの構成例１：図８）
まず、図８に示した効率的なアルゴリズムの構成について説明する。
【０１５０】
工程＃１：
証明者アルゴリズムＰは、任意に数ｗを選択する。次いで、証明者アルゴリズムＰは、擬似乱数生成器Ｇ１に数ｗを適用してベクトルｒ∈Ｋｎと数ｗＡを生成する。つまり、証明者アルゴリズムＰは、（ｒ，ｗＡ）←Ｇ１（ｗ）を計算する。次いで、証明者アルゴリズムＰは、擬似乱数生成器Ｇ２に数ｗＡを適用して２つのベクトルｔ∈Ｋｎ、ｅ∈Ｋｍを生成する。つまり、証明者アルゴリズムＰは、（ｔ，ｅ）←Ｇ２（ｗＡ）を計算する。次いで、証明者アルゴリズムＰは、ｚ←ｓ−ｒを計算する。この計算は、秘密鍵ｓをベクトルｒによりマスクする操作に相当する。さらに、証明者アルゴリズムＰは、ｔＡ←ｒ＋ｔを計算する。次いで、証明者アルゴリズムＰは、ｅＡ←Ｆ（ｒ）＋ｅを計算する。
【０１５１】
工程＃１（続き）：
次いで、証明者アルゴリズムＰは、上記の式（１４）に基づいてＦｂ（ｚ，ｔ）を算出し、Ｆｂ（ｚ，ｔ）＋ｅ及びｚのハッシュ値ｃ１を生成する。つまり、証明者アルゴリズムＰは、ｃ１←Ｈ１（Ｆｂ（ｚ，ｔ）＋ｅ，ｚ）を計算する。また、証明者アルゴリズムＰは、数ｗＡのハッシュ値ｃ２を生成する。つまり、証明者アルゴリズムＰは、ｃ２←Ｈ２（ｗＡ）を計算する。さらに、証明者アルゴリズムＰは、２つのベクトルｔＡ及びｅＡのハッシュ値ｃ３を生成する。つまり、証明者アルゴリズムＰは、ｃ３←Ｈ３（ｔＡ，ｅＡ）を計算する。なお、上記のＨ１（…）、Ｈ２（…）、Ｈ３（…）は、ハッシュ関数である。工程＃１で生成されたメッセージ（ｃ１，ｃ２，ｃ３）は、検証者アルゴリズムＶに送られる。
【０１５２】
工程＃２：
メッセージ（ｃ１，ｃ２，ｃ３）を受け取った検証者アルゴリズムＶは、３つの検証パターンのうち、どの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムＶは、検証パターンの種類を表す３つの数値｛０，１，２｝の中から１つの数値を選択し、選択した数値を要求ｄに設定する。この要求ｄは証明者アルゴリズムＰに送られる。
【０１５３】
工程＃３：
要求ｄを受け取った証明者アルゴリズムＰは、受け取った要求ｄに応じて検証者アルゴリズムＶに送る返答σを生成する。ｄ＝０の場合、証明者アルゴリズムＰは、返答σ＝ｗを生成する。ｄ＝１の場合、証明者アルゴリズムＰは、返答σ＝（ｗＡ，ｚ）を生成する。ｄ＝２の場合、証明者アルゴリズムＰは、返答σ＝（ｔＡ，ｅＡ，ｚ）を生成する。工程＃３で生成された返答σは、検証者アルゴリズムＶに送られる。
【０１５４】
工程＃４：
返答σを受け取った検証者アルゴリズムＶは、受け取った返答σを利用して以下の検証処理を実行する。
【０１５５】
ｄ＝０の場合、検証者アルゴリズムＶは、（ｒＡ，ｗＢ）←Ｇ１（σ）を計算する。さらに、検証者アルゴリズムＶは、（ｔＢ，ｅＢ）←Ｇ２（ｗＢ）を計算する。そして、検証者アルゴリズムＶは、ｃ２＝Ｈ２（ｗＢ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ｃ３＝Ｈ３（ｒＡ＋ｔＢ，Ｆ（ｒＡ）＋ｅＢ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０１５６】
ｄ＝１の場合、検証者アルゴリズムＶは、（ｗＢ，ｚＡ）←σとする。さらに、検証者アルゴリズムＶは、（ｔＢ，ｅＢ）←Ｇ２（ｗＢ）を計算する。そして、検証者アルゴリズムＶは、ｃ１＝Ｈ１（Ｆｂ（ｚＡ，ｔＢ）＋ｅＢ，ｚＡ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ｃ２＝Ｈ２（ｗＢ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０１５７】
ｄ＝２の場合、検証者アルゴリズムＶは、（ｔＣ，ｅＣ，ｚＡ）←σとする。そして、検証者アルゴリズムＶは、ｃ１＝Ｈ１（Ｆ（ｚＡ）＋Ｆｂ（ｚＡ，ｔＣ）＋ｅＣ−ｙ，ｚＡ）の等号が成り立つか否かを検証する。さらに、検証者アルゴリズムＶは、ｃ３＝Ｈ３（ｔＣ，ｅＣ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０１５８】
以上、効率的なアルゴリズムの構成例１について説明した。この効率的なアルゴリズムを利用することにより、通信に必要なデータサイズが大幅に削減される。また、Ｆ（ｘ＋ｒ）の計算が必要なくなるため、計算効率も向上する。
【０１５９】
（効率的なアルゴリズムの構成例２：図９）
次に、図９に示した効率的なアルゴリズムの構成について説明する。図９に示した構成を適用した場合も、図８に示した構成を適用した場合と同様に、通信効率及び計算効率の向上効果が得られる。但し、ここでは図８に示した構成との差分について述べる。
【０１６０】
図８に示したアルゴリズムの工程＃３において、ｄ＝０の場合にσをｗに設定しているが、ｄ＝０の場合に設定されるσは、（ｒ，ｔ，ｅ）が復元できる情報であればどのような情報でもよい。例えば、図９に示すように、工程＃３においてｄ＝０の場合に設定されるσの内容を（ｗＡ，ｔＡ）にしてもよい。但し、この変形を行う場合には、工程＃４において検証者アルゴリズムＶが行う検証内容の一部を変形する必要がある。具体的には、工程＃４においてｄ＝０の場合に検証者アルゴリズムＶが行う検証内容のうち、ｃ３＝Ｈ３（ｒＡ＋ｔＢ，Ｆ（ｒＡ）＋ｅＢ）の検証がｃ３＝Ｈ３（ｔＡ，Ｆ（ｔＡ−ｔＢ）＋ｅＢ）の検証に置き換えられる。
【０１６１】
以上、効率的なアルゴリズムの構成例２について説明した。
【０１６２】
（効率的なアルゴリズムの構成例３：図１０）
次に、図１０に示した効率的なアルゴリズムの構成について説明する。
【０１６３】
工程＃１：
証明者アルゴリズムＰは、任意にベクトルｒ，ｔ∈Ｋｎ及びｅ∈Ｋｍを生成する。次いで、証明者アルゴリズムＰは、ｒＡ←ｓ−ｒを計算する。この計算は、秘密鍵ｓをベクトルｒによりマスクする操作に相当する。さらに、証明者アルゴリズムＰは、ｔＡ←ｒ-ｔを計算する。次いで、証明者アルゴリズムＰは、ｅＡ←Ｆ（ｒ）−ｅを計算する。
【０１６４】
工程＃１（続き）：
次いで、証明者アルゴリズムＰは、ｃ１←Ｈ１（Ｆｂ（ｒＡ，ｔ）＋ｅ，ｒＡ）を計算する。次いで、証明者アルゴリズムＰは、ｃ２←Ｈ２（ｔ，ｅ）を計算する。次いで、証明者アルゴリズムＰは、ｃ３←Ｈ３（ｔＡ，ｅＡ）を計算する。なお、上記のＨ１（…）、Ｈ２（…）、Ｈ３（…）は、ハッシュ関数である。工程＃１で生成されたメッセージ（ｃ１，ｃ２，ｃ３）は、検証者アルゴリズムＶに送られる。
【０１６５】
工程＃２：
メッセージ（ｃ１，ｃ２，ｃ３）を受け取った検証者アルゴリズムＶは、３つの検証パターンのうち、どの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムＶは、検証パターンの種類を表す３つの数値｛０，１，２｝の中から１つの数値を選択し、選択した数値を要求ｄに設定する。この要求ｄは証明者アルゴリズムＰに送られる。
【０１６６】
工程＃３：
要求ｄを受け取った証明者アルゴリズムＰは、受け取った要求ｄに応じて検証者アルゴリズムＶに送る返答σを生成する。ｄ＝０の場合、証明者アルゴリズムＰは、返答σ＝（ｒ，ｔＡ，ｅＡ）を生成する。ｄ＝１の場合、証明者アルゴリズムＰは、返答σ＝（ｒＡ，ｔ，ｅ）を生成する。ｄ＝２の場合、証明者アルゴリズムＰは、返答σ＝（ｒＡ，ｔＡ，ｅＡ）を生成する。工程＃３で生成された返答σは、検証者アルゴリズムＶに送られる。
【０１６７】
工程＃４：
返答σを受け取った検証者アルゴリズムＶは、受け取った返答σを利用して以下の検証処理を実行する。
【０１６８】
ｄ＝０の場合、検証者アルゴリズムＶは、ｃ２＝Ｈ２（ｒ−ｔＡ，Ｆ（ｒ）−ｅＡ）の等号が成り立つか否かを検証する。さらに、検証者アルゴリズムＶは、ｃ３＝Ｈ３（ｔＡ，ｅＡ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０１６９】
ｄ＝１の場合、検証者アルゴリズムＶは、ｃ１＝Ｈ１（Ｆｂ（ｒＡ，ｔ）＋ｅ，ｒＡ）の等号が成り立つか否かを検証する。さらに、検証者アルゴリズムＶは、ｃ２＝Ｈ２（ｔ，ｅ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０１７０】
ｄ＝２の場合、検証者アルゴリズムＶは、ｃ１＝Ｈ１（ｙ−Ｆ（ｒＡ）−Ｆｂ（ｔＡ，ｒＡ）−ｅＡ，ｒＡ）の等号が成り立つか否かを検証する。さらに、検証者アルゴリズムＶは、ｃ３＝Ｈ３（ｔＡ，ｅＡ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０１７１】
以上、効率的なアルゴリズムの構成例３について説明した。この効率的なアルゴリズムを利用することにより、通信に必要なデータサイズが大幅に削減される。また、Ｆ（ｘ＋ｒ）の計算が必要なくなるため、計算効率も向上する。
【０１７２】
（効率的なアルゴリズムの並列化：図１１）
次に、図１１を参照しながら、効率的なアルゴリズムを並列化する方法について説明する。図１１に示した構成（以下、並列化アルゴリズム）は、上記の構成例３に係る効率的なアルゴリズムを並列化したものである。
【０１７３】
工程＃１：
証明者アルゴリズムＰは、ｉ＝１〜Ｎについて処理（１）〜処理（６）を実行する。
処理（１）：証明者アルゴリズムＰは、任意にベクトルｒｉ，ｔｉ∈Ｋｎ及びｅｉ∈Ｋｍを生成する。
処理（２）：証明者アルゴリズムＰは、ｒｉＡ←ｓ−ｒｉを計算する。この計算は、秘密鍵ｓをベクトルｒｉによりマスクする操作に相当する。さらに、証明者アルゴリズムＰは、ｔｉＡ←ｒｉ-ｔｉを計算する。
処理（３）：証明者アルゴリズムＰは、ｅｉＡ←Ｆ（ｒｉ）−ｅｉを計算する。
処理（４）：証明者アルゴリズムＰは、ｃ１，ｉ←Ｈ１（Ｆｂ（ｒｉＡ，ｔｉ）＋ｅｉ，ｒｉＡ）を計算する。
処理（５）：証明者アルゴリズムＰは、ｃ２，ｉ←Ｈ２（ｔｉ，ｅｉ）を計算する。
処理（６）：証明者アルゴリズムＰは、ｃ３，ｉ←Ｈ３（ｔｉＡ，ｅｉＡ）を計算する。
【０１７４】
工程＃１（続き）
ｉ＝１〜Ｎについて上記の処理（１）〜処理（６）を実行した後、証明者アルゴリズムＰは、Ｃｍｔ←Ｈ（ｃ１，１，ｃ２，１，ｃ３，１，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎ）を計算する。なお、上記のＨ（…）、Ｈ１（…）、Ｈ２（…）、Ｈ３（…）は、ハッシュ関数である。工程＃１で生成されたハッシュ値Ｃｍｔは、検証者アルゴリズムＶに送られる。このように、メッセージ（ｃ１，１，ｃ２，１，ｃ３，１，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎ）をハッシュ値に変換してから検証者アルゴリズムＶに送ることで、通信量を削減することが可能になる。
【０１７５】
工程＃２：
ハッシュ値Ｃｍｔを受け取った検証者アルゴリズムＶは、ｉ＝１〜Ｎのそれぞれについて、３つの検証パターンのうち、どの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムＶは、ｉ＝１〜Ｎのそれぞれについて、検証パターンの種類を表す３つの数値｛０，１，２｝の中から１つの数値を選択し、選択した数値を要求ｄｉに設定する。これらの要求ｄ１，…，ｄＮは、証明者アルゴリズムＰに送られる。
【０１７６】
工程＃３：
要求ｄ１，…，ｄＮを受け取った証明者アルゴリズムＰは、受け取った要求ｄ１，…，ｄＮのそれぞれ応じて検証者アルゴリズムＶに送る返答Ｒｓｐ１，…，ＲｓｐＮを生成する。ｄｉ＝０の場合、証明者アルゴリズムＰは、σｉ＝（ｒｉ，ｔｉＡ，ｅｉＡ）を生成する。さらに、証明者アルゴリズムＰは、Ｒｓｐｉ＝（σｉ，ｃ１，ｉ）を生成する。ｄｉ＝１の場合、証明者アルゴリズムＰは、σｉ＝（ｒｉＡ，ｔｉ，ｅｉ）を生成する。さらに、証明者アルゴリズムＰは、Ｒｓｐｉ＝（σｉ，ｃ３，ｉ）を生成する。ｄｉ＝２の場合、証明者アルゴリズムＰは、σｉ＝（ｒｉＡ，ｔｉＡ，ｅｉＡ）を生成する。さらに、証明者アルゴリズムＰは、Ｒｓｐｉ＝（σｉ，ｃ２，ｉ）を生成する。
【０１７７】
工程＃３で生成された返答Ｒｓｐ１，…，ＲｓｐＮは、検証者アルゴリズムＶに送られる。
【０１７８】
工程＃４：
返答Ｒｓｐ１，…，ＲｓｐＮを受け取った検証者アルゴリズムＶは、受け取った返答Ｒｓｐ１，…，ＲｓｐＮを利用して以下の処理（１）〜処理（３）をｉ＝１〜Ｎについて実行する。但し、検証者アルゴリズムＶは、ｄｉ＝０の場合に処理（１）を実行し、ｄｉ＝１の場合に処理（２）を実行し、ｄｉ＝２の場合に処理（３）を実行する。
【０１７９】
処理（１）：ｄｉ＝０の場合、検証者アルゴリズムＶは、Ｒｓｐｉから（ｒｉ，ｔｉＡ，ｅｉＡ，ｃ１，ｉ）を取り出す。次いで、検証者アルゴリズムＶは、ｃ２，ｉ＝Ｈ２（ｒｉ−ｔｉＡ，Ｆ（ｒｉ）−ｅｉＡ）を計算する。さらに、検証者アルゴリズムＶは、ｃ３，ｉ＝Ｈ３（ｔｉＡ，ｅｉＡ）を計算する。そして、検証者アルゴリズムＶは、（ｃ１，ｉ，ｃ２，ｉ，ｃ３，ｉ）を保持する。
【０１８０】
処理（２）：ｄｉ＝１の場合、検証者アルゴリズムＶは、Ｒｓｐｉから（ｒｉＡ，ｔｉ，ｅｉ，ｃ３，ｉ）を取り出す。次いで、検証者アルゴリズムＶは、ｃ１，ｉ＝Ｈ１（Ｆｂ（ｒｉＡ，ｔｉ）＋ｅｉ，ｒｉＡ）を計算する。さらに、検証者アルゴリズムＶは、ｃ２，ｉ＝Ｈ２（ｔｉ，ｅｉ）を計算する。そして、検証者アルゴリズムＶは、（ｃ１，ｉ，ｃ２，ｉ，ｃ３，ｉ）を保持する。
【０１８１】
処理（３）：ｄｉ＝２の場合、検証者アルゴリズムＶは、Ｒｓｐｉから（ｒｉＡ，ｔｉＡ，ｅｉＡ，ｃ２，ｉ）を取り出す。次いで、検証者アルゴリズムＶは、ｃ１，ｉ＝Ｈ１（ｙ−Ｆ（ｒｉＡ）−Ｆｂ（ｔｉＡ，ｒｉＡ）−ｅｉＡ，ｒｉＡ）を計算する。さらに、検証者アルゴリズムＶは、ｃ３，ｉ＝Ｈ３（ｔｉＡ，ｅｉＡ）を計算する。そして、検証者アルゴリズムＶは、（ｃ１，ｉ，ｃ２，ｉ，ｃ３，ｉ）を保持する。
【０１８２】
処理（１）〜処理（３）をｉ＝１〜Ｎについて実行した後、検証者アルゴリズムＶは、Ｃｍｔ＝Ｈ（ｃ１，１，ｃ２，１，ｃ３，１，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、この検証が成功した場合に認証成功を示す値１を出力し、検証に失敗した場合に認証失敗を示す値０を出力する。
【０１８３】
以上、効率的なアルゴリズムの並列化について説明した。なお、図１１に示した並列化アルゴリズムには、メッセージをハッシュ値に変換してから送信する工夫を盛り込んだ。この工夫により、通信効率が向上する。
【０１８４】
［２−６：電子署名方式への変形］
ここで、本手法に係る公開鍵認証方式を電子署名方式へと変形する方法を紹介する。なお、公開鍵認証方式のモデルにおける証明者を電子署名方式における署名者に対応させると、証明者のみが検証者を納得させられるという点において、電子署名方式のモデルと近似していることが容易に理解されよう。こうした考えに基づき、本手法に係る公開鍵認証方式を電子署名方式へと変形する方法について説明する。
【０１８５】
（２−６−１：変形方法）
ここでは、上記の効率的なアルゴリズムの構成例３を電子署名方式のアルゴリズムに変形する方法を例に挙げて説明する。構成例３に係るアルゴリズムは、図１２に示すように、おおまかに以下の４つの工程＃１〜工程＃４で表現される。
【０１８６】
工程＃１は、ａｉ＝（ｒｉ，ｔｉ，ｅｉ，ｒｉＡ，ｔｉＡ，ｅｉＡ，ｃ１，ｉ，ｃ２，ｉ，ｃ３，ｉ）を生成する処理（１）と、Ｃｍｔ←Ｈ（ｃ１，１，ｃ２，１，ｃ３，１，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎ）を計算する処理（２）とで構成される。工程＃１で証明者アルゴリズムＰにより生成されたＣｍｔは、検証者アルゴリズムＶへと送られる。
【０１８７】
工程＃２は、ｄ１，…，ｄＮを選択する処理で構成される。工程＃２で検証者アルゴリズムＶにより選択されたｄ１，…，ｄＮは、証明者アルゴリズムＰへと送られる。
【０１８８】
工程＃３は、ｄ１，…，ｄＮ及びａ１，…，ａＮを用いてＲｓｐ１，…，ＲｓｐＮを生成する処理で構成される。この処理をＲｓｐｉ←Ｓｅｌｅｃｔ（ｄｉ，ａｉ）と表現する。工程＃３で証明者アルゴリズムＰにより生成されたＲｓｐ１，…，ＲｓｐＮは、検証者アルゴリズムＶへと送られる。
【０１８９】
工程＃４は、ｄ１，…，ｄＮ及びＲｓｐ１，…，ＲｓｐＮを用いてｃ１，１，ｃ２，１，ｃ３，１，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎを再生する処理（１）と、再生したｃ１，１，ｃ２，２，ｃ３，３，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎを用いてＣｍｔ＝Ｈ（ｃ１，１，ｃ２，１，ｃ３，１，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎ）を検証する処理（２）とで構成される。
【０１９０】
上記の工程＃１〜工程＃４で表現される公開鍵認証方式のアルゴリズムは、図１２に示すような署名生成アルゴリズムＳｉｇ及び署名検証アルゴリズムＶｅｒに変形される。
【０１９１】
（署名生成アルゴリズムＳｉｇ）
まず、署名生成アルゴリズムＳｉｇの構成について述べる。署名生成アルゴリズムＳｉｇは、以下の処理（１）〜処理（５）で構成される。
【０１９２】
処理（１）：署名生成アルゴリズムＳｉｇは、ａｉ＝（ｒｉ，ｔｉ，ｅｉ，ｒｉＡ，ｔｉＡ，ｅｉＡ，ｃ１，ｉ，ｃ２，ｉ，ｃ３，ｉ）を生成する。
処理（２）：署名生成アルゴリズムＳｉｇは、Ｃｍｔ←Ｈ（ｃ１，１，ｃ２，１，ｃ３，１，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎ）を計算する。
処理（３）：署名生成アルゴリズムＳｉｇは、（ｄ１，…，ｄＮ）←Ｈ（Ｍ，Ｃｍｔ）を計算する。このＭは、署名を付与する文書である。
処理（４）：署名生成アルゴリズムＳｉｇは、Ｒｓｐｉ←Ｓｅｌｅｃｔ（ｄｉ，ａｉ）を計算する。
処理（５）：署名生成アルゴリズムＳｉｇは、（Ｃｍｔ，Ｒｓｐ１，…，ＲｓｐＮ）を署名に設定する。
【０１９３】
（署名検証アルゴリズムＶｅｒ）
次に、署名検証アルゴリズムＶｅｒの構成について述べる。署名検証アルゴリズムＶｅｒは、以下の処理（１）〜処理（３）で構成される。
【０１９４】
処理（１）：署名検証アルゴリズムＶｅｒは、（ｄ１，…，ｄＮ）←Ｈ（Ｍ，Ｃｍｔ）を計算する。
処理（２）：署名検証アルゴリズムＶｅｒは、ｄ１，…，ｄＮ及びＲｓｐ１，…，ＲｓｐＮを用いてｃ１，１，ｃ２，１，ｃ３，１，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎを生成する。
処理（３）：署名検証アルゴリズムＶｅｒは、再生したｃ１，１，ｃ２，１，ｃ３，１，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎを用いてＣｍｔ＝Ｈ（ｃ１，１，ｃ２，１，ｃ３，１，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎ）を検証する。
【０１９５】
以上説明したように、公開鍵認証方式のモデルにおける証明者を電子署名方式における署名者に対応させることで、公開鍵認証方式のアルゴリズムを電子署名方式のアルゴリズムに変形することができる。
【０１９６】
（２−６−２：電子署名アルゴリズムの効率化）
さて、図１３に示した署名生成アルゴリズムＳｉｇの構成に注目すると、処理（２）及び処理（３）でハッシュ値の計算を行っていることに気づくであろう。また、署名検証アルゴリズムＶｅｒの構成に注目すると、処理（１）において、署名生成アルゴリズムＳｉｇの処理（３）と同じハッシュ値の計算を行っていることに気づくであろう。これらの処理に注目し、図１３に示すように署名生成アルゴリズムＳｉｇ及び署名検証アルゴリズムＶｅｒの構成を改良することで、さらに計算効率を向上させることができる。
【０１９７】
（署名生成アルゴリズムＳｉｇ）
まず、改良後の署名生成アルゴリズムＳｉｇの構成について述べる。署名生成アルゴリズムＳｉｇは、以下の処理（１）〜処理（４）で構成される。
【０１９８】
処理（１）：署名生成アルゴリズムＳｉｇは、ａｉ＝（ｒｉ，ｔｉ，ｅｉ，ｒｉＡ，ｔｉＡ，ｅｉＡ，ｃ１，ｉ，ｃ２，ｉ，ｃ３，ｉ）を生成する。
処理（２）：署名生成アルゴリズムＳｉｇは、（ｄ１，…，ｄＮ）←Ｈ（Ｍ，ｃ１，１，ｃ２，２，ｃ３，３，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎ）を計算する。このＭは、署名を付与する文書である。
処理（３）：署名生成アルゴリズムＳｉｇは、Ｒｓｐｉ←Ｓｅｌｅｃｔ（ｄｉ，ａｉ）を計算する。
処理（４）：署名生成アルゴリズムＳｉｇは、（ｄ１，…，ｄＮ，Ｒｓｐ１，…，ＲｓｐＮ）を署名に設定する。
【０１９９】
（署名検証アルゴリズムＶｅｒ）
次に、改良後の署名検証アルゴリズムＶｅｒの構成について述べる。署名検証アルゴリズムＶｅｒは、以下の処理（１）及び処理（２）で構成される。
【０２００】
処理（１）：署名検証アルゴリズムＶｅｒは、ｄ１，…，ｄＮ及びＲｓｐ１，…，ＲｓｐＮを用いてｃ１，１，ｃ２，２，ｃ３，３，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎを生成する。
処理（２）：署名検証アルゴリズムＶｅｒは、再生したｃ１，１，ｃ２，１，ｃ３，１，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎを用いて（ｄ１，…，ｄＮ）＝Ｈ（Ｍ，ｃ１，１，ｃ２，１，ｃ３，１，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎ）を検証する。
【０２０１】
上記のように署名生成アルゴリズムＳｉｇ及び署名検証アルゴリズムＶｅｒの構成を改良することにより、各アルゴリズムにおいてハッシュ値の計算が１回ずつ削減される。その結果、さらに計算効率を向上させることができる。
【０２０２】
［２−７：多次多変数連立方程式の形式］
これまで説明してきたように、本手法は、多次多変数連立方程式の求解問題に対する解答の困難性に安全性の根拠をおく方式である。また、本手法は、複雑な多次多変数連立方程式を利用可能な点に特徴がある。ここまでの説明においては多次多変数連立方程式の形式に特別な限定を行ってこなかったが、例えば、十分に困難性が補償されている暗号要素技術を表現に含む多次多変数連立方程式を利用することが好ましい。以下、本手法に適用可能な多次多変数連立方程式の具体例を紹介する。
【０２０３】
（２−７−１：共通鍵ブロック暗号に関する形式）
ＡＥＳ、ＤＥＳ、ＫＡＴＡＮなどの共通鍵ブロック暗号技術は、よく解析され、安全性及び信頼性が高い要素技術である。これらの共通鍵ブロック暗号は、共通鍵ブロック暗号の鍵、平文、暗号文を変数とする多次多変数連立方程式により表現することができる。この多次多変数連立方程式において平文と暗号文を表現する変数に値を与えると、この多次多変数連立方程式は、鍵を表現する変数だけを変数に持つ方程式になる。
【０２０４】
このような共通鍵ブロック暗号を表現した多次多変数連立方程式の解を求めることは、平文と暗号文から共通鍵ブロック暗号の鍵を復元することに相当する。つまり、その共通鍵ブロック暗号の安全性が維持されている限りにおいて、その共通鍵ブロック暗号を表現した多次多変数連立方程式の求解困難性は担保される。そのため、ある共通鍵ブロック暗号方式を表現する多次多変数連立方程式を本手法に適用するならば、共通鍵ブロック暗号方式の安全性と同等の安全性を具備した公開鍵認証方式が実現される。
【０２０５】
但し、共通鍵ブロック暗号を、鍵、平文、暗号文を変数とする多次多変数連立方程式で表現した場合、多項式の次数が大きくなるため、連立方程式を表現するためのデータサイズが増大してしまう。そこで、鍵、平文、暗号文に加え、それぞれのラウンドにおける内部状態を表現するための変数を導入する。この変数を導入すれば、共通鍵ブロック暗号を表現する多次多変数連立方程式の次数を小さくすることができる。例えば、平文と暗号文を表現する変数に適当な値を代入し、鍵と内部状態を表現するための変数に関する連立方程式を導入する。このような方法を採用することにより、変数の数は増加するが、次数が下がるため、連立方程式の表現はコンパクトになる。
【０２０６】
（２−７−２：ハッシュ関数に関する形式）
同様に、ＳＨＡ−１、ＳＨＡ−２５６などのハッシュ関数に関する多次多変数連立方程式を本手法に適用することも可能である。これらのハッシュ関数は、ハッシュ関数の入力となるメッセージと出力となるハッシュ値を変数とする多次多変数連立方程式で表現することができる。この多次多変数連立方程式において、ハッシュ値を表現する変数に適当な値を与えると、対応する入力を表現した変数に関する多次多変数連立方程式が得られる。
【０２０７】
このような多次多変数連立方程式の解を求めることは、ハッシュ値から、元になるメッセージの値を復元することに相当する。つまり、そのハッシュ関数の安全性（一方向性）が維持されている限りにおいて、そのハッシュ関数を表現した多次多変数連立方程式の求解問題に対する解答の困難性は担保される。そのため、あるハッシュ関数を表現した多次多変数連立方程式を本手法に適用すれば、ハッシュ関数の安全性に基づく公開鍵認証方式が実現される。
【０２０８】
但し、入力メッセージ及びハッシュ値を変数とする多次多変数連立方程式でハッシュ関数を表現した場合には多項式の次数が大きくなるため、連立方程式を表現するためのデータサイズが増大してしまう。そこで、入力メッセージとハッシュ値に加え、内部状態を表現するための変数を導入する。この変数を導入すれば、ハッシュ関数を表現する多次多変数連立方程式の次数を小さくすることができる。例えば、ハッシュ値を表現する変数に適用な値を代入し、入力メッセージ及び内部状態を表現するための変数に関する連立方程式を導入する。このような方法を採用することにより、変数の数は増加するが、次数が下がるため、連立方程式の表現はコンパクトになる。
【０２０９】
（２−７−３：ストリーム暗号に関する形式）
同様に、Ｔｒｉｖｉｕｍなどのストリーム暗号に関する多次多変数連立方程式を本手法に適用することも可能である。これらのストリーム暗号は、ストリーム暗号の初期の内部状態を表現する変数及び出力されるストリームを表現する変数に関する多次多変数連立方程式で表現することが可能である。この場合、出力ストリームを表現する変数に適当な値を与えると、対応する初期の内部状態を表現するための変数に関する多次多変数連立方程式が得られる。
【０２１０】
このような多次多変数連立方程式の解を求めることは、出力されたストリームの値から、元になった初期の内部状態を表現する変数を復元することに相当する。つまり、そのストリーム暗号の安全性が確保されている限りにおいて、そのストリーム暗号を表現した多次多変数連立方程式の求解問題に対する解答の困難性は担保されている。そのため、あるストリーム暗号を表現した多次多変数連立方程式を本手法に適用すれば、ストリーム暗号の安全性に基づく公開鍵認証方式が実現される。
【０２１１】
但し、初期の内部状態と出力ストリームを変数とする多次多変数連立方程式でストリーム暗号を表現した場合、多項式の次数が大きくなり、連立方程式を表現するサイズが増大してしまう。そこで、初期の内部状態と出力ストリームに加え、それぞれのラウンドにおける内部状態を表現するための変数を導入する。この変数を導入すれば、ストリーム暗号を表現するための多次多変数連立方程式の次数を小さくすることが可能になる。例えば、出力ストリームを表現する変数に適当な値を代入し、初期の内部状態とラウンドにおける内部状態を表現するための変数に関する連立方程式を導入する。このような方法を採用することにより、変数の数は増加するが、次数が下がるため、連立方程式の表現はコンパクトになる。
【０２１２】
以上、本手法に適用可能な多次多変数連立方程式の具体例について説明した。
【０２１３】
［２−８：直列・並列ハイブリッドアルゴリズム］
偽証が成功する確率を無視できる程度にまで小さくするために、対話プロトコルを複数回実行する必要性については既に説明した通りである。また、対話プロトコルを複数回実行する方法として、直列的な方法と並列的な方法とを紹介した。特に、並列的な方法については、具体的な並列化アルゴリズムを示して説明した。ここでは、直列的な方法と並列的な方法とを組み合わせたハイブリッドタイプのアルゴリズムを紹介する。
【０２１４】
（ハイブリッド構成１）
図１４を参照しながら、ハイブリッドタイプのアルゴリズム（以下、並直列アルゴリズム）について説明する。図１４には、本手法に係る基本構成、この基本構成を直列化した直列化アルゴリズム、並列化した並列化アルゴリズム、及び並直列アルゴリズムを示した。
【０２１５】
基本構成では、１パス目にメッセージ（ｃ１，ｃ２，ｃ３）が証明者から検証者へと送られる。２パス目では、検証者から証明者へと要求ｄが送られる。３パス目では、証明者から検証者へと返答σが送られる。
【０２１６】
上記の基本構成を並列化した場合、１パス目では、Ｎ回分のメッセージ（ｃ１，１，ｃ２，１，ｃ３，１，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎ）が証明者から検証者へと送られる。２パス目では、検証者から証明者へとＮ回分の要求（ｄ１，…，ｄＮ）が送られる。３パス目では、証明者から検証者へとＮ回分の返答（σ１，…，σＮ）が送られる。本手法に係る並列化アルゴリズムは、受動的攻撃に対する安全性が保証される。また、対話の回数が３回で済む。さらに、１パス目で送信されるＮ回分のメッセージを１つのハッシュ値に纏めることにより、通信効率を向上させることができる。
【０２１７】
一方、上記の基本構成を直列化した場合、１パス目では、１回分のメッセージ（ｃ１，１，ｃ２，１，ｃ３，１）が証明者から検証者へと送られる。２パス目では、検証者から証明者へと１回分の要求ｄ１が送られる。３パス目では、証明者から検証者へと１回分の返答σ１が送られる。４パス目では、１回分のメッセージ（ｃ１，２，ｃ２，２，ｃ３，２）が証明者から検証者へと送られる。５パス目では、検証者から証明者へと１回分の要求ｄ２が送られる。６パス目では、証明者から検証者へと１回分の返答σ２が送られる。同様にして、証明者から検証者へと返答σＮが送られるまで対話が繰り返し実行される。直列化アルゴリズムは、能動的攻撃に対する安全性が保証される。また、偽証確率が確実に削減されることを証明することが可能である。
【０２１８】
さて、並直列アルゴリズムは、並列化アルゴリズムの性質と直列化アルゴリズムの性質とを併せ持つアルゴリズムである。図１４に示した並直列アルゴリズムでは、１パス目で、Ｎ回分のメッセージ（ｃ１，１，ｃ２，１，ｃ３，１，…，ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎ）が証明者から検証者へと送られる。２パス目では、検証者から証明者へと１回分の要求ｄ１が送られる。３パス目では、証明者から検証者へと１回分の返答σ１が送られる。その後、証明者と検証者との間で要求ｄ２，…，ｄＮ及び返答σ２，…，σＮのやり取りが行われる。
【０２１９】
本手法に基づく並直列アルゴリズムの場合、受動的攻撃に対する安全性が保証される。また、対話の回数が２Ｎ＋１回で済む。さらに、１パス目で送信されるＮ回分のメッセージを１つのハッシュ値に纏めることにより、通信効率を向上させることができる。
【０２２０】
（ハイブリッド構成２）
図１５を参照しながら、他のハイブリッドタイプのアルゴリズム（以下、直並列アルゴリズム）について説明する。図１５には、本手法に係る基本構成、この基本構成を直列化した直列化アルゴリズム、並列化した並列化アルゴリズム、及び直並列アルゴリズムを示した。なお、基本構成、直列化アルゴリズム、並列化アルゴリズムの構成及び性質については、上記の通りである。
【０２２１】
図１５に示した直並列アルゴリズムは、並列化アルゴリズムの性質と直列化アルゴリズムの性質とを併せ持つアルゴリズムである。図１５に示した直並列アルゴリズムでは、１パス目で、１回分のメッセージ（ｃ１，１，ｃ２，１，ｃ３，１）が証明者から検証者へと送られる。２パス目では、検証者から証明者へと１回分の要求ｄ１が送られる。その後、証明者と検証者との間でメッセージ（ｃ１，２，ｃ２，２，ｃ３，２），…，（ｃ１，Ｎ，ｃ２，Ｎ，ｃ３，Ｎ）及び要求ｄ２，…，ｄＮのやり取りが行われる。要求ｄＮが検証者から証明者へと送られた後、証明者から検証者へとＮ回分の返答σ１，…，σＮが送られる。
【０２２２】
本手法に基づく直並列アルゴリズムの場合、能動的攻撃に対する安全性が保証される。また、対話の回数が２Ｎ＋１回で済む。
【０２２３】
以上、本手法に基づくハイブリッドタイプのアルゴリズムについて説明した。
【０２２４】
以上、本技術の第１実施形態について説明した。
【０２２５】
＜３：第２実施形態＞
次に、本技術の第２実施形態について説明する。これまで３パスの公開鍵認証方式について説明してきた。本実施形態では、５パスの公開鍵認証方式（以下、本手法）について説明する。本手法は、検証者の検証パターンを２ｑ通りにすることにより、公開鍵認証方式の健全性を確保する方式である。
【０２２６】
なお、上記の第１実施形態に係る３パスの公開鍵認証方式は、対話プロトコル１回当たりの偽証確率が２／３であったが、本手法では、後述するように対話プロトコル１回当たりの偽証確率は１／２＋１／ｑとなる。但し、ｑは、利用する環の位数である。従って、環の位数が十分に大きい場合、図３９に示すように、本手法の方が１回当たりの偽証確率を低減することが可能になり、少ない対話プロトコルの実行回数で、偽証確率を十分に小さくすることができる。
【０２２７】
５パスの公開鍵認証方式に係る対話プロトコルは、３パスの公開鍵認証方式に係る対話プロトコルよりも効率が低いように思われるかもしれない。しかし、５パスの公開鍵認証方式においては、環の位数を十分に大きくとった場合、対話プロトコル１回当たりの偽証確率が１／２に近くなるため、同じセキュリティレベルを達成するために必要な対話プロトコルの実行回数が少なくて済む。
【０２２８】
例えば、偽証確率を１／２ｎ以下にしたい場合、３パスの公開鍵認証方式においては、ｎ／（ｌｏｇ３−１）＝１．７０１ｎ回以上、対話プロトコルを実行する必要がある。一方、５パスの公開鍵認証方式においては、ｎ／（１−ｌｏｇ（１＋１／ｑ））回以上、対話プロトコルを実行する必要がある。図３９に示すように、例えば、ｑ＝２４にすれば、同じセキュリティレベルを実現するのに必要な通信量は、３パスの公開鍵認証方式に比べ、５パスの公開鍵認証方式の方が少なくなる。
【０２２９】
［３−１：公開鍵認証方式のアルゴリズム］
以下、図１６を参照しながら、５パスの公開鍵認証方式（本手法）に係るアルゴリズム構成について説明する。図１６は、本手法に係るアルゴリズムの構成について説明するための説明図である。
【０２３０】
（鍵生成アルゴリズムＧｅｎ）
鍵生成アルゴリズムＧｅｎは、環Ｋ上で定義されるｍ本の多変数多次多項式ｆ１（ｘ１，…，ｘｎ），…，ｆｍ（ｘ１，…，ｘｎ）と、ベクトルｓ＝（ｓ１，…，ｓｎ）∈Ｋｎを生成する。次に、鍵生成アルゴリズムＧｅｎは、ｙ＝（ｙ１，…，ｙｍ）←ｆ１（ｓ），…，ｆｍ（ｓ）を計算する。そして、鍵生成アルゴリズムＧｅｎは、（ｆ１，…，ｆｍ，ｙ）を公開鍵ｐｋに設定し、ｓを秘密鍵に設定する。なお、以下では、ベクトル（ｘ１，…，ｘｎ）をｘと表記し、多変数多次多項式の組（ｆ１（ｘ），…，ｆｍ（ｘ））をＦ（ｘ）と表記する。
【０２３１】
（証明者アルゴリズムＰ、検証者アルゴリズムＶ）
次に、図１６を参照しながら、対話プロトコルの中で証明者アルゴリズムＰ及び検証者アルゴリズムＶが実行する処理について説明する。この対話プロトコルの中で、証明者は、秘密鍵ｓの情報を検証者に一切漏らさずに、「自身がｙ＝Ｆ（ｓ）を満たすｓを知っていること」を検証者に示す。一方、検証者は、証明者がｙ＝Ｆ（ｓ）を満たすｓを知っているか否かを検証する。なお、公開鍵ｐｋは、検証者に公開されているものとする。また、秘密鍵ｓは、証明者により秘密に管理されているものとする。以下、図１６に示したフローチャートに沿って説明を進める。
【０２３２】
工程＃１：
まず、証明者アルゴリズムＰは、任意に数ｗを選択する。次いで、証明者アルゴリズムＰは、擬似乱数生成器Ｇに数ｗを適用してベクトルｒ∈Ｋｎと、ｎ変数多項式の組ＦＡ（ｘ）＝（ｆ１Ａ（ｘ），…，ｆｍＡ（ｘ））を生成する。つまり、証明者アルゴリズムＰは、（ｒ，ＦＡ）←Ｇ（ｗ）を計算する。次いで、証明者アルゴリズムＰは、ｚ←ｓ−ｒを計算する。この計算は、秘密鍵ｓをベクトルｒによりマスクする操作に相当する。
【０２３３】
工程＃１（続き）：
次いで、証明者アルゴリズムＰは、ＦＡ（ｚ）及びｚのハッシュ値ｃ１を生成する。つまり、証明者アルゴリズムＰは、ｃ１←Ｈ１（ＦＡ（ｚ），ｚ）を計算する。また、証明者アルゴリズムＰは、数ｗのハッシュ値ｃ２を生成する。つまり、証明者アルゴリズムＰは、ｃ２←Ｈ２（ｗ）を計算する。なお、上記のＨ１（…）、Ｈ２（…）は、ハッシュ関数である。工程＃１で生成されたメッセージ（ｃ１，ｃ２）は、検証者に送られる。このとき、ｓに関する情報、ｒに関する情報、ｚに関する情報が検証者に一切漏れない点に注意されたい。
【０２３４】
工程＃２：
検証者アルゴリズムＶは、ｑ通り存在する環Ｋの元からランダムに１つの数αを選択し、選択した数αを証明者アルゴリズムＰに送る。
【０２３５】
工程＃３：
数αを受け取った証明者アルゴリズムＰは、ＦＢ（ｘ）←αＦ（ｘ＋ｒ）＋ＦＡ（ｘ）を計算する。この計算は、ｘに関して多変数多項式Ｆ（ｘ＋ｒ）を多変数多項式ＦＡ（ｘ）によりマスクする操作に相当する。工程＃３で生成された多変数多項式ＦＢは、検証者アルゴリズムＶに送られる。このとき、ｄ＝０の場合にはｚに関する情報が検証者に一切漏れておらず、ｄ＝１の場合にはｒに関する情報が検証者に一切漏れない点に注意されたい。
【０２３６】
工程＃４：
多変数多項式ＦＢを受け取った検証者アルゴリズムＶは、２つの検証パターンのうち、どちらの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムＶは、検証パターンの種類を表す２つの数値｛０，１｝の中から１つの数値を選択し、選択した数値を要求ｄに設定する。この要求ｄは証明者アルゴリズムＰに送られる。
【０２３７】
工程＃５：
要求ｄを受け取った証明者アルゴリズムＰは、受け取った要求ｄに応じて検証者アルゴリズムＶに送り返す返答σを生成する。ｄ＝０の場合、証明者アルゴリズムＰは、返答σ＝ｗを生成する。ｄ＝１の場合、証明者アルゴリズムＰは、返答σ＝ｚを生成する。工程＃５で生成された返答σは、検証者アルゴリズムＶに送られる。
【０２３８】
工程＃６：
返答σを受け取った検証者アルゴリズムＶは、受け取った返答σを利用して以下の検証処理を実行する。
【０２３９】
ｄ＝０の場合、検証者アルゴリズムＶは、（ｒＡ，ＦＣ）←Ｇ（σ）を計算する。そして、検証者アルゴリズムＶは、ｃ２＝Ｈ２（σ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ＦＢ（ｘ）＝αＦ（ｘ＋ｒＡ）＋ＦＣ（ｘ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０２４０】
ｄ＝１の場合、検証者アルゴリズムＶは、ｚＡ←σを計算する。そして、検証者アルゴリズムＶは、ｃ１＝Ｈ１（ＦＣ（ｚＡ）−αｙ，ｚＡ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、この検証が成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０２４１】
以上、本手法に係る各アルゴリズムの構成について説明した。
【０２４２】
（本手法における健全性について）
本手法の健全性は、証明者アルゴリズムＰが（ｃ１，ｃ２）、及び、検証者アルゴリズムＶが選択する２通りの（α１，α２）について、要求ｄ＝０及び１に正しく回答した場合に、その回答内容から下記の式（１５）〜式（１７）を満たすＦ１Ｄ、Ｆ２Ｄ、ＦＣ、ｒＡ、ｚＡを計算できるということから保証されている。
【０２４３】
【数１２】
0005790291.tif 000013
【０２４４】
本手法の健全性が保証されることにより、多次多変数連立方程式の求解問題を解かない限りにおいて１／２＋１／ｑより高い確率で偽証することは不可能であることが保証される。つまり、検証者の要求ｄ＝０及び１の全てに正しく回答するためには、偽証者が上記の式（１５）〜式（１７）を満たすＦ１Ｄ、Ｆ２Ｄ、ＦＣ、ｒＡ、ｚＡを計算できる必要がある。言い換えると、偽証者はＦ（ｓ）＝ｙを満たすｓを計算できる必要がある。従って、多次多変数連立方程式の求解問題を解かない限り、偽証者は、１／２＋１／ｑより高い確率で偽証を成功させることができないのである。なお、上記の対話プロトコルを十分に多くの回数実行することにより、偽証の成功確率を無視できるほど小さくすることができる。
【０２４５】
（変形例）
上記の鍵生成アルゴリズムＧｅｎは、ｙ←Ｆ（ｓ）を計算し、公開鍵を（Ｆ，ｙ）に設定している。しかし、鍵生成アルゴリズムＧｅｎは、（ｙ１，…，ｙｍ）←Ｆ（ｓ）として、（ｆ１＊（ｘ），…，ｆｍ＊（ｘ））←（ｆ１（ｘ）−ｙ１，…，ｆｍ（ｘ）−ｙｍ）を計算し、公開鍵を（ｆ１＊，…，ｆｍ＊）に設定するように構成されていてもよい。このように変形すると、証明者アルゴリズムＰと検証者アルゴリズムＶとの間でｙ＝０として対話プロトコルを実行することが可能になる。
【０２４６】
また、証明者アルゴリズムＰは、ＦＢ（ｚ）のハッシュ値と、ｚのハッシュ値とを別々に計算し、それぞれをメッセージとして検証者に送るようにしてもよい。
【０２４７】
また、上記の証明者アルゴリズムＰは、数ｗに擬似乱数生成器Ｇ１を適用してベクトルｒ及び数ｗＡを生成していた。さらに、上記の証明者アルゴリズムＰは、数ｗＡを擬似乱数生成器Ｇ２に適用して多変数多項式ＦＡ（ｘ）を生成していた。しかし、証明者アルゴリズムＰは、Ｇ１を恒等写像とし、最初からｗ＝（ｒ，ＦＡ）を算出するように構成されていてもよい。この場合、数ｗをＧ１に適用する必要はない。Ｇ２についても同様である。
【０２４８】
以上、本手法の変形例について説明した。
【０２４９】
［３−２：拡張アルゴリズム］
次に、図１７を参照しながら、本手法を拡張した公開鍵認証方式（以下、拡張手法）のアルゴリズムについて説明する。図１７は、拡張手法に基づく対話プロトコルの流れについて説明するための説明図である。
【０２５０】
ここで説明する拡張手法は、３パス目に送信する多変数多項式ＦＢを１つのハッシュ値ｃ３に変換して検証者に送る方式である。このように拡張することで、対話プロトコルの中で表現サイズの大きい多変数多項式ＦＢを検証者アルゴリズムＶに送る際の通信量を半減することが可能になり、やり取りすべき平均的なデータサイズを削減することができる。以下、拡張方式における各アルゴリズムの構成について詳細に説明する。
【０２５１】
（鍵生成アルゴリズムＧｅｎ）
鍵生成アルゴリズムＧｅｎは、環Ｋ上で定義されるｍ本の多変数多次多項式ｆ１（ｘ１，…，ｘｎ），…，ｆｍ（ｘ１，…，ｘｎ）、及びベクトルｓ＝（ｓ１，…，ｓｎ）∈Ｋｎを生成する。次に、鍵生成アルゴリズムＧｅｎは、ｙ＝（ｙ１，…，ｙｍ）←（ｆ１（ｓ），…，ｆｍ（ｓ））を計算する。そして、鍵生成アルゴリズムＧｅｎは、（ｆ１，…，ｆｍ，ｙ）を公開鍵ｐｋに設定し、ｓを秘密鍵に設定する。なお、以下では、ベクトル（ｘ１，…，ｘｎ）をｘと表記し、多変数多次多項式の組（ｆ１（ｘ），…，ｆｍ（ｘ））をＦ（ｘ）と表記する。
【０２５２】
（証明者アルゴリズムＰ、検証者アルゴリズムＶ）
次に、図１７を参照しながら、対話プロトコルの中で証明者アルゴリズムＰ及び検証者アルゴリズムＶが実行する処理について説明する。この対話プロトコルの中で、証明者は、秘密鍵ｓの情報を検証者に一切漏らさずに、「自身がｙ＝Ｆ（ｓ）を満たすｓを知っていること」を検証者に示す。一方、検証者は、証明者がｙ＝Ｆ（ｓ）を満たすｓを知っているか否かを検証する。なお、公開鍵ｐｋは、検証者に公開されているものとする。また、秘密鍵ｓは、証明者により秘密に管理されているものとする。以下、図１７に示したフローチャートに沿って説明を進める。
【０２５３】
工程＃１：
まず、証明者アルゴリズムＰは、任意に数ｗを選択する。次いで、証明者アルゴリズムＰは、擬似乱数生成器Ｇに数ｗを適用してベクトルｒ∈Ｋｎ及び多変数多項式ＦＡ（ｘ）を生成する。つまり、証明者アルゴリズムＰは、（ｒ，ＦＡ）←Ｇ（ｗ）を計算する。次いで、証明者アルゴリズムＰは、ｚ←ｓ−ｒを計算する。この計算は、秘密鍵ｓをベクトルｒによりマスクする操作に相当する。
【０２５４】
工程＃１（続き）：
次いで、証明者アルゴリズムＰは、ＦＡ（ｚ）及びｚのハッシュ値ｃ１を生成する。つまり、証明者アルゴリズムＰは、ｃ１←Ｈ１（ＦＡ（ｚ），ｚ）を計算する。また、証明者アルゴリズムＰは、数ｗのハッシュ値ｃ２を生成する。つまり、証明者アルゴリズムＰは、ｃ２←Ｈ２（ｗ）を計算する。なお、上記のＨ１（…）、Ｈ２（…）は、ハッシュ関数である。工程＃１で生成されたメッセージ（ｃ１，ｃ２）は、検証者アルゴリズムＶに送られる。
【０２５５】
工程＃２：
メッセージ（ｃ１，ｃ２）を受け取った検証者アルゴリズムＶは、ｑ通り存在する環Ｋの元からランダムに１つの数αを選択し、選択した数αを証明者アルゴリズムＰに送る。
【０２５６】
工程＃３：
数αを受け取った証明者アルゴリズムＰは、ＦＢ（ｘ）←αＦ（ｘ＋ｒ）＋ＦＡ（ｘ）を計算する。この計算は、ｘについて多変数多項式Ｆ（ｘ＋ｒ）を多変数多項式ＦＡ（ｘ）によりマスクする操作に相当する。さらに、証明者アルゴリズムＰは、多変数多項式の組ＦＢのハッシュ値ｃ３を生成する。つまり、証明者アルゴリズムＰは、ｃ３←Ｈ３（ＦＢ（ｘ））を計算する。なお、上記のＨ３（…）は、ハッシュ関数である。工程＃３で生成されたメッセージｃ３は、検証者に送られる。
【０２５７】
工程＃４：
メッセージｃ３を受け取った検証者アルゴリズムＶは、２つの検証パターンのうち、どちらの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムＶは、検証パターンの種類を表す２つの数値｛０，１｝の中から１つの数値を選択し、選択した数値を要求ｄに設定する。この要求ｄは証明者アルゴリズムＰに送られる。
【０２５８】
工程＃５：
要求ｄを受け取った証明者アルゴリズムＰは、受け取った要求ｄに応じて検証者アルゴリズムＶに送り返す返答σを生成する。ｄ＝０の場合、証明者アルゴリズムＰは、返答σ＝ｗを生成する。ｄ＝１の場合、証明者アルゴリズムＰは、返答σ＝（ｚ，ＦＢ）を生成する。工程＃５で生成された返答σは、検証者アルゴリズムＶに送られる。
【０２５９】
工程＃６：
返答σを受け取った検証者アルゴリズムＶは、受け取った返答σを利用して以下の検証処理を実行する。
【０２６０】
ｄ＝０の場合、検証者アルゴリズムＶは、（ｒＡ，ＦＣ）←Ｇ（σ）を計算する。そして、検証者アルゴリズムＶは、ｃ２＝Ｈ２（σ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ｃ３＝Ｈ３（αＦ（ｘ＋ｒＡ）＋ＦＣ（ｘ））の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０２６１】
ｄ＝１の場合、検証者アルゴリズムＶは、（ｚＡ，ＦＣ）←σを計算する。そして、検証者アルゴリズムＶは、ｃ１＝Ｈ１（ＦＣ（ｚＡ）−αｙ，ｚＡ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ｃ２＝Ｈ２（ＦＣ（ｘ））の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０２６２】
以上、拡張方式の対話プロトコルの中で各アルゴリズムが実行する処理について説明した。このように拡張することで、対話プロトコルの中で表現サイズの大きい多変数多項式ＦＢを検証者アルゴリズムＶに送る際の通信量を半減することが可能になり、やり取りすべき平均的なデータサイズを削減することができる。
【０２６３】
［３−３：並列化アルゴリズム］
さて、先に述べた通り、本手法又は拡張手法に係る対話プロトコルを適用すれば、偽証が成功する確率を（１／２＋１／ｑ）以下に抑制することができる。従って、この対話プロトコルを２回実行すれば、偽証が成功する確率を（１／２＋１／ｑ）２以下に抑制することができる。さらに、この対話プロトコルをＮ回実行すると、偽証が成功する確率は（１／２＋１／ｑ）Ｎとなり、Ｎを十分に大きい数（例えば、Ｎ＝８０）にすれば、偽証が成功する確率は無視できる程度に小さくなる。
【０２６４】
対話プロトコルを複数回実行する方法としては、例えば、メッセージ、要求、返答のやり取りを逐次的に複数回繰り返す直列的な方法と、１回分のやり取りで複数回分のメッセージ、要求、返答のやり取りを行う並列的な方法とが考えられる。ここでは、本手法に係る対話プロトコルを並列的な方法に係る対話プロトコル（以下、並列化アルゴリズム）に拡張する方法について説明する。例えば、並列化アルゴリズムは図１８のようになる。以下、図１８を参照しながら、並列化アルゴリズムの内容について説明する。
【０２６５】
（鍵生成アルゴリズムＧｅｎ）
鍵生成アルゴリズムＧｅｎは、環Ｋ上で定義されるｍ本の多変数多次多項式ｆ１（ｘ１，…，ｘｎ），…，ｆｍ（ｘ１，…，ｘｎ）、及びベクトルｓ＝（ｓ１，…，ｓｎ）∈Ｋｎを生成する。次に、鍵生成アルゴリズムＧｅｎは、ｙ＝（ｙ１，…，ｙｍ）←（ｆ１（ｓ），…，ｆｍ（ｓ））を計算する。そして、鍵生成アルゴリズムＧｅｎは、（ｆ１，…，ｆｍ，ｙ）を公開鍵ｐｋに設定し、ｓを秘密鍵に設定する。なお、以下では、ベクトル（ｘ１，…，ｘｎ）をｘと表記し、多変数多次多項式の組（ｆ１（ｘ），…，ｆｍ（ｘ））をＦ（ｘ）と表記する。
【０２６６】
（証明者アルゴリズムＰ、検証者アルゴリズムＶ）
次に、図１８を参照しながら、対話プロトコルの中で証明者アルゴリズムＰが実行する処理及び検証者アルゴリズムＶが実行する処理について説明する。
【０２６７】
上記の対話プロトコルの中で、証明者は、秘密鍵ｓの情報を検証者に一切漏らさずに、「自身がｙ＝Ｆ（ｓ）を満たすｓを知っていること」を検証者に示す。一方、検証者は、証明者がｙ＝Ｆ（ｓ）を満たすｓを知っているか否かを検証する。なお、公開鍵ｐｋは、検証者に公開されているものとする。また、秘密鍵ｓは、証明者により秘密に管理されているものとする。以下、図１８に示したフローチャートに沿って説明を進める。
【０２６８】
工程＃１：
まず、証明者アルゴリズムＰは、ｉ＝１〜Ｎについて、以下の処理（１）〜処理（５）を実行する。
処理（１）：証明者アルゴリズムＰは、任意に数ｗｉを選択する。
処理（２）：証明者アルゴリズムＰは、擬似乱数生成器Ｇに数ｗｉを適用してベクトルｒｉ∈Ｋｎ及び多項式の組ＦｉＡ（ｘ）を生成する。つまり、証明者アルゴリズムＰは、（ｒｉ，ＦｉＡ）←Ｇ（ｗｉ）を計算する。
処理（３）：証明者アルゴリズムＰは、ｚｉ←ｓ−ｒｉを計算する。この計算は、秘密鍵ｓをベクトルｒｉによりマスクする操作に相当する。
処理（４）：証明者アルゴリズムＰは、ＦｉＡ（ｚｉ）及びｚｉのハッシュ値ｃ１，ｉを生成する。つまり、証明者アルゴリズムＰは、ｃ１，ｉ←Ｈ１（ＦｉＡ（ｚｉ），ｚｉ）を計算する。
処理（５）：証明者アルゴリズムＰは、数ｗｉＡのハッシュ値ｃ２，ｉを生成する。つまり、証明者アルゴリズムＰは、ｃ２，ｉ←Ｈ２（ｗｉＡ）を計算する。
【０２６９】
ｉ＝１〜Ｎについて、上記の処理（１）〜処理（５）が実行された後、工程＃１で生成されたメッセージ（ｃ１，ｉ，ｃ２，ｉ）（ｉ＝１〜Ｎ）は、検証者アルゴリズムＶに送られる。
【０２７０】
工程＃２：
メッセージ（ｃ１，ｉ，ｃ２，ｉ）（ｉ＝１〜Ｎ）を受け取った検証者アルゴリズムＶは、ｑ通り存在する環Ｋの元からランダムにＮ個の数α１，…，αＮを選択する。そして、検証者アルゴリズムＶは、選択した数α１，…，αＮを証明者アルゴリズムＰに送る。
【０２７１】
工程＃３：
数α１，…，αＮを受け取った証明者アルゴリズムＰは、ｉ＝１〜Ｎについて、ＦｉＢ（ｘ）←αｉＦ（ｘ＋ｒｉ）＋ＦｉＡ（ｘ）を計算する。この計算は、ｘに関して多変数多項式Ｆ（ｘ＋ｒｉ）を多変数多項式ＦｉＡ（ｘ）によりマスクする操作に相当する。そして、証明者アルゴリズムＰは、多変数多項式Ｆ１Ｂ，…，ＦＮＢを検証者アルゴリズムＶに送る。
【０２７２】
工程＃４：
多変数多項式Ｆ１Ｂ，…，ＦＮＢを受け取った検証者アルゴリズムＶは、ｉ＝１〜Ｎのそれぞれについて、２つの検証パターンのうち、どちらの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムＶは、ｉ＝１〜Ｎのそれぞれについて、検証パターンの種類を表す２つの数値｛０，１｝の中から１つの数値を選択し、選択した数値を要求ｄｉに設定する。この要求ｄｉは証明者アルゴリズムＰに送られる。
【０２７３】
工程＃５：
要求ｄｉ（ｉ＝１〜Ｎ）を受け取った証明者アルゴリズムＰは、受け取った要求ｄｉに応じて検証者アルゴリズムＶに送り返す返答σｉを生成する。ここで、証明者アルゴリズムＰは、ｉ＝１〜Ｎについて、以下の処理（１）及び処理（２）を実行する。
処理（１）：ｄｉ＝０の場合、証明者アルゴリズムＰは、返答σｉ＝ｗｉを生成する。
処理（２）：ｄｉ＝１の場合、証明者アルゴリズムＰは、返答σｉ＝ｚｉを生成する。
上記の処理（１）及び処理（２）の処理が実行された後、返答σｉ（ｉ＝１〜Ｎ）は、検証者アルゴリズムＶに送られる。
【０２７４】
工程＃６：
返答σｉ（ｉ＝１〜Ｎ）を受け取った検証者アルゴリズムＶは、受け取った返答σｉ（ｉ＝１〜Ｎ）を利用して以下の検証処理を実行する。なお、以下の処理は、ｉ＝１〜Ｎについて実行される。
【０２７５】
ｄｉ＝０の場合、検証者アルゴリズムＶは、（ｒｉＡ，ＦｉＣ）←Ｇ（σｉ）を計算する。そして、検証者アルゴリズムＶは、ｃ２，ｉ＝Ｈ２（σｉ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ＦｉＢ（ｘ）＝αｉＦ（ｘ＋ｒｉＡ）＋ＦｉＣ（ｘ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０２７６】
ｄｉ＝１の場合、検証者アルゴリズムＶは、ｚｉＡ←σｉを計算する。そして、検証者アルゴリズムＶは、ｃ１，ｉ＝Ｈ１（ＦｉＣ（ｚｉＡ）−αｉｙ，ｚｉ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、この検証が成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０２７７】
以上、本手法の対話プロトコルを並列的に実行する方法について説明した。上記のように、本手法の対話プロトコルを繰り返し実行することにより、偽証が成功する確率を無視できる程度まで低減させることが可能になる。なお、拡張方式についても同様にして並列化することが可能である。
【０２７８】
（変形例）
上記の工程＃１の後、メッセージ（ｃ１，１，ｃ１，２，…，ｃＮ，１，ｃＮ，２）を検証者アルゴリズムＶに送信する代わりに、メッセージをハッシュ値Ｈ（ｃ１，１，ｃ１，２，…，ｃＮ，１，ｃＮ，２）にまとめて送信するように対話プロトコルの構成を変形してもよい。この変形を適用すると、１パス目で送るメッセージが１つのハッシュ値だけとなり、大幅に通信量を削減することが可能になる。但し、証明者アルゴリズムＰから送られる情報を用いても検証者アルゴリズムＶにより復元できないメッセージが存在するため、返答が送られる際に、そのメッセージも送られるようにする必要がある。なお、この構成によると、Ｎ回の並列的繰り返し構成の場合、送るべき情報の数をＮ−１個削減することが可能になる。
【０２７９】
（拡張方式に係る並列化アルゴリズムについて）
ここで、図１９を参照しながら、拡張方式に係る並列化アルゴリズムの構成について説明する。なお、鍵生成アルゴリズムＧｅｎの構成については本手法に係る並列化アルゴリズムと同じであるため、詳細な説明を省略する。
【０２８０】
工程＃１：
まず、証明者アルゴリズムＰは、ｉ＝１〜Ｎについて、以下の処理（１）〜処理（５）を実行する。
処理（１）：証明者アルゴリズムＰは、任意に数ｗｉを選択する。
処理（２）：証明者アルゴリズムＰは、擬似乱数生成器Ｇに数ｗｉを適用してベクトルｒｉ∈Ｋｎ及び多変数多項式の組ＦｉＡ（ｘ）を生成する。つまり、証明者アルゴリズムＰは、（ｒｉ，ＦｉＡ）←Ｇ（ｗｉ）を計算する。
処理（３）：証明者アルゴリズムＰは、ｚｉ←ｓ−ｒｉを計算する。この計算は、秘密鍵ｓをベクトルｒｉによりマスクする操作に相当する。
処理（４）：証明者アルゴリズムＰは、ＦｉＡ（ｚｉ）及びｚｉのハッシュ値ｃ１，ｉを生成する。つまり、証明者アルゴリズムＰは、ｃ１，ｉ←Ｈ１（ＦｉＡ（ｚｉ），ｚｉ）を計算する。
処理（５）：証明者アルゴリズムＰは、数ｗｉのハッシュ値ｃ２，ｉを生成する。つまり、証明者アルゴリズムＰは、ｃ２，ｉ←Ｈ２（ｗｉ）を計算する。
【０２８１】
ｉ＝１〜Ｎについて、上記の処理（１）〜処理（５）が実行された後、工程＃１で生成されたメッセージ（ｃ１，ｉ，ｃ２，ｉ）（ｉ＝１〜Ｎ）は、検証者アルゴリズムＶに送られる。
【０２８２】
工程＃２：
メッセージ（ｃ１，ｉ，ｃ２，ｉ）（ｉ＝１〜Ｎ）を受け取った検証者アルゴリズムＶは、ｑ通り存在する環Ｋの元からランダムにＮ個の数α１，…，αＮを選択する。そして、検証者アルゴリズムＶは、選択した数α１，…，αＮを証明者に送る。
【０２８３】
工程＃３：
数α１，…，αＮを受け取った証明者アルゴリズムＰは、ｉ＝１〜Ｎについて、ＦｉＢ（ｘ）←αｉＦ（ｘ＋ｒｉ）＋ＦｉＡ（ｘ）を計算する。この計算は、ｘに関して多変数多項式Ｆ（ｘ＋ｒｉ）を多変数多項式ＦｉＡ（ｘ）によりマスクする操作に相当する。次いで、証明者アルゴリズムＰは、多変数多項式Ｆ１Ｂ，…，ＦＮＢのハッシュ値ｃ３を生成する。つまり、証明者アルゴリズムＰは、ｃ３←Ｈ３（Ｆ１Ｂ，…，ＦＮＢ）を計算する。なお、上記のＨ３（…）は、ハッシュ関数である。工程＃３で生成されたメッセージｃ３は、検証者アルゴリズムＶに送られる。
【０２８４】
工程＃４：
メッセージｃ３を受け取った検証者アルゴリズムＶは、ｉ＝１〜Ｎのそれぞれについて、２つの検証パターンのうち、どちらの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムＶは、ｉ＝１〜Ｎのそれぞれについて、検証パターンの種類を表す２つの数値｛０，１｝の中から１つの数値を選択し、選択した数値を要求ｄｉに設定する。この要求ｄｉは証明者アルゴリズムＰに送られる。
【０２８５】
工程＃５：
要求ｄｉ（ｉ＝１〜Ｎ）を受け取った証明者アルゴリズムＰは、受け取った要求ｄｉに応じて検証者アルゴリズムＶに送り返す返答σｉを生成する。ここで、証明者アルゴリズムＰは、ｉ＝１〜Ｎについて、以下の処理（１）及び処理（２）を実行する。
処理１：ｄｉ＝０の場合、証明者アルゴリズムＰは、返答σｉ＝ｗｉを生成する。
処理２：ｄｉ＝１の場合、証明者アルゴリズムＰは、返答σｉ＝（ｚｉ，ＦｉＢ）を生成する。
上記の処理（１）及び処理（２）の処理が実行された後、返答σｉ（ｉ＝１〜Ｎ）は、検証者アルゴリズムＶに送られる。
【０２８６】
工程＃６：
返答σｉ（ｉ＝１〜Ｎ）を受け取った検証者アルゴリズムＶは、受け取った返答σｉ（ｉ＝１〜Ｎ）を利用して以下の検証処理を実行する。なお、以下の処理は、ｉ＝１〜Ｎについて実行される。
【０２８７】
ｄｉ＝０の場合、検証者アルゴリズムＶは、（ｒｉＡ，ＦｉＣ）←Ｇ（σｉ）を計算する。さらに、検証者アルゴリズムＶは、ＦｉＤ←αｉＦ（ｘ＋ｒｉＡ）＋ＦｉＣ（ｘ）を計算する。そして、検証者アルゴリズムＶは、ｃ２，ｉ＝Ｈ２（σｉ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ｃ３＝Ｈ３（Ｆ１Ｄ，…，ＦＮＤ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０２８８】
ｄｉ＝１の場合、検証者アルゴリズムＶは、（ｚｉＡ，ＦｉＤ）←σｉとする。そして、検証者アルゴリズムＶは、ｃ１，ｉ＝Ｈ１（ＦｉＤ（ｚｉＡ）−αｉｙ，ｚｉＡ）の等号が成り立つか否かを検証する。さらに、検証者アルゴリズムＶは、ｃ３＝Ｈ３（Ｆ１Ｄ，…，ＦＮＤ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０２８９】
以上、拡張方式に係る並列化アルゴリズムの構成について説明した。
【０２９０】
（好適なパラメータの設定方法について）
さて、上記の第１実施形態に係る対話プロトコルと同様、本実施形態に係る対話プロトコルは、受動的攻撃に対する安全性レベルを保証している。しかし、この対話プロトコルを並列的に繰り返し実行する上記の方法を適用した場合、能動的攻撃に対する安全性レベルが確実に保証されているということを証明するには、以下で説明するような条件が必要になる。
【０２９１】
上記の対話プロトコルは、１組の鍵ペア（公開鍵ｙ、秘密鍵ｓ）を用い、秘密鍵ｓの情報を検証者に一切漏らさず、「証明者がｙ＝Ｆ（ｓ）となるｓを知っていること」を対話を通じて証明者が検証者に証明するというものである。そのため、検証で受理される対話を行った場合、「対話の際に証明者がｓを用いた」という情報を検証者に知られてしまう可能性が否定できない。また、多変数多項式Ｆには衝突困難性が保証されてない。そのため、上記の対話プロトコルを並列的に繰り返し実行する場合、能動的攻撃に対する安全性が確実に保証されているということを無条件で証明することは難しい。
【０２９２】
そこで、本件発明者は、検証で受理される対話を行った場合においても、「対話の際に証明者がｓを用いた」という情報を検証者に知られないようにする方法について検討した。そして、本件発明者は、上記の対話プロトコルを並列的に繰り返し実行する場合でも、能動的攻撃に対する安全性が確実に保証されていることを証明できるようにする方法を考案した。この方法は、公開鍵として用いるｎ変数多次多項式ｆ１，…，ｆｍの本数ｍを変数の数ｎよりも十分に小さな値に設定するという設定条件を課す方法である。例えば、２ｍ−ｎ≪１となるようにｍ及びｎが設定される（例えば、ｎ＝１６０、ｍ＝８０の場合２−８０≪１である。）。
【０２９３】
上記のような多次多変数方程式の求解問題に対する解答の困難性に安全性の根拠をおく方式において、秘密鍵ｓ１と、それに対応する公開鍵ｐｋとが与えられても、その公開鍵ｐｋに対応する別の秘密鍵ｓ２を生成することは難しい。そのため、公開鍵ｐｋに対する秘密鍵ｓが２つ以上存在することを保証すれば、検証で受理される対話を行った場合においても、「対話の際に証明者がｓを用いた」という情報を検証者に知られないようにすることが可能になる。つまり、この保証が可能になれば、対話プロトコルを並列的に繰り返し実行する場合においても、能動的攻撃に対する安全性を保証することが可能になる。
【０２９４】
図４０を参照しながら、ｍ本のｎ変数多次多項式で構成される関数Ｆ：Ｋｎ→Ｋｍについて考えると（但し、ｎ＞ｍ）、２つ目の原像を持たない定義域の要素数は、最大で｜Ｋ｜ｍ−１個しか存在しない。そのため、｜Ｋ｜ｍ−ｎを十分に小さくすると、２つ目の原像を持たない定義域の要素が選択される確率を無視できる程度まで小さくすることができる。つまり、ｎ変数多次多項式ｆ１，…，ｆｍの数ｍがその変数の数ｎよりも十分に小さな値に設定されていれば、公開鍵ｐｋに対して２つ以上の秘密鍵ｓが存在することを保証できる。その結果、検証で受理される対話を行った場合においても、「対話の際に証明者がｓを用いた」という情報を検証者に知られないようにすることが可能になり、対話プロトコルを並列的に繰り返し実行する場合においても、能動的攻撃に対する安全性が保証される。
【０２９５】
以上説明したように、ｎ変数多次多項式ｆ１，…，ｆｍの数ｍがその変数の数ｎよりも小さな値（ｎ＞ｍ；好ましくは２ｍ−ｎ≪１）に設定する設定条件を課すことで、対話プロトコルを並列的に繰り返し実行する場合の安全性を保証することが可能になる。
【０２９６】
［３−４：具体例（２次多項式を利用する場合）］
次に、図２０を参照しながら、多変数多項式Ｆとしてｎ変数２次多項式を利用する場合について説明する。図２０は、本手法の一具体例について説明するための説明図である。
【０２９７】
（鍵生成アルゴリズムＧｅｎ）
鍵生成アルゴリズムＧｅｎは、環Ｋ上で定義されるｍ本の２次多項式ｆ１（ｘ１，…，ｘｎ），…，ｆｍ（ｘ１，…，ｘｎ）、及びベクトルｓ＝（ｓ１，…，ｓｎ）∈Ｋｎを生成する。次に、鍵生成アルゴリズムＧｅｎは、ｙ＝（ｙ１，…，ｙｍ）←（ｆ１（ｓ），…，ｆｍ（ｓ））を計算する。そして、鍵生成アルゴリズムＧｅｎは、（ｆ１，…，ｆｍ，ｙ）を公開鍵ｐｋに設定し、ｓを秘密鍵に設定する。なお、以下では、ベクトル（ｘ１，…，ｘｎ）をｘと表記し、２次多項式の組（ｆ１（ｘ），…，ｆｍ（ｘ））をＦ（ｘ）と表記する。
【０２９８】
（証明者アルゴリズムＰ、検証者アルゴリズムＶ）
次に、図２０を参照しながら、対話プロトコルの中で証明者アルゴリズムＰ及び検証者アルゴリズムＶにより実行される処理について説明する。
【０２９９】
工程＃１：
まず、証明者アルゴリズムＰは、任意に数ｗを選択する。次いで、証明者アルゴリズムＰは、擬似乱数生成器Ｇに数ｗを適用してベクトルｒ∈Ｋｎ、及び多変数多項式の組ＦＡ（ｘ）＝（ｆ１Ａ（ｘ），…，ｆｍＡ（ｘ））を生成する。つまり、証明者アルゴリズムＰは、（ｒ，ＦＡ）←Ｇ（ｗ）を計算する。次いで、証明者アルゴリズムＰは、ｚ←ｓ−ｒを計算する。この計算は、秘密鍵ｓをベクトルｒによりマスクする操作に相当する。但し、２次多項式ｆｉＡ（ｘ）は、下記の式（１８）のように表現される。
【０３００】
【数１３】
0005790291.tif 000014
【０３０１】
工程＃１（続き）：
次いで、証明者アルゴリズムＰは、ＦＡ（ｚ）及びｚのハッシュ値ｃ１を生成する。つまり、証明者アルゴリズムＰは、ｃ１←Ｈ１（ＦＡ（ｚ），ｚ）を計算する。また、証明者アルゴリズムＰは、数ｗのハッシュ値ｃ２を生成する。つまり、証明者アルゴリズムＰは、ｃ２←Ｈ２（ｗ）を計算する。なお、上記のＨ１（…）、Ｈ２（…）は、ハッシュ関数である。工程＃１で生成されたメッセージ（ｃ１，ｃ２）は、検証者アルゴリズムＶに送られる。
【０３０２】
工程＃２：
メッセージ（ｃ１，ｃ２）を受け取った検証者アルゴリズムＶは、ｑ通り存在する環Ｋの元からランダムに１つの数αを選択し、選択した数αを証明者アルゴリズムＰに送る。
【０３０３】
工程＃３：
数αを受け取った証明者アルゴリズムＰは、ＦＢ（ｘ）←αＦ（ｘ＋ｒ）＋ＦＡ（ｘ）を計算する。この計算は、ｘに関して多変数多項式Ｆ（ｘ＋ｒ）を多変数多項式ＦＡ（ｘ）によりマスクする操作に相当する。工程＃３で生成された多変数多項式ＦＢは、検証者アルゴリズムＶに送られる。
【０３０４】
工程＃４：
多変数多項式ＦＢを受け取った検証者アルゴリズムＶは、２つの検証パターンのうち、どちらの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムＶは、検証パターンの種類を表す２つの数値｛０，１｝の中から１つの数値を選択し、選択した数値を要求ｄに設定する。この要求ｄは証明者アルゴリズムＰに送られる。
【０３０５】
工程＃５：
要求ｄを受け取った証明者アルゴリズムＰは、受け取った要求ｄに応じて検証者アルゴリズムＶに送り返す返答σを生成する。ｄ＝０の場合、証明者アルゴリズムＰは、返答σ＝ｗを生成する。ｄ＝１の場合、証明者アルゴリズムＰは、返答σ＝ｚを生成する。工程＃５で生成された返答σは、検証者アルゴリズムＶに送られる。
【０３０６】
工程＃６：
返答σを受け取った検証者アルゴリズムＶは、受け取った返答σを利用して以下の検証処理を実行する。
【０３０７】
ｄ＝０の場合、検証者アルゴリズムＶは、（ｒＡ，ＦＣ）←Ｇ（σ）を計算する。そして、検証者アルゴリズムＶは、ｃ２＝Ｈ２（σ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ＦＢ（ｘ）＝αＦ（ｘ＋ｒＡ）＋ＦＣ（ｘ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０３０８】
ｄ＝１の場合、検証者アルゴリズムＶは、ｚＡ←σとする。そして、検証者アルゴリズムＶは、ｃ１＝Ｈ１（ＦＢ（ｚＡ）−αｙ，ｚＡ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、この検証が成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０３０９】
以上、本手法の一具体例について説明した。
【０３１０】
［３−５：効率的なアルゴリズム］
次に、本手法に係るアルゴリズムを効率化する方法について述べる。上記の第１実施形態において考察した効率化方法と同様、２つのベクトルｔ∈Ｋｎ、ｅ∈Ｋｍを用いて、多変数多項式Ｆ（ｘ＋ｒ）をマスクするために用いた多変数多項式ＦＡ（ｘ）をＦＡ（ｘ）＝Ｆｂ（ｘ、ｔ）＋ｅのように表現する。この表現を用いると、多変数多項式Ｆ（ｘ＋ｒ）について、下記の式（１９）で表現される関係が得られる。
【０３１１】
【数１４】
0005790291.tif 000015
【０３１２】
そのため、ｔＡ＝αｒ＋ｔ，ｅＡ＝αＦ（ｒ）＋ｅとすれば、マスク後の多変数多項式ＦＢ（ｘ）＝αＦ（ｘ＋ｒ）＋ＦＡ（ｘ）も、２つのベクトルｔＡ∈Ｋｎ、ｅＡ∈Ｋｍにより表現することができる。これらの理由から、ＦＡ（ｘ）＝Ｆｂ（ｘ，ｔ）＋ｅと設定すれば、Ｋｎ上のベクトル及びＫｍ上のベクトルを用いてＦＡ及びＦＢを表現できるようになり、通信に必要なデータサイズを大幅に減らすことが可能になる。具体的には、数千〜数万倍程度、通信コストが削減される。
【０３１３】
また、上記の変形により、ＦＢ（或いはＦＡ）からｒに関する情報が一切漏れることはない。例えば、ｅＡ及びｔＡ（或いはｅ及びｔ）を与えられても、ｅ及びｔ（或いはｅＡ及びｔＡ）を知らない限り、ｒの情報を一切知ることはできない。従って、上記の変形を施したとしても、零知識性は担保される。以下、図２１〜図２７を参照しながら、本手法に係る効率的なアルゴリズムについて説明する。なお、鍵生成アルゴリズムＧｅｎの構成は変わらないため、ここでは詳細な説明を省略する。
【０３１４】
（効率的なアルゴリズムの構成例１：図２１）
まず、図２１に示した効率的なアルゴリズムの構成について説明する。
【０３１５】
工程＃１：
まず、証明者アルゴリズムＰは、任意に数ｗを選択する。次いで、証明者アルゴリズムＰは、擬似乱数生成器Ｇに数ｗを適用してベクトルｒ∈Ｋｎ、ｔ∈Ｋｎ、ｅ∈Ｋｍを生成する。つまり、証明者アルゴリズムＰは、（ｒ，ｔ，ｅ）←Ｇ（ｗ）を計算する。次いで、証明者アルゴリズムＰは、ｚ←ｓ−ｒを計算する。この計算は、秘密鍵ｓをベクトルｒによりマスクする操作に相当する。
【０３１６】
工程＃１（続き）：
次いで、証明者アルゴリズムＰは、Ｆｂ（ｚ，ｔ）＋ｅ及びｚのハッシュ値ｃ１を生成する。つまり、証明者アルゴリズムＰは、ｃ１←Ｈ１（Ｆｂ（ｚ，ｔ）＋ｅ，ｚ）を計算する。また、証明者アルゴリズムＰは、数ｗのハッシュ値ｃ２を生成する。つまり、証明者アルゴリズムＰは、ｃ２←Ｈ２（ｗ）を計算する。なお、上記のＨ１（…）、Ｈ２（…）は、ハッシュ関数である。工程＃１で生成されたメッセージ（ｃ１，ｃ２）は、検証者アルゴリズムＶに送られる。
【０３１７】
工程＃２：
メッセージ（ｃ１，ｃ２）を受け取った検証者アルゴリズムＶは、ｑ通り存在する環Ｋの元からランダムに１つの数αを選択し、選択した数αを証明者アルゴリズムＰに送る。
【０３１８】
工程＃３：
数αを受け取った証明者アルゴリズムＰは、ｔＡ←αｒ＋ｔを計算する。さらに、証明者アルゴリズムＰは、ｅＡ←αＦ（ｒ）＋ｅを計算する。そして、証明者アルゴリズムＰは、ｔＡ及びｅＡを検証者アルゴリズムＶに送る。
【０３１９】
工程＃４：
ｔＡ及びｅＡを受け取った検証者アルゴリズムＶは、２つの検証パターンのうち、どちらの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムＶは、検証パターンの種類を表す２つの数値｛０，１｝の中から１つの数値を選択し、選択した数値を要求ｄに設定する。この要求ｄは証明者アルゴリズムＰに送られる。
【０３２０】
工程＃５：
要求ｄを受け取った証明者アルゴリズムＰは、受け取った要求ｄに応じて検証者アルゴリズムＶに送り返す返答σを生成する。ｄ＝０の場合、証明者アルゴリズムＰは、返答σ＝ｗを生成する。ｄ＝１の場合、証明者アルゴリズムＰは、返答σ＝ｚを生成する。工程＃５で生成された返答σは、検証者アルゴリズムＶに送られる。
【０３２１】
工程＃６：
返答σを受け取った検証者アルゴリズムＶは、受け取った返答σを利用して以下の検証処理を実行する。
【０３２２】
ｄ＝０の場合、検証者アルゴリズムＶは、（ｒＡ，ｔＢ，ｅＢ）←Ｇ（σ）を計算する。そして、検証者アルゴリズムＶは、ｃ２＝Ｈ２（σ）の等号が成り立つか否かを検証する。また、検証者アルゴリズムＶは、ｔＡ＝αｒＡ＋ｔＢの等号が成り立つか否かを検証する。さらに、検証者アルゴリズムＶは、ｅＡ＝αＦ（ｒＡ）＋ｅＢの等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０３２３】
ｄ＝１の場合、検証者アルゴリズムＶは、ｚＡ←σを実行する。そして、検証者アルゴリズムＶは、ｃ１＝Ｈ１（α（Ｆ（ｚＡ）−ｙ）＋Ｆｂ（ｚＡ，ｔＡ）＋ｅＡ，ｚＡ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、この検証が成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０３２４】
以上、効率的なアルゴリズムの構成例１について説明した。この効率的なアルゴリズムを利用することにより、通信に必要なデータサイズが大幅に削減される。また、Ｆ（ｘ＋ｒ）の計算が必要なくなるため、計算効率も向上する。
【０３２５】
（効率的なアルゴリズムの構成例２：図２２）
次に、図２２に示した効率的なアルゴリズムの構成について説明する。図２２に示した構成を適用した場合も、図２０に示した構成を適用した場合と同様に、通信効率及び計算効率の向上効果が得られる。但し、ここでは図２０に示した構成との差分について述べる。
【０３２６】
図２０に示したアルゴリズムの工程＃５において、ｄ＝０の場合にσをｗに設定しているが、ｄ＝０の場合に設定されるσは、（ｔＡ，ｅＢ）に併せて用いることで（ｒ，ｔ，ｅ）が復元できるような情報であればどのような情報でもよい。例えば、図２２に示すように、工程＃５においてｄ＝０の場合に設定されるσの内容をｒにしてもよい。但し、この変形を行う場合には、工程＃１における計算ｃ２←Ｈ２（ｗ）をｃ２←Ｈ２（ｒ，ｔ，ｅ）に変形する必要がある。また、工程＃６においてｄ＝０の場合に検証者アルゴリズムＶにより実行される検証内容がｃ２＝Ｈ２（ｒ，ｔＡ−αｒ，ｅＡ−αＦ（ｒ））の検証に置き換えられる。
【０３２７】
以上、効率的なアルゴリズムの構成例２について説明した。
【０３２８】
（効率的なアルゴリズムの構成例３：図２３）
次に、図２３に示した効率的なアルゴリズムの構成について説明する。図２３に示した構成を適用した場合も、図２０に示した構成を適用した場合と同様に、通信効率及び計算効率の向上効果が得られる。但し、ここでは図２２に示した構成との差分について述べる。
【０３２９】
図２２に示したアルゴリズムの工程＃３において、ｔＡ←αｒ＋ｔという計算を行っているが、この計算を図２３に示すようにｔＡ←α（ｒ＋ｔ）という計算に変形してもよい。但し、この変形を行う場合には、工程＃６においてｄ＝０の場合に検証者アルゴリズムＶにより実行される検証内容がｃ２＝Ｈ２（ｒ，α−１ｔＡ−ｒ，ｅＡ−αＦ（ｒ））の検証に置き換えられる。
【０３３０】
以上、効率的なアルゴリズムの構成例３について説明した。
【０３３１】
（効率的なアルゴリズムの構成例４：図２４）
次に、図２４に示した効率的なアルゴリズムの構成について説明する。図２４に示した構成を適用した場合も、図２０に示した構成を適用した場合と同様に、通信効率及び計算効率の向上効果が得られる。但し、ここでは図２２に示した構成との差分について述べる。
【０３３２】
図２２に示したアルゴリズムの工程＃３において、ｅＡ←αＦ（ｒ）＋ｅという計算を行っているが、この計算を図２４に示すようにｅＡ←α（Ｆ（ｒ）＋ｅ）という計算に変形してもよい。但し、この変形を行う場合には、工程＃６においてｄ＝０の場合に検証者アルゴリズムＶにより実行される検証内容がｃ２＝Ｈ２（ｒ，ｔＡ−αｒ，ｅＡ−α−１ｅＡ−Ｆ（ｒ））の検証に置き換えられる。
【０３３３】
以上、効率的なアルゴリズムの構成例４について説明した。
【０３３４】
（効率的なアルゴリズムの構成例５：図２５）
次に、図２５に示した効率的なアルゴリズムの構成について説明する。図２５に示した構成を適用した場合も、図２０に示した構成を適用した場合と同様に、通信効率及び計算効率の向上効果が得られる。但し、ここでは図２２に示した構成との差分について述べる。
【０３３５】
図２２に示したアルゴリズムの工程＃５において、ｄ＝０の場合にσをｒに設定しているが、ｄ＝０の場合に設定されるσは、（ｔＡ，ｅＢ）に併せて用いることで（ｒ，ｔ，ｅ）が復元できるような情報であればどのような情報でもよい。例えば、図２５に示すように、工程＃５においてｄ＝０の場合に設定されるσの内容をｔにしてもよい。但し、この変形を行う場合には、工程＃２においてαがα∈ＲＫ＼｛０｝から選ばれるようにする。また、工程＃６においてｄ＝０の場合に検証者アルゴリズムＶにより実行される検証内容がｃ２＝Ｈ２（α−１（ｔＡ−ｔ），ｔ，ｅＡ−αＦ（α−１（ｔＡ−ｔ）））の検証に置き換えられる。
【０３３６】
以上、効率的なアルゴリズムの構成例５について説明した。
【０３３７】
（効率的なアルゴリズムの構成例６：図２６）
次に、図２６に示した効率的なアルゴリズムの構成について説明する。図２６に示した構成を適用した場合も、図２０に示した構成を適用した場合と同様に、通信効率及び計算効率の向上効果が得られる。但し、ここでは図２５に示した構成との差分について述べる。
【０３３８】
図２５に示したアルゴリズムの工程＃３において、ｔＡ←αｒ＋ｔという計算を行っているが、この計算を図２６に示すようにｔＡ←α（ｒ＋ｔ）という計算に変形してもよい。但し、この変形を行う場合には、工程＃６においてｄ＝０の場合に検証者アルゴリズムＶにより実行される検証内容がｃ２＝Ｈ２（α−１ｔＡ−ｔ，ｔ，ｅＡ−αＦ（α−１ｔＡ−ｔ））の検証に置き換えられる。
【０３３９】
以上、効率的なアルゴリズムの構成例６について説明した。
【０３４０】
（効率的なアルゴリズムの構成例７：図２７）
次に、図２７に示した効率的なアルゴリズムの構成について説明する。図２７に示した構成を適用した場合も、図２０に示した構成を適用した場合と同様に、通信効率及び計算効率の向上効果が得られる。但し、ここでは図２５に示した構成との差分について述べる。
【０３４１】
図２５に示したアルゴリズムの工程＃３において、ｅＡ←αＦ（ｒ）＋ｅという計算を行っているが、この計算を図２７に示すようにｅＡ←α（Ｆ（ｒ）＋ｅ）という計算に変形してもよい。但し、この変形を行う場合には、工程＃６においてｄ＝０の場合に検証者アルゴリズムＶにより実行される検証内容がｃ２＝Ｈ２（α−１（ｔＡ−ｔ），ｔ，α−１ｅＡ−αＦ（α−１（ｔＡ−ｔ）））の検証に置き換えられる。
【０３４２】
以上、効率的なアルゴリズムの構成例７について説明した。
【０３４３】
（効率的なアルゴリズムの並列化：図２９）
次に、図２９を参照しながら、効率的なアルゴリズムを並列化する方法について説明する。図２９に示した構成（以下、並列化アルゴリズム）は、図２８に示した効率的なアルゴリズムを並列化したものである。なお、図２８に示した効率的なアルゴリズムは、図２２に示した効率的なアルゴリズムと実質的に同じ構成を有するアルゴリズムである。以下、図２９に示したフローチャートに沿って説明を進める。
【０３４４】
工程＃１：
証明者アルゴリズムＰは、ｉ＝１〜Ｎについて処理（１）〜処理（４）を実行する。
処理（１）：証明者アルゴリズムＰは、任意にベクトルｒｉ，ｔｉ∈Ｋｎ及びｅｉ∈Ｋｍを生成する。
処理（２）：証明者アルゴリズムＰは、ｒｉＡ←ｓ−ｒｉを計算する。この計算は、秘密鍵ｓをベクトルｒｉによりマスクする操作に相当する。
処理（３）：証明者アルゴリズムＰは、ｃ１，ｉ←Ｈ１（ｒｉ，ｔｉ，ｅｉ）を計算する。
処理（４）：証明者アルゴリズムＰは、ｃ２，ｉ←Ｈ２（ｒｉＡ，Ｆｂ（ｒｉＡ，ｔｉ）＋ｅｉ）を計算する。
工程＃１で生成されたメッセージ（ｃ１，１，ｃ２，１，…，ｃ１，Ｎ，ｃ２，Ｎ）は、検証者アルゴリズムＶに送られる。
【０３４５】
工程＃２：
メッセージ（ｃ１，１，ｃ２，１，…，ｃ１，Ｎ，ｃ２，Ｎ）を受け取った検証者アルゴリズムＶは、ｉ＝１〜Ｎのそれぞれについて、ｑ通り存在する環Ｋの元からランダムに１つの数αｉを選択し、選択した数αｉを証明者アルゴリズムＰに送る。
【０３４６】
工程＃３：
数αｉを受け取った証明者アルゴリズムＰは、ｉ＝１〜Ｎのそれぞれについて、ｔｉＡ←αｉｒｉ−ｔｉを計算する。さらに、証明者アルゴリズムＰは、ｉ＝１〜Ｎのそれぞれについて、ｅｉＡ←αｉＦ（ｒｉ）−ｅｉを計算する。そして、証明者アルゴリズムＰは、ｔ１Ａ，…，ｔＮＡ及びｅ１Ａ，…，ｅＮＡを検証者アルゴリズムＶに送る。
【０３４７】
工程＃４：
ｔ１Ａ，…，ｔＮＡ及びｅ１Ａ，…，ｅＮＡを受け取った検証者アルゴリズムＶは、ｉ＝１〜Ｎのそれぞれについて、２つの検証パターンのうち、どちらの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムＶは、検証パターンの種類を表す２つの数値｛０，１｝の中から１つの数値を選択し、選択した数値を要求ｄｉに設定する。この要求ｄｉ（ｉ＝１〜Ｎ）は証明者アルゴリズムＰに送られる。
【０３４８】
工程＃５：
要求ｄｉ（ｉ＝１〜Ｎ）を受け取った証明者アルゴリズムＰは、ｉ＝１〜Ｎについて、受け取った要求ｄｉに応じて検証者アルゴリズムＶに送り返す返答σｉを生成する。ｄｉ＝０の場合、証明者アルゴリズムＰは、返答σｉ＝ｒｉを生成する。ｄｉ＝１の場合、証明者アルゴリズムＰは、返答σｉ＝ｒｉＡを生成する。工程＃５で生成された返答σｉは、検証者アルゴリズムＶに送られる。
【０３４９】
工程＃６：
返答σｉ（ｉ＝１〜Ｎ）を受け取った検証者アルゴリズムＶは、受け取った返答σｉ（ｉ＝１〜Ｎ）を利用して以下の検証処理を実行する。
【０３５０】
ｄｉ＝０の場合、検証者アルゴリズムＶは、ｒｉ←σｉを実行する。そして、検証者アルゴリズムＶは、ｃ１，ｉ＝Ｈ１（ｒｉ，αｉｒｉ−ｔｉＡ，αｉＦ（ｒｉ）−ｅｉＡ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、この検証が成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０３５１】
ｄｉ＝１の場合、検証者アルゴリズムＶは、ｒｉＡ←σｉを実行する。そして、検証者アルゴリズムＶは、ｃ２，ｉ＝Ｈ２（ｒｉＡ，αｉ（ｙ−Ｆ（ｒｉＡ））−Ｆｂ（ｔｉＡ，ｒｉＡ）−ｅｉＡ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、この検証が成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０３５２】
以上、効率的なアルゴリズムの並列化について説明した。
【０３５３】
（並列化アルゴリズムの効率化：図３０）
図２９に示した並列化アルゴリズムは、図３０に示すように効率化することができる。図３０に示すように、この並列化アルゴリズムは、工程＃１において、メッセージ（ｃ１，１，ｃ２，１，…，ｃ１，Ｎ，ｃ２，Ｎ）をハッシュ値ｃに変換し、そのハッシュ値ｃを１パス目で証明者アルゴリズムＰから検証者アルゴリズムＶへと送るように構成されている。また、この並列化アルゴリズムは、工程＃５において、ｄｉ＝０の場合に返答σｉ＝（ｒｉ，ｃ２，ｉ）を生成し、ｄｉ＝１の場合に返答σｉ＝（ｒｉＡ，ｃ１，ｉ）を生成するように構成されている。さらに、この並列化アルゴリズムは、工程＃６において、次のような処理を実行するように構成されている。
【０３５４】
工程＃６：
まず、検証者アルゴリズムＶは、ｉ＝１〜Ｎについて、処理（１）及び処理（２）を実行する。但し、実際には、ｄｉ＝０の場合に処理（１）が実行され、ｄｉ＝１の場合に処理（２）が実行される。
処理（１）：ｄｉ＝０の場合、検証者アルゴリズムＶは、（ｒｉ，ｃ２，ｉ）←σｉを実行する。さらに、検証者アルゴリズムＶは、ｃ１，ｉ＝Ｈ１（ｒｉ，αｉｒｉ−ｔｉＡ，αｉＦ（ｒｉ）−ｅｉＡ）を計算する。そして、検証者アルゴリズムＶは、（ｃ１，ｉ，ｃ２，ｉ）を保持する。
処理（２）：ｄｉ＝１の場合、検証者アルゴリズムＶは、（ｒｉＡ，ｃ１，ｉ）←σｉを実行する。さらに、検証者アルゴリズムＶは、ｃ２，ｉ＝Ｈ２（ｒｉＡ，αｉ（ｙ−Ｆ（ｒｉＡ））−Ｆｂ（ｔｉＡ，ｒｉＡ）−ｅｉＡ）を計算する。そして、検証者アルゴリズムＶは、（ｃ１，ｉ，ｃ２，ｉ）を保持する。
ｉ＝１〜Ｎについて、上記の処理（１）及び処理（２）を実行した後、検証者アルゴリズムＶは、ｃ＝Ｈ（ｃ１，１，ｃ２，１，…，ｃ１，Ｎ，ｃ２，Ｎ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、この検証が成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０３５５】
以上、並列化アルゴリズムの効率化について説明した。
【０３５６】
（並列化アルゴリズムの更なる効率化：図３１）
図３０に示した並列化アルゴリズムは、図３１に示すように更に効率化することができる。図３１に示すように、この並列化アルゴリズムは、工程＃３において、（ｔ１Ａ，ｅ１Ａ，…，ｔＮＡ，ｅＮＡ）をハッシュ値ｖに変換し、そのハッシュ値ｖを３パス目で証明者アルゴリズムＰから検証者アルゴリズムＶへと送るように構成されている。また、この並列化アルゴリズムは、工程＃５において、ｄｉ＝０の場合に返答σｉ＝（ｒｉ，ｔｉ，ｅｉ，ｃ２，ｉ）を生成し、ｄｉ＝１の場合に返答σｉ＝（ｒｉＡ，ｔｉＡ，ｅｉＡ，ｃ１，i）を生成するように構成されている。さらに、この並列化アルゴリズムは、工程＃６において、次のような処理を実行するように構成されている。
【０３５７】
工程＃６：
まず、検証者アルゴリズムＶは、ｉ＝１〜Ｎについて、処理（１）及び処理（２）を実行する。但し、実際には、ｄｉ＝０の場合に処理（１）が実行され、ｄｉ＝１の場合に処理（２）が実行される。
処理（１）：ｄｉ＝０の場合、検証者アルゴリズムＶは、（ｒｉ，ｔｉ，ｅｉ，ｃ２，ｉ）←σｉを実行する。そして、検証者アルゴリズムＶは、ｃ１，ｉ＝Ｈ１（ｒｉ，ｔｉ，ｅｉ）を計算する。さらに、検証者アルゴリズムＶは、ｔｉＡ←αｉｒｉ−ｔｉ、ｅｉＡ←αｉＦ（ｒｉ）−ｅｉを計算する。そして、検証者アルゴリズムＶは、（ｃ１，ｉ，ｃ２，ｉ）及び（ｔｉＡ，ｅｉＡ）を保持する。
処理（２）：ｄｉ＝１の場合、検証者アルゴリズムＶは、（ｒｉＡ，ｔｉＡ，ｅｉＡ，ｃ１，ｉ）←σｉを実行する。そして、検証者アルゴリズムＶは、ｃ２，ｉ＝Ｈ２（ｒｉＡ，αｉ（ｙ−Ｆ（ｒｉＡ））−Ｆｂ（ｒｉＡ，ｔｉＡ）−ｅｉＡ）を計算する。そして、検証者アルゴリズムＶは、（ｃ１，ｉ，ｃ２，ｉ）及び（ｔｉＡ，ｅｉＡ）を保持する。
ｉ＝１〜Ｎについて、上記の処理（１）及び処理（２）を実行した後、検証者アルゴリズムＶは、ｃ＝Ｈ（ｃ１，１，ｃ２，１，…，ｃ１，Ｎ，ｃ２，Ｎ）の等号が成り立つか否かを検証する。さらに、検証者アルゴリズムＶは、ｖ＝Ｈ（ｔ１Ａ，ｅ１Ａ，…，ｔＮＡ，ｅＮＡ）の等号が成り立つか否かを検証する。検証者アルゴリズムＶは、これらの検証が全て成功した場合に認証成功を示す値１を出力し、検証に失敗があった場合に認証失敗を示す値０を出力する。
【０３５８】
以上、並列化アルゴリズムの更なる効率化を図れる構造について説明した。上記のように、証明者アルゴリズムＰと検証者アルゴリズムＶとの間でやり取りされる複数の情報をハッシュ値にまとめることで、３パス目の通信データのサイズを低減することが可能になる。さらに、上記のアルゴリズムの中で、ｒi，ｔｉ，ｅｉを１つの乱数シードから生成するようにアルゴリズムの構成を変形することで、通信データサイズの期待値が削減される。また、要求ｄｉとして、０が選択された数と１が選択された数とが等しくなるように制限を加えると、確実に通信データサイズが削減される。
【０３５９】
例えば、（ｑ，ｎ，ｍ，Ｎ）＝（２４，４５，３０，８８）に設定すると、図３０に示したアルゴリズムの場合、公開鍵が１２０ビット、秘密鍵が１８０ビット、通信データサイズが４２８４０ビットとなる。一方、図３１に示したアルゴリズムの場合、（ｑ，ｎ，ｍ，Ｎ）＝（２４，４５，３０，８８）に設定すると、公開鍵が１２０ビット、秘密鍵が１８０ビット、通信データサイズが２７５１２ビットとなる。このように、上述した並列化アルゴリズムの更なる効率化を行うことにより、通信データサイズを顕著に削減することが可能になる。
【０３６０】
［３−６：直列・並列ハイブリッドアルゴリズム］
偽証が成功する確率を無視できる程度にまで小さくするために、対話プロトコルを複数回実行する必要性については既に説明した通りである。また、対話プロトコルを複数回実行する方法として、直列的な方法と並列的な方法とを紹介した。特に、並列的な方法については、具体的な並列化アルゴリズムを示して説明した。ここでは、直列的な方法と並列的な方法とを組み合わせたハイブリッドタイプのアルゴリズムを紹介する。
【０３６１】
（ハイブリッド構成１）
図３２を参照しながら、ハイブリッドタイプのアルゴリズム（以下、並直列アルゴリズム）について説明する。図３２には、本手法に係る基本構成、この基本構成を直列化した直列化アルゴリズム、並列化した並列化アルゴリズム、及び並直列アルゴリズムを示した。
【０３６２】
基本構成では、１パス目にメッセージ（ｃ１，ｃ２）が証明者から検証者へと送られる。２パス目では、検証者から証明者へと数αが送られる。３パス目では、証明者から検証者へとベクトルｔＡ及びｅＡが送られる。４パス目では、検証者から証明者へと要求ｄが送られる。５パス目では、証明者から検証者へと返答σが送られる。
【０３６３】
上記の基本構成を並列化した場合、１パス目では、Ｎ回分のメッセージ（ｃ１，１，ｃ２，１，…，ｃ１，Ｎ，ｃ２，Ｎ）が証明者から検証者へと送られる。２パス目では、検証者から証明者へとＮ回分の数（α１，…，αＮ）が送られる。３パス目では、証明者から検証者へとＮ回分のベクトル（ｔ１Ａ，…，ｔＮＡ，ｅ１Ａ，…，ｅＮＡ）が送られる。４パス目では、検証者から証明者へとＮ回分の要求（ｄ１，…，ｄＮ）が送られる。５パス目では、証明者から検証者へとＮ回分の返答（σ１，…，σＮ）が送られる。
【０３６４】
本手法に係る並列化アルゴリズムは、受動的攻撃に対する安全性が保証される。また、対話の回数が５回で済む。さらに、１パス目で送信されるＮ回分のメッセージや３パス目で送信されるＮ回分のベクトルなどをそれぞれ１つのハッシュ値に纏めることにより、通信効率を向上させることができる。
【０３６５】
一方、上記の基本構成を直列化した場合、１パス目では、１回分のメッセージ（ｃ１，１，ｃ２，１）が証明者から検証者へと送られる。２パス目では、検証者から証明者へと１回分の数α１が送られる。３パス目では、証明者から検証者へと１回分のベクトル（ｔ１Ａ，ｅ１Ａ）が送られる。４パス目では、検証者から証明者へと１回分の要求ｄ１が送られる。５パス目では、証明者から検証者へと１回分の返答σ１が送られる。同様にして、証明者から検証者へと返答σＮが送られるまで対話が繰り返し実行される。直列化アルゴリズムは、能動的攻撃に対する安全性が保証される。また、偽証確率が確実に削減されることを証明することが可能である。
【０３６６】
さて、並直列アルゴリズムは、並列化アルゴリズムの性質と直列化アルゴリズムの性質とを併せ持つアルゴリズムである。図３２に示した並直列アルゴリズムでは、１パス目で、Ｎ回分のメッセージ（ｃ１，１，ｃ２，１，…，ｃ１，Ｎ，ｃ２，Ｎ）が証明者から検証者へと送られる。２パス目では、検証者から証明者へと１回分の数α１が送られる。３パス目では、証明者から検証者へと１回分のベクトル（ｔ１Ａ，ｅ１Ａ）が送られる。４パス目では、検証者から証明者へと１回分の要求ｄ１が送られる。５パス目では、証明者から検証者へと１回分の返答σ１が送られる。その後、証明者と検証者との間で、α２，…，αＮ，ｔ２Ａ，ｅ２Ａ，…，ｔＮＡ，ｅＮＡ，ｄ２，…，ｄＮ，σ２，…，σＮのやり取りが行われる。
【０３６７】
本手法に基づく並直列アルゴリズムの場合、受動的攻撃に対する安全性が保証される。また、対話の回数が４Ｎ＋１回で済む。さらに、１パス目で送信されるＮ回分のメッセージを１つのハッシュ値に纏めることにより、通信効率を向上させることができる。
【０３６８】
（ハイブリッド構成２）
図３３を参照しながら、他の並直列アルゴリズムについて説明する。図３３には、本手法に係る基本構成、この基本構成を直列化した直列化アルゴリズム、並列化した並列化アルゴリズム、及び並直列アルゴリズムを示した。なお、基本構成、直列化アルゴリズム、並列化アルゴリズムの構成及び性質については、上記の通りである。
【０３６９】
図３３に示した並直列アルゴリズムは、並列化アルゴリズムの性質と直列化アルゴリズムの性質とを併せ持つアルゴリズムである。この並直列アルゴリズムでは、１パス目で、Ｎ回分のメッセージ（ｃ１，１，ｃ２，１，…，ｃ１，Ｎ，ｃ２，Ｎ）が証明者から検証者へと送られる。２パス目では、検証者から証明者へとＮ回分の数（α１，…，αＮ）が送られる。３パス目では、証明者から検証者へとＮ回分のベクトル（ｔ１Ａ，ｅ１Ａ，…，ｔＮＡ，ｅＮＡ）が送られる。４パス目では、検証者から証明者へと１回分の要求ｄ１が送られる。５パス目では、証明者から検証者へと１回分の返答σ１が送られる。その後、証明者と検証者との間で、ｄ２，…，ｄＮ，σ２，…，σＮのやり取りが行われる。
【０３７０】
本手法に基づく並直列アルゴリズムの場合、受動的攻撃に対する安全性が保証される。また、対話の回数が２Ｎ＋３回で済む。さらに、１パス目で送信されるＮ回分のメッセージや３パス目で送信されるＮ回分のベクトルなどを１つのハッシュ値に纏めることにより、通信効率を向上させることができる。
【０３７１】
（ハイブリッド構成３）
図３４を参照しながら、他のハイブリッドタイプのアルゴリズム（以下、直並列アルゴリズム）について説明する。図３４には、本手法に係る基本構成、この基本構成を直列化した直列化アルゴリズム、並列化した並列化アルゴリズム、及び直並列アルゴリズムを示した。なお、基本構成、直列化アルゴリズム、並列化アルゴリズムの構成及び性質については、上記の通りである。
【０３７２】
図３４に示した直並列アルゴリズムは、並列化アルゴリズムの性質と直列化アルゴリズムの性質とを併せ持つアルゴリズムである。この直並列アルゴリズムでは、１パス目で、１回分のメッセージ（ｃ１，１，ｃ２，１）が証明者から検証者へと送られる。２パス目では、検証者から証明者へと１回分の数α１が送られる。３パス目では、証明者から検証者へと１回分のベクトル（ｔ１Ａ，ｅ１Ａ）が送られる。４パス目では、検証者から証明者へと１回分の要求ｄ１が送られる。その後、証明者と検証者との間で、ｃ１，２，ｃ２，２，…，ｃ１，Ｎ，ｃ２，Ｎ，α２，…，αＮ，ｔ２Ａ，ｅ２Ａ，…，ｔＮＡ，ｅＮＡ，ｄ２，…，ｄＮのやり取りが行われる。最後に、証明者から検証者へとＮ回分の返答（σ１…，σＮ）が送られる。
【０３７３】
本手法に基づく直並列アルゴリズムの場合、能動的攻撃に対する安全性が保証される。また、対話の回数が４Ｎ＋１回で済む。
【０３７４】
（ハイブリッド構成４）
図３５を参照しながら、他の直並列アルゴリズムについて説明する。図３５には、本手法に係る基本構成、この基本構成を直列化した直列化アルゴリズム、並列化した並列化アルゴリズム、及び直並列アルゴリズムを示した。なお、基本構成、直列化アルゴリズム、並列化アルゴリズムの構成及び性質については、上記の通りである。
【０３７５】
図３５に示した直並列アルゴリズムは、並列化アルゴリズムの性質と直列化アルゴリズムの性質とを併せ持つアルゴリズムである。この直並列アルゴリズムでは、１パス目で、１回分のメッセージ（ｃ１，１，ｃ２，１）が証明者から検証者へと送られる。２パス目では、検証者から証明者へと１回分の数α１が送られる。その後、証明者と検証者との間で、ｃ１，２，ｃ２，２，…，ｃ１，Ｎ，ｃ２，Ｎ，α２，…，αＮのやり取りが行われる。αＮのやり取りを終えた後、証明者から検証者へとＮ回分のベクトル（ｔ１Ａ，ｅ１Ａ，…，ｔＮＡ，ｅＮＡ）が送られる。次いで、検証者から証明者へとＮ回分の要求（ｄ１，…，ｄ１）が送られる。最後に、証明者から検証者へとＮ回分の返答（σ１…，σＮ）が送られる。
【０３７６】
本手法に基づく直並列アルゴリズムの場合、受動的攻撃に対する安全性が保証される。また、対話の回数が２Ｎ＋３回で済む。
【０３７７】
以上、本手法に基づくハイブリッドタイプのアルゴリズムについて説明した。
【０３７８】
以上、本技術の第２実施形態について説明した。なお、多変数連立方程式の形式については、上記の第１実施形態と同様である。
【０３７９】
＜４：効率的なアルゴリズムの拡張＞
ところで、上記の第１及び第２実施形態に係る効率的なアルゴリズムは、下記の式（２０）で表現される２次の多変数多項式を公開鍵（又はシステムパラメータ）として利用する構成であった。しかし、上記の効率的なアルゴリズムは、３次以上の次数を有する多変数多項式を公開鍵（又はシステムパラメータ）として利用する構成に拡張することができる。
【０３８０】
［４−１：多変数多項式の高次化について］
例えば、位数ｑ＝ｐｋの体上で定義される３次以上の多変数多項式（下記の式（２１）を参照）を公開鍵（又はシステムパラメータ）として利用する構成について考えてみよう。
【０３８１】
【数１５】
0005790291.tif 000016
【０３８２】
上記の第１及び第２実施形態に係る効率的なアルゴリズムにおける公開鍵として多変数多項式ｆｌが利用可能となる条件は、下記の式（２２）が（ｘ１，…，ｘｎ）及び（ｙ１，…，ｙｎ）に対して双線形になることである。上記の式（２０）で表現される多変数多項式の場合、下記の式（２３）に示すように容易に双線形性を確認することができる（下線部がｘｉ、ｙｉのそれぞれについて線形となっている）。また、上記の式（２１）で表現される多変数多項式の場合についても同様にして、下記の式（２４）に示すように双線形性を確認することができる。但し、下記の式（２４）の下線部は、位数ｐの体ＧＦ（ｐ）上における双線形性を示している。そのため、上記の第２実施形態に係る効率的なアルゴリズムの公開鍵として上記の式（２１）で表現される多変数多項式を利用する場合、当該アルゴリズムの工程＃２の後に検証者が送信する数αは、ＧＦ（ｐ）の要素に限定する必要がある。
【０３８３】
【数１６】
0005790291.tif 000017
0005790291.tif 000018
【０３８４】
このような理由から、上記の第１及び第２実施形態に係る効率的なアルゴリズムを拡張し、上記の式（２１）で表現されるような３次以上の多変数多項式を公開鍵として利用するアルゴリズムを構築することが可能であると言える。
【０３８５】
ここで、上記の式（２０）で表現される多変数多項式（以下、２次多項式）と、上記の式（２１）で表現される多変数多項式（以下、多次多項式）との関係について考察しておきたい。いま、位数ｑ＝ｐの体上で定義されるｎｋ変数の２次多項式、及び位数ｑ＝ｐｋの体上で定義されるｎ変数の多次多項式について考える。この場合、ｍｋ本の２次多項式で構成される連立方程式の解答困難性は、ｍ本の多次多項式で構成される連立方程式の解答困難性と等価である。例えば、位数２の体上で定義される８０本の８０変数２次多項式により構成される連立方程式と、位数２８の体上で定義される１０本の１０変数多次多項式とは、その解答困難性が等価である。
【０３８６】
つまり、ＧＦ（ｐｋ）の要素と、ＧＦ（ｐ）ｋの要素とを同型写像により同一視した場合、位数ｑ＝ｐの体上で定義されるｍｋ本のｎｋ変数２次多項式の組で表現される関数と等価な、位数ｑ＝ｐｋの体上で定義されるｍ本のｎ変数多次多項式の組で表現される関数が存在する。例えば、ＧＦ（２８）の要素と、ＧＦ（２）８の要素とを同型写像により同一視した場合、位数２の体上で定義される８０本の８０変数２次多項式の組で表現される関数と等価な、位数２８の体上で定義される１０本の１０変数多次多項式の組で表現される関数が存在する。このような理由から、上記の２次多項式を利用するか、上記の多次多項式を利用するかは、任意に選択することが可能である。
【０３８７】
ここで、上記の２次多項式を利用する場合の計算効率と上記の多次多項式を利用する場合の計算効率とについて考察しておきたい。
【０３８８】
位数２の体上で定義されるｎｋ変数の２次多項式を利用する場合、アルゴリズムに含まれる演算は、ｎｋ個の１ビット変数を対象に実行されることになる。つまり、演算の単位が１ビットとなる。一方、位数２ｋの体上で定義されるｎ変数の多次多項式を利用する場合、アルゴリズムに含まれる演算は、ｎ個のｋビット変数を対象に実行されることになる。つまり、演算の単位がｋビットとなる。このｋ（ｋ＝２，３，４，…）は任意に設定することができる。そのため、実装上、都合の良い値にｋを設定することにより、計算効率を向上させることが可能になる。例えば、３２ビットのアーキティクチャ上にアルゴリズムを実装する場合、１ビット単位で演算を実行する構成にするよりも、３２ビット単位で演算を実行する構成にする方が高い計算効率を得られる。
【０３８９】
このように、上記の第１及び第２実施形態に係る効率的なアルゴリズムを、多次多項式を公開鍵として利用できるように拡張することで、演算の単位を実装するアーキティクチャに合わせることが可能になる。その結果、計算効率を向上させることが可能になる。
【０３９０】
［４−２：拡張方式（高次項の追加）］
ところで、３次以上の多次多項式を利用する方法として、２次多項式に３次以上の項を追加する方法も考えられる。例えば、下記の式（２５）に示すように、上記の式（２０）で表現される２次多項式に４次の項を追加する方法が考えられる。多次多項式ｆｌを下記の式（２５）のように定義すると、下記の式（２６）で定義される項ｇｌ（ｘ，ｙ）は、下記の式（２７）のように表現される。なお、以下では、項ｇｌ（ｘ，ｙ）のことをｐｏｌａｒ  ｆｏｒｍと呼ぶことがある。
【０３９１】
【数１７】
0005790291.tif 000019
【０３９２】
上記の式（２７）に示すように、項ｇｌ（ｘ，ｙ）は双線形にならない。そこで、４つの変数ｘ１，ｘ２，ｘ３，ｘ４から２つ選んだ６通りの項ｘｉｘｊ、及び４つの変数ｘ１，ｘ２，ｘ３，ｘ４から３つ選んだ４通りの項ｘｉｘｊｘｋを下記の式（２８）及び式（２９）のように４つの変数ｔｉｊ、ｔｉｊＡ、ｔｉｊｋ、ｔｉｊｋＡで表現する。この表現を用いると、３次以上の多変数多項式を用いて、上記の効率的なアルゴリズムを実現することができる。なお、上記の式（２５）に示した例では、２次多項式に４次の項を追加しているが、４次の項に代えて３次の項（例えば、ｘ１ｘ２ｘ３）又は５次以上の項（例えば、ｘ１ｘ２ｘ３ｘ４ｘ５）を追加してもよい。このように、３次以上の項を追加することにより、方程式の頑強性を向上させることが可能になる。
【０３９３】
【数１８】
0005790291.tif 000020
【０３９４】
＜５：頑強性を高める仕組み＞
ここで、上記の第１及び第２実施形態に係るアルゴリズムの頑強性を更に高めるための仕組みについて紹介する。
【０３９５】
［５−１：システムパラメータの設定方法］
これまで、多変数多項式の係数又はその係数の生成に利用する乱数シード（以下、多変数多項式の係数等）をどのように設定するかについては詳しく言及してこなかった。多変数多項式の係数等は、システムに共通のパラメータとしてもよいし、ユーザ毎に異なるパラメータとしてもよい。
【０３９６】
しかし、多変数多項式の係数等をシステムに共通のパラメータとすると、その多変数多項式に脆弱性が見つかった場合、システム全体について設定を更新する必要が生じてしまう。また、ランダムに選んだ係数を持つ多変数多項式について、平均的な頑強性（解くことの難しさ）は解析されているが、ある特定の係数を持つ多変数多項式について十分な頑強性を有することを保証することは難しい。
【０３９７】
そこで、本件発明者は、各ユーザが選択した文字列などを擬似乱数生成器のシードに利用して多変数多項式の係数を生成する仕組みを考案した。例えば、ユーザのｅ−ｍａｉｌアドレスをシードに利用したり、ｅ−ｍａｉｌアドレスと更新日時などとを結合した文字列をシードに利用したりする方法などが考えられる。このような方法を用いると、万が一、ある文字列から生成された係数を持つ多変数多項式に脆弱性が見つかった場合でも、その係数を持つ多変数多項式を利用しているユーザのみに影響が限定される。また、文字列を変えるだけで多変数多項式が変更されるため、容易に脆弱性を解消することができる。
【０３９８】
以上、システムパラメータの設定方法について説明した。なお、上記の説明では文字列を例に挙げたが、ユーザ毎に異なる数字の列や記号の列を利用してもよい。
【０３９９】
［５−２：イレギュラーな要求に対する応答方法］
次に、イレギュラーな要求に対する応答方法について説明する。
【０４００】
（５−２−１：証明者による応答方法について）
図３６に示すように、対話プロトコルの中で、検証者が偽りの要求を投げかけてくる可能性が考えられる。図３６の例では、証明者が検証者へとメッセージ（ｃ１，ｃ２，ｃ３）を送り、検証者が証明者へと要求ｄ＝０を送った後、証明者から検証者へと要求ｄ＝０に対応する返答σが送られている。ここまでは正常な対話である。
【０４０１】
しかし、図３６の例において、検証者は、証明者に要求ｄ＝１に対応する返答σをさらに要求している。もし、この要求に応じ、証明者が要求ｄ＝１に対応する返答σを検証者に送ってしまうと、秘密鍵が検証者に漏洩してしまう。このような秘密鍵の漏洩は現実的に起こりうることである。例えば、検証者は、２パス目で要求ｄ＝１を送信したのではなく、要求ｄ＝０を送信したはずだと偽って、要求ｄ＝１に対応する返答σをさらに要求するかもしれない。一方、証明者は、２パス目で送信された要求ｄのビットが通信エラーにより別のビットになってしまったと勘違いするかもしれない。
【０４０２】
そこで、本件発明者は、上記のようにして秘密鍵の漏洩が生じるのを避ける方法を考案した。具体的には、１回分のメッセージについて証明者が２通り以上の要求ｄに対応する返答を求めてきた場合に、対話を終了するか、或いは、新しい乱数を利用して１パス目から対話をやり直す方法が考案された。この方法を適用すれば、検証者が偽って２通り以上の要求ｄに対応する返答を求めてきても、秘密鍵が漏洩することはなくなる。
【０４０３】
以上、イレギュラーな要求により秘密鍵が漏洩しないようにする工夫について述べた。なお、ここでは３パスの基本構成を例に挙げたが、直列的な方法、並列的な方法、或いは、ハイブリッドタイプのアルゴリズムについても同様の工夫を加えることにより、安全性を向上させることができる。もちろん、５パスのアルゴリズムについても同様である。
【０４０４】
（５−２−２：検証者による応答方法について）
また、図３７に示すように、証明者が偽って要求ｄの再送を要求してくる可能性もある。図３７の例では、証明者が検証者へとメッセージ（ｃ１，ｃ２，ｃ３）を送り、検証者が証明者へと要求ｄ＝０を送った後、証明者が要求ｄの再送を要求している。この要求に応じて、検証者が再びランダムに要求ｄを選択すると、先に送った要求ｄ＝０とは異なる要求ｄ＝１が選択される可能性がある。この場合、検証者から証明者へと要求ｄ＝１が送られる。図３７の例において、証明者は、要求ｄ＝１に対応する返答σを検証者に送っている。
【０４０５】
しかし、証明者は、要求ｄ＝１には回答できるが、要求ｄ＝０には回答できなかったのかもしれない。つまり、証明者が偽証している可能性が否定できない。例えば、証明者は、要求ｄを紛失してしまったので要求ｄを再送して欲しいと検証者に求めるかもしれない。一方、検証者は、通信エラーにより先に送信した要求が紛失したと考え、証明者の求めに応じて要求ｄを再送してしまうかもしれない。そして、再送した要求ｄが先に送信した要求ｄと異なるものである場合、偽証が成功してしまう。
【０４０６】
図３７の例から分かるように、要求ｄがランダムに選ばれることで、証明者に偽証の機会を与えてしまう。そこで、本件発明者は、偽証の機会を与えないようにする方法を考案した。この方法は、１回分のメッセージについて証明者が要求ｄの送信を再度求めてきた場合に、検証者が対話を終了するか、或いは、新たな乱数を生成せずに前回と同じ要求ｄを再送するように対話プロトコルを改良するというものである。この方法を適用すると、要求ｄの再送要求を利用した偽証の機会をなくすことができる。
【０４０７】
以上、イレギュラーな要求により偽証が成功する機会をなくす工夫について述べた。なお、ここでは３パスの基本構成を例に挙げたが、直列的な方法、並列的な方法、或いは、ハイブリッドタイプのアルゴリズムについても同様の工夫を加えることにより、安全性を向上させることができる。もちろん、５パスのアルゴリズムについても同様である。
【０４０８】
＜６：ハードウェア構成例＞
上記の各アルゴリズムは、例えば、図３８に示す情報処理装置のハードウェア構成を用いて実行することが可能である。つまり、当該各アルゴリズムの処理は、コンピュータプログラムを用いて図３８に示すハードウェアを制御することにより実現される。なお、このハードウェアの形態は任意であり、例えば、パーソナルコンピュータ、携帯電話、ＰＨＳ、ＰＤＡ等の携帯情報端末、ゲーム機、接触式又は非接触式のＩＣチップ、接触式又は非接触式のＩＣカード、又は種々の情報家電がこれに含まれる。但し、上記のＰＨＳは、Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙ−ｐｈｏｎｅ  Ｓｙｓｔｅｍの略である。また、上記のＰＤＡは、Ｐｅｒｓｏｎａｌ  Ｄｉｇｉｔａｌ  Ａｓｓｉｓｔａｎｔの略である。
【０４０９】
図３８に示すように、このハードウェアは、主に、ＣＰＵ９０２と、ＲＯＭ９０４と、ＲＡＭ９０６と、ホストバス９０８と、ブリッジ９１０と、を有する。さらに、このハードウェアは、外部バス９１２と、インターフェース９１４と、入力部９１６と、出力部９１８と、記憶部９２０と、ドライブ９２２と、接続ポート９２４と、通信部９２６と、を有する。但し、上記のＣＰＵは、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略である。また、上記のＲＯＭは、Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙの略である。そして、上記のＲＡＭは、Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙの略である。
【０４１０】
ＣＰＵ９０２は、例えば、演算処理装置又は制御装置として機能し、ＲＯＭ９０４、ＲＡＭ９０６、記憶部９２０、又はリムーバブル記録媒体９２８に記録された各種プログラムに基づいて各構成要素の動作全般又はその一部を制御する。ＲＯＭ９０４は、ＣＰＵ９０２に読み込まれるプログラムや演算に用いるデータ等を格納する手段である。ＲＡＭ９０６には、例えば、ＣＰＵ９０２に読み込まれるプログラムや、そのプログラムを実行する際に適宜変化する各種パラメータ等が一時的又は永続的に格納される。
【０４１１】
これらの構成要素は、例えば、高速なデータ伝送が可能なホストバス９０８を介して相互に接続される。一方、ホストバス９０８は、例えば、ブリッジ９１０を介して比較的データ伝送速度が低速な外部バス９１２に接続される。また、入力部９１６としては、例えば、マウス、キーボード、タッチパネル、ボタン、スイッチ、及びレバー等が用いられる。さらに、入力部９１６としては、赤外線やその他の電波を利用して制御信号を送信することが可能なリモートコントローラ（以下、リモコン）が用いられることもある。
【０４１２】
出力部９１８としては、例えば、ＣＲＴ、ＬＣＤ、ＰＤＰ、又はＥＬＤ等のディスプレイ装置、スピーカ、ヘッドホン等のオーディオ出力装置、プリンタ、携帯電話、又はファクシミリ等、取得した情報を利用者に対して視覚的又は聴覚的に通知することが可能な装置である。但し、上記のＣＲＴは、Ｃａｔｈｏｄｅ  Ｒａｙ  Ｔｕｂｅの略である。また、上記のＬＣＤは、Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙの略である。そして、上記のＰＤＰは、Ｐｌａｓｍａ  ＤｉｓｐｌａｙＰａｎｅｌの略である。さらに、上記のＥＬＤは、Ｅｌｅｃｔｒｏ−Ｌｕｍｉｎｅｓｃｅｎｃｅ  Ｄｉｓｐｌａｙの略である。
【０４１３】
記憶部９２０は、各種のデータを格納するための装置である。記憶部９２０としては、例えば、ハードディスクドライブ（ＨＤＤ）等の磁気記憶デバイス、半導体記憶デバイス、光記憶デバイス、又は光磁気記憶デバイス等が用いられる。但し、上記のＨＤＤは、Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅの略である。
【０４１４】
ドライブ９２２は、例えば、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリ等のリムーバブル記録媒体９２８に記録された情報を読み出し、又はリムーバブル記録媒体９２８に情報を書き込む装置である。リムーバブル記録媒体９２８は、例えば、ＤＶＤメディア、Ｂｌｕ−ｒａｙメディア、ＨＤ  ＤＶＤメディア、各種の半導体記憶メディア等である。もちろん、リムーバブル記録媒体９２８は、例えば、非接触型ＩＣチップを搭載したＩＣカード、又は電子機器等であってもよい。但し、上記のＩＣは、Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略である。
【０４１５】
接続ポート９２４は、例えば、ＵＳＢポート、ＩＥＥＥ１３９４ポート、ＳＣＳＩ、ＲＳ−２３２Ｃポート、又は光オーディオ端子等のような外部接続機器９３０を接続するためのポートである。外部接続機器９３０は、例えば、プリンタ、携帯音楽プレーヤ、デジタルカメラ、デジタルビデオカメラ、又はＩＣレコーダ等である。但し、上記のＵＳＢは、Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓの略である。また、上記のＳＣＳＩは、Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅの略である。
【０４１６】
通信部９２６は、ネットワーク９３２に接続するための通信デバイスであり、例えば、有線又は無線ＬＡＮ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、又はＷＵＳＢ用の通信カード、光通信用のルータ、ＡＤＳＬ用のルータ、又は接触又は非接触通信用のデバイス等である。また、通信部９２６に接続されるネットワーク９３２は、有線又は無線により接続されたネットワークにより構成され、例えば、インターネット、家庭内ＬＡＮ、赤外線通信、可視光通信、放送、又は衛星通信等である。但し、上記のＬＡＮは、Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋの略である。また、上記のＷＵＳＢは、Ｗｉｒｅｌｅｓｓ  ＵＳＢの略である。そして、上記のＡＤＳＬは、Ａｓｙｍｍｅｔｒｉｃ  Ｄｉｇｉｔａｌ  Ｓｕｂｓｃｒｉｂｅｒ  Ｌｉｎｅの略である。
【０４１７】
＜７：まとめ＞
最後に、本技術の実施形態に係る技術内容について簡単に纏める。ここで述べる技術内容は、例えば、ＰＣ、携帯電話、ゲーム機、情報端末、情報家電、カーナビゲーションシステム等、種々の情報処理装置に対して適用することができる。なお、以下で述べる情報処理装置の機能は、１台の情報処理装置を利用して実現することも可能であるし、複数台の情報処理装置を利用して実現することも可能である。また、以下で述べる情報処理装置が処理を実行する際に用いるデータ記憶手段及び演算処理手段は、当該情報処理装置に設けられたものであってもよいし、ネットワークを介して接続された機器に設けられたものであってもよい。
【０４１８】
上記の情報処理装置の機能構成は以下のように表現される。例えば、下記（１）に記載の情報処理装置は、多次多変数連立方程式の求解困難性に安全性の根拠を置く効率的な電子署名方式の署名提供機能を有する。
【０４１９】
（１）
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｓ∈Ｋｎに基づいてＮ組のメッセージを生成するメッセージ生成部と、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力して、Ｎ個の第１情報を選択する第１情報選択部と、
Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報を生成する第２情報生成部と、
Ｎ個の前記第１情報及びＮ個の前記第２情報を電子署名として、前記多次多変数多項式の組Ｆ及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する検証者に提供する署名提供部と、
を備え、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、
情報処理装置。
【０４２０】
（２）
前記多次多変数多項式の組Ｆは、Ｆｂ（ｘ，ｙ）＝Ｆ（ｘ＋ｙ）−Ｆ（ｘ）−Ｆ（ｙ）で定義されるＦｂ（ｘ，ｙ）がｘ及びｙに関して双線形となるように設定される、
（１）に記載の情報処理装置。
【０４２１】
（３）
前記多次多変数多項式の組Ｆは、前記公開鍵を生成するユーザ毎に異なる情報を用いて生成される、
上記（１）又は（２）に記載の情報処理装置。
【０４２２】
（４）
前記多次多変数多項式の組Ｆは、Ｆｂ（ｘ，ｙ）＝ＦＡ（ｘ＋ｙ）−ＦＡ（ｘ）−ＦＡ（ｙ）で定義されるＦｂ（ｘ，ｙ）がｘ及びｙに関して双線形となる２次多項式ＦＡと、３次以上の次数を有する項との和で表現される、
上記（１）〜（３）のいずれか１項に記載の情報処理装置。
【０４２３】
（５）
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する情報保持部と、
前記多次多変数多項式の組Ｆ及びベクトルｓ∈Ｋｎに基づいて生成されたＮ組のメッセージを取得するメッセージ取得部と、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力することで選択されたＮ個の第１情報と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報とで構成される電子署名を取得する署名取得部と、
前記メッセージ、前記多次多変数多項式の組Ｆ、前記ベクトルｙ、及び前記電子署名に基づいて前記文書Ｍの正当性を検証する署名検証部と、
を備え、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、
情報処理装置。
【０４２４】
（６）
前記多次多変数多項式の組Ｆは、Ｆｂ（ｘ，ｙ）＝Ｆ（ｘ＋ｙ）−Ｆ（ｘ）−Ｆ（ｙ）で定義されるＦｂ（ｘ，ｙ）がｘ及びｙに関して双線形となるように設定される、
上記（５）に記載の情報処理装置。
【０４２５】
（７）
前記多次多変数多項式の組Ｆは、前記公開鍵を生成するユーザ毎に異なる情報を用いて生成される、
上記（５）又は（６）に記載の情報処理装置。
【０４２６】
（８）
前記多次多変数多項式の組Ｆは、Ｆｂ（ｘ，ｙ）＝ＦＡ（ｘ＋ｙ）−ＦＡ（ｘ）−ＦＡ（ｙ）で定義されるＦｂ（ｘ，ｙ）がｘ及びｙに関して双線形となる２次多項式ＦＡと、３次以上の次数を有する項との和で表現される、
上記（５）〜（７）のいずれか１項に記載の情報処理装置。
【０４２７】
（９）
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｓ∈Ｋｎに基づいてＮ組のメッセージを生成するステップと、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力して、Ｎ個の第１情報を選択するステップと、
Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報を生成するステップと、
Ｎ個の前記第１情報及びＮ個の前記第２情報を電子署名として、前記多次多変数多項式の組Ｆ及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する検証者に提供するステップと、
を含み、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、
署名提供方法。
【０４２８】
（１０）
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持するステップと、
前記多次多変数多項式の組Ｆ及びベクトルｓ∈Ｋｎに基づいて生成されたＮ組のメッセージを取得するステップと、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力することで選択されたＮ個の第１情報と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報とで構成される電子署名を取得するステップと、
前記メッセージ、前記多次多変数多項式の組Ｆ、前記ベクトルｙ、及び前記電子署名に基づいて前記文書Ｍの正当性を検証するステップと、
を含み、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、
署名検証方法。
【０４２９】
（１１）
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｓ∈Ｋｎに基づいてＮ組のメッセージを生成するメッセージ生成機能と、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力して、Ｎ個の第１情報を選択する第１情報選択機能と、
Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報を生成する第２情報生成機能と、
Ｎ個の前記第１情報及びＮ個の前記第２情報を電子署名として、前記多次多変数多項式の組Ｆ及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する検証者に提供する署名提供機能と、
をコンピュータに実現させるためのプログラムであり、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、
プログラム。
【０４３０】
（１２）
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する情報保持機能と、
前記多次多変数多項式の組Ｆ及びベクトルｓ∈Ｋｎに基づいて生成されたＮ組のメッセージを取得するメッセージ取得機能と、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力することで選択されたＮ個の第１情報と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報とで構成される電子署名を取得する署名取得機能と、
前記メッセージ、前記多次多変数多項式の組Ｆ、前記ベクトルｙ、及び前記電子署名に基づいて前記文書Ｍの正当性を検証する署名検証機能と、
をコンピュータに実現させるためのプログラムであり、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、
プログラム。
【０４３１】
（１３）
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｓ∈Ｋｎに基づいてＮ組のメッセージを生成するメッセージ生成機能と、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力して、Ｎ個の第１情報を選択する第１情報選択機能と、
Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報を生成する第２情報生成機能と、
Ｎ個の前記第１情報及びＮ個の前記第２情報を電子署名として、前記多次多変数多項式の組Ｆ及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する検証者に提供する署名提供機能と、
をコンピュータに実現させるためのプログラムが記録された、コンピュータにより読み取り可能な記録媒体であり、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、
記録媒体。
【０４３２】
（１４）
環Ｋ上で定義される多次多変数多項式の組Ｆ＝（ｆ１，…，ｆｍ）及びベクトルｙ＝（ｙ１，…，ｙｍ）＝（ｆ１（ｓ），…，ｆｍ（ｓ））を保持する情報保持機能と、
前記多次多変数多項式の組Ｆ及びベクトルｓ∈Ｋｎに基づいて生成されたＮ組のメッセージを取得するメッセージ取得機能と、
１組の入力情報に対してｋ通り（ｋ≧３）の第１情報の中から１個の第１情報を選択する一方向性関数に対し、文書ＭとＮ組の前記メッセージとを入力することで選択されたＮ個の第１情報と、Ｎ個の前記第１情報にそれぞれ対応するＮ個の第２情報とで構成される電子署名を取得する署名取得機能と、
前記メッセージ、前記多次多変数多項式の組Ｆ、前記ベクトルｙ、及び前記電子署名に基づいて前記文書Ｍの正当性を検証する署名検証機能と、
をコンピュータに実現させるためのプログラムが記録された、コンピュータにより読み取り可能な記録媒体であり、
前記ベクトルｓは署名鍵であり、
前記多次多変数多項式の組Ｆ及び前記ベクトルｙは公開鍵であり、
前記メッセージは、前記公開鍵及び前記第２情報を利用して、当該第２情報に対応する第１情報の種類に応じて選択される所定の演算を実行することで得られる情報である、
記録媒体。
【０４３３】
（１５）
前記ｍ及びｎは、ｍ＜ｎの関係を有する、
上記（１）〜（８）のいずれか１項に記載の情報処理装置。
【０４３４】
（１６）
前記ｍ及びｎは、２ｍ−ｎ≪１の関係を有する、
上記（１５）に記載の情報処理装置。
【０４３５】
（備考）
上記の署名生成アルゴリズムＳｉｇは、メッセージ生成部、第１情報選択部、第２情報生成部、署名提供部の一例である。また、上記の署名検証アルゴリズムＶｅｒは、メッセージ取得部、署名取得部、署名検証部の一例である。
【０４３６】
以上、添付図面を参照しながら本技術の好適な実施形態について説明したが、本技術は係る例に限定されないことは言うまでもない。当業者であれば、特許請求の範囲に記載された範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、それらについても当然に本技術の技術的範囲に属するものと了解される。
【符号の説明】
【０４３７】
Ｇｅｎ    鍵生成アルゴリズム
Ｐ        証明者アルゴリズム
Ｖ        検証者アルゴリズム
Ｓｉｇ    署名生成アルゴリズム
Ｖｅｒ    署名検証アルゴリズム
【図１】
0005790291.tif 000021
【図２】
0005790291.tif 000022
【図３】
0005790291.tif 000023
【図４】
0005790291.tif 000024
【図５】
0005790291.tif 000025
【図６】
0005790291.tif 000026
【図７】
0005790291.tif 000027
【図８】
0005790291.tif 000028
【図９】
0005790291.tif 000029
【図１０】
0005790291.tif 000030
【図１１】
0005790291.tif 000031
【図１２】
0005790291.tif 000032
【図１３】
0005790291.tif 000033
【図１４】
0005790291.tif 000034
【図１５】
0005790291.tif 000035
【図１６】
0005790291.tif 000036
【図１７】
0005790291.tif 000037
【図１８】
0005790291.tif 000038
【図１９】
0005790291.tif 000039
【図２０】
0005790291.tif 000040
【図２１】
0005790291.tif 000041
【図２２】
0005790291.tif 000042
【図２３】
0005790291.tif 000043
【図２４】
0005790291.tif 000044
【図２５】
0005790291.tif 000045
【図２６】
0005790291.tif 000046
【図２７】
0005790291.tif 000047
【図２８】
0005790291.tif 000048
【図２９】
0005790291.tif 000049
【図３０】
0005790291.tif 000050
【図３１】
0005790291.tif 000051
【図３２】
0005790291.tif 000052
【図３３】
0005790291.tif 000053
【図３４】
0005790291.tif 000054
【図３５】
0005790291.tif 000055
【図３６】
0005790291.tif 000056
【図３７】
0005790291.tif 000057
【図３８】
0005790291.tif 000058
【図３９】
0005790291.tif 000059
【図４０】
0005790291.tif 000060