(57)【要約】【課題】  要素数の小さいε−汎用ハッシュ関数族を実現する。【解決手段】  入力データ拡大装置１００には、入力データ１０３が入力される。入力データ拡大装置１００は、入力データ１０３から一意に定まる第１の拡大装置出力および第２の拡大装置出力を導出し、出力する。第１の拡大装置出力および第２の拡大装置出力は、群である出力データ集合B の元である。ε−Δハッシュ関数計算装置１０１は、第１の拡大装置出力を入力とし、関数集合 HΔの元であってハッシュ関数指定データ１０４によって指定される関数 hΔの計算を行う。関数集合 HΔは、出力データ集合B の任意の元d と、出力データ集合B の任意の異なる二つの元x,y に対して、h(x)-h(y)=d となるようなh∈HΔの個数が、 |HΔ|・ε以下となるという特徴を有する。加算装置１０２は、関数 hΔの計算結果と第２の拡大装置出力との加算結果を出力する。【選択図】  図１
2007086170.tif 000002
【特許請求の範囲】
【請求項１】
入力データを用いた演算を行い出力データを出力する汎用ハッシュ関数族計算装置であって、
入力データが入力され、一対一写像として、前記入力データから、前記出力データの集合である出力データ集合の二つの元を導出する入力データ拡大手段と、
ハッシュ関数集合から当該ハッシュ関数集合の元であるハッシュ関数を一意に指定するハッシュ関数指定データが入力され、入力データ拡大手段によって導出された出力データ集合の二つの元のうちの一方を入力としたときの、ハッシュ関数指定データに指定されるハッシュ関数のハッシュ値を計算するΔハッシュ関数計算手段と、
Δハッシュ関数計算手段によって計算されたハッシュ値と、入力データ拡大手段によって導出された出力データ集合の二つの元のうちの他方とを加算し、加算結果を出力データとして出力する加算手段とを備え、
Δハッシュ関数計算手段は、ハッシュ関数集合の定義域集合に属する任意の異なる二つの元をx,y とし、ハッシュ関数集合の値域集合に属する任意の元をd としたときにh(x)-h(y)=d を満足するハッシュ関数集合の元h の個数が、ハッシュ関数集合の元となるハッシュ関数の数に予め定められた所定値を乗じた値以下となるという条件を満足するハッシュ関数集合に属するハッシュ関数であって、ハッシュ関数指定データに指定されるハッシュ関数のハッシュ値を計算する
ことを特徴とする汎用ハッシュ関数族計算装置。
【請求項２】
出力データ集合は、 mビットのデータの集合であり、
入力データは、 nビットのデータであり、
ハッシュ関数指定データは、 mビットのデータであり、
nとmとの間には、 n≦2・mという関係が成立し、
入力データ拡大手段は、出力データ集合の二つの元として、入力データの上位 mビットデータ、および入力データの下位 mビットのデータを導出し、
Δハッシュ関数計算手段は、入力データ拡大手段によって導出された出力データ集合の二つの元のうちの一方と、 mビットのハッシュ関数指定データとのガロア体GF(2m)上での積算を計算し、その積算結果をハッシュ値とする
請求項１に記載の汎用ハッシュ関数族計算装置。
【請求項３】
出力データ集合は、 mビットのデータの集合であり、
入力データは、 nビットのデータであり、
ハッシュ関数指定データは、 mビットのデータであり、
nとmとの間には、 n≦2・mという関係が成立し、
入力データ拡大手段は、出力データ集合の二つの元として、入力データの上位 mビットのデータ、および入力データの最上位から数えて m+1番目のビットから n番目のビットまでのビット列に2・m-nビットの０のビット列を連結した mビットのデータを導出し、
Δハッシュ関数計算手段は、入力データ拡大手段によって導出された出力データ集合の二つの元のうちの一方と、 mビットのハッシュ関数指定データとのガロア体GF(2m)上での積算を計算し、その積算結果をハッシュ値とする
請求項１に記載の汎用ハッシュ関数族計算装置。
【請求項４】
ε−汎用ハッシュ関数族に属するハッシュ関数の計算を行う汎用ハッシュ関数族計算装置であって、
加算および積算が定義可能な体である第１の集合に属する元が第１の入力データとして入力されるとともに、第１の集合に属する元がハッシュ関数指定データとして入力され、第１の入力データとハッシュ関数指定データとの積算を行う積算手段と、
上への写像であって線型性を満たす写像によって、積算手段による積算結果を、当該汎用ハッシュ関数族計算装置の出力データの集合である第２の集合の元に変換するデータ変換手段と、
第２の集合に属する元が第２の入力データとして入力され、データ変換手段によって積算結果から変換された第２の集合の元と、第２の入力データとを加算し、加算結果を当該汎用ハッシュ関数族計算装置の出力データとして出力する加算手段とを備えた
ことを特徴とする汎用ハッシュ関数族計算装置。
【請求項５】
第２の集合は、群であり、
加算手段は、データ変換手段によって積算結果から変換された第２の集合の元と、第２の入力データとを、第２の集合上で加算する
請求項４に記載の汎用ハッシュ関数族計算装置。
【請求項６】
スカラー積および加算が定義可能な集合上のベクトルを出力データとして出力する汎用ハッシュ関数族計算装置であって、
前記集合上のベクトルが第１の入力データとして入力され、テプリッツ行列を一意に指定する行列指定データが入力され、行列指定データによって定められるテプリッツ行列と第１の入力データとを用いた演算により、出力データと要素数が等しいベクトルを導出するテプリッツ行列演算手段と、
前記集合上のベクトルであって出力データと要素数が等しいベクトルが第２の入力データとして入力され、テプリッツ行列演算手段によって導出されたベクトルと、第２の入力データとの加算を行い、加算結果を出力データとして出力する加算手段とを備えた
ことを特徴とする汎用ハッシュ関数族計算装置。
【請求項７】
行列指定データは、m行n列のテプリッツ行列を一意に指定するデータであり、
第１の入力データは、スカラー積および加算が定義可能な集合上の n次元ベクトルであり、
第２の入力データは、前記集合上の m次元ベクトルであり、
テプリッツ行列演算手段は、行列指定データによって定められるm行n列のテプリッツ行列と、 n次元ベクトルである第１の入力データとの積を計算して m次元ベクトルを導出し、
加算手段は、テプリッツ行列演算手段によって導出された m次元ベクトルと、第２の入力データとを加算する
請求項６に記載の汎用ハッシュ関数族計算装置。
【請求項８】
行列指定データは、m行n列のテプリッツ行列を一意に指定するデータであり、
第１の入力データは、スカラー積および加算が定義可能な集合上の n次元ベクトルであり、
第２の入力データは、前記集合上の m次元ベクトルであり、
テプリッツ行列演算手段は、行列指定データによって定められるm行n列のテプリッツ行列に対して行の基本変形を行い、基本変形後のm行n列の行列と、第１の入力データとの積を計算して m次元ベクトルを導出し、
加算手段は、テプリッツ行列演算手段によって導出された m次元ベクトルと、第２の入力データとを加算する
請求項６に記載の汎用ハッシュ関数族計算装置。
【請求項９】
行列指定データは、m行n列のテプリッツ行列を一意に指定するデータであり、
第１の入力データは、スカラー積および加算が定義可能な集合上の n次元ベクトルであり、
第２の入力データは、前記集合上の m次元ベクトルであり、
テプリッツ行列演算手段は、行列指定データによって定められるm行n列のテプリッツ行列に対して列の基本変形を行い、基本変形後のm行n列の行列と、第１の入力データとの積を計算して m次元ベクトルを導出し、
加算手段は、テプリッツ行列演算手段によって導出された m次元ベクトルと、第２の入力データとを加算する
請求項６に記載の汎用ハッシュ関数族計算装置。
【請求項１０】
テプリッツ行列演算手段は、テプリッツ行列の行数と列数の両方あるいはいずれか一方を入力され、第１の入力データとして、テプリッツ行列の列数と同数の要素からなるベクトルを入力され、行列指定データとして、テプリッツ行列の列数と行数の和から１減算した数と同数の要素からなるベクトルを入力され、
テプリッツ行列演算手段は、テプリッツ行列の行数と列数の両方あるいはいずれか一方および行列指定データによってテプリッツ行列の第１列および第１行を特定してテプリッツ行列を定め、当該テプリッツ行列と第１の入力データとの積を計算し、
加算手段は、第２の入力データとして、テプリッツ行列の行数と同数の要素からなるベクトルを入力され、テプリッツ行列演算手段による積算結果と、第２の入力データとを加算する
請求項６に記載の汎用ハッシュ関数族計算装置。
【請求項１１】
テプリッツ行列演算手段は、テプリッツ行列の行数と列数の両方あるいはいずれか一方を入力され、第１の入力データとして、テプリッツ行列の列数と同数の要素からなるベクトルを入力され、行列指定データとして、テプリッツ行列の列数と行数の和から１減算した数と同数の要素からなるベクトルを入力され、
テプリッツ行列演算手段は、テプリッツ行列の行数と列数の両方あるいはいずれか一方および行列指定データによってテプリッツ行列の第１列および第１行を特定してテプリッツ行列を定め、当該テプリッツ行列に対して行の基本変形を行い、基本変形後の行列と第１の入力データとの積を計算し、
加算手段は、第２の入力データとして、テプリッツ行列の行数と同数の要素からなるベクトルを入力され、テプリッツ行列演算手段による積算結果と、第２の入力データとを加算する
請求項６に記載の汎用ハッシュ関数族計算装置。
【請求項１２】
テプリッツ行列演算手段は、テプリッツ行列の行数と列数の両方あるいはいずれか一方を入力され、第１の入力データとして、テプリッツ行列の列数と同数の要素からなるベクトルを入力され、行列指定データとして、テプリッツ行列の列数と行数の和から１減算した数と同数の要素からなるベクトルを入力され、
テプリッツ行列演算手段は、テプリッツ行列の行数と列数の両方あるいはいずれか一方および行列指定データによってテプリッツ行列の第１列および第１行を特定してテプリッツ行列を定め、当該テプリッツ行列に対して列の基本変形を行い、基本変形後の行列と第１の入力データとの積を計算し、
加算手段は、第２の入力データとして、テプリッツ行列の行数と同数の要素からなるベクトルを入力され、テプリッツ行列演算手段による積算結果と、第２の入力データとを加算する
請求項６に記載の汎用ハッシュ関数族計算装置。
【請求項１３】
請求項１から請求項３のうちのいずれか１項に記載された汎用ハッシュ関数族計算装置をデータの送信側および受信側それぞれに備え、送信側と受信側でそれぞれ共通の共有鍵を生成する共有鍵生成システムであって、
乱数データを発生する乱数発生手段と、
乱数発生手段が発生した第１の乱数データを記憶する送信側記憶手段と、
第１の乱数データを量子通信路を介して送信する第１の量子通信手段と、
第１の量子通信手段から量子通信路を介して第１の乱数データを受信する第２の量子通信手段と、
第２の量子通信手段が受信した第１の乱数データを記憶する受信側記憶手段と、
送信側記憶手段に記憶された第１の乱数データに基づき、送信側と受信側とで同一のデータを生成する送信側誤り訂正手段と、
受信側記憶手段に記憶された第１の乱数データに基づき、送信側と受信側とで同一のデータを生成する受信側誤り訂正手段と、
送信側誤り訂正手段が生成したデータを、送信側の汎用ハッシュ関数族計算装置の入力データ拡大手段に入力し、乱数発生手段が発生した第２の乱数データを、ハッシュ関数指定データとして送信側の汎用ハッシュ関数族計算装置のΔハッシュ関数計算手段に入力する送信側入力手段と、
乱数発生手段が発生した第２の乱数データを通信路を介して送信する第２の乱数データ送信手段と、
第２の乱数データ送信手段から通信路を介して第２の乱数データを受信する第２の乱数データ受信手段と、
受信側誤り訂正手段が生成したデータを、受信側の汎用ハッシュ関数族計算装置の入力データ拡大手段に入力し、第２の乱数データ受信手段が受信した第２の乱数データを、ハッシュ関数指定データとして受信側の汎用ハッシュ関数族計算装置のΔハッシュ関数計算手段に入力する受信側入力手段とを備え、
送信側の汎用ハッシュ関数族計算装置は、送信側入力手段によって入力されたデータに応じた出力データを共有鍵として出力し、
受信側の汎用ハッシュ関数族計算装置は、送信側入力手段によって入力されたデータに応じた出力データを共有鍵として出力する
ことを特徴とする共有鍵生成システム。
【請求項１４】
入力データを用いた演算を行い出力データを出力する汎用ハッシュ関数族計算方法であって、
入力データ拡大手段が、入力データを入力されるデータ入力ステップと、
Δハッシュ関数計算手段が、ハッシュ関数集合から当該ハッシュ関数集合の元であるハッシュ関数を一意に指定するハッシュ関数指定データを入力される指定データ入力ステップと、
入力データ拡大手段が、一対一写像として、前記入力データから、前記出力データの集合である出力データ集合の二つの元を導出する入力データ拡大ステップと、
Δハッシュ関数計算手段が、入力データ拡大ステップで導出された出力データ集合の二つの元のうちの一方を入力としたときの、ハッシュ関数指定データに指定されるハッシュ関数のハッシュ値を計算するΔハッシュ関数計算ステップと、
加算手段が、Δハッシュ関数計算ステップで計算されたハッシュ値と、入力データ拡大ステップで導出された出力データ集合の二つの元のうちの他方とを加算し、加算結果を出力データとして出力する加算ステップとを含み、
Δハッシュ関数計算手段が、Δハッシュ関数計算ステップで、ハッシュ関数集合の定義域集合に属する任意の異なる二つの元をx,y とし、ハッシュ関数集合の値域集合に属する任意の元をd としたときにh(x)-h(y)=d を満足するハッシュ関数集合の元h の個数が、ハッシュ関数集合の元となるハッシュ関数の数に予め定められた所定値を乗じた値以下となるという条件を満足するハッシュ関数集合に属するハッシュ関数であって、ハッシュ関数指定データに指定されるハッシュ関数のハッシュ値を計算する
ことを特徴とする汎用ハッシュ関数族計算方法。
【請求項１５】
ε−汎用ハッシュ関数族に属するハッシュ関数の計算を行う汎用ハッシュ関数族計算方法であって、
積算手段が、加算および積算が定義可能な体である第１の集合に属する元を第１の入力データとして入力され、第１の集合に属する元をハッシュ関数指定データとして入力される指定データ等入力ステップと、
加算手段が、当該汎用ハッシュ関数族計算方法の出力データの集合である第２の集合に属する元を第２の入力データとして入力される第２の入力データ入力ステップと、
積算手段が、第１の入力データとハッシュ関数指定データとの積算を行う積算ステップと、
データ変換手段が、上への写像であって線型性を満たす写像によって、積算ステップでの積算結果を、第２の集合の元に変換するデータ変換ステップと、
加算手段が、データ変換ステップで積算結果から変換された第２の集合の元と、第２の入力データとを加算し、加算結果を当該汎用ハッシュ関数族計算方法の出力データとして出力する加算ステップとを含む
ことを特徴とする汎用ハッシュ関数族計算方法。
【請求項１６】
スカラー積および加算が定義可能な集合上のベクトルを出力データとして出力する汎用ハッシュ関数族計算方法であって、
テプリッツ行列演算手段が、前記集合上のベクトルを第１の入力データとして入力され、テプリッツ行列を一意に指定する行列指定データを入力される指定データ入力ステップと、
加算手段が、前記集合上のベクトルであって出力データと要素数が等しいベクトルを第２の入力データとして入力される第２の入力データ入力ステップと、
テプリッツ行列演算手段が、行列指定データによって定められるテプリッツ行列と第１の入力データとを用いた演算により、出力データと要素数が等しいベクトルを導出する行列演算ステップと、
加算手段が、行列演算ステップで導出されたベクトルと、第２の入力データとの加算を行い、加算結果を出力データとして出力する加算ステップとを含む
ことを特徴とする汎用ハッシュ関数族計算方法。
【請求項１７】
入力データを用いた演算を行い出力データを出力するコンピュータに搭載される汎用ハッシュ関数族計算プログラムであって、
前記コンピュータに、
入力データが入力されるデータ入力処理、
ハッシュ関数集合から当該ハッシュ関数集合の元であるハッシュ関数を一意に指定するハッシュ関数指定データが入力される指定データ入力処理、
一対一写像として、前記入力データから、前記出力データの集合である出力データ集合の二つの元を導出する入力データ拡大処理、
ハッシュ関数集合の定義域集合に属する任意の異なる二つの元をx,y とし、ハッシュ関数集合の値域集合に属する任意の元をd としたときにh(x)-h(y)=d を満足するハッシュ関数集合の元h の個数が、ハッシュ関数集合の元となるハッシュ関数の数に予め定められた所定値を乗じた値以下となるという条件を満足するハッシュ関数集合に属するハッシュ関数であって、ハッシュ関数指定データに指定されるハッシュ関数の、入力データ拡大処理で導出された出力データ集合の二つの元のうちの一方を入力としたときにおけるハッシュ値を計算するΔハッシュ関数計算処理、
Δハッシュ関数計算処理で計算されたハッシュ値と、入力データ拡大処理で導出された出力データ集合の二つの元のうちの他方とを加算し、加算結果を出力データとして出力する加算処理
を実行させるための汎用ハッシュ関数族計算プログラム。
【請求項１８】
ε−汎用ハッシュ関数族に属するハッシュ関数の計算を行うコンピュータに搭載される汎用ハッシュ関数族計算プログラムであって、
前記コンピュータに、
加算および積算が定義可能な体である第１の集合に属する元が第１の入力データとして入力され、第１の集合に属する元がハッシュ関数指定データとして入力される指定データ等入力処理、
前記コンピュータの出力データの集合である第２の集合に属する元が第２の入力データとして入力される第２の入力データ入力処理、
第１の入力データとハッシュ関数指定データとの積算を行う積算処理、
上への写像であって線型性を満たす写像によって、積算処理での積算結果を、第２の集合の元に変換するデータ変換処理、および
データ変換処理で積算結果から変換された第２の集合の元と、第２の入力データとを加算し、加算結果を前記コンピュータの出力データとして出力する加算処理
を実行させるための汎用ハッシュ関数族計算プログラム。
【請求項１９】
スカラー積および加算が定義可能な集合上のベクトルを出力データとして出力するコンピュータに搭載される汎用ハッシュ関数族計算プログラムであって、
前記コンピュータに、
前記集合上のベクトルが第１の入力データとして入力され、テプリッツ行列を一意に指定する行列指定データが入力される指定データ入力処理、
前記集合上のベクトルであって出力データと要素数が等しいベクトルが第２の入力データとして入力される第２の入力データ入力処理、
行列指定データによって定められるテプリッツ行列と第１の入力データとを用いた演算により、出力データと要素数が等しいベクトルを導出する行列演算、および
行列演算処理で導出されたベクトルと、第２の入力データとの加算を行い、加算結果を出力データとして出力する加算処理
を実行させるための汎用ハッシュ関数族計算プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、汎用ハッシュ関数族計算装置、汎用ハッシュ関数族計算方法、汎用ハッシュ関数族計算プログラム、および共有鍵生成システムに関し、特にハッシュ関数族の要素数が小さい汎用ハッシュ関数族計算装置、汎用ハッシュ関数族計算方法、汎用ハッシュ関数族計算プログラム、およびそのような汎用ハッシュ関数族計算装置を用いた共有鍵生成システムに関する。
【背景技術】
【０００２】
集合A から集合B へのε−汎用ハッシュ関数族とは、集合A から集合B への関数の集合H であり、集合A に属する任意の相異なる二つの要素x,y に対して、h(x)=h(y) となるH の元h の個数がε×|H| 以下となるような関数の集合のことを指す。ただし、|H| は集合H の要素数である。以下、任意の集合S に対して、 S の要素数を|S| と表すこととする。ε−汎用ハッシュ関数族は非特許文献１および非特許文献２に示されているように、メッセージ認証コードや量子鍵配送における秘匿性増強処理のために利用される。
【０００３】
従来のε−汎用ハッシュ関数族を実現する方式が、非特許文献２および非特許文献３に記載されている。また、非特許文献２および非特許文献３では、ε−汎用ハッシュ関数族の要素数の下界が示されている。メッセージ認証コードや量子鍵配送でε−汎用ハッシュ関数を利用する場合、効率の観点から、用いるε−汎用ハッシュ関数族の要素数は小さいことが望まれるが、従来は、非常に限られたパラメータに関してしか要素数の下界を達成する方式が知られていなかった。下界を達成できない入力集合A および出力集合B に対するε−汎用ハッシュ関数族を構成する方法としては、非特許文献１に記載されているように、集合A から元k を選び、入力データx との積を取った後に、集合A から集合B への縮小変換を施すという方式が知られている。この場合 εの値は1/|B| となり、ε−汎用ハッシュ関数族の要素数は集合A の要素数と等しくなるが、非特許文献３で示されている要素数の下界である|A|/|B| は達成できていない。また、非特許文献４では、ε−汎用ハッシュ関数の構成法が記載されているが、非特許文献４に記載された方法は、ハッシュ計算の高速化を目指したハッシュ関数の汎用的な構成法であり、ハッシュ関数集合の要素数を小さくすることを目指したものではない。
【０００４】
さらに、出力となる集合B の要素数が大きな場合に関する方式（ε−汎用ハッシュ関数族の要素数の下界を達成する方式）については、量子鍵配送等の有用なアプリケーションがあるにも関わらず、従来ほとんど方式が知られていなかった。
【０００５】
また、“cascade ”と呼ばれる誤り訂正処理が、非特許文献５に紹介されている。
【０００６】
また、入力データのビットを切り出し、その切り出されたデータに対するハッシュ計算を行うシステムが特許文献１に記載されている。
【０００７】
【特許文献１】特開２００１−１３４１７８号公報（段落００１８、図４）
【非特許文献１】C.H.Bennett，G.Brassard，C.Crepeau and U.Maurer，“Generalized Privacy Amplification”，IEEE Trans. Information Theory，vol.41，no.6，1995年，pp.1915-1923
【非特許文献２】D.R.Stinson，“Universal Hashing and Authentication Codes”，Designs, Codes and Cryptography，vol.4，1994年，pp.369-380
【非特許文献３】D.R.Stinson，“Combinatorial Techniques for Universal Hashing”，Journal of Computer and System Sciences，vol.48，No.2，1994年，pp.337--346
【非特許文献４】Martin Boesgaard, Thomas Christensen and Erik Zenner，“Badger - A Fast and Provably Secure MAC”，Proceedings of Applied Cryptography and Network Security, ACNS2005, Lecture Notes in Computer Science，vol. 3531，Springer Verlag，2005年，pp.176-191
【非特許文献５】G.Brassard, L.Salvail, “Secret-Key Reconciliation by Public Discussion”, Proc. Eurocrypto’93, Lecture Notes in Computer Science, Vol.765, Springer Verlag, 1994年, pp.410-423
【発明の開示】
【発明が解決しようとする課題】
【０００８】
前述のように、従来技術によって実現されたε−汎用ハッシュ関数族では、要素数が最小となるような入力集合および出力集合が限定されていた。しかし、要素数の小さいε−汎用ハッシュ関数族に属するハッシュ関数の計算を行えることが好ましい。
【０００９】
そこで、本発明は、要素数の小さいε−汎用ハッシュ関数族を実現可能な汎用ハッシュ関数族計算装置、汎用ハッシュ関数族計算方法、汎用ハッシュ関数族計算プログラムを提供することを目的とする。また、本発明は、通信における送信側および受信側で共有される共有鍵を、要素数の小さいε−汎用ハッシュ関数族を用いて生成する共有鍵生成システムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明の第１の態様の汎用ハッシュ関数族計算装置は、入力データを用いた演算を行い出力データを出力する汎用ハッシュ関数族計算装置であって、入力データが入力され、一対一写像として、前記入力データから、前記出力データの集合である出力データ集合の二つの元を導出する入力データ拡大手段と、ハッシュ関数集合から当該ハッシュ関数集合の元であるハッシュ関数を一意に指定するハッシュ関数指定データが入力され、入力データ拡大手段によって導出された出力データ集合の二つの元のうちの一方を入力としたときの、ハッシュ関数指定データに指定されるハッシュ関数のハッシュ値を計算するΔハッシュ関数計算手段と、Δハッシュ関数計算手段によって計算されたハッシュ値と、入力データ拡大手段によって導出された出力データ集合の二つの元のうちの他方とを加算し、加算結果を出力データとして出力する加算手段とを備え、Δハッシュ関数計算手段が、ハッシュ関数集合の定義域集合に属する任意の異なる二つの元をx,y とし、ハッシュ関数集合の値域集合に属する任意の元をd としたときにh(x)-h(y)=d を満足するハッシュ関数集合の元h の個数が、ハッシュ関数集合の元となるハッシュ関数の数に予め定められた所定値を乗じた値以下となるという条件を満足するハッシュ関数集合に属するハッシュ関数であって、ハッシュ関数指定データに指定されるハッシュ関数のハッシュ値を計算することを特徴とする。
【００１１】
出力データ集合は、 mビットのデータの集合であり、入力データは、 nビットのデータであり、ハッシュ関数指定データは、 mビットのデータであり、nとmとの間には、 n≦2・mという関係が成立し、入力データ拡大手段が、出力データ集合の二つの元として、入力データの上位 mビットデータ、および入力データの下位 mビットのデータを導出し、Δハッシュ関数計算手段が、入力データ拡大手段によって導出された出力データ集合の二つの元のうちの一方と、 mビットのハッシュ関数指定データとのガロア体GF(2m)上での積算を計算し、その積算結果をハッシュ値とする構成であってもよい。
【００１２】
出力データ集合は、 mビットのデータの集合であり、入力データは、 nビットのデータであり、ハッシュ関数指定データは、 mビットのデータであり、nとmとの間には、 n≦2・mという関係が成立し、入力データ拡大手段が、出力データ集合の二つの元として、入力データの上位 mビットのデータ、および入力データの最上位から数えて m+1番目のビットから n番目のビットまでのビット列に2・m-nビットの０のビット列を連結した mビットのデータを導出し、Δハッシュ関数計算手段が、入力データ拡大手段によって導出された出力データ集合の二つの元のうちの一方と、 mビットのハッシュ関数指定データとのガロア体GF(2m)上での積算を計算し、その積算結果をハッシュ値とする構成であってもよい。
【００１３】
また、本発明の第２の態様の汎用ハッシュ関数族計算装置は、ε−汎用ハッシュ関数族に属するハッシュ関数の計算を行う汎用ハッシュ関数族計算装置であって、加算および積算が定義可能な体である第１の集合に属する元が第１の入力データとして入力されるとともに、第１の集合に属する元がハッシュ関数指定データとして入力され、第１の入力データとハッシュ関数指定データとの積算を行う積算手段と、上への写像であって線型性を満たす写像によって、積算手段による積算結果を、当該汎用ハッシュ関数族計算装置の出力データの集合である第２の集合の元に変換するデータ変換手段と、第２の集合に属する元が第２の入力データとして入力され、データ変換手段によって積算結果から変換された第２の集合の元と、第２の入力データとを加算し、加算結果を当該汎用ハッシュ関数族計算装置の出力データとして出力する加算手段とを備えたことを特徴とする。
【００１４】
第２の集合は、群であり、加算手段が、データ変換手段によって積算結果から変換された第２の集合の元と、第２の入力データとを、第２の集合上で加算する構成であってもよい。
【００１５】
また、本発明の第３の態様の汎用ハッシュ関数族計算装置は、スカラー積および加算が定義可能な集合上のベクトルを出力データとして出力する汎用ハッシュ関数族計算装置であって、前記集合上のベクトルが第１の入力データとして入力され、テプリッツ行列を一意に指定する行列指定データが入力され、行列指定データによって定められるテプリッツ行列と第１の入力データとを用いた演算により、出力データと要素数が等しいベクトルを導出するテプリッツ行列演算手段と、前記集合上のベクトルであって出力データと要素数が等しいベクトルが第２の入力データとして入力され、テプリッツ行列演算手段によって導出されたベクトルと、第２の入力データとの加算を行い、加算結果を出力データとして出力する加算手段とを備えたことを特徴とする。
【００１６】
行列指定データは、m行n列のテプリッツ行列を一意に指定するデータであり、第１の入力データは、スカラー積および加算が定義可能な集合上の n次元ベクトルであり、第２の入力データは、前記集合上の m次元ベクトルであり、テプリッツ行列演算手段が、行列指定データによって定められるm行n列のテプリッツ行列と、 n次元ベクトルである第１の入力データとの積を計算して m次元ベクトルを導出し、加算手段が、テプリッツ行列演算手段によって導出された m次元ベクトルと、第２の入力データとを加算する構成であってもよい。
【００１７】
行列指定データは、m行n列のテプリッツ行列を一意に指定するデータであり、第１の入力データは、スカラー積および加算が定義可能な集合上の n次元ベクトルであり、第２の入力データは、前記集合上の m次元ベクトルであり、テプリッツ行列演算手段が、行列指定データによって定められるm行n列のテプリッツ行列に対して行の基本変形を行い、基本変形後のm行n列の行列と、第１の入力データとの積を計算して m次元ベクトルを導出し、加算手段が、テプリッツ行列演算手段によって導出された m次元ベクトルと、第２の入力データとを加算する構成であってもよい。
【００１８】
行列指定データは、m行n列のテプリッツ行列を一意に指定するデータであり、第１の入力データは、スカラー積および加算が定義可能な集合上の n次元ベクトルであり、第２の入力データは、前記集合上の m次元ベクトルであり、テプリッツ行列演算手段が、行列指定データによって定められるm行n列のテプリッツ行列に対して列の基本変形を行い、基本変形後のm行n列の行列と、第１の入力データとの積を計算して m次元ベクトルを導出し、加算手段が、テプリッツ行列演算手段によって導出された m次元ベクトルと、第２の入力データとを加算する構成であってもよい。
【００１９】
テプリッツ行列演算手段は、テプリッツ行列の行数と列数の両方あるいはいずれか一方を入力され、第１の入力データとして、テプリッツ行列の列数と同数の要素からなるベクトルを入力され、行列指定データとして、テプリッツ行列の列数と行数の和から１減算した数と同数の要素からなるベクトルを入力され、テプリッツ行列演算手段は、テプリッツ行列の行数と列数の両方あるいはいずれか一方および行列指定データによってテプリッツ行列の第１列および第１行を特定してテプリッツ行列を定め、当該テプリッツ行列と第１の入力データとの積を計算し、加算手段は、第２の入力データとして、テプリッツ行列の行数と同数の要素からなるベクトルを入力され、テプリッツ行列演算手段による積算結果と、第２の入力データとを加算する構成であってもよい。そのような構成によれば、テプリッツ行列の行数および列数を調整することができる。
【００２０】
テプリッツ行列演算手段は、テプリッツ行列の行数と列数の両方あるいはいずれか一方を入力され、第１の入力データとして、テプリッツ行列の列数と同数の要素からなるベクトルを入力され、行列指定データとして、テプリッツ行列の列数と行数の和から１減算した数と同数の要素からなるベクトルを入力され、テプリッツ行列演算手段は、テプリッツ行列の行数と列数の両方あるいはいずれか一方および行列指定データによってテプリッツ行列の第１列および第１行を特定してテプリッツ行列を定め、当該テプリッツ行列に対して行の基本変形を行い、基本変形後の行列と第１の入力データとの積を計算し、加算手段は、第２の入力データとして、テプリッツ行列の行数と同数の要素からなるベクトルを入力され、テプリッツ行列演算手段による積算結果と、第２の入力データとを加算する構成であってもよい。そのような構成によれば、テプリッツ行列の行数および列数を調整することができる。
【００２１】
テプリッツ行列演算手段は、テプリッツ行列の行数と列数の両方あるいはいずれか一方を入力され、第１の入力データとして、テプリッツ行列の列数と同数の要素からなるベクトルを入力され、行列指定データとして、テプリッツ行列の列数と行数の和から１減算した数と同数の要素からなるベクトルを入力され、テプリッツ行列演算手段は、テプリッツ行列の行数と列数の両方あるいはいずれか一方および行列指定データによってテプリッツ行列の第１列および第１行を特定してテプリッツ行列を定め、当該テプリッツ行列に対して列の基本変形を行い、基本変形後の行列と第１の入力データとの積を計算し、加算手段は、第２の入力データとして、テプリッツ行列の行数と同数の要素からなるベクトルを入力され、テプリッツ行列演算手段による積算結果と、第２の入力データとを加算する構成であってもよい。そのような構成によれば、テプリッツ行列の行数および列数を調整することができる。
【００２２】
また、本発明による共有鍵生成システムは、第１の態様の汎用ハッシュ関数族計算装置をデータの送信側および受信側それぞれに備え、送信側と受信側でそれぞれ共通の共有鍵を生成する共有鍵生成システムであって、乱数データを発生する乱数発生手段と、乱数発生手段が発生した第１の乱数データを記憶する送信側記憶手段と、第１の乱数データを量子通信路を介して送信する第１の量子通信手段と、第１の量子通信手段から量子通信路を介して第１の乱数データを受信する第２の量子通信手段と、第２の量子通信手段が受信した第１の乱数データを記憶する受信側記憶手段と、送信側記憶手段に記憶された第１の乱数データに基づき、送信側と受信側とで同一のデータを生成する送信側誤り訂正手段と、受信側記憶手段に記憶された第１の乱数データに基づき、送信側と受信側とで同一のデータを生成する受信側誤り訂正手段と、送信側誤り訂正手段が生成したデータを、送信側の汎用ハッシュ関数族計算装置の入力データ拡大手段に入力し、乱数発生手段が発生した第２の乱数データを、ハッシュ関数指定データとして送信側の汎用ハッシュ関数族計算装置のΔハッシュ関数計算手段に入力する送信側入力手段と、乱数発生手段が発生した第２の乱数データを通信路を介して送信する第２の乱数データ送信手段と、第２の乱数データ送信手段から通信路を介して第２の乱数データを受信する第２の乱数データ受信手段と、受信側誤り訂正手段が生成したデータを、受信側の汎用ハッシュ関数族計算装置の入力データ拡大手段に入力し、第２の乱数データ受信手段が受信した第２の乱数データを、ハッシュ関数指定データとして受信側の汎用ハッシュ関数族計算装置のΔハッシュ関数計算手段に入力する受信側入力手段とを備え、送信側の汎用ハッシュ関数族計算装置は、送信側入力手段によって入力されたデータに応じた出力データを共有鍵として出力し、受信側の汎用ハッシュ関数族計算装置は、送信側入力手段によって入力されたデータに応じた出力データを共有鍵として出力することを特徴とする。
【００２３】
また、本発明による汎用ハッシュ関数族計算方法は、入力データを用いた演算を行い出力データを出力する汎用ハッシュ関数族計算方法であって、入力データ拡大手段が、入力データを入力されるデータ入力ステップと、Δハッシュ関数計算手段が、ハッシュ関数集合から当該ハッシュ関数集合の元であるハッシュ関数を一意に指定するハッシュ関数指定データを入力される指定データ入力ステップと、入力データ拡大手段が、一対一写像として、前記入力データから、前記出力データの集合である出力データ集合の二つの元を導出する入力データ拡大ステップと、Δハッシュ関数計算手段が、入力データ拡大ステップで導出された出力データ集合の二つの元のうちの一方を入力としたときの、ハッシュ関数指定データに指定されるハッシュ関数のハッシュ値を計算するΔハッシュ関数計算ステップと、加算手段が、Δハッシュ関数計算ステップで計算されたハッシュ値と、入力データ拡大ステップで導出された出力データ集合の二つの元のうちの他方とを加算し、加算結果を出力データとして出力する加算ステップとを含み、Δハッシュ関数計算手段が、Δハッシュ関数計算ステップで、ハッシュ関数集合の定義域集合に属する任意の異なる二つの元をx,y とし、ハッシュ関数集合の値域集合に属する任意の元をd としたときにh(x)-h(y)=d を満足するハッシュ関数集合の元h の個数が、ハッシュ関数集合の元となるハッシュ関数の数に予め定められた所定値を乗じた値以下となるという条件を満足するハッシュ関数集合に属するハッシュ関数であって、ハッシュ関数指定データに指定されるハッシュ関数のハッシュ値を計算することを特徴とする。
【００２４】
また、本発明による汎用ハッシュ関数族計算方法は、ε−汎用ハッシュ関数族に属するハッシュ関数の計算を行う汎用ハッシュ関数族計算方法であって、積算手段が、加算および積算が定義可能な体である第１の集合に属する元を第１の入力データとして入力され、第１の集合に属する元をハッシュ関数指定データとして入力される指定データ等入力ステップと、加算手段が、当該汎用ハッシュ関数族計算方法の出力データの集合である第２の集合に属する元を第２の入力データとして入力される第２の入力データ入力ステップと、積算手段が、第１の入力データとハッシュ関数指定データとの積算を行う積算ステップと、データ変換手段が、上への写像であって線型性を満たす写像によって、積算ステップでの積算結果を、第２の集合の元に変換するデータ変換ステップと、加算手段が、データ変換ステップで積算結果から変換された第２の集合の元と、第２の入力データとを加算し、加算結果を当該汎用ハッシュ関数族計算方法の出力データとして出力する加算ステップとを含むことを特徴とする。
【００２５】
また、本発明による汎用ハッシュ関数族計算方法は、スカラー積および加算が定義可能な集合上のベクトルを出力データとして出力する汎用ハッシュ関数族計算方法であって、テプリッツ行列演算手段が、前記集合上のベクトルを第１の入力データとして入力され、テプリッツ行列を一意に指定する行列指定データを入力される指定データ入力ステップと、加算手段が、前記集合上のベクトルであって出力データと要素数が等しいベクトルを第２の入力データとして入力される第２の入力データ入力ステップと、テプリッツ行列演算手段が、行列指定データによって定められるテプリッツ行列と第１の入力データとを用いた演算により、出力データと要素数が等しいベクトルを導出する行列演算ステップと、加算手段が、行列演算ステップで導出されたベクトルと、第２の入力データとの加算を行い、加算結果を出力データとして出力する加算ステップとを含むことを特徴とする。
【００２６】
また、本発明による汎用ハッシュ関数族計算プログラムは、入力データを用いた演算を行い出力データを出力するコンピュータに搭載される汎用ハッシュ関数族計算プログラムであって、前記コンピュータに、入力データが入力されるデータ入力処理、ハッシュ関数集合から当該ハッシュ関数集合の元であるハッシュ関数を一意に指定するハッシュ関数指定データが入力される指定データ入力処理、一対一写像として、前記入力データから、前記出力データの集合である出力データ集合の二つの元を導出する入力データ拡大処理、ハッシュ関数集合の定義域集合に属する任意の異なる二つの元をx,y とし、ハッシュ関数集合の値域集合に属する任意の元をd としたときにh(x)-h(y)=d を満足するハッシュ関数集合の元h の個数が、ハッシュ関数集合の元となるハッシュ関数の数に予め定められた所定値を乗じた値以下となるという条件を満足するハッシュ関数集合に属するハッシュ関数であって、ハッシュ関数指定データに指定されるハッシュ関数の、入力データ拡大処理で導出された出力データ集合の二つの元のうちの一方を入力としたときにおけるハッシュ値を計算するΔハッシュ関数計算処理、Δハッシュ関数計算処理で計算されたハッシュ値と、入力データ拡大処理で導出された出力データ集合の二つの元のうちの他方とを加算し、加算結果を出力データとして出力する加算処理を実行させることを特徴とする。
【００２７】
また、本発明による汎用ハッシュ関数族計算プログラムは、ε−汎用ハッシュ関数族に属するハッシュ関数の計算を行うコンピュータに搭載される汎用ハッシュ関数族計算プログラムであって、前記コンピュータに、加算および積算が定義可能な体である第１の集合に属する元が第１の入力データとして入力され、第１の集合に属する元がハッシュ関数指定データとして入力される指定データ等入力処理、前記コンピュータの出力データの集合である第２の集合に属する元が第２の入力データとして入力される第２の入力データ入力処理、第１の入力データとハッシュ関数指定データとの積算を行う積算処理、上への写像であって線型性を満たす写像によって、積算処理での積算結果を、第２の集合の元に変換するデータ変換処理、およびデータ変換処理で積算結果から変換された第２の集合の元と、第２の入力データとを加算し、加算結果を前記コンピュータの出力データとして出力する加算処理を実行させることを特徴とする。
【００２８】
また、本発明による汎用ハッシュ関数族計算プログラムは、スカラー積および加算が定義可能な集合上のベクトルを出力データとして出力するコンピュータに搭載される汎用ハッシュ関数族計算プログラムであって、前記コンピュータに、前記集合上のベクトルが第１の入力データとして入力され、テプリッツ行列を一意に指定する行列指定データが入力される指定データ入力処理、前記集合上のベクトルであって出力データと要素数が等しいベクトルが第２の入力データとして入力される第２の入力データ入力処理、行列指定データによって定められるテプリッツ行列と第１の入力データとを用いた演算により、出力データと要素数が等しいベクトルを導出する行列演算、および行列演算処理で導出されたベクトルと、第２の入力データとの加算を行い、加算結果を出力データとして出力する加算処理を実行させることを特徴とする。
【００２９】
また、本発明による汎用ハッシュ関数族計算方法は、入力データを用いた演算を行い出力データを出力する汎用ハッシュ関数族計算方法であって、入力データを入力されるデータ入力ステップと、ハッシュ関数集合から当該ハッシュ関数集合の元であるハッシュ関数を一意に指定するハッシュ関数指定データを入力される指定データ入力ステップと、一対一写像として、前記入力データから、前記出力データの集合である出力データ集合の二つの元を導出する入力データ拡大ステップと、入力データ拡大ステップで導出された出力データ集合の二つの元のうちの一方を入力としたときの、ハッシュ関数指定データに指定されるハッシュ関数のハッシュ値を計算するΔハッシュ関数計算ステップと、Δハッシュ関数計算ステップで計算されたハッシュ値と、入力データ拡大ステップで導出された出力データ集合の二つの元のうちの他方とを加算し、加算結果を出力データとして出力する加算ステップとを含み、Δハッシュ関数計算ステップで、ハッシュ関数集合の定義域集合に属する任意の異なる二つの元をx,y とし、ハッシュ関数集合の値域集合に属する任意の元をd としたときにh(x)-h(y)=d を満足するハッシュ関数集合の元h の個数が、ハッシュ関数集合の元となるハッシュ関数の数に予め定められた所定値を乗じた値以下となるという条件を満足するハッシュ関数集合に属するハッシュ関数であって、ハッシュ関数指定データに指定されるハッシュ関数のハッシュ値を計算することを特徴とする。
【００３０】
出力データ集合は、 mビットのデータの集合であり、入力データは、 nビットのデータであり、ハッシュ関数指定データは、 mビットのデータであり、nとmとの間には、 n≦2・mという関係が成立し、入力データ拡大ステップで、出力データ集合の二つの元として、入力データの上位 mビットデータ、および入力データの下位 mビットのデータを導出し、Δハッシュ関数計算ステップで、入力データ拡大ステップで導出された出力データ集合の二つの元のうちの一方と、 mビットのハッシュ関数指定データとのガロア体GF(2m)上での積算を計算し、その積算結果をハッシュ値とする方法であってもよい。
【００３１】
出力データ集合は、 mビットのデータの集合であり、入力データは、 nビットのデータであり、ハッシュ関数指定データは、 mビットのデータであり、nとmとの間には、 n≦2・mという関係が成立し、入力データ拡大ステップで、出力データ集合の二つの元として、入力データの上位 mビットのデータ、および入力データの最上位から数えて m+1番目のビットから n番目のビットまでのビット列に2・m-nビットの０のビット列を連結した mビットのデータを導出し、Δハッシュ関数計算ステップで、入力データ拡大ステップで導出された出力データ集合の二つの元のうちの一方と、 mビットのハッシュ関数指定データとのガロア体GF(2m)上での積算を計算し、その積算結果をハッシュ値とする方法であってもよい。
【００３２】
また、本発明による汎用ハッシュ関数族計算方法は、ε−汎用ハッシュ関数族に属するハッシュ関数の計算を行う汎用ハッシュ関数族計算方法であって、加算および積算が定義可能な体である第１の集合に属する元を第１の入力データとして入力され、第１の集合に属する元をハッシュ関数指定データとして入力される指定データ等入力ステップと、当該汎用ハッシュ関数族計算方法の出力データの集合である第２の集合に属する元を第２の入力データとして入力される第２の入力データ入力ステップと、第１の入力データとハッシュ関数指定データとの積算を行う積算ステップと、上への写像であって線型性を満たす写像によって、積算ステップでの積算結果を、第２の集合の元に変換するデータ変換ステップと、データ変換ステップで積算結果から変換された第２の集合の元と、第２の入力データとを加算し、加算結果を当該汎用ハッシュ関数族計算方法の出力データとして出力する加算ステップとを含むことを特徴とする。
【００３３】
第２の集合は、群であり、加算ステップで、データ変換ステップで積算結果から変換された第２の集合の元と、第２の入力データとを、第２の集合上で加算する方法であってもよい。
【００３４】
また、本発明による汎用ハッシュ関数族計算方法は、スカラー積および加算が定義可能な集合上のベクトルを出力データとして出力する汎用ハッシュ関数族計算方法であって、
前記集合上のベクトルを第１の入力データとして入力され、テプリッツ行列を一意に指定する行列指定データを入力される指定データ入力ステップと、前記集合上のベクトルであって出力データと要素数が等しいベクトルを第２の入力データとして入力される第２の入力データ入力ステップと、行列指定データによって定められるテプリッツ行列と第１の入力データとを用いた演算により、出力データと要素数が等しいベクトルを導出する行列演算ステップと、行列演算ステップで導出されたベクトルと、第２の入力データとの加算を行い、加算結果を出力データとして出力する加算ステップとを含むことを特徴とする。
【００３５】
行列指定データは、m行n列のテプリッツ行列を一意に指定するデータであり、第１の入力データは、スカラー積および加算が定義可能な集合上の n次元ベクトルであり、第２の入力データは、前記集合上の m次元ベクトルであり、行列演算ステップで、行列指定データによって定められるm行n列のテプリッツ行列と、 n次元ベクトルである第１の入力データとの積を計算して m次元ベクトルを導出し、加算ステップで、行列演算ステップで導出された m次元ベクトルと、第２の入力データとを加算する方法であってもよい。
【００３６】
行列指定データは、m行n列のテプリッツ行列を一意に指定するデータであり、第１の入力データは、スカラー積および加算が定義可能な集合上の n次元ベクトルであり、第２の入力データは、前記集合上の m次元ベクトルであり、行列演算ステップで、行列指定データによって定められるm行n列のテプリッツ行列に対して行の基本変形を行い、基本変形後のm行n列の行列と、第１の入力データとの積を計算して m次元ベクトルを導出し、加算ステップで、行列演算ステップで導出された m次元ベクトルと、第２の入力データとを加算する方法であってもよい。
【００３７】
行列指定データは、m行n列のテプリッツ行列を一意に指定するデータであり、第１の入力データは、スカラー積および加算が定義可能な集合上の n次元ベクトルであり、第２の入力データは、前記集合上の m次元ベクトルであり、行列演算ステップで、行列指定データによって定められるm行n列のテプリッツ行列に対して列の基本変形を行い、基本変形後のm行n列の行列と、第１の入力データとの積を計算して m次元ベクトルを導出し、加算ステップで、行列演算ステップで導出された m次元ベクトルと、第２の入力データとを加算する方法であってもよい。
【００３８】
指定データ入力ステップで、テプリッツ行列の行数と列数の両方あるいはいずれか一方を入力され、第１の入力データとして、テプリッツ行列の列数と同数の要素からなるベクトルを入力され、行列指定データとして、テプリッツ行列の列数と行数の和から１減算した数と同数の要素からなるベクトルを入力され、第２の入力データ入力ステップで、第２の入力データとして、テプリッツ行列の行数と同数の要素からなるベクトルを入力され、行列演算ステップで、テプリッツ行列の行数と列数の両方あるいはいずれか一方および行列指定データによってテプリッツ行列の第１列および第１行を特定してテプリッツ行列を定め、当該テプリッツ行列と第１の入力データとの積を計算し、加算ステップで、行列演算ステップでの積算結果と、第２の入力データとを加算する方法であってもよい。
【００３９】
指定データ入力ステップで、テプリッツ行列の行数と列数の両方あるいはいずれか一方を入力され、第１の入力データとして、テプリッツ行列の列数と同数の要素からなるベクトルを入力され、行列指定データとして、テプリッツ行列の列数と行数の和から１減算した数と同数の要素からなるベクトルを入力され、第２の入力データ入力ステップで、第２の入力データとして、テプリッツ行列の行数と同数の要素からなるベクトルを入力され、
行列演算ステップで、テプリッツ行列の行数と列数の両方あるいはいずれか一方および行列指定データによってテプリッツ行列の第１列および第１行を特定してテプリッツ行列を定め、当該テプリッツ行列に対して行の基本変形を行い、基本変形後の行列と第１の入力データとの積を計算し、加算ステップで、行列演算ステップでの積算結果と、第２の入力データとを加算する方法であってもよい。
【００４０】
指定データ入力ステップで、テプリッツ行列の行数と列数の両方あるいはいずれか一方を入力され、第１の入力データとして、テプリッツ行列の列数と同数の要素からなるベクトルを入力され、行列指定データとして、テプリッツ行列の列数と行数の和から１減算した数と同数の要素からなるベクトルを入力され、第２の入力データ入力ステップで、第２の入力データとして、テプリッツ行列の行数と同数の要素からなるベクトルを入力され、行列演算ステップで、テプリッツ行列の行数と列数の両方あるいはいずれか一方および行列指定データによってテプリッツ行列の第１列および第１行を特定してテプリッツ行列を定め、当該テプリッツ行列に対して列の基本変形を行い、基本変形後の行列と第１の入力データとの積を計算し、加算ステップで、行列演算ステップでの積算結果と、第２の入力データとを加算する方法であってもよい。
【発明の効果】
【００４１】
本発明によれば、要素数の小さいε−汎用ハッシュ関数族を実現することができる。また、通信における送信側および受信側で共有される共有鍵を、要素数の小さいε−汎用ハッシュ関数族を用いて生成することができる。
【発明を実施するための最良の形態】
【００４２】
以下、本発明の実施の形態を図面を参照して説明する。なお、既に説明したように、任意の集合S の要素数は、|S| と表すものとする。本発明による汎用ハッシュ関数族計算装置は、ε−汎用ハッシュ関数族を実現する。換言すれば、本発明による汎用ハッシュ関数族計算装置は、ε−汎用ハッシュ関数族に属するハッシュ関数の計算を行う。
【００４３】
実施の形態１．
図１は、本発明による汎用ハッシュ関数族計算装置の第１の実施の形態を示すブロック図である。第１の実施の形態の汎用ハッシュ関数族計算装置は、図１に示すように、入力データ拡大装置１００（入力データ拡大手段）と、ε−Δハッシュ関数計算装置１０１（Δハッシュ関数計算手段）と、加算装置１０２（加算手段）とを備える。そして、本実施の形態の汎用ハッシュ関数族計算装置には、入力データ集合A の元である入力データ１０３と、ε−Δハッシュ関数計算装置１０１で用いられるハッシュ関数を指定するハッシュ関数指定データ１０４とが入力される。また、汎用ハッシュ関数族計算装置は、出力データ１０５を出力する。出力データ１０５は、|A|≦|B|2 となる出力データ集合B であって、群である出力データ集合B の元である。
【００４４】
汎用ハッシュ関数族計算装置は、ε−汎用ハッシュ関数族を実現する装置であるので、入力データ集合A は、ε−汎用ハッシュ関数族に対する入力データの集合であり、出力データ集合B は、ε−汎用ハッシュ関数族の出力データの集合である。
【００４５】
入力データ拡大装置１００には、入力データ集合A の元である入力データ１０３が入力される。そして、入力データ拡大装置１００は、入力データ拡大装置１００自身の出力データとして、二つの出力データを出力する。入力データ拡大装置１００が出力する二つの出力データのうち、ε−Δハッシュ関数計算装置１０１に対して出力する出力データを第１の拡大装置出力と記す。また、入力データ拡大装置１００が出力する二つの出力データのうち、加算装置１０２に対して出力する出力データを第２の拡大装置出力と記す。第１の拡大装置出力および第２の拡大装置出力は、いずれも出力データ集合B の元である。
【００４６】
入力データ拡大装置１００は、以下の二つの条件を満たすように第１の拡大装置出力および第２の拡大装置出力を導出すればよく、以下の二つの条件を満たしていれば、第１の拡大装置出力および第２の拡大装置出力を導出する方法は限定されない。第１の条件は、ε−汎用ハッシュ関数族に対する入力データの集合A の元が入力され、出力される二つの出力データ（第１の拡大装置出力および第２の拡大装置出力）はいずれもε−汎用ハッシュ関数族の出力データの集合B の元であることである。第２の条件は、入力データ拡大装置１００が一対一の関数（写像）として動作することである。すなわち、入力データ１０３として異なるデータが入力データ拡大装置１００に入力された場合、入力データ拡大装置１００は必ず異なるデータを出力することである。従って、入力データ拡大装置１００に、ある入力データが入力されたときの出力データ（第１の拡大装置出力および第２の拡大装置出力）と、別の入力データが入力されたときの出力データ（第１の拡大装置出力および第２の拡大装置出力）とは、必ず異なる。
【００４７】
ε−Δハッシュ関数計算装置１０１には、第１の拡大装置出力およびハッシュ関数指定データ１０４が入力される。ε−Δハッシュ関数計算装置１０１は、第１の拡大装置出力を入力とし、関数集合 HΔの元であってハッシュ関数指定データ１０４によって指定される関数 hΔの計算を行う。そして、その計算結果（第１の拡大装置出力を入力とする関数 hΔのハッシュ値）を加算装置１０２に出力する。この計算結果は、データ出力集合B の元である。関数 hΔは、以下のような特徴を有する関数集合 HΔの元である。関数集合 HΔは、出力データ集合B の任意の元d と、出力データ集合B の任意の異なる二つの元x,y に対して、h(x)-h(y)=d となるようなh∈HΔの個数が、 |HΔ|・ε以下となるという特徴を有する。すなわち、 HΔの元のうち、h(x)-h(y)=d を満足するhの個数が |HΔ|・ε以下となるという特徴を有する。ここで、εは、ハッシュ関数の安全性を表す定数であり、予め要求される安全性に基づいて決定される。また、出力データ集合B は、HΔの定義域集合であり、また、HΔの定義域集合の値域集合である。
【００４８】
加算装置１０２には、第２の拡大装置出力と、ε−Δハッシュ関数計算装置１０１による計算結果とが入力される。そして、加算装置１０２は、入力された二つのデータ（第２の拡大装置出力、ε−Δハッシュ関数計算装置１０１による計算結果）の集合B 上での加算を行い、その加算結果を出力データ１０５として出力する。
【００４９】
次に、動作について説明する。
図２は、本実施の形態の汎用ハッシュ関数族計算装置の動作の例を示すフローチャートである。まず、入力データ拡大装置１００に入力データ１０３が入力され、また、ε−Δハッシュ関数計算装置１０１にハッシュ関数指定データ１０４が入力される（ステップＳ１１）。入力データ拡大装置１００は、入力データ１０３に基づいて、第１の拡大装置出力および第２の拡大装置出力を導出し、第１の拡大装置出力をε−Δハッシュ関数計算装置１０１に出力し、第２の拡大装置出力を加算装置１０２に出力する（ステップＳ１２）。ε−Δハッシュ関数計算装置１０１は、第１の拡大装置出力を入力とし、ハッシュ関数指定データ１０４によって指定される関数 hΔの計算を行い、その計算結果を加算装置１０２に出力する（ステップＳ１３）。加算装置１０２は、第２の拡大装置出力と、ε−Δハッシュ関数計算装置１０１による計算結果との、集合B 上での加算を行い、その加算結果を出力データ１０５として出力する（ステップＳ１４）。
【００５０】
以下に、ステップＳ１２で入力データ拡大装置１００が第１の拡大装置出力および第２の拡大装置出力を導出する例について説明する。入力データ拡大装置１００に、入力データ１０３として nビットのデータが入力されるものとする。また、入力データ拡大装置１００は、第１の拡大装置出力および第２の拡大装置出力として、それぞれ mビットのデータを出力するものとする。ただし、 n≦2・mという関係が成立しているものとする。また、出力データ集合は、 mビットのデータの集合であるものとする。
【００５１】
入力データ拡大装置１００は、ステップＳ１２において、例えば、 nビットの入力データ１０３の上位 mビットのデータを第１の拡大装置出力とし、下位 mビットのデータを第２の拡大装置出力とする。あるいは、 nビットの入力データ１０３の下位 mビットのデータを第１の拡大装置出力とし、上位 mビットのデータを第２の拡大装置出力としてもよい。以下、このような第１の拡大装置出力および第２の拡大装置出力の導出態様を第１の導出態様と記す。
【００５２】
また、入力データ拡大装置１００は、 ステップＳ１２において、nビットの入力データ１０３の上位 mビットのデータを第１の拡大装置出力とし、入力データ１０３の最上位から数えて m+1番目のビットから n番目までのビット列に2・m-nビットの０のビット列を連結した mビットのデータを第２の拡大装置出力としてもよい。あるいは、 nビットの入力データ１０３の上位 mビットのデータを第２の拡大装置出力とし、入力データ１０３の最上位から数えて m+1番目のビットから n番目までのビット列に2・m-nビットの０のビット列を連結した mビットのデータを第１の拡大装置出力としてもよい。以下、このような第１の拡大装置出力および第２の拡大装置出力の導出態様を第２の導出態様と記す。
【００５３】
入力データ拡大装置１００が第１の導出態様または第２の導出態様で第１の拡大装置出力および第２の拡大装置出力を導出する場合、ハッシュ関数指定データ１０４として mビットのデータが入力される。また、この場合、ε−Δハッシュ関数計算装置１０１は、 mビットのデータであるハッシュ関数指定データ１０４と、第１の拡大装置出力とのガロア体GF(2m)上での積算を計算し、その計算結果を加算装置１０２に出力する。また、加算装置１０２は、ε−Δハッシュ関数計算装置１０１の計算結果と、 mビットのデータである第２の拡大装置出力とのガロア体GF(2m)上での加算を計算し、その加算結果を出力データ１０５として出力する。
【００５４】
ここで示した第１の導出態様および第２の導出態様は、いずれも入力データ拡大装置１００の動作の例示である。既に説明した第１の条件および第２の条件を満たしていれば、第１の拡大装置出力および第２の拡大装置出力を導出する方法は限定されない。
【００５５】
なお、第１の導出態様や第２の導出態様では、入力データ１０３として nビットのデータが入力されるものとして説明した。入力データ１０３としてどのような表現のデータが入力され、出力データ１０５としてどのような表現のデータが出力されるかは、汎用ハッシュ関数族計算装置の設計により異なり、入力データ１０３や出力データ１０５の表現は特定の表現に限定されない。例えば、後述する第１の実施例で示すように、入力データ１０３は n次元のベクトル表現で表されたガロア体GF(qn)の元であり、出力データ１０５は、 m次元のベクトル表現で表されたガロア体GF(qm)の元であってもよい。また、ハッシュ関数指定データ１０４の表現も特定の表現に限定されない。
【００５６】
本実施の形態によれば、ε−Δハッシュ関数集合（上述の関数集合HΔ ）として、要素数の小さい関数集合を選択することにより、要素数の小さいε−汎用ハッシュ関数族を実現することができる。そして、要素数が最小となるε−Δ関数集合を選択すれば、ε−汎用ハッシュ関数族の要素数を最小にすることができる。
【００５７】
本実施の形態において、入力データ拡大装置１００、ε−Δハッシュ関数計算装置１０１、および加算装置１０２は、それぞれの機能を有するハードウェアであってもよい。あるいは、入力データ拡大装置１００、ε−Δハッシュ関数計算装置１０１、および加算装置１０２は、汎用ハッシュ関数族計算プログラムに従って動作するコンピュータによって実現されてもよい。例えば、汎用ハッシュ関数族計算プログラムが記憶装置に記憶され、コンピュータによって読み取られ、コンピュータが汎用ハッシュ関数族計算プログラムに従って動作することで、入力データ拡大装置１００、ε−Δハッシュ関数計算装置１０１、および加算装置１０２として機能してもよい。
【００５８】
実施の形態２．
図３は、本発明による汎用ハッシュ関数族計算装置の第２の実施の形態を示すブロック図である。第２の実施の形態の汎用ハッシュ関数族計算装置は、図３に示すように、積算装置２００（積算手段）と、データ変換装置２０１（データ変換手段）と、加算装置２０２（加算手段）とを備える。そして、本実施の形態の汎用ハッシュ関数族計算装置には、第１の入力データ２０３と、第２の入力データ２０４と、ハッシュ関数を指定するハッシュ関数指定データ２０５とが入力される。また、汎用ハッシュ関数族計算装置は、群である出力データ集合B の元である出力データ２０６を出力する。本実施の形態において、第１の入力データ２０３は、加算および積算が定義できる体である集合A （第１の集合）の元である。また、第２の入力データ２０４は、出力データ集合B （第２の集合）の元である。また、ハッシュ関数指定データ２０５は、集合A の元である。本実施の形態では、第１の入力データ２０３と第２の入力データ２０４との組み合わせが入力データ集合の元となる。よって、入力データ集合の要素数は、|A|・|B|と表すことができる。
【００５９】
積算装置２００には、第１の入力データ２０３とハッシュ関数指定データ２０５とが入力される。そして、積算装置２００は、第１の入力データ２０３とハッシュ関数指定データ２０５との体A 上での積算を行い、その積算結果をデータ変換装置に出力する。
【００６０】
データ変換装置２０１は、上への写像であり、かつ線形性を満たす写像を行う装置である。データ変換装置２０１には、積算装置２００による積算結果が入力される。そして、データ変換装置２０１は、その積算結果を出力データ集合B の元に変換し、変換結果を加算装置２０２に出力する。データ変換装置２０１による変換は、上への写像であり、かつ線形性を満たす写像であって、積算装置２００による積算結果を出力データ集合B の元に変換するものであればよく、そのような条件を満たしている変換であれば、特に限定されない。
【００６１】
加算装置２０２には、データ変換装置２０１が出力した変換結果と、第２の入力データ２０４とが入力される。加算装置２０２は、データ変換装置２０１が出力した変換結果と第２の入力データ２０４との集合B 上での加算を行い、その加算結果を出力データ２０６として出力する。
【００６２】
次に、動作について説明する。
図４は、本実施の形態の汎用ハッシュ関数族計算装置の動作の例を示すフローチャートである。まず、積算装置２００に第１の入力データ２０３およびハッシュ関数指定データ２０５が入力され、加算装置２０２に第２の入力データ２０４が入力される（ステップＳ２１）。積算装置２００は、第１の入力データ２０３とハッシュ関数指定データ２０５との体A 上での積算を行い、その積算結果をデータ変換装置に出力する（ステップＳ２２）。次にデータ変換装置２０１は、ステップＳ２２の積算結果を出力データ集合B の元に変換する（ステップＳ２３）。そして、加算装置２０２は、ステップＳ２３の変換結果と第２の入力データ２０４との集合B 上での加算を行い、その加算結果を出力データ２０６として出力する（ステップＳ２４）。
【００６３】
なお、第１の入力データ２０３や第２の入力データ２０４としてどのような表現のデータが入力され、出力データ２０６としてどのような表現のデータが出力されるかは、汎用ハッシュ関数族計算装置の設計により異なり、第１の入力データ２０３、第２の入力データ２０４、出力データ２０６の表現は特定の表現に限定されない。同様に、ハッシュ関数指定データ２０５の表現も特定の表現に限定されない。
【００６４】
本実施の形態によれば、ε=1/|B|、入力データ集合の要素数が|A|・|B|、出力データ集合の要素数が|B| 、関数集合の要素数が |A|となるようなε−汎用ハッシュ関数族を実現することができる。そして、要素数が最小となるようなε−汎用ハッシュ関数族を実現することができる。
【００６５】
本実施の形態において、積算装置２００、データ変換装置２０１、および加算装置２０２は、それぞれの機能を有するハードウェアであってもよい。あるいは、積算装置２００、データ変換装置２０１、および加算装置２０２は、汎用ハッシュ関数族計算プログラムに従って動作するコンピュータによって実現されてもよい。例えば、汎用ハッシュ関数族計算プログラムが記憶装置に記憶され、コンピュータによって読み取られ、コンピュータが汎用ハッシュ関数族計算プログラムに従って動作することで、積算装置２００、データ変換装置２０１、および加算装置２０２として機能してもよい。
【００６６】
実施の形態３．
図５は、本発明による汎用ハッシュ関数族計算装置の第３の実施の形態を示すブロック図である。第３の実施の形態の汎用ハッシュ関数族計算装置は、図５に示すように、テプリッツ行列積算装置３００（テプリッツ行列演算手段）と、加算装置３０１（加算手段）とを備える。そして、本実施の形態の汎用ハッシュ関数族計算装置には、第１の入力データ３０２と、第２の入力データ３０３と、行列指定データ３０４とが入力される。また、汎用ハッシュ関数族計算装置は、出力データ３０５を出力する。
【００６７】
第１の入力データ３０２は、スカラー積および加算が定義できる集合A上のn次元ベクトルである。すなわち、第１の入力データ３０２は、集合Aのn個の元からなるベクトルである。第２の入力データ３０３は、集合A上のm次元ベクトルである。すなわち、第２の入力データ３０３は、集合Aのm個の元からなるベクトルである。本実施の形態では、第１の入力データ３０２と第２の入力データ３０３との組み合わせが入力データ集合の元となる。
【００６８】
また、行列指定データ３０４は、m行n列行列Ai,j (1≦i≦m,1≦j≦n)のうち、k-i=l-j を満たす任意の i,j,k,l (1≦i,k≦m,1≦j,l≦n)に対して Ai,j=Ak,l を満足する行列であるテプリッツ行列を一意に指定するA上の n+m-1 次元ベクトルである。ここでは、テプリッツ行列の行数、列数は、それぞれm行、n列であり、m,n の値は固定値であるものとして説明する。テプリッツ行列は、第１行の各要素および第１列の各要素が決定されれば、一意に定められる。行列指定データ３０４は n+m-1次元ベクトルであり、この n+m-1次元ベクトルの n+m-1個の要素によりm行n列行列の第１行および第１列の各要素を定めることができる。よって、行列指定データ３０４により、テプリッツ行列を一意に指定することができる。
【００６９】
例えば、入力される行列指定データ３０４（ n+m-1次元ベクトル）の最初の m番目までの要素がテプリッツ行列の第１列の要素であり、 m+1番目から n+m-1番目までの要素がテプリッツ行列の第１行の要素のうち１列目の要素を除いた要素であるものとすると予め定めておくことによって、行列指定データ３０４からテプリッツ行列の第１行および第１列が定まる。なお、この場合、行列指定データ３０４の１番目の要素は、テプリッツ行列の第１行第１列の要素となる。その結果、テプリッツ行列を定めることができる。
【００７０】
出力データ３０５は、集合A上のm次元ベクトルである。
【００７１】
テプリッツ行列積算装置３００には、第１の入力データ３０２と行列指定データ３０４とが入力される。テプリッツ行列積算装置３００は、行列指定データ３０４によって指定されるテプリッツ行列（行列指定データ３０４によって一意に定められるテプリッツ行列）と第１の入力データ３０２との積算を行う。テプリッツ行列積算装置３００は、この積算結果である集合A上のm次元ベクトルを加算装置３０１に出力する。
【００７２】
加算装置３０１には、テプリッツ行列積算装置３００の出力である m次元ベクトルと、集合A上のm次元ベクトルである第２の入力データ３０３とが入力される。そして、加算装置３０１は、入力された二つのデータの m次元ベクトル上での加算を行い、 m次元ベクトル上での加算結果を出力データ３０５として出力する。
【００７３】
次に、動作について説明する。
図６は、本実施の形態の汎用ハッシュ関数族計算装置の動作の例を示すフローチャートである。まず、テプリッツ行列積算装置３００に第１の入力データ３０２および行列指定データ３０４が入力され、加算装置３０１に第２の入力データ３０３が入力される（ステップＳ３１）。テプリッツ行列積算装置３００は、行列指定データ３０４によって指定されるテプリッツ行列と第１の入力データ３０２との積算を行い、その積算結果を加算装置３０１に出力する（ステップＳ３２）。加算装置３０１は、ステップＳ３２の積算結果と第２の入力データ３０３との m次元ベクトル上での加算を行い、その加算結果を出力データ３０５として出力する。
【００７４】
第３の実施の形態によれば、ε=1/|A|m 、入力データ集合の要素数が|A|n+m、出力データ集合の要素数が|A|m、関数集合の要素数が|A|n+m-1となるようなε−汎用ハッシュ関数族を実現することができる。そして、非特許文献１に記載された方式よりも要素数の小さいε−汎用ハッシュ関数族を実現することができる。
【００７５】
次に、第３の実施の形態の変形例について説明する。
上記の第３の実施の形態では、テプリッツ行列積算装置３００が、行列指定データ３０４によって指定されるテプリッツ行列と第１の入力データ３０２との積算を行うものとして説明した。テプリッツ行列積算装置３００は、行列指定データ３０４によってテプリッツ行列を定めた後、そのテプリッツ行列に対して行の基本変形あるいは列の基本変形を施し、基本変形が施された後の行列と第１の入力データ３０２との積算を行い、その積算結果を加算装置３０１に出力してもよい。加算装置３０１は、その積算結果と、第２の入力データ３０３との加算を行えばよい。
【００７６】
行の基本変形として、以下の変形が挙げられる。第１に、行列（ここではテプリッツ行列）の第 a行と第 b行とを交換する変形が挙げられる。第２に、行列（ここではテプリッツ行列）の第 a行の各要素をｃ倍する変形が挙げられる。第３に、行列（ここではテプリッツ行列）の第 a行の各要素に、第 b行の各要素をｃ倍した値を加算する変形が挙げられる。ここでｃは、行列の各要素の集合の元であってｃ≠０である値であれば任意の値である。また、ここでは、aおよびbは、1≦a≦m，1≦b≦mを満たす自然数であればよい。テプリッツ行列積算装置３００は、行列指定データ３０４によって指定されるテプリッツ行列に対して、上記の３種類のいずれかの基本変形（行の基本変形）を行い、基本変形後の行列と第１の入力データ３０２との積算を行えばよい。
【００７７】
列の基本変形として、以下の変形が挙げられる。第１に、行列（ここではテプリッツ行列）の第 a列と第 b列とを交換する変形が挙げられる。第２に、行列（ここではテプリッツ行列）の第 a列の各要素をｃ倍する変形が挙げられる。第３に、行列（ここではテプリッツ行列）の第 a列の各要素に、第 b列の各要素をｃ倍した値を加算する変形が挙げられる。ここでｃは、行列の各要素の集合の元であってｃ≠０である値であれば任意の値である。また、ここでは、aおよびbは、1≦a≦n，1≦b≦nを満たす自然数であればよい。テプリッツ行列積算装置３００は、行列指定データ３０４によって指定されるテプリッツ行列に対して、上記の３種類のいずれかの基本変形（列の基本変形）を行い、基本変形後の行列と第１の入力データ３０２との積算を行えばよい。
【００７８】
本変形例でも第３の実施の形態と同様の効果が得られる。
【００７９】
次に、第３の実施の形態の他の変形例について説明する。
第３の実施の形態および上述の変形例では、テプリッツ行列の行数、列数は、それぞれm行、n列であり、m,n の値は固定値であるものとして説明した。テプリッツ行列の列数および行数が固定値でなく、入力されるデータに応じてテプリッツ行列積算装置３００がテプリッツ行列の列数および行数を決定してもよい。
【００８０】
本変形例では、テプリッツ行列積算装置３００には、第１の入力データ３０２および行列指定データ３０４の他に、テプリッツ行列の行数および列数も入力される。ただし、入力される行数をm、入力され列数をnとした場合、行列指定データ３０４として、スカラー積および加算が定義できる集合A上の n+m-1次元のベクトルが入力される。すなわち、入力されるテプリッツ行列の行数m、列数n、およびベクトルである行列指定データ３０４の要素数（ rとする。）の間には、r=n+m-1 という関係が成立する。
【００８１】
また、第１の入力データ３０２として、集合A上のn次元ベクトルがテプリッツ行列積算装置３００に入力され、第２の入力データ３０３として、集合A上のm次元ベクトルが加算装置３０１に入力される。
【００８２】
テプリッツ行列積算装置３００は、行列指定データ３０４が入力され、また、行数mおよび列数nが入力されると、例えば、ベクトルである行列指定データ３０４の最初の m番目までの要素がテプリッツ行列の第１列の要素であり、 m+1番目から n+m-1番目までの要素がテプリッツ行列の第１行の要素のうち１列目の要素を除いた要素であると決定する。また、この場合、行列指定データ３０４の１番目の要素は、テプリッツ行列の第１行第１列の要素である。この結果、テプリッツ行列積算装置３００は、テプリッツ行列の第１行および第１列を定めることができる。そして、テプリッツ行列積算装置３００は、決定した第１行および第１列に基づいてテプリッツ行列を定める。
【００８３】
入力された行列指定データ３０４、行数mおよび列数nによってテプリッツ行列を決定した後、テプリッツ行列積算装置３００は、テプリッツ行列と第１の入力データ３０２との積算を行えばよい。また、加算装置３０１は、その積算結果と第２の入力データ３０３との加算を行い、加算結果を出力データ３０５として出力すればよい。
【００８４】
また、本変形例において、入力された行列指定データ３０４、行数mおよび列数nによってテプリッツ行列を決定した後、テプリッツ行列積算装置３００は、そのテプリッツ行列に対して行の基本変形または列の基本変形を施し、基本変形後の行列と第１の入力データ３０２との積算を行い、その積算結果を加算装置３０１に出力してもよい。加算装置３０１は、その積算結果と、第２の入力データ３０３との加算を行えばよい。
【００８５】
また、入力されるテプリッツ行列の行数m、列数n、およびベクトルである行列指定データ３０４の要素数r の間には、r=n+m-1 という関係が成立する。従って、行列指定データ３０４が入力されれば、行数と列数のいずれか一方が入力されれば、他方を導出することができる。
【００８６】
例えば、行列指定データ３０４および列数が入力されれば、テプリッツ行列積算装置３００は、ベクトルである行列指定データ３０４の要素数rと列数nとを用いて、m=r-n+1 という計算によって行数m を導出することができる。従って、本変形例において、行数と列数のうち列数が入力され、行数が入力されなくてもよい。この場合、テプリッツ行列積算装置３００が行列指定データ３０４の要素数r と列数n から行数m を導出する。
【００８７】
同様に、例えば、行列指定データ３０４および行数が入力されれば、テプリッツ行列積算装置３００は、ベクトルである行列指定データ３０４の要素数rと行数mとを用いて、n=r-m+1 という計算によって列数n を導出することができる。従って、本変形例において、行数と列数のうち行数が入力され、列数が入力されなくてもよい。この場合、テプリッツ行列積算装置３００が行列指定データ３０４の要素数r と行数m から列数n を導出する。
【００８８】
このように、本変形例では、テプリッツ行列の行数mと列数nの双方がテプリッツ行列積算装置３００に入力されてもよいし、また、テプリッツ行列の行数mと列数nのいずれか一方が入力されてもよい。
【００８９】
本変形例でも第３の実施の形態と同様の効果が得られる。また、本変形例では、テプリッツ行列の行数および列数を自由に調整することができる。
【００９０】
本実施の形態において、テプリッツ行列積算装置３００および加算装置３０１は、それぞれの機能を有するハードウェアであってもよい。あるいは、テプリッツ行列積算装置３００および加算装置３０１は、汎用ハッシュ関数族計算プログラムに従って動作するコンピュータによって実現されてもよい。例えば、汎用ハッシュ関数族計算プログラムが記憶装置に記憶され、コンピュータによって読み取られ、コンピュータが汎用ハッシュ関数族計算プログラムに従って動作することで、テプリッツ行列積算装置３００および加算装置３０１として機能してもよい。
【実施例１】
【００９１】
次に、第１の実施例を、図１を参照して説明する。本実施例は、第１の実施の形態の実施例である。また、本実施例の説明において、n,m は自然数であり、q は素数または素数をべき乗した整数であるものとする。
【００９２】
本実施例において、入力データ１０３はガロア体GF(qn)の元であり、出力データ１０５はガロア体GF(qm)の元であり、 n≦2・mを満足するものとする。ガロア体GF(qn)は、第１の実施の形態で述べた入力データ集合A に相当し、ガロア体GF(qm)は、第１の実施の形態で述べた出力データ集合B に相当する。
【００９３】
一般に、ガロア体GF(qn)の元を xとすると、元 x∈GF(qn)は、ガロア体 GF(q)＝{0,1,2,3,...,q-1} の n個の元を用いて(x1,x2,...,xn)と表すことができる。各xi（0≦i≦n ）は、0からq-1のいずれかである。この(x1,x2,...,xn)は、一般に元 xのベクトル表現と呼ばれる。なお、ガロア体 GF(q)の要素数は q個であり、ガロア体GF(qn)の元 xは、ガロア体 GF(q)の元を用いた n次元ベクトルとして表されるので、ガロア体GF(qn)の要素数（すなわち、入力データ集合の要素数）は、qnとなる。ここでは、ガロア体GF(qn)の元について説明したが、ガロア体GF(qm)の元についても同様であり、ガロア体GF(qm)の要素数（出力データ集合の要素数）は、qmとなる。
【００９４】
また、本実施例では、ε−Δハッシュ関数集合 HΔとして、要素数がqmとなる関数集合 HΔ={hk| h_k(x)=k×x, k∈GF(qm)} を用いるものとする。そして、ガロア体GF(qm)の元である k（ k∈GF(qm)）が、ハッシュ関数族の要素を一意に指定するハッシュ関数指定データ１０４として入力されるものとする。
【００９５】
入力データ拡大装置１００には、ベクトル表現(x1,x2,...,xn)で表されるガロア体GF(qn)の元 xの元が入力データ１０３として入力される。入力データ拡大装置１００は、元 xから第１の拡大装置出力（y1とする。）および第２の拡大装置出力（y2とする。）を生成する。y1およびy2は、ガロア体GF(qm)の元であり（すなわち、 y1,y2∈GF(qm)）、 m次元ベクトルのベクトル表現で表すことができる。本実施例では、入力データ拡大装置１００は、元 xの 1番目の要素から m番目の要素までの m個の要素からなるベクトルで表したGF(qm)の元をy1とする。すなわち、入力データ拡大装置１００は、y1=(x1,x2,...,xm) とする。また、入力データ拡大装置１００は、元 xの m+1番目の要素から n番目の要素までの要素に、2・m-n個の“０”を連結したベクトルで表したGF(qm)の元をy2とする。すなわち、入力データ拡大装置１００は、y2=(xm+1,xm+2,...,xn,0,0,...,0) とする。そして、入力データ拡大装置１００は、第１の拡大装置出力としてy1=(x1,x2,...,xm) をε−Δハッシュ関数計算装置１０１に出力し、第２の拡大装置出力としてy2=(xm+1,xm+2,...,xn,0,0,...,0) を加算装置１０２に出力する。
【００９６】
なお、本実施例では、ガロア体GF(qn)の元 xの元が入力データ１０３として入力され、入力データ拡大装置１００は、ガロア体GF(qm)の２つの元y1,y2 を出力する。そして、ここで条件となるのは、入力されるx の表現を(x1,x2,...,xn)としたときに、２つの出力の表現が(x1,x2,...,xm), (xm+1,xm+2,...,xn,0,0,...,0)となることである。ただし、 x,y1,y2や出力データ１０５の表現形式は、特定の表現形式に限定されるわけではない。
【００９７】
ε−Δハッシュ関数計算装置１０１には、第１の拡大装置出力であるy1=(x1,x2,...,xm) が入力される。また、ε−Δハッシュ関数計算装置１０１には、ガロア体GF(qm)の元である k（ k∈GF(qm)）がハッシュ関数指定データ１０４として入力される。ε−Δハッシュ関数計算装置１０１は、y1と kとをGF(qm)上で積算し、その積算結果であるy1×k を加算装置１０２に出力する。
【００９８】
GF(qm)上の積算について説明する。f(x)を GF(q)上の元を係数として持つ m次既約多項式（ m次多項式であって因数分解できないもの）とする。このとき、GF(qm)の二つの元a=(a1,a2,...,am), b=(b1,b2,...,bm) の積算結果をc=(c1,c2,...,cm)とすると、ci（ 1≦i≦m）は、以下のように表される。
【００９９】
ci = (a1+a2 x+a3 x2+…+amxm-1)(b1+b2x+b3x2+…+bmxm-1) mod f(x)のi-1次の係数
【０１００】
なお、このようなGF(qm)上の積算は公知である。
【０１０１】
加算装置１０２には、第２の拡大装置出力であるy2=(xm+1,xm+2,...,xn,0,0,...,0) と、ε−Δハッシュ関数計算装置１０１による積算結果y1×k とが入力される。加算装置１０２は、y2とy1×k とをGF(qm)上で加算し、その加算結果を出力データ１０５として出力する。
【０１０２】
GF(qm)上の加算について説明する。GF(qm)の二つの元a=(a1,a2,...,am), b=(b1,b2,...,bm) のGF(qm)上での加算を行うときには、 a,bの各要素をGF(q) 上、つまり法（modulo）上で行う。よって、GF(qm)の二つの元a=(a1,a2,...,am), b=(b1,b2,...,bm) の加算結果a+b のベクトル表現は、(a1+b1 mod q, a2+b2 mod q,...,am+bm mod q)となる。なお、このようなGF(qm)上の加算は公知である。
【０１０３】
本実施例では、入力データ集合の要素数は、qnとなり、出力データ集合の要素数はqmとなり、ε−汎用ハッシュ関数族の要素数はqmとなる。
【実施例２】
【０１０４】
次に、第２の実施例を、図３を参照して説明する。本実施例は、第２の実施の形態の実施例である。本実施例の説明においても、n,m は自然数であり、q は素数であるものとする。
【０１０５】
本実施例において、第１の入力データ２０３はガロア体GF(qn)の元であり、第２の入力データ２０４はガロア体GF(qm)の元である。ハッシュ関数指定データ２０５は、ガロア体GF(qn)の元である。出力データ２０６は、ガロア体GF(qm)の元である。第１の入力データ２０３およびハッシュ関数指定データ２０５は、それぞれガロア体 GF(q)上の n次元ベクトル（もしくは列）で表現される。また、第２の入力データ２０４および出力データ２０６は、それぞれガロア体 GF(q)上の m次元ベクトル（もしくは列）で表現される。ただし、本実施例において、ハッシュ関数指定データ２０５は、GF(qn)の元であればよく、その表現形式は特定の表現形式に限定されるわけではない。第１の入力データ２０３、第２の入力データ２０４、出力データ２０６の表現形式についても、特定の表現形式に限定されるわけではない。
【０１０６】
なお、ガロア体GF(qn)は、第２の実施の形態で述べた集合A に相当する。また、ガロア体GF(qm)は、第２の実施の形態で述べた出力データ集合B に相当する。また、第２の実施の形態で述べたように、第１の入力データ２０３と第２の入力データ２０４との組み合わせが入力データ集合の元となる。よって、入力データ集合の要素数は、ガロア体GF(qn)の要素数とガロア体GF(qm)の要素数との積である。
【０１０７】
また、本実施例では、データ変換装置２０１として、GF(qn)の元y=(y1,y2,...,yn)が入力されたときに、そのy をGF(qm)の元z=(z1,z2,...,zm)に変換し、z=(z1,z2,...,zm)を出力する装置を用いる。
【０１０８】
本実施の形態では、積算装置２００には、GF(qn)の元である第１の入力データ２０３およびハッシュ関数指定データ２０５が入力される。第１の入力データ２０３として入力されるGF(qn)の元をx1とし、ハッシュ関数指定データ２０５として入力されるGF(qn)の元を kとする。積算装置２００は、入力された二つのデータx1と kとをGF(qn)上で積算し、その積算結果をデータ変換装置２０１に出力する。x1と kとのGF(qn)上での積算結果をy とし、y は、(y1,y2,...,yn)と表されるとする。すなわち、y=x1×k=(y1,y2,...,yn)である。
【０１０９】
データ変換装置２０１には、積算結果y=(y1,y2,...,yn)が入力される。データ変換装置２０１は、その積算結果を、GF(qn)の元z=(z1,z2,...,zm)に変換し、元z=(z1,z2,...,zm)を加算装置２０２に出力する。
【０１１０】
加算装置２０２には、データ変換装置２０１による変換結果z と、第２の入力データ２０４（x2とする。）とが入力される。加算装置２０２は、z とx2とを GF(qm)上で加算し、その加算結果であるz+x2を出力データ２０６として出力する。
【０１１１】
本実施例では、入力データ集合の要素数は、qn+mとなり、出力データ集合の要素数は、qmとなり、ε−汎用ハッシュ関数族の要素数はqnとなる。ε−汎用ハッシュ関数族の要素数（qn）が入力データ集合の要素数（qn+m）を出力データ集合の要素数（qm）で除算した値と等しくなっており、本実施例では要素数が最小となるε−汎用ハッシュ関数族を実現していることが確かめられる。 
【実施例３】
【０１１２】
次に、第３の実施例を、図５を参照して説明する。本実施例は、第３の実施の形態の実施例である。本実施例では、テプリッツ行列の行数、列数は、それぞれm行、n列であり、m,n の値は固定値であるものとする。
【０１１３】
本実施例において、第１の入力データ３０２は、ガロア体GF(q)上のn次元ベクトル（すなわち、ガロア体GF(q)のn個の元からなるベクトル）である。第２の入力データ３０３は、ガロア体GF(q)上のm次元ベクトル（すなわち、ガロア体GF(q)のm個の元からなるベクトル）である。また、出力データ３０５は、GF(q)上のm次元ベクトルである。
【０１１４】
また、本実施例では、 GF(q)上のm行n列テプリッツ行列を指定する行列指定データ３０４を、 GF(q)上の m+n-1次元ベクトル T=(t1,1,t2,1,t3,1,..., tm,1,t1,2,t1,3,...,t1,n)で定義する。このm+n-1次元ベクトルTの要素であるti,jは、テプリッツ行列のi行j列の要素を表している。よって、ベクトルT が入力されれば、テプリッツ行列積算装置３００は、ベクトルTのn+m-1個の要素によりm行n列行列の第１行および第１列の各要素を定めることができる。そして、テプリッツ行列の性質から、行列の第１行目および第１列目の各要素を定めれば、テプリッツ行列積算装置３００は、テプリッツ行列を一意に定めることができる。
【０１１５】
第１の入力データ３０２（ガロア体GF(q)上のn次元ベクトル）の集合の要素数は、qnである。また、第２の入力データ３０３（ガロア体GF(q)上のm次元ベクトル）の集合の要素数は、qmである。第１の入力データ３０２と第２の入力データ３０３との組み合わせが入力データ集合の元となるので、入力データ集合の要素数は、qn+mである。また、テプリッツ行列を一意に定める行列指定データ３０４（ GF(q)上の m+n-1次元ベクトル）の集合の要素数（すなわち、ε−汎用ハッシュ関数族の要素数）は、qm+n-1である。
【０１１６】
テプリッツ行列積算装置３００には、GF(q)上のn次元ベクトルである第１の入力データ３０２（x1とする。）が入力され、また、行列指定データ３０４として GF(q)上の m+n-1次元ベクトル Tもテプリッツ行列積算装置３００に入力される。テプリッツ行列積算装置３００は、ベクトル Tからm行n列のテプリッツ行列（MTと記す。）を定める。そして、テプリッツ行列積算装置３００は、テプリッツ行列MTと第１の入力データ３０２であるx1との積算を行い、その積算結果であるMT・x1を加算装置３０１に出力する。
【０１１７】
加算装置３０１には、テプリッツ行列積算装置３００による積算結果MT・x1が入力される。また、加算装置３０１には、GF(q)上のm次元ベクトルである第２の入力データ３０３（x2とする。）が入力される。加算装置３０１は、入力された二つのデータ（MT・x1およびx2）について、GF(q)上のm次元ベクトル上での加算を行い、その加算結果MT・x1＋x2を出力データ３０５として出力する。
【０１１８】
本実施例では、入力データ集合の要素数は、qn+mとなり、出力データ集合の要素数は、qmとなり、ε−汎用ハッシュ関数族の要素数はqn+m-1となる。ε−汎用ハッシュ関数族の要素数（qn+m-1）が入力データ集合の要素数（qn+m）よりも小さくなっていることから、非特許文献1 に記載された方式よりも要素数の小さいε−汎用ハッシュ関数族を実現していることが確かめられる。 
【実施例４】
【０１１９】
第４の実施例では、第１の実施の形態の汎用ハッシュ関数族計算装置を用いた共有鍵生成システムを示す。図７は、共有鍵生成システムの構成例を示すブロック図である。図７に示す共有鍵生成システムは、第１の実施の形態の汎用ハッシュ関数族計算装置と量子通信路を用いて、秘密鍵の共有を実現する。また、本実施例で用いられる量子通信路は、 1ビットの情報の伝送に単一光子を用いるものであり、量子通信路の途中で、第三者による盗聴が行われた場合には、送信者と受信者の両者の情報を比較することにより、盗聴が行われた事実、およびどの程度の量の情報が盗聴されたかを検知可能であるという特徴を有する。
【０１２０】
本実施例において、共有鍵生成システムは、送信側の装置（送信者の装置）として、乱数発生器４００と、第１の量子通信機４０１と、第１の計算機４０２と、第１の記憶装置４０３と、第１の汎用ハッシュ関数計算装置４２０とを備える。また、第１の記憶装置４０３は、量子通信路で発生した誤りの訂正を行うための誤り訂正プログラム（第１の誤り訂正プログラム４０８）を記憶している。第１の計算機４０２は、第１の誤り訂正プログラム４０８を読み込み、第１の誤り訂正プログラム４０８に従って誤り訂正処理を実行する。
【０１２１】
また、本実施例において、共有鍵生成システムは、受信側の装置（受信者の装置）として、第２の量子通信機４０５と、第２の計算機４０６と、第２の記憶装置４０７と、第２の汎用ハッシュ関数計算装置４３０とを備える。また、第２の記憶装置４０７は、量子通信路で発生した誤りの訂正を行うための誤り訂正プログラム（第２の誤り訂正プログラム４０９）を記憶している。第２の計算機４０６は、第２の誤り訂正プログラム４０９を読み込み、第２の誤り訂正プログラム４０９に従って誤り訂正処理を実行する。
【０１２２】
第１の汎用ハッシュ関数計算装置４２０および第２の汎用ハッシュ関数計算装置４３０は、いずれも第１の実施の形態の汎用ハッシュ関数族計算装置である。第１の汎用ハッシュ関数計算装置４２０は、第１の入力データ拡大装置４２１と、第１のε−Δハッシュ関数計算装置４２３と、第１の加算装置４２５とを備える。第２の汎用ハッシュ関数計算装置４３０は、第２の入力データ拡大装置４３１と、第２のε−Δハッシュ関数計算装置４３３と、第２の加算装置４３５とを備える。第１の入力データ拡大装置４２１および第２の入力データ拡大装置４３１は、いずれも第１の実施の形態で説明した入力データ拡大装置１００（図１参照。）に相当する。第１のε−Δハッシュ関数計算装置４２３および第２のε−Δハッシュ関数計算装置４３３は、いずれも第１の実施の形態で説明したε−Δハッシュ関数計算装置１０１（図１参照。）に相当する。また、第１の加算装置４２５および第２の加算装置４３５は、いずれも第１の実施の形態で説明した加算装置１０２（図１参照。）に相当する。
【０１２３】
ただし、本実施例では、第１の入力データ拡大装置４２１および第２の入力データ拡大装置４３１には、いずれも入力データとして nビットのデータが入力される。また、第１の入力データ拡大装置４２１および第２の入力データ拡大装置４３１は、いずれも第１の拡大装置出力および第２の拡大装置出力として mビットのデータを出力する。ここで、 n≦2・mという関係が成立しているものとする。本例では、第１の入力データ拡大装置４２１は、入力データ（ nビット）の上位 mビットを第１の拡大装置装置出力として第１のε−Δハッシュ関数計算装置４２３に出力する。また、第１の入力データ拡大装置４２１は、入力データ（ nビット）の下位 mビットを第２の拡大装置装置出力として第１の加算装置４２５に出力する。同様に、第２の入力データ拡大装置４３１は、入力データ（ nビット）の上位 mビットを第１の拡大装置装置出力として第２のε−Δハッシュ関数計算装置４３３に出力する。また、第２の入力データ拡大装置４３１は、入力データ（ nビット）の下位 mビットを第２の拡大装置装置出力として第２の加算装置４３５に出力する。
【０１２４】
また、本実施例では、ε−Δハッシュ関数集合 HΔとして、要素数が2mとなる関数集合 HΔ={hk| h_k(x)=k×x, k∈GF(2m)}を用い、 mビットのデータである kを、ハッシュ関数族の要素を一意に指定するハッシュ関数指定データとする。従って、第１のε−Δハッシュ関数計算装置４２３および第２のε−Δハッシュ関数計算装置４３３には、ハッシュ関数指定データとして mビットのデータが入力される。
【０１２５】
また、本実施例において、乱数発生器４００は、乱数データを発生する。本例では、乱数発生器４００は、 nビットの乱数データを発生するものとする。第１の量子通信機４０１と第２の量子通信機４０５は、量子通信路４０４によって接続され、情報を送受信する。
【０１２６】
また、第１の計算機４０２と第２の計算機４０６は、通信路４１０によって接続され情報を送受信する。さらに、第１の計算機４０２および第２の計算機４０６は、それぞれ誤り訂正プログラムに従って誤り訂正処理を実行する。また、第１の計算機４０２は、第１の汎用ハッシュ関数計算装置４２０にデータを入力し、第１の汎用ハッシュ関数計算装置４２０から出力されたデータを共有鍵として第１の記憶装置４０３に記憶させる処理を行う。同様に、第２の計算機４０６は、第２の汎用ハッシュ関数計算装置４２０にデータを入力し、第２の汎用ハッシュ関数計算装置４２０から出力されたデータを共有鍵として第２の記憶装置４０７に記憶させる処理を行う。
【０１２７】
次に、動作について説明する。
まず、乱数発生器４００が、送信者と受信者との間で共有される鍵の元となる情報を出力する。この乱数発生器４００から出力された情報は、第１の量子通信機４０１および第１の計算機４０２に入力される。
【０１２８】
第１の計算機４０２は、乱数発生器４００から入力された情報を、第１の記憶装置４０３に記憶させる。
【０１２９】
また、第１の量子通信機４０１は、乱数発生器４００から入力された情報を、量子通信路４０４を介して第２の量子通信機４０５に送信する。第２の量子通信機４０５は、その情報を受信すると、受信した情報を第２の計算機４０６に出力する。第２の計算機４０６は、その情報を第２の記憶装置４０７に記憶させる。
【０１３０】
送信者の記憶装置（第１の記憶装置４０３）に記憶された乱数発生器の出力情報と、量子通信路４０４を介して伝達され、受信者の記憶装置（第２の記憶装置４０７）に記憶された情報とは、量子通信路の誤り、および第三者による盗聴等の理由により、同一のデータとなっていない可能性が高い。この二つのデータ（第１の記憶装置４０３に記憶された情報および第２の記憶装置４０７に記憶された情報）を一致させるため、送信者は、第１の計算機４０２に第１の誤り訂正プログラム４０８による処理を実行させる。また、受信者は、第２の計算機４０６に第２の誤り訂正プログラム４０９による処理を実行させる。第１の計算機４０２は、第１の誤り訂正プログラム４０８に従って誤り訂正処理を実行し、第２の計算機４０６は、第２の誤り訂正プログラム４０９に従って誤り訂正処理を実行する。第１の計算機４０２および第２の計算機４０６は、誤り訂正処理において、ビット数が nビットである同一のデータを生成する。このとき、第１の記憶装置４０３に記憶された乱数発生器の出力情報と、量子通信路４０４を介して伝達され、第２の記憶装置４０７に記憶された情報とが、同一のデータになっていなくても、誤り訂正処理において、ビット数が nビットである同一のデータを生成する。そして、第１の計算機４０２は、その nビットのデータを第１の記憶装置４０３に記憶させる。第２の計算機４０６も、 nビットのデータを第２の記憶装置４０７に記憶させる。
【０１３１】
第１の計算機４０２および第２の計算機４０６による誤り訂正処理について、より詳しく説明する。乱数発生器４００は、 nビットの乱数データを発生させるので、第１の計算機４０２および第２の計算機４０６は、盗聴等により生じた誤りを訂正して、送信側と受信側とでそれぞれ nビットの同一のデータを生成する。なお、誤り訂正処理の開始前に、送信側および受信側にそれぞれ記憶された nビットのデータを、ここでは情報系列と呼ぶことにする。
【０１３２】
まず、第１の計算機４０２は、第１の記憶装置４０３に記憶された情報系列を複数のブロックに分割し、第２の計算機４０６も同様に、第２の記憶装置４０７に記憶された情報系列を複数のブロックに分割する。分割するブロックの大きさは、送信側と受信側とで同一の大きさである。また、第１の計算機４０２は、分割によって得られた各ブロック毎にパリティを計算し、計算したパリティを、古典通信路である通信路４１０を介して第２の計算機４０６に送信する。また、第２の計算機４０６も、分割によって得られた各ブロック毎にパリティを計算する。
【０１３３】
第２の計算機４０６は、ブロック毎に、第２の計算機４０６自身が計算したパリティと、第１の計算機４０２から受信したパリティとを比較する。そして、パリティが一致しないブロックを検出したならば、そのブロックを指定する情報を第１の計算機４０２に送信する。
【０１３４】
第１の計算機４０２および第２の計算機４０６はそれぞれ、パリティが一致していないブロックを、さらに複数のブロックに分割する。この場合も、分割するブロックの大きさは送信側と受信側とで同一である。なお、パリティが一致していないブロックは、盗聴等によって奇数個のエラーが生じているブロックである。偶数個のエラーが生じている場合には、送信側と受信側でパリティが一致することになる。第１の計算機４０２は、パリティが一致していないブロックをさらに複数のブロックに分割したならば、その分割後の各ブロック毎にパリティを計算し、計算したパリティを第２の計算機４０６に送信する。第２の計算機４０６も、パリティが一致していないブロックを、さらに複数のブロックに分割し、その分割後の各ブロック毎にパリティを計算する。第２の計算機４０６は、ブロック毎に、第２の計算機４０６自身が計算したパリティと、第１の計算機４０２から受信したパリティとを比較する。そして、パリティが一致しないブロックを検出したならば、そのブロックを指定する情報を第１の計算機４０２に送信する。
【０１３５】
上述のように、第１の計算機４０２および第２の計算機４０６は、ブロックを分割して、分割後のパリティを比較し、パリティが一致しないブロックがあれば、再度分割することを繰り返す。第１の計算機４０２および第２の計算機４０６は、この繰り返し処理を、エラーの生じた箇所が特定できるまで繰り返す。また、エラーの生じた箇所が特定できたならば、第２の計算機４０６は、そのエラーを訂正する。
【０１３６】
上述のエラー訂正処理が完了したならば、第１の計算機４０２および第２の計算機４０６はそれぞれ、情報系列のビットの並びを入れ替える処理を行い、上述のエラー訂正処理と同様の処理（ブロックの分割を繰り返してエラーの生じた箇所を特定し、エラーの生じた箇所を特定できたならばそのエラーを訂正する処理）を行う。第１の計算機４０２および第２の計算機４０６は、分割したブロックのパリティが全て一致するまでこのエラー訂正処理を行う。なお、ビットの並びの入れ替え方は、送信側と受信側とで同一である。
【０１３７】
なお、送信側と受信側とでブロックのパリティが一致した場合であっても、偶数個のエラーがブロックに含まれている可能性がある。そこで、上述のように情報系列のビットの並びを入れ替え、上述のエラー訂正処理と同様の処理（ブロックの分割を繰り返してエラーの生じた箇所を特定し、エラーの生じた箇所を特定できたならばそのエラーを訂正する処理）を行うことを繰り返す。ビットの並びを入れ替え、パリティが一致していてエラー訂正をする必要がない場合が所定回数連続したならば、情報系列のビットの並びを入れ替える処理を終了し、そのときにビットの並びを入れ替えていた nビットのデータを、第１の計算機４０２は第１の記憶装置４０３に記憶させる。また、第２の計算機４０６は、その nビットのデータを第２の記憶装置４０７に記憶させる。この処理により、誤り訂正処理が終了する。なお、上記の所定回数は、偶数個のエラーが生じていない可能性が十分に高いと言えるように予め定められた回数である。
【０１３８】
上記の誤り訂正処理では、パリティを用いる場合を例に説明したが、Hamming Codeを用いてもよい。また、パリティやHamming Codeは、ブロック長の小さな弱い符号であるが、 BCH符号やLDPC符号等の強力な誤り訂正符号を用いてもよい。
【０１３９】
なお、上記の誤り訂正処理において、第１の計算機４０２および第２の計算機４０６が送受信する情報量が小さい場合、盗聴等されにくいが、通信回数（送受信回数）が増加する。一方、第１の計算機４０２および第２の計算機４０６が送受信する情報量が大きい場合、盗聴等されやすくなるが、通信回数（送受信回数）は少なくて済む。盗聴等の困難性と、通信回数が適切になるように、送受信する情報量を設定すればよい。
【０１４０】
誤り訂正プログラムによる誤り訂正処理を実行した結果、第三者によって盗聴された情報の量が見積もられる。盗聴された情報の量の見積りについて説明する。量子通信路４０４では、盗聴を行おうとすると、１／２の確率で情報の盗聴に成功し、１／２の確率で情報の盗聴に失敗する。そして、情報の盗聴が失敗した場合には、盗聴時に量子通信路４０４において伝送されていた情報が別の情報に変化する。このため、第１の記憶装置４０３に記憶された乱数発生器の出力情報と、量子通信路４０４を介して伝達されて第２の記憶装置４０７に記憶された情報とを比較し、値が食い違っているビットの数によって盗聴に失敗した情報量を見積ることができる。そして、その情報量と同程度の情報量に関しては、盗聴に成功していたと推定することができる。
【０１４１】
送信者と受信者は、以下に示す手順に従い、第１の汎用ハッシュ関数計算装置４２０および第２の汎用ハッシュ関数計算装置４３０に対し、共有されたデータ（送信側と受信側とで同一の nビットのデータ）を入力することによって、盗聴によって第三者に得られた情報を無効にすることができる。
【０１４２】
乱数発生器４００は、例えば、送信者の操作により、 mビットのデータを出力する。第１の計算機４０２には、この乱数発生器４００の出力データが入力される。そして、第１の計算機４０２は、乱数発生器４００の出力データ（ mビットのデータ）を、ハッシュ関数指定データとして、第１のε−Δハッシュ関数計算装置４２３に入力する。また、第１の計算機４０２は、乱数発生器４００の出力データを、通信路４１０を介して第２の計算機４０６に送信する。第２の計算機４０６は、この mビットのデータを受信すると、受信したデータを、ハッシュ関数指定データとして、第２のε−Δハッシュ関数計算装置４３３に入力する。
【０１４３】
次に、第１の計算機４０２は、第１の記憶装置４０３に記憶された誤り訂正処理の結果（送信側と受信側とで同一の nビットのデータ）を読み込み、入力データとして、第１の入力データ拡大装置４２１に入力する。第１の入力データ拡大装置４２１は、入力された nビットのデータから第１の拡大装置出力および第２の拡大装置出力（いずれも mビットのデータ）を生成し、出力する。本実施例では、第１の入力データ拡大装置４２１は、入力された nビットのデータの上位 mビットのデータを第１の拡大装置出力とし、第１の拡大装置出力を第１のε−Δハッシュ関数計算装置４２３に出力する。また、第１の入力データ拡大装置４２１は、入力された nビットのデータの下位 mビットのデータを第２の拡大装置出力とし、第２の拡大装置出力を第１の加算装置４２５に出力する。
【０１４４】
受信側の装置でも同様の動作を行う。すなわち、第２の計算機４０６は、第２の記憶装置４０７に記憶された誤り訂正処理の結果（送信側と受信側とで同一の nビットのデータ）を読み込み、入力データとして、第２の入力データ拡大装置４３１に入力する。第２の入力データ拡大装置４３１は、入力された nビットのデータから第１の拡大装置出力および第２の拡大装置出力（いずれも mビットのデータ）を生成し、出力する。第２の入力データ拡大装置４３１は、入力された nビットのデータの上位 mビットのデータを第１の拡大装置出力とし、第１の拡大装置出力を第２のε−Δハッシュ関数計算装置４３３に出力する。また、第２の入力データ拡大装置４３１は、入力された nビットのデータの下位 mビットのデータを第２の拡大装置出力とし、第２の拡大装置出力を第２の加算装置４３５に出力する。
【０１４５】
第１のε−Δハッシュ関数計算装置４２３には、第１の入力データ拡大装置４２１から出力された第１の拡大装置出力が入力される。第１のε−Δハッシュ関数計算装置４２３は、その第１の拡大装置出力と、先に入力された乱数発生器４００の出力データとのGF(2m)上での積算を行い、その積算結果を出力する。
【０１４６】
同様に、第２のε−Δハッシュ関数計算装置４３３にも、第２の入力データ拡大装置４３１から出力された第１の拡大装置出力が入力される。第２のε−Δハッシュ関数計算装置４３３は、その第１の拡大装置出力と、先に入力された乱数発生器４００の出力データ（通信路４１０を介して第２の計算機４０６に伝送され、第２の計算機４０６から入力されたデータ）とのGF(2m)上での積算を行い、その積算結果を出力する。
【０１４７】
また、送信側において、第１の加算装置４２５には、第１の入力データ拡大装置４２１によって出力された第２の拡大装置出力と、第１のε−Δハッシュ関数計算装置４２３によって出力された積算結果とが入力される。第１の加算装置４２５は、この入力された二つのデータのGF(2m)上での加算を行い、その加算結果を出力する。
【０１４８】
受信側においても同様に、第２の加算装置４３５には、第２の入力データ拡大装置４３１によって出力された第２の拡大装置出力と、第２のε−Δハッシュ関数計算装置４３３によって出力された積算結果とが入力される。第２の加算装置４３５は、この入力された二つのデータのGF(2m)上での加算を行い、その加算結果を出力する。
【０１４９】
第１の加算装置４２５および第２の加算装置４３５がそれぞれ出力した加算結果が、送信側と受信側で共通の共通鍵となる。第１の計算機４０２は、第１の加算装置４２５によって出力された加算結果（共通鍵）を第１の記憶装置４０３に記憶させる。受信側においても同様に、第２の計算機４０６は、第２の加算装置４３５によって出力された加算結果（共通鍵）を第２の記憶装置４０７に記憶させる。
【０１５０】
本実施例において、乱数発生手段は、乱数発生器４００によって実現される。送信側記憶手段は、第１の記憶装置４０３によって実現される。第１の量子通信手段は、第１の量子通信機４０１によって実現される。第２の量子通信手段は、第２の量子通信機４０５によって実現される。受信側記憶手段は、第２の記憶装置４０７によって実現される。送信側誤り訂正手段は、第１の誤り訂正プログラム４０８に従って誤り訂正処理を実行する第１の計算機４０２によって実現される。受信側誤り訂正手段は、第２の誤り訂正プログラム４０９に従って誤り訂正処理を実行する第２の計算機４０６によって実現される。送信側入力手段および第２の乱数データ送信手段は、第１の計算機４０２によって実現される。受信側入力手段および第２の乱数データ受信手段は、第２の計算機４０６によって実現される。また、本実施例では、乱数発生器４００が出力する mビットのデータが第２の乱数データに相当する。
【０１５１】
本実施例のように共有鍵を計算することにより、送受信者間で共有された鍵（送信側と受信側とで共有された共有鍵）を、盗聴を行った第三者が推定しようとする際に、その第三者が盗聴で得た情報が共有鍵の推定にほとんど役に立たなくなるという効果が得られる。
【０１５２】
また、ハッシュ関数集合の要素数を削減できるという本発明の効果は、特に量子暗号通信において以下の様な効果を生む。１番目の効果は、量子暗号通信における暗号鍵生成速度を向上できることである。量子通信路４０４を伝送される情報と第１のε−Δハッシュ関数計算装置４２３および第２のε−Δハッシュ関数計算装置４３３に入力される mビットの乱数データは、盗聴者にとって予測不可能である必要があるため、乱数発生器４００には真性乱数回路を使用する必要がある。ここで、真性乱数発生回路の乱数生成速度は現時点（２００５年９月）で最速でも数Mbpsであり、限られた速度の真性乱数出力から如何にして多くの暗号鍵を得るかが大きな追求点となる。図７に例示する共有鍵生成システムでは、第１のε−Δハッシュ関数計算装置４２３および第２のε−Δハッシュ関数計算装置４３３に必要とされる乱数のサイズが減少することにより、暗号鍵の元情報として使用できる乱数量が増加し、結果として暗号鍵生成速度が向上する。
【０１５３】
２番目の効果は、第１の計算機４０２および第２の計算機４０６の処理負荷を軽減できることである。第１の計算機４０２および第２の計算機４０６では、誤り訂正プログラム及び秘匿増強プログラムが実行されているのに加え、膨大な通信量が発生すると処理負荷が高くなり各々の処理を行えなくなる危険性が生じる。第１のε−Δハッシュ関数計算装置４２３および第２のε−Δハッシュ関数計算装置４３３に入力される乱数データのサイズが減少することにより、通信路４１０を通して第２のε−Δハッシュ関数計算装置４３３に供給する情報量を削減でき、第１のε−Δハッシュ関数計算装置４２３および第２のε−Δハッシュ関数計算装置４３３の処理負荷を軽減できる。
【０１５４】
３番目の効果は、暗号通信用の鍵量を向上できることである。通信路４１０を介した通信は”なりすまし”を防止する為に認証を必要とし、一般には、過去に生成した暗号鍵を使用して相互認証を行う。通信路４１０を介して伝送する情報量が多い程、認証用途で消費される鍵量が増え、本来の暗号通信用途の鍵量が減少してしまう。第１のε−Δハッシュ関数計算装置４２３および第２のε−Δハッシュ関数計算装置４３３に入力される乱数データのサイズが減少することにより、通信路４１０を介した通信量を削減でき、認証用途の鍵量を削減すると同時に本来の暗号通信用途の鍵量を向上できる。
【０１５５】
また、実施例４では、第１の実施の形態で説明した第１の導出態様を適用した場合を示したが、第１の拡大装置出力および第２の拡大装置出力の導出態様は、他の態様であってもよい。例えば、第１の実施の形態で説明した第２の導出態様であってもよい。
【産業上の利用可能性】
【０１５６】
本発明は、量子通信を用いて鍵共有を行う場合の秘匿性増強に適用できる。また、メッセージ認証コードを実現する際の部品としても利用可能である。
【図面の簡単な説明】
【０１５７】
【図１】本発明による汎用ハッシュ関数族計算装置の第１の実施の形態を示すブロック図である。
【図２】第１の実施の形態の汎用ハッシュ関数族計算装置の動作の例を示すフローチャートである。
【図３】本発明による汎用ハッシュ関数族計算装置の第２の実施の形態を示すブロック図である。
【図４】第２の実施の形態の汎用ハッシュ関数族計算装置の動作の例を示すフローチャートである。
【図５】本発明による汎用ハッシュ関数族計算装置の第３の実施の形態を示すブロック図である。
【図６】第３の実施の形態の汎用ハッシュ関数族計算装置の動作の例を示すフローチャートである。
【図７】共有鍵生成システムの構成例を示すブロック図である。
【符号の説明】
【０１５８】
１００  入力データ拡大装置
１０１  ε−Δハッシュ関数計算装置
１０２  加算装置
２００  積算装置
２０１  データ変換装置
２０２  加算装置
３００  テプリッツ行列積算装置
３０１  加算装置
【図１】
2007086170.tif 000003
【図２】
2007086170.tif 000004
【図３】
2007086170.tif 000005
【図４】
2007086170.tif 000006
【図５】
2007086170.tif 000007
【図６】
2007086170.tif 000008
【図７】
2007086170.tif 000009