説明

ハッシュ値生成装置、プログラム及びハッシュ値生成方法

【課題】 安全性の評価が可能なハッシュ関数を提供すること。
【解決手段】 入力されたメッセージをメッセージブロック化部122で、複数のメッセージブロックに分割し、ラウンド定数生成部123で生成されたラウンド定数を用いて、第一ラウンド鍵生成部124又は第二ラウンド鍵生成部125で生成されたラウンド鍵を用いて、撹拌部126において、メッセージブロック毎にブロック暗号を用いて撹拌を行う。ブロック暗号においては、メッセージブロックを分割した複数の分割データのうちの特定の分割データをF関数により変換を行い、他の特定の分割データとの排他的論理和を算出する。F関数においては、少なくとも非線形変換を含む変換を複数回行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ハッシュ値を生成する技術に関する。
【背景技術】
【0002】
ハッシュ関数は、任意長のメッセージを入力として、特定の長さのハッシュ値を生成する関数である。
【0003】
一般的に、ハッシュ関数は固定長のメッセージブロックを入力するブロック暗号から構成され、入力されたメッセージに対してブロック暗号化を繰り返し行うことで、メッセージの攪拌を行い、最終的にハッシュ値として出力する。ハッシュ関数の代表例としてはSHA−1、または、SHA−256等のSHA−2ハッシュ族、などがある(非特許文献1参照)。
【0004】
【非特許文献1】NIST FIPS 180-2, ”Secure Hash Standard”, 2002 August 1, pp. 9-23, http://csrc.nist.gov/publications /fips/fips180-2/fips180-2.pdf
【発明の開示】
【発明が解決しようとする課題】
【0005】
非特許文献1に記載のSHA−1は、ハッシュ関数が持つべき安全性である衝突耐性に問題があることが知られており、SHA−2ハッシュ族についても、SHA−1と類似した構造であることから、ハッシュ関数が持つべき安全性に問題を生ずる可能性がある。
【0006】
そこで、本発明は、安全性の評価が可能なハッシュ関数を提供することを目的とする。
【課題を解決するための手段】
【0007】
以上の課題を解決するため、本発明は、非線形変換を複数回行うF関数を備えるブロック暗号を用いてハッシュ値を生成する。
【0008】
例えば、本発明は、メッセージを予め定められたデータ長のブロックにして、当該ブロックを分割した複数の分割データのうちの特定の分割データをF関数により変換を行い、他の特定の分割データとの排他的論理和を算出する撹拌処理を含むブロック暗号を用いて、前記メッセージのハッシュ値を生成するハッシュ値生成装置であって、前記F関数において、少なくとも非線形変換を含む変換を複数回行う制御部を備えること、を特徴とする。
【発明の効果】
【0009】
以上のように、本発明によれば、安全性の評価が可能なハッシュ関数を提供することができる。
【発明を実施するための最良の形態】
【0010】
図1は、本発明の第一の実施形態であるハッシュ値生成装置100の概略図である。
【0011】
ここで、本実施形態においては、512ビットのハッシュ値を生成するようにしている。
【0012】
図示するように、ハッシュ値生成装置100は、記憶部110と、制御部120と、入力部130と、出力部140と、を備える。
【0013】
記憶部110は、初期値記憶領域111と、定数ラウンド値記憶領域112と、鍵ラウンド値記憶領域113と、平文ラウンド値記憶領域114と、算出値記憶領域115と、ハッシュ値記憶領域116と、を備える。
【0014】
初期値記憶領域111には、ハッシュ値を生成する際の初期値を特定する情報が格納される。
【0015】
本実施形態においては、ハッシュ値を生成する際の初期値として、定数ラウンド値の初期値と、算出値の初期値と、が記憶される。
【0016】
ここで、定数ラウンド値の初期値は、例えば、c(−1)=0xffffffffffffffffffffffffffffffffといった定数が記憶される。
【0017】
また、算出値の初期値は、H−1=(H−1.0,H−1.1,・・・,H−1.7)であり、H−1.0=0x0000000000000000、H−1.1=0x0000000000000000、H−1.2=0x0000000000000000、H−1.3=0x0000000000000000、H−1.4=0x0000000000000000、H−1.5=0x0000000000000000、H−1.6=0x0000000000000000、H−1.7=0x0000000000000000、といった定数が記憶される。
【0018】
なお、定数ラウンド値及び算出値の初期値に使用される定数はこれらに限定されるわけではなく、例えば、疑似乱数生成器等で生成された乱数を使用することも可能である。
【0019】
定数ラウンド値記憶領域112には、各々のメッセージブロックにおけるラウンド毎の定数ラウンド値を特定する情報が格納される。
【0020】
なお、本実施形態においては、定数ラウンド値は、後述するラウンド定数生成部123で生成される。
【0021】
鍵ラウンド値記憶領域113には、各々のメッセージブロックにおけるラウンド毎の鍵ラウンド値を特定する情報が格納される。
【0022】
なお、本実施形態においては、鍵ラウンド値は、後述する第一ラウンド鍵生成部124又は第二ラウンド鍵生成部125で生成される。
【0023】
平文ラウンド値記憶領域114には、各々のメッセージブロックにおけるラウンド毎の平文ラウンド値を特定する情報が格納される。
【0024】
なお、本実施形態においては、平文ラウンド値は、後述する撹拌部126で生成される。
【0025】
算出値記憶領域115には、各々のメッセージブロックにおいて全てのラウンドを経て算出された算出値を特定する情報が格納される。
【0026】
なお、本実施形態においては、算出値は、後述する全体制御部121で生成される。
【0027】
ハッシュ値記憶領域には、全てのメッセージブロックにおいて全てのラウンドを経て算出されたハッシュ値を特定する情報が格納される。
【0028】
なお、本実施形態においては、ハッシュ値は、後述する全体制御部121で生成される。
【0029】
制御部120は、全体制御部121と、メッセージブロック化部122と、ラウンド定数生成部123と、第一ラウンド鍵生成部124と、第二ラウンド鍵生成部125と、撹拌部126と、を備える。
【0030】
全体制御部121は、ハッシュ値生成装置100における処理の全体を制御する。
【0031】
特に、本実施形態においては、ハッシュ値を算出するメッセージをブロック化したメッセージブロックを管理する処理や、ラウンド定数生成部123、第一ラウンド鍵生成部124、第二ラウンド鍵生成部125及び撹拌部126でのラウンドを管理する処理を行う。
【0032】
また、全体制御部121は、全てのラウンドを経て撹拌部126において算出された平文ラウンド値と、当該ラウンドでの処理の対象となったメッセージブロックと、の排他的論理和を算出することで、算出値を算出する。
【0033】
さらに、全体制御部121は、全てのメッセージブロック及び全てのラウンドを経て撹拌部126において算出された平文ラウンド値と、最後のメッセージブロックと、の排他的論理和を算出することで、ハッシュ値を算出する。
【0034】
メッセージブロック化部122は、ハッシュ値を算出する対象となるメッセージを予め定められたビット長のブロックに分割し、パディングを行う。
【0035】
ここで、本実施形態では、ハッシュ値を算出する対象となるメッセージを512ビット毎のブロックに分割するようにしているが、このような態様に限定されるわけではない。
【0036】
また、例えば、本実施形態におけるパディングは、以下のようにして行う。
【0037】
まず、メッセージブロック化部122は、ハッシュ値を算出する対象となるメッセージのビット数が、512ビットで割り切れる場合には、当該メッセージを512ビット毎に分割することで各々のメッセージブロックを生成するとともに、メッセージブロックを追加して最後のメッセージブロックとする。
【0038】
そして、メッセージブロック化部122は、この最後のメッセージブロックにおいて、先頭ビットに「1」、先頭ビットの次のビットから数えて383ビットまでに「0」、最後の128ビットにメッセージのビット長、を特定する情報を格納する。
【0039】
次に、メッセージブロック化部122は、ハッシュ値を算出する対象となるメッセージのビット数が、512ビットで割り切れない場合には、当該メッセージを512ビット毎に分割することで各々のメッセージブロックを生成するとともに、分割した最後尾のメッセージブロックには最後のビットまで「0」を特定する情報を格納することで、512ビットにし、さらに、メッセージブロックを追加して最後のメッセージブロックとする。
【0040】
そして、メッセージブロック化部122は、この最後のメッセージブロックにおいて、先頭ビットから数えて384ビットまでに「0」、最後の128ビットにメッセージのビット長、を特定する情報を格納する。
【0041】
なお、本実施形態においては、ハッシュ値を算出するメッセージをMとし、パディングにより、512ビットで割り切れるようなビット長にされたメッセージをM’とし、メッセージブロックの数をk+1(kは1以上の整数)とし、各々のメッセージブロックをM’(iは、0≦i≦kなる整数)とする。
【0042】
ラウンド定数生成部123は、各ラウンドにおける定数ラウンド値及びラウンド定数を算出する。
【0043】
本実施形態においては、ラウンド定数生成部123は、最初のラウンドの場合には初期値記憶領域111に記憶されている定数ラウンド値の初期値から、または、最初のラウンドではない場合には定数ラウンド値記憶領域112に記憶されている前ラウンドにおける定数ラウンド値から、線形変換関数fを用いて、各ラウンドにおける定数ラウンド値を算出する。
【0044】
例えば、図2(線形変換関数fを示す概略図)に示すように、ラウンド定数生成部123は、前ラウンド(r−1)の定数ラウンド値c(r−1)(r=0の場合には定数ラウンド値の初期値)を関数fに入力して算出された値の上位ビット(本実施形態では、上位64ビット)と下位ビット(本実施形態では、下位64ビット)を入れ替えることにより、今ラウンド(r)の定数ラウンド値c(r)を算出する。
【0045】
即ち、下記の(1)式及び(2)式に示されるようにして、前ラウンドの定数ラウンド値c(r−1)(r=0の場合には定数ラウンド値の初期値)から今ラウンドの定数ラウンド値c(r)を算出する。
【0046】
【数1】

【0047】
【数2】

