WO2013129119A1 - 情報処理装置、情報処理方法、及びプログラム - Google Patents
情報処理装置、情報処理方法、及びプログラム Download PDFInfo
- Publication number
- WO2013129119A1 WO2013129119A1 PCT/JP2013/053491 JP2013053491W WO2013129119A1 WO 2013129119 A1 WO2013129119 A1 WO 2013129119A1 JP 2013053491 W JP2013053491 W JP 2013053491W WO 2013129119 A1 WO2013129119 A1 WO 2013129119A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- information
- algorithm
- polynomial
- order multivariate
- message
- Prior art date
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/30—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy
- H04L9/3093—Public key, i.e. encryption algorithm being computationally infeasible to invert or user's encryption keys not requiring secrecy involving Lattices or polynomial equations, e.g. NTRU scheme
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3247—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving digital signatures
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/12—Details relating to cryptographic hardware or logic circuitry
- H04L2209/125—Parallelization or pipelining, e.g. for accelerating processing of cryptographic operations
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Mathematical Physics (AREA)
- Mathematical Analysis (AREA)
- Algebra (AREA)
- Computing Systems (AREA)
- Storage Device Security (AREA)
- Computational Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
Abstract
【課題】多次多変数多項式をより効率的に計算できるようにすること。 【解決手段】多次多変数多項式の組F=(f1,…,fm)を含む公開鍵を利用した公開鍵認証方式又は電子署名方式のアルゴリズムを実行するエンティティの間で共有されている情報から所定の関数を用いて生成された、前記多次多変数多項式の組Fを構成する各項の係数に利用する数を取得する数取得部と、前記多次多変数多項式の組Fを構成要素に含む多次多変数多項式の係数のうち、変数の組み合わせの種類が同じ項の係数をグループ化しておき、前記数取得部が取得した数を、当該多次多変数の係数にグループ単位で割り当て、グループ単位で処理を実行して、変数の入力値について当該多次多変数多項式を計算する多項式計算部と、を備え、前記多項式計算部は、前記計算を実行する前に、グループ単位で処理を実行できるように前記変数の入力値をそれぞれ1つのグループに対応する係数の数と同じ数に拡張する、情報処理装置が提供される。
Description
本技術は、情報処理装置、情報処理方法、及びプログラムに関する。
情報処理技術や通信技術の急速な発展に伴い、公文書、私文書を問わず、文書の電子化が急速に進んでいる。これに伴い、多くの個人や企業は、電子文書の安全管理に大きな関心を寄せている。こうした関心の高まりを受け、各方面で電子文書の盗聴や偽造等のタンパリング行為に対する対抗策が盛んに研究されるようになってきた。電子文書の盗聴に対しては、例えば、電子文書を暗号化することにより安全性が確保される。また、電子文書の偽造に対しては、例えば、電子署名を利用することにより安全性が確保される。但し、利用する暗号や電子署名が高いタンパリング耐性を有していなければ、十分な安全性が保証されない。
電子署名は、電子文書の作成者を特定するために利用される。そのため、電子署名は、電子文書の作成者しか生成できないようにすべきである。仮に、悪意ある第三者が同じ電子署名を生成できてしまうと、その第三者が電子文書の作成者に成りすますことができてしまう。つまり、悪意ある第三者により電子文書が偽造されてしまう。こうした偽造を防止するため、電子署名の安全性については様々な議論が交わされてきた。現在広く利用されている電子署名方式としては、例えば、RSA署名方式やDSA署名方式などが知られている。
RSA署名方式は、「大きな合成数に対する素因数分解の困難性(以下、素因数分解問題)」を安全性の根拠とする。また、DSA署名方式は、「離散対数問題に対する解の導出の困難性」を安全性の根拠とする。これらの根拠は、古典的なコンピュータを利用して素因数分解問題や離散対数問題を効率的に解くアルゴリズムが存在しないことに起因する。つまり、上記の困難性は、古典的なコンピュータにおける計算量的な困難性を意味する。しかしながら、量子コンピュータを用いると、素因数分解問題や離散対数問題に対する解答が効率的に算出されてしまうと言われている。
現在利用されている電子署名方式や公開鍵認証方式の多くは、RSA署名方式やDSA署名方式と同様、素因数分解問題や離散対数問題の困難性に安全性の根拠をおいている。そのため、こうした電子署名方式や公開鍵認証方式は、量子コンピュータが実用化された場合に、その安全性が確保されないことになる。そこで、素因数分解問題や離散対数問題など、量子コンピュータにより容易に解かれてしまう問題とは異なる問題に安全性の根拠をおく新たな電子署名方式及び公開鍵認証方式の実現が求められている。量子コンピュータにより容易に解くことが難しい問題としては、例えば、多変数多項式問題がある。
多変数多項式問題に安全性の根拠をおく電子署名方式としては、例えば、MI(Matsumoto-Imai cryptography)、HFE(Hidden Field Equation cryptography)、OV(Oil-Vinegar signature scheme)、TTM(Tamed Transformation Method cryptography)に基づく方式が知られている。例えば、下記の非特許文献1、2には、HFEに基づく電子署名方式が開示されている。
Jacques Patarin Asymmetric Cryptography with a Hidden Monomial. CRYPTO 1996, pp.45-60.
Patarin, J., Courtois, N., and Goubin, L. QUARTZ, 128-Bit Long Digital Signatures. In Naccache,D., Ed. Topics in Cryptology - CT-RSA 2001 (San Francisco, CA, USA, April 2001), vol. 2020 of Lecture Notes in Computer Science, Springer-Verlag., pp.282-297.
上記の通り、多変数多項式問題は、量子コンピュータを用いても解くことが困難なNP困難問題と呼ばれる問題の一例である。通常、HFEなどに代表される多変数多項式問題を利用した公開鍵認証方式は、特殊なトラップドアが仕込まれた多次多変数連立方程式を利用している。例えば、x1,…,xnに関する多次多変数連立方程式F(x1,…,xn)=yと線形変換A及びBが用意され、線形変換A及びBが秘密に管理される。この場合、多次多変数連立方程式F、線形変換A及びBがトラップドアとなる。
トラップドアF,A,Bを知っているエンティティは、x1,…,xnに関する方程式B(F(A(x1,…,xn)))=y’を解くことができる。一方、トラップドアF,A,Bを知らないエンティティは、x1,…,xnに関する方程式B(F(A(x1,…,xn)))=y’を解くことができない。この仕組みを利用することにより、多次多変数連立方程式の解答困難性を安全性の根拠とする公開鍵認証方式や電子署名方式が実現される。
上記の通り、こうした公開鍵認証方式や電子署名方式を実現するには、B(F(A(x1,…,xn)))=yを満たすような特殊な多次多変数連立方程式を用意する必要がある。また、署名生成時に多次多変数連立方程式Fを解く必要がある。そのため、利用可能な多次多変数連立方程式Fは、比較的容易に解けるものに限られていた。すなわち、これまでの方式においては、比較的容易に解ける3つの関数(トラップドア)B、F、Aを合成した形の多次多変数連立方程式B(F(A(x1,…,xn)))=yしか用いることができず、十分な安全性を確保することが難しかった。
そこで、本件発明者は、上記の事情に鑑みて、効率的に解く手段(トラップドア)が知られていない多次多変数連立方程式を用いて高い安全性を有する効率的な公開鍵認証方式及び電子署名方式を考案した(Koichi Sakumoto,Taizo Shirai and Harunaga Hiwatari,‘Public-Key Identification Schemes Based on Multivariate Quadratic Polynomials’,CRYPTO 2011,LNCS 6841,pp.706-723,2011.)。
しかし、この公開鍵認証方式及び電子署名方式で利用する多変数多項式は係数の数が多く、公開鍵として利用するには、証明者と検証者との間で効率的に係数を割り当てる方法を決めておく必要があった。本技術は、より効率的に多変数多項式を計算することが可能な、新規かつ改良された情報処理装置、情報処理方法、及びプログラムの提供を意図して考案されたものである。
本技術のある観点によれば、多次多変数多項式の組F=(f1,…,fm)を含む公開鍵を利用した公開鍵認証方式又は電子署名方式のアルゴリズムを実行するエンティティの間で共有されている情報から所定の関数を用いて生成された、前記多次多変数多項式の組Fを構成する各項の係数に利用する数を取得する数取得部と、前記多次多変数多項式の組Fを構成要素に含む多次多変数多項式の係数のうち、変数の組み合わせの種類が同じ項の係数をグループ化しておき、前記数取得部が取得した数を、当該多次多変数の係数にグループ単位で割り当て、グループ単位で処理を実行して、変数の入力値について当該多次多変数多項式を計算する多項式計算部と、を備え、前記多項式計算部は、前記計算を実行する前に、グループ単位で処理を実行できるように前記変数の入力値をそれぞれ1つのグループに対応する係数の数と同じ数に拡張する、情報処理装置が提供される。
また、本技術の別の観点によれば、多次多変数多項式の組F=(f1,…,fm)を含む公開鍵を利用した公開鍵認証方式又は電子署名方式のアルゴリズムを実行するエンティティの間で共有されている情報から所定の関数を用いて生成された、前記多次多変数多項式の組Fを構成する各項の係数に利用する数を取得することと、前記多次多変数多項式の組Fを構成要素に含む多次多変数多項式の係数のうち、変数の組み合わせの種類が同じ項の係数をグループ化しておき、取得した数を、当該多次多変数の係数にグループ単位で割り当て、グループ単位で処理を実行して、変数の入力値について当該多次多変数多項式を計算することと、を含み、前記計算することでは、前記計算を実行する前に、グループ単位で処理を実行できるように前記変数の入力値をそれぞれ1つのグループに対応する係数の数と同じ数に拡張する、情報処理方法が提供される。
また、本技術の別の観点によれば、多次多変数多項式の組F=(f1,…,fm)を含む公開鍵を利用した公開鍵認証方式又は電子署名方式のアルゴリズムを実行するエンティティの間で共有されている情報から所定の関数を用いて生成された、前記多次多変数多項式の組Fを構成する各項の係数に利用する数を取得する数取得機能と、前記多次多変数多項式の組Fを構成要素に含む多次多変数多項式の係数のうち、変数の組み合わせの種類が同じ項の係数をグループ化しておき、前記数取得機能で取得した数を、当該多次多変数の係数にグループ単位で割り当て、グループ単位で処理を実行して、変数の入力値について当該多次多変数多項式を計算する多項式計算機能と、をコンピュータに実現させるためのプログラムであり、前記多項式計算機能は、前記計算を実行する前に、グループ単位で処理を実行できるように前記変数の入力値をそれぞれ1つのグループに対応する係数の数と同じ数に拡張する、プログラムが提供される。
また、本技術の別の観点によれば、上記のプログラムが記録された、コンピュータにより読み取り可能な記録媒体が提供される。
以上説明したように本技術によれば、より効率的に多変数多項式を計算することが可能になる。
以下に添付図面を参照しながら、本技術の好適な実施の形態について詳細に説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略する。
[説明の流れについて]
ここで、以下に記載する本技術の実施形態に関する説明の流れについて簡単に述べる。まず、図1を参照しながら、公開鍵認証方式のアルゴリズム構成について説明する。次いで、図2を参照しながら、電子署名方式のアルゴリズム構成について説明する。次いで、図3を参照しながら、nパスの公開鍵認証方式について説明する。
ここで、以下に記載する本技術の実施形態に関する説明の流れについて簡単に述べる。まず、図1を参照しながら、公開鍵認証方式のアルゴリズム構成について説明する。次いで、図2を参照しながら、電子署名方式のアルゴリズム構成について説明する。次いで、図3を参照しながら、nパスの公開鍵認証方式について説明する。
次いで、図4及び図5を参照しながら、3パスの公開鍵認証方式に係るアルゴリズムの構成例について説明する。次いで、図6及び図7を参照しながら、5パスの公開鍵認証方式に係るアルゴリズムの構成例について説明する。次いで、図8及び図9を参照しながら、3パス及び5パスの公開鍵認証方式に係る効率的なアルゴリズムを電子署名方式のアルゴリズムに変形する方法について説明する。
次いで、図10及び図11を参照しながら、多変数多項式の係数を効率的に代入する方法について説明する。次いで、図12を参照しながら、本技術の実施形態に係る各アルゴリズムを実現することが可能な情報処理装置のハードウェア構成例について説明する。最後に、本実施形態の技術的思想について纏め、当該技術的思想から得られる作用効果について簡単に説明する。
(説明項目)
1:はじめに
1-1:公開鍵認証方式のアルゴリズム
1-2:電子署名方式のアルゴリズム
1-3:nパスの公開鍵認証方式
2:3パスの公開鍵認証方式に係るアルゴリズムの構成
2-1:具体的なアルゴリズムの構成例
2-2:並列化アルゴリズムの構成例
3:5パスの公開鍵認証方式に係るアルゴリズムの構成
3-1:具体的なアルゴリズムの構成例
3-2:並列化アルゴリズムの構成例
4:電子署名方式への変形
4-1:3パスの公開鍵認証方式から電子署名方式への変形
4-2:5パスの公開鍵認証方式から電子署名方式への変形
5:多変数多項式の係数を効率的に代入する方法について
5-1:基本的な取り決め
5-2:データの構造化
5-2-1:構造化手法#1
5-2-2:構造化手法#2
5-3:前処理による更なる効率化
5-3-1:データ表現の変換
5-3-2:インデックスの表現
5-3-3:前処理の共通化
6:ハードウェア構成例
7:まとめ
1:はじめに
1-1:公開鍵認証方式のアルゴリズム
1-2:電子署名方式のアルゴリズム
1-3:nパスの公開鍵認証方式
2:3パスの公開鍵認証方式に係るアルゴリズムの構成
2-1:具体的なアルゴリズムの構成例
2-2:並列化アルゴリズムの構成例
3:5パスの公開鍵認証方式に係るアルゴリズムの構成
3-1:具体的なアルゴリズムの構成例
3-2:並列化アルゴリズムの構成例
4:電子署名方式への変形
4-1:3パスの公開鍵認証方式から電子署名方式への変形
4-2:5パスの公開鍵認証方式から電子署名方式への変形
5:多変数多項式の係数を効率的に代入する方法について
5-1:基本的な取り決め
5-2:データの構造化
5-2-1:構造化手法#1
5-2-2:構造化手法#2
5-3:前処理による更なる効率化
5-3-1:データ表現の変換
5-3-2:インデックスの表現
5-3-3:前処理の共通化
6:ハードウェア構成例
7:まとめ
<1:はじめに>
本実施形態は、多次多変数連立方程式に対する求解問題の困難性に安全性の根拠をおく公開鍵認証方式及び電子署名方式に関する。但し、本実施形態は、HFE電子署名方式などの従来手法とは異なり、効率的に解く手段(トラップドア)を持たない多次多変数連立方程式を利用する公開鍵認証方式及び電子署名方式に関する。まず、公開鍵認証方式のアルゴリズム、電子署名方式のアルゴリズム、及びnパスの公開鍵認証方式について、その概要を簡単に説明する。
本実施形態は、多次多変数連立方程式に対する求解問題の困難性に安全性の根拠をおく公開鍵認証方式及び電子署名方式に関する。但し、本実施形態は、HFE電子署名方式などの従来手法とは異なり、効率的に解く手段(トラップドア)を持たない多次多変数連立方程式を利用する公開鍵認証方式及び電子署名方式に関する。まず、公開鍵認証方式のアルゴリズム、電子署名方式のアルゴリズム、及びnパスの公開鍵認証方式について、その概要を簡単に説明する。
[1-1:公開鍵認証方式のアルゴリズム]
まず、図1を参照しながら、公開鍵認証方式のアルゴリズムについて概要を説明する。図1は、公開鍵認証方式のアルゴリズムについて概要を説明するための説明図である。
まず、図1を参照しながら、公開鍵認証方式のアルゴリズムについて概要を説明する。図1は、公開鍵認証方式のアルゴリズムについて概要を説明するための説明図である。
公開鍵認証は、ある人(証明者)が、公開鍵pk及び秘密鍵skを利用して、他の人(検証者)に本人であることを納得させるために利用される。例えば、証明者Aの公開鍵pkAは、検証者Bに公開される。一方、証明者Aの秘密鍵skAは、証明者Aにより秘密に管理される。公開鍵認証の仕組みにおいては、公開鍵pkAに対応する秘密鍵skAを知る者が証明者A本人であるとみなされる。
公開鍵認証の仕組みを利用して証明者Aが証明者A本人であることを検証者Bに証明するには、対話プロトコルを介して、証明者Aが公開鍵pkAに対応する秘密鍵skAを知っているという証拠を検証者Bに提示すればよい。そして、証明者Aが秘密鍵skAを知っているという証拠が検証者Bに提示され、その証拠を検証者Bが確認し終えた場合、証明者Aの正当性(本人であること)が証明されたことになる。
但し、公開鍵認証の仕組みには、安全性を担保するために以下の条件が求められる。
1つ目の条件は、「対話プロトコルを実行した際に秘密鍵skを持たない偽証者により偽証が成立してしまう確率を限りなく小さくする」ことである。この1つ目の条件が成り立つことを「健全性」と呼ぶ。つまり、健全性とは、「秘密鍵skを持たない偽証者により、対話プロトコルの実行中に無視できない確率で偽証が成立することはないこと」と言い換えられる。2つ目の条件は、「対話プロトコルを実行したとしても、証明者Aが有する秘密鍵skAの情報が検証者Bに一切漏れることがない」ことである。この2つ目の条件が成り立つことを「零知識性」と呼ぶ。
安全に公開鍵認証を行うには、健全性及び零知識性を有する対話プロトコルを利用する必要がある。仮に、健全性及び零知識性を有しない対話プロトコルを用いて認証処理を行った場合には、偽証された可能性及び秘密鍵の情報が漏れてしまった可能性が否定できないため、処理自体が成功裡に完了しても証明者の正当性を証明したことにはならない。従って、対話プロトコルの健全性及び零知識性を如何に保証するかが重要になる。
(モデル)
公開鍵認証方式のモデルには、図1に示すように、証明者と検証者という2つのエンティティが存在する。証明者は、鍵生成アルゴリズムGenを用いて、証明者固有の秘密鍵skと公開鍵pkの組を生成する。次いで、証明者は、鍵生成アルゴリズムGenを用いて生成した秘密鍵skと公開鍵pkの組を利用して検証者と対話プロトコルを実行する。このとき、証明者は、証明者アルゴリズムPを利用して対話プロトコルを実行する。上記の通り、証明者は、証明者アルゴリズムPを利用し、対話プロトコルの中で秘密鍵skを保有している証拠を検証者に提示する。
公開鍵認証方式のモデルには、図1に示すように、証明者と検証者という2つのエンティティが存在する。証明者は、鍵生成アルゴリズムGenを用いて、証明者固有の秘密鍵skと公開鍵pkの組を生成する。次いで、証明者は、鍵生成アルゴリズムGenを用いて生成した秘密鍵skと公開鍵pkの組を利用して検証者と対話プロトコルを実行する。このとき、証明者は、証明者アルゴリズムPを利用して対話プロトコルを実行する。上記の通り、証明者は、証明者アルゴリズムPを利用し、対話プロトコルの中で秘密鍵skを保有している証拠を検証者に提示する。
一方、検証者は、検証者アルゴリズムVを利用して対話プロトコルを実行し、証明者が公開している公開鍵に対応する秘密鍵を、その証明者が保有しているか否かを検証する。つまり、検証者は、証明者が公開鍵に対応する秘密鍵を保有しているか否かを検証するエンティティである。このように、公開鍵認証方式のモデルは、証明者と検証者という2つのエンティティ、及び、鍵生成アルゴリズムGen、証明者アルゴリズムP、検証者アルゴリズムVという3つのアルゴリズムにより構成される。
なお、以下の説明において、「証明者」「検証者」という表現を用いるが、これらの表現はあくまでもエンティティを意味するものである。従って、鍵生成アルゴリズムGen、証明者アルゴリズムPを実行する主体は、「証明者」のエンティティに対応する情報処理装置である。同様に、検証者アルゴリズムVを実行する主体は、情報処理装置である。これら情報処理装置のハードウェア構成は、例えば、図12に示した通りである。つまり、鍵生成アルゴリズムGen、証明者アルゴリズムP、検証者アルゴリズムVは、ROM904、RAM906、記憶部920、リムーバブル記録媒体928などに記録されたプログラムに基づいてCPU902などにより実行される。
(鍵生成アルゴリズムGen)
鍵生成アルゴリズムGenは、証明者により利用される。鍵生成アルゴリズムGenは、証明者に固有の秘密鍵skと公開鍵pkとの組を生成するアルゴリズムである。鍵生成アルゴリズムGenにより生成された公開鍵pkは公開される。そして、公開された公開鍵pkは、検証者により利用される。一方、鍵生成アルゴリズムGenにより生成された秘密鍵skは、証明者が秘密に管理する。そして、証明者により秘密に管理される秘密鍵skは、公開鍵pkに対応する秘密鍵skを証明者が保有していることを検証者に対して証明するために利用される。形式的に、鍵生成アルゴリズムGenは、セキュリティパラメータ1λ(λは0以上の整数)を入力とし、秘密鍵skと公開鍵pkを出力するアルゴリズムとして、下記の式(1)のように表現される。
鍵生成アルゴリズムGenは、証明者により利用される。鍵生成アルゴリズムGenは、証明者に固有の秘密鍵skと公開鍵pkとの組を生成するアルゴリズムである。鍵生成アルゴリズムGenにより生成された公開鍵pkは公開される。そして、公開された公開鍵pkは、検証者により利用される。一方、鍵生成アルゴリズムGenにより生成された秘密鍵skは、証明者が秘密に管理する。そして、証明者により秘密に管理される秘密鍵skは、公開鍵pkに対応する秘密鍵skを証明者が保有していることを検証者に対して証明するために利用される。形式的に、鍵生成アルゴリズムGenは、セキュリティパラメータ1λ(λは0以上の整数)を入力とし、秘密鍵skと公開鍵pkを出力するアルゴリズムとして、下記の式(1)のように表現される。
(証明者アルゴリズムP)
証明者アルゴリズムPは、証明者により利用される。証明者アルゴリズムPは、公開鍵pkに対応する秘密鍵skを証明者が保有していることを検証者に対して証明するためのアルゴリズムである。つまり、証明者アルゴリズムPは、秘密鍵skと公開鍵pkとを入力とし、対話プロトコルを実行するアルゴリズムである。
証明者アルゴリズムPは、証明者により利用される。証明者アルゴリズムPは、公開鍵pkに対応する秘密鍵skを証明者が保有していることを検証者に対して証明するためのアルゴリズムである。つまり、証明者アルゴリズムPは、秘密鍵skと公開鍵pkとを入力とし、対話プロトコルを実行するアルゴリズムである。
(検証者アルゴリズムV)
検証者アルゴリズムVは、検証者により利用される。検証者アルゴリズムVは、対話プロトコルの中で、公開鍵pkに対応する秘密鍵skを証明者が保有しているか否かを検証するアルゴリズムである。検証者アルゴリズムVは、公開鍵pkを入力とし、対話プロトコルの実行結果に応じて0又は1(1bit)を出力するアルゴリズムである。なお、検証者は、検証者アルゴリズムVが0を出力した場合には証明者が不正なものであると判断し、1を出力した場合には証明者が正当なものであると判断する。形式的に、検証者アルゴリズムVは、下記の式(2)のように表現される。
検証者アルゴリズムVは、検証者により利用される。検証者アルゴリズムVは、対話プロトコルの中で、公開鍵pkに対応する秘密鍵skを証明者が保有しているか否かを検証するアルゴリズムである。検証者アルゴリズムVは、公開鍵pkを入力とし、対話プロトコルの実行結果に応じて0又は1(1bit)を出力するアルゴリズムである。なお、検証者は、検証者アルゴリズムVが0を出力した場合には証明者が不正なものであると判断し、1を出力した場合には証明者が正当なものであると判断する。形式的に、検証者アルゴリズムVは、下記の式(2)のように表現される。
上記の通り、意味のある公開鍵認証を実現するには、対話プロトコルが健全性及び零知識性という2つの条件を満たしている必要がある。しかし、証明者が秘密鍵skを保有していることを証明するためには、証明者が秘密鍵skに依存した手続きを実行し、その結果を検証者に通知した上で、その通知内容に基づく検証を検証者に実行させる必要がある。秘密鍵skに依存した手続きを実行するのは、健全性を担保するために必要である。一方で、秘密鍵skの情報が一切検証者に漏れないようにする必要がある。そのため、これらの要件を満たすように、上記の鍵生成アルゴリズムGen、証明者アルゴリズムP、検証者アルゴリズムVを巧妙に設計する必要がある。
以上、公開鍵認証方式のアルゴリズムについて、その概要を説明した。
[1-2:電子署名方式のアルゴリズム]
次に、図2を参照しながら、電子署名方式のアルゴリズムについて概要を説明する。図2は、電子署名方式のアルゴリズムについて概要を説明するための説明図である。
次に、図2を参照しながら、電子署名方式のアルゴリズムについて概要を説明する。図2は、電子署名方式のアルゴリズムについて概要を説明するための説明図である。
紙文書とは異なり、ある電子化されたデータに対して押印したり署名を記載したりすることはできない。そのため、電子化されたデータの作成者を証明するためには、紙文書に押印したり署名を記載したりするのと同等の効果が得られる電子的な仕組みを必要とする。この仕組みが電子署名である。電子署名とは、データの作成者しか知らない署名データをデータに関連付けて受領者に提供し、その署名データを受領者側で検証する仕組みのことを言う。
(モデル)
電子署名方式のモデルには、図2に示すように、署名者及び検証者という2つのエンティティが存在する。そして、電子署名方式のモデルは、鍵生成アルゴリズムGen、署名生成アルゴリズムSig、署名検証アルゴリズムVerという3つのアルゴリズムにより構成される。
電子署名方式のモデルには、図2に示すように、署名者及び検証者という2つのエンティティが存在する。そして、電子署名方式のモデルは、鍵生成アルゴリズムGen、署名生成アルゴリズムSig、署名検証アルゴリズムVerという3つのアルゴリズムにより構成される。
署名者は、鍵生成アルゴリズムGenを利用して署名者固有の署名鍵skと検証鍵pkとの組を生成する。また、署名者は、署名生成アルゴリズムSigを利用して文書Mに付与する電子署名σを生成する。つまり、署名者は、文書Mに電子署名を付与するエンティティである。一方、検証者は、署名検証アルゴリズムVerを利用して文書Mに付与された電子署名σを検証する。つまり、検証者は、文書Mの作成者が署名者であるか否かを確認するために、電子署名σを検証するエンティティである。
なお、以下の説明において、「署名者」「検証者」という表現を用いるが、これらの表現はあくまでもエンティティを意味するものである。従って、鍵生成アルゴリズムGen、署名生成アルゴリズムSigを実行する主体は、「署名者」のエンティティに対応する情報処理装置である。同様に、署名検証アルゴリズムVerを実行する主体は、情報処理装置である。これら情報処理装置のハードウェア構成は、例えば、図12に示した通りである。つまり、鍵生成アルゴリズムGen、署名生成アルゴリズムSig、署名検証アルゴリズムVerは、ROM904、RAM906、記憶部920、リムーバブル記録媒体928などに記録されたプログラムに基づいてCPU902などにより実行される。
(鍵生成アルゴリズムGen)
鍵生成アルゴリズムGenは、署名者により利用される。鍵生成アルゴリズムGenは、署名者固有の署名鍵skと検証鍵pkとの組を生成するアルゴリズムである。鍵生成アルゴリズムGenにより生成された検証鍵pkは公開される。一方、鍵生成アルゴリズムGenにより生成された署名鍵skは、署名者により秘密に管理される。そして、署名鍵skは、文書Mに付与される電子署名σの生成に利用される。例えば、鍵生成アルゴリズムGenは、セキュリティパラメータ1λ(λは0以上の整数)を入力とし、署名鍵sk及び公開鍵pkを出力する。この場合、鍵生成アルゴリズムGenは、形式的に、下記の式(3)のように表現することができる。
鍵生成アルゴリズムGenは、署名者により利用される。鍵生成アルゴリズムGenは、署名者固有の署名鍵skと検証鍵pkとの組を生成するアルゴリズムである。鍵生成アルゴリズムGenにより生成された検証鍵pkは公開される。一方、鍵生成アルゴリズムGenにより生成された署名鍵skは、署名者により秘密に管理される。そして、署名鍵skは、文書Mに付与される電子署名σの生成に利用される。例えば、鍵生成アルゴリズムGenは、セキュリティパラメータ1λ(λは0以上の整数)を入力とし、署名鍵sk及び公開鍵pkを出力する。この場合、鍵生成アルゴリズムGenは、形式的に、下記の式(3)のように表現することができる。
(署名生成アルゴリズムSig)
署名生成アルゴリズムSigは、署名者により利用される。署名生成アルゴリズムSigは、文書Mに付与される電子署名σを生成するアルゴリズムである。署名生成アルゴリズムSigは、署名鍵skと文書Mとを入力とし、電子署名σを出力するアルゴリズムである。この署名生成アルゴリズムSigは、形式的に、下記の式(4)のように表現することができる。
署名生成アルゴリズムSigは、署名者により利用される。署名生成アルゴリズムSigは、文書Mに付与される電子署名σを生成するアルゴリズムである。署名生成アルゴリズムSigは、署名鍵skと文書Mとを入力とし、電子署名σを出力するアルゴリズムである。この署名生成アルゴリズムSigは、形式的に、下記の式(4)のように表現することができる。
(署名検証アルゴリズムVer)
署名検証アルゴリズムVerは、検証者により利用される。署名検証アルゴリズムVerは、電子署名σが文書Mに対する正当な電子署名であるか否かを検証するアルゴリズムである。署名検証アルゴリズムVerは、署名者の検証鍵pk、文書M、電子署名σを入力とし、0又は1(1bit)を出力するアルゴリズムである。この署名検証アルゴリズムVerは、形式的に、下記の式(5)のように表現することができる。なお、検証者は、署名検証アルゴリズムVerが0を出力した場合(公開鍵pkが文書Mと電子署名σを拒否する場合)に電子署名σが不当であると判断し、1を出力した場合(公開鍵pkが文書Mと電子署名σを受理する場合)に電子署名σが正当であると判断する。
署名検証アルゴリズムVerは、検証者により利用される。署名検証アルゴリズムVerは、電子署名σが文書Mに対する正当な電子署名であるか否かを検証するアルゴリズムである。署名検証アルゴリズムVerは、署名者の検証鍵pk、文書M、電子署名σを入力とし、0又は1(1bit)を出力するアルゴリズムである。この署名検証アルゴリズムVerは、形式的に、下記の式(5)のように表現することができる。なお、検証者は、署名検証アルゴリズムVerが0を出力した場合(公開鍵pkが文書Mと電子署名σを拒否する場合)に電子署名σが不当であると判断し、1を出力した場合(公開鍵pkが文書Mと電子署名σを受理する場合)に電子署名σが正当であると判断する。
以上、電子署名方式のアルゴリズムについて、その概要を説明した。
[1-3:nパスの公開鍵認証方式]
次に、図3を参照しながら、nパスの公開鍵認証方式について説明する。図3は、nパスの公開鍵認証方式について説明するための説明図である。
次に、図3を参照しながら、nパスの公開鍵認証方式について説明する。図3は、nパスの公開鍵認証方式について説明するための説明図である。
上記の通り、公開鍵認証方式は、対話プロトコルの中で、証明者が公開鍵pkに対応する秘密鍵skを保有していることを検証者に証明する認証方式である。また、対話プロトコルは、健全性及び零知識性という2つの条件を満たす必要がある。そのため、対話プロトコルの中では、図3に示すように、証明者及び検証者の双方がそれぞれ処理を実行しながらn回の情報交換を行う。
nパスの公開鍵認証方式の場合、証明者アルゴリズムPを用いて証明者により処理(工程#1)が実行され、情報T1が検証者に送信される。次いで、検証者アルゴリズムVを用いて検証者により処理(工程#2)が実行され、情報T2が証明者に送信される。さらに、k=3~nについて処理の実行及び情報Tkの送信が順次行われ、最後に処理(工程#n+1)が実行される。このように、情報がn回送受信される方式のことを「nパス」の公開鍵認証方式と呼ぶ。
以上、nパスの公開鍵認証方式について説明した。
<2:3パスの公開鍵認証方式に係るアルゴリズムの構成>
以下、3パスの公開鍵認証方式に係るアルゴリズムについて説明する。なお、以下の説明において、3パスの公開鍵認証方式のことを「3パス方式」と呼ぶ場合がある。
以下、3パスの公開鍵認証方式に係るアルゴリズムについて説明する。なお、以下の説明において、3パスの公開鍵認証方式のことを「3パス方式」と呼ぶ場合がある。
[2-1:具体的なアルゴリズムの構成例(図4)]
まず、図4を参照しながら、3パス方式に係る具体的なアルゴリズムの構成例について紹介する。図4は、3パス方式に係る具体的なアルゴリズムの構成について説明するための説明図である。ここでは、公開鍵pkの一部として2次多項式の組(f1(x),…,fm(x))を利用する場合について考える。但し、2次多項式fi(x)は、下記の式(6)のように表現されるものとする。また、ベクトル(x1,…,xn)をxと表記し、2次多項式の組(f1(x),…,fm(x))を多変数多項式F(x)と表記することにする。
まず、図4を参照しながら、3パス方式に係る具体的なアルゴリズムの構成例について紹介する。図4は、3パス方式に係る具体的なアルゴリズムの構成について説明するための説明図である。ここでは、公開鍵pkの一部として2次多項式の組(f1(x),…,fm(x))を利用する場合について考える。但し、2次多項式fi(x)は、下記の式(6)のように表現されるものとする。また、ベクトル(x1,…,xn)をxと表記し、2次多項式の組(f1(x),…,fm(x))を多変数多項式F(x)と表記することにする。
また、2次多項式の組(f1(x),…,fm(x))は、下記の式(7)のように表現することができる。また、A1,…,Amは、n×n行列である。さらに、b1,…,bmはそれぞれn×1ベクトルである。
この表現を用いると、多変数多項式Fは、下記の式(8)及び式(9)のように表現することができる。この表現が成り立つことは、下記の式(10)から容易に確認することができる。
このようにF(x+y)をxに依存する第1の部分と、yに依存する第2の部分と、x及びyの両方に依存する第3の部分とに分けたとき、第3の部分に対応する項G(x,y)は、x及びyについて双線形になる。以下、項G(x,y)を双線形項と呼ぶ場合がある。この性質を利用すると、効率的なアルゴリズムを構築することが可能になる。
例えば、ベクトルt0∈Kn、e0∈Kmを用いて、多変数多項式F(x+r)のマスクに利用する多変数多項式F1(x)をF1(x)=G(x,t0)+e0と表現する。この場合、多変数多項式F(x+r0)とG(x)との和は、下記の式(11)のように表現される。ここで、t1=r0+t0、e1=F(r0)+e0とおけば、多変数多項式F2(x)=F(x+r0)+F1(x)は、ベクトルt1∈Kn、e1∈Kmにより表現することができる。そのため、F1(x)=G(x,t0)+e0に設定すれば、Kn上のベクトル及びKm上のベクトルを用いてF1及びF2を表現できるようになり、通信に必要なデータサイズの少ない効率的なアルゴリズムを実現することが可能になる。
なお、F2(或いはF1)からr0に関する情報が一切漏れることはない。例えば、e1及びt1(或いはe0及びt0)を与えられても、e0及びt0(或いはe1及びt1)を知らない限り、r0の情報を一切知ることはできない。従って、零知識性が担保される。以下、上記の論理に基づいて構築された3パス方式のアルゴリズムについて説明する。ここで説明する3パス方式のアルゴリズムは、以下のような鍵生成アルゴリズムGen、証明者アルゴリズムP、検証者アルゴリズムVにより構成される。
(鍵生成アルゴリズムGen)
鍵生成アルゴリズムGenは、環K上で定義されるm本の多変数多項式f1(x1,…,xn),…,fm(x1,…,xn)、及びベクトルs=(s1,…,sn)∈Knを生成する。次に、鍵生成アルゴリズムGenは、y=(y1,…,ym)←(f1(s),…,fm(s))を計算する。そして、鍵生成アルゴリズムGenは、(f1(x1,…,xn),…,fm(x1,…,xn),y)を公開鍵pkに設定し、sを秘密鍵に設定する。
鍵生成アルゴリズムGenは、環K上で定義されるm本の多変数多項式f1(x1,…,xn),…,fm(x1,…,xn)、及びベクトルs=(s1,…,sn)∈Knを生成する。次に、鍵生成アルゴリズムGenは、y=(y1,…,ym)←(f1(s),…,fm(s))を計算する。そして、鍵生成アルゴリズムGenは、(f1(x1,…,xn),…,fm(x1,…,xn),y)を公開鍵pkに設定し、sを秘密鍵に設定する。
(証明者アルゴリズムP、検証者アルゴリズムV)
以下、図4を参照しながら、対話プロトコルの中で証明者アルゴリズムPが実行する処理及び検証者アルゴリズムVが実行する処理について説明する。この対話プロトコルの中で、証明者は、秘密鍵sの情報を検証者に一切漏らさずに、「自身がy=F(s)を満たすsを知っていること」を検証者に示す。一方、検証者は、証明者がy=F(s)を満たすsを知っているか否かを検証する。なお、公開鍵pkは、検証者に公開されているものとする。また、秘密鍵sは、証明者により秘密に管理されているものとする。以下、図4に示したフローチャートに沿って説明を進める。
以下、図4を参照しながら、対話プロトコルの中で証明者アルゴリズムPが実行する処理及び検証者アルゴリズムVが実行する処理について説明する。この対話プロトコルの中で、証明者は、秘密鍵sの情報を検証者に一切漏らさずに、「自身がy=F(s)を満たすsを知っていること」を検証者に示す。一方、検証者は、証明者がy=F(s)を満たすsを知っているか否かを検証する。なお、公開鍵pkは、検証者に公開されているものとする。また、秘密鍵sは、証明者により秘密に管理されているものとする。以下、図4に示したフローチャートに沿って説明を進める。
工程#1:
図4に示すように、まず、証明者アルゴリズムPは、ランダムにベクトルr0,t0∈Kn及びe0∈Kmを生成する。次いで、証明者アルゴリズムPは、r1←s-r0を計算する。この計算は、秘密鍵sをベクトルr0によりマスクする操作に相当する。さらに、証明者アルゴリズムPは、t1←r0-t0を計算する。次いで、証明者アルゴリズムPは、e1←F(r0)-e0を計算する。
図4に示すように、まず、証明者アルゴリズムPは、ランダムにベクトルr0,t0∈Kn及びe0∈Kmを生成する。次いで、証明者アルゴリズムPは、r1←s-r0を計算する。この計算は、秘密鍵sをベクトルr0によりマスクする操作に相当する。さらに、証明者アルゴリズムPは、t1←r0-t0を計算する。次いで、証明者アルゴリズムPは、e1←F(r0)-e0を計算する。
工程#1(続き):
次いで、証明者アルゴリズムPは、c0←H(r1,G(t0,r1)+e0)を計算する。次いで、証明者アルゴリズムPは、c1←H(t0,e0)を計算する。次いで、証明者アルゴリズムPは、c2←H(t1,e1)を計算する。工程#1で生成されたメッセージ(c0,c1,c2)は、検証者アルゴリズムVに送られる。
次いで、証明者アルゴリズムPは、c0←H(r1,G(t0,r1)+e0)を計算する。次いで、証明者アルゴリズムPは、c1←H(t0,e0)を計算する。次いで、証明者アルゴリズムPは、c2←H(t1,e1)を計算する。工程#1で生成されたメッセージ(c0,c1,c2)は、検証者アルゴリズムVに送られる。
工程#2:
メッセージ(c0,c1,c2)を受け取った検証者アルゴリズムVは、3つの検証パターンのうち、どの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムVは、検証パターンの種類を表す3つの数値{0,1,2}の中から1つの数値を選択し、選択した数値を要求Chに設定する。この要求Chは証明者アルゴリズムPに送られる。
メッセージ(c0,c1,c2)を受け取った検証者アルゴリズムVは、3つの検証パターンのうち、どの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムVは、検証パターンの種類を表す3つの数値{0,1,2}の中から1つの数値を選択し、選択した数値を要求Chに設定する。この要求Chは証明者アルゴリズムPに送られる。
工程#3:
要求Chを受け取った証明者アルゴリズムPは、受け取った要求Chに応じて検証者アルゴリズムVに送る返答Rspを生成する。Ch=0の場合、証明者アルゴリズムPは、返答Rsp=(r0,t1,e1)を生成する。Ch=1の場合、証明者アルゴリズムPは、返答Rsp=(r1,t0,e0)を生成する。Ch=2の場合、証明者アルゴリズムPは、返答Rsp=(r1,t1,e1)を生成する。工程#3で生成された返答Rspは、検証者アルゴリズムVに送られる。
要求Chを受け取った証明者アルゴリズムPは、受け取った要求Chに応じて検証者アルゴリズムVに送る返答Rspを生成する。Ch=0の場合、証明者アルゴリズムPは、返答Rsp=(r0,t1,e1)を生成する。Ch=1の場合、証明者アルゴリズムPは、返答Rsp=(r1,t0,e0)を生成する。Ch=2の場合、証明者アルゴリズムPは、返答Rsp=(r1,t1,e1)を生成する。工程#3で生成された返答Rspは、検証者アルゴリズムVに送られる。
工程#4:
返答Rspを受け取った検証者アルゴリズムVは、受け取った返答Rspを利用して以下の検証処理を実行する。
返答Rspを受け取った検証者アルゴリズムVは、受け取った返答Rspを利用して以下の検証処理を実行する。
Ch=0の場合、検証者アルゴリズムVは、c1=H(r0-t1,F(r0)-e1)の等号が成り立つか否かを検証する。さらに、検証者アルゴリズムVは、c2=H(t1,e1)の等号が成り立つか否かを検証する。検証者アルゴリズムVは、これらの検証が全て成功した場合に認証成功を示す値1を出力し、検証に失敗があった場合に認証失敗を示す値0を出力する。
Ch=1の場合、検証者アルゴリズムVは、c0=H(r1,G(t0,r1)+e0)の等号が成り立つか否かを検証する。さらに、検証者アルゴリズムVは、c1=H(t0,e0)の等号が成り立つか否かを検証する。検証者アルゴリズムVは、これらの検証が全て成功した場合に認証成功を示す値1を出力し、検証に失敗があった場合に認証失敗を示す値0を出力する。
Ch=2の場合、検証者アルゴリズムVは、c0=H(r1,y-F(r1)-G(t1,r1)-e1)の等号が成り立つか否かを検証する。さらに、検証者アルゴリズムVは、c2=H(t1,e1)の等号が成り立つか否かを検証する。検証者アルゴリズムVは、これらの検証が全て成功した場合に認証成功を示す値1を出力し、検証に失敗があった場合に認証失敗を示す値0を出力する。
以上、3パス方式に係る効率的なアルゴリズムの構成例について説明した。
[2-2:並列化アルゴリズムの構成例(図5)]
次に、図5を参照しながら、図4に示した3パス方式のアルゴリズムを並列化する方法について説明する。なお、鍵生成アルゴリズムGenの構成については説明を省略する。
次に、図5を参照しながら、図4に示した3パス方式のアルゴリズムを並列化する方法について説明する。なお、鍵生成アルゴリズムGenの構成については説明を省略する。
さて、上記の対話プロトコルを適用すれば、偽証が成功する確率を2/3以下に抑制することができる。従って、この対話プロトコルを2回実行すれば、偽証が成功する確率を(2/3)2以下に抑制することができる。さらに、この対話プロトコルをN回実行すると、偽証が成功する確率は(2/3)Nとなり、Nを十分に大きい数(例えば、N=140)にすれば、偽証が成功する確率は無視できる程度に小さくなる。
対話プロトコルを複数回実行する方法としては、例えば、メッセージ、要求、返答のやり取りを逐次的に複数回繰り返す直列的な方法と、1回分のやり取りで複数回分のメッセージ、要求、返答のやり取りを行う並列的な方法とが考えられる。さらに、直列的な方法と並列的な方法とを組み合わせたハイブリッド型の方法も考えられる。ここでは、図5を参照しながら、3パス方式に係る上記の対話プロトコルを並列的に実行するアルゴリズム(以下、並列化アルゴリズム)について説明する。
工程#1:
図5に示すように、まず、証明者アルゴリズムPは、i=1~Nについて以下の処理(1)~処理(6)を実行する。
処理(1):証明者アルゴリズムPは、ランダムにベクトルr0i,t0i∈Kn及びe0i∈Kmを生成する。
処理(2):証明者アルゴリズムPは、r1i←s-r0iを計算する。この計算は、秘密鍵sをベクトルr0iによりマスクする操作に相当する。さらに、証明者アルゴリズムPは、t1i←r0i+t0iを計算する。
処理(3):証明者アルゴリズムPは、e1i←F(r0i)-e0iを計算する。
処理(4):証明者アルゴリズムPは、c0i←H(r1i,G(r1i,t0i)+e0i)を計算する。
処理(5):証明者アルゴリズムPは、c1i←H(t0i,e0i)を計算する。
処理(6):証明者アルゴリズムPは、c2i←H(t1i,e1i)を計算する。
図5に示すように、まず、証明者アルゴリズムPは、i=1~Nについて以下の処理(1)~処理(6)を実行する。
処理(1):証明者アルゴリズムPは、ランダムにベクトルr0i,t0i∈Kn及びe0i∈Kmを生成する。
処理(2):証明者アルゴリズムPは、r1i←s-r0iを計算する。この計算は、秘密鍵sをベクトルr0iによりマスクする操作に相当する。さらに、証明者アルゴリズムPは、t1i←r0i+t0iを計算する。
処理(3):証明者アルゴリズムPは、e1i←F(r0i)-e0iを計算する。
処理(4):証明者アルゴリズムPは、c0i←H(r1i,G(r1i,t0i)+e0i)を計算する。
処理(5):証明者アルゴリズムPは、c1i←H(t0i,e0i)を計算する。
処理(6):証明者アルゴリズムPは、c2i←H(t1i,e1i)を計算する。
工程#1(続き)
i=1~Nについて上記の処理(1)~処理(6)を実行した後、証明者アルゴリズムPは、Cmt←H(c01,c11,c21,…,c0N,c1N,c2N)を計算する。工程#1で生成されたハッシュ値Cmtは、検証者アルゴリズムVに送られる。このように、メッセージ(c01,c11,c21,…,c0N,c1N,c2N)をハッシュ値に変換してから検証者アルゴリズムVに送ることで、通信量を削減することが可能になる。
i=1~Nについて上記の処理(1)~処理(6)を実行した後、証明者アルゴリズムPは、Cmt←H(c01,c11,c21,…,c0N,c1N,c2N)を計算する。工程#1で生成されたハッシュ値Cmtは、検証者アルゴリズムVに送られる。このように、メッセージ(c01,c11,c21,…,c0N,c1N,c2N)をハッシュ値に変換してから検証者アルゴリズムVに送ることで、通信量を削減することが可能になる。
工程#2:
ハッシュ値Cmtを受け取った検証者アルゴリズムVは、i=1~Nのそれぞれについて、3つの検証パターンのうち、どの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムVは、i=1~Nのそれぞれについて、検証パターンの種類を表す3つの数値{0,1,2}の中から1つの数値を選択し、選択した数値を要求Chiに設定する。要求Ch1,…,ChNは、証明者アルゴリズムPに送られる。
ハッシュ値Cmtを受け取った検証者アルゴリズムVは、i=1~Nのそれぞれについて、3つの検証パターンのうち、どの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムVは、i=1~Nのそれぞれについて、検証パターンの種類を表す3つの数値{0,1,2}の中から1つの数値を選択し、選択した数値を要求Chiに設定する。要求Ch1,…,ChNは、証明者アルゴリズムPに送られる。
工程#3:
要求Ch1,…,ChNを受け取った証明者アルゴリズムPは、受け取った要求Ch1,…,ChNのそれぞれ応じて検証者アルゴリズムVに送る返答Rsp1,…,RspNを生成する。Chi=0の場合、証明者アルゴリズムPは、Rspi=(r0i,t1i,e1i,c0i)を生成する。Chi=1の場合、証明者アルゴリズムPは、Rspi=(r1i,t0i,e0i,c2i)を生成する。Chi=2の場合、証明者アルゴリズムPは、Rspi=(r1i,t1i,e1i,c1i)を生成する。
要求Ch1,…,ChNを受け取った証明者アルゴリズムPは、受け取った要求Ch1,…,ChNのそれぞれ応じて検証者アルゴリズムVに送る返答Rsp1,…,RspNを生成する。Chi=0の場合、証明者アルゴリズムPは、Rspi=(r0i,t1i,e1i,c0i)を生成する。Chi=1の場合、証明者アルゴリズムPは、Rspi=(r1i,t0i,e0i,c2i)を生成する。Chi=2の場合、証明者アルゴリズムPは、Rspi=(r1i,t1i,e1i,c1i)を生成する。
工程#3で生成された返答Rsp1,…,RspNは、検証者アルゴリズムVに送られる。
工程#4:
返答Rsp1,…,RspNを受け取った検証者アルゴリズムVは、受け取った返答Rsp1,…,RspNを利用して以下の処理(1)~処理(3)をi=1~Nについて実行する。但し、検証者アルゴリズムVは、Chi=0の場合に処理(1)を実行し、Chi=1の場合に処理(2)を実行し、Chi=2の場合に処理(3)を実行する。
返答Rsp1,…,RspNを受け取った検証者アルゴリズムVは、受け取った返答Rsp1,…,RspNを利用して以下の処理(1)~処理(3)をi=1~Nについて実行する。但し、検証者アルゴリズムVは、Chi=0の場合に処理(1)を実行し、Chi=1の場合に処理(2)を実行し、Chi=2の場合に処理(3)を実行する。
処理(1):Chi=0の場合、検証者アルゴリズムVは、Rspiから(r0i,t1i,e1i,c0i)を取り出す。次いで、検証者アルゴリズムVは、c1i=H(r0i-t1i,F(r0i)-e1i)を計算する。さらに、検証者アルゴリズムVは、c2i=H(t1i,e1i)を計算する。そして、検証者アルゴリズムVは、(c0i,c1i,c2i)を保持する。
処理(2):Chi=1の場合、検証者アルゴリズムVは、Rspiから(r1i,t0i,e0i,c2i)を取り出す。次いで、検証者アルゴリズムVは、c0i=H(r1i,G(t0i,r1i)+e0i)を計算する。さらに、検証者アルゴリズムVは、c1i=H(t0i,e0i)を計算する。そして、検証者アルゴリズムVは、(c0i,c1i,c2i)を保持する。
処理(3):Chi=2の場合、検証者アルゴリズムVは、Rspiから(r1i,t1i,e1i,c1i)を取り出す。次いで、検証者アルゴリズムVは、c0i=H(r1i,y-F(r1i)-G(t1i,r1i)-e1i)を計算する。さらに、検証者アルゴリズムVは、c2i=H(t1i,e1i)を計算する。そして、検証者アルゴリズムVは、(c0i,c1i,c2i)を保持する。
処理(1)~処理(3)をi=1~Nについて実行した後、検証者アルゴリズムVは、Cmt=H(c01,c11,c21,…,c0N,c1N,c2N)の等号が成り立つか否かを検証する。検証者アルゴリズムVは、この検証が成功した場合に認証成功を示す値1を出力し、検証に失敗した場合に認証失敗を示す値0を出力する。
以上、3パス方式に係る効率的な並列化アルゴリズムの構成例について説明した。
<3:5パスの公開鍵認証方式に係るアルゴリズムの構成>
次に、5パスの公開鍵認証方式に係るアルゴリズムについて説明する。なお、以下の説明において、5パスの公開鍵認証方式のことを「5パス方式」と呼ぶ場合がある。
次に、5パスの公開鍵認証方式に係るアルゴリズムについて説明する。なお、以下の説明において、5パスの公開鍵認証方式のことを「5パス方式」と呼ぶ場合がある。
3パス方式の場合には対話プロトコル1回当たりの偽証確率が2/3であったが、5パス方式の場合には対話プロトコル1回当たりの偽証確率が1/2+1/qとなる。但し、qは、利用する環の位数である。従って、環の位数が十分に大きい場合、5パス方式の方が1回当たりの偽証確率を低減することが可能になり、少ない対話プロトコルの実行回数で、偽証確率を十分に小さくすることができる。
例えば、偽証確率を1/2n以下にしたい場合、3パス方式においては、n/(log3-1)=1.701n回以上、対話プロトコルを実行する必要がある。一方、偽証確率を1/2n以下にしたい場合、5パス方式においては、n/(1-log(1+1/q))回以上、対話プロトコルを実行する必要がある。従って、q=24にすれば、同じセキュリティレベルを実現するのに必要な通信量は、3パス方式に比べ、5パス方式の方が少なくなるのである。
[3-1:具体的なアルゴリズムの構成例(図6)]
まず、図6を参照しながら、5パス方式に係る具体的なアルゴリズムの構成例について紹介する。図6は、5パス方式に係る具体的なアルゴリズムの構成について説明するための説明図である。ここでは、公開鍵pkの一部として2次多項式の組(f1(x),…,fm(x))を利用する場合について考える。但し、2次多項式fi(x)は、上記の式(6)のように表現されるものとする。また、ベクトル(x1,…,xn)をxと表記し、2次多項式の組(f1(x),…,fm(x))を多変数多項式F(x)と表記することにする。
まず、図6を参照しながら、5パス方式に係る具体的なアルゴリズムの構成例について紹介する。図6は、5パス方式に係る具体的なアルゴリズムの構成について説明するための説明図である。ここでは、公開鍵pkの一部として2次多項式の組(f1(x),…,fm(x))を利用する場合について考える。但し、2次多項式fi(x)は、上記の式(6)のように表現されるものとする。また、ベクトル(x1,…,xn)をxと表記し、2次多項式の組(f1(x),…,fm(x))を多変数多項式F(x)と表記することにする。
3パス方式に係るアルゴリズムと同様、2つのベクトルt0∈Kn、e0∈Kmを用いて、多変数多項式F(x+r0)をマスクするために用いた多変数多項式F1(x)をF1(x)=G(x、t0)+e0のように表現する。この表現を用いると、多変数多項式F(x+r0)について、下記の式(12)で表現される関係が得られる。
そのため、t1=ChA・r0+t0、e1=ChA・F(r0)+e0とすれば、マスク後の多変数多項式F2(x)=ChA・F(x+r0)+F1(x)も、2つのベクトルt1∈Kn、e1∈Kmにより表現することができる。これらの理由から、F1(x)=G(x,t0)+e0と設定すれば、Kn上のベクトル及びKm上のベクトルを用いてF1及びF2を表現できるようになり、通信に必要なデータサイズが少ない効率的なアルゴリズムを実現することが可能になる。
なお、F2(或いはF1)からr0に関する情報が一切漏れることはない。例えば、e1及びt1(或いはe0及びt0)を与えられても、e0及びt0(或いはe1及びt1)を知らない限り、r0の情報を一切知ることはできない。従って、零知識性は担保される。以下、上記の論理に基づいて構築された5パス方式のアルゴリズムについて説明する。ここで説明する5パス方式のアルゴリズムは、以下のような鍵生成アルゴリズムGen、証明者アルゴリズムP、検証者アルゴリズムVにより構成される。
(鍵生成アルゴリズムGen)
鍵生成アルゴリズムGenは、環K上で定義される多変数多項式f1(x1,…,xn),…,fm(x1,…,xn)、及びベクトルs=(s1,…,sn)∈Knを生成する。次に、鍵生成アルゴリズムGenは、y=(y1,…,ym)←(f1(s),…,fm(s))を計算する。そして、鍵生成アルゴリズムGenは、(f1,…,fm,y)を公開鍵pkに設定し、sを秘密鍵に設定する。なお、以下では、ベクトル(x1,…,xn)をxと表記し、多変数多項式の組(f1(x),…,fm(x))をF(x)と表記する。
鍵生成アルゴリズムGenは、環K上で定義される多変数多項式f1(x1,…,xn),…,fm(x1,…,xn)、及びベクトルs=(s1,…,sn)∈Knを生成する。次に、鍵生成アルゴリズムGenは、y=(y1,…,ym)←(f1(s),…,fm(s))を計算する。そして、鍵生成アルゴリズムGenは、(f1,…,fm,y)を公開鍵pkに設定し、sを秘密鍵に設定する。なお、以下では、ベクトル(x1,…,xn)をxと表記し、多変数多項式の組(f1(x),…,fm(x))をF(x)と表記する。
(証明者アルゴリズムP、検証者アルゴリズムV)
以下、図6を参照しながら、対話プロトコルの中で証明者アルゴリズムP及び検証者アルゴリズムVにより実行される処理について説明する。この対話プロトコルの中で、証明者は、秘密鍵sの情報を検証者に一切漏らさずに、「自身がy=F(s)を満たすsを知っていること」を検証者に示す。一方、検証者は、証明者がy=F(s)を満たすsを知っているか否かを検証する。なお、公開鍵pkは、検証者に公開されているものとする。また、秘密鍵sは、証明者により秘密に管理されているものとする。以下、図6に示したフローチャートに沿って説明を進める。
以下、図6を参照しながら、対話プロトコルの中で証明者アルゴリズムP及び検証者アルゴリズムVにより実行される処理について説明する。この対話プロトコルの中で、証明者は、秘密鍵sの情報を検証者に一切漏らさずに、「自身がy=F(s)を満たすsを知っていること」を検証者に示す。一方、検証者は、証明者がy=F(s)を満たすsを知っているか否かを検証する。なお、公開鍵pkは、検証者に公開されているものとする。また、秘密鍵sは、証明者により秘密に管理されているものとする。以下、図6に示したフローチャートに沿って説明を進める。
工程#1:
図6に示すように、まず、証明者アルゴリズムPは、ランダムにベクトルr0∈Kn、t0∈Kn、e0∈Kmを生成する。次いで、証明者アルゴリズムPは、r1←s-r0を計算する。この計算は、秘密鍵sをベクトルr0によりマスクする操作に相当する。次いで、証明者アルゴリズムPは、ベクトルr0,t0,e0のハッシュ値c0を生成する。つまり、証明者アルゴリズムPは、c0←H(r0,t0,e0)を計算する。次いで、証明者アルゴリズムPは、G(t0,r1)+e0及びr1のハッシュ値c1を生成する。つまり、証明者アルゴリズムPは、c0←H(r1,G(t0,r1)+e0)を計算する。工程#1で生成されたメッセージ(c0,c1)は、検証者アルゴリズムVに送られる。
図6に示すように、まず、証明者アルゴリズムPは、ランダムにベクトルr0∈Kn、t0∈Kn、e0∈Kmを生成する。次いで、証明者アルゴリズムPは、r1←s-r0を計算する。この計算は、秘密鍵sをベクトルr0によりマスクする操作に相当する。次いで、証明者アルゴリズムPは、ベクトルr0,t0,e0のハッシュ値c0を生成する。つまり、証明者アルゴリズムPは、c0←H(r0,t0,e0)を計算する。次いで、証明者アルゴリズムPは、G(t0,r1)+e0及びr1のハッシュ値c1を生成する。つまり、証明者アルゴリズムPは、c0←H(r1,G(t0,r1)+e0)を計算する。工程#1で生成されたメッセージ(c0,c1)は、検証者アルゴリズムVに送られる。
工程#2:
メッセージ(c0,c1)を受け取った検証者アルゴリズムVは、q通り存在する環Kの元からランダムに1つの数ChAを選択し、選択した数ChAを証明者アルゴリズムPに送る。
メッセージ(c0,c1)を受け取った検証者アルゴリズムVは、q通り存在する環Kの元からランダムに1つの数ChAを選択し、選択した数ChAを証明者アルゴリズムPに送る。
工程#3:
数ChAを受け取った証明者アルゴリズムPは、t1←ChA・r0-t0を計算する。さらに、証明者アルゴリズムPは、e1←ChA・F(r0)-e0を計算する。そして、証明者アルゴリズムPは、t1及びe1を検証者アルゴリズムVに送る。
数ChAを受け取った証明者アルゴリズムPは、t1←ChA・r0-t0を計算する。さらに、証明者アルゴリズムPは、e1←ChA・F(r0)-e0を計算する。そして、証明者アルゴリズムPは、t1及びe1を検証者アルゴリズムVに送る。
工程#4:
t1及びe1を受け取った検証者アルゴリズムVは、2つの検証パターンのうち、どちらの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムVは、検証パターンの種類を表す2つの数値{0,1}の中から1つの数値を選択し、選択した数値を要求ChBに設定する。この要求ChBは証明者アルゴリズムPに送られる。
t1及びe1を受け取った検証者アルゴリズムVは、2つの検証パターンのうち、どちらの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムVは、検証パターンの種類を表す2つの数値{0,1}の中から1つの数値を選択し、選択した数値を要求ChBに設定する。この要求ChBは証明者アルゴリズムPに送られる。
工程#5:
要求ChBを受け取った証明者アルゴリズムPは、受け取った要求ChBに応じて検証者アルゴリズムVに送り返す返答Rspを生成する。ChB=0の場合、証明者アルゴリズムPは、返答Rsp=r0を生成する。ChB=1の場合、証明者アルゴリズムPは、返答Rsp=r1を生成する。工程#5で生成された返答Rspは、検証者アルゴリズムVに送られる。
要求ChBを受け取った証明者アルゴリズムPは、受け取った要求ChBに応じて検証者アルゴリズムVに送り返す返答Rspを生成する。ChB=0の場合、証明者アルゴリズムPは、返答Rsp=r0を生成する。ChB=1の場合、証明者アルゴリズムPは、返答Rsp=r1を生成する。工程#5で生成された返答Rspは、検証者アルゴリズムVに送られる。
工程#6:
返答Rspを受け取った検証者アルゴリズムVは、受け取った返答Rspを利用して以下の検証処理を実行する。
返答Rspを受け取った検証者アルゴリズムVは、受け取った返答Rspを利用して以下の検証処理を実行する。
ChB=0の場合、検証者アルゴリズムVは、r0←Rspを実行する。そして、検証者アルゴリズムVは、c0=H(r0,ChA・r0-t1,ChA・F(r0)-e1)の等号が成り立つか否かを検証する。検証者アルゴリズムVは、この検証が成功した場合に認証成功を示す値1を出力し、検証に失敗があった場合に認証失敗を示す値0を出力する。
ChB=1の場合、検証者アルゴリズムVは、r1←Rspを実行する。そして、検証者アルゴリズムVは、c1=H1(r1,ChA・(y-F(r1))-G(t1,r1)-e1)の等号が成り立つか否かを検証する。検証者アルゴリズムVは、この検証が成功した場合に認証成功を示す値1を出力し、検証に失敗があった場合に認証失敗を示す値0を出力する。
以上、5パス方式に係る効率的なアルゴリズムの構成例について説明した。
[3-2:並列化アルゴリズムの構成例(図7)]
次に、図7を参照しながら、図6に示した5パス方式のアルゴリズムを並列化する方法について説明する。なお、鍵生成アルゴリズムGenの構成については説明を省略する。
次に、図7を参照しながら、図6に示した5パス方式のアルゴリズムを並列化する方法について説明する。なお、鍵生成アルゴリズムGenの構成については説明を省略する。
先に述べた通り、5パス方式に係る対話プロトコルを適用すれば、偽証が成功する確率を(1/2+1/q)以下に抑制することができる。従って、この対話プロトコルを2回実行すれば、偽証が成功する確率を(1/2+1/q)2以下に抑制することができる。さらに、この対話プロトコルをN回実行すると、偽証が成功する確率は(1/2+1/q)Nとなり、Nを十分に大きい数(例えば、N=80)にすれば、偽証が成功する確率は無視できる程度に小さくなる。
対話プロトコルを複数回実行する方法としては、例えば、メッセージ、要求、返答のやり取りを逐次的に複数回繰り返す直列的な方法と、1回分のやり取りで複数回分のメッセージ、要求、返答のやり取りを行う並列的な方法とが考えられる。さらに、直列的な方法と並列的な方法とを組み合わせたハイブリッド型の方法も考えられる。ここでは、5パス方式に係る上記の対話プロトコルを並列的に実行するアルゴリズム(以下、並列化アルゴリズム)について説明する。
工程#1:
図7に示すように、まず、証明者アルゴリズムPは、i=1~Nについて処理(1)~処理(4)を実行する。
処理(1):証明者アルゴリズムPは、ランダムにベクトルr0i,t0i∈Kn及びe0i∈Kmを生成する。
処理(2):証明者アルゴリズムPは、r1i←s-r0iを計算する。この計算は、秘密鍵sをベクトルr0iによりマスクする操作に相当する。
処理(3):証明者アルゴリズムPは、c0i←H(r0i,t0i,e0i)を計算する。
処理(4):証明者アルゴリズムPは、c1i←H(r1i,G(t0i,r1i)+e0i)を計算する。
i=1~Nについて処理(1)~処理(4)を実行した後、証明者アルゴリズムPは、ハッシュ値Cmt←H(c01,c11,…,c0N,c1N)を実行する。そして、工程#1で生成されたハッシュ値Cmtは、検証者アルゴリズムVに送られる。
図7に示すように、まず、証明者アルゴリズムPは、i=1~Nについて処理(1)~処理(4)を実行する。
処理(1):証明者アルゴリズムPは、ランダムにベクトルr0i,t0i∈Kn及びe0i∈Kmを生成する。
処理(2):証明者アルゴリズムPは、r1i←s-r0iを計算する。この計算は、秘密鍵sをベクトルr0iによりマスクする操作に相当する。
処理(3):証明者アルゴリズムPは、c0i←H(r0i,t0i,e0i)を計算する。
処理(4):証明者アルゴリズムPは、c1i←H(r1i,G(t0i,r1i)+e0i)を計算する。
i=1~Nについて処理(1)~処理(4)を実行した後、証明者アルゴリズムPは、ハッシュ値Cmt←H(c01,c11,…,c0N,c1N)を実行する。そして、工程#1で生成されたハッシュ値Cmtは、検証者アルゴリズムVに送られる。
工程#2:
ハッシュ値Cmtを受け取った検証者アルゴリズムVは、i=1~Nのそれぞれについて、q通り存在する環Kの元からランダムに1つの数ChAiを選択し、選択した数ChAi(i=1~N)を証明者アルゴリズムPに送る。
ハッシュ値Cmtを受け取った検証者アルゴリズムVは、i=1~Nのそれぞれについて、q通り存在する環Kの元からランダムに1つの数ChAiを選択し、選択した数ChAi(i=1~N)を証明者アルゴリズムPに送る。
工程#3:
数ChAi(i=1~N)を受け取った証明者アルゴリズムPは、i=1~Nのそれぞれについて、t1i←ChAi・r0i-t0iを計算する。さらに、証明者アルゴリズムPは、i=1~Nのそれぞれについて、e1i←ChAi・F(r0i)-e0iを計算する。次いで、証明者アルゴリズムPは、ハッシュ値d←H(t11,e11,…,t1N,e1N)を計算する。そして、証明者アルゴリズムPは、ハッシュ値dを検証者アルゴリズムVに送る。
数ChAi(i=1~N)を受け取った証明者アルゴリズムPは、i=1~Nのそれぞれについて、t1i←ChAi・r0i-t0iを計算する。さらに、証明者アルゴリズムPは、i=1~Nのそれぞれについて、e1i←ChAi・F(r0i)-e0iを計算する。次いで、証明者アルゴリズムPは、ハッシュ値d←H(t11,e11,…,t1N,e1N)を計算する。そして、証明者アルゴリズムPは、ハッシュ値dを検証者アルゴリズムVに送る。
工程#4:
ハッシュ値dを受け取った検証者アルゴリズムVは、i=1~Nのそれぞれについて、2つの検証パターンのうち、どちらの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムVは、検証パターンの種類を表す2つの数値{0,1}の中から1つの数値を選択し、選択した数値を要求ChBiに設定する。要求ChBi(i=1~N)は証明者アルゴリズムPに送られる。
ハッシュ値dを受け取った検証者アルゴリズムVは、i=1~Nのそれぞれについて、2つの検証パターンのうち、どちらの検証パターンを利用するかを選択する。例えば、検証者アルゴリズムVは、検証パターンの種類を表す2つの数値{0,1}の中から1つの数値を選択し、選択した数値を要求ChBiに設定する。要求ChBi(i=1~N)は証明者アルゴリズムPに送られる。
工程#5:
要求ChBi(i=1~N)を受け取った証明者アルゴリズムPは、i=1~Nについて、受け取った要求ChBiに応じて検証者アルゴリズムVに送り返す返答Rspiを生成する。ChBi=0の場合、証明者アルゴリズムPは、返答Rspi=(r0i,t0i,e0i,c1i)を生成する。ChBi=1の場合、証明者アルゴリズムPは、返答Rspi=(r1i,t1i,e1i,c0i)を生成する。工程#5で生成された返答Rspi(i=1~N)は、検証者アルゴリズムVに送られる。
要求ChBi(i=1~N)を受け取った証明者アルゴリズムPは、i=1~Nについて、受け取った要求ChBiに応じて検証者アルゴリズムVに送り返す返答Rspiを生成する。ChBi=0の場合、証明者アルゴリズムPは、返答Rspi=(r0i,t0i,e0i,c1i)を生成する。ChBi=1の場合、証明者アルゴリズムPは、返答Rspi=(r1i,t1i,e1i,c0i)を生成する。工程#5で生成された返答Rspi(i=1~N)は、検証者アルゴリズムVに送られる。
工程#6:
返答Rspi(i=1~N)を受け取った検証者アルゴリズムVは、受け取った返答Rspi(i=1~N)を利用して以下の処理(1)及び処理(2)を実行する。
返答Rspi(i=1~N)を受け取った検証者アルゴリズムVは、受け取った返答Rspi(i=1~N)を利用して以下の処理(1)及び処理(2)を実行する。
処理(1):ChBi=0の場合、検証者アルゴリズムVは、(r0i,t0i,e0i,c1i)←Rspiを実行する。そして、検証者アルゴリズムVは、c0i=H(r0i,t0i,e0i)を計算する。さらに、検証者アルゴリズムVは、t1i←ChAi・r0i+t0i、及びe1i←ChAi・F(r0i)-e0iを計算する。そして、検証者アルゴリズムVは、(c0i,c1i,t1i,e1i)を保持する。
処理(2):ChBi=1の場合、検証者アルゴリズムVは、(r1i,t1i,e1i,c0i)←Rspiを実行する。そして、検証者アルゴリズムVは、c1i=H(r1i,ChAi・(y-F(r1i))-G(t1i,r1i)-e1i)を計算する。そして、検証者アルゴリズムVは、(c0i,c1i,t1i,e1i)を保持する。
i=1~Nについて処理(1)及び処理(2)を実行した後、検証者アルゴリズムVは、Cmt=H(c01,c11,…,c0N,c1N)の等号が成り立つか否かを検証する。さらに、検証者アルゴリズムVは、d=H(t11,e11,…,t1N,e1N)の等号が成り立つか否かを検証する。そして、検証者アルゴリズムVは、これらの検証が全て成功した場合に認証成功を示す値1を出力し、検証に失敗があった場合に認証失敗を示す値0を出力する。
以上、5パス方式に係る効率的な並列化アルゴリズムの構成例について説明した。
<4:電子署名方式への変形>
次に、上記の公開鍵認証方式を電子署名方式へと変形する方法を紹介する。
次に、上記の公開鍵認証方式を電子署名方式へと変形する方法を紹介する。
公開鍵認証方式のモデルにおける証明者を電子署名方式における署名者に対応させると、証明者のみが検証者を納得させられるという点において、電子署名方式のモデルと近似していることが容易に理解されよう。こうした考えに基づき、上述した公開鍵認証方式を電子署名方式へと変形する方法について説明する。
[4-1:3パスの公開鍵認証方式から電子署名方式への変形(図8)]
まず、3パスの公開鍵認証方式から電子署名方式への変形について説明する。
まず、3パスの公開鍵認証方式から電子署名方式への変形について説明する。
図8に示すように、3パス方式に係る効率的なアルゴリズム(例えば、図5を参照)は、3回の対話及び4つの工程#1~工程#4で表現される。
工程#1は、i=1~Nについて、ai=(r0i,t0i,e0i,r1i,t1i,e1i,c0i,c1i,c2i)を生成する処理(1)と、Cmt←H(c01,c11,c21,…,c0N,c1N,c2N)を計算する処理(2)とで構成される。工程#1で証明者アルゴリズムPにより生成されたCmtは、検証者アルゴリズムVへと送られる。
工程#2は、Ch1,…,ChNを選択する処理で構成される。工程#2で検証者アルゴリズムVにより選択されたCh1,…,ChNは、証明者アルゴリズムPへと送られる。
工程#3は、Ch1,…,ChN及びa1,…,aNを用いてRsp1,…,RspNを生成する処理で構成される。この処理をRspi←Select(Chi,ai)と表現する。工程#3で証明者アルゴリズムPにより生成されたRsp1,…,RspNは、検証者アルゴリズムVへと送られる。
工程#4は、Ch1,…,ChN及びRsp1,…,RspNを用いてc01,c11,c21,…,c0N,c1N,c2Nを再生する処理(1)と、再生したc01,c11,c21,…,c0N,c1N,c2Nを用いてCmt=H(c01,c11,c21,…,c0N,c1N,c2N)を検証する処理(2)とで構成される。
上記の工程#1~工程#4で表現される公開鍵認証方式のアルゴリズムは、図8に示すような署名生成アルゴリズムSig及び署名検証アルゴリズムVerに変形される。
(署名生成アルゴリズムSig)
まず、署名生成アルゴリズムSigの構成について述べる。署名生成アルゴリズムSigは、以下の処理(1)~処理(5)で構成される。
まず、署名生成アルゴリズムSigの構成について述べる。署名生成アルゴリズムSigは、以下の処理(1)~処理(5)で構成される。
処理(1):署名生成アルゴリズムSigは、ai=(r0i,t0i,e0i,r1i,t1i,e1i,c0i,c1i,c2i)を生成する。
処理(2):署名生成アルゴリズムSigは、Cmt←H(c01,c11,c21,…,c0N,c1N,c2N)を計算する。
処理(3):署名生成アルゴリズムSigは、(Ch1,…,ChN)←H(M,Cmt)を計算する。このMは、署名を付与する文書である。
処理(4):署名生成アルゴリズムSigは、Rspi←Select(Chi,ai)を計算する。
処理(5):署名生成アルゴリズムSigは、(Cmt,Rsp1,…,RspN)を署名に設定する。
処理(2):署名生成アルゴリズムSigは、Cmt←H(c01,c11,c21,…,c0N,c1N,c2N)を計算する。
処理(3):署名生成アルゴリズムSigは、(Ch1,…,ChN)←H(M,Cmt)を計算する。このMは、署名を付与する文書である。
処理(4):署名生成アルゴリズムSigは、Rspi←Select(Chi,ai)を計算する。
処理(5):署名生成アルゴリズムSigは、(Cmt,Rsp1,…,RspN)を署名に設定する。
(署名検証アルゴリズムVer)
次に、署名検証アルゴリズムVerの構成について述べる。署名検証アルゴリズムVerは、以下の処理(1)~処理(3)で構成される。
次に、署名検証アルゴリズムVerの構成について述べる。署名検証アルゴリズムVerは、以下の処理(1)~処理(3)で構成される。
処理(1):署名検証アルゴリズムVerは、(Ch1,…,ChN)←H(M,Cmt)を計算する。
処理(2):署名検証アルゴリズムVerは、Ch1,…,ChN及びRsp1,…,RspNを用いてc01,c11,c21,…,c0N,c1N,c2Nを生成する。
処理(3):署名検証アルゴリズムVerは、再生したc01,c11,c21,…,c0N,c1N,c2Nを用いてCmt=H(c01,c11,c21,…,c0N,c1N,c2N)を検証する。
処理(2):署名検証アルゴリズムVerは、Ch1,…,ChN及びRsp1,…,RspNを用いてc01,c11,c21,…,c0N,c1N,c2Nを生成する。
処理(3):署名検証アルゴリズムVerは、再生したc01,c11,c21,…,c0N,c1N,c2Nを用いてCmt=H(c01,c11,c21,…,c0N,c1N,c2N)を検証する。
以上説明したように、公開鍵認証方式のモデルにおける証明者を電子署名方式における署名者に対応させることで、公開鍵認証方式のアルゴリズムを電子署名方式のアルゴリズムへと変形することが可能になる。
[4-2:5パスの公開鍵認証方式から電子署名方式への変形(図9)]
次に、5パスの公開鍵認証方式から電子署名方式への変形について説明する。
次に、5パスの公開鍵認証方式から電子署名方式への変形について説明する。
図9に示すように、5パス方式に係る効率的なアルゴリズム(例えば、図7を参照)は、5回の対話及び6つの工程#1~工程#6で表現される。
工程#1は、i=1~Nについて、ai=(r0i,t0i,e0i,r1i,t1i,e1i,c0i,c1i)を生成する処理(1)と、Cmt←H(c01,c11,…,c0N,c1N)を計算する処理(2)とで構成される。工程#1で証明者アルゴリズムPにより生成されたCmtは、検証者アルゴリズムVへと送られる。
工程#2は、ChA1,…,ChANを選択する処理で構成される。工程#2で検証者アルゴリズムVにより選択されたChA1,…,ChANは、証明者アルゴリズムPへと送られる。
工程#3は、i=1~Nについて、bi=(t1i,e1i)を生成する処理、及びd=H(t11,e11,…,t1N,e1N)を生成する処理で構成される。工程#3で証明者アルゴリズムPにより生成されたdは、検証者アルゴリズムVへと送られる。
工程#4は、ChB1,…,ChBNを選択する処理で構成される。工程#4で検証者アルゴリズムVにより選択されたChB1,…,ChBNは、証明者アルゴリズムPへと送られる。
工程#5は、ChB1,…,ChBN,a1,…,aN,b1,…,bNを用いてRsp1,…,RspNを生成する処理で構成される。この処理をRspi←Select(ChBi,ai,bi)と表現する。工程#5で証明者アルゴリズムPにより生成されたRsp1,…,RspNは、検証者アルゴリズムVへと送られる。
工程#6は、ChA1,…,ChAN,ChB1,…,ChBN,Rsp1,…,RspNを用いてc01,c11,…,c0N,c1N,t11,e11,…,t1N,e1Nを再生する処理と、再生したc01,c11,…,c0N,c1Nを用いてCmt=H(c01,c11,…,c0N,c1N)を検証する処理と、d=H(t11,e11,…,t1N,e1N)を検証する処理とで構成される。
上記の工程#1~工程#6で表現される公開鍵認証方式のアルゴリズムは、図9に示すような署名生成アルゴリズムSig及び署名検証アルゴリズムVerに変形される。
(署名生成アルゴリズムSig)
まず、署名生成アルゴリズムSigの構成について述べる。署名生成アルゴリズムSigは、以下の処理(1)~処理(7)で構成される。
まず、署名生成アルゴリズムSigの構成について述べる。署名生成アルゴリズムSigは、以下の処理(1)~処理(7)で構成される。
処理(1):署名生成アルゴリズムSigは、ai=(r0i,t0i,e0i,r1i,t1i,e1i,c0i,c1i)を生成する。
処理(2):署名生成アルゴリズムSigは、Cmt←H(c01,c11,…,c0N,c1N)を計算する。
処理(3):署名生成アルゴリズムSigは、(ChA1,…,ChAN)←H(M,Cmt)を計算する。このMは、署名を付与する文書である。
処理(4):署名生成アルゴリズムSigは、i=1~Nについて、bi=(t1i,e1i)を生成する。さらに、署名生成アルゴリズムSigは、d=H(t11,e11,…,t1N,e1N)を算出する。
処理(5):署名生成アルゴリズムSigは、(ChB1,…,ChBN)←H(M,Cmt,ChA1,…,ChAN,d)を計算する。なお、(ChB1,…,ChBN)←H(ChA1,…,ChAN,d)と変形してもよい。
処理(6):署名生成アルゴリズムSigは、Rspi←Select(ChBi,ai,bi)を計算する。
処理(7):署名生成アルゴリズムSigは、(Cmt,d,Rsp1,…,RspN)を電子署名に設定する。
処理(2):署名生成アルゴリズムSigは、Cmt←H(c01,c11,…,c0N,c1N)を計算する。
処理(3):署名生成アルゴリズムSigは、(ChA1,…,ChAN)←H(M,Cmt)を計算する。このMは、署名を付与する文書である。
処理(4):署名生成アルゴリズムSigは、i=1~Nについて、bi=(t1i,e1i)を生成する。さらに、署名生成アルゴリズムSigは、d=H(t11,e11,…,t1N,e1N)を算出する。
処理(5):署名生成アルゴリズムSigは、(ChB1,…,ChBN)←H(M,Cmt,ChA1,…,ChAN,d)を計算する。なお、(ChB1,…,ChBN)←H(ChA1,…,ChAN,d)と変形してもよい。
処理(6):署名生成アルゴリズムSigは、Rspi←Select(ChBi,ai,bi)を計算する。
処理(7):署名生成アルゴリズムSigは、(Cmt,d,Rsp1,…,RspN)を電子署名に設定する。
(署名検証アルゴリズムVer)
次に、署名検証アルゴリズムVerの構成について述べる。署名検証アルゴリズムVerは、以下の処理(1)~処理(4)で構成される。
次に、署名検証アルゴリズムVerの構成について述べる。署名検証アルゴリズムVerは、以下の処理(1)~処理(4)で構成される。
処理(1):署名検証アルゴリズムVerは、(ChA1,…,ChAN)←H(M,Cmt)を計算する。
処理(2):署名検証アルゴリズムVerは、(ChB1,…,ChBN)←H(M,Cmt,ChA1,…,ChAN,d)を計算する。なお、署名検証アルゴリズムVerが実行する処理(5)において、(ChB1,…,ChBN)←H(ChA1,…,ChAN,d)と変形した場合、署名検証アルゴリズムVerは、(ChB1,…,ChBN)←H(ChA1,…,ChAN,d)を計算する。
処理(3):署名検証アルゴリズムVerは、ChA1,…,ChAN,ChB1,…,ChBN,Rsp1,…,RspNを用いてt11,e11,…,t1N,e1N,c01,c11,…,c0N,c1Nを生成する。
処理(4):署名検証アルゴリズムVerは、再生したc01,c11,…,c0N,c1Nを用いてCmt=H(c01,c11,…,c0N,c1N)及びd=H(t11,e11,…,t1N,e1N,)を検証する。
処理(2):署名検証アルゴリズムVerは、(ChB1,…,ChBN)←H(M,Cmt,ChA1,…,ChAN,d)を計算する。なお、署名検証アルゴリズムVerが実行する処理(5)において、(ChB1,…,ChBN)←H(ChA1,…,ChAN,d)と変形した場合、署名検証アルゴリズムVerは、(ChB1,…,ChBN)←H(ChA1,…,ChAN,d)を計算する。
処理(3):署名検証アルゴリズムVerは、ChA1,…,ChAN,ChB1,…,ChBN,Rsp1,…,RspNを用いてt11,e11,…,t1N,e1N,c01,c11,…,c0N,c1Nを生成する。
処理(4):署名検証アルゴリズムVerは、再生したc01,c11,…,c0N,c1Nを用いてCmt=H(c01,c11,…,c0N,c1N)及びd=H(t11,e11,…,t1N,e1N,)を検証する。
以上説明したように、公開鍵認証方式のモデルにおける証明者を電子署名方式における署名者に対応させることで、公開鍵認証方式のアルゴリズムを電子署名方式のアルゴリズムへと変形することが可能になる。
<5:多変数多項式の係数を効率的に代入する方法について>
さて、これまでは多変数多項式を証明者(又は署名者)と検証者との間で共有する方法について具体的に明示してこなかった。多変数多項式を共有する方法としては、多変数多項式の係数(乱数)を生成する際に用いるシードを両者で共有する方法が考えられる。しかしながら、共有しているシードを利用して生成した乱数を係数に当てはめる順序を両者で共有しない限り、多変数多項式を共有したことにはならない。
さて、これまでは多変数多項式を証明者(又は署名者)と検証者との間で共有する方法について具体的に明示してこなかった。多変数多項式を共有する方法としては、多変数多項式の係数(乱数)を生成する際に用いるシードを両者で共有する方法が考えられる。しかしながら、共有しているシードを利用して生成した乱数を係数に当てはめる順序を両者で共有しない限り、多変数多項式を共有したことにはならない。
[5-1:基本的な取り決め]
そこで、証明者(又は署名者)と検証者との間で、共有しているシードを用いて生成した乱数列を、どの順序で多変数多項式に当てはめるかについて基本的な取り決めを行う。そして、多変数多項式を利用する際に、この基本的な取り決めに従って乱数列を多変数多項式に当てはめる。このような方法を用いれば、証明者(又は署名者)と検証者との間で多変数多項式を共有したことになる。
そこで、証明者(又は署名者)と検証者との間で、共有しているシードを用いて生成した乱数列を、どの順序で多変数多項式に当てはめるかについて基本的な取り決めを行う。そして、多変数多項式を利用する際に、この基本的な取り決めに従って乱数列を多変数多項式に当てはめる。このような方法を用いれば、証明者(又は署名者)と検証者との間で多変数多項式を共有したことになる。
[5-2:データの構造化]
但し、多変数多項式を構成する係数の数は膨大である。1つの係数が1ビット単位で表現されている場合、多変数多項式を表現するのに最低でも数万ビット以上のデータが必要になる。そのため、数を多変数多項式の係数に代入する処理の負荷は非常に高い。そこで、本件発明者は、多変数多項式の係数を所定の単位で構造化し、係数への代入処理を効率化する手法(構造化手法#1)を考案した。さらに、本件発明者は、同じ多変数多項式の係数に対して複数回の代入処理を実行する場合に、その処理効率を向上させる手法(構造化手法#2)を考案した。以下、これらの手法について詳細に説明する。
但し、多変数多項式を構成する係数の数は膨大である。1つの係数が1ビット単位で表現されている場合、多変数多項式を表現するのに最低でも数万ビット以上のデータが必要になる。そのため、数を多変数多項式の係数に代入する処理の負荷は非常に高い。そこで、本件発明者は、多変数多項式の係数を所定の単位で構造化し、係数への代入処理を効率化する手法(構造化手法#1)を考案した。さらに、本件発明者は、同じ多変数多項式の係数に対して複数回の代入処理を実行する場合に、その処理効率を向上させる手法(構造化手法#2)を考案した。以下、これらの手法について詳細に説明する。
(5-2-1:構造化手法#1(図10、図11))
まず、構造化手法#1について説明する。構造化手法#1は、図10及び図11に示すように、多変数多項式を構成する同じ種類の項の係数を1つのデータ構造として纏める手法である。図10の例では、多変数多項式Fの係数a1IJ~aMIJがデータ構造Aとして纏められ、係数b1I~bMIがデータ構造Bとして纏められている。また、図11に示すように、多変数多項式Gについても同様の手法が適用可能である。この場合、係数(a1IJ+a1JI)~(aMIJ+aMJI)がデータ構造として纏められる。
まず、構造化手法#1について説明する。構造化手法#1は、図10及び図11に示すように、多変数多項式を構成する同じ種類の項の係数を1つのデータ構造として纏める手法である。図10の例では、多変数多項式Fの係数a1IJ~aMIJがデータ構造Aとして纏められ、係数b1I~bMIがデータ構造Bとして纏められている。また、図11に示すように、多変数多項式Gについても同様の手法が適用可能である。この場合、係数(a1IJ+a1JI)~(aMIJ+aMJI)がデータ構造として纏められる。
構造化手法#1を適用しない場合、M本のN変数多項式で構成される多変数多項式Fの計算は、(例1)に示すようなアルゴリズムにより行われる。(例1)の場合、1ビットのAND演算(&)を2×N×(N+1)×M/2回実行する必要がある。さらに、1ビットのXOR演算(^)を1×N×(N+1)×M/2回実行する必要がある。なお、入力xはNビットであるとする。
(例1)
input x;
for L=1 to M
for I=1 to N
for J=I to N
[yのLビット目]^=[aLIJ]&[xのIビット目]&[xのJビット目];
end for
end for
end for
output y;
input x;
for L=1 to M
for I=1 to N
for J=I to N
[yのLビット目]^=[aLIJ]&[xのIビット目]&[xのJビット目];
end for
end for
end for
output y;
一方、図10に示すように係数を構造化し、生成した乱数を多変数多項式Fの係数として一部ずつ逐次適用していく場合、係数の代入アルゴリズムは(例2)のようになる。(例2)の場合、MビットのAND演算(&)を2×N×(N+1)/2回、MビットのXOR演算(^)をN×(N+1)/2回実行するだけで済む。なお、a(1~M)IJは、それぞれループのタイミングで生成される。また、係数を使い回してもよい。例えば、N(N+1)/2回のループを実行する際、[a(1~M)IJ]を毎回生成せず、M回に1回だけ生成するようにしてもよい。また、M回のループ中、[a(1~M)IJ]を1ビットずつローテーションしながら利用してもよい。
(例2)
input x;
for I=1 to N
for J=I to N
[yの1~Mビット目]^=[a(1~M)IJ]&[xのIビット目]&[xのJビット目];
end for
end for
output y;
input x;
for I=1 to N
for J=I to N
[yの1~Mビット目]^=[a(1~M)IJ]&[xのIビット目]&[xのJビット目];
end for
end for
output y;
また、図10に示すように係数を構造化する場合、多変数多項式Fの係数を適用した中間の結果をテーブルに保持するようにしてもよい。この場合、上記のアルゴリズムは(例3)のようになる。なお、配列aIJ[0][0]~aIJ[2k-1][2k-1]には、それぞれ、aIJ[x1,…,xk][z1,…,zk]=(a(k(I-1)+1)(k(J-1)+1)&x1&z1)^…^(a(k(I-1)+1)(k(J-1)+k)&x1&zk)^…^(a(k(I-1)+k)(k(J-1)+1)&xk&z1)^…^(a(k(I-1)+k)(k(J-1)+k)&xk&zk)が格納されている。(例3)の場合、MビットのXOR演算(^)を(N/k)(N/k+1)/2回実行するだけで済む。但し、(例2)のアルゴリズムに比べると、必要なメモリ量は、22k/k2倍となる。
例えば、k=1のとき、MビットXOR演算が120*119/2=7140回、必要なメモリ量が(例2)の22=4倍、ループ回数は変化なしとなる。また、k=2のとき、MビットXOR演算が60*59/2=1770回、必要なメモリ量が24/4=4倍、ループ回数が1/4となる。k=4のとき、MビットXOR演算が30*29/2=435回、必要なメモリ量が28/42=16倍、ループ回数が1/16.4となる。k=6のとき、MビットXOR演算が20*19/2=190回、必要なメモリ量が212/62=114倍、ループ回数が1/37.6となる。k=8のとき、MビットXOR演算が15*14/2=135回、必要なメモリが216/82=1024倍、ループ回数が1/52.9となる。
(例3)
input x;
for I=1 to N/k
for J=I to N/k
[yの1~Mビット目]^=a(1~M)IJ[xのk(I-1)+1~kビット目][xのk(J-1)+1~kビット目];
end for
end for
output y;
input x;
for I=1 to N/k
for J=I to N/k
[yの1~Mビット目]^=a(1~M)IJ[xのk(I-1)+1~kビット目][xのk(J-1)+1~kビット目];
end for
end for
output y;
なお、(例3)に示した手法は、ちょうど、下記の式(13)で定義されるFIJ(…)の値を予め計算し、配列として保持しておく手法と言える。
以上、構造化手法#1を多変数多項式Fへ適用するケースを例に挙げて具体的なアルゴリズムについて説明した。かかる構成により、アルゴリズムを実行する際に処理の高速化が期待できる。
ここまで、図10を参照しながら、構造化手法#1を適用して多変数多項式Fを計算するアルゴリズムについて説明してきた。一方で、多変数多項式Gの各要素も二次形式で表現されることから、図11に示すように、同様にして上記の構造化手法#1を多変数多項式Gの計算にそのまま適用することも可能である。
例えば、上記の構造化手法#1を適用しない場合、多変数多項式Gを計算するアルゴリズムは、下記の(例1’)のように表現される。なお、入力x及びyはそれぞれNビットであるとする。
(例1’)
input x,y;
for L=1 to M
for I=1 to N
for J=1 to N
[zのLビット目]^=[aLIJ+aLJI]&[xのIビット目]&[yのJビット目];
end for
end for
end for
output z;
input x,y;
for L=1 to M
for I=1 to N
for J=1 to N
[zのLビット目]^=[aLIJ+aLJI]&[xのIビット目]&[yのJビット目];
end for
end for
end for
output z;
上記の(例1’)に対し、上述した構造化手法#1を適用すると、多変数多項式Gを計算するアルゴリズムは、下記の(例2’)のように表現される。
(例2’)
input x,y;
for I=1 to N
for J=1 to N
[zの1~Mビット目]^=[a(1~M)IJ+a(1~M)JI]&[xのIビット目]&[yのJビット目];
end for
end for
output z;
input x,y;
for I=1 to N
for J=1 to N
[zの1~Mビット目]^=[a(1~M)IJ+a(1~M)JI]&[xのIビット目]&[yのJビット目];
end for
end for
output z;
また、多変数多項式Gの係数を適用した中間の結果をテーブルに保持する手法の場合、多変数多項式Gを計算するアルゴリズムは、上記の(例3)に対応して下記の(例3’)のようになる。なお、配列aIJ[0][0]~aIJ[2k-1][2k-1]には、それぞれ、aIJ[x1,…,xk][y1,…,yk]=(a(k(I-1)+1)(k(J-1)+1)&x1&y1)^…^(a(k(I-1)+1)(k(J-1)+k)&x1&yk)^…^(a(k(I-1)+k)(k(J-1)+1)&xk&y1)^…^(a(k(I-1)+k)(k(J-1)+k)&xk&yk)が格納されている。
(例3’)の場合、MビットのXOR演算(^)を(N/k)2回実行するだけで済む。但し、(例2’)のアルゴリズムに比べると、必要なメモリ量は、22k/k2倍となる。
例えば、k=1のとき、MビットXOR演算が1202=14400回、必要なメモリ量が(例2’)の22=4倍、ループ回数は変化なしとなる。また、k=2のとき、MビットXOR演算が602=3600回、必要なメモリ量が24/4=4倍、ループ回数が1/4となる。k=4のとき、MビットXOR演算が302=900回、必要なメモリ量が28/42=16倍、ループ回数が1/16となる。k=6のとき、MビットXOR演算が202=400回、必要なメモリ量が212/62=114倍、ループ回数が1/36となる。k=8のとき、MビットXOR演算が152=225回、必要なメモリが216/82=1024倍、ループ回数が1/64となる。
(例3’)
input x,y;
for I=1 to N/k
for J=1 to N/k
[zの1~Mビット目]^=a(1~M)IJ[xのk(I-1)+1~kビット目][yのk(J-1)+1~kビット目];
end for
end for
output z;
input x,y;
for I=1 to N/k
for J=1 to N/k
[zの1~Mビット目]^=a(1~M)IJ[xのk(I-1)+1~kビット目][yのk(J-1)+1~kビット目];
end for
end for
output z;
なお、(例3’)に示した手法は、ちょうど、下記の式(14)で定義されるGIJ(…)の値を予め計算し、配列として保持しておく手法と言える。
以上、多変数多項式Gを計算するケースを例に挙げ、構造化手法#1に係る具体的なアルゴリズムの構成について説明した。かかる構成により、アルゴリズムを実行する際に処理の高速化が期待できる。
((例2)及び(例2’)に係る手法の更なる効率化について)
ここで、上記(例2)のアルゴリズムを再び参照する。上記(例2)のアルゴリズムは、インデックスI及びJについて二重のループ処理を含んでいる。そこで、このループ処理の部分で実行される処理ステップの内容に工夫を加え、同じ結果を得つつ、演算の回数を低減させる手法を提案する。また、同様の手法を(例2’)に適用する方法についても紹介する。
ここで、上記(例2)のアルゴリズムを再び参照する。上記(例2)のアルゴリズムは、インデックスI及びJについて二重のループ処理を含んでいる。そこで、このループ処理の部分で実行される処理ステップの内容に工夫を加え、同じ結果を得つつ、演算の回数を低減させる手法を提案する。また、同様の手法を(例2’)に適用する方法についても紹介する。
(Fへの適用:第1の手法)
第1の手法として、例えば、インデックスJに依らない[xのIビット目]の項を内側のループ(Jのループ)から取り出し、下記の(例2A)のように変形する手法を提案する。なお、tmpは、一時的に値を格納するための変数である。このように変形すると、演算の内容は、MビットのAND演算(&)を1×N×(N+1)/2回、MビットのXOR演算(^)をN×(N+1)/2回実行するだけで済むものとなる。
第1の手法として、例えば、インデックスJに依らない[xのIビット目]の項を内側のループ(Jのループ)から取り出し、下記の(例2A)のように変形する手法を提案する。なお、tmpは、一時的に値を格納するための変数である。このように変形すると、演算の内容は、MビットのAND演算(&)を1×N×(N+1)/2回、MビットのXOR演算(^)をN×(N+1)/2回実行するだけで済むものとなる。
(例2A)
input x;
for I=1 to N
for J=I to N
tmp^=[a(1~M)IJ]&[xのJビット目];
end for
[yの1~Mビット目]^=tmp&[xのIビット目];
end for
output y;
input x;
for I=1 to N
for J=I to N
tmp^=[a(1~M)IJ]&[xのJビット目];
end for
[yの1~Mビット目]^=tmp&[xのIビット目];
end for
output y;
(Fへの適用:第2の手法)
また、第2の手法として、[xのIビット目]の項が0の場合に、出力に影響が及ばないことを考慮し、例えば、[xのIビット目]=1の場合にだけ内側のループ処理が実行されるように、条件分岐を用いて下記の(例2B)のように変形する手法を提案する。このように変形すると、演算の内容は、MビットのAND演算(&)を1×N×(N+3)/2×p回、MビットのXOR演算(^)をN×(N+1)/2×p回実行するだけで済むものとなる。但し、pは、[xのIビット目]=0となる割合を表す。
また、第2の手法として、[xのIビット目]の項が0の場合に、出力に影響が及ばないことを考慮し、例えば、[xのIビット目]=1の場合にだけ内側のループ処理が実行されるように、条件分岐を用いて下記の(例2B)のように変形する手法を提案する。このように変形すると、演算の内容は、MビットのAND演算(&)を1×N×(N+3)/2×p回、MビットのXOR演算(^)をN×(N+1)/2×p回実行するだけで済むものとなる。但し、pは、[xのIビット目]=0となる割合を表す。
(例2B)
input x;
for I=1 to N
if [xのIビット目]=1 then
for J=I to N
tmp^=[a(1~M)IJ]&[xのJビット目];
end for
[yの1~Mビット目]^=tmp;
end if
end for
output y;
input x;
for I=1 to N
if [xのIビット目]=1 then
for J=I to N
tmp^=[a(1~M)IJ]&[xのJビット目];
end for
[yの1~Mビット目]^=tmp;
end if
end for
output y;
(Fへの適用:第3の手法)
また、第3の手法として、[xのJビット目]の項が0の場合に、出力に影響が及ばないことを考慮し、例えば、[xのJビット目]=1の場合にだけ内側のループ処理が実行されるように、条件分岐を用いて下記の(例2C)のように変形する手法を提案する。このように変形すると、演算の回数をさらに低減させることが可能になる。
また、第3の手法として、[xのJビット目]の項が0の場合に、出力に影響が及ばないことを考慮し、例えば、[xのJビット目]=1の場合にだけ内側のループ処理が実行されるように、条件分岐を用いて下記の(例2C)のように変形する手法を提案する。このように変形すると、演算の回数をさらに低減させることが可能になる。
(例2C)
input x;
for I=1 to N
if [xのIビット目]=1 then
for J=I to N
if [xのJビット目]=1 then
tmp^=[a(1~M)IJ];
end if
end for
[yの1~Mビット目]^=tmp;
end if
end for
output y;
input x;
for I=1 to N
if [xのIビット目]=1 then
for J=I to N
if [xのJビット目]=1 then
tmp^=[a(1~M)IJ];
end if
end for
[yの1~Mビット目]^=tmp;
end if
end for
output y;
(Gへの適用:第1の手法)
上記第1~第3の手法は、多変数多項式Gに関する上記(例2’)のアルゴリズムに対しても同様に適用可能である。例えば、上記(例2’)のアルゴリズムに上述した第1の手法を適用すると、下記(例2’A)のようにアルゴリズムが変形される。
上記第1~第3の手法は、多変数多項式Gに関する上記(例2’)のアルゴリズムに対しても同様に適用可能である。例えば、上記(例2’)のアルゴリズムに上述した第1の手法を適用すると、下記(例2’A)のようにアルゴリズムが変形される。
(例2’A)
input x,y;
for I=1 to N
for J=1 to N
tmp^=[a(1~M)IJ+a(1~M)JI]&[yのJビット目];
end for
[zの1~Mビット目]^=tmp&[xのIビット目];
end for
output z;
input x,y;
for I=1 to N
for J=1 to N
tmp^=[a(1~M)IJ+a(1~M)JI]&[yのJビット目];
end for
[zの1~Mビット目]^=tmp&[xのIビット目];
end for
output z;
(Gへの適用:第2の手法)
また、上記(例2’)のアルゴリズムに上述した第2の手法を適用する。上記(例2’)のアルゴリズムも、[xのIビット目]の項が0の場合に、出力に影響が及ばない。そこで、[xのIビット目]=1の場合にだけ内側のループ処理が実行されるように、条件分岐を用いて下記の(例2’B)のように変形すると、演算回数を低減することが可能になる。
また、上記(例2’)のアルゴリズムに上述した第2の手法を適用する。上記(例2’)のアルゴリズムも、[xのIビット目]の項が0の場合に、出力に影響が及ばない。そこで、[xのIビット目]=1の場合にだけ内側のループ処理が実行されるように、条件分岐を用いて下記の(例2’B)のように変形すると、演算回数を低減することが可能になる。
(例2’B)
input x,y;
for I=1 to N
if [xのIビット目]=1 then
for J=1 to N
tmp^=[a(1~M)IJ+a(1~M)JI]&[yのJビット目];
end for
[zの1~Mビット目]^=tmp;
end if
end for
output z;
input x,y;
for I=1 to N
if [xのIビット目]=1 then
for J=1 to N
tmp^=[a(1~M)IJ+a(1~M)JI]&[yのJビット目];
end for
[zの1~Mビット目]^=tmp;
end if
end for
output z;
(Gへの適用:第3の手法)
また、上記(例2’)のアルゴリズムに上述した第3の手法を適用する。上記(例2’)のアルゴリズムも、[yのJビット目]の項が0の場合に、出力に影響が及ばない。そこで、[yのJビット目]=1の場合にだけ内側のループ処理が実行されるように、条件分岐を用いて下記の(例2’C)のように変形すると、演算回数を低減することが可能になる。
また、上記(例2’)のアルゴリズムに上述した第3の手法を適用する。上記(例2’)のアルゴリズムも、[yのJビット目]の項が0の場合に、出力に影響が及ばない。そこで、[yのJビット目]=1の場合にだけ内側のループ処理が実行されるように、条件分岐を用いて下記の(例2’C)のように変形すると、演算回数を低減することが可能になる。
(例2’C)
input x,y;
for I=1 to N
if [xのIビット目]=1 then
for J=I+1 to N
if [yのJビット目]=1 then
tmp^=a(1~M)IJ;
end if
end for
for J=1 to I-1
if [yのJビット目]=1 then
tmp^=a(1~M)JI;
end if
end for
[zの1~Mビット目]^=tmp;
end if
end for
output z;
input x,y;
for I=1 to N
if [xのIビット目]=1 then
for J=I+1 to N
if [yのJビット目]=1 then
tmp^=a(1~M)IJ;
end if
end for
for J=1 to I-1
if [yのJビット目]=1 then
tmp^=a(1~M)JI;
end if
end for
[zの1~Mビット目]^=tmp;
end if
end for
output z;
以上説明したように、第1~第3の手法を適用することにより、多変数多項式Gについても、係数を代入するアルゴリズムにおける演算回数を低減させることが可能になる。
(安全性への配慮)
ところで、上記の第2の手法や第3の手法のように、処理をスキップさせるアルゴリズムに変形すると、入力xに0が多く含まれる場合と、入力xに含まれる0の数が少ない場合とで処理時間に差が生じてしまう。そのため、処理時間を計測することにより、入力xに関する情報が得られる。つまり、処理をスキップさせるアルゴリズムを適用すると、署名生成などに利用する乱数の情報が漏洩してしまう危険性が生じる。
ところで、上記の第2の手法や第3の手法のように、処理をスキップさせるアルゴリズムに変形すると、入力xに0が多く含まれる場合と、入力xに含まれる0の数が少ない場合とで処理時間に差が生じてしまう。そのため、処理時間を計測することにより、入力xに関する情報が得られる。つまり、処理をスキップさせるアルゴリズムを適用すると、署名生成などに利用する乱数の情報が漏洩してしまう危険性が生じる。
そこで、上記の危険性を回避するために、予め許容する「入力xにおける0の割合」の範囲(例えば、10%以下、90%以上など)を設定し、その範囲に入らない場合には乱数を取り直す手法を提案する。この手法を適用すると、設定した範囲よりも0が多い場合や少ない場合に、乱数を取り直す処理が実行される。その結果、多項式Fにxを代入する処理時間を計測されても、その処理時間から入力xに関する情報が漏洩しにくくなる。
また、上記手法の他にも、秘密鍵に「0と1のビットの個数がほぼ等しい(完全に等しくてもよい。)」という制約を与える手法が考えられる。この手法を適用すると、上述した処理をスキップさせるアルゴリズムを用いても、ある程度は処理時間を均一化することが可能になり、その処理時間から入力xに関する情報が漏洩しにくくなる。
ここで、具体的にF(r0)及びG(r1,t0)の計算を実行する場合について考えてみよう。秘密鍵をs、r0及びt0をランダムなベクトルとし、r1=s+r0とする(「+」はXORに対応)。この場合、秘密鍵sにおいて0と1のビットの個数を等しくしておくと、r0がどのような値を取る場合も、r1の半分のビットは、r0を反転したものとなる。そして、r0(Nビット)及びr1(Nビット)で構成される2Nビットのうち、0となるビットの個数は0.5N~1.5Nの範囲内になる。つまり、r0とr1とが共に、全て0又は全て1となることはない。
上記の性質を利用すると、処理をスキップするアルゴリズムを適用した場合でも、F(r0)及びG(t0,r1)の総計算時間を均一化することが可能になる。一例として、上記(例2C)及び(例2’C)のアルゴリズムを適用する場合について考えてみたい。この場合、多変数多項式Fの計算は(例2C)のアルゴリズムにより実行され、多変数多項式Gの計算は(例2’C)のアルゴリズムにより実行される。両アルゴリズムを以下に再掲する。
多変数多項式F(r0)を計算する場合、入力x=r0となる。また、多変数多項式G(r1,t0)を計算する場合、入力x=r1となる。上記の通り、r0とr1の合計2Nビットのうち、0となるビットの個数は0.5N~1.5Nの範囲内となる。そのため、下記(例2C)のアルゴリズムの第3行目に記載された条件分岐と、下記(例2’C)のアルゴリズムの第3行目に記載された条件分岐とにおいて、処理がスキップされる回数も0.5N~1.5Nの範囲内になる。従って、多変数多項式F及びGの合計処理時間から、入力に関する情報が漏洩しにくくなる。
(例2C:再掲、行番号を付加)
1: input x;
2: for I=1 to N
3: if [xのIビット目]=1 then
4: for J=I to N
5: if [xのJビット目]=1 then
6: tmp^=[a(1~M)IJ];
7: end if
8: end for
9: [yの1~Mビット目]^=tmp;
10: end if
11: end for
12: output y;
1: input x;
2: for I=1 to N
3: if [xのIビット目]=1 then
4: for J=I to N
5: if [xのJビット目]=1 then
6: tmp^=[a(1~M)IJ];
7: end if
8: end for
9: [yの1~Mビット目]^=tmp;
10: end if
11: end for
12: output y;
(例2’C:再掲、行番号を付加)
1: input x,y;
2: for I=1 to N
3: if [xのIビット目]=1 then
4: for J=I+1 to N
5: if [yのJビット目]=1 then
6: tmp^=a(1~M)IJ;
7: end if
8: end for
9: for J=1 to I-1
10: if [yのJビット目]=1 then
11: tmp^=a(1~M)JI;
12: end if
13: end for
14: [zの1~Mビット目]^=tmp;
15: end if
16: end for
17: output z;
1: input x,y;
2: for I=1 to N
3: if [xのIビット目]=1 then
4: for J=I+1 to N
5: if [yのJビット目]=1 then
6: tmp^=a(1~M)IJ;
7: end if
8: end for
9: for J=1 to I-1
10: if [yのJビット目]=1 then
11: tmp^=a(1~M)JI;
12: end if
13: end for
14: [zの1~Mビット目]^=tmp;
15: end if
16: end for
17: output z;
以上、構造化手法#1について説明した。
(5-2-2:構造化手法#2)
次に、構造化手法#2について説明する。構造化手法#2は、同じ多変数多項式にN回(N≧2)代入処理を行なう場合に、乱数から多項式をN回生成して代入処理を行うのではなく、「係数を一部生成し、その部分に関するN回分の処理を行なう」部分を単位とする逐次的な処理をN回分並列して行なうという手法である。この手法を適用すると、乱数生成のコストが無視できない場合にN回分の処理全体でのスループットが改善される。
次に、構造化手法#2について説明する。構造化手法#2は、同じ多変数多項式にN回(N≧2)代入処理を行なう場合に、乱数から多項式をN回生成して代入処理を行うのではなく、「係数を一部生成し、その部分に関するN回分の処理を行なう」部分を単位とする逐次的な処理をN回分並列して行なうという手法である。この手法を適用すると、乱数生成のコストが無視できない場合にN回分の処理全体でのスループットが改善される。
例えば、図5に示したアルゴリズムでは、工程#1において引数を更新しながら多変数多項式F及びGの計算をN回繰り返し実行している。そこで、このような計算部分について、同じ係数を利用して繰り返し演算を行うように構成する。上記(例2)などのアルゴリズムを用いて多変数多項式F(r0i)(i=1~N)を計算する場合、一度生成した[aIJL]について、N個のr0iを全て適用した後で、次の[aIJL]に関する処理を実行するように構成する。このように構成すると、同じ係数[aIJL]をN回生成せずに済むようになる。もちろん、多変数多項式Gを計算する場合についても同様に、構造化手法#2を適用可能である。
以上、構造化手法#2に係る具体的な係数の代入アルゴリズムについて説明した。かかる構成により、N回分の処理におけるトータルでのスループットが改善される。
[5-3:前処理による更なる効率化]
ここで、多変数多項式F、Gの計算を更に効率化するために前処理を実施する手法について説明する。この手法は、例えば、構造化手法#1を適用した上記(例2)などのアルゴリズムに適用可能である。以下では、前処理の例として、入力xのデータ表現に関する処理、配列のインデックスに関する処理、及び多変数多項式F、Gの計算を共通化する処理について述べる。
ここで、多変数多項式F、Gの計算を更に効率化するために前処理を実施する手法について説明する。この手法は、例えば、構造化手法#1を適用した上記(例2)などのアルゴリズムに適用可能である。以下では、前処理の例として、入力xのデータ表現に関する処理、配列のインデックスに関する処理、及び多変数多項式F、Gの計算を共通化する処理について述べる。
(5-3-1:データ表現の変換)
まず、多変数多項式F、Gの計算を実行する前に入力xのデータ表現を変換する前処理(以下、データ変換処理)について説明する。
まず、多変数多項式F、Gの計算を実行する前に入力xのデータ表現を変換する前処理(以下、データ変換処理)について説明する。
(Fへの適用)
例えば、128ビットの入力xが、4つの32ビット整数型データとして保持されている場合、(例2)のアルゴリズムの4行目において、4つの32ビット整数から[xのIビット目]をとってきてMビットに拡張する処理が発生する。この処理をループ処理の中で毎回実行するとループ処理が低速になる。そこで、ループ処理を実行する前に、入力xの[xのIビット目]をMビットに拡張したデータを生成し、そのデータを要素とする配列Q[I]を用意しておく手法を提案する。この手法を適用することで、ループ処理の中で毎回1ビットをMビットに拡張する処理が必要なくなり、ループ処理が高速化される。
例えば、128ビットの入力xが、4つの32ビット整数型データとして保持されている場合、(例2)のアルゴリズムの4行目において、4つの32ビット整数から[xのIビット目]をとってきてMビットに拡張する処理が発生する。この処理をループ処理の中で毎回実行するとループ処理が低速になる。そこで、ループ処理を実行する前に、入力xの[xのIビット目]をMビットに拡張したデータを生成し、そのデータを要素とする配列Q[I]を用意しておく手法を提案する。この手法を適用することで、ループ処理の中で毎回1ビットをMビットに拡張する処理が必要なくなり、ループ処理が高速化される。
(例2:再掲、行番号を付加)
1: input x;
2: for I=1 to N
3: for J=I to N
4: [yの1~Mビット目]^=[a(1~M)IJ]&[xのIビット目]&[xのJビット目];
5: end for
6: end for
7: output y;
1: input x;
2: for I=1 to N
3: for J=I to N
4: [yの1~Mビット目]^=[a(1~M)IJ]&[xのIビット目]&[xのJビット目];
5: end for
6: end for
7: output y;
また、上記(例3)のアルゴリズムの場合、ループ処理の中で毎回[xのk(I-1)+1~kビット目]をとってくる処理が発生する。そこで、ループ処理を実行する前に、入力xの[xのk(I-1)+1~kビット目]をMビットに拡張したデータを生成し、そのデータを要素とする配列Q[I]を用意しておく手法を提案する。この手法を適用することで、ループ処理の中で毎回kビット目をとってくる処理が必要なくなり、ループ処理が高速化される。同様に、上述した構造化手法#1に係るアルゴリズムに対してデータ変換処理を施すことにより、ループ処理が高速化される。
また、上述した構造化手法#1のうち、第2の手法や第3の手法のように処理をスキップさせるアルゴリズムの場合、[xのIビット目]が1となる位置のリストを事前に用意しておき、このリストを利用して処理を効率化することができる。例えば、[xのIビット目]が1となる位置を示す配列x’[I]を用意すると、上述した(例2C)のアルゴリズムは、下記の(例2C改)のようになる。但し、wは、入力xの中で1となるビットの数を表す。かかる構成により、ループ中の条件分岐がなくなるため、ループ処理が高速化される。
(例2C改)
input x;
for I=1 to w
for (x’[J]>x’[I]を満たすJ)
[yの1~Mビット目]^=[a(1~M)x’[I]x’[J]];
end for
end for
output y;
input x;
for I=1 to w
for (x’[J]>x’[I]を満たすJ)
[yの1~Mビット目]^=[a(1~M)x’[I]x’[J]];
end for
end for
output y;
(Gへの適用)
データ変換処理によるアルゴリズムの効率化は、多変数多項式Gの計算アルゴリズムに対しても同様にして適用可能である。
データ変換処理によるアルゴリズムの効率化は、多変数多項式Gの計算アルゴリズムに対しても同様にして適用可能である。
例えば、128ビットの入力xが、4つの32ビット整数型データとして保持されている場合、(例2’)のアルゴリズムの4行目において、4つの32ビット整数から[xのIビット目]をとってきてMビットに拡張する処理が発生する。この処理をループ処理の中で毎回実行するとループ処理が低速になる。そこで、ループ処理を実行する前に、入力xの[xのIビット目]をMビットに拡張したデータを生成し、そのデータを要素とする配列Q[I]を用意しておく手法を提案する。この手法を適用することで、ループ処理の中で毎回1ビットをMビットに拡張する処理が必要なくなり、ループ処理が高速化される。
(例2’)
input x,y;
for I=1 to N
for J=1 to N
[zの1~Mビット目]^=[a(1~M)IJ+a(1~M)JI]&[xのIビット目]&[yのJビット目];
end for
end for
output z;
input x,y;
for I=1 to N
for J=1 to N
[zの1~Mビット目]^=[a(1~M)IJ+a(1~M)JI]&[xのIビット目]&[yのJビット目];
end for
end for
output z;
また、上記(例3’)のアルゴリズムの場合、ループ処理の中で毎回[xのk(I-1)+1~kビット目]をとってくる処理が発生する。そこで、ループ処理を実行する前に、入力xの[xのk(I-1)+1~kビット目]をMビットに拡張したデータを生成し、そのデータを要素とする配列Q[I]を用意しておく手法を提案する。この手法を適用することで、ループ処理の中で毎回kビット目をとってくる処理が必要なくなり、ループ処理が高速化される。同様に、上述した構造化手法#1に係るアルゴリズムに対してデータ変換処理を施すことにより、ループ処理が高速化される。
また、上述した構造化手法#1のうち、第2の手法や第3の手法のように処理をスキップさせるアルゴリズムの場合、[xのIビット目]が1となる位置及び[yのJビット目]が1となる位置のリストを事前に用意しておき、このリストを利用して処理を効率化することができる。例えば、[xのIビット目]が1となる位置を示す配列x’[I]及び[yのJビット目]が1となる位置を示す配列y’[J]を用意すると、上述した(例2’C)のアルゴリズムは、下記の(例2’C改)のようになる。但し、wxは、入力xの中で1となるビットの数を表す。また、wyは、入力yの中で1となるビットの数を表す。かかる構成により、ループ中の条件分岐がなくなるため、ループ処理が高速化される。
(例2’C改)
input x,y;
for I=1 to wx
for (x’[I]<y’[J]を満たすJ)
[zの1~Mビット目]^=a(1~M)x’[I]y’[J];
end for
for (y’[I]<x’[J]を満たすJ)
[zの1~Mビット目]^=a(1~M)y’[I]x’[J];
end for
end for
output z;
input x,y;
for I=1 to wx
for (x’[I]<y’[J]を満たすJ)
[zの1~Mビット目]^=a(1~M)x’[I]y’[J];
end for
for (y’[I]<x’[J]を満たすJ)
[zの1~Mビット目]^=a(1~M)y’[I]x’[J];
end for
end for
output z;
以上、データ変換処理について説明した。
(5-3-2:インデックスの表現)
次に、多変数多項式F、Gの係数を適用した中間の結果をテーブルに保持する手法に適用可能な前処理について説明する。例えば、上述した(例3)のアルゴリズムの場合、中間の結果を4次元配列で保持することが必要になる。また、4次元配列へのアクセスには、多くのインデックスの計算が必要になる。
次に、多変数多項式F、Gの係数を適用した中間の結果をテーブルに保持する手法に適用可能な前処理について説明する。例えば、上述した(例3)のアルゴリズムの場合、中間の結果を4次元配列で保持することが必要になる。また、4次元配列へのアクセスには、多くのインデックスの計算が必要になる。
例えば、4次元配列A[a1][a2][a3][a4](a1=1~a、a2=1~b、a3=1~c、a4=1~d)の場合、A[I][J][K][L]にアクセスするためには、b×c×d×I+c×d×J+d×K+Lというインデックスの計算が必要になる。そこで、このインデックス計算を効率化する手法について提案する。
例えば、上述した(例3)のアルゴリズムは、中間の結果が保持された4次元配列A[・][・][・][・]を用いて次のように表現することができる。
(例3:4次元配列Aを用いた表現)
1: input x;
2: for I=1 to N/k
3: for J=I to N/k
4: [yの1~Mビット目]^=A(1~M)[I][J][xk(I-1)+1…xk(I-1)+k][xk(J-1)+1…xk(J-1)+k];
5: end for
6: end for
7: output y;
1: input x;
2: for I=1 to N/k
3: for J=I to N/k
4: [yの1~Mビット目]^=A(1~M)[I][J][xk(I-1)+1…xk(I-1)+k][xk(J-1)+1…xk(J-1)+k];
5: end for
6: end for
7: output y;
ここで、上記(例3)の4行目に記載の4次元配列Aのインデックスの位置に注目する。上記(例3)のアルゴリズムにおいて、インデックスの位置を次のように入れ替えた配列にデータを保持しても、当該アルゴリズムの計算に支障は生じない。
(入れ替え後)
A(1~M)[I][xk(I-1)+1…xk(I-1)+k][J][xk(J-1)+1…xk(J-1)+k];
A(1~M)[I][xk(I-1)+1…xk(I-1)+k][J][xk(J-1)+1…xk(J-1)+k];
さらに、4次元配列Aを次のようにして2次元配列で表現しても、上記アルゴリズムによる計算結果は同じである。そこで、I=1,…,N/kについて、2k×I+xk(I-1)+1…xk(I-1)+kの値を予め計算しておき、ループ処理の際に利用すれば、ループ処理の中でインデックスを逐次計算する必要がなくなり、計算が効率化される。
(2次元配列への変更後)
A(1~M)[2k×I+xk(I-1)+1…xk(I-1)+k][2k×J+xk(J-1)+1…xk(J-1)+k];
A(1~M)[2k×I+xk(I-1)+1…xk(I-1)+k][2k×J+xk(J-1)+1…xk(J-1)+k];
以上、インデックスの表現を工夫する前処理について説明した。上記のように、インデックスを途中まで計算しておくことや、インデックスの計算を一部共通化することなどで、演算量を削減することが可能になる。なお、ここでは多変数多項式Fの計算についてインデックスの表現を工夫した前処理を説明したが、多変数多項式Gの計算についても同様に適用することが可能である。
(5-3-3:前処理の共通化)
ところで、先に説明した署名検証アルゴリズムなどにおいては、共通する入力xに対して多変数多項式F(x)及びG(x,y)を共に計算することがある。この場合、多変数多項式F(x)及びG(x,y)の計算に関する上記の前処理を共通化することができる。例えば、上述したデータ変換処理の場合、[xのIビット目]をMビットに拡張したデータを要素とする配列Q[I]を用意しておけば、多変数多項式F(x)及びG(x,y)のいずれの計算にも利用することができる。かかる構成により、前処理の効果がより向上する。
ところで、先に説明した署名検証アルゴリズムなどにおいては、共通する入力xに対して多変数多項式F(x)及びG(x,y)を共に計算することがある。この場合、多変数多項式F(x)及びG(x,y)の計算に関する上記の前処理を共通化することができる。例えば、上述したデータ変換処理の場合、[xのIビット目]をMビットに拡張したデータを要素とする配列Q[I]を用意しておけば、多変数多項式F(x)及びG(x,y)のいずれの計算にも利用することができる。かかる構成により、前処理の効果がより向上する。
同様に、[xのk(I-1)+1~kビット目]をMビットに拡張したデータを生成し、そのデータを要素とする配列Q[I]を用意しておけば、多変数多項式F(x)及びG(x,y)のいずれの計算にも利用することができる。かかる構成により、前処理の効果がより向上する。さらに、[xのIビット目]が1となる位置を示す配列x’[I]を用意しておけば、多変数多項式F(x)及びG(x,y)のいずれの計算にも利用することができる。かかる構成により、前処理の効果がより向上する。
以上、前処理による更なる効率化ついて説明した。
<8:ハードウェア構成例(図12)>
上記の各アルゴリズムは、例えば、図12に示す情報処理装置のハードウェア構成を用いて実行することが可能である。つまり、当該各アルゴリズムの処理は、コンピュータプログラムを用いて図12に示すハードウェアを制御することにより実現される。なお、このハードウェアの形態は任意であり、例えば、パーソナルコンピュータ、携帯電話、PHS、PDA等の携帯情報端末、ゲーム機、接触式又は非接触式のICチップ、接触式又は非接触式のICカード、又は種々の情報家電がこれに含まれる。但し、上記のPHSは、Personal Handy-phone Systemの略である。また、上記のPDAは、Personal Digital Assistantの略である。
上記の各アルゴリズムは、例えば、図12に示す情報処理装置のハードウェア構成を用いて実行することが可能である。つまり、当該各アルゴリズムの処理は、コンピュータプログラムを用いて図12に示すハードウェアを制御することにより実現される。なお、このハードウェアの形態は任意であり、例えば、パーソナルコンピュータ、携帯電話、PHS、PDA等の携帯情報端末、ゲーム機、接触式又は非接触式のICチップ、接触式又は非接触式のICカード、又は種々の情報家電がこれに含まれる。但し、上記のPHSは、Personal Handy-phone Systemの略である。また、上記のPDAは、Personal Digital Assistantの略である。
図12に示すように、このハードウェアは、主に、CPU902と、ROM904と、RAM906と、ホストバス908と、ブリッジ910と、を有する。さらに、このハードウェアは、外部バス912と、インターフェース914と、入力部916と、出力部918と、記憶部920と、ドライブ922と、接続ポート924と、通信部926と、を有する。但し、上記のCPUは、Central Processing Unitの略である。また、上記のROMは、Read Only Memoryの略である。そして、上記のRAMは、Random Access Memoryの略である。
CPU902は、例えば、演算処理装置又は制御装置として機能し、ROM904、RAM906、記憶部920、又はリムーバブル記録媒体928に記録された各種プログラムに基づいて各構成要素の動作全般又はその一部を制御する。ROM904は、CPU902に読み込まれるプログラムや演算に用いるデータ等を格納する手段である。RAM906には、例えば、CPU902に読み込まれるプログラムや、そのプログラムを実行する際に適宜変化する各種パラメータ等が一時的又は永続的に格納される。
これらの構成要素は、例えば、高速なデータ伝送が可能なホストバス908を介して相互に接続される。一方、ホストバス908は、例えば、ブリッジ910を介して比較的データ伝送速度が低速な外部バス912に接続される。また、入力部916としては、例えば、マウス、キーボード、タッチパネル、ボタン、スイッチ、及びレバー等が用いられる。さらに、入力部916としては、赤外線やその他の電波を利用して制御信号を送信することが可能なリモートコントローラ(以下、リモコン)が用いられることもある。
出力部918としては、例えば、CRT、LCD、PDP、又はELD等のディスプレイ装置、スピーカ、ヘッドホン等のオーディオ出力装置、プリンタ、携帯電話、又はファクシミリ等、取得した情報を利用者に対して視覚的又は聴覚的に通知することが可能な装置である。但し、上記のCRTは、Cathode Ray Tubeの略である。また、上記のLCDは、Liquid Crystal Displayの略である。そして、上記のPDPは、Plasma DisplayPanelの略である。さらに、上記のELDは、Electro-Luminescence Displayの略である。
記憶部920は、各種のデータを格納するための装置である。記憶部920としては、例えば、ハードディスクドライブ(HDD)等の磁気記憶デバイス、半導体記憶デバイス、光記憶デバイス、又は光磁気記憶デバイス等が用いられる。但し、上記のHDDは、Hard Disk Driveの略である。
ドライブ922は、例えば、磁気ディスク、光ディスク、光磁気ディスク、又は半導体メモリ等のリムーバブル記録媒体928に記録された情報を読み出し、又はリムーバブル記録媒体928に情報を書き込む装置である。リムーバブル記録媒体928は、例えば、DVDメディア、Blu-rayメディア、HD DVDメディア、各種の半導体記憶メディア等である。もちろん、リムーバブル記録媒体928は、例えば、非接触型ICチップを搭載したICカード、又は電子機器等であってもよい。但し、上記のICは、Integrated Circuitの略である。
接続ポート924は、例えば、USBポート、IEEE1394ポート、SCSI、RS-232Cポート、又は光オーディオ端子等のような外部接続機器930を接続するためのポートである。外部接続機器930は、例えば、プリンタ、携帯音楽プレーヤ、デジタルカメラ、デジタルビデオカメラ、又はICレコーダ等である。但し、上記のUSBは、Universal Serial Busの略である。また、上記のSCSIは、Small Computer System Interfaceの略である。
通信部926は、ネットワーク932に接続するための通信デバイスであり、例えば、有線又は無線LAN、Bluetooth(登録商標)、又はWUSB用の通信カード、光通信用のルータ、ADSL用のルータ、又は接触又は非接触通信用のデバイス等である。また、通信部926に接続されるネットワーク932は、有線又は無線により接続されたネットワークにより構成され、例えば、インターネット、家庭内LAN、赤外線通信、可視光通信、放送、又は衛星通信等である。但し、上記のLANは、Local Area Networkの略である。また、上記のWUSBは、Wireless USBの略である。そして、上記のADSLは、Asymmetric Digital Subscriber Lineの略である。
<9:まとめ>
最後に、本技術の実施形態に係る技術内容について簡単に纏める。ここで述べる技術内容は、例えば、PC、携帯電話、ゲーム機、情報端末、情報家電、カーナビゲーションシステム等、種々の情報処理装置に対して適用することができる。なお、以下で述べる情報処理装置の機能は、1台の情報処理装置を利用して実現することも可能であるし、複数台の情報処理装置を利用して実現することも可能である。また、以下で述べる情報処理装置が処理を実行する際に用いるデータ記憶手段及び演算処理手段は、当該情報処理装置に設けられたものであってもよいし、ネットワークを介して接続された機器に設けられたものであってもよい。
最後に、本技術の実施形態に係る技術内容について簡単に纏める。ここで述べる技術内容は、例えば、PC、携帯電話、ゲーム機、情報端末、情報家電、カーナビゲーションシステム等、種々の情報処理装置に対して適用することができる。なお、以下で述べる情報処理装置の機能は、1台の情報処理装置を利用して実現することも可能であるし、複数台の情報処理装置を利用して実現することも可能である。また、以下で述べる情報処理装置が処理を実行する際に用いるデータ記憶手段及び演算処理手段は、当該情報処理装置に設けられたものであってもよいし、ネットワークを介して接続された機器に設けられたものであってもよい。
上記の情報処理装置の機能構成は以下のように表現される。例えば、下記(1)に記載の情報処理装置は、多次多変数連立方程式の求解困難性に安全性の根拠を置く効率的な公開鍵認証方式又は電子署名方式のアルゴリズムを実行する機能を有する。
(1)
多次多変数多項式の組F=(f1,…,fm)を含む公開鍵を利用した公開鍵認証方式又は電子署名方式のアルゴリズムを実行するエンティティの間で共有されている情報から所定の関数を用いて生成された、前記多次多変数多項式の組Fを構成する各項の係数に利用する数を取得する数取得部と、
前記多次多変数多項式の組Fを構成要素に含む多次多変数多項式の係数のうち、変数の組み合わせの種類が同じ項の係数をグループ化しておき、前記数取得部が取得した数を、当該多次多変数の係数にグループ単位で割り当て、グループ単位で処理を実行して、変数の入力値について当該多次多変数多項式を計算する多項式計算部と、
を備え、
前記多項式計算部は、前記計算を実行する前に、グループ単位で処理を実行できるように前記変数の入力値をそれぞれ1つのグループに対応する係数の数と同じ数に拡張する、
情報処理装置。
多次多変数多項式の組F=(f1,…,fm)を含む公開鍵を利用した公開鍵認証方式又は電子署名方式のアルゴリズムを実行するエンティティの間で共有されている情報から所定の関数を用いて生成された、前記多次多変数多項式の組Fを構成する各項の係数に利用する数を取得する数取得部と、
前記多次多変数多項式の組Fを構成要素に含む多次多変数多項式の係数のうち、変数の組み合わせの種類が同じ項の係数をグループ化しておき、前記数取得部が取得した数を、当該多次多変数の係数にグループ単位で割り当て、グループ単位で処理を実行して、変数の入力値について当該多次多変数多項式を計算する多項式計算部と、
を備え、
前記多項式計算部は、前記計算を実行する前に、グループ単位で処理を実行できるように前記変数の入力値をそれぞれ1つのグループに対応する係数の数と同じ数に拡張する、
情報処理装置。
(2)
前記各グループに対応する種類の項に前記係数を割り当て、当該項の変数に任意の数を代入した値をテーブルとして保持するテーブル保持部をさらに備える、
上記(1)に記載の情報処理装置。
前記各グループに対応する種類の項に前記係数を割り当て、当該項の変数に任意の数を代入した値をテーブルとして保持するテーブル保持部をさらに備える、
上記(1)に記載の情報処理装置。
(3)
前記多項式計算部は、前記計算を実行する前に、前記テーブルから値を取得する際に用いるインデックスの計算を一部又は全部実行する、
上記(2)に記載の情報処理装置。
前記多項式計算部は、前記計算を実行する前に、前記テーブルから値を取得する際に用いるインデックスの計算を一部又は全部実行する、
上記(2)に記載の情報処理装置。
(4)
前記多項式計算部は、前記計算を実行する前に拡張した前記変数の入力値を、複数種類の前記多次多変数多項式を計算する際に共通して利用する、
上記(1)~(3)のいずれか1項に記載の情報処理装置。
前記多項式計算部は、前記計算を実行する前に拡張した前記変数の入力値を、複数種類の前記多次多変数多項式を計算する際に共通して利用する、
上記(1)~(3)のいずれか1項に記載の情報処理装置。
(5)
前記多項式計算部は、前記計算を実行する前に実行したインデックスの計算結果を、複数種類の前記多次多変数多項式を計算する際に共通して利用する、
上記(3)に記載の情報処理装置。
前記多項式計算部は、前記計算を実行する前に実行したインデックスの計算結果を、複数種類の前記多次多変数多項式を計算する際に共通して利用する、
上記(3)に記載の情報処理装置。
(6)
前記多項式計算部は、少なくとも1つの変数の入力値が0の項について計算処理をスキップする、
上記(1)~(5)のいずれか1項に記載の情報処理装置。
前記多項式計算部は、少なくとも1つの変数の入力値が0の項について計算処理をスキップする、
上記(1)~(5)のいずれか1項に記載の情報処理装置。
(7)
前記変数の入力値は、全ての入力値の中で0となる入力値の割合が所定の範囲内となるように生成された値である、
上記(6)に記載の情報処理装置。
前記変数の入力値は、全ての入力値の中で0となる入力値の割合が所定の範囲内となるように生成された値である、
上記(6)に記載の情報処理装置。
(8)
前記変数の入力値は、乱数生成器を利用して生成される値であり、全ての入力値の中で0となる入力値の割合が所定の範囲内とならない場合に、当該乱数生成器を利用して生成しなおされる、
上記(7)に記載の情報処理装置。
前記変数の入力値は、乱数生成器を利用して生成される値であり、全ての入力値の中で0となる入力値の割合が所定の範囲内とならない場合に、当該乱数生成器を利用して生成しなおされる、
上記(7)に記載の情報処理装置。
(9)
前記変数の入力値は、互いに異なる第1又は第2のビット値で表現され、全ての入力値の中で前記第1のビット値をとる入力値の数と前記第2のビット値をとる入力値の数とが略等しい、
上記(6)に記載の情報処理装置。
前記変数の入力値は、互いに異なる第1又は第2のビット値で表現され、全ての入力値の中で前記第1のビット値をとる入力値の数と前記第2のビット値をとる入力値の数とが略等しい、
上記(6)に記載の情報処理装置。
(10)
前記情報は、乱数のシードであり、
前記所定の関数は、前記シードを利用して乱数を生成する乱数生成器である、
上記(1)~(9)のいずれか1項に記載の情報処理装置。
前記情報は、乱数のシードであり、
前記所定の関数は、前記シードを利用して乱数を生成する乱数生成器である、
上記(1)~(9)のいずれか1項に記載の情報処理装置。
(11)
環K上で定義される多次多変数多項式の組F=(f1,…,fm)、及びベクトルs∈Knに基づいてメッセージを生成するメッセージ生成部と、
前記多次多変数多項式の組F及びベクトルy=(y1,…,ym)=(f1(s),…,fm(s))を保持する検証者に前記メッセージを提供するメッセージ提供部と、
k通り(k≧3)の検証パターンの中から前記検証者が選択した検証パターンに対応する回答情報を前記検証者に提供する回答提供部と、
を備え、
前記ベクトルsは秘密鍵であり、
前記多次多変数多項式の組F及び前記ベクトルyは公開鍵であり、
前記回答情報は、前記乱数の組及び前記メッセージの中から前記検証パターンに応じて選択される情報であり、
前記メッセージは、前記公開鍵及び前記回答情報を利用して、当該回答情報に対応する検証パターン用に予め用意された演算を実行することで得られる情報である、
上記(1)~(10)のいずれか1項に記載の情報処理装置。
環K上で定義される多次多変数多項式の組F=(f1,…,fm)、及びベクトルs∈Knに基づいてメッセージを生成するメッセージ生成部と、
前記多次多変数多項式の組F及びベクトルy=(y1,…,ym)=(f1(s),…,fm(s))を保持する検証者に前記メッセージを提供するメッセージ提供部と、
k通り(k≧3)の検証パターンの中から前記検証者が選択した検証パターンに対応する回答情報を前記検証者に提供する回答提供部と、
を備え、
前記ベクトルsは秘密鍵であり、
前記多次多変数多項式の組F及び前記ベクトルyは公開鍵であり、
前記回答情報は、前記乱数の組及び前記メッセージの中から前記検証パターンに応じて選択される情報であり、
前記メッセージは、前記公開鍵及び前記回答情報を利用して、当該回答情報に対応する検証パターン用に予め用意された演算を実行することで得られる情報である、
上記(1)~(10)のいずれか1項に記載の情報処理装置。
(12)
環K上で定義される多次多変数多項式の組F=(f1,…,fm)及びベクトルy=(y1,…,ym)=(f1(s),…,fm(s))を保持する情報保持部と、
前記多次多変数多項式の組F及びベクトルs∈Knに基づいて生成されたメッセージを取得するメッセージ取得部と、
前記メッセージを提供した証明者に対し、k通り(k≧3)の検証パターンの中からランダムに選択した1つの検証パターンの情報を提供するパターン情報提供部と、
前記選択した検証パターンに対応する回答情報を前記証明者から取得する回答取得部と、
前記メッセージ、前記多次多変数多項式の組F、前記ベクトルy、及び前記回答情報に基づいて前記証明者が前記ベクトルsを保持しているか否かを検証する検証部と、
を備え、
前記ベクトルsは秘密鍵であり、
前記多次多変数多項式の組F及び前記ベクトルyは公開鍵であり、
前記メッセージは、前記公開鍵及び前記回答情報を利用して、当該回答情報に対応する検証パターン用に予め用意された演算を実行することで得られる情報である、
上記(1)~(10)のいずれか1項に記載の情報処理装置。
環K上で定義される多次多変数多項式の組F=(f1,…,fm)及びベクトルy=(y1,…,ym)=(f1(s),…,fm(s))を保持する情報保持部と、
前記多次多変数多項式の組F及びベクトルs∈Knに基づいて生成されたメッセージを取得するメッセージ取得部と、
前記メッセージを提供した証明者に対し、k通り(k≧3)の検証パターンの中からランダムに選択した1つの検証パターンの情報を提供するパターン情報提供部と、
前記選択した検証パターンに対応する回答情報を前記証明者から取得する回答取得部と、
前記メッセージ、前記多次多変数多項式の組F、前記ベクトルy、及び前記回答情報に基づいて前記証明者が前記ベクトルsを保持しているか否かを検証する検証部と、
を備え、
前記ベクトルsは秘密鍵であり、
前記多次多変数多項式の組F及び前記ベクトルyは公開鍵であり、
前記メッセージは、前記公開鍵及び前記回答情報を利用して、当該回答情報に対応する検証パターン用に予め用意された演算を実行することで得られる情報である、
上記(1)~(10)のいずれか1項に記載の情報処理装置。
(13)
環K上で定義される多次多変数多項式の組F=(f1,…,fm)、及びベクトルs∈Knに基づいてメッセージを生成するメッセージ生成部と、
前記多次多変数多項式の組F及びベクトルy=(y1,…,ym)=(f1(s),…,fm(s))を保持する検証者に前記メッセージを提供するメッセージ提供部と、
前記検証者がランダムに選択した第1の情報及び前記メッセージを生成する際に得られる第2の情報を用いて第3の情報を生成する中間情報生成部と、
前記検証者に前記第3の情報を提供する中間情報提供部と、
k通り(k≧2)の検証パターンの中から前記検証者が選択した検証パターンに対応する回答情報を前記検証者に提供する回答提供部と、
を備え、
前記ベクトルsは秘密鍵であり、
前記多次多変数多項式の組F及び前記ベクトルyは公開鍵であり、
前記回答情報は、前記メッセージの中から前記検証パターンに応じて選択される情報であり、
前記メッセージは、前記公開鍵、前記第1の情報、前記第3の情報、前記回答情報を利用して、当該回答情報に対応する検証パターン用に予め用意された演算を実行することで得られる情報である、
上記(1)~(10)のいずれか1項に記載の情報処理装置。
環K上で定義される多次多変数多項式の組F=(f1,…,fm)、及びベクトルs∈Knに基づいてメッセージを生成するメッセージ生成部と、
前記多次多変数多項式の組F及びベクトルy=(y1,…,ym)=(f1(s),…,fm(s))を保持する検証者に前記メッセージを提供するメッセージ提供部と、
前記検証者がランダムに選択した第1の情報及び前記メッセージを生成する際に得られる第2の情報を用いて第3の情報を生成する中間情報生成部と、
前記検証者に前記第3の情報を提供する中間情報提供部と、
k通り(k≧2)の検証パターンの中から前記検証者が選択した検証パターンに対応する回答情報を前記検証者に提供する回答提供部と、
を備え、
前記ベクトルsは秘密鍵であり、
前記多次多変数多項式の組F及び前記ベクトルyは公開鍵であり、
前記回答情報は、前記メッセージの中から前記検証パターンに応じて選択される情報であり、
前記メッセージは、前記公開鍵、前記第1の情報、前記第3の情報、前記回答情報を利用して、当該回答情報に対応する検証パターン用に予め用意された演算を実行することで得られる情報である、
上記(1)~(10)のいずれか1項に記載の情報処理装置。
(14)
環K上で定義される多次多変数多項式の組F=(f1,…,fm)及びベクトルy=(y1,…,ym)=(f1(s),…,fm(s))を保持する情報保持部と、
前記多次多変数多項式の組F及びベクトルs∈Knに基づいて生成されたメッセージを取得するメッセージ取得部と、
前記メッセージを提供した証明者に対し、ランダムに選択した第1の情報を提供する情報提供部と、
前記第1の情報及び前記メッセージを生成する際に得られる第2の情報を用いて前記証明者が生成した第3の情報を取得する中間情報取得部と、
k通り(k≧3)の検証パターンの中からランダムに選択した1つの検証パターンの情報を前記証明者に提供するパターン情報提供部と、
前記選択した検証パターンに対応する回答情報を前記証明者から取得する回答取得部と、
前記メッセージ、前記第1の情報、前記第3の情報、前記多次多変数多項式の組F、及び前記回答情報に基づいて前記証明者が前記ベクトルsを保持しているか否かを検証する検証部と、
を備え、
前記ベクトルsは秘密鍵であり、
前記多次多変数多項式の組F及び前記ベクトルyは公開鍵であり、
前記メッセージは、前記公開鍵、前記第1の情報、前記第3の情報、前記回答情報を利用して当該回答情報に対応する検証パターン用に予め用意された演算を実行することで得られる情報である、
上記(1)~(10)のいずれか1項に記載の情報処理装置。
環K上で定義される多次多変数多項式の組F=(f1,…,fm)及びベクトルy=(y1,…,ym)=(f1(s),…,fm(s))を保持する情報保持部と、
前記多次多変数多項式の組F及びベクトルs∈Knに基づいて生成されたメッセージを取得するメッセージ取得部と、
前記メッセージを提供した証明者に対し、ランダムに選択した第1の情報を提供する情報提供部と、
前記第1の情報及び前記メッセージを生成する際に得られる第2の情報を用いて前記証明者が生成した第3の情報を取得する中間情報取得部と、
k通り(k≧3)の検証パターンの中からランダムに選択した1つの検証パターンの情報を前記証明者に提供するパターン情報提供部と、
前記選択した検証パターンに対応する回答情報を前記証明者から取得する回答取得部と、
前記メッセージ、前記第1の情報、前記第3の情報、前記多次多変数多項式の組F、及び前記回答情報に基づいて前記証明者が前記ベクトルsを保持しているか否かを検証する検証部と、
を備え、
前記ベクトルsは秘密鍵であり、
前記多次多変数多項式の組F及び前記ベクトルyは公開鍵であり、
前記メッセージは、前記公開鍵、前記第1の情報、前記第3の情報、前記回答情報を利用して当該回答情報に対応する検証パターン用に予め用意された演算を実行することで得られる情報である、
上記(1)~(10)のいずれか1項に記載の情報処理装置。
(15)
前記アルゴリズムが複数回繰り返し実行される場合において、前記数取得部は1回だけ生成された前記数を取得し、前記多項式計算部は1回だけ前記割り当て処理を実行し、
前記アルゴリズムは、前記割当部が割り当てた係数を繰り返し利用する、
上記(1)~(10)のいずれか1項に記載の情報処理装置。
前記アルゴリズムが複数回繰り返し実行される場合において、前記数取得部は1回だけ生成された前記数を取得し、前記多項式計算部は1回だけ前記割り当て処理を実行し、
前記アルゴリズムは、前記割当部が割り当てた係数を繰り返し利用する、
上記(1)~(10)のいずれか1項に記載の情報処理装置。
(16)
環K上で定義される多次多変数多項式の組F=(f1,…,fm)、及び署名鍵s∈Knを用いて文書Mに対する電子署名を生成する署名生成部と、
前記多次多変数多項式の組F及びベクトルy=(f1(s),…,fm(s))を保持する検証者へと前記電子署名を提供する署名提供部と、
を備える、
上記(1)~(10)のいずれか1項に記載の情報処理装置。
環K上で定義される多次多変数多項式の組F=(f1,…,fm)、及び署名鍵s∈Knを用いて文書Mに対する電子署名を生成する署名生成部と、
前記多次多変数多項式の組F及びベクトルy=(f1(s),…,fm(s))を保持する検証者へと前記電子署名を提供する署名提供部と、
を備える、
上記(1)~(10)のいずれか1項に記載の情報処理装置。
(17)
多次多変数多項式の組F=(f1,…,fm)を含む公開鍵を利用した公開鍵認証方式又は電子署名方式のアルゴリズムを実行するエンティティの間で共有されている情報から所定の関数を用いて生成された、前記多次多変数多項式の組Fを構成する各項の係数に利用する数を取得することと、
前記多次多変数多項式の組Fを構成要素に含む多次多変数多項式の係数のうち、変数の組み合わせの種類が同じ項の係数をグループ化しておき、取得した数を、当該多次多変数の係数にグループ単位で割り当て、グループ単位で処理を実行して、変数の入力値について当該多次多変数多項式を計算することと、
を含み、
前記計算することでは、前記計算を実行する前に、グループ単位で処理を実行できるように前記変数の入力値をそれぞれ1つのグループに対応する係数の数と同じ数に拡張する、
情報処理方法。
多次多変数多項式の組F=(f1,…,fm)を含む公開鍵を利用した公開鍵認証方式又は電子署名方式のアルゴリズムを実行するエンティティの間で共有されている情報から所定の関数を用いて生成された、前記多次多変数多項式の組Fを構成する各項の係数に利用する数を取得することと、
前記多次多変数多項式の組Fを構成要素に含む多次多変数多項式の係数のうち、変数の組み合わせの種類が同じ項の係数をグループ化しておき、取得した数を、当該多次多変数の係数にグループ単位で割り当て、グループ単位で処理を実行して、変数の入力値について当該多次多変数多項式を計算することと、
を含み、
前記計算することでは、前記計算を実行する前に、グループ単位で処理を実行できるように前記変数の入力値をそれぞれ1つのグループに対応する係数の数と同じ数に拡張する、
情報処理方法。
(18)
多次多変数多項式の組F=(f1,…,fm)を含む公開鍵を利用した公開鍵認証方式又は電子署名方式のアルゴリズムを実行するエンティティの間で共有されている情報から所定の関数を用いて生成された、前記多次多変数多項式の組Fを構成する各項の係数に利用する数を取得する数取得機能と、
前記多次多変数多項式の組Fを構成要素に含む多次多変数多項式の係数のうち、変数の組み合わせの種類が同じ項の係数をグループ化しておき、前記数取得機能で取得した数を、当該多次多変数の係数にグループ単位で割り当て、グループ単位で処理を実行して、変数の入力値について当該多次多変数多項式を計算する多項式計算機能と、
をコンピュータに実現させるためのプログラムであり、
前記多項式計算機能は、前記計算を実行する前に、グループ単位で処理を実行できるように前記変数の入力値をそれぞれ1つのグループに対応する係数の数と同じ数に拡張する、
プログラム。
多次多変数多項式の組F=(f1,…,fm)を含む公開鍵を利用した公開鍵認証方式又は電子署名方式のアルゴリズムを実行するエンティティの間で共有されている情報から所定の関数を用いて生成された、前記多次多変数多項式の組Fを構成する各項の係数に利用する数を取得する数取得機能と、
前記多次多変数多項式の組Fを構成要素に含む多次多変数多項式の係数のうち、変数の組み合わせの種類が同じ項の係数をグループ化しておき、前記数取得機能で取得した数を、当該多次多変数の係数にグループ単位で割り当て、グループ単位で処理を実行して、変数の入力値について当該多次多変数多項式を計算する多項式計算機能と、
をコンピュータに実現させるためのプログラムであり、
前記多項式計算機能は、前記計算を実行する前に、グループ単位で処理を実行できるように前記変数の入力値をそれぞれ1つのグループに対応する係数の数と同じ数に拡張する、
プログラム。
(19)
上記の(18)に記載のプログラムが記録された、コンピュータにより読み取り可能な記録媒体。
上記の(18)に記載のプログラムが記録された、コンピュータにより読み取り可能な記録媒体。
(備考)
上記の証明者アルゴリズムP、検証者アルゴリズムV、署名生成アルゴリズムSig、署名検証アルゴリズムVerは、数生成部、多項式計算部、テーブル保持部の一例である。上記の証明者アルゴリズムPは、メッセージ生成部、メッセージ提供部、回答提供部、中間情報生成部、中間情報提供部の一例である。また、上記の検証者アルゴリズムVは、情報保持部、メッセージ取得部、パターン情報提供部、回答取得部、検証部、中間情報取得部の一例である。
上記の証明者アルゴリズムP、検証者アルゴリズムV、署名生成アルゴリズムSig、署名検証アルゴリズムVerは、数生成部、多項式計算部、テーブル保持部の一例である。上記の証明者アルゴリズムPは、メッセージ生成部、メッセージ提供部、回答提供部、中間情報生成部、中間情報提供部の一例である。また、上記の検証者アルゴリズムVは、情報保持部、メッセージ取得部、パターン情報提供部、回答取得部、検証部、中間情報取得部の一例である。
以上、添付図面を参照しながら本技術の好適な実施形態について説明したが、本技術は係る例に限定されないことは言うまでもない。当業者であれば、特許請求の範囲に記載された範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、それらについても当然に本技術の技術的範囲に属するものと了解される。
上記の説明において、ハッシュ関数Hを用いるアルゴリズムを紹介したが、ハッシュ関数Hの代わりにコミットメント関数COMを用いてもよい。コミットメント関数COMは、文字列S及び乱数ρを引数にとる関数である。コミットメント関数の例としては、Shai HaleviとSilvio Micaliによって国際会議CRYPTO1996で発表された方式などがある。
Gen 鍵生成アルゴリズム
P 証明者アルゴリズム
V 検証者アルゴリズム
Sig 署名生成アルゴリズム
Ver 署名検証アルゴリズム
P 証明者アルゴリズム
V 検証者アルゴリズム
Sig 署名生成アルゴリズム
Ver 署名検証アルゴリズム
Claims (18)
- 多次多変数多項式の組F=(f1,…,fm)を含む公開鍵を利用した公開鍵認証方式又は電子署名方式のアルゴリズムを実行するエンティティの間で共有されている情報から所定の関数を用いて生成された、前記多次多変数多項式の組Fを構成する各項の係数に利用する数を取得する数取得部と、
前記多次多変数多項式の組Fを構成要素に含む多次多変数多項式の係数のうち、変数の組み合わせの種類が同じ項の係数をグループ化しておき、前記数取得部が取得した数を、当該多次多変数の係数にグループ単位で割り当て、グループ単位で処理を実行して、変数の入力値について当該多次多変数多項式を計算する多項式計算部と、
を備え、
前記多項式計算部は、前記計算を実行する前に、グループ単位で処理を実行できるように前記変数の入力値をそれぞれ1つのグループに対応する係数の数と同じ数に拡張する、
情報処理装置。 - 前記各グループに対応する種類の項に前記係数を割り当て、当該項の変数に任意の数を代入した値をテーブルとして保持するテーブル保持部をさらに備える、
請求項1に記載の情報処理装置。 - 前記多項式計算部は、前記計算を実行する前に、前記テーブルから値を取得する際に用いるインデックスの計算を一部又は全部実行する、
請求項2に記載の情報処理装置。 - 前記多項式計算部は、前記計算を実行する前に拡張した前記変数の入力値を、複数種類の前記多次多変数多項式を計算する際に共通して利用する、
請求項1に記載の情報処理装置。 - 前記多項式計算部は、前記計算を実行する前に実行したインデックスの計算結果を、複数種類の前記多次多変数多項式を計算する際に共通して利用する、
請求項3に記載の情報処理装置。 - 前記多項式計算部は、少なくとも1つの変数の入力値が0の項について計算処理をスキップする、
請求項1に記載の情報処理装置。 - 前記変数の入力値は、全ての入力値の中で0となる入力値の割合が所定の範囲内となるように生成された値である、
請求項6に記載の情報処理装置。 - 前記変数の入力値は、乱数生成器を利用して生成される値であり、全ての入力値の中で0となる入力値の割合が所定の範囲内とならない場合に、当該乱数生成器を利用して生成しなおされる、
請求項7に記載の情報処理装置。 - 前記変数の入力値は、互いに異なる第1又は第2のビット値で表現され、全ての入力値の中で前記第1のビット値をとる入力値の数と前記第2のビット値をとる入力値の数とが略等しい、
請求項6に記載の情報処理装置。 - 前記情報は、乱数のシードであり、
前記所定の関数は、前記シードを利用して乱数を生成する乱数生成器である、
請求項1に記載の情報処理装置。 - 環K上で定義される多次多変数多項式の組F=(f1,…,fm)、及びベクトルs∈Knに基づいてメッセージを生成するメッセージ生成部と、
前記多次多変数多項式の組F及びベクトルy=(y1,…,ym)=(f1(s),…,fm(s))を保持する検証者に前記メッセージを提供するメッセージ提供部と、
k通り(k≧3)の検証パターンの中から前記検証者が選択した検証パターンに対応する回答情報を前記検証者に提供する回答提供部と、
を備え、
前記ベクトルsは秘密鍵であり、
前記多次多変数多項式の組F及び前記ベクトルyは公開鍵であり、
前記回答情報は、前記乱数の組及び前記メッセージの中から前記検証パターンに応じて選択される情報であり、
前記メッセージは、前記公開鍵及び前記回答情報を利用して、当該回答情報に対応する検証パターン用に予め用意された演算を実行することで得られる情報である、
請求項1に記載の情報処理装置。 - 環K上で定義される多次多変数多項式の組F=(f1,…,fm)及びベクトルy=(y1,…,ym)=(f1(s),…,fm(s))を保持する情報保持部と、
前記多次多変数多項式の組F及びベクトルs∈Knに基づいて生成されたメッセージを取得するメッセージ取得部と、
前記メッセージを提供した証明者に対し、k通り(k≧3)の検証パターンの中からランダムに選択した1つの検証パターンの情報を提供するパターン情報提供部と、
前記選択した検証パターンに対応する回答情報を前記証明者から取得する回答取得部と、
前記メッセージ、前記多次多変数多項式の組F、前記ベクトルy、及び前記回答情報に基づいて前記証明者が前記ベクトルsを保持しているか否かを検証する検証部と、
を備え、
前記ベクトルsは秘密鍵であり、
前記多次多変数多項式の組F及び前記ベクトルyは公開鍵であり、
前記メッセージは、前記公開鍵及び前記回答情報を利用して、当該回答情報に対応する検証パターン用に予め用意された演算を実行することで得られる情報である、
請求項1に記載の情報処理装置。 - 環K上で定義される多次多変数多項式の組F=(f1,…,fm)、及びベクトルs∈Knに基づいてメッセージを生成するメッセージ生成部と、
前記多次多変数多項式の組F及びベクトルy=(y1,…,ym)=(f1(s),…,fm(s))を保持する検証者に前記メッセージを提供するメッセージ提供部と、
前記検証者がランダムに選択した第1の情報及び前記メッセージを生成する際に得られる第2の情報を用いて第3の情報を生成する中間情報生成部と、
前記検証者に前記第3の情報を提供する中間情報提供部と、
k通り(k≧2)の検証パターンの中から前記検証者が選択した検証パターンに対応する回答情報を前記検証者に提供する回答提供部と、
を備え、
前記ベクトルsは秘密鍵であり、
前記多次多変数多項式の組F及び前記ベクトルyは公開鍵であり、
前記回答情報は、前記メッセージの中から前記検証パターンに応じて選択される情報であり、
前記メッセージは、前記公開鍵、前記第1の情報、前記第3の情報、前記回答情報を利用して、当該回答情報に対応する検証パターン用に予め用意された演算を実行することで得られる情報である、
請求項1に記載の情報処理装置。 - 環K上で定義される多次多変数多項式の組F=(f1,…,fm)及びベクトルy=(y1,…,ym)=(f1(s),…,fm(s))を保持する情報保持部と、
前記多次多変数多項式の組F及びベクトルs∈Knに基づいて生成されたメッセージを取得するメッセージ取得部と、
前記メッセージを提供した証明者に対し、ランダムに選択した第1の情報を提供する情報提供部と、
前記第1の情報及び前記メッセージを生成する際に得られる第2の情報を用いて前記証明者が生成した第3の情報を取得する中間情報取得部と、
k通り(k≧3)の検証パターンの中からランダムに選択した1つの検証パターンの情報を前記証明者に提供するパターン情報提供部と、
前記選択した検証パターンに対応する回答情報を前記証明者から取得する回答取得部と、
前記メッセージ、前記第1の情報、前記第3の情報、前記多次多変数多項式の組F、及び前記回答情報に基づいて前記証明者が前記ベクトルsを保持しているか否かを検証する検証部と、
を備え、
前記ベクトルsは秘密鍵であり、
前記多次多変数多項式の組F及び前記ベクトルyは公開鍵であり、
前記メッセージは、前記公開鍵、前記第1の情報、前記第3の情報、前記回答情報を利用して当該回答情報に対応する検証パターン用に予め用意された演算を実行することで得られる情報である、
請求項1に記載の情報処理装置。 - アルゴリズムが複数回繰り返し実行される場合において、前記数取得部は1回だけ生成された前記数を取得し、前記多項式計算部は1回だけ前記割り当て処理を実行し、
前記アルゴリズムは、前記割当部が割り当てた係数を繰り返し利用する、
請求項1に記載の情報処理装置。 - 環K上で定義される多次多変数多項式の組F=(f1,…,fm)、及び署名鍵s∈Knを用いて文書Mに対する電子署名を生成する署名生成部と、
前記多次多変数多項式の組F及びベクトルy=(f1(s),…,fm(s))を保持する検証者へと前記電子署名を提供する署名提供部と、
を備える、
請求項1に記載の情報処理装置。 - 多次多変数多項式の組F=(f1,…,fm)を含む公開鍵を利用した公開鍵認証方式又は電子署名方式のアルゴリズムを実行するエンティティの間で共有されている情報から所定の関数を用いて生成された、前記多次多変数多項式の組Fを構成する各項の係数に利用する数を取得することと、
前記多次多変数多項式の組Fを構成要素に含む多次多変数多項式の係数のうち、変数の組み合わせの種類が同じ項の係数をグループ化しておき、取得した数を、当該多次多変数の係数にグループ単位で割り当て、グループ単位で処理を実行して、変数の入力値について当該多次多変数多項式を計算することと、
を含み、
前記計算することでは、前記計算を実行する前に、グループ単位で処理を実行できるように前記変数の入力値をそれぞれ1つのグループに対応する係数の数と同じ数に拡張する、
情報処理方法。 - 多次多変数多項式の組F=(f1,…,fm)を含む公開鍵を利用した公開鍵認証方式又は電子署名方式のアルゴリズムを実行するエンティティの間で共有されている情報から所定の関数を用いて生成された、前記多次多変数多項式の組Fを構成する各項の係数に利用する数を取得する数取得機能と、
前記多次多変数多項式の組Fを構成要素に含む多次多変数多項式の係数のうち、変数の組み合わせの種類が同じ項の係数をグループ化しておき、前記数取得機能で取得した数を、当該多次多変数の係数にグループ単位で割り当て、グループ単位で処理を実行して、変数の入力値について当該多次多変数多項式を計算する多項式計算機能と、
をコンピュータに実現させるためのプログラムであり、
前記多項式計算機能は、前記計算を実行する前に、グループ単位で処理を実行できるように前記変数の入力値をそれぞれ1つのグループに対応する係数の数と同じ数に拡張する、
プログラム。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP13755205.5A EP2822218A1 (en) | 2012-03-02 | 2013-02-14 | Information processing device, information processing method, and program |
US14/370,817 US20140380062A1 (en) | 2012-03-02 | 2013-02-14 | Information processing apparatus, image processing method, and program |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012-046686 | 2012-03-02 | ||
JP2012046686 | 2012-03-02 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2013129119A1 true WO2013129119A1 (ja) | 2013-09-06 |
Family
ID=49082321
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/JP2013/053491 WO2013129119A1 (ja) | 2012-03-02 | 2013-02-14 | 情報処理装置、情報処理方法、及びプログラム |
Country Status (3)
Country | Link |
---|---|
US (1) | US20140380062A1 (ja) |
EP (1) | EP2822218A1 (ja) |
WO (1) | WO2013129119A1 (ja) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103490897B (zh) * | 2013-09-17 | 2017-04-05 | 华南理工大学 | 一种多变量公钥签名/验证系统及签名/验证方法 |
US11290273B2 (en) * | 2015-03-30 | 2022-03-29 | Jintai Ding | Multivariate digital signature schemes based on HFEv- and new applications of multivariate digital signature schemes for white-box encryption |
US10484186B2 (en) * | 2016-09-30 | 2019-11-19 | Intel Corporation | Cascading multivariate quadratic identification schemes for chain of trust |
WO2020226695A1 (en) * | 2019-05-09 | 2020-11-12 | Google Llc | Compression and oblivious expansion of rlwe ciphertexts |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2005124537A1 (ja) * | 2004-06-18 | 2005-12-29 | Fujitsu Limited | 乱数生成装置,生成方法,生成器評価方法、および乱数使用方法 |
-
2013
- 2013-02-14 US US14/370,817 patent/US20140380062A1/en not_active Abandoned
- 2013-02-14 WO PCT/JP2013/053491 patent/WO2013129119A1/ja active Application Filing
- 2013-02-14 EP EP13755205.5A patent/EP2822218A1/en not_active Withdrawn
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2005124537A1 (ja) * | 2004-06-18 | 2005-12-29 | Fujitsu Limited | 乱数生成装置,生成方法,生成器評価方法、および乱数使用方法 |
Non-Patent Citations (7)
Title |
---|
COME BERBAIN ET AL.: "Efficient Implementations of Multivariate Quadratic Systems", SELECTED AREAS IN CRYPTOGRAPHY 13TH INTERNATIONAL WORKSHOP, vol. 4356, 17 August 2007 (2007-08-17), MONTREAL, CANADA, pages 174 - 187, XP019098542 * |
JACQUES PATARIN: "Asymmetric Cryptography with a Hidden Monomial", CRYPTO, 1996, pages 45 - 60, XP019194414 |
KOICHI SAKUMOTO ET AL.: "Public-Key Identification Schemes Based on Multivariate Quadratic Polynomials", ADVANCES IN CRYPTOLOGY- CRYPTO 2011 31ST ANNUAL CRYPTOLOGY CONFERENCE, vol. 6841, 6 August 2011 (2011-08-06), SANTA BARBARA, CA, USA, pages 706 - 723, XP047004391 * |
KOICHI SAKUMOTO; TAIZO SHIRAI; HARUNAGA HIWATARI: "Public-Key Identification Schemes Based on Multivariate Quadratic Polynomials", CRYPTO 2011, 2011, pages 706 - 723, XP047309805, DOI: doi:10.1007/978-3-642-22792-9_40 |
PATARIN, J.; COURTOIS, N.; GOUBIN, L.: "Topics in Cryptology", vol. 2020, April 2001, SPRINGER-VERLAG., article "QUARTZ, 128-Bit Long Digital Signatures", pages: 282 - 297 |
SHAI HALEVI; SILVIO MICALI, INTERNATIONAL CONFERENCE CRYPTO, 1996 |
TSUGIO NAKAMURA ET AL.: "Pasokon de Jisshu shinagara Manaberu Ango no Shikumi to Jisso", KABUSHIKI KAISHA NIPPON RIKO SHUPPANKAI, 30 June 2009 (2009-06-30), pages 208 - 212, XP008174533 * |
Also Published As
Publication number | Publication date |
---|---|
US20140380062A1 (en) | 2014-12-25 |
EP2822218A1 (en) | 2015-01-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5790319B2 (ja) | 署名検証装置、署名検証方法、プログラム、及び記録媒体 | |
JP6069852B2 (ja) | 情報処理装置、情報処理方法、及びプログラム | |
JP5736816B2 (ja) | 認証装置、認証方法、プログラム、及び署名生成装置 | |
JP5593850B2 (ja) | 認証装置、認証方法、プログラム、及び署名生成装置 | |
JP5790318B2 (ja) | 情報処理装置、署名生成装置、情報処理方法、署名生成方法、及びプログラム | |
EP2744147B1 (en) | Information processing device, information processing method, program, and recording medium | |
WO2013129084A1 (ja) | 情報処理装置、情報処理方法、及びプログラム | |
JP5790287B2 (ja) | 情報処理装置、情報処理方法、プログラム、及び記録媒体 | |
WO2013129119A1 (ja) | 情報処理装置、情報処理方法、及びプログラム | |
WO2013024697A1 (ja) | 情報処理装置、署名提供方法、署名検証方法、プログラム、及び記録媒体 | |
JP5790286B2 (ja) | 情報処理装置、署名生成装置、情報処理方法、署名生成方法、及びプログラム | |
WO2013031420A1 (ja) | 情報処理装置、署名生成装置、署名検証装置、情報処理方法、署名生成方法、及び署名検証方法 | |
JP5790290B2 (ja) | 情報処理装置、情報処理方法、プログラム、及びプログラムを記録したコンピュータ読み取り可能な記録媒体 | |
WO2013031413A1 (ja) | 情報処理装置、情報処理方法、プログラム、及び記録媒体 | |
EP2743902B1 (en) | Information processing device and information processing method |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 13755205 Country of ref document: EP Kind code of ref document: A1 |
|
WWE | Wipo information: entry into national phase |
Ref document number: 14370817 Country of ref document: US |
|
WWE | Wipo information: entry into national phase |
Ref document number: 2013755205 Country of ref document: EP |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
NENP | Non-entry into the national phase |
Ref country code: JP |