(57)【要約】  フィードフォワード演算を取り除いてハッシュ関数を構成することを目的とする。ハッシュ値計算装置は、ｉ＝１，．．．，Ｌの各整数ｉについて昇順に、ｋ−ｎビットの値Ｍ［ｉ］と、ｎビットの値ｙ１［ｉ−１］（値ｙ１［０］は所定値ＩＶ１）と、ｎビットの値ｙ２［ｉ−１］（値ｙ２［０］は所定値ＩＶ２）とを入力として、ｎビットの値ｘ１［ｉ］及び値ｘ２［ｉ］と、ｋビットの値ｋ１［ｉ］及び値ｋ２［ｉ］とを出力する関数ｆ［ｉ］を計算し、値ｘ１［ｉ］を平文とし、値ｋ１［ｉ］を鍵として、ブロック暗号の暗号化関数によりｎビットの値ｙ１［ｉ］を計算し、値ｘ２［ｉ］を平文とし、値ｋ２［ｉ］を鍵として、ブロック暗号の暗号化関数によりｎビットの値ｙ２［ｉ］を計算する。そして、ハッシュ値計算装置は、計算した値ｙ１［Ｌ］と値ｙ２［Ｌ］とを入力として、全単射関数ｇによりハッシュ値を計算する。
2014046024.tif 000002
【特許請求の範囲】
【請求項１】
平文長がｎビットであり、鍵長がｋビット（ｋ＞ｎ）であるブロック暗号の暗号化関数を用いてハッシュ値を計算するハッシュ値計算装置であり、
ｋ−ｎビットのＬ個（Ｌは２以上の整数）の値Ｍ［１］，．．．，値Ｍ［Ｌ］を入力する既定長値入力部と、
ｉ＝１，．．．，Ｌの各整数ｉについて昇順に、前記既定長値入力部が入力した値Ｍ［ｉ］と、ｎビットの値ｙ１［ｉ−１］（値ｙ１［０］は所定値ＩＶ１）と、ｎビットの値ｙ２［ｉ−１］（値ｙ２［０］は所定値ＩＶ２）とを入力として、ｎビットの値ｘ１［ｉ］及び値ｘ２［ｉ］と、ｋビットの値ｋ１［ｉ］及び値ｋ２［ｉ］とを出力する関数ｆ［ｉ］を計算し、前記値ｘ１［ｉ］を平文とし、前記値ｋ１［ｉ］を鍵として、前記暗号化関数によりｎビットの値ｙ１［ｉ］を計算し、前記値ｘ２［ｉ］を平文とし、前記値ｋ２［ｉ］を鍵として、前記暗号化関数によりｎビットの値ｙ２［ｉ］を計算する圧縮関数計算部と、
前記圧縮関数計算部が計算した値ｙ１［Ｌ］と値ｙ２［Ｌ］とを入力として、全単射関数ｇによりハッシュ値を計算するハッシュ値計算部と
を備えることを特徴とするハッシュ値計算装置。
【請求項２】
ｉ＝１，．．．，Ｌの各整数ｉについて、前記関数ｆ［ｉ］は、全単射であり、かつ、前記値Ｍ［ｉ］を固定値とした場合に前記値ｙ１［ｉ］及び前記値ｙ２［ｉ］と前記値ｘ１［ｉ］及び前記値ｘ２［ｉ］とは全単射の関係であり、かつ、前記値ｘ１［ｉ］と前記値ｘ２［ｉ］と、又は、前記値ｋ１［ｉ］と前記値ｋ２［ｉ］とは同一とならない関数である
ことを特徴とする請求項１に記載のハッシュ値計算装置。
【請求項３】
ｉ＝１，．．．，Ｌの各整数ｉについて、前記関数ｆ［ｉ］は、前記値ｙ１［ｉ−１］を前記値ｘ１［ｉ］とし、前記値ｙ１［ｉ−１］を置換関数ｐで変換した値を前記値ｘ２［ｉ］とし、前記値ｙ２［ｉ−１］と前記値Ｍ［ｉ］とを組み合わせた値を前記値ｋ１［ｉ］及び前記値ｋ２［ｉ］とする関数である
ことを特徴とする請求項１に記載のハッシュ値計算装置。
【請求項４】
ｉ＝１，．．．，Ｌの各整数ｉについて、前記関数ｆ［ｉ］は、前記値ｙ１［ｉ−１］を前記値ｘ１［ｉ］とし、前記値ｙ２［ｉ−１］の各ビットを反転させた値を前記値ｘ２［ｉ］とし、前記値Ｍ［ｉ］と前記値ｙ２［ｉ−１］とを組み合わせた値を前記値ｋ１［ｉ］とし、前記値Ｍ［ｉ］と前記値ｙ１［ｉ−１］とを組み合わせた値を前記値ｋ２［ｉ］とする関数である
ことを特徴とする請求項１に記載のハッシュ値計算装置。
【請求項５】
ｉ＝１，．．．，Ｌの各整数ｉについて、前記関数ｆ［ｉ］は、前記値ｙ１［ｉ−１］を前記値ｘ１［ｉ］とし、前記値ｙ２［ｉ−１］を前記値ｘ２［ｉ］とし、前記値Ｍ［ｉ］と前記値ｙ２［ｉ−１］とを組み合わせた値を前記値ｋ１［ｉ］とし、前記値ｘ１［ｉ］と前記値ｋ１［ｉ］とを入力として前記暗号化関数により計算した前記値ｙ１［ｉ］と前記値Ｍ［ｉ］とを組み合わせた値を前記値ｋ２［ｉ］とする関数である
ことを特徴とする請求項１に記載のハッシュ値計算装置。
【請求項６】
前記ハッシュ値計算装置は、さらに、
任意ビット長の値Ｍを入力する任意長値入力部と、
前記任意長値入力部が入力した値Ｍに対して、所定の値を付加して（ｋ−ｎ）ビットのＬ倍のビット長の値Ｍ＊を出力するパディング部と、
前記パディング部が生成した値Ｍ＊をＬ個に分割して、ｋ−ｎビットの値Ｍ［１］，．
．．，値Ｍ［Ｌ］を出力する分割部と
を備え、
前記既定長値入力部は、前記分割部が出力した値Ｍ［１］，．．．，値Ｍ［Ｌ］を入力する
ことを特徴とする請求項１から５までのいずれかに記載のハッシュ値計算装置。
【請求項７】
平文長がｎビットであり、鍵長がｋビット（ｋ＞ｎ）であるブロック暗号の暗号化関数を用いてハッシュ値を計算するハッシュ値計算方法であり、
入力装置が、ｋ−ｎビットのＬ個（Ｌは２以上の整数）の値Ｍ［１］，．．．，値Ｍ［Ｌ］を入力する既定長値入力ステップと、
処理装置が、ｉ＝１，．．．，Ｌの各整数ｉについて昇順に、前記既定長値入力ステップで入力した値Ｍ［ｉ］と、ｎビットの値ｙ１［ｉ−１］（値ｙ１［０］は所定値ＩＶ１）と、ｎビットの値ｙ２［ｉ−１］（値ｙ２［０］は所定値ＩＶ２）とを入力として、ｎビットの値ｘ１［ｉ］及び値ｘ２［ｉ］と、ｋビットの値ｋ１［ｉ］及び値ｋ２［ｉ］とを出力する関数ｆ［ｉ］を計算し、前記値ｘ１［ｉ］を平文とし、前記値ｋ１［ｉ］を鍵として、前記暗号化関数によりｎビットの値ｙ１［ｉ］を計算し、前記値ｘ２［ｉ］を平文とし、前記値ｋ２［ｉ］を鍵として、前記暗号化関数によりｎビットの値ｙ２［ｉ］を計算する圧縮関数計算ステップと、
処理装置が、前記圧縮関数計算ステップで計算した値ｙ１［Ｌ］と値ｙ２［Ｌ］とを入力として、全単射関数ｇによりハッシュ値を計算するハッシュ値計算ステップと
を備えることを特徴とするハッシュ値計算方法。
【請求項８】
平文長がｎビットであり、鍵長がｋビット（ｋ＞ｎ）であるブロック暗号の暗号化関数を用いてハッシュ値を計算するハッシュ値計算プログラムであり、
ｋ−ｎビットのＬ個（Ｌは２以上の整数）の値Ｍ［１］，．．．，値Ｍ［Ｌ］を入力する既定長値入力処理と、
ｉ＝１，．．．，Ｌの各整数ｉについて昇順に、前記既定長値入力処理で入力した値Ｍ［ｉ］と、ｎビットの値ｙ１［ｉ−１］（値ｙ１［０］は所定値ＩＶ１）と、ｎビットの値ｙ２［ｉ−１］（値ｙ２［０］は所定値ＩＶ２）とを入力として、ｎビットの値ｘ１［ｉ］及び値ｘ２［ｉ］と、ｋビットの値ｋ１［ｉ］及び値ｋ２［ｉ］とを出力する関数ｆ［ｉ］を計算し、前記値ｘ１［ｉ］を平文とし、前記値ｋ１［ｉ］を鍵として、前記暗号化関数によりｎビットの値ｙ１［ｉ］を計算し、前記値ｘ２［ｉ］を平文とし、前記値ｋ２［ｉ］を鍵として、前記暗号化関数によりｎビットの値ｙ２［ｉ］を計算する圧縮関数計算処理と、
前記圧縮関数計算処理で計算した値ｙ１［Ｌ］と値ｙ２［Ｌ］とを入力として、全単射関数ｇによりハッシュ値を計算するハッシュ値計算処理と
をコンピュータに実行させることを特徴とするハッシュ値計算プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、例えば、圧縮関数が逆元計算可能であったとしても安全にハッシュ値を計算する技術に関する。
【背景技術】
【０００２】
ハッシュ関数は、任意長の値を入力として、固定長のハッシュ値を出力する関数である。【０００３】
非特許文献３，４には、ブロック暗号の暗号化関数として、例えば、ＡＥＳ−２５６を用いて構成された圧縮関数を利用したハッシュ関数に関する記載がある。非特許文献３，４におけるハッシュ関数が衝突困難性を満たすためには、用いるＡＥＳ−２５６が理想化されたブロック暗号である必要がある（非特許文献１−３参照）。
このハッシュ関数は、ブロック暗号の平文長がｎビットの場合、ハッシュ値の長さが２ｎビットとなるハッシュ関数である。
理想化されたブロック暗号とは、平文長（ブロック長）がｎビット、鍵長がｋビットの全てのブロック暗号の集合から、ランダムに選ばれたブロック暗号のことである。
出力長がｗビットのハッシュ関数Ｈが、衝突困難性を満たすとは、Ｈ（Ｍ）＝Ｈ（Ｍ’）となる異なる２つの入力値Ｍ，Ｍ’を見つけることが困難なことである。厳密には、２ｗ／２回以下のハッシュ値の計算ではこのような入力値を見つけることができなければ、衝突困難性を満たすとされる。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】Ｊｏｏｙｏｕｎｇ  Ｌｅｅ，  Ｍａｒｔｉｊｎ  Ｓｔａｍ，  ａｎｄ  Ｊｏｈｎ  Ｐ．  Ｓｔｅｉｎｂｅｒｇｅｒ．  Ｔｈｅ  Ｃｏｌｌｉｓｉｏｎ  Ｓｅｃｕｒｉｔｙ  ｏｆ  Ｔａｎｄｅｍ−ＤＭ  ｉｎ  ｔｈｅ  Ｉｄｅａｌ  Ｃｉｐｈｅｒ  Ｍｏｄｅｌ．  ＣＲＹＰＴＯ  ２０１１．  ｐｐ５６１−５７７．  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ６８４１．
【非特許文献２】Ｅｗａｎ  Ｆｌｅｉｓｃｈｍａｎｎ，  Ｍｉｃｈａｅｌ  Ｇｏｒｓｋｉ，  ａｎｄ  Ｓｔｅｆａｎ  Ｌｕｃｋｓ．  Ｓｅｃｕｒｉｔｙ  ｏｆ  Ｃｙｃｌｉｃ  Ｄｏｕｂｌｅ  Ｂｌｏｃｋ  Ｌｅｎｇｔｈ  Ｈａｓｈ  Ｆｕｎｃｔｉｏｎｓ．  ＩＭＡ  Ｉｎｔ．  Ｃｏｎｆ．  ２００９．  ｐｐ１５３−１７５．  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ５９２１．
【非特許文献３】Ｓｈｏｉｃｈｉ  Ｈｉｒｏｓｅ．  Ｓｏｍｅ  Ｐｌａｕｓｉｂｌｅ  Ｃｏｎｓｔｒｕｃｔｉｏｎｓ  ｏｆ  Ｄｏｕｂｌｅ−Ｂｌｏｃｋ−Ｌｅｎｇｔｈ  Ｈａｓｈ  Ｆｕｎｃｔｉｏｎｓ．  ＦＳＥ  ２００６．  ｐｐ２１０−２２５．  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ４０４７．
【非特許文献４】Ｘ．  Ｌａｉ  ａｎｄ  Ｊ．Ｌ．Ｍａｓｓｅｙ．  Ｈａｓｈ  Ｆｕｎｃｔｉｏｎｓ  Ｂａｓｅｄ  ｏｎ  Ｂｌｏｃｋ  Ｃｉｐｈｅｒｓ．  ＥＵＲＯＣＲＹＰＴ’９２．  ｐｐ５５−７０．  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ  ６５８．
【発明の概要】
【発明が解決しようとする課題】
【０００５】
非特許文献３，４に記載されたハッシュ関数では、圧縮関数の出力から圧縮関数の入力を求めることが困難となるように、圧縮関数を構成する暗号化関数の入力である平文成分と暗号化関数の出力である暗号文成分との排他的論理和を圧縮関数の出力としている。以下、平文成分と暗号文成分とを排他的論理和したものを圧縮関数の出力とする演算をフィードフォワード演算と呼ぶ。【０００６】
フィードフォワード演算を使った場合、暗号化関数の出力が計算できるまで、暗号化関数の入力を記録しておく必要があり、その分のメモリが必要となる。しかし、メモリの使用量を減らすためにフィードフォワード演算を取り除いた場合、圧縮関数の出力から圧縮関数の入力が計算できてしまう。出力から入力を計算できるという性質を用いると、圧縮関数の衝突困難性を破ることが可能となる。衝突困難性が破られた圧縮関数を利用してハッシュ関数を構成した場合、ハッシュ関数が衝突困難性を満たさなくなる恐れがある。【０００７】
この発明は、例えば、衝突困難性を満たしつつ、フィードフォワード演算を取り除いてハッシュ関数を構成することを目的とする。
【課題を解決するための手段】
【０００８】
この発明に係るハッシュ値計算装置は、
平文長がｎビットであり、鍵長がｋビット（ｋ＞ｎ）であるブロック暗号の暗号化関数を用いてハッシュ値を計算するハッシュ値計算装置であり、
ｋ−ｎビットのＬ個（Ｌは２以上の整数）の値Ｍ［１］，．．．，値Ｍ［Ｌ］を入力する既定長値入力部と、
ｉ＝１，．．．，Ｌの各整数ｉについて昇順に、前記既定長値入力部が入力した値Ｍ［ｉ］と、ｎビットの値ｙ１［ｉ−１］（値ｙ１［０］は所定値ＩＶ１）と、ｎビットの値ｙ２［ｉ−１］（値ｙ２［０］は所定値ＩＶ２）とを入力として、ｎビットの値ｘ１［ｉ］及び値ｘ２［ｉ］と、ｋビットの値ｋ１［ｉ］及び値ｋ２［ｉ］とを出力する関数ｆ［ｉ］を計算し、前記値ｘ１［ｉ］を平文とし、前記値ｋ１［ｉ］を鍵として、前記暗号化関数によりｎビットの値ｙ１［ｉ］を計算し、前記値ｘ２［ｉ］を平文とし、前記値ｋ２［ｉ］を鍵として、前記暗号化関数によりｎビットの値ｙ２［ｉ］を計算する圧縮関数計算部と、
前記圧縮関数計算部が計算した値ｙ１［Ｌ］と値ｙ２［Ｌ］とを入力として、全単射関数ｇによりハッシュ値を計算するハッシュ値計算部と
を備えることを特徴とする。
【発明の効果】
【０００９】
この発明に係るハッシュ値計算装置では、フィードフォワード演算を用いていない。そのため、この発明に係るハッシュ値計算装置は、メモリの使用量を減らすことができる。また、この発明に係るハッシュ値計算装置では、ブロック暗号の暗号化関数が理想化されたブロック暗号である場合、衝突困難性を満たす。
【図面の簡単な説明】
【００１０】
【図１】実施の形態１に係るハッシュ関数で利用される圧縮関数ｃの構造図。
【図２】実施の形態１に係るハッシュ関数の演算部の構造図。
【図３】実施の形態１に係るハッシュ関数の入力部の構造図。
【図４】実施の形態１に係るハッシュ値計算装置１０の構成図。
【図５】実施の形態１に係るハッシュ値計算装置１０の動作を示すフローチャート。
【図６】実施の形態２に係るハッシュ関数で利用される圧縮関数ｃの構造図。
【図７】実施の形態２に係るハッシュ関数の演算部の構造図。
【図８】実施の形態３に係るハッシュ関数で利用される圧縮関数ｃの構造図。
【図９】実施の形態３に係るハッシュ関数の演算部の構造図。
【図１０】実施の形態４に係るハッシュ関数で利用される圧縮関数ｃの構造図。
【図１１】暗号化関数ｅ１と暗号化関数ｅ３とが同じである場合の実施の形態４に係る圧縮関数ｃの構造図。
【図１２】実施の形態４に係るハッシュ関数の演算部の構造図。
【発明を実施するための形態】
【００１１】
実施の形態１．
図１は、実施の形態１に係るハッシュ関数で利用される圧縮関数ｃの構造図である。
圧縮関数ｃは、関数ｆと、平文長がｎビットで鍵長がｋビットである２つのブロック暗号の暗号化関数ｅ１，ｅ２とを用いて構成される。
【００１２】
関数ｆは、値Ｍ、値ｗ１、値ｗ２の３つの値を入力として、値ｘ１、値ｘ２、値ｋ１、値ｋ２の４つの値を出力する。値Ｍは、ｋ−ｎビットである。値ｗ１及び値ｗ２は、ｎビットである。値ｘ１及び値ｘ２は、ｎビットである。値ｋ１及び値ｋ２は、ｋビットである。
関数ｆは、以下の（１）から（３）の３つの条件を満たす。（１）全単射である。（２）値Ｍを固定値とした場合、値ｗ１及び値ｗ２と、値ｘ１及び値ｘ２とは、全単射である。（３）値ｘ１と値ｘ２とが等しくない、又は、値ｋ１と値ｋ２とが等しくない。
【００１３】
暗号化関数ｅ１は、関数ｆの出力である値ｘ１を平文とし、関数ｆの出力である値ｋ１を鍵として、ｎビットの値ｙ１を出力する。
暗号化関数ｅ２は、関数ｆの出力である値ｘ２を平文とし、関数ｆの出力である値ｋ２を鍵として、ｎビットの値ｙ２を出力する。
暗号化関数ｅ１，ｅ２は同じ暗号化関数であってもよい。
【００１４】
図２は、実施の形態１に係るハッシュ関数の演算部の構造図である。
ハッシュ関数の演算部では、ｋ−ｎビットのＬ個（Ｌは２以上の整数）の入力値Ｍ［１］，．．．，Ｍ［Ｌ］を入力として、ハッシュ値ｈが計算される。
【００１５】
ハッシュ関数の演算部は、Ｌ個の圧縮関数ｃ［１］，．．．，ｃ［Ｌ］と、２つの入力値を組み合わせる関数ｇとを用いて構成される。
【００１６】
ｉ＝１，．．．，Ｌの各整数ｉについての圧縮関数ｃ［ｉ］は、図１に示す圧縮関数ｃであり、図１に示す関数ｆである関数ｆ［ｉ］と、図１に示す暗号化関数ｅ１である暗号化関数ｅ１［ｉ］と、図１に示す暗号化関数ｅ２である暗号化関数ｅ２［ｉ］とを有する。
【００１７】
先頭の圧縮関数ｃ［１］は、値Ｍ［１］を前記値Ｍとし、所定の固定値ＩＶ１を前記値ｗ１とし、所定の固定値ＩＶ２を前記値ｗ２として、値ｙ１［１］及び値ｙ２［１］を出力する。
具体的には、まず、値Ｍ［１］、固定値ＩＶ１、固定値ＩＶ２の３つの値を入力として、関数ｆ［１］により、値ｘ１［１］、値ｘ２［１］、値ｋ１［１］、値ｋ２［１］の４つの値が出力される。次に、値ｘ１［１］を平文とし、値ｋ１［１］を鍵として、暗号化関数ｅ１［１］により、値ｙ１［１］が出力される。また、値ｘ２［１］を平文とし、値ｋ２［１］を鍵として、暗号化関数ｅ２［１］により、値ｙ２［１］が出力される。
【００１８】
ｉ＝２，．．．，Ｌの各ｉについての圧縮関数ｃ［ｉ］は、値Ｍ［ｉ］を前記値Ｍとし、値ｙ１［ｉ−１］を前記値ｗ１とし、値ｙ２［ｉ−１］を前記値ｗ２として、値ｙ１［ｉ］及び値ｙ２［ｉ］を出力する。
具体的には、まず、値Ｍ［ｉ］、値ｙ１［ｉ−１］、値ｙ２［ｉ−１］の３つの値を入力として、関数ｆ［ｉ］により、値ｘ１［ｉ］、値ｘ２［ｉ］、値ｋ１［ｉ］、値ｋ２［ｉ］の４つの値が出力される。次に、値ｘ１［ｉ］を平文とし、値ｋ１［ｉ］を鍵として、暗号化関数ｅ１［ｉ］により、値ｙ１［ｉ］が出力される。また、値ｘ２［ｉ］を平文とし、値ｋ２［ｉ］を鍵として、暗号化関数ｅ２［ｉ］により、値ｙ２［ｉ］が出力される。
【００１９】
関数ｇは、全単射関数であり、圧縮関数ｃ［Ｌ］が出力したｎビットの値ｙ１［Ｌ］と、ｎビットの値ｙ２［Ｌ］とを入力として、２ｎビットのハッシュ値ｈとして出力する。
例えば、関数ｇは、値ｙ１［Ｌ］の各ビット後に、値ｙ２［Ｌ］の各ビットを付加する。もちろん、関数ｇは、値ｙ２［Ｌ］の各ビット後に、値ｙ１［Ｌ］の各ビットを付加してもよいし、値ｙ１［Ｌ］の各ビットと値ｙ２［Ｌ］の各ビットとを任意の順に組み合わせてもよい。
【００２０】
図３は、実施の形態１に係るハッシュ関数の入力部の構造図である。
ハッシュ関数の入力部では、演算部へ入力するＬ個の入力値Ｍ［１］，．．．，Ｍ［Ｌ］が計算される。
【００２１】
ハッシュ関数の入力部は、パディング関数ｐａｄと、分割関数ｄとを用いて構成される。
【００２２】
関数ｐａｄは、値Ｍを入力として、（ｋ−ｎ）のＬ倍の長さの値Ｍ＊を出力する。
関数ｐａｄは、任意の２つの値ａ，ｂが入力された場合、一方が他方のサフィックスになっていない（ｋ−ｎ）のＬ倍の長さの２つの値ａ＊，ｂ＊を出力する。サフィックスになっていないとは、２つの値ａ＊，ｂ＊のうち一方の値が、他方の値の下位の一部のビットと等しくないということである。
例えば、関数ｐａｄは、値Ｍの後に１を付加し、その後に０を必要なビット数付加して、その後に値＜Ｍ＞を付加して値Ｍ＊とする。ここで、値＜Ｍ＞は、値Ｍのビット長をｊビットでビット表現した値である。例えば、ｊ＝６４とする。例えば、値Ｍのビット長が８ビットである場合、値＜Ｍ＞は、０・・・０１００である。
【００２３】
分割関数ｄは、関数ｐａｄが計算した値Ｍ＊を先頭から順にｋ−ｎビット毎に分割して値Ｍ［１］，．．．，値Ｍ［Ｌ］を出力する。
【００２４】
図４は、実施の形態１に係るハッシュ値計算装置１０の構成図である。
ハッシュ値計算装置１０は、上述したハッシュ関数を実現する。
ハッシュ値計算装置１０は、任意長値入力部１１、パディング部１２、分割部１３、既定長値入力部１４、圧縮関数計算部１５、ハッシュ値計算部１６を備える。
任意長値入力部１１、パディング部１２、分割部１３は、ハッシュ関数の入力部を計算し、既定長値入力部１４、圧縮関数計算部１５、ハッシュ値計算部１６は、ハッシュ関数の演算部を計算する。
【００２５】
任意長値入力部１１は、任意長の値Ｍを入力装置により入力する。
パディング部１２は、任意長値入力部１１が入力した値Ｍを入力として、処理装置により関数ｐａｄを計算して、値Ｍ＊を出力する。
分割部１３は、値Ｍ＊を入力として、処理装置により分割関数ｄを計算して、値Ｍ［１］，．．．，Ｍ［Ｌ］を出力する。
【００２６】
既定長値入力部１４は、分割部１３が出力した値Ｍ［１］，．．．，Ｍ［Ｌ］を入力装置により入力する。
圧縮関数計算部１５は、既定長値入力部１４が入力した値Ｍ［１］，．．．，Ｍ［Ｌ］を入力として、処理装置により圧縮関数ｃ［１］，．．．，ｃ［Ｌ］を計算して、値ｙ１［Ｌ］及び値ｙ２［Ｌ］を出力する。圧縮関数計算部１５は、関数ｆ計算部１５１、暗号化関数計算部１５２を備える。関数ｆ計算部１５１は、圧縮関数を構成する関数ｆ［１］，．．．，ｆ［Ｌ］を処理装置により計算する。暗号化関数計算部１５２は、圧縮関数を構成する暗号化関数ｅ１［１］，．．．，ｅ１［Ｌ］及び暗号化関数ｅ２［１］，．．．，ｅ２［Ｌ］を処理装置により計算する。
ハッシュ値計算部１６は、圧縮関数計算部１５が出力した値ｙ１［Ｌ］及び値ｙ２［Ｌ］を入力として、処理装置により関数ｇを計算して、ハッシュ値ｈを出力装置へ出力する。
【００２７】
図５は、実施の形態１に係るハッシュ値計算装置１０の動作を示すフローチャートである。
（Ｓ１：任意長値入力ステップ）
任意長値入力部１１は、任意ビット長の値Ｍを入力する。
【００２８】
（Ｓ２：パディングステップ）
パディング部１２は、（Ｓ１）で入力された値Ｍを入力として、関数ｐａｄを計算して、（ｋ−ｎ）×Ｌビットの値Ｍ＊を出力する。
【００２９】
（Ｓ３：分割ステップ）
分割部１３は、（Ｓ２）で出力された値Ｍ＊を入力として、処理装置により分割関数ｄを計算して、（ｋ−ｎ）ビットの値Ｍ［１］，．．．，Ｍ［Ｌ］を出力する。
【００３０】
（Ｓ４：既定長値入力ステップ）
既定長値入力部１４は、（Ｓ３）で出力された値Ｍ［１］，．．．，Ｍ［Ｌ］を入力装置により入力する。
【００３１】
（Ｓ５：圧縮関数計算ステップ）
関数計算ステップは、（Ｓ５１）から（Ｓ５４）までの４つのステップを備える。
（Ｓ５１：関数ｆ計算ステップ（１））
関数ｆ計算部１５１は、値Ｍ［１］、固定値ＩＶ１、固定値ＩＶ２の３つの値を入力として、関数ｆ［１］を計算して、値ｘ１［１］、値ｘ２［１］、値ｋ１［１］、値ｋ２［１］の４つの値を出力する。
（Ｓ５２：暗号化関数計算ステップ（１））
暗号化関数計算部１５２は、値ｘ１［１］を平文とし、値ｋ１［１］を鍵として、暗号化関数ｅ１［１］を計算して、値ｙ１［１］を出力する。また、暗号化関数計算部１５２は、値ｘ２［１］を平文とし、値ｋ２［１］を鍵として、暗号化関数ｅ２［１］を計算して、値ｙ２［１］を出力する。
【００３２】
続いて、ｉ＝２，．．．，Ｌの各整数ｉについて昇順に、（Ｓ５３）から（Ｓ５４）までの処理が実行される。
（Ｓ５３：関数ｆ計算ステップ（２））
関数ｆ計算部１５１は、値Ｍ［ｉ］、値ｙ１［ｉ−１］、値ｙ２［ｉ−１］の３つの値を入力として、関数ｆ［ｉ］を計算して、値ｘ１［ｉ］、値ｘ２［ｉ］、値ｋ１［ｉ］、値ｋ２［ｉ］の４つの値を出力する。
（Ｓ５４：暗号化関数計算ステップ（２））
暗号化関数計算部１５２は、値ｘ１［ｉ］を平文とし、値ｋ１［ｉ］を鍵として、暗号化関数ｅ１［ｉ］を計算して、値ｙ１［ｉ］を出力する。また、暗号化関数計算部１５２は、値ｘ２［ｉ］を平文とし、値ｋ２［ｉ］を鍵として、暗号化関数ｅ２［ｉ］を計算して、値ｙ２［ｉ］を出力する。
【００３３】
（Ｓ６：ハッシュ値計算ステップ）
ハッシュ値計算部１６は、（Ｓ５）で出力された値ｙ１［Ｌ］及び値ｙ２［Ｌ］を入力として、関数ｇを計算して、ハッシュ値ｈを出力する。
【００３４】
以上のように、実施の形態１に係るハッシュ値計算装置１０は、フィードフォワード演算を使わずハッシュ関数を構成する。これにより、メモリの使用量を減らすことができる。
また、実施の形態１に係るハッシュ値計算装置１０は、ブロック暗号の暗号化関数の平文成分を、前の暗号化関数の暗号文成分としている。これにより、ブロック暗号の暗号化関数が理想化されたブロック暗号である場合、衝突困難性を満たすハッシュ関数を実現できる。
【００３５】
なお、ＡＥＳ−２５６の場合、通常、平文長は１２８ビットである。１２８ビットは、ハッシュ値の長さとしては短い。出力長が１２８ビットのハッシュ関数の衝突困難性の計算量は総当り攻撃で、２６４回のハッシュ値計算であり、これはコンピュータで計算可能な範囲のためである。そこで、実施の形態１に係るハッシュ関数では、１つの圧縮関数でブロック暗号の暗号化関数を２回使い、出力長を平文長の２倍の２５６ビットにしている。このような出力長を暗号化関数の平文長の２倍にするハッシュ関数を倍ブロック長ハッシュ関数と呼ぶ。
【００３６】
実施の形態２．
実施の形態１では、３つの条件を満たす関数ｆ［１］，．．．，ｆ［Ｌ］を用いて圧縮関数を構成したハッシュ関数について説明した。実施の形態２では、関数ｆ［１］，．．．，ｆ［Ｌ］をより具体化したハッシュ関数について説明する。
実施の形態２では、関数ｆ以外は実施の形態１と同じである。
【００３７】
図６は、実施の形態２に係るハッシュ関数で利用される圧縮関数ｃの構造図である。
圧縮関数ｃは、関数ｆと、平文長がｎビットで鍵長がｋビットである２つのブロック暗号の暗号化関数ｅ１，ｅ２とを用いて構成される。暗号化関数ｅ１，ｅ２は、実施の形態１に係る暗号化関数ｅ１，ｅ２と同じである。
【００３８】
関数ｆは、値Ｍ、値ｗ１、値ｗ２の３つの値を入力として、値ｘ１、値ｘ２、値ｋ１、値ｋ２の４つの値を出力する。値Ｍは、ｋ−ｎビットである。値ｗ１及び値ｗ２は、ｎビットである。値ｘ１及び値ｘ２は、ｎビットである。値ｋ１及び値ｋ２は、ｋビットである。
関数ｆは、値ｗ１を値ｘ１とし、値ｗ１を置換関数ｐで変換した値を値ｘ２とし、値Ｍと値ｗ２とを組み合わせた値を値ｋ１及び値ｋ２とする。
関数ｆは、値Ｍの各ビットと値ｗ２の各ビットとを任意の順に並べて値ｋ１及び値ｋ２とすればよい。例えば、関数ｆは、値Ｍの各ビットの後に値ｗ２の各ビットを付加して値ｋ１及び値ｋ２とする。
置換関数ｐは、ｎビットの置換関数であり、任意のｎビットの値ｘに対してｐ（ｘ）≠ｘとなる関数である。例えば、置換関数ｐは、ｎビットの入力値ｘとｎビットの固定値ｃとの排他的論理和を計算する関数や、ｎビットの入力値ｘにｎビットの固定値ｃを加算して下位ｎビットの値を出力する関数である。
【００３９】
図７は、実施の形態２に係るハッシュ関数の演算部の構造図である。
先頭の圧縮関数ｃ［１］では、まず、値Ｍ［１］、固定値ＩＶ１、固定値ＩＶ２の３つの値を入力として、関数ｆ［１］により、値ｘ１［１］、値ｘ２［１］、値ｋ１［１］、値ｋ２［１］の４つの値が出力される。ここで、関数ｆ［１］では、固定値ＩＶ１が値ｘ１［１］とされ、固定値ＩＶ１を置換関数ｐで変換した値が値ｘ２［１］とされ、値Ｍ［１］と固定値ＩＶ２とを組み合わせた値が値ｋ１［１］及び値ｋ２［１］とされる。次に、値ｘ１［１］を平文とし、値ｋ１［１］を鍵として、暗号化関数ｅ１［１］により、値ｙ１［１］が出力される。また、値ｘ２［１］を平文とし、値ｋ２［１］を鍵として、暗号化関数ｅ２［１］により、値ｙ２［１］が出力される。
ｉ＝２，．．．，Ｌの各ｉについての圧縮関数ｃ［ｉ］では、まず、値Ｍ［ｉ］、値ｙ１［ｉ−１］、値ｙ２［ｉ−１］の３つの値を入力として、関数ｆ［ｉ］により、値ｘ１［ｉ］、値ｘ２［ｉ］、値ｋ１［ｉ］、値ｋ２［ｉ］の４つの値が出力される。ここで、関数ｆ［ｉ］では、値ｙ１［ｉ−１］が値ｘ１［ｉ］とされ、値ｙ１［ｉ−１］を置換関数ｐで変換した値が値ｘ２［ｉ］とされ、値Ｍ［ｉ］と値ｙ２［ｉ−１］とを組み合わせた値が値ｋ１［ｉ］及び値ｋ２［ｉ］とされる。次に、値ｘ１［ｉ］を平文とし、値ｋ１［ｉ］を鍵として、暗号化関数ｅ１［ｉ］により、値ｙ１［ｉ］が出力される。また、値ｘ２［ｉ］を平文とし、値ｋ２［ｉ］を鍵として、暗号化関数ｅ２［ｉ］により、値ｙ２［ｉ］が出力される。
【００４０】
実施の形態３．
実施の形態３では、実施の形態２と同様に、関数ｆ［１］，．．．，ｆ［Ｌ］をより具体化したハッシュ関数について説明する。
実施の形態３では、関数ｆ以外は実施の形態１と同じである。
【００４１】
図８は、実施の形態３に係るハッシュ関数で利用される圧縮関数ｃの構造図である。
圧縮関数ｃは、関数ｆと、平文長がｎビットで鍵長がｋビットである２つのブロック暗号の暗号化関数ｅ１，ｅ２とを用いて構成される。暗号化関数ｅ１，ｅ２は、実施の形態１に係る暗号化関数ｅ１，ｅ２と同じである。
【００４２】
関数ｆは、値Ｍ、値ｗ１、値ｗ２の３つの値を入力として、値ｘ１、値ｘ２、値ｋ１、値ｋ２の４つの値を出力する。値Ｍは、ｋ−ｎビットである。値ｗ１及び値ｗ２は、ｎビットである。値ｘ１及び値ｘ２は、ｎビットである。値ｋ１及び値ｋ２は、ｋビットである。
関数ｆは、値ｗ１を値ｘ１とし、値ｗ２の各ビットを反転させた値を値ｘ２とし、値Ｍと値ｗ２とを組み合わせた値を値ｋ１とし、値Ｍと値ｗ１とを組み合わせた値を値ｋ２とする。
関数ｆは、値Ｍの各ビットと値ｗ２の各ビットとを任意の順に並べて値ｋ１とし、値Ｍの各ビットと値ｗ１の各ビットとを任意の順に並べて値ｋ２とすればよい。例えば、関数ｆは、値ｗ２の各ビットの後に値Ｍの各ビットを付加して値ｋ１とし、値Ｍの各ビットの後に値ｗ１の各ビットを付加して値ｋ２とする。
【００４３】
図９は、実施の形態３に係るハッシュ関数の演算部の構造図である。
先頭の圧縮関数ｃ［１］では、まず、値Ｍ［１］、固定値ＩＶ１、固定値ＩＶ２の３つの値を入力として、関数ｆ［１］により、値ｘ１［１］、値ｘ２［１］、値ｋ１［１］、値ｋ２［１］の４つの値が出力される。ここで、関数ｆ［１］では、固定値ＩＶ１が値ｘ１［１］とされ、固定値ＩＶ２の各ビットを反転させた値が値ｘ２［１］とされ、値Ｍ［１］と固定値ＩＶ２とを組み合わせた値が値ｋ１［１］とされ、値Ｍ［１］と固定値ＩＶ１とを組み合わせた値が値ｋ２［１］とされる。次に、値ｘ１［１］を平文とし、値ｋ１［１］を鍵として、暗号化関数ｅ１［１］により、値ｙ１［１］が出力される。また、値ｘ２［１］を平文とし、値ｋ２［１］を鍵として、暗号化関数ｅ２［１］により、値ｙ２［１］が出力される。
ｉ＝２，．．．，Ｌの各ｉについての圧縮関数ｃ［ｉ］では、まず、値Ｍ［ｉ］、値ｙ１［ｉ−１］、値ｙ２［ｉ−１］の３つの値を入力として、関数ｆ［ｉ］により、値ｘ１［ｉ］、値ｘ２［ｉ］、値ｋ１［ｉ］、値ｋ２［ｉ］の４つの値が出力される。ここで、関数ｆ［ｉ］では、値ｙ１［ｉ−１］が値ｘ１［ｉ］とされ、値ｙ２［ｉ−１］の各ビットを反転させた値が値ｘ２［ｉ］とされ、値Ｍ［ｉ］と値ｙ２［ｉ−１］とを組み合わせた値が値ｋ１［ｉ］とされ、値Ｍ［ｉ］と値ｙ１［ｉ−１］とを組み合わせた値が値ｋ２［ｉ］とされる。次に、値ｘ１［ｉ］を平文とし、値ｋ１［ｉ］を鍵として、暗号化関数ｅ１［ｉ］により、値ｙ１［ｉ］が出力される。また、値ｘ２［ｉ］を平文とし、値ｋ２［ｉ］を鍵として、暗号化関数ｅ２［ｉ］により、値ｙ２［ｉ］が出力される。
【００４４】
実施の形態４．
実施の形態１では、実施の形態４では、実施の形態２，３と同様に、関数ｆ［１］，．．．，ｆ［Ｌ］をより具体化したハッシュ関数について説明する。
実施の形態４では、関数ｆ以外は実施の形態１と同じである。
【００４５】
図１０は、実施の形態４に係るハッシュ関数で利用される圧縮関数ｃの構造図である。
圧縮関数ｃは、関数ｆと、平文長がｎビットで鍵長がｋビットである２つのブロック暗号の暗号化関数ｅ１，ｅ２とを用いて構成される。暗号化関数ｅ１，ｅ２は、実施の形態１に係る暗号化関数ｅ１，ｅ２と同じである。
【００４６】
関数ｆは、値Ｍ、値ｗ１、値ｗ２の３つの値を入力として、値ｘ１、値ｘ２、値ｋ１、値ｋ２の４つの値を出力する。値Ｍは、ｋ−ｎビットである。値ｗ１及び値ｗ２は、ｎビットである。値ｘ１及び値ｘ２は、ｎビットである。値ｋ１及び値ｋ２は、ｋビットである。
関数ｆは、値ｗ１を値ｘ１とし、値ｗ２を値ｘ２とし、値Ｍと値ｗ２とを組み合わせた値を値ｋ１とし、値ｘ１を平文とし値ｋ１を鍵として暗号化関数ｅ３が出力した値と値Ｍとを組み合わせた値を値ｋ２とする。
関数ｆは、値Ｍの各ビットと値ｗ２の各ビットとを任意の順に並べて値ｋ１とし、値Ｍの各ビットと暗号化関数ｅ３が出力した値の各ビットとを任意の順に並べて値ｋ２とすればよい。例えば、関数ｆは、値ｗ２の各ビットの後に値Ｍの各ビットを付加して値ｋ１とし、値Ｍの各ビットの後に暗号化関数ｅ３が出力した値の各ビットを付加して値ｋ２とする。
関数ｆで用いられる暗号化関数ｅ３は、ｎビットの値を平文とし、ｋビットの値を鍵として、ｎビットの値を出力するブロック暗号の暗号化関数である。暗号化関数ｅ３は、暗号化関数ｅ１と同じであってもよい。
【００４７】
図１１は、暗号化関数ｅ１と暗号化関数ｅ３とが同じである場合の実施の形態４に係る圧縮関数ｃの構造図である。図１１では、暗号化関数ｅ１，ｅ３を暗号化関数ｅ１としている。
【００４８】
図１２は、実施の形態４に係るハッシュ関数の演算部の構造図である。図１２では、暗号化関数ｅ１と暗号化関数ｅ３とが同じである場合の圧縮関数ｃを用いてハッシュ関数の演算部を構成している。
先頭の圧縮関数ｃ［１］では、まず、値Ｍ［１］、固定値ＩＶ１、固定値ＩＶ２の３つの値を入力として、関数ｆ［１］により、値ｘ１［１］、値ｘ２［１］、値ｋ１［１］、値ｋ２［１］の４つの値が出力される。ここで、関数ｆ［１］では、固定値ＩＶ１が値ｘ１［１］とされ、固定値ＩＶ２が値ｘ２［１］とされ、値Ｍ［１］と固定値ＩＶ２とを組み合わせた値が値ｋ１［１］とされ、値ｘ１［１］を平文とし値ｋ１［１］を鍵として暗号化関数ｅ１［１］を計算した値ｙ１［１］と値Ｍ［１］とを組み合わせた値が値ｋ２［１］とされる。次に、値ｘ２［１］を平文とし、値ｋ２［１］を鍵として、暗号化関数ｅ２［１］により、値ｙ２［１］が出力される。
ｉ＝２，．．．，Ｌの各ｉについての圧縮関数ｃ［ｉ］では、まず、値Ｍ［ｉ］、値ｙ１［ｉ−１］、値ｙ２［ｉ−１］の３つの値を入力として、関数ｆ［ｉ］により、値ｘ１［ｉ］、値ｘ２［ｉ］、値ｋ１［ｉ］、値ｋ２［ｉ］の４つの値が出力される。ここで、関数ｆ［ｉ］では、値ｙ１［ｉ−１］が値ｘ１［ｉ］とされ、値ｙ２［ｉ−１］が値ｘ２［ｉ］とされ、値Ｍ［ｉ］と値ｙ２［ｉ−１］とを組み合わせた値が値ｋ１［ｉ］とされ、値ｘ１［ｉ］を平文とし値ｋ１［ｉ］を鍵として暗号化関数ｅ１［ｉ］を計算した値ｙ１［ｉ］と値Ｍ［ｉ］とを組み合わせた値が値ｋ２［ｉ］とされる。次に、値ｘ２［ｉ］を平文とし、値ｋ２［ｉ］を鍵として、暗号化関数ｅ２［ｉ］により、値ｙ２［ｉ］が出力される。
【００４９】
以上に説明したハッシュ値計算装置１０は、例えば、回路やソフトウェア等で構成される。回路で構成される場合には、上記説明における処理装置は、例えば演算回路であり、メモリは、例えばレジスタである。また、ソフトウェアで構成される場合には、上記説明における処理装置は、例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）であり、メモリは、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。また、上記説明における入力装置は、例えばキーボード、通信ボードであり、出力装置は、例えばＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）等の表示装置、通信ボード、レジスタやＲＡＭ等のメモリである。もちろん、これらに限定されるものではない。
なお、ハッシュ値計算装置１０を回路で構成する場合、上述した「〜部」を「〜回路」と読み変えてもよい。また、上述した「〜部」は、「〜処理」、「〜装置」、「〜機器」、「〜手段」、「〜手順」、「〜機能」と読み替えてもよい。つまり、「〜部」として説明するものは、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実現されても構わない。
【符号の説明】
【００５０】
１０  ハッシュ値計算装置、１１  任意長値入力部、１２  パディング部、１３  分割部、１４  既定長値入力部、１５  圧縮関数計算部、１５１  関数ｆ計算部、１５２  暗号化関数計算部、１６  ハッシュ値計算部。
【図１】
2014046024.tif 000003
【図２】
2014046024.tif 000004
【図３】
2014046024.tif 000005
【図４】
2014046024.tif 000006
【図５】
2014046024.tif 000007
【図６】
2014046024.tif 000008
【図７】
2014046024.tif 000009
【図８】
2014046024.tif 000010
【図９】
2014046024.tif 000011
【図１０】
2014046024.tif 000012
【図１１】
2014046024.tif 000013
【図１２】
2014046024.tif 000014
【手続補正書】
【提出日】平成28年1月8日(2016.1.8)
【手続補正２】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
平文長がｎビットであり、鍵長がｋビット（ｋ＞ｎ）であるブロック暗号の暗号化関数を用いてハッシュ値を計算するハッシュ値計算装置であり、
ｋ−ｎビットのＬ個（Ｌは２以上の整数）の値Ｍ［１］，．．．，値Ｍ［Ｌ］を入力する既定長値入力部と、
ｉ＝１，．．．，Ｌの各整数ｉについて昇順に、前記既定長値入力部が入力した値Ｍ［ｉ］と、ｎビットの値ｙ１［ｉ−１］（値ｙ１［０］は所定値ＩＶ１）と、ｎビットの値ｙ２［ｉ−１］（値ｙ２［０］は所定値ＩＶ２）とを入力として、ｎビットの値ｘ１［ｉ］及び値ｘ２［ｉ］と、ｋビットの値ｋ１［ｉ］及び値ｋ２［ｉ］とを出力する関数ｆ［ｉ］を計算し、前記値ｘ１［ｉ］を平文とし、前記値ｋ１［ｉ］を鍵として、前記暗号化関数によりｎビットの値ｙ１［ｉ］を計算し、前記値ｘ２［ｉ］を平文とし、前記値ｋ２［ｉ］を鍵として、前記暗号化関数によりｎビットの値ｙ２［ｉ］を計算する圧縮関数計算部と、
前記圧縮関数計算部が計算した値ｙ１［Ｌ］と値ｙ２［Ｌ］とを入力として、全単射関数ｇによりハッシュ値を計算するハッシュ値計算部と
を備えることを特徴とするハッシュ値計算装置。
【請求項２】
ｉ＝１，．．．，Ｌの各整数ｉについて、前記関数ｆ［ｉ］は、全単射であり、かつ、前記値Ｍ［ｉ］を固定値とした場合に前記値ｙ１［ｉ］及び前記値ｙ２［ｉ］と前記値ｘ１［ｉ］及び前記値ｘ２［ｉ］とは全単射の関係であり、かつ、前記値ｘ１［ｉ］と前記値ｘ２［ｉ］と、又は、前記値ｋ１［ｉ］と前記値ｋ２［ｉ］とは同一とならない関数である
ことを特徴とする請求項１に記載のハッシュ値計算装置。
【請求項３】
ｉ＝１，．．．，Ｌの各整数ｉについて、前記関数ｆ［ｉ］は、前記値ｙ１［ｉ−１］を前記値ｘ１［ｉ］とし、前記値ｙ１［ｉ−１］を置換関数ｐで変換した値を前記値ｘ２［ｉ］とし、前記値ｙ２［ｉ−１］と前記値Ｍ［ｉ］とを組み合わせた値を前記値ｋ１［ｉ］及び前記値ｋ２［ｉ］とする関数である
ことを特徴とする請求項１に記載のハッシュ値計算装置。
【請求項４】
ｉ＝１，．．．，Ｌの各整数ｉについて、前記関数ｆ［ｉ］は、前記値ｙ１［ｉ−１］を前記値ｘ１［ｉ］とし、前記値ｙ２［ｉ−１］の各ビットを反転させた値を前記値ｘ２［ｉ］とし、前記値Ｍ［ｉ］と前記値ｙ２［ｉ−１］とを組み合わせた値を前記値ｋ１［ｉ］とし、前記値Ｍ［ｉ］と前記値ｙ１［ｉ−１］とを組み合わせた値を前記値ｋ２［ｉ］とする関数である
ことを特徴とする請求項１に記載のハッシュ値計算装置。
【請求項５】
ｉ＝１，．．．，Ｌの各整数ｉについて、前記関数ｆ［ｉ］は、前記値ｙ１［ｉ−１］を前記値ｘ１［ｉ］とし、前記値ｙ２［ｉ−１］を前記値ｘ２［ｉ］とし、前記値Ｍ［ｉ］と前記値ｙ２［ｉ−１］とを組み合わせた値を前記値ｋ１［ｉ］とし、前記値ｘ１［ｉ］と前記値ｋ１［ｉ］とを入力として前記暗号化関数により計算した前記値ｙ１［ｉ］と前記値Ｍ［ｉ］とを組み合わせた値を前記値ｋ２［ｉ］とする関数である
ことを特徴とする請求項１に記載のハッシュ値計算装置。
【請求項６】
前記ハッシュ値計算装置は、さらに、
任意ビット長の値Ｍを入力する任意長値入力部と、
前記任意長値入力部が入力した値Ｍに対して、所定の値を付加して（ｋ−ｎ）ビットのＬ倍のビット長の値Ｍ＊を出力するパディング部と、
前記パディング部が生成した値Ｍ＊をＬ個に分割して、ｋ−ｎビットの値Ｍ［１］，．
．．，値Ｍ［Ｌ］を出力する分割部と
を備え、
前記既定長値入力部は、前記分割部が出力した値Ｍ［１］，．．．，値Ｍ［Ｌ］を入力する
ことを特徴とする請求項１から５までのいずれかに記載のハッシュ値計算装置。
【請求項７】
平文長がｎビットであり、鍵長がｋビット（ｋ＞ｎ）であるブロック暗号の暗号化関数を用いてハッシュ値を計算するハッシュ値計算方法であり、
入力装置が、ｋ−ｎビットのＬ個（Ｌは２以上の整数）の値Ｍ［１］，．．．，値Ｍ［Ｌ］を入力する既定長値入力ステップと、
処理装置が、ｉ＝１，．．．，Ｌの各整数ｉについて昇順に、前記既定長値入力ステップで入力した値Ｍ［ｉ］と、ｎビットの値ｙ１［ｉ−１］（値ｙ１［０］は所定値ＩＶ１）と、ｎビットの値ｙ２［ｉ−１］（値ｙ２［０］は所定値ＩＶ２）とを入力として、ｎビットの値ｘ１［ｉ］及び値ｘ２［ｉ］と、ｋビットの値ｋ１［ｉ］及び値ｋ２［ｉ］とを出力する関数ｆ［ｉ］を計算し、前記値ｘ１［ｉ］を平文とし、前記値ｋ１［ｉ］を鍵として、前記暗号化関数によりｎビットの値ｙ１［ｉ］を計算し、前記値ｘ２［ｉ］を平文とし、前記値ｋ２［ｉ］を鍵として、前記暗号化関数によりｎビットの値ｙ２［ｉ］を計算する圧縮関数計算ステップと、
処理装置が、前記圧縮関数計算ステップで計算した値ｙ１［Ｌ］と値ｙ２［Ｌ］とを入力として、全単射関数ｇによりハッシュ値を計算するハッシュ値計算ステップと
を備えることを特徴とするハッシュ値計算方法。
【国際調査報告】
2014046024.tif 000015
2014046024.tif 000016
2014046024.tif 000017
2014046024.tif 000018