【0048】
ここで、(1)式及び(2)式において、t及びtは、それぞれ、定数ラウンド値c(r−1)(r=0の場合には定数ラウンド値の初期値)を関数fに入力して算出された値の上位ビット及び下位ビットである。
【0049】
また、関数fは、線形フィードバックシフトレジスタ(LFSR)を用いる。
【0050】
一般に、LFSRは多項式で決定されるが、ここではLFSRを決定する多項式g(x)を、下記の(3)式のように定義する。
【0051】
【数3】

【0052】
但し、g(x)は有限体GF(2)において定義される多項式である。
【0053】
なお、関数fの擬似コードは、下記の(4)のように示される。
【0054】
【数4】

【0055】
ここで、「<<X」は、Xビットの左シフトを示し、「>>Y」は、Yビットの右シフトを示し、「^」は、ビット毎の排他的論理和を示し、「&」は、ビット毎の論理積を示し、「|」は、ビット毎の論理和を示す。また、hは、定数ラウンド値c(r−1)における上位ビット(上位64ビット)、lは、定数ラウンド値c(r−1)における下位ビット(下位64ビット)である。
【0056】
そして、ラウンド定数生成部123は、算出したラウンド(r)での定数ラウンド値c(r)の下位64ビットを、第rラウンドにおけるラウンド定数C(r)として、第一ラウンド鍵生成部124又は第二ラウンド鍵生成部125に出力する。
【0057】
以下に、R=96の場合におけるC(r)の一例を掲げる。
【0058】
(0)=0x9916b42b1075d3c4、C(1)=0xef660b4c6b97a9a1、C(2)=0x645ad0ac41d74f11、C(3)=0xdb7166e541d48abf、C(4)=0x81f2b60293356a19、C(5)=0x0b2cd041e8d806c6、C(6)=0x71ba676d3737d203、C(7)=0x5ac3fe60d882617f、C(8)=0xd670690748b71e50、C(9)=0x0de6b2578d83a9c6、C(10)=0x495850aeb6b42f1c、C(11)=0x379ac95e360ea718、C(12)=0x4388096e355a904b、C(13)=0xa81b9a1fa3d8e607、C(14)=0x1eb9d10b41021771、C(15)=0xa06e687e8f63981c、C(16)=0x7ae7442d04085dc5、C(17)=0x81b9a1fa3d8e6070、C(18)=0x8d745b60ffab5b2e、C(19)=0x7096388f8ddbfba6、C(20)=0x43a1d2e4854f16df、C(21)=0xd2c1168da307b8c4、C(22)=0x686e0046fab67746、C(23)=0x5b9dae851876b54c、C(24)=0xc7514acf0553f123、C(25)=0x7eef4ea7f5b2836d、C(26)=0x7bac60e8fac5e8b7、C(27)=0xeb24ce2c42a25be8、C(28)=0x8858c877049d8ee6、C(29)=0xbc0acc029ee139fd、C(30)=0x216321dc12763b99、C(31)=0xf02b300a7b84e7f4、C(32)=0x858c877049d8ee65、C(33)=0xa6458bfd0199b3ea、C(34)=0x6042a2a65c81c3f2、C(35)=0xef6690937d84b5cf、C(36)=0x91937e2ae66f5995、C(37)=0xdb7309991998fb06、C(38)=0x303d47cce25f1c32、C(39)=0x7d55d2d7f20bba44、C(40)=0xc0f51f33897c70c8、C(41)=0x93be008b27a4c52a、C(42)=0x134d887db199957d、C(43)=0x4ef8022c9e9314a8、C(44)=0x4d3621f6c66655f4、C(45)=0x5d09436695c67e9b、C(46)=0x244173688df1018c、C(47)=0x12cc464eb893d657、C(48)=0xe77572c54c267c57、C(49)=0x3d41a65d99ad233a、C(50)=0x8d4c3fa6a4f1a700、C(51)=0xf506997666b48ce9、C(52)=0x3530fe9a93c69c01、C(53)=0xb2f32e0d75581f9f、C(54)=0xa2b3450d34f80a62、C(55)=0xbdbc0752ae82041a、C(56)=0xfcbdab53a80253ee、C(57)=0x8080a22dc1ea6a0e、C(58)=0xe26f59fd346119e5、C(59)=0x020288b707a9a839、C(60)=0xef542c203e0e4baf、C(61)=0x7e7a9dbb6544da82、C(62)=0xadc944336c5178e0、C(63)=0x9f033d397a994632、C(64)=0xc155afaacaa799e6、C(65)=0x0a7c4b82918762ae、C(66)=0x15cf4a18bef631c4、C(67)=0x29f12e0a461d8ab8、C(68)=0x573d2862fbd8c710、C(69)=0xa7c4b82918762ae0、C(70)=0x3a1dea5f00e9307a、C(71)=0xe9625fc31a3ad1e7、C(72)=0x9e07161b7846bb8e、C(73)=0xb5108bbffc8311c1、C(74)=0x781c586de11aee39、C(75)=0xd4422efff20c4704、C(76)=0x86982a636be194de、C(77)=0x41914f4c5c594a4d、C(78)=0x1a60a98daf865378、C(79)=0x60ac76e59eef050f、C(80)=0x1ff21951c5fb3787、C(81)=0x92282f25efd44260、C(82)=0x7fc8654717ecde1d、C(83)=0x48a0bc97bf510980、C(84)=0x99c8dec8b039544f、C(85)=0x321b06ed692c705d、C(86)=0x67237b22c0e5513c、C(87)=0xc86c1bb5a4b1c174、C(88)=0xfa64a75fec1f68ca、C(89)=0x31299a6506af538d、C(90)=0x8f7bd6ab5ff78f13、C(91)=0xb2d6d6f3615f3452、C(92)=0x4b9fe5ca043c462a、C(93)=0xbd2be4aafe9eab2f、C(94)=0x3ee6639b84994ef5、C(95)=0xf4af92abfa7aacbc。
【0059】
第一ラウンド鍵生成部124は、各ラウンドにおける鍵ラウンド値及びラウンド鍵を算出する処理を行う。
【0060】
例えば、第一ラウンド鍵生成部124による鍵ラウンド値の算出は、図3(第一鍵ラウンド値変換関数fの概略図)に示す第一鍵ラウンド値変換関数fを用いて行われる。
【0061】
図示するように、第一鍵ラウンド値変換関数fは、第r−1ラウンドの鍵ラウンド値k(r−1)(但し、r=0の場合は、算出値記憶領域115に記憶されている算出値、または、初期値記憶領域111に記憶されている算出値の初期値)を8分割(ここでは、各々64ビット)した分割データであるk(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)を、それぞれ、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)に変換し、変換したこれらの値を連結することで、第rラウンドの鍵ラウンド値k(r)を生成する関数である。
【0062】
具体的には、第一鍵ラウンド値変換関数fでは、まず、第一ラウンド鍵生成部124が、鍵ラウンド値記憶領域113に記憶されている第r−1ラウンドの鍵ラウンド値(但し、r=0の場合は、算出値記憶領域115に記憶されている算出値、または、初期値記憶領域111に記憶されている算出値の初期値)を、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)に8等分する。
【0063】
次に、第一ラウンド鍵生成部124は、第r−1ラウンドの鍵ラウンド値の内のk(r−1)、k(r−1)、k(r−1)、k(r−1)、をそれぞれ第rラウンドの鍵ラウンド値の内のk(r)、k(r)、k(r)、k(r)、とする。
【0064】
次に、第一ラウンド鍵生成部124は、ラウンド定数生成部123で生成されたラウンド定数C(r)及び第r−1ラウンドのラウンド鍵の内のk(r−1)の排他的論理和の値aと、第r−1ラウンドのラウンド鍵の内のk(r−1)の値aと、を連結した値aをF関数である関数Fに入力した出力値の内の上位ビット(ここでは、上位64ビット)の値b(b=F(k(r−1) XOR C(r),k(r−1))と、下位ビット(ここでは、下位64ビット)の値b(b=F(k(r−1) XOR C(r),k(r−1))と、を算出する。
【0065】
そして、第一ラウンド鍵生成部124は、値bと、第r−1ラウンドの鍵ラウンド値の内のk(r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの鍵ラウンド値のk(r)とする。
【0066】
また、第一ラウンド鍵生成部124は、値bと、第r−1ラウンドの鍵ラウンド値の内のk(r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの鍵ラウンド値のk(r)とする。
【0067】
次に、第一ラウンド鍵生成部124は、第r−1ラウンドの鍵ラウンド値の内のk(r−1)、k(r−1)を、それぞれ第rラウンドの鍵ラウンド値k(r)、k(r)とする。
【0068】
そして、第一ラウンド鍵生成部124は、以上のようにして算出したk(r)、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)を連結して第rラウンドの鍵ラウンド値として、第r−1ラウンドの鍵ラウンド値と入れ替えて鍵ラウンド値記憶領域113に記憶する。
【0069】
また、第一ラウンド鍵生成部124は、第rラウンドの鍵ラウンド値の内のk(r)を、第rラウンドのラウンド鍵K(r)として、撹拌部126に出力する。
【0070】
次に、第一ラウンド鍵生成部124で使用するF関数である関数Fについて説明する。
【0071】
関数Fは、下記の(5)式に示すように、非線形変換γと、線形変換λと、の合成変換を行う関数である。
【0072】
【数5】

【0073】
また、線形変換λは、バイト置換πと、行列変換θと、の合成変換である。
【0074】
ここで、関数Fへの入力をX、関数Fからの出力をYとして説明する。
【0075】
本実施形態においては、X及びYは、128ビットのデータである。
【0076】
まず、非線形変換γでは、値Xを8ビット毎のサブデータ(s,s,・・・,s15)に分割して、分割した各々のサブデータを、下記の(6)式に示すように、置換テーブルS−boxを用いて非線形変換を行う。ここで、変換後のサブデータをs’,s’,・・・,s’15とする。
【0077】
【数6】

【0078】
なお、置換テーブルSboxは、例えば、下記の(7)で示される。
【0079】
【数7】

【0080】
次に、行列変換θでは、上記の非線形変換γでの変換後のサブデータ(s’,s’,・・・,s’15)を8行2列の行列にして、下記の(10)式に示すように、変換行列Aとの乗算を行うことで、変換を行う。ここで、変換後のサブデータをs”,s”,・・・,s”15とする。乗算は、有限体GF(2)上での乗算である。有限体GF(2^8)は、下記の(8)式及び(9)式を満たす。
【0081】
【数8】

【0082】
【数9】

【0083】
【数10】

【0084】
ここで、変換行列Aは、ある列を入力列とし、当該入力列に対して変換行列Aによる変換を行った後の値の列を出力列とした場合に、入力列及び出力列に含まれる項の内、値が「0」ではない項が、9個以上になるような変換であれば、どのような変換行列を用いてもよい。
【0085】
次に、バイト置換πでは、下記の(11)式に示すように、行列変換θで変換されたサブデータ(s”,s”,・・・,s”15)のうちの半分のデータの入れ替えを行う。なお、変換後のサブデータをy,y,・・・,y15とする。
【0086】
【数11】

【0087】
そして、以上のようにして算出されたサブデータ(y,y,・・・,y15)を(12)式のように連結することで、関数Fの出力Yとする。
【0088】
【数12】

【0089】
以上の関数Fでは、後述する関数Fと比較して、一つの入力に対して一回の処理で出力を行うため、計算量が少なくてすみ、軽実装が可能となる。
【0090】
図1に戻り、第二ラウンド鍵生成部125は、各ラウンドにおける鍵ラウンド値及びラウンド鍵を算出する処理を行う。
【0091】
例えば、第二ラウンド鍵生成部125による鍵ラウンド値の算出は、図4(第二鍵ラウンド値変換関数f’の概略図)に示す第二鍵ラウンド値変換関数f’を用いて行われる。
【0092】
図示するように、第二鍵ラウンド値変換関数f’は、第r−1ラウンドの鍵ラウンド値k(r−1)(但し、r=0の場合は、算出値記憶領域115に記憶されている算出値、または、初期値記憶領域111に記憶されている算出値の初期値)を8分割(ここでは、各々64ビット)した分割データであるk(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)を、それぞれ、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)に変換し、変換したこれらの値を連結することで、第rラウンドの鍵ラウンド値k(r)を生成する関数である。
【0093】
具体的には、第二鍵ラウンド値変換関数f’Kでは、まず、第二ラウンド鍵生成部125が、鍵ラウンド値記憶領域113に記憶されている第r−1ラウンドの鍵ラウンド値(但し、r=0の場合は、算出値記憶領域115に記憶されている算出値)を、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)に8等分する。
【0094】
次に、第二ラウンド鍵生成部125は、第r−1ラウンドの鍵ラウンド値(r=0の場合には算出値)の内のk(r−1)、k(r−1)、k(r−1)、k(r−1)、をそれぞれ第rラウンドの鍵ラウンド値の内のk(r)、k(r)、k(r)、k(r)、とする。
【0095】
次に、第二ラウンド鍵生成部125は、ラウンド定数生成部123で生成されたラウンド定数C(r)及び第r−1ラウンドの鍵ラウンド値(r=0の場合には算出値)の内のk(r−1)の排他的論理和である値a’と、第r−1ラウンドの鍵ラウンド値(r=0の場合には算出値)の内のk(r−1)の値a’と、を連結した値a’をF関数である関数Fに入力した出力値の内の上位ビット(ここでは、上位64ビット)の値b’(b’=F(k(r−1) XOR C(r),k(r−1))と、下位ビット(ここでは、下位64ビット)の値b’(b=F(k(r−1) XOR C(r),k(r−1))と、を算出する。
【0096】
そして、第二ラウンド鍵生成部125は、値b’と、第r−1ラウンドの鍵ラウンド値(r=0の場合には算出値)の内のk(r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの鍵ラウンド値のk(r)とする。
【0097】
また、第二ラウンド鍵生成部125は、値b’と、第r−1ラウンドの鍵ラウンド値(r=0の場合には算出値)の内のk(r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの鍵ラウンド値のk(r)とする。
【0098】
次に、第二ラウンド鍵生成部125は、第r−1ラウンドの鍵ラウンド値(r=0の場合には算出値)の内のk(r−1)、k(r−1)を、それぞれ第rラウンドの鍵ラウンド値k(r)、k(r)とする。
【0099】
そして、第二ラウンド鍵生成部125は、以上のようにして算出したk(r)、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)を連結して第rラウンドの鍵ラウンド値として、第r−1ラウンドの鍵ラウンド値と入れ替えて鍵ラウンド値記憶領域113に記憶する。
【0100】
また、第二ラウンド鍵生成部125は、第rラウンドの鍵ラウンド値の内のk(r)を、第rラウンドのラウンド鍵K(r)として、撹拌部126に出力する。
【0101】
次に、第二ラウンド鍵生成部125で使用するF関数である関数Fについて説明する。
【0102】
関数Fは、下記の(13)式に示すように、非線形変換γと、バイト置換πと、行列変換θと、の合成変換を4回(4段)行う関数である。
【0103】
【数13】

【0104】
ここで、関数Fへの入力をX、関数Fからの出力をYとして説明する。本実施形態においては、X及びYは、128ビットのデータである。
【0105】
まず、非線形変換γでは、値Xを8ビット毎のサブデータ(s,s,・・・,s15)に分割して、分割した各々のサブデータを、下記の(14)式に示すように、置換テーブルS−boxを用いて非線形変換を行う。ここで、変換後のサブデータをs’,s’,・・・,s’15とする。
【0106】
【数14】

【0107】
なお、置換テーブルSboxは、例えば、上記の(7)で示されるものを使用すればよい。
【0108】
次に、バイト置換πでは、(15)式に示すように、非線形変換γで変換されたサブデータ(s’,s’,・・・,s’15)を4行4列の行列として、各々の列に含まれる各々の行のデータが各々異なる列に配置されるように、データの入れ替えを行う。なお、(15)式は一例であって、各々の列に含まれる各々の行のデータが各々異なる列に配置されるものであれば、他の入れ替え方式を採用することも可能である。
【0109】
また、変換後のサブデータをs”,s”,・・・,s”15とする。
【0110】
【数15】

【0111】
次に、行列変換θでは、下記の(16)式に示すように、上記のバイト置換πでの変換後のサブデータ(s”,s”,・・・,s”15)を要素とする4行4列の行列と、変換行列Bと、の有限体GF(2)上での乗算を行うことで、変換を行う。ここで、変換後のサブデータをy,y,・・・,y15とする。
【0112】
【数16】

【0113】
ここで、変換行列Bは、ある列を入力列とし、当該入力列に対して変換行列Bによる変換を行った後の値の列を出力列とした場合に、入力列及び出力列に含まれる項の内、値が「0」ではない項が、5個以上になるような変換であれば、どのような変換行列を用いてもよい。
【0114】
そして、このようにして算出されたサブデータ(y,y,・・・,y15)を、(17)式に示すように、サブデータ(s,s,・・・,s15)として、非線形変換γ、バイト置換π及び行列変換θによる変換を3回(合計4回)行うことで、算出されるサブデータ(y,y,・・・,y15)を(17)式のように連結することで、関数Fの出力Yとする。
【0115】
【数17】

【0116】
以上の関数Fでは、前述の関数Fと比較して、一つの入力に対して4回の処理で出力を行うため、安全性を高めることができる。なお、この4回という回数については、適宜変更可能である。
【0117】
図1に戻り、撹拌部126は、各ラウンドにおける平文ラウンド値を算出する処理を行う。
【0118】
例えば、撹拌部126による平文ラウンド値の算出は、図5(平文ラウンド値変換関数fの概略図)に示す平文ラウンド値変換関数fを用いて行われる。
【0119】
図示するように、平文ラウンド値変換関数fは、第r−1ラウンドの平文ラウンド値x(r−1)(但し、r=0の場合は、メッセージブロック化部122でブロック化されたメッセージブロックM’)を8分割(ここでは、各々64ビット)した分割データであるx(r−1)、x(r−1)、x(r−1)、x(r−1)、x(r−1)、x(r−1)、x(r−1)、x(r−1)を、それぞれ、x(r)、x(r)、x(r)、x(r)、x(r)、x(r)、x(r)、x(r)に変換し、変換したこれらの値を連結することで、第rラウンドの平文ラウンド値x(r)を生成する関数である。
【0120】
具体的には、平文ラウンド値変換関数fでは、まず、撹拌部126が、平文ラウンド値記憶領域114に記憶されている第r−1ラウンドの平文ラウンド値(但し、r=0の場合は、メッセージブロック化部122でブロック化されたメッセージブロックM’)を、x(r−1)、x(r−1)、x(r−1)、x(r−1)、x(r−1)、x(r−1)、x(r−1)、x(r−1)に8等分する。
【0121】
次に、撹拌部126は、第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx(r−1)、x(r−1)、x(r−1)、x(r−1)、をそれぞれ第rラウンドの平文ラウンド値の内のx(r)、x(r)、x(r)、x(r)、とする。
【0122】
次に、撹拌部126は、第一ラウンド鍵生成部124又は第二ラウンド鍵生成部125で生成されたラウンド鍵K(r)及び第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx(r−1)の排他的論理和である値pと、第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx(r−1)の値pと、を連結した値pをF関数である関数Fに入力した出力値の内の上位ビット(ここでは、上位64ビット)の値qと(q=F(x(r−1) XOR K(r),x(r−1))、下位ビット(ここでは、下位64ビット)の値qと(q=F(x(r−1) XOR K(r),x(r−1))、を算出する。
【0123】
そして、撹拌部126は、値qと、第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx(r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの平文ラウンド鍵のx(r)とする。
【0124】
また、撹拌部126は、値qと、第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx(r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの平文ラウンド値のx(r)とする。
【0125】
次に、撹拌部126は、第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx(r−1)、x(r−1)を、それぞれ第rラウンドの平文ラウンド値x(r)、x(r)とする。
【0126】
そして、撹拌部126は、以上のようにして算出したx(r)、x(r)、x(r)、x(r)、x(r)、x(r)、x(r)、x(r)を連結して第rラウンドの平文ラウンド値として、第r−1ラウンドの鍵ラウンド値と入れ替えて平文ラウンド値記憶領域114に記憶する。
【0127】
撹拌部126で使用するF関数である関数Fについては、上述の(13)式で示されているものと同様であるため、説明を省略する。
【0128】
入力部130は、情報の入力を受け付ける。
【0129】
出力部140は、情報を出力する。
【0130】
以上に記載したハッシュ値生成装置100は、例えば、図6(コンピュータ900の概略図)に示すような、CPU(Central Processing Unit)901と、メモリ902と、HDD(Hard Disk Drive)等の外部記憶装置903と、CD−ROM(Compact Disk Read Only Memory)やDVD−ROM(Digital Versatile Disk Read Only Memory)等の可搬性を有する記憶媒体904に対して情報を読み書きする読書装置905と、キーボードやマウスなどの入力装置906と、ディスプレイなどの出力装置907と、通信ネットワークに接続するためのNIC(Network Interface Card)等の通信装置908と、を備えた一般的なコンピュータ900で実現できる。
【0131】
例えば、記憶部110は、CPU901がメモリ902又は外部記憶装置903を利用することにより実現可能であり、制御部120は、外部記憶装置903に記憶されている所定のプログラムをメモリ902にロードしてCPU901で実行することで実現可能であり、入力部130は、CPU901が入力装置906を利用することで実現可能であり、出力部140は、CPU901が出力装置907を利用することで実現可能である。
【0132】
この所定のプログラムは、読書装置905を介して記憶媒体904から、あるいは、通信装置908を介してネットワークから、外部記憶装置903にダウンロードされ、それから、メモリ902上にロードされてCPU901により実行されるようにしてもよい。また、読書装置905を介して記憶媒体904から、あるいは、通信装置908を介してネットワークから、メモリ902上に直接ロードされ、CPU901により実行されるようにしてもよい。
【0133】
次に、図7(ハッシュ値の算出処理を示す概略図)を用いて、ハッシュ値生成装置100がハッシュ値を算出する処理の概略を示す。
【0134】
まず、ハッシュ値生成装置100では、入力部130を介して、ハッシュ値を生成するメッセージMの入力を受け付け、ハッシュ値生成装置100の全体制御部121が、メッセージブロック化部122にメッセージMを入力する。
【0135】
そして、メッセージブロック化部122では、メッセージMをパディングして、512ビット毎のメッセージブロック(M’,・・・,M’;kは1以上の整数)に分割する。
【0136】
次に、全体制御部121は、初期値記憶領域111に記憶されている算出値の初期値H−1と、メッセージブロック化部122でブロック化されたメッセージブロックM’のうち、最初のメッセージブロックM’と、を第一ブロック暗号fに入力することで、平文ラウンド値hを算出する。
【0137】
ここで、第一ブロック暗号fを用いた処理は、後述するように、ラウンド定数生成部123、第一ラウンド鍵生成部124及び撹拌部126で行われる。
【0138】
そして、全体制御部121は、算出した平文ラウンド値hと、メッセージブロックM’と、の排他的論理和を算出することで、算出値を求め、求めた算出値と、次のメッセージブロックM’と、を第一ブロック暗号fに入力することで、平文ラウンド値hを算出する。なお、算出された算出値については、算出値記憶領域115に記憶される。
【0139】
このような処理を、最後のメッセージブロックM’の直前のメッセージブロックM’k−1まで繰り返すことで、平文ラウンド値hk−1を算出する。
【0140】
そして、全体制御部121は、平文ラウンド値hk−1と、メッセージブロックM’k−1と、の排他的論理和で算出される算出値と、最後のメッセージブロックM’と、を第二ブロック暗号f’に入力することにより、平文ラウンド値hを算出する。
【0141】
ここで、第二ブロック暗号f’を用いた処理は、後述するように、ラウンド定数生成部123、第二ラウンド鍵生成部125及び撹拌部126で行われる。
【0142】
そして、全体制御部121は、平文ラウンド値hと、最後のメッセージブロックM’と、の排他的論理和でハッシュ値Hを算出する。
【0143】
このようなハッシュ値Hは、ハッシュ値記憶領域116に記憶される。
【0144】
なお、本発明におけるハッシュ値の算出処理(方法)は、図7に示した処理(方法)に限定されるわけではなく、第一ブロック暗号f又は、第二ブロック暗号f’の少なくとも何れか一方を利用すれば、どのようなものであってもよく。
【0145】
図8は、第一ブロック暗号fでの処理を示す概略図である。
【0146】
まず、ラウンド定数生成部123は、初期値記憶領域111に記憶されている定数ラウンド値の初期値を取得して、図2に示すような線形変換関数fを用いた処理を行うことにより、ラウンドr=0における定数ラウンド値c(0)を算出し、定数ラウンド値c(0)の下位64ビットを、ラウンドr=0におけるラウンド定数C(0)として算出する。
【0147】
そして、ラウンド定数生成部123は、算出した定数ラウンド値c(0)を定数ラウンド値記憶領域112に記憶し、ラウンド定数C(0)を第一ラウンド鍵生成部124に出力する。
【0148】
次に、第一ラウンド鍵生成部124は、第一ブロック暗号fに入力されたメッセージブロックM’がメッセージブロックM’の場合には、初期値記憶領域111に記憶されている算出値の初期値を取得して、一方、第一ブロック暗号fに入力されたメッセージブロックM’がメッセージブロックM’ではない場合には、算出値記憶領域115に記憶されている前メッセージブロックM’における算出値を取得して、図3に示すような第一鍵ラウンド値変換関数fKを用いた処理を行うことにより、r=0における鍵ラウンド値k(0)を算出し、また、鍵ラウンド値k(0)の内のk(0)を、ラウンドr=0のラウンド鍵K(0)として算出する。
【0149】
そして、第一ラウンド鍵生成部124は、鍵ラウンド値k(0)を鍵ラウンド値記憶領域113に記憶し、ラウンド鍵K(0)を撹拌部126に出力する。
【0150】
次に、撹拌部126は、第一ブロック暗号fに入力されたメッセージブロックM’を取得して、図5に示すような平文ラウンド値変換関数fを用いた処理を行うことにより、r=0における平文ラウンド値x(0)を算出し、平文ラウンド値記憶領域114に記憶する。
【0151】
以上で、第0ラウンドの処理を終了する。
【0152】
次に、ラウンド定数生成部123は、定数ラウンド値記憶領域112に記憶されている定数ラウンド値c(0)を取得して、図2に示すような線形変換関数fを用いた処理を行うことにより、ラウンドr=1における定数ラウンド値c(1)を算出し、定数ラウンド値c(1)の下位64ビットを、ラウンドr=1におけるラウンド定数C(1)として算出する。
【0153】
そして、ラウンド定数生成部123は、算出した定数ラウンド値c(1)を、定数ラウンド値c(0)に置き換えて(いわゆる上書きして)、定数ラウンド値記憶領域112に記憶し、ラウンド定数C(1)を第一ラウンド鍵生成部124に出力する。
【0154】
次に、第一ラウンド鍵生成部124は、鍵ラウンド値記憶領域113に記憶されている鍵ラウンド値k(0)を取得して、図3に示すような第一鍵ラウンド値変換関数fKを用いた処理を行うことにより、ラウンドr=1における鍵ラウンド値k(1)を算出し、また、鍵ラウンド値k(1)の内のk(1)を、ラウンドr=1のラウンド鍵K(1)として算出する。
【0155】
そして、第一ラウンド鍵生成部124は、算出した鍵ラウンド値k(1)を、鍵ラウンド値k(0)に置き換えて(いわゆる上書きして)、鍵ラウンド値記憶領域113に記憶し、ラウンド鍵K(1)を撹拌部126に出力する。
【0156】
次に、撹拌部126は、平文ラウンド値記憶領域114に記憶されている平文ラウンド値x(0)を取得して、図5に示すような平文ラウンド値変換関数fを用いた処理を行うことにより、ラウンドr=1における平文ラウンド値x(1)を算出し、算出した平文ラウンド値x(1)を、平文ラウンド値x(0)に置き換えて(いわゆる上書きして)、平文ラウンド値記憶領域114に記憶する。
【0157】
以上で、第1ラウンドの処理を終了する。
【0158】
そして、以上に記載した第1ラウンドでの処理と同様の処理を、所定のラウンド(ここでは、第31ラウンド)まで繰り返すことで、第一ブロック暗号fでの処理を終了する。
【0159】
図9は、第二ブロック暗号f’での処理を示す概略図である。
【0160】
まず、ラウンド定数生成部123は、初期値記憶領域111に記憶されている定数ラウンド値の初期値を取得して、図2に示すような線形変換関数fを用いた処理を行うことにより、ラウンドr=0における定数ラウンド値c(0)を算出し、定数ラウンド値c(0)の下位64ビットを、ラウンドr=0におけるラウンド定数C(0)として算出する。
【0161】
そして、ラウンド定数生成部123は、算出した定数ラウンド値c(0)を定数ラウンド値記憶領域112に記憶し、ラウンド定数C(0)を第二ラウンド鍵生成部125に出力する。
【0162】
次に、第二ラウンド鍵生成部125は、算出値記憶領域115に記憶されている前メッセージブロックM’k−1における算出値を取得して、図4に示すような第二鍵ラウンド値変換関数f’を用いた処理を行うことにより、r=0における鍵ラウンド値k(0)を算出し、また、鍵ラウンド値k(0)の内のk(0)を、ラウンドr=0のラウンド鍵K(0)として算出する。
【0163】
そして、第二ラウンド鍵生成部125は、鍵ラウンド値k(0)を鍵ラウンド値記憶領域113に記憶し、ラウンド鍵K(0)を撹拌部126に出力する。
【0164】
次に、撹拌部126は、第二ブロック暗号f’に入力されたメッセージブロックM’を取得して、図5に示すような平文ラウンド値変換関数fを用いた処理を行うことにより、r=0における平文ラウンド値x(0)を算出し、平文ラウンド値記憶領域114に記憶する。
【0165】
以上で、第0ラウンドの処理を終了する。
【0166】
次に、ラウンド定数生成部123は、定数ラウンド値記憶領域112に記憶されている定数ラウンド値c(0)を取得して、図2に示すような線形変換関数fを用いた処理を行うことにより、ラウンドr=1における定数ラウンド値c(1)を算出し、定数ラウンド値c(1)の下位64ビットを、ラウンドr=1におけるラウンド定数C(1)として算出する。
【0167】
そして、ラウンド定数生成部123は、算出した定数ラウンド値c(1)を、定数ラウンド値c(0)に置き換えて(いわゆる上書きして)、定数ラウンド値記憶領域112に記憶し、ラウンド定数C(1)を第二ラウンド鍵生成部125に出力する。
【0168】
次に、第二ラウンド鍵生成部125は、鍵ラウンド値記憶領域113に記憶されている鍵ラウンド値k(0)を取得して、図4に示すような第二鍵ラウンド値変換関数f’を用いた処理を行うことにより、ラウンドr=1における鍵ラウンド値k(1)を算出し、また、鍵ラウンド値k(1)の内のk(1)を、ラウンドr=1のラウンド鍵K(1)として算出する。
【0169】
そして、第二ラウンド鍵生成部125は、算出した鍵ラウンド値k(1)を、鍵ラウンド値k(0)に置き換えて(いわゆる上書きして)、鍵ラウンド値記憶領域113に記憶し、ラウンド鍵K(1)を撹拌部126に出力する。
【0170】
次に、撹拌部126は、平文ラウンド値記憶領域114に記憶されている平文ラウンド値x(0)を取得して、図5に示すような平文ラウンド値変換関数fを用いた処理を行うことにより、ラウンドr=1における平文ラウンド値x(1)を算出し、算出した平文ラウンド値x(1)を、平文ラウンド値x(0)に置き換えて(いわゆる上書きして)、平文ラウンド値記憶領域114に記憶する。
【0171】
以上で、第1ラウンドの処理を終了する。
【0172】
以上に記載した第1ラウンドでの処理と同様の処理を、所定のラウンド(ここでは、第31ラウンド)まで繰り返すことで、第二ブロック暗号f’での処理を終了する。
【0173】
図10は、ハッシュ値生成装置100におけるハッシュ値の生成処理を示すフローチャートである。
【0174】
まず、ハッシュ値生成装置100は、入力部130を介してハッシュ値を生成する元となるメッセージMを取得する(S10)。
【0175】
次に、メッセージブロック化部122は、入出部130を介して取得したメッセージを予め定められたデータ長に分割することによりk+1個のメッセージブロックM’を生成する(S11)。ここで、本実施形態においては、メッセージを512ビットのデータ長に分割するようにしている。
【0176】
次に、全体制御部121は、定数ラウンド値記憶領域112、鍵ラウンド値記憶領域113、平文ラウンド値記憶領域114、算出値記憶領域115及びハッシュ値記憶領域116に記憶されている情報のリセットを行う(S12)。具体的には、全てのビット値を「0」にする。
【0177】
次に、全体制御部121は、メッセージブロックのカウンタであるメッセージカウンタiの値を初期化する(S13)。ここでは、メッセージカウンタiの値に「0」を代入する。
【0178】
次に、全体制御部121は、メッセージカウンタiの値が、i=kとなっているか否かを判断する(S14)。
【0179】
ステップS14で、i=kとなっていない場合には(ステップS14でNo)、ステップS15に進み、i=kとなっている場合には(ステップS14でYes)、ステップS21に進む。
【0180】
ステップS15では、全体制御部121は、ラウンドのカウンタであるラウンドカウンタrに初期値「0」を代入する。
【0181】
次に、全体制御部121は、ラウンドカウンタrの値が、予め定められた第一ラウンド数(ここでは、ROUND NUM=31)に対して、r=(ROUND NUM)+1の関係にあるか否かを判断する(S16)。ステップS16において、r=(ROUND NUM)+1の関係にある場合には、ステップS19に進み、r=(ROUND NUM)+1の関係にない場合には、ステップS17に進む。
【0182】
ステップS17では、ラウンド定数生成部123、第一ラウンド鍵生成部124及び撹拌部126において、第一ブロック暗号fを用いて、定数ラウンド値、鍵ラウンド値及び平文ラウンド値を算出し、定数ラウンド値記憶領域112、鍵ラウンド値記憶領域113及び平文ラウンド値記憶領域114に記憶されている情報を更新する。
【0183】
次に、全体制御部121は、ラウンドカウンタrの値に「1」をインクリメントして、ステップS16に戻って処理を繰り返す。
【0184】
また、ステップS19では、全体制御部121は、平文ラウンド値記憶領域114に記憶されている平文ラウンド値と、メッセージブロックM’と、の排他的論理和を算出することで算出値を算出し、算出した算出値で算出値記憶領域115に記憶されている情報を更新する。
【0185】
そして、全体制御部121は、メッセージカウンタiの値に「1」をインクリメントして(S20)、ステップS14に戻って処理を繰り返す。
【0186】
一方、ステップS14において、i=kとなっている場合には(ステップS14でYes)、ステップS21において、全体制御部121は、ラウンドのカウンタであるラウンドカウンタrに初期値「0」を代入する。
【0187】
次に、全体制御部121は、ラウンドカウンタrの値が、予め定められた第二ラウンド数(ここでは、ROUND NUM=31)に対して、r=(ROUND NUM)+1の関係にあるか否かを判断する(S22)。
【0188】
そして、ステップS22において、r=(ROUND NUM)+1の関係にある場合には(ステップS22でYes)、ステップS25に進み、r=(ROUND NUM)+1の関係にない場合には(ステップS22でNo)、ステップS23に進む。
【0189】
ステップS23では、ラウンド定数生成部123、第二ラウンド鍵生成部125及び撹拌部126において、第二ブロック暗号f’を用いて、定数ラウンド値、鍵ラウンド値及び平文ラウンド値を算出し、定数ラウンド値記憶領域112、鍵ラウンド値記憶領域113及び平文ラウンド値記憶領域114に記憶されている情報を更新する。
【0190】
次に、全体制御部121は、ラウンドカウンタrの値に「1」をインクリメントして(S24)、ステップS22に戻って処理を繰り返す。
【0191】
また、ステップS25では、全体制御部121は、平文ラウンド値記憶領域114に記憶されている平文ラウンド値と、メッセージブロックM’と、の排他的論理和を算出することでハッシュ値を算出し、ハッシュ値記憶領域116に記憶されている情報を更新する。
【0192】
以上のように、本実施形態においては、512ビットにおけるブロック暗号を用いているため、理論的安全性と実装安全性が保証されたハッシュ関数を提供することができる。
【0193】
図11は、本発明の第二の実施形態であるハッシュ値生成装置200の概略図である。
【0194】
ここで、本実施形態においては、256ビットのハッシュ値を生成するようにしている。
【0195】
図示するように、ハッシュ値生成装置200は、記憶部210と、制御部220と、入力部130と、出力部140と、を備え、第一の実施形態と比較して、記憶部210及び制御部220が異なっているため、以下これらの異なっている点に関連する事項について説明する。
【0196】
記憶部210は、初期値記憶領域211と、定数ラウンド値記憶領域112と、鍵ラウンド値記憶領域113と、平文ラウンド値記憶領域114と、算出値記憶領域115と、ハッシュ値記憶領域116と、を備え、第一の実施形態と比較して、初期値記憶領域211に記憶されている情報が異なっているため、以下この異なっている点に関連する事項について説明する。
【0197】
初期値記憶領域211には、ハッシュ値を生成する際の初期値を特定する情報が格納される。
【0198】
本実施形態においては、ハッシュ値を生成する際の初期値として、定数ラウンド値の初期値と、算出値の初期値と、が記憶される。
【0199】
ここで、定数ラウンド値の初期値は、例えば、c(−1)=0xffffffffffffffffといった定数が記憶される。
【0200】
また、算出値の初期値は、H−1=(H−1.0,H−1.1,・・・,H−1.7)であり、H−1.0=0x00000000、H−1.1=0x00000000、H−1.2=0x00000000、H−1.3=0x00000000、H−1.4=0x00000000、H−1.5=0x00000000、H−1.6=0x00000000、H−1.7=0x00000000、といった定数が記憶される。
【0201】
なお、定数ラウンド値及び算出値の初期値に使用される定数はこれらに限定されるわけではなく、例えば、疑似乱数生成器等で生成された乱数を使用することも可能である。
【0202】
制御部220は、全体制御部221と、メッセージブロック化部222と、ラウンド定数生成部223と、第一ラウンド鍵生成部224と、第二ラウンド鍵生成部225と、撹拌部226と、を備える。
【0203】
全体制御部221は、ハッシュ値生成装置200における処理の全体を制御する。
【0204】
特に、本実施形態においては、ハッシュ値を算出するメッセージをブロック化したメッセージブロックを管理する処理や、ラウンド定数生成部223、第一ラウンド鍵生成部224、第二ラウンド鍵生成部225及び撹拌部226でのラウンドを管理する処理を行う。
【0205】
また、全体制御部221は、全てのラウンドを経て撹拌部226において算出された平文ラウンド値と、当該ラウンドでの処理の対象となったメッセージブロックと、の排他的論理和を算出することで、算出値を算出する。
【0206】
さらに、全体制御部221は、全てのメッセージブロック及び全てのラウンドを経て撹拌部226において算出された平文ラウンド値と、最後のメッセージブロックと、の排他的論理和を算出することで、ハッシュ値を算出する。
【0207】
メッセージブロック化部222は、ハッシュ値を算出する対象となるメッセージを予め定められたビット長のブロックに分割し、パディングを行う。
【0208】
ここで、本実施形態では、ハッシュ値を算出する対象となるメッセージを256ビット毎のブロックに分割するようにしているが、このような態様に限定されるわけではない。
【0209】
また、例えば、本実施形態におけるパディングは、以下のようにして行う。
【0210】
まず、メッセージブロック化部222は、ハッシュ値を算出する対象となるメッセージのビット数が、256ビットで割り切れる場合には、当該メッセージを256ビット毎に分割することで各々のメッセージブロックを生成するとともに、メッセージブロックを追加して最後のメッセージブロックとする。
【0211】
そして、メッセージブロック化部222は、この最後のメッセージブロックにおいて、先頭ビットに「1」、先頭ビットの次のビットから数えて191ビットまでに「0」、最後の64ビットにメッセージのビット長、を特定する情報を格納する。
【0212】
次に、メッセージブロック化部222は、ハッシュ値を算出する対象となるメッセージのビット数が、256ビットで割り切れない場合には、当該メッセージを256ビット毎に分割することで各々のメッセージブロックを生成するとともに、分割した最後尾のメッセージブロックには最後のビットまで「0」を特定する情報を格納することで、256ビットにし、さらに、メッセージブロックを追加して最後のメッセージブロックとする。
【0213】
そして、メッセージブロック化部122は、この最後のメッセージブロックにおいて、先頭ビットから数えて192ビットまでに「0」、最後の64ビットにメッセージのビット長、を特定する情報を格納する。
【0214】
なお、本実施形態においては、ハッシュ値を算出するメッセージをMとし、パディングにより、256ビットで割り切れるようなビット長にされたメッセージをM’とし、メッセージブロックの数をk+1(kは1以上の整数)とし、各々のメッセージブロックをM’(iは、0≦i≦kなる整数)とする。
【0215】
ラウンド定数生成部223は、各ラウンドにおける定数ラウンド値及びラウンド定数を算出する。
【0216】
本実施形態においても、ラウンド定数生成部223は、最初のラウンドの場合には、初期値記憶領域211に記憶されている定数ラウンド値の初期値から、または、最初のラウンドではない場合には、定数ラウンド値記憶領域212に記憶されている前ラウンドにおける定数ラウンド値から、線形変換関数fを用いて、各ラウンドにおける定数ラウンド値を算出する。
【0217】
例えば、図2に示すように、ラウンド定数生成部223は、前ラウンド(r−1)の定数ラウンド値c(r−1)(r=0のときは、定数ラウンド値の初期値)を関数fに入力して算出された値の上位ビット(本実施形態では、上位32ビット)と下位ビット(本実施形態では、下位32ビット)を入れ替えることにより、今ラウンド(r)の定数ラウンド値c(r)を算出する。
【0218】
即ち、上述の(1)式及び(2)式に示されるようにして、前ラウンドの定数ラウンド値c(r−1)(r=0のときは、定数ラウンド値の初期値)から今ラウンドの定数ラウンド値c(r)を算出する。
【0219】
また、関数fは、線形フィードバックシフトレジスタ(LFSR)を用いる。
【0220】
一般に、LFSRは多項式で決定されるが、ここではLFSRを決定する多項式g(x)を、下記の(18)式のように定義する。
【0221】
【数18】

【0222】
但し、g(x)は有限体GF(2)において定義される多項式である。
【0223】
なお、関数fの擬似コードは、下記の(19)のように示される。
【0224】
【数19】

【0225】
ここで、「<<X」は、Xビットの左シフトを示し、「>>Y」は、Yビットの右シフトを示し、「^」は、排他的論理和を示し、「&」は、論理積を示し、「|」は、論理和を示す。また、hは、定数ラウンド値c(r−1)における上位ビット(上位32ビット)、lは、定数ラウンド値c(r−1)における下位ビット(下位32ビット)である。
【0226】
そして、ラウンド定数生成部223は、算出したラウンド(r)での定数ラウンド値c(r)の下位32ビットを、第rラウンドにおけるラウンド定数C(r)として、第一ラウンド鍵生成部224又は第二ラウンド鍵生成部225に出力する。
【0227】
以下に、R=96の場合におけるC(r)の一例を掲げる。
【0228】
(0)=0x3b29b693、C(1)=0x90a58f8a、C(2)=0x472ae357、C(3)=0x42963e28、C(4)=0xd87dc430、C(5)=0x650288d7、C(6)=0x0ead60b6、C(7)=0xfb50532a、C(8)=0x9139bbc3、C(9)=0x299705c5、C(10)=0xef6ad616、C(11)=0xa65c1715、C(12)=0x797d1135、C(13)=0x32fc654e、C(14)=0x21220db8、C(15)=0x607dac22、C(16)=0x848836e0、C(17)=0x4520f9e5、C(18)=0xb9ace29a、C(19)=0xd055aef9、C(20)=0x4d3fb373、C(21)=0x8580f288、C(22)=0x5ba4bdbb、C(23)=0xbd8ff33a、C(24)=0xaa44bf81、C(25)=0x5db3f5f3、C(26)=0xa912fe04、C(27)=0xb2199ea1、C(28)=0x0fc7c10b、C(29)=0xc8667a84、C(30)=0x3f1f042d、C(31)=0xe54fa37c、C(32)=0x57f029af、C(33)=0x51e8c49c、C(34)=0x309ad6ca、C(35)=0x28f96206、C(36)=0x69e76232、C(37)=0xa3e58818、C(38)=0x634bc1a5、C(39)=0x241a197a、C(40)=0x49f94ff8、C(41)=0x3be45cf2、C(42)=0xe333768c、C(43)=0x441d4ad3、C(44)=0x481b935c、C(45)=0x7f2f5b3a、C(46)=0x4f343d06、C(47)=0x93e71c9e、C(48)=0x538a846f、C(49)=0xe4104b62、C(50)=0x8afc58d1、C(51)=0xff1b5dff、C(52)=0x807d5a5f、C(53)=0x38bb3e91、C(54)=0xaa795066、C(55)=0xe2ecfa45、C(56)=0xa9e54199、C(57)=0x4f65a079、C(58)=0x0c193f7e、C(59)=0xf940c888、C(60)=0x9be8c4e3、C(61)=0x21d56b4d、C(62)=0xc42f2a96、C(63)=0x8755ad35、C(64)=0xd46ae335、C(65)=0xb6da8dcf、C(66)=0x957dc5b9、C(67)=0x70e60e27、C(68)=0x55f716e4、C(69)=0x074e71f0、C(70)=0x38862be6、C(71)=0xb6b5feda、C(72)=0xe218af99、C(73)=0xdad7fb69、C(74)=0x4cb4f709、C(75)=0x04059dd2、C(76)=0x5d89ac52、C(77)=0xbb9a4e52、C(78)=0xb2f0f825、C(79)=0x45e50053、C(80)=0xcbc3e094、C(81)=0xd3424821、C(82)=0x4055f227、C(83)=0x225350f2、C(84)=0x6e0db8ea、C(85)=0x22c17ad2、C(86)=0x7ce0aac4、C(87)=0x2089d252、C(88)=0x3754e27c、C(89)=0x29ab7052、C(90)=0xdd5389f0、C(91)=0xa6adc149、C(92)=0xb1986ead、C(93)=0x313b3c3f、C(94)=0xc661bab4、C(95)=0xc4ecf0fd。
【0229】
第一ラウンド鍵生成部224は、各ラウンドにおける鍵ラウンド値及びラウンド鍵を算出する処理を行う。
【0230】
例えば、第一ラウンド鍵生成部224による鍵ラウンド値の算出は、上述の図3に示す第一鍵ラウンド値変換関数fKを用いて行われる。
【0231】
図3に示すように、第一鍵ラウンド値変換関数fKは、第r−1ラウンドの鍵ラウンド値k(r−1)(但し、r=0の場合は、算出値記憶領域115に記憶されている算出値、または、初期値記憶領域211に記憶されている算出値の初期値)を8分割(本実施形態においては、各々32ビット)した分割データであるk(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)を、それぞれ、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)に変換し、変換したこれらの値を連結することで、第rラウンドの鍵ラウンド値k(r)を生成する関数である。
【0232】
なお、第一鍵ラウンド値変換関数fKを用いた処理に関しては、ビット数が異なるだけで、第一の実施形態と同様であるため、詳細な説明は省略する。
【0233】
次に、第一ラウンド鍵生成部224で使用するF関数である関数Fについて説明する。
【0234】
本実施形態における関数Fも、上述の(5)式に示すように、非線形変換γと、線形変換λと、の合成変換を行う関数であり、線形変換λは、バイト置換πと、行列変換θと、からなる。
【0235】
ここで、関数Fへの入力をX、関数Fからの出力をYとして説明する。
【0236】
本実施形態においては、X及びYは、64ビットのデータである。
【0237】
まず、非線形変換γでは、値Xを8ビット毎のサブデータ(s,s,・・・,s)に分割して、分割した各々のサブデータを、下記の(20)式に示すように、置換テーブルSboxを用いて非線形変換を行う。ここで、変換後のサブデータをs’,s’,・・・,s’とする。
【0238】
【数20】

【0239】
なお、置換テーブルSboxは、例えば、上記の(7)で示される。
【0240】
次に、行列変換θでは、上記の非線形変換γでの変換後のサブデータ(s’,s’,・・・,s’)を4行2列の行列にして、下記の(21)式に示すように、変換行列Aとの有限体GF(2)上での乗算を行うことで、変換を行う。ここで、変換後のサブデータをs”,s”,・・・,s”とする。
【0241】
【数21】

【0242】
ここで、変換行列Aは、ある列を入力列とし、当該入力列に対して変換行列Aによる変換を行った後の値の列を出力列とした場合に、入力列及び出力列に含まれる項の内、値が「0」ではない項が、5個以上になるような変換であれば、どのような変換行列を用いてもよい。
【0243】
次に、バイト置換πでは、下記の(22)式に示すように、行列変換θで変換されたサブデータ(s”,s”,・・・,s”)のうちの半分のデータの入れ替えを行う。なお、変換後のサブデータをy,y,・・・,yとする。
【0244】
【数22】

【0245】
そして、以上のようにして算出されたサブデータ(y,y,・・・,y)を(23)式のように連結することで、関数Fの出力Yとする。
【0246】
【数23】

【0247】
以上の関数Fでは、後述する関数Fと比較して、一つの入力に対して一回の処理で出力を行うため、計算量が少なくてすみ、軽実装が可能となる。
【0248】
図11に戻り、第二ラウンド鍵生成部225は、各ラウンドにおける鍵ラウンド値及びラウンド鍵を算出する処理を行う。
【0249】
例えば、第二ラウンド鍵生成部225による鍵ラウンド値の算出は、図4に示すような第二鍵ラウンド値変換関数f’を用いて行われる。
【0250】
図4に示すように、第二鍵ラウンド値変換関数f’は、第r−1ラウンドの鍵ラウンド値k(r−1)(但し、r=0の場合は、算出値記憶領域115に記憶されている算出値、または、初期値記憶領域111に記憶されている算出値の初期値)を8分割(本実施形態では、各々32ビット)した分割データであるk(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)、k(r−1)を、それぞれ、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)、k(r)に変換し、変換したこれらの値を連結することで、第rラウンドの鍵ラウンド値k(r)を生成する関数である。
【0251】
なお、第二鍵ラウンド値変換関数f’Kを用いた処理に関しては、ビット数が異なるだけで、第一の実施形態と同様であるため、詳細な説明は省略する。
【0252】
次に、第二ラウンド鍵生成部225で使用するF関数である関数Fについて説明する。
【0253】
関数Fは、上述の(13)式に示すように、非線形変換γと、バイト置換πと、行列変換θと、の合成変換を4回(4段分)行う関数である。
【0254】
ここで、関数Fへの入力をX、関数Fからの出力をYとして説明する。
【0255】
本実施形態においては、X及びYは、64ビットのデータである。
【0256】
まず、非線形変換γでは、値Xを8ビット毎のサブデータ(s,s,・・・,s)に分割して、分割した各々のサブデータを、下記の(24)式に示すように、置換テーブルS−boxを用いて非線形変換を行う。ここで、変換後のサブデータをs’,s’,・・・,s’15とする。
【0257】
【数24】

【0258】
なお、置換テーブルS−boxは、例えば、上記の(7)で示されるものを使用すればよい。
【0259】
次に、バイト置換πでは、下記の(25)式に示すように、非線形変換γで変換されたサブデータ(s’,s’,・・・,s’)を2行4列の行列として、各々の列に含まれる各々の行のデータが各々異なる列に配置されるように、データの入れ替えを行う。なお、(25)式は一例であって、各々の列に含まれる各々の行のデータが各々異なる列に配置されるものであれば、他の入れ替え方式を採用することも可能である。
【0260】
また、変換後のサブデータをs”,s”,・・・,s”とする。
【0261】
【数25】

【0262】
次に、行列変換θでは、下記の(26)式に示すように、上記のバイト置換πでの変換後のサブデータ(s”,s”,・・・,s”)を要素とする2行4列の行列と、変換行列Bと、の有限体GF(2)上での乗算を行うことで、変換を行う。ここで、変換後のサブデータをy,y,・・・,yとする。
【0263】
【数26】

【0264】
ここで、変換行列Bは、ある列を入力列とし、当該入力列に対して変換行列Bによる変換を行った後の値の列を出力列とした場合に、入力列及び出力列に含まれる項の内、値が「0」ではない項が、3個以上になるような変換であれば、どのような変換行列を用いてもよい。
【0265】
そして、このようにして算出されたサブデータ(y,y,・・・,y)を、(27)式に示すように、サブデータ(s,s,・・・,s)として、非線形変換γ、バイト置換π及び行列変換θによる変換を3回(合計4回)行うことで、算出されるサブデータ(y,y,・・・,y)を(27)式のように連結することで、関数Fの出力Yとする。
【0266】
【数27】

【0267】
以上の関数Fでは、前述の関数Fと比較して、一つの入力に対して4回の処理で出力を行うため、安全性を高めることができる。なお、この4回の回数に関しては、適宜変更可能である。
【0268】
図11に戻り、撹拌部226は、各ラウンドにおける平文ラウンド値を算出する処理を行う。
【0269】
例えば、撹拌部226による平文ラウンド値の算出は、図5に示すような平文ラウンド値変換関数fを用いて行われる。
【0270】
図5に示すように、平文ラウンド値変換関数fは、第r−1ラウンドの平文ラウンド値x(r−1)(但し、r=0の場合は、メッセージブロック化部222でブロック化されたメッセージブロックM’)を8分割(本実施形態では、各々32ビット)した分割データであるx(r−1)、x(r−1)、x(r−1)、x(r−1)、x(r−1)、x(r−1)、x(r−1)、x(r−1)を、それぞれ、x(r)、x(r)、x(r)、x(r)、x(r)、x(r)、x(r)、x(r)に変換し、変換したこれらの値を連結することで、第rラウンドの平文ラウンド値x(r)を生成する関数である。
【0271】
なお、平文ラウンド値変換関数fを用いた処理に関しては、ビット数が異なるだけで、第一の実施形態と同様であるため、詳細な説明は省略する。
【0272】
また、撹拌部226で使用するF関数である関数Fについては、上述の第二ラウンド鍵生成部225で使用するF関数である関数Fと同様であるため、説明を省略する。
【0273】
本実施形態におけるハッシュ値の算出処理についても、図7と同様に行うことが可能である。
【0274】
まず、ハッシュ値生成装置200では、入力部130を介して、ハッシュ値を生成するメッセージMの入力を受け付け、ハッシュ値生成装置200の全体制御部221が、メッセージブロック化部222にメッセージMを入力する。
【0275】
そして、メッセージブロック化部222では、メッセージMをパディングして、256ビット毎のメッセージブロック(M’,・・・,M’;kは1以上の整数)に分割する。
【0276】
次に、全体制御部221は、初期値記憶領域211に記憶されている算出値の初期値H−1と、メッセージブロック化部222でブロック化されたメッセージブロックM’のうち、最初のメッセージブロックM’と、を第一ブロック暗号fに入力することで、平文ラウンド値hを算出する。
【0277】
ここで、第一ブロック暗号fを用いた処理は、ラウンド定数生成部223、第一ラウンド鍵生成部224及び撹拌部226で行われる。
【0278】
そして、全体制御部221は、算出した平文ラウンド値hと、メッセージブロックM’と、の排他的論理和を算出することで、算出値を求め、求めた算出値と、次のメッセージブロックM’と、をブロック暗号fに入力することで、平文ラウンド値hを算出する。なお、算出された算出値については、算出値記憶領域115に記憶される。
【0279】
このような処理を、最後のメッセージブロックM’の直前のメッセージブロックM’k−1まで繰り返すことで、平文ラウンド値hk−1を算出する。
【0280】
そして、全体制御部221は、平文ラウンド値hk−1と、メッセージブロックM’k−1と、の排他的論理和で算出される算出値と、最後のメッセージブロックM’と、を第二ブロック暗号f’に入力することにより、平文ラウンド値hを算出する。
【0281】
ここで、第二ブロック暗号f’を用いた処理は、ラウンド定数生成部223、第二ラウンド鍵生成部225及び撹拌部226で行われる。
【0282】
そして、全体制御部221は、平文ラウンド値hと、最後のメッセージブロックM’と、の排他的論理和でハッシュ値Hを算出する。
【0283】
このようなハッシュ値Hは、ハッシュ値記憶領域216に記憶される。
【0284】
ここで、第一ブロック暗号fでの処理及び第二ブロック暗号f’での処理については、ビット数は異なるが、図8及び図9での処理と同様であるため、説明を省略する。
【0285】
以上のように、本実施形態によれば、256ビットのハッシュ値を算出することができる。
【0286】
ここで、差分攻撃線形攻撃に対する耐性の指標として、最小のアクティブS−box数を用いた下記の(28)式が用いられる。
【0287】
【数28】

【0288】
この点、AES(Advanced Encryption Standard)型のF関数においては、2段分のアクティブS−box数をBとすると、4段分のアクティブS−box数は、Bとなる。このように、S−boxを4段重ねることで安全性を高めるこのような手法をWTS(Wide Trail Strategy)という。
【0289】
これに対して、例えば、図5に示されているようなFeistel構造では、F関数の出力をX(r−1)、X(r−1)に加算する処理があるため、単にF関数の段数を増やすWTSを採用することができない。
【0290】
この点、本発明では、平文ラウンド値変換関数fで使用するF関数である関数Fにおいて、第二非線形変換γと、バイト置換πと、行列変換θと、の合成変換を4回(4段)行うことで安全性を確保している。
【0291】
例えば、本発明の第一の実施形態における512ビットのハッシュ値を生成するハッシュ値生成装置100では、2段分の最低アクティブS−box数「B=5」であるため、F関数一つ当たりの最低アクティブS−box数「B=25」となる。
【0292】
そして、12段でアクティブなF関数は、最低5つであるため、アクティブS−box数の最小値は、「5×25=125」となる。
【0293】
従って、最大の差分伝搬の確率は、「125×6(=750)>512」となるため、(28)式を満たし、差分攻撃に対して耐性を有することがわかる。
【0294】
また、本発明の第二の実施形態における256ビットのハッシュ値を生成するハッシュ値生成装置200では、2段分の最低アクティブS−box数「B=3」であるため、F関数一つ当たりの最低アクティブS−box数「B=9」となる。
【0295】
そして、12段でアクティブなF関数は、最低5つであるため、アクティブS−box数の最小値は、「5×9=45」となる。
【0296】
従って、最大の差分伝搬の確率は、「45×6(=270)>256」となるため、(28)式を満たし、差分攻撃に対して耐性を有することがわかる。
【0297】
なお、WTSについては、下記の文献2に詳細に記載されている。
【0298】
文献2:J.Daemen and V. Rijmen, Springer, 2002, February, “The Design of Rijndael”, pp. 123-147
また、以上に記載した第一の実施形態及び第二の実施形態では、それぞれ、512ビット、256ビットのハッシュ値を算出するようにしているが、このような態様に限定されるわけではなく、ビット長を適宜変化させることで、224ビット、384ビット等の他のビット長のハッシュ値を算出することも可能である。
【0299】
さらに、以上に記載した実施形態においては、ハッシュ値生成装置100、200を図6に示すようなコンピュータ900で実現可能としたが、このような態様に限定されず、例えば、CPUと、発揮性又は不発揮性メモリと、を備える携帯電話端末、非接触型ICカード、商品タグ等の実装規模の小さなデバイスにおいても実現可能である。
【0300】
また、上述したハッシュ値生成装置100、200は、コンピュータがプログラムを実行することにより実現されるものでなくてもよい。例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等の集積ロジックICによりハード的に実行されるものであってもよいし、あるいは、DSP(Digital Signal Processor)等の計算機によりソフトウェア的に実行されるものであってもよい。
【0301】
以上に記載した実施形態においては、図5に示すような平文ラウンド値変換関数fを使用しているが、このような態様に限定されず、関数FをF関数として使用するものであれば、どのようなものであってもよい。例えば、図12(平文ラウンド値変換関数f変形例を示す概略図)に示すような平文ラウンド値変換関数fを使用することも可能である。
【0302】
図12に示す平文ラウンド値変換関数fでは、ラウンド鍵K(r)及び第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx(r−1)の排他的論理和である値pと、第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx(r−1)の値pと、を連結した値pをF関数である関数Fに入力した出力値の内の上位ビット(ここでは、上位64ビット)の値q(q=F(x(r−1) XOR K(r),x(r−1))と、下位ビット(ここでは、下位64ビット)の値q(q=F(x(r−1) XOR K(r),x(r−1))と、を算出する。
【0303】
そして、値p及び値qの排他的論理和と、第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx(r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの平文ラウンド鍵のx(r)とする。
【0304】
また、値p及び値qの排他的論理和と、第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx(r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの平文ラウンド値のx(r)とする。
【0305】
図12に示すような平文ラウンド値変換関数fを用いることで、F関数への入力を出力にフィードフォワードすることで、F関数部分の置換性をくずすことができる。
【0306】
さらに、図5に示すような平文ラウンド値変換関数fの替わりに、例えば、図13(平文ラウンド値変換関数f変形例を示す概略図)に示すような平文ラウンド値変換関数fを使用することも可能である。
【0307】
図13に示す平文ラウンド値変換関数fでは、ラウンド鍵K(r)及び第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx(r−1)の排他的論理和である値pと、ラウンド鍵K(r)及び第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx(r−1)の排他的論理和である値pと、を連結した値pをF関数である関数Fに入力した出力値の内の上位ビット(ここでは、上位64ビット)の値q(q=F(x(r−1) XOR K(r),x(r−1) XOR K(r))と、下位ビット(ここでは、下位64ビット)の値q(q=F(x(r−1) XOR K(r),x(r−1) XOR K(r))と、を算出する。
【0308】
ここで、ラウンド鍵K(r)は、第rラウンドの鍵ラウンド値の内のk(r)を用い、ラウンド鍵K(r)は、第rラウンドの鍵ラウンド値の内のk(r)を用いる。
【0309】
図13に示すような平文ラウンド値変換関数fを用いることで、ラウンド鍵を2倍以上の大きさにすることが可能である。
【図面の簡単な説明】
【0310】
【図1】第一の実施形態であるハッシュ値生成装置の概略図。
【図2】線形変換関数fを示す概略図。
【図3】第一鍵ラウンド値変換関数fの概略図。
【図4】第二鍵ラウンド値変換関数f’の概略図。
【図5】平文ラウンド値変換関数fの概略図。
【図6】コンピュータの概略図。
【図7】ハッシュ値の算出処理を示す概略図。
【図8】第一ブロック暗号fでの処理を示す概略図。
【図9】第二ブロック暗号f’での処理を示す概略図。
【図10】ハッシュ値生成装置におけるハッシュ値の生成処理を示すフローチャート。
【図11】第二の実施形態であるハッシュ値生成装置の概略図。
【図12】平文ラウンド値変換関数f変形例を示す概略図。
【図13】平文ラウンド値変換関数f変形例を示す概略図。
【符号の説明】
【0311】
100、200 ハッシュ値生成装置
110、210 記憶部
111、211 初期値記憶領域
112 定数ラウンド値記憶領域
113 鍵ラウンド値記憶領域
114 平文ラウンド値記憶領域
115 算出値記憶領域
116 ハッシュ値記憶領域
120、220 制御部
121、221 全体制御部
122、222 メッセージブロック化部
123、223 ラウンド定数生成部
124、224 第一ラウンド鍵生成部
125、225 第二ラウンド鍵生成部
126、226 撹拌部

【特許請求の範囲】
【請求項1】
メッセージを予め定められたデータ長のブロックにして、当該ブロックを分割した複数の分割データのうちの特定の分割データをF関数により変換を行い、他の特定の分割データとの排他的論理和を算出する撹拌処理を含むブロック暗号を用いて、前記メッセージのハッシュ値を生成するハッシュ値生成装置であって、
前記F関数において、少なくとも非線形変換を含む変換を複数回行う制御部を備えること、
を特徴とするハッシュ値生成装置。
【請求項2】
請求項1に記載のハッシュ値生成装置であって、
前記F関数は、非線形変換と、バイト置換と、行列変換と、の合成変換を複数回行うものであること、
を特徴とするハッシュ値生成装置。
【請求項3】
請求項2に記載のハッシュ値生成装置であって、
前記複数回は、4回であること、
を特徴とするハッシュ値生成装置。
【請求項4】
請求項2に記載のハッシュ値生成装置であって、
前記非線形変換は、変換前のデータに対応する変換後のデータを、予め定められた置換テーブルより抽出することで、変換を行うものであること、
を特徴とするハッシュ値生成装置。
【請求項5】
請求項2に記載のハッシュ値生成装置であって、
前記バイト置換は、変換前のデータを項目とする行列において、任意の列に含まれるそれぞれの項目を、それぞれ異なる列に配置する変換を行うものであること、
を特徴とするハッシュ値生成装置。
【請求項6】
請求項4に記載のハッシュ値生成装置であって、
前記行列変換は、変換前のデータを項目とする行列に変換行列を乗算することで、当該行列の任意の列に含まれるそれぞれの項目と、乗算後の行列における当該任意の列に対応する列に含まれるそれぞれの項目と、において0ではない項目が、予め定められた数以上となるものであること、
を特徴とするハッシュ値生成装置。
【請求項7】
請求項6に記載のハッシュ値生成装置であって、
512ビットのハッシュ値を生成する場合には、前記数は5であること、
を特徴とするハッシュ値生成装置。
【請求項8】
請求項6に記載のハッシュ値生成装置であって、
256ビットのハッシュ値を生成する場合には、前記数は3であること、
を特徴とするハッシュ値生成装置。
【請求項9】
コンピュータを、メッセージを予め定められたデータ長のブロックにして、当該ブロックを分割した複数の分割データのうちの特定の分割データをF関数により変換を行い、他の特定の分割データとの排他的論理和を算出する撹拌処理を含むブロック暗号を用いて、前記メッセージのハッシュ値を生成するハッシュ値生成装置として機能させるプログラムであって、
前記コンピュータを、前記F関数において、少なくとも非線形変換を含む変換を複数回行う制御手段として機能させること、
を特徴とするプログラム。
【請求項10】
請求項9に記載のプログラムであって、
前記F関数は、非線形変換と、バイト置換と、行列変換と、の合成変換を複数回行うものであること、
を特徴とするプログラム。
【請求項11】
請求項10に記載のプログラムであって、
前記複数回は、4回であること、
を特徴とするプログラム。
【請求項12】
請求項10に記載のプログラムであって、
前記非線形変換は、変換前のデータに対応する変換後のデータを、予め定められた置換テーブルより抽出することで、変換を行うものであること、
を特徴とするプログラム。
【請求項13】
請求項10に記載のプログラムであって、
前記バイト置換は、変換前のデータを項目とする行列において、任意の列に含まれるそれぞれの項目を、それぞれ異なる列に配置する変換を行うものであること、
を特徴とするプログラム。
【請求項14】
請求項12に記載のプログラムであって、
前記行列変換は、変換前のデータを項目とする行列に変換行列を乗算することで、当該行列の任意の列に含まれるそれぞれの項目と、乗算後の行列における当該任意の列に対応する列に含まれるそれぞれの項目と、において0ではない項目が、予め定められた数以上となるものであること、
を特徴とするプログラム。
【請求項15】
請求項14に記載のプログラムであって、
512ビットのハッシュ値を生成する場合には、前記数は5であること、
を特徴とするプログラム。
【請求項16】
請求項14に記載のプログラムであって、
256ビットのハッシュ値を生成する場合には、前記数は3であること、
を特徴とするプログラム。
【請求項17】
メッセージを予め定められたデータ長のブロックにして、当該ブロックを分割した複数の分割データのうちの特定の分割データをF関数により変換を行い、他の特定の分割データとの排他的論理和を算出する撹拌処理を含むブロック暗号を用いて、前記メッセージのハッシュ値を生成するハッシュ値生成装置が行うハッシュ値生成方法であって、
前記ハッシュ値生成装置の制御部が、前記F関数において、少なくとも非線形変換を含む変換を複数回行う過程を備えること、
を特徴とするハッシュ値生成方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate


【公開番号】特開2010−44251(P2010−44251A)
【公開日】平成22年2月25日(2010.2.25)
【国際特許分類】
【出願番号】特願2008−208635(P2008−208635)
【出願日】平成20年8月13日(2008.8.13)
【国等の委託研究の成果に係る記載事項】(出願人による申告)国等の委託研究の成果に係る特許出願(平成20年度 独立行政法人情報通信研究機構 「次世代ハッシュ関数の研究開発」委託研究、産業技術力強化法第19条の適用を受ける特許出願)
【出願人】(000005108)株式会社日立製作所 (27,607)
【Fターム(参考)】