JP2005072650A - 被検証装置、検証装置、被検証方法及び検証方法 - Google Patents
被検証装置、検証装置、被検証方法及び検証方法 Download PDFInfo
- Publication number
- JP2005072650A JP2005072650A JP2003208486A JP2003208486A JP2005072650A JP 2005072650 A JP2005072650 A JP 2005072650A JP 2003208486 A JP2003208486 A JP 2003208486A JP 2003208486 A JP2003208486 A JP 2003208486A JP 2005072650 A JP2005072650 A JP 2005072650A
- Authority
- JP
- Japan
- Prior art keywords
- message
- random number
- verified
- verification
- redundant information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Error Detection And Correction (AREA)
Abstract
【課題】全てのPSPACEクラス及びNPクラスの問題が適用可能なメッセージ認証方式を実現する。
【解決手段】被検証装置は、秘密情報Tから Z=T2 mod n なるZ、nを安全な方法で届ける(S1)。被検証装置は、送信するメッセージから前方誤り訂正符号を用いて乱数Riを生成し、Xi=Ri2mod n を計算してXiを送る(S2)。検証装置は、0又は1をランダムに選び、選んだbiを送る(S3)。被検証装置は、bi=0のときYi(=Ri)を、bi=1のときYi(=TRi mod n)を送る(S4)。そして、検証装置は、bi=0のときXi=Yi2 mod n が成立するか否かを、bi=1のときZXi=Yi2mod n が成立するか否かを検査する(S5)。検証装置は、bi=0に対する回答情報Yi(=Ri)に前方誤り訂正符号を適用して受信メッセージを復元する。この送受信には、被検証装置の正当性の検証が伴っているため、メッセージ認証の機能を果たす。
【選択図】 図1
【解決手段】被検証装置は、秘密情報Tから Z=T2 mod n なるZ、nを安全な方法で届ける(S1)。被検証装置は、送信するメッセージから前方誤り訂正符号を用いて乱数Riを生成し、Xi=Ri2mod n を計算してXiを送る(S2)。検証装置は、0又は1をランダムに選び、選んだbiを送る(S3)。被検証装置は、bi=0のときYi(=Ri)を、bi=1のときYi(=TRi mod n)を送る(S4)。そして、検証装置は、bi=0のときXi=Yi2 mod n が成立するか否かを、bi=1のときZXi=Yi2mod n が成立するか否かを検査する(S5)。検証装置は、bi=0に対する回答情報Yi(=Ri)に前方誤り訂正符号を適用して受信メッセージを復元する。この送受信には、被検証装置の正当性の検証が伴っているため、メッセージ認証の機能を果たす。
【選択図】 図1
Description
【0001】
【発明の属する技術分野】
本発明は、一方向性関数を用いた対話証明を行う被検証装置及び検証装置、これらの各々にて行われる被検証方法及び検証方法に関する。
【0002】
【従来の技術】
2者間の通信でメッセージを改竄されることなく届ける(改竄された場合はそれを検知できる)方式として、ハッシュ関数を使う方法と電子署名がある。通信する2者(通信端末Aと通信端末Bとする)が、あらかじめ秘密の共有鍵を共有していれば、鍵付きハッシュ関数(HMAC−SHA1、HMAC−MD5)等でメッセージダイジェストを生成して添付することにより、改竄を検知できる。この方法は、通信端末Aと通信端末Bがあらかじめ秘密を共有していなければできない。
【0003】
通信端末Aと通信端末Bが秘密を共有していない場合は、公開鍵、秘密鍵を用いて電子署名する。通信端末Aが通信端末Bに電子署名してメッセージを送信する場合、まず通信端末Aは自分の公開鍵を公開する。通信端末Bは通信端末Aの公開鍵を取得する。次に通信端末Aは通信端末Bに送信するメッセージを自分の秘密鍵を用いて電子署名を作成し、これを添付して通信端末Bに送信する。通信端末Bは通信端末Aから送られてきたメッセージと電子署名を通信端末Aの公開鍵を用いて検証でき、メッセージが改竄されていないかを確認できる。
【0004】
この公開鍵、秘密鍵を用いて電子署名するアルゴリズムの多くは、現状では数論の素因数分解問題及び離散対数問題に基づいている(下記の特許文献1、2参照)。前者は大きな整数の素因数分解は計算量的に困難であるという特性に基づいており、RSA署名等がある。後者は、mod p による剰余体(pは素数)での離散対数の計算が計算量的に困難であるという特性に基づいており、Elgamal署名やDSA署名等がある。
【特許文献1】
特開2002−207426号公報
【特許文献2】
特開2002−135242号公報
【0005】
【発明が解決しようとする課題】
現状では、素因数分解問題や離散対数問題は高速に解くための解法が研究されており、秘密鍵が解読されないためには、1024ビットの公開鍵が必要と言われている。また、楕円曲線上の離散対数問題では、160ビットで安全と言われている。
【0006】
しかしながら、これらの問題が今後も安全という保証は無く、鍵長を長くしてもすぐに解けてしまう解法が見つかるかもしれない。即ち、素因数分解問題及び離散対数問題以外の問題も含む広い範囲の問題に適用可能で、電子署名と同等の効果を持つメッセージ送受信方式が待望されていた。
【0007】
本発明は、上記課題を解決するために成されたものであり、送信側と受信側の間に介在する第三者による情報の改竄を防止することを目的とする。
【0008】
【課題を解決するための手段】
本願発明者は、素因数分解問題及び離散対数問題以外の問題でも実現でき、電子署名と同等の効果を持つメッセージ送受信に関する発明をした。本発明は、一方向性関数を利用した対話証明方式を応用し、通信する2者間でメッセージを改竄されることなく送受信できる方式である。一方向性関数を利用した対話証明方式は、一方向性関数が存在するすべてのPSPACE問題をベースにして実現できることが証明されている(文献「Shamir, A., *IP=PSPACE* Proc. of FOCS, pp.11−15, 1990」参照)。本発明は、この対話証明方式のフローの中でメッセージを送受信できる方式であり、素因数分解問題及び離散対数問題以外のPSPACE問題及びNP問題をベースにして電子署名と同等のメッセージ送受信を実現できることになる。
【0009】
以下、まず、一方向性関数を利用した対話証明の原理について説明し、その後、本発明の詳細を述べる。
【0010】
[一方向性関数を利用した対話証明の原理]
一方向性関数を利用した対話証明方式を用いることにより、ある秘密情報を持っている装置は、その秘密情報を漏らさずに「秘密情報を持っていること」を相手に認識させることができる。その原理としては、まず秘密情報を持っていることを証明する装置(被検証装置)は、ある演算を乱数に施して得た演算結果を検証装置に送る。次に検証装置は、0か1かを任意に選び(例えば、コイン投げをして表か裏かでもよい)、選んだ値を被検証装置に送る。被検証装置は、その値が0であれば乱数そのものを検証装置に送り、その値が1であれば乱数と秘密情報とを演算して得た演算結果を送る。そして、検証装置は、被検証装置から送信されたこれらの情報が公知の関係を満たしているかどうかを検証する。
【0011】
仮に、被検証装置が秘密情報を持っていないとすると、被検証装置はこの検証に50%の確率でしか合格できない。したがって、このような検証を多くの回数繰り返すことによって、被検証装置が秘密情報を持っているか否かを、限りなく100%に近い確率で検証することができる。ここでは、一例として、図1を用いて、平方剰余問題を用いた対話証明方式を説明する。
【0012】
ステップS1として、被検証装置は、秘密情報Tから Z=T2 mod n なるZ及びnを検証装置に安全な方法で届ける。ここで、n = pq(pとqは大きい素数)であるため、nを素因数分解するのは非常に難しい。
【0013】
ステップS2として、被検証装置は、乱数Rを選び、X=R2 mod n を計算し、得られたXを検証装置に送る。
【0014】
ステップS3として、検証装置は、bとして0又は1のうち何れかを二者択一的にランダムに選び、選んだbを被検証装置に送る。
【0015】
ステップS4として、被検証装置は、次のYを検証装置に送る。b = 0のとき、Y = Rであり、b = 1のとき、Y = TR mod n である。
【0016】
そして、ステップS5として、検証装置は、次式が成立するか否かを検査する。即ち、b = 0 のときは、X = Y2 mod n が成立するか。b = 1 のときは、ZX = Y2mod n が成立するか。
【0017】
以上のような対話証明方式では、被検証装置が本当に秘密情報Tを知っていたら、ステップS5での検証にはいつも合格する。上記のステップS2〜S5をk回繰り返せば、偽の被検証装置がだまし続けられる確率は、(1/2)kとなる。
【0018】
なお、ステップS2〜S5をk回繰り返すのを省略して、代わりに、ステップS2で乱数をk個(R1, R2,…Rk)生成し、X= R2 mod nで計算した結果(X1, X2,…Xk)を送る。次のステップS3で検証装置は、二者択一的にランダムに選んだk個の{0,1}の列(b1, b2,…bk)を被検証装置に送り、同様にステップS4で、被検証装置は回答の列(Y1, Y2,…Yk)を検証装置に送る。そして、検証装置は、回答の列(Y1, Y2,…Yk)を1つ1つ検査し、それら全てが正解であったときのみ、被検証装置が秘密情報を持っていることを認定する。以上のようにして、一方向性関数を利用して対話証明を適正に行うことができる。
【0019】
[本発明に関する請求の範囲]
以下、本発明に関する請求の範囲を述べる。
【0020】
前述した目的を達成するため、本発明に係る被検証装置は、請求項1に記載したように、送信メッセージの入力を受け付け、前記送信メッセージから冗長情報を、当該冗長情報から前記送信メッセージを生成できるよう設計された計算式に基づいて生成し、生成された冗長情報及び生成に利用された計算式を出力する冗長情報生成手段と、前記冗長情報生成手段により出力された冗長情報と計算式とを連結させる計算式連結手段と、前記計算式連結手段による連結で得られた計算式連結済み冗長情報を乱数として用いて、検証装置との間で一方向性関数を用いた対話証明を行う対話証明手段とを備え、前記対話証明手段は、対話証明において、乱数に対し一方向性関数の演算を行った演算結果を第1のメッセージとして送信し、検証装置から確率的な質問を受信し、受信された質問に応じて、乱数そのもの、又は、乱数と秘密情報から得られる値に対し一方向性関数の演算を行った演算結果を、第2のメッセージとして送信することを特徴とする。
【0021】
ここで、冗長情報生成手段は、請求項2に記載したように、前方誤り訂正符号を用いて冗長情報を生成する構成とすることが望ましく、前方誤り訂正符号を用いて生成された冗長情報が付加されたメッセージの受信側での誤り訂正を可能とし、メッセージ再送を不要とすることができる。
【0022】
また、冗長情報生成手段は、請求項3に記載したように、送信メッセージに乱数ビットを付加し、付加後のメッセージから、前方誤り訂正符号を用いて前記冗長情報を生成する構成とすることが望ましく、送信メッセージに乱数ビットを付加することで悪意の第三者によるリプレイアタックを防止することができる。
【0023】
更に、上記の被検証装置では、請求項4に記載したように、前方誤り訂正符号としてリードソロモン符号が用いられ、冗長データと当該冗長データの生成に利用された累乗数とを連結したものが乱数として対話証明に用いられる構成とすることが望ましく、処理時間を短縮化し、大量の前方誤り訂正符号を高速に送受信することができる。
【0024】
前述した目的を達成するため、本発明に係る検証装置は、請求項5に記載したように、冗長情報と当該冗長情報から送信メッセージを生成できるよう設計された計算式とが連結された計算式連結済み冗長情報を、乱数として用いる被検証装置、との間で一方向性関数を用いた対話証明を行う対話証明手段と、送信メッセージを生成するメッセージ生成手段とを備え、前記対話証明手段は、対話証明において、乱数に対し一方向性関数の演算を行った演算結果を第1のメッセージとして受信し、被検証装置へ確率的な質問を送信して、当該質問に応じた回答として、乱数そのもの、又は、乱数と秘密情報から得られる値に対し一方向性関数の演算を行った演算結果を、第2のメッセージとして受信し、送信した質問、第1のメッセージ及び第2のメッセージに基づいて被検証装置の証明を行い、被検証装置の正当性が証明された場合、質問に応じた回答のうち乱数そのものを出力し、前記メッセージ生成手段は、出力された乱数に含まれている冗長情報及び計算式に基づいて送信メッセージを生成することを特徴とする。
【0025】
ここで、メッセージ生成手段は、請求項6に記載したように、前方誤り訂正符号を用いて検証済みのメッセージから受信メッセージを生成する構成とすることが望ましく、前方誤り訂正符号により誤り訂正を可能とし、メッセージ再送を不要とすることができる。
【0026】
また、上記の検証装置では、請求項7に記載したように、前方誤り訂正符号としてリードソロモン符号が用いられる構成とすることが望ましく、処理時間を短縮化し、大量の前方誤り訂正符号を高速に送受信することができる。
【0027】
ところで、上記の被検証装置に関する請求項は、以下のように被検証方法に関する請求項として、記述することができる。即ち、本発明に係る被検証方法は、請求項8に記載したように、検証装置との間で一方向性関数を用いた対話証明を行う被検証装置における被検証方法であって、送信メッセージの入力を受け付け、前記送信メッセージから冗長情報を、当該冗長情報から前記送信メッセージを生成できるよう設計された計算式に基づいて生成し、生成された冗長情報及び生成に利用された計算式とを連結させ、連結で得られた計算式連結済み冗長情報を乱数として用い、当該乱数に対し一方向性関数の演算を行った演算結果を第1のメッセージとして送信し、検証装置から確率的な質問を受信し、受信された質問に応じて、乱数そのもの、又は、乱数と秘密情報から得られる値に対し一方向性関数の演算を行った演算結果を、第2のメッセージとして送信することを特徴とする。
【0028】
また、上記の検証装置に関する請求項は、以下のように検証方法に関する請求項として、記述することができる。即ち、本発明に係る検証方法は、請求項9に記載したように、冗長情報と当該冗長情報から送信メッセージを生成できるよう設計された計算式とが連結された計算式連結済み冗長情報を、乱数として用いる被検証装置、との間で一方向性関数を用いた対話証明を行う検証装置における検証方法であって、乱数に対し一方向性関数の演算を行った演算結果を第1のメッセージとして被検証装置から受信し、被検証装置へ確率的な質問を送信し、当該質問に応じた回答として、乱数そのもの、又は、乱数と秘密情報から得られる値に対し一方向性関数の演算を行った演算結果を、第2のメッセージとして受信し、送信した質問、第1のメッセージ及び第2のメッセージに基づいて被検証装置の証明を行い、被検証装置の正当性が証明された場合、質問に応じた回答のうち乱数そのものを出力し、出力された乱数に含まれている冗長情報及び計算式に基づいて送信メッセージを生成することを特徴とする。
【0029】
[本発明によるメッセージ送受信の説明]
本発明は、一方向性関数を用いた対話証明方式の乱数(R1, R2,…Rk)の選び方を工夫することにより、任意のビット列を通信相手に改竄されることなく届けられる方式である。改竄された場合には改竄されたことを検知できる。以降、通信端末Aと通信端末Bが通信をする場合として話を進める。
【0030】
本発明は、まず、通信端末Aが2つの素数pとqを選び、n = pqとなる nを生成する。次に秘密情報Tから、Z=T2 mod n になるZを算出し、Zとnを公開する。通信端末Bは通信端末AのZとnを取得する。
【0031】
次に、秘密情報Tを持っている通信端末Aは、通信端末Bに送信したいメッセージMをm個の同じサイズのデータに等分割し、m個の分割データから前方誤り訂正符号を用いてk個の冗長データを生成する(k > m)。このk個の冗長情報を(r1, r2,… rk)とし、riを計算するために用いた計算式をそれぞれ(f1, f2,… fk)とする。そしてそれぞれの(ri, fi)のペアを乱数(R1, R2,…Rk)とし、X= R2mod nで計算した結果(X1, X2,…Xk)を通信端末Bに送信する。
【0032】
メッセージMを等分割できない場合は、等分割できるようにメッセージMを乱数でパディングする。このパディングの中にはメッセージMのサイズを特定できる値も入れておく。
【0033】
次に、通信端末Bは、二者択一的にランダムに選んだk個の{0,1}の列(b1, b2,…bk)を通信端末Aに送る。通信端末Aは、通信端末Bからの{0,1}の列(b1, b2,…bk)に従って、以下の回答(Y1, Y2,…Yk)を通信端末Bに送る。
【0034】
bi= 0 のとき Yi = Ri
bi = 1 のとき Yi = TRi mod n
【0035】
通信端末Bは、通信端末Aから送られてきた(Y1, Y2,…Yk)が次式を満たすかどうかを検査する。
【0036】
bi= 0 のとき Xi = Yi 2 mod n
bi = 1 のとき ZXi = Yi 2 mod n
【0037】
通信端末Bは、i が1〜k において、すべて上式を満たしたときのみ、通信端末Aと確実に通信していると決定する。
【0038】
通信端末Bは、通信端末Aと確実に通信していると決定した後、bi = 0 のときに送られてきたRi を用いて、通信端末Aが上記説明でm個に分割したメッセージMを、前方誤り訂正符号を用いて復号する。
【0039】
以上の手順により、通信端末Aは、任意のメッセージを、改竄されることなく通信端末Bに届けることができる。もし、上記の手順での何れかの通信におけるメッセージが改竄された場合、直ちに通信端末Bの検査結果より異常が検知される。また、通信端末B及び通信経路で通信内容を全て盗聴した通信端末であっても、通信端末Aの秘密情報Tを計算することはできない。
【0040】
【発明の実施の形態】
以下、本発明に関する実施形態について説明する。ここでは、平方剰余問題に基づいた一方向性関数による対話証明方式を用い、前方誤り訂正符号としてリードソロモン(Reed−Solomon)符号を用い、被検証装置(通信端末A)が検証装置(通信端末B)に8192ビットのメッセージを送信する場合を説明する。
【0041】
[装置構成]
まず、被検証装置及び検証装置の構成について説明する。
【0042】
図4には、被検証装置401の機能ブロック構成を示す。この図4に示すように、被検証装置401は、送信したいメッセージである送信メッセージ405を入力とし、当該送信メッセージから冗長情報406を計算式(当該冗長情報406から送信メッセージを復元できるよう設計された計算式)407に基づいて生成し、冗長情報406と計算式407を出力する冗長情報生成手段402と、冗長情報406と上記生成に利用した計算式407とを連結させる計算式連結手段403と、連結で得られた計算式連結済み冗長情報408を入力とし、入力された計算式連結済み冗長情報408を乱数として用いて、図5の検証装置501と対話証明を行う対話証明手段404とで構成される。このうち対話証明手段404は、乱数からX (X=R2 mod n)を生成し第1のメッセージ409としてを出力する。また、対話証明手段404は、検証装置501からの確率的な質問(0か1か)である第2のメッセージ410が入力されると、その質問に対する回答を生成し、生成された回答を第3のメッセージ411として出力する。
【0043】
図5には、検証装置501の機能ブロック構成を示す。この図5に示すように、検証装置501は、図4の被検証装置401と対話証明を行う際に検証済みの第3のメッセージ507を出力する対話証明手段502と、検証済みの第3のメッセージ507が入力されると、当該第3のメッセージ507に含まれている冗長情報と計算式とに基づいてメッセージを生成し(即ち、図4の送信メッセージ405を復元し)、生成されたメッセージを受信メッセージ508として出力するメッセージ生成手段503とで構成される。
【0044】
[処理内容]
以下、本実施形態の処理として、平方剰余問題に基づいた一方向性関数による対話証明方式を用い、前方誤り訂正符号としてリードソロモン(Reed−Solomon)符号を用いて、被検証装置(通信端末A)が検証装置(通信端末B)に8192ビットのメッセージを送信する処理を図6、図7、図2、図3に基づいて説明する。なお、図6は被検証装置(通信端末A)における処理を、図7は検証装置(通信端末B)における処理をそれぞれ示し、図2は乱数の生成処理を示し、図3はメッセージ送受信手順を示している。
【0045】
まず、通信端末Aは2つの素数p、qを選択するとともに、1024ビットの秘密情報Tをランダムに生成する(図6のS601)。そして、通信端末Aは、n = pqとなる1024ビットのnを生成し、秘密情報Tから、Z=T2mod n なる1024ビットのZを算出し、Zとnを公開する(図6のS602)。なお、S601及びS602の処理の動作主体については通信端末Aに限定されるものではなく、通信端末A、B以外の管理センターがS601及びS602の処理を行い、素数p、q及び秘密情報Tを通信端末Aへ安全な方法で通知してもよい。
【0046】
一方の通信端末Bは、通信端末Aが公開したZとnを取得する(図7のS701)。なお、S701〜S711の処理は対話証明手段502により実行される。
【0047】
次に、通信端末Aは、冗長情報生成手段402及び計算式連結手段403によって、以下のようにして、通信端末Bに送信したい8192ビットのメッセージMから計算式連結済み冗長情報を生成する(図6のS603)。即ち、通信端末Aは、図3に示すように、通信端末Bに送信したい8192ビットのメッセージMを512ビットのデータ16個に分割し(図3のS301)、分割された16個のデータからGF(216)で計算するリードソロモン符号(前方誤り訂正符号)を用いて32個の冗長データ(r1, r2,… r32)を生成する(S302)。なお、32個の冗長データ(r1, r2,… r32)を計算するためのGF(216)の累乗数はそれぞれ、0〜216−1の間でランダムに選択される。ここでは、GF(216)で計算するリードソロモン符号は16ビットごとに計算するため、512ビットのriを計算するために、32のブロックに分けて計算する。それぞれのブロックを計算する累乗数は16ビットで表現できるため、32のブロックの累乗数の組は512ビットで表現でき、これをそれぞれの(r1, r2,… r32)に対して(f1, f2,… f32)とする。そして、通信端末Aは、(ri, fi)のペアをそれぞれ(R1, R2,… R32)とする(S303)。このとき、Riは512ビット のri と512ビットのfi のペアなので1024ビットになる。このようにして計算式連結済み冗長情報が生成される。
【0048】
なお、図2には、Nビットのメッセージを送信する場合の乱数(R1, R2,… Rk)の生成処理を示す。ここで、図2の乱数生成処理を概説する。
【0049】
Nビットの送信メッセージが入力されると(図2のS201)、メッセージが(512ビットの整数倍+448ビット)になるように乱数ビットがパディングされる(S202)。そして、Nを表す64ビットがパディングの後ろに付加される(S203)。これにより、メッセージは512ビットの整数倍になる(ここでは、512ビットのm倍とする)。
【0050】
次に、メッセージは、m個の512ビットデータに分割される(S204)。なお、分割された512ビットデータを、D(1),D(2),…D(m)とする。そして、それぞれの512ビットデータは32個の16ビットブロックに分割される(S205)。なお、512ビットデータD(1)を分割して得られた16ビットブロックをB(1,1),B(1,2),…B(1,32)とし、512ビットデータD(m)を分割して得られた16ビットブロックをB(m,1),B(m,2),…B(m,32)とする。
【0051】
次に、カウンタiが0にリセットされ(S206)、以後、カウンタiが2mに等しくなるまで、後述のS208〜S215の処理が繰り返される。
【0052】
S208では、512ビットの空データが生成され(S208)、0〜65535の中での乱数が32個生成される(S209)。なお、生成された乱数をf(i,1),f(i,2),… f(i,32)とする。そして、カウンタjが1にリセットされ(S210)、以後、カウンタjが32を超えるまで、B(1,j),B(2,j),…B(m,j)と累乗数f(i,j)を用いてリードソロモン符号化を行い冗長データr(i,j)を生成する処理(S212)とカウンタjを1つカウントアップする処理(S213)とが繰り返される。
【0053】
カウンタjが32を超えると、S211〜S213のループを抜け、S214にて、冗長データr(i,1),r(i,2),… r(i,32)と乱数f(i,1),f(i,2),… f(i,32)とが連結され、1024ビットのデータRiとして出力される。その後、カウンタiが1つカウントアップされてS207へ戻る。
【0054】
その後、カウンタiが2mに等しくなるまで、後述のS208〜S215の処理が繰り返される。その結果、冗長データr(i,1),r(i,2),… r(i,32)と乱数f(i,1),f(i,2),… f(i,32)とが連結された1024ビットのデータRiが(R1,R2,…R32)の32個出力されることとなる。
【0055】
以上のようにして乱数(R1,R2,…R32)が生成され、出力される。
【0056】
図6、図7へ戻って、次に、通信端末Aは、(R1,R2,…R32)から、X= R mod nで計算した結果(X1,X2,…X32)を第1のメッセージとして通信端末Bに送信する(S604)。なお、S604以降の処理は対話証明手段404により実行される。
【0057】
通信端末Bは、上記第1のメッセージを受信し(S702)、確率的な質問として32個の{0,1}のうち0が16個以上になるようにランダムに選んだ32個の{0,1}の列(b1,b2,…b32)を通信端末Aに送信する(S703)。通信端末Aは、通信端末Bからの32個の{0,1}の列(b1,b2,…b32)を受信する(S605)。
【0058】
次に、通信端末Aは、通信端末Bからの{0,1}の列(b1,b2,…b32)に従って、以下の回答(Y1,Y2,…Y32)を通信端末Bに送る(図3のS304)。
【0059】
bi= 0 のとき Yi = Ri
bi = 1 のとき Yi = TRi mod n
【0060】
ここで、通信端末Aが回答Yを送信する手順を、図6のS606〜S611に沿って説明する。S606ではカウンタiが1にリセットされ、以後、カウンタiが最大数k(ここでは「32」)に等しくなるまで、後述のS608〜S611の処理が繰り返される。S608では、biが0であるか否かを判断し、biが0であればS609にてYi= RiとなるYiを通信端末Bに送信する。
【0061】
一方、biが0でなければ(1であれば)、S610にてYi= TRi mod nとなるYiを通信端末Bに送信する。その後、S611でカウンタiが1つカウントアップされてS607へ戻る。
【0062】
その後、カウンタiが最大数kを超えるまで、S608〜S611の処理が繰り返される。その結果、通信端末Aは、通信端末Bからの{0,1}の列(b1,b2,…b32)に応じた回答(Y1,Y2,…Y32)を通信端末Bに送信することとなる。
【0063】
図7に戻り、通信端末Bは、通信端末Aから送られてきた回答(Y1,Y2,…Y32)を受信し、受信した回答が次式を満たすかどうかを、図7のS705〜S710に沿って検査する。
【0064】
bi= 0 のとき Xi = Yi 2 mod n
bi = 1 のとき ZXi = Yi 2 mod n
【0065】
ここで、通信端末Bが回答Yを検査する手順を説明する。図7のS705ではカウンタiが1にリセットされ、以後、カウンタiが最大数k(ここでは「32」)に等しくなるまで、後述のS707〜S710の処理が繰り返される。S707では、biが0であるか否かを判断し、biが0であればS708にてXi= Yi 2 mod nが成立するか否かを判断する。もし、不成立ならば、検証結果が異常であるとして処理を終了する。Xi= Yi 2 mod nが成立するならば、S710へ進む。
【0066】
一方、S707にてbiが0でなければ(1であれば)、S709にてZXi = Yi 2mod nが成立するか否かを判断する。もし、不成立ならば、検証結果が異常であるとして処理を終了する。ZXi = Yi 2mod nが成立するならば、S710へ進む。
【0067】
S710ではカウンタiが1つカウントアップされてS706へ戻る。その後、カウンタiが最大数kを超えるまで、S707〜S710の処理が繰り返される。その結果、通信端末Bは、通信端末Aから送られてきた回答(Y1,Y2,…Y32)が上記の式を満たすかどうかを1つずつ検査することとなる。但し、通信端末Bは、i が1〜32 において、すべて上式を満たしたときのみ、通信端末Aとの通信を継続し、ひとつでも上式を満たさないと判断されたら、その時点で通信を中止する(予め通信を中止する正解率の閾値を定めておき、設定以上の正解率が得られる場合には通信を継続するようにしても良い)。
【0068】
全ての検証結果が正常である場合、通信端末Bは、図7のS711にて、biが0の場合の回答Yiを出力する。
【0069】
そして、通信端末Bは、メッセージ生成手段503により、以下のようにして前方誤り訂正符号を用いてメッセージMを生成(復元)する(S712、図3のS305)。即ち、通信端末Bは、bi = 0のときのYi(Ri)の16個をそれぞれriとfi とに分割し、リードソロモン符号でri を fi の累乗数で復号処理をして、8192ビットのメッセージを復元する。
【0070】
リードソロモン符号は、32個の冗長情報のうちどの16個を利用しても元々のメッセージを復元できるが、累乗数をランダムに選んでいるため偶然他の冗長データと同じ累乗数を選んでしまった冗長データは復元処理には使えなくなる。この場合は、17個目のbi= 0のYi(Ri)が必要になる。
【0071】
以上説明した一連の処理により、対話証明の検証に合格した際に復元された8192ビットのメッセージは、改竄されていないメッセージであり、平方剰余問題においても電子署名と同等のメッセージ送受信が実現したことになる。
【0072】
【発明の効果】
以上説明したように、本発明によれば、一方向性関数を利用した対話証明方式を応用してメッセージを改竄されることなく通信相手に届けることができる。この方式は、一方向性関数が存在する全てのPSPACE問題及びNP問題をベースにして実現でき、素因数分解問題や離散対数問題の高速な解法が発見されたとしても、他のPSPACE問題及びNP問題で電子署名と同等のことができる。また、楕円曲線上の離散対数問題よりも短い鍵長で同等の難しさのPSPACE問題及びNP問題があれば、公開鍵長の短い電子署名を実現できる。
【図面の簡単な説明】
【図1】一方向性関数を利用した対話証明方式のシーケンス図である。
【図2】乱数の生成処理を示す流れ図である。
【図3】メッセージ送受信手順を説明するための図である。
【図4】被検証装置の機能ブロック図である。
【図5】検証装置の機能ブロック図である。
【図6】被検証装置における処理を示す流れ図である。
【図7】検証装置における処理を示す流れ図である。
【符号の説明】
401…被検証装置、402…冗長情報生成手段、403…計算式連結手段、404…対話証明手段、501…検証装置、502…対話証明手段、503…メッセージ生成手段。
【発明の属する技術分野】
本発明は、一方向性関数を用いた対話証明を行う被検証装置及び検証装置、これらの各々にて行われる被検証方法及び検証方法に関する。
【0002】
【従来の技術】
2者間の通信でメッセージを改竄されることなく届ける(改竄された場合はそれを検知できる)方式として、ハッシュ関数を使う方法と電子署名がある。通信する2者(通信端末Aと通信端末Bとする)が、あらかじめ秘密の共有鍵を共有していれば、鍵付きハッシュ関数(HMAC−SHA1、HMAC−MD5)等でメッセージダイジェストを生成して添付することにより、改竄を検知できる。この方法は、通信端末Aと通信端末Bがあらかじめ秘密を共有していなければできない。
【0003】
通信端末Aと通信端末Bが秘密を共有していない場合は、公開鍵、秘密鍵を用いて電子署名する。通信端末Aが通信端末Bに電子署名してメッセージを送信する場合、まず通信端末Aは自分の公開鍵を公開する。通信端末Bは通信端末Aの公開鍵を取得する。次に通信端末Aは通信端末Bに送信するメッセージを自分の秘密鍵を用いて電子署名を作成し、これを添付して通信端末Bに送信する。通信端末Bは通信端末Aから送られてきたメッセージと電子署名を通信端末Aの公開鍵を用いて検証でき、メッセージが改竄されていないかを確認できる。
【0004】
この公開鍵、秘密鍵を用いて電子署名するアルゴリズムの多くは、現状では数論の素因数分解問題及び離散対数問題に基づいている(下記の特許文献1、2参照)。前者は大きな整数の素因数分解は計算量的に困難であるという特性に基づいており、RSA署名等がある。後者は、mod p による剰余体(pは素数)での離散対数の計算が計算量的に困難であるという特性に基づいており、Elgamal署名やDSA署名等がある。
【特許文献1】
特開2002−207426号公報
【特許文献2】
特開2002−135242号公報
【0005】
【発明が解決しようとする課題】
現状では、素因数分解問題や離散対数問題は高速に解くための解法が研究されており、秘密鍵が解読されないためには、1024ビットの公開鍵が必要と言われている。また、楕円曲線上の離散対数問題では、160ビットで安全と言われている。
【0006】
しかしながら、これらの問題が今後も安全という保証は無く、鍵長を長くしてもすぐに解けてしまう解法が見つかるかもしれない。即ち、素因数分解問題及び離散対数問題以外の問題も含む広い範囲の問題に適用可能で、電子署名と同等の効果を持つメッセージ送受信方式が待望されていた。
【0007】
本発明は、上記課題を解決するために成されたものであり、送信側と受信側の間に介在する第三者による情報の改竄を防止することを目的とする。
【0008】
【課題を解決するための手段】
本願発明者は、素因数分解問題及び離散対数問題以外の問題でも実現でき、電子署名と同等の効果を持つメッセージ送受信に関する発明をした。本発明は、一方向性関数を利用した対話証明方式を応用し、通信する2者間でメッセージを改竄されることなく送受信できる方式である。一方向性関数を利用した対話証明方式は、一方向性関数が存在するすべてのPSPACE問題をベースにして実現できることが証明されている(文献「Shamir, A., *IP=PSPACE* Proc. of FOCS, pp.11−15, 1990」参照)。本発明は、この対話証明方式のフローの中でメッセージを送受信できる方式であり、素因数分解問題及び離散対数問題以外のPSPACE問題及びNP問題をベースにして電子署名と同等のメッセージ送受信を実現できることになる。
【0009】
以下、まず、一方向性関数を利用した対話証明の原理について説明し、その後、本発明の詳細を述べる。
【0010】
[一方向性関数を利用した対話証明の原理]
一方向性関数を利用した対話証明方式を用いることにより、ある秘密情報を持っている装置は、その秘密情報を漏らさずに「秘密情報を持っていること」を相手に認識させることができる。その原理としては、まず秘密情報を持っていることを証明する装置(被検証装置)は、ある演算を乱数に施して得た演算結果を検証装置に送る。次に検証装置は、0か1かを任意に選び(例えば、コイン投げをして表か裏かでもよい)、選んだ値を被検証装置に送る。被検証装置は、その値が0であれば乱数そのものを検証装置に送り、その値が1であれば乱数と秘密情報とを演算して得た演算結果を送る。そして、検証装置は、被検証装置から送信されたこれらの情報が公知の関係を満たしているかどうかを検証する。
【0011】
仮に、被検証装置が秘密情報を持っていないとすると、被検証装置はこの検証に50%の確率でしか合格できない。したがって、このような検証を多くの回数繰り返すことによって、被検証装置が秘密情報を持っているか否かを、限りなく100%に近い確率で検証することができる。ここでは、一例として、図1を用いて、平方剰余問題を用いた対話証明方式を説明する。
【0012】
ステップS1として、被検証装置は、秘密情報Tから Z=T2 mod n なるZ及びnを検証装置に安全な方法で届ける。ここで、n = pq(pとqは大きい素数)であるため、nを素因数分解するのは非常に難しい。
【0013】
ステップS2として、被検証装置は、乱数Rを選び、X=R2 mod n を計算し、得られたXを検証装置に送る。
【0014】
ステップS3として、検証装置は、bとして0又は1のうち何れかを二者択一的にランダムに選び、選んだbを被検証装置に送る。
【0015】
ステップS4として、被検証装置は、次のYを検証装置に送る。b = 0のとき、Y = Rであり、b = 1のとき、Y = TR mod n である。
【0016】
そして、ステップS5として、検証装置は、次式が成立するか否かを検査する。即ち、b = 0 のときは、X = Y2 mod n が成立するか。b = 1 のときは、ZX = Y2mod n が成立するか。
【0017】
以上のような対話証明方式では、被検証装置が本当に秘密情報Tを知っていたら、ステップS5での検証にはいつも合格する。上記のステップS2〜S5をk回繰り返せば、偽の被検証装置がだまし続けられる確率は、(1/2)kとなる。
【0018】
なお、ステップS2〜S5をk回繰り返すのを省略して、代わりに、ステップS2で乱数をk個(R1, R2,…Rk)生成し、X= R2 mod nで計算した結果(X1, X2,…Xk)を送る。次のステップS3で検証装置は、二者択一的にランダムに選んだk個の{0,1}の列(b1, b2,…bk)を被検証装置に送り、同様にステップS4で、被検証装置は回答の列(Y1, Y2,…Yk)を検証装置に送る。そして、検証装置は、回答の列(Y1, Y2,…Yk)を1つ1つ検査し、それら全てが正解であったときのみ、被検証装置が秘密情報を持っていることを認定する。以上のようにして、一方向性関数を利用して対話証明を適正に行うことができる。
【0019】
[本発明に関する請求の範囲]
以下、本発明に関する請求の範囲を述べる。
【0020】
前述した目的を達成するため、本発明に係る被検証装置は、請求項1に記載したように、送信メッセージの入力を受け付け、前記送信メッセージから冗長情報を、当該冗長情報から前記送信メッセージを生成できるよう設計された計算式に基づいて生成し、生成された冗長情報及び生成に利用された計算式を出力する冗長情報生成手段と、前記冗長情報生成手段により出力された冗長情報と計算式とを連結させる計算式連結手段と、前記計算式連結手段による連結で得られた計算式連結済み冗長情報を乱数として用いて、検証装置との間で一方向性関数を用いた対話証明を行う対話証明手段とを備え、前記対話証明手段は、対話証明において、乱数に対し一方向性関数の演算を行った演算結果を第1のメッセージとして送信し、検証装置から確率的な質問を受信し、受信された質問に応じて、乱数そのもの、又は、乱数と秘密情報から得られる値に対し一方向性関数の演算を行った演算結果を、第2のメッセージとして送信することを特徴とする。
【0021】
ここで、冗長情報生成手段は、請求項2に記載したように、前方誤り訂正符号を用いて冗長情報を生成する構成とすることが望ましく、前方誤り訂正符号を用いて生成された冗長情報が付加されたメッセージの受信側での誤り訂正を可能とし、メッセージ再送を不要とすることができる。
【0022】
また、冗長情報生成手段は、請求項3に記載したように、送信メッセージに乱数ビットを付加し、付加後のメッセージから、前方誤り訂正符号を用いて前記冗長情報を生成する構成とすることが望ましく、送信メッセージに乱数ビットを付加することで悪意の第三者によるリプレイアタックを防止することができる。
【0023】
更に、上記の被検証装置では、請求項4に記載したように、前方誤り訂正符号としてリードソロモン符号が用いられ、冗長データと当該冗長データの生成に利用された累乗数とを連結したものが乱数として対話証明に用いられる構成とすることが望ましく、処理時間を短縮化し、大量の前方誤り訂正符号を高速に送受信することができる。
【0024】
前述した目的を達成するため、本発明に係る検証装置は、請求項5に記載したように、冗長情報と当該冗長情報から送信メッセージを生成できるよう設計された計算式とが連結された計算式連結済み冗長情報を、乱数として用いる被検証装置、との間で一方向性関数を用いた対話証明を行う対話証明手段と、送信メッセージを生成するメッセージ生成手段とを備え、前記対話証明手段は、対話証明において、乱数に対し一方向性関数の演算を行った演算結果を第1のメッセージとして受信し、被検証装置へ確率的な質問を送信して、当該質問に応じた回答として、乱数そのもの、又は、乱数と秘密情報から得られる値に対し一方向性関数の演算を行った演算結果を、第2のメッセージとして受信し、送信した質問、第1のメッセージ及び第2のメッセージに基づいて被検証装置の証明を行い、被検証装置の正当性が証明された場合、質問に応じた回答のうち乱数そのものを出力し、前記メッセージ生成手段は、出力された乱数に含まれている冗長情報及び計算式に基づいて送信メッセージを生成することを特徴とする。
【0025】
ここで、メッセージ生成手段は、請求項6に記載したように、前方誤り訂正符号を用いて検証済みのメッセージから受信メッセージを生成する構成とすることが望ましく、前方誤り訂正符号により誤り訂正を可能とし、メッセージ再送を不要とすることができる。
【0026】
また、上記の検証装置では、請求項7に記載したように、前方誤り訂正符号としてリードソロモン符号が用いられる構成とすることが望ましく、処理時間を短縮化し、大量の前方誤り訂正符号を高速に送受信することができる。
【0027】
ところで、上記の被検証装置に関する請求項は、以下のように被検証方法に関する請求項として、記述することができる。即ち、本発明に係る被検証方法は、請求項8に記載したように、検証装置との間で一方向性関数を用いた対話証明を行う被検証装置における被検証方法であって、送信メッセージの入力を受け付け、前記送信メッセージから冗長情報を、当該冗長情報から前記送信メッセージを生成できるよう設計された計算式に基づいて生成し、生成された冗長情報及び生成に利用された計算式とを連結させ、連結で得られた計算式連結済み冗長情報を乱数として用い、当該乱数に対し一方向性関数の演算を行った演算結果を第1のメッセージとして送信し、検証装置から確率的な質問を受信し、受信された質問に応じて、乱数そのもの、又は、乱数と秘密情報から得られる値に対し一方向性関数の演算を行った演算結果を、第2のメッセージとして送信することを特徴とする。
【0028】
また、上記の検証装置に関する請求項は、以下のように検証方法に関する請求項として、記述することができる。即ち、本発明に係る検証方法は、請求項9に記載したように、冗長情報と当該冗長情報から送信メッセージを生成できるよう設計された計算式とが連結された計算式連結済み冗長情報を、乱数として用いる被検証装置、との間で一方向性関数を用いた対話証明を行う検証装置における検証方法であって、乱数に対し一方向性関数の演算を行った演算結果を第1のメッセージとして被検証装置から受信し、被検証装置へ確率的な質問を送信し、当該質問に応じた回答として、乱数そのもの、又は、乱数と秘密情報から得られる値に対し一方向性関数の演算を行った演算結果を、第2のメッセージとして受信し、送信した質問、第1のメッセージ及び第2のメッセージに基づいて被検証装置の証明を行い、被検証装置の正当性が証明された場合、質問に応じた回答のうち乱数そのものを出力し、出力された乱数に含まれている冗長情報及び計算式に基づいて送信メッセージを生成することを特徴とする。
【0029】
[本発明によるメッセージ送受信の説明]
本発明は、一方向性関数を用いた対話証明方式の乱数(R1, R2,…Rk)の選び方を工夫することにより、任意のビット列を通信相手に改竄されることなく届けられる方式である。改竄された場合には改竄されたことを検知できる。以降、通信端末Aと通信端末Bが通信をする場合として話を進める。
【0030】
本発明は、まず、通信端末Aが2つの素数pとqを選び、n = pqとなる nを生成する。次に秘密情報Tから、Z=T2 mod n になるZを算出し、Zとnを公開する。通信端末Bは通信端末AのZとnを取得する。
【0031】
次に、秘密情報Tを持っている通信端末Aは、通信端末Bに送信したいメッセージMをm個の同じサイズのデータに等分割し、m個の分割データから前方誤り訂正符号を用いてk個の冗長データを生成する(k > m)。このk個の冗長情報を(r1, r2,… rk)とし、riを計算するために用いた計算式をそれぞれ(f1, f2,… fk)とする。そしてそれぞれの(ri, fi)のペアを乱数(R1, R2,…Rk)とし、X= R2mod nで計算した結果(X1, X2,…Xk)を通信端末Bに送信する。
【0032】
メッセージMを等分割できない場合は、等分割できるようにメッセージMを乱数でパディングする。このパディングの中にはメッセージMのサイズを特定できる値も入れておく。
【0033】
次に、通信端末Bは、二者択一的にランダムに選んだk個の{0,1}の列(b1, b2,…bk)を通信端末Aに送る。通信端末Aは、通信端末Bからの{0,1}の列(b1, b2,…bk)に従って、以下の回答(Y1, Y2,…Yk)を通信端末Bに送る。
【0034】
bi= 0 のとき Yi = Ri
bi = 1 のとき Yi = TRi mod n
【0035】
通信端末Bは、通信端末Aから送られてきた(Y1, Y2,…Yk)が次式を満たすかどうかを検査する。
【0036】
bi= 0 のとき Xi = Yi 2 mod n
bi = 1 のとき ZXi = Yi 2 mod n
【0037】
通信端末Bは、i が1〜k において、すべて上式を満たしたときのみ、通信端末Aと確実に通信していると決定する。
【0038】
通信端末Bは、通信端末Aと確実に通信していると決定した後、bi = 0 のときに送られてきたRi を用いて、通信端末Aが上記説明でm個に分割したメッセージMを、前方誤り訂正符号を用いて復号する。
【0039】
以上の手順により、通信端末Aは、任意のメッセージを、改竄されることなく通信端末Bに届けることができる。もし、上記の手順での何れかの通信におけるメッセージが改竄された場合、直ちに通信端末Bの検査結果より異常が検知される。また、通信端末B及び通信経路で通信内容を全て盗聴した通信端末であっても、通信端末Aの秘密情報Tを計算することはできない。
【0040】
【発明の実施の形態】
以下、本発明に関する実施形態について説明する。ここでは、平方剰余問題に基づいた一方向性関数による対話証明方式を用い、前方誤り訂正符号としてリードソロモン(Reed−Solomon)符号を用い、被検証装置(通信端末A)が検証装置(通信端末B)に8192ビットのメッセージを送信する場合を説明する。
【0041】
[装置構成]
まず、被検証装置及び検証装置の構成について説明する。
【0042】
図4には、被検証装置401の機能ブロック構成を示す。この図4に示すように、被検証装置401は、送信したいメッセージである送信メッセージ405を入力とし、当該送信メッセージから冗長情報406を計算式(当該冗長情報406から送信メッセージを復元できるよう設計された計算式)407に基づいて生成し、冗長情報406と計算式407を出力する冗長情報生成手段402と、冗長情報406と上記生成に利用した計算式407とを連結させる計算式連結手段403と、連結で得られた計算式連結済み冗長情報408を入力とし、入力された計算式連結済み冗長情報408を乱数として用いて、図5の検証装置501と対話証明を行う対話証明手段404とで構成される。このうち対話証明手段404は、乱数からX (X=R2 mod n)を生成し第1のメッセージ409としてを出力する。また、対話証明手段404は、検証装置501からの確率的な質問(0か1か)である第2のメッセージ410が入力されると、その質問に対する回答を生成し、生成された回答を第3のメッセージ411として出力する。
【0043】
図5には、検証装置501の機能ブロック構成を示す。この図5に示すように、検証装置501は、図4の被検証装置401と対話証明を行う際に検証済みの第3のメッセージ507を出力する対話証明手段502と、検証済みの第3のメッセージ507が入力されると、当該第3のメッセージ507に含まれている冗長情報と計算式とに基づいてメッセージを生成し(即ち、図4の送信メッセージ405を復元し)、生成されたメッセージを受信メッセージ508として出力するメッセージ生成手段503とで構成される。
【0044】
[処理内容]
以下、本実施形態の処理として、平方剰余問題に基づいた一方向性関数による対話証明方式を用い、前方誤り訂正符号としてリードソロモン(Reed−Solomon)符号を用いて、被検証装置(通信端末A)が検証装置(通信端末B)に8192ビットのメッセージを送信する処理を図6、図7、図2、図3に基づいて説明する。なお、図6は被検証装置(通信端末A)における処理を、図7は検証装置(通信端末B)における処理をそれぞれ示し、図2は乱数の生成処理を示し、図3はメッセージ送受信手順を示している。
【0045】
まず、通信端末Aは2つの素数p、qを選択するとともに、1024ビットの秘密情報Tをランダムに生成する(図6のS601)。そして、通信端末Aは、n = pqとなる1024ビットのnを生成し、秘密情報Tから、Z=T2mod n なる1024ビットのZを算出し、Zとnを公開する(図6のS602)。なお、S601及びS602の処理の動作主体については通信端末Aに限定されるものではなく、通信端末A、B以外の管理センターがS601及びS602の処理を行い、素数p、q及び秘密情報Tを通信端末Aへ安全な方法で通知してもよい。
【0046】
一方の通信端末Bは、通信端末Aが公開したZとnを取得する(図7のS701)。なお、S701〜S711の処理は対話証明手段502により実行される。
【0047】
次に、通信端末Aは、冗長情報生成手段402及び計算式連結手段403によって、以下のようにして、通信端末Bに送信したい8192ビットのメッセージMから計算式連結済み冗長情報を生成する(図6のS603)。即ち、通信端末Aは、図3に示すように、通信端末Bに送信したい8192ビットのメッセージMを512ビットのデータ16個に分割し(図3のS301)、分割された16個のデータからGF(216)で計算するリードソロモン符号(前方誤り訂正符号)を用いて32個の冗長データ(r1, r2,… r32)を生成する(S302)。なお、32個の冗長データ(r1, r2,… r32)を計算するためのGF(216)の累乗数はそれぞれ、0〜216−1の間でランダムに選択される。ここでは、GF(216)で計算するリードソロモン符号は16ビットごとに計算するため、512ビットのriを計算するために、32のブロックに分けて計算する。それぞれのブロックを計算する累乗数は16ビットで表現できるため、32のブロックの累乗数の組は512ビットで表現でき、これをそれぞれの(r1, r2,… r32)に対して(f1, f2,… f32)とする。そして、通信端末Aは、(ri, fi)のペアをそれぞれ(R1, R2,… R32)とする(S303)。このとき、Riは512ビット のri と512ビットのfi のペアなので1024ビットになる。このようにして計算式連結済み冗長情報が生成される。
【0048】
なお、図2には、Nビットのメッセージを送信する場合の乱数(R1, R2,… Rk)の生成処理を示す。ここで、図2の乱数生成処理を概説する。
【0049】
Nビットの送信メッセージが入力されると(図2のS201)、メッセージが(512ビットの整数倍+448ビット)になるように乱数ビットがパディングされる(S202)。そして、Nを表す64ビットがパディングの後ろに付加される(S203)。これにより、メッセージは512ビットの整数倍になる(ここでは、512ビットのm倍とする)。
【0050】
次に、メッセージは、m個の512ビットデータに分割される(S204)。なお、分割された512ビットデータを、D(1),D(2),…D(m)とする。そして、それぞれの512ビットデータは32個の16ビットブロックに分割される(S205)。なお、512ビットデータD(1)を分割して得られた16ビットブロックをB(1,1),B(1,2),…B(1,32)とし、512ビットデータD(m)を分割して得られた16ビットブロックをB(m,1),B(m,2),…B(m,32)とする。
【0051】
次に、カウンタiが0にリセットされ(S206)、以後、カウンタiが2mに等しくなるまで、後述のS208〜S215の処理が繰り返される。
【0052】
S208では、512ビットの空データが生成され(S208)、0〜65535の中での乱数が32個生成される(S209)。なお、生成された乱数をf(i,1),f(i,2),… f(i,32)とする。そして、カウンタjが1にリセットされ(S210)、以後、カウンタjが32を超えるまで、B(1,j),B(2,j),…B(m,j)と累乗数f(i,j)を用いてリードソロモン符号化を行い冗長データr(i,j)を生成する処理(S212)とカウンタjを1つカウントアップする処理(S213)とが繰り返される。
【0053】
カウンタjが32を超えると、S211〜S213のループを抜け、S214にて、冗長データr(i,1),r(i,2),… r(i,32)と乱数f(i,1),f(i,2),… f(i,32)とが連結され、1024ビットのデータRiとして出力される。その後、カウンタiが1つカウントアップされてS207へ戻る。
【0054】
その後、カウンタiが2mに等しくなるまで、後述のS208〜S215の処理が繰り返される。その結果、冗長データr(i,1),r(i,2),… r(i,32)と乱数f(i,1),f(i,2),… f(i,32)とが連結された1024ビットのデータRiが(R1,R2,…R32)の32個出力されることとなる。
【0055】
以上のようにして乱数(R1,R2,…R32)が生成され、出力される。
【0056】
図6、図7へ戻って、次に、通信端末Aは、(R1,R2,…R32)から、X= R mod nで計算した結果(X1,X2,…X32)を第1のメッセージとして通信端末Bに送信する(S604)。なお、S604以降の処理は対話証明手段404により実行される。
【0057】
通信端末Bは、上記第1のメッセージを受信し(S702)、確率的な質問として32個の{0,1}のうち0が16個以上になるようにランダムに選んだ32個の{0,1}の列(b1,b2,…b32)を通信端末Aに送信する(S703)。通信端末Aは、通信端末Bからの32個の{0,1}の列(b1,b2,…b32)を受信する(S605)。
【0058】
次に、通信端末Aは、通信端末Bからの{0,1}の列(b1,b2,…b32)に従って、以下の回答(Y1,Y2,…Y32)を通信端末Bに送る(図3のS304)。
【0059】
bi= 0 のとき Yi = Ri
bi = 1 のとき Yi = TRi mod n
【0060】
ここで、通信端末Aが回答Yを送信する手順を、図6のS606〜S611に沿って説明する。S606ではカウンタiが1にリセットされ、以後、カウンタiが最大数k(ここでは「32」)に等しくなるまで、後述のS608〜S611の処理が繰り返される。S608では、biが0であるか否かを判断し、biが0であればS609にてYi= RiとなるYiを通信端末Bに送信する。
【0061】
一方、biが0でなければ(1であれば)、S610にてYi= TRi mod nとなるYiを通信端末Bに送信する。その後、S611でカウンタiが1つカウントアップされてS607へ戻る。
【0062】
その後、カウンタiが最大数kを超えるまで、S608〜S611の処理が繰り返される。その結果、通信端末Aは、通信端末Bからの{0,1}の列(b1,b2,…b32)に応じた回答(Y1,Y2,…Y32)を通信端末Bに送信することとなる。
【0063】
図7に戻り、通信端末Bは、通信端末Aから送られてきた回答(Y1,Y2,…Y32)を受信し、受信した回答が次式を満たすかどうかを、図7のS705〜S710に沿って検査する。
【0064】
bi= 0 のとき Xi = Yi 2 mod n
bi = 1 のとき ZXi = Yi 2 mod n
【0065】
ここで、通信端末Bが回答Yを検査する手順を説明する。図7のS705ではカウンタiが1にリセットされ、以後、カウンタiが最大数k(ここでは「32」)に等しくなるまで、後述のS707〜S710の処理が繰り返される。S707では、biが0であるか否かを判断し、biが0であればS708にてXi= Yi 2 mod nが成立するか否かを判断する。もし、不成立ならば、検証結果が異常であるとして処理を終了する。Xi= Yi 2 mod nが成立するならば、S710へ進む。
【0066】
一方、S707にてbiが0でなければ(1であれば)、S709にてZXi = Yi 2mod nが成立するか否かを判断する。もし、不成立ならば、検証結果が異常であるとして処理を終了する。ZXi = Yi 2mod nが成立するならば、S710へ進む。
【0067】
S710ではカウンタiが1つカウントアップされてS706へ戻る。その後、カウンタiが最大数kを超えるまで、S707〜S710の処理が繰り返される。その結果、通信端末Bは、通信端末Aから送られてきた回答(Y1,Y2,…Y32)が上記の式を満たすかどうかを1つずつ検査することとなる。但し、通信端末Bは、i が1〜32 において、すべて上式を満たしたときのみ、通信端末Aとの通信を継続し、ひとつでも上式を満たさないと判断されたら、その時点で通信を中止する(予め通信を中止する正解率の閾値を定めておき、設定以上の正解率が得られる場合には通信を継続するようにしても良い)。
【0068】
全ての検証結果が正常である場合、通信端末Bは、図7のS711にて、biが0の場合の回答Yiを出力する。
【0069】
そして、通信端末Bは、メッセージ生成手段503により、以下のようにして前方誤り訂正符号を用いてメッセージMを生成(復元)する(S712、図3のS305)。即ち、通信端末Bは、bi = 0のときのYi(Ri)の16個をそれぞれriとfi とに分割し、リードソロモン符号でri を fi の累乗数で復号処理をして、8192ビットのメッセージを復元する。
【0070】
リードソロモン符号は、32個の冗長情報のうちどの16個を利用しても元々のメッセージを復元できるが、累乗数をランダムに選んでいるため偶然他の冗長データと同じ累乗数を選んでしまった冗長データは復元処理には使えなくなる。この場合は、17個目のbi= 0のYi(Ri)が必要になる。
【0071】
以上説明した一連の処理により、対話証明の検証に合格した際に復元された8192ビットのメッセージは、改竄されていないメッセージであり、平方剰余問題においても電子署名と同等のメッセージ送受信が実現したことになる。
【0072】
【発明の効果】
以上説明したように、本発明によれば、一方向性関数を利用した対話証明方式を応用してメッセージを改竄されることなく通信相手に届けることができる。この方式は、一方向性関数が存在する全てのPSPACE問題及びNP問題をベースにして実現でき、素因数分解問題や離散対数問題の高速な解法が発見されたとしても、他のPSPACE問題及びNP問題で電子署名と同等のことができる。また、楕円曲線上の離散対数問題よりも短い鍵長で同等の難しさのPSPACE問題及びNP問題があれば、公開鍵長の短い電子署名を実現できる。
【図面の簡単な説明】
【図1】一方向性関数を利用した対話証明方式のシーケンス図である。
【図2】乱数の生成処理を示す流れ図である。
【図3】メッセージ送受信手順を説明するための図である。
【図4】被検証装置の機能ブロック図である。
【図5】検証装置の機能ブロック図である。
【図6】被検証装置における処理を示す流れ図である。
【図7】検証装置における処理を示す流れ図である。
【符号の説明】
401…被検証装置、402…冗長情報生成手段、403…計算式連結手段、404…対話証明手段、501…検証装置、502…対話証明手段、503…メッセージ生成手段。
Claims (9)
- 送信メッセージの入力を受け付け、前記送信メッセージから冗長情報を、当該冗長情報から前記送信メッセージを生成できるよう設計された計算式に基づいて生成し、生成された冗長情報及び生成に利用された計算式を出力する冗長情報生成手段と、
前記冗長情報生成手段により出力された冗長情報と計算式とを連結させる計算式連結手段と、
前記計算式連結手段による連結で得られた計算式連結済み冗長情報を乱数として用いて、検証装置との間で一方向性関数を用いた対話証明を行う対話証明手段と、を備え、前記対話証明手段は、対話証明において、
乱数に対し一方向性関数の演算を行った演算結果を第1のメッセージとして送信し、
検証装置から確率的な質問を受信し、受信された質問に応じて、乱数そのもの、又は、乱数と秘密情報から得られる値に対し一方向性関数の演算を行った演算結果を、第2のメッセージとして送信する、ことを特徴とする被検証装置。 - 前記冗長情報生成手段は、前方誤り訂正符号を用いて前記冗長情報を生成することを特徴とする請求項1に記載の被検証装置。
- 前記冗長情報生成手段は、前記送信メッセージに乱数ビットを付加し、付加後のメッセージから、前方誤り訂正符号を用いて前記冗長情報を生成することを特徴とする請求項1に記載の被検証装置。
- 前方誤り訂正符号としてリードソロモン符号が用いられ、
冗長データと当該冗長データの生成に利用された累乗数とを連結したものが乱数として対話証明に用いられることを特徴とする請求項2又は3に記載の被検証装置。 - 冗長情報と当該冗長情報から送信メッセージを生成できるよう設計された計算式とが連結された計算式連結済み冗長情報を、乱数として用いる被検証装置、との間で一方向性関数を用いた対話証明を行う対話証明手段と、
送信メッセージを生成するメッセージ生成手段と、を備え、
前記対話証明手段は、対話証明において、
乱数に対し一方向性関数の演算を行った演算結果を第1のメッセージとして受信し、
被検証装置へ確率的な質問を送信して、当該質問に応じた回答として、乱数そのもの、又は、乱数と秘密情報から得られる値に対し一方向性関数の演算を行った演算結果を、第2のメッセージとして受信し、
送信した質問、第1のメッセージ及び第2のメッセージに基づいて被検証装置の証明を行い、
被検証装置の正当性が証明された場合、質問に応じた回答のうち乱数そのものを出力し、
前記メッセージ生成手段は、
出力された乱数に含まれている冗長情報及び計算式に基づいて送信メッセージを生成する、ことを特徴とする検証装置。 - 前記メッセージ生成手段は、前方誤り訂正符号を用いて前記検証済みのメッセージから受信メッセージを生成することを特徴とする請求項5に記載の検証装置。
- 前方誤り訂正符号としてリードソロモン符号が用いられることを特徴とする請求項6に記載の検証装置。
- 検証装置との間で一方向性関数を用いた対話証明を行う被検証装置における被検証方法であって、
送信メッセージの入力を受け付け、
前記送信メッセージから冗長情報を、当該冗長情報から前記送信メッセージを生成できるよう設計された計算式に基づいて生成し、
生成された冗長情報及び生成に利用された計算式とを連結させ、
連結で得られた計算式連結済み冗長情報を乱数として用い、当該乱数に対し一方向性関数の演算を行った演算結果を第1のメッセージとして送信し、
検証装置から確率的な質問を受信し、
受信された質問に応じて、乱数そのもの、又は、乱数と秘密情報から得られる値に対し一方向性関数の演算を行った演算結果を、第2のメッセージとして送信する、ことを特徴とする被検証方法。 - 冗長情報と当該冗長情報から送信メッセージを生成できるよう設計された計算式とが連結された計算式連結済み冗長情報を、乱数として用いる被検証装置、との間で一方向性関数を用いた対話証明を行う検証装置における検証方法であって、
乱数に対し一方向性関数の演算を行った演算結果を第1のメッセージとして被検証装置から受信し、
被検証装置へ確率的な質問を送信し、
当該質問に応じた回答として、乱数そのもの、又は、乱数と秘密情報から得られる値に対し一方向性関数の演算を行った演算結果を、第2のメッセージとして受信し、
送信した質問、第1のメッセージ及び第2のメッセージに基づいて被検証装置の証明を行い、
被検証装置の正当性が証明された場合、質問に応じた回答のうち乱数そのものを出力し、
出力された乱数に含まれている冗長情報及び計算式に基づいて送信メッセージを生成する、ことを特徴とする検証方法。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2003208486A JP2005072650A (ja) | 2003-08-22 | 2003-08-22 | 被検証装置、検証装置、被検証方法及び検証方法 |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2003208486A JP2005072650A (ja) | 2003-08-22 | 2003-08-22 | 被検証装置、検証装置、被検証方法及び検証方法 |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JP2005072650A true JP2005072650A (ja) | 2005-03-17 |
Family
ID=34401755
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2003208486A Pending JP2005072650A (ja) | 2003-08-22 | 2003-08-22 | 被検証装置、検証装置、被検証方法及び検証方法 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP2005072650A (ja) |
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2008099243A (ja) * | 2006-09-12 | 2008-04-24 | Tamagawa Gakuen | 誤り訂正符号化装置、誤り訂正符号化方法及びプログラム |
| US10412069B2 (en) | 2015-01-19 | 2019-09-10 | Mitsubishi Electric Corporation | Packet transmitting apparatus, packet receiving apparatus, and computer readable medium |
| CN115439959A (zh) * | 2014-12-23 | 2022-12-06 | 法雷奥舒适驾驶助手公司 | 用于控制对机动车辆的至少一个功能的访问的方法 |
-
2003
- 2003-08-22 JP JP2003208486A patent/JP2005072650A/ja active Pending
Cited By (5)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2008099243A (ja) * | 2006-09-12 | 2008-04-24 | Tamagawa Gakuen | 誤り訂正符号化装置、誤り訂正符号化方法及びプログラム |
| US8176393B2 (en) | 2006-09-12 | 2012-05-08 | Tamagawa K-12 & University | Encoding device for error correction, encoding method for error correction and encoding program for error correction |
| US8365052B2 (en) | 2006-09-12 | 2013-01-29 | Tamagawa K-12 & University | Encoding device for error correction, encoding method for error correction and encoding program for error correction |
| CN115439959A (zh) * | 2014-12-23 | 2022-12-06 | 法雷奥舒适驾驶助手公司 | 用于控制对机动车辆的至少一个功能的访问的方法 |
| US10412069B2 (en) | 2015-01-19 | 2019-09-10 | Mitsubishi Electric Corporation | Packet transmitting apparatus, packet receiving apparatus, and computer readable medium |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US8116451B2 (en) | Key validation scheme | |
| EP0639907B1 (en) | Digital signature method and key agreement method | |
| US8312283B2 (en) | Accelerated signature verification on an elliptic curve | |
| Law et al. | An efficient protocol for authenticated key agreement | |
| JP4649040B2 (ja) | マスクディジタル署名 | |
| US8661240B2 (en) | Joint encryption of data | |
| US8462944B2 (en) | Method of public key generation | |
| US8953787B2 (en) | Strengthened public key protocol | |
| CA2305896C (en) | Key validation scheme | |
| US9088419B2 (en) | Keyed PV signatures | |
| US9544144B2 (en) | Data encryption | |
| JPH05347617A (ja) | 無線通信システムの通信方法 | |
| US20150006900A1 (en) | Signature protocol | |
| JP2005072650A (ja) | 被検証装置、検証装置、被検証方法及び検証方法 | |
| Basu et al. | Formal security verification of secured ECC based signcryption scheme | |
| JP3927419B2 (ja) | 情報登録方法、端末装置、情報登録サーバ、情報登録システム | |
| CN120281534A (zh) | 一种基于无证书系统的双向认证方法、装置、设备及介质 | |
| Poszet et al. | An Efficient Identification Protocol for Electronic Payment Systems | |
| JP2003234735A (ja) | 検証可暗号方法、送信者側端末、受信者側端末、検証可暗号システム、及びデータ送受信方法 | |
| JPH1078754A (ja) | 署名文書の認証方法、署名文書の同時交換方法及び署名文書認証システム及び署名文書同時交換システム |