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

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

Info

Publication number
JP2010044251A
JP2010044251A JP2008208635A JP2008208635A JP2010044251A JP 2010044251 A JP2010044251 A JP 2010044251A JP 2008208635 A JP2008208635 A JP 2008208635A JP 2008208635 A JP2008208635 A JP 2008208635A JP 2010044251 A JP2010044251 A JP 2010044251A
Authority
JP
Japan
Prior art keywords
round
value
hash value
function
message
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2008208635A
Other languages
English (en)
Inventor
Kota Ideguchi
恒太 井手口
Hirotaka Yoshida
博隆 吉田
Toru Owada
徹 大和田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2008208635A priority Critical patent/JP2010044251A/ja
Priority to US12/393,227 priority patent/US20100040226A1/en
Publication of JP2010044251A publication Critical patent/JP2010044251A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/20Manipulating the length of blocks of bits, e.g. padding or block truncation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/24Key scheduling, i.e. generating round keys or sub-keys for block encryption

Landscapes

  • Engineering & Computer Science (AREA)
  • Power Engineering (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

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

Description

本発明は、ハッシュ値を生成する技術に関する。
ハッシュ関数は、任意長のメッセージを入力として、特定の長さのハッシュ値を生成する関数である。
一般的に、ハッシュ関数は固定長のメッセージブロックを入力するブロック暗号から構成され、入力されたメッセージに対してブロック暗号化を繰り返し行うことで、メッセージの攪拌を行い、最終的にハッシュ値として出力する。ハッシュ関数の代表例としてはSHA−1、または、SHA−256等のSHA−2ハッシュ族、などがある(非特許文献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
非特許文献1に記載のSHA−1は、ハッシュ関数が持つべき安全性である衝突耐性に問題があることが知られており、SHA−2ハッシュ族についても、SHA−1と類似した構造であることから、ハッシュ関数が持つべき安全性に問題を生ずる可能性がある。
そこで、本発明は、安全性の評価が可能なハッシュ関数を提供することを目的とする。
以上の課題を解決するため、本発明は、非線形変換を複数回行うF関数を備えるブロック暗号を用いてハッシュ値を生成する。
例えば、本発明は、メッセージを予め定められたデータ長のブロックにして、当該ブロックを分割した複数の分割データのうちの特定の分割データをF関数により変換を行い、他の特定の分割データとの排他的論理和を算出する撹拌処理を含むブロック暗号を用いて、前記メッセージのハッシュ値を生成するハッシュ値生成装置であって、前記F関数において、少なくとも非線形変換を含む変換を複数回行う制御部を備えること、を特徴とする。
以上のように、本発明によれば、安全性の評価が可能なハッシュ関数を提供することができる。
図1は、本発明の第一の実施形態であるハッシュ値生成装置100の概略図である。
ここで、本実施形態においては、512ビットのハッシュ値を生成するようにしている。
図示するように、ハッシュ値生成装置100は、記憶部110と、制御部120と、入力部130と、出力部140と、を備える。
記憶部110は、初期値記憶領域111と、定数ラウンド値記憶領域112と、鍵ラウンド値記憶領域113と、平文ラウンド値記憶領域114と、算出値記憶領域115と、ハッシュ値記憶領域116と、を備える。
初期値記憶領域111には、ハッシュ値を生成する際の初期値を特定する情報が格納される。
本実施形態においては、ハッシュ値を生成する際の初期値として、定数ラウンド値の初期値と、算出値の初期値と、が記憶される。
ここで、定数ラウンド値の初期値は、例えば、c(−1)=0xffffffffffffffffffffffffffffffffといった定数が記憶される。
また、算出値の初期値は、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、といった定数が記憶される。
なお、定数ラウンド値及び算出値の初期値に使用される定数はこれらに限定されるわけではなく、例えば、疑似乱数生成器等で生成された乱数を使用することも可能である。
定数ラウンド値記憶領域112には、各々のメッセージブロックにおけるラウンド毎の定数ラウンド値を特定する情報が格納される。
なお、本実施形態においては、定数ラウンド値は、後述するラウンド定数生成部123で生成される。
鍵ラウンド値記憶領域113には、各々のメッセージブロックにおけるラウンド毎の鍵ラウンド値を特定する情報が格納される。
なお、本実施形態においては、鍵ラウンド値は、後述する第一ラウンド鍵生成部124又は第二ラウンド鍵生成部125で生成される。
平文ラウンド値記憶領域114には、各々のメッセージブロックにおけるラウンド毎の平文ラウンド値を特定する情報が格納される。
なお、本実施形態においては、平文ラウンド値は、後述する撹拌部126で生成される。
算出値記憶領域115には、各々のメッセージブロックにおいて全てのラウンドを経て算出された算出値を特定する情報が格納される。
なお、本実施形態においては、算出値は、後述する全体制御部121で生成される。
ハッシュ値記憶領域には、全てのメッセージブロックにおいて全てのラウンドを経て算出されたハッシュ値を特定する情報が格納される。
なお、本実施形態においては、ハッシュ値は、後述する全体制御部121で生成される。
制御部120は、全体制御部121と、メッセージブロック化部122と、ラウンド定数生成部123と、第一ラウンド鍵生成部124と、第二ラウンド鍵生成部125と、撹拌部126と、を備える。
全体制御部121は、ハッシュ値生成装置100における処理の全体を制御する。
特に、本実施形態においては、ハッシュ値を算出するメッセージをブロック化したメッセージブロックを管理する処理や、ラウンド定数生成部123、第一ラウンド鍵生成部124、第二ラウンド鍵生成部125及び撹拌部126でのラウンドを管理する処理を行う。
また、全体制御部121は、全てのラウンドを経て撹拌部126において算出された平文ラウンド値と、当該ラウンドでの処理の対象となったメッセージブロックと、の排他的論理和を算出することで、算出値を算出する。
さらに、全体制御部121は、全てのメッセージブロック及び全てのラウンドを経て撹拌部126において算出された平文ラウンド値と、最後のメッセージブロックと、の排他的論理和を算出することで、ハッシュ値を算出する。
メッセージブロック化部122は、ハッシュ値を算出する対象となるメッセージを予め定められたビット長のブロックに分割し、パディングを行う。
ここで、本実施形態では、ハッシュ値を算出する対象となるメッセージを512ビット毎のブロックに分割するようにしているが、このような態様に限定されるわけではない。
また、例えば、本実施形態におけるパディングは、以下のようにして行う。
まず、メッセージブロック化部122は、ハッシュ値を算出する対象となるメッセージのビット数が、512ビットで割り切れる場合には、当該メッセージを512ビット毎に分割することで各々のメッセージブロックを生成するとともに、メッセージブロックを追加して最後のメッセージブロックとする。
そして、メッセージブロック化部122は、この最後のメッセージブロックにおいて、先頭ビットに「1」、先頭ビットの次のビットから数えて383ビットまでに「0」、最後の128ビットにメッセージのビット長、を特定する情報を格納する。
次に、メッセージブロック化部122は、ハッシュ値を算出する対象となるメッセージのビット数が、512ビットで割り切れない場合には、当該メッセージを512ビット毎に分割することで各々のメッセージブロックを生成するとともに、分割した最後尾のメッセージブロックには最後のビットまで「0」を特定する情報を格納することで、512ビットにし、さらに、メッセージブロックを追加して最後のメッセージブロックとする。
そして、メッセージブロック化部122は、この最後のメッセージブロックにおいて、先頭ビットから数えて384ビットまでに「0」、最後の128ビットにメッセージのビット長、を特定する情報を格納する。
なお、本実施形態においては、ハッシュ値を算出するメッセージをMとし、パディングにより、512ビットで割り切れるようなビット長にされたメッセージをM’とし、メッセージブロックの数をk+1(kは1以上の整数)とし、各々のメッセージブロックをM’(iは、0≦i≦kなる整数)とする。
ラウンド定数生成部123は、各ラウンドにおける定数ラウンド値及びラウンド定数を算出する。
本実施形態においては、ラウンド定数生成部123は、最初のラウンドの場合には初期値記憶領域111に記憶されている定数ラウンド値の初期値から、または、最初のラウンドではない場合には定数ラウンド値記憶領域112に記憶されている前ラウンドにおける定数ラウンド値から、線形変換関数fを用いて、各ラウンドにおける定数ラウンド値を算出する。
例えば、図2(線形変換関数fを示す概略図)に示すように、ラウンド定数生成部123は、前ラウンド(r−1)の定数ラウンド値c(r−1)(r=0の場合には定数ラウンド値の初期値)を関数fに入力して算出された値の上位ビット(本実施形態では、上位64ビット)と下位ビット(本実施形態では、下位64ビット)を入れ替えることにより、今ラウンド(r)の定数ラウンド値c(r)を算出する。
即ち、下記の(1)式及び(2)式に示されるようにして、前ラウンドの定数ラウンド値c(r−1)(r=0の場合には定数ラウンド値の初期値)から今ラウンドの定数ラウンド値c(r)を算出する。
Figure 2010044251
Figure 2010044251
ここで、(1)式及び(2)式において、t及びtは、それぞれ、定数ラウンド値c(r−1)(r=0の場合には定数ラウンド値の初期値)を関数fに入力して算出された値の上位ビット及び下位ビットである。
また、関数fは、線形フィードバックシフトレジスタ(LFSR)を用いる。
一般に、LFSRは多項式で決定されるが、ここではLFSRを決定する多項式g(x)を、下記の(3)式のように定義する。
Figure 2010044251
但し、g(x)は有限体GF(2)において定義される多項式である。
なお、関数fの擬似コードは、下記の(4)のように示される。
Figure 2010044251
ここで、「<<X」は、Xビットの左シフトを示し、「>>Y」は、Yビットの右シフトを示し、「^」は、ビット毎の排他的論理和を示し、「&」は、ビット毎の論理積を示し、「|」は、ビット毎の論理和を示す。また、hは、定数ラウンド値c(r−1)における上位ビット(上位64ビット)、lは、定数ラウンド値c(r−1)における下位ビット(下位64ビット)である。
そして、ラウンド定数生成部123は、算出したラウンド(r)での定数ラウンド値c(r)の下位64ビットを、第rラウンドにおけるラウンド定数C(r)として、第一ラウンド鍵生成部124又は第二ラウンド鍵生成部125に出力する。
以下に、R=96の場合におけるC(r)の一例を掲げる。
(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。
第一ラウンド鍵生成部124は、各ラウンドにおける鍵ラウンド値及びラウンド鍵を算出する処理を行う。
例えば、第一ラウンド鍵生成部124による鍵ラウンド値の算出は、図3(第一鍵ラウンド値変換関数fの概略図)に示す第一鍵ラウンド値変換関数fを用いて行われる。
図示するように、第一鍵ラウンド値変換関数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)を生成する関数である。
具体的には、第一鍵ラウンド値変換関数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等分する。
次に、第一ラウンド鍵生成部124は、第r−1ラウンドの鍵ラウンド値の内のk (r−1)、k (r−1)、k (r−1)、k (r−1)、をそれぞれ第rラウンドの鍵ラウンド値の内のk (r)、k (r)、k (r)、k (r)、とする。
次に、第一ラウンド鍵生成部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))と、を算出する。
そして、第一ラウンド鍵生成部124は、値bと、第r−1ラウンドの鍵ラウンド値の内のk (r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの鍵ラウンド値のk (r)とする。
また、第一ラウンド鍵生成部124は、値bと、第r−1ラウンドの鍵ラウンド値の内のk (r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの鍵ラウンド値のk (r)とする。
次に、第一ラウンド鍵生成部124は、第r−1ラウンドの鍵ラウンド値の内のk (r−1)、k (r−1)を、それぞれ第rラウンドの鍵ラウンド値k (r)、k (r)とする。
そして、第一ラウンド鍵生成部124は、以上のようにして算出したk (r)、k (r)、k (r)、k (r)、k (r)、k (r)、k (r)、k (r)を連結して第rラウンドの鍵ラウンド値として、第r−1ラウンドの鍵ラウンド値と入れ替えて鍵ラウンド値記憶領域113に記憶する。
また、第一ラウンド鍵生成部124は、第rラウンドの鍵ラウンド値の内のk (r)を、第rラウンドのラウンド鍵K(r)として、撹拌部126に出力する。
次に、第一ラウンド鍵生成部124で使用するF関数である関数Fについて説明する。
関数Fは、下記の(5)式に示すように、非線形変換γと、線形変換λと、の合成変換を行う関数である。
Figure 2010044251
また、線形変換λは、バイト置換πと、行列変換θと、の合成変換である。
ここで、関数Fへの入力をX、関数Fからの出力をYとして説明する。
本実施形態においては、X及びYは、128ビットのデータである。
まず、非線形変換γでは、値Xを8ビット毎のサブデータ(s,s,・・・,s15)に分割して、分割した各々のサブデータを、下記の(6)式に示すように、置換テーブルS−boxを用いて非線形変換を行う。ここで、変換後のサブデータをs’,s’,・・・,s’15とする。
Figure 2010044251
なお、置換テーブルSboxは、例えば、下記の(7)で示される。
Figure 2010044251
次に、行列変換θでは、上記の非線形変換γでの変換後のサブデータ(s’,s’,・・・,s’15)を8行2列の行列にして、下記の(10)式に示すように、変換行列Aとの乗算を行うことで、変換を行う。ここで、変換後のサブデータをs”,s”,・・・,s”15とする。乗算は、有限体GF(2)上での乗算である。有限体GF(2^8)は、下記の(8)式及び(9)式を満たす。
Figure 2010044251
Figure 2010044251
Figure 2010044251
ここで、変換行列Aは、ある列を入力列とし、当該入力列に対して変換行列Aによる変換を行った後の値の列を出力列とした場合に、入力列及び出力列に含まれる項の内、値が「0」ではない項が、9個以上になるような変換であれば、どのような変換行列を用いてもよい。
次に、バイト置換πでは、下記の(11)式に示すように、行列変換θで変換されたサブデータ(s”,s”,・・・,s”15)のうちの半分のデータの入れ替えを行う。なお、変換後のサブデータをy,y,・・・,y15とする。
Figure 2010044251
そして、以上のようにして算出されたサブデータ(y,y,・・・,y15)を(12)式のように連結することで、関数Fの出力Yとする。
Figure 2010044251
以上の関数Fでは、後述する関数Fと比較して、一つの入力に対して一回の処理で出力を行うため、計算量が少なくてすみ、軽実装が可能となる。
図1に戻り、第二ラウンド鍵生成部125は、各ラウンドにおける鍵ラウンド値及びラウンド鍵を算出する処理を行う。
例えば、第二ラウンド鍵生成部125による鍵ラウンド値の算出は、図4(第二鍵ラウンド値変換関数f’の概略図)に示す第二鍵ラウンド値変換関数f’を用いて行われる。
図示するように、第二鍵ラウンド値変換関数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)を生成する関数である。
具体的には、第二鍵ラウンド値変換関数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等分する。
次に、第二ラウンド鍵生成部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)、とする。
次に、第二ラウンド鍵生成部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))と、を算出する。
そして、第二ラウンド鍵生成部125は、値b’と、第r−1ラウンドの鍵ラウンド値(r=0の場合には算出値)の内のk (r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの鍵ラウンド値のk (r)とする。
また、第二ラウンド鍵生成部125は、値b’と、第r−1ラウンドの鍵ラウンド値(r=0の場合には算出値)の内のk (r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの鍵ラウンド値のk (r)とする。
次に、第二ラウンド鍵生成部125は、第r−1ラウンドの鍵ラウンド値(r=0の場合には算出値)の内のk (r−1)、k (r−1)を、それぞれ第rラウンドの鍵ラウンド値k (r)、k (r)とする。
そして、第二ラウンド鍵生成部125は、以上のようにして算出したk (r)、k (r)、k (r)、k (r)、k (r)、k (r)、k (r)、k (r)を連結して第rラウンドの鍵ラウンド値として、第r−1ラウンドの鍵ラウンド値と入れ替えて鍵ラウンド値記憶領域113に記憶する。
また、第二ラウンド鍵生成部125は、第rラウンドの鍵ラウンド値の内のk (r)を、第rラウンドのラウンド鍵K(r)として、撹拌部126に出力する。
次に、第二ラウンド鍵生成部125で使用するF関数である関数Fについて説明する。
関数Fは、下記の(13)式に示すように、非線形変換γと、バイト置換πと、行列変換θと、の合成変換を4回(4段)行う関数である。
Figure 2010044251
ここで、関数Fへの入力をX、関数Fからの出力をYとして説明する。本実施形態においては、X及びYは、128ビットのデータである。
まず、非線形変換γでは、値Xを8ビット毎のサブデータ(s,s,・・・,s15)に分割して、分割した各々のサブデータを、下記の(14)式に示すように、置換テーブルS−boxを用いて非線形変換を行う。ここで、変換後のサブデータをs’,s’,・・・,s’15とする。
Figure 2010044251
なお、置換テーブルSboxは、例えば、上記の(7)で示されるものを使用すればよい。
次に、バイト置換πでは、(15)式に示すように、非線形変換γで変換されたサブデータ(s’,s’,・・・,s’15)を4行4列の行列として、各々の列に含まれる各々の行のデータが各々異なる列に配置されるように、データの入れ替えを行う。なお、(15)式は一例であって、各々の列に含まれる各々の行のデータが各々異なる列に配置されるものであれば、他の入れ替え方式を採用することも可能である。
また、変換後のサブデータをs”,s”,・・・,s”15とする。
Figure 2010044251
次に、行列変換θでは、下記の(16)式に示すように、上記のバイト置換πでの変換後のサブデータ(s”,s”,・・・,s”15)を要素とする4行4列の行列と、変換行列Bと、の有限体GF(2)上での乗算を行うことで、変換を行う。ここで、変換後のサブデータをy,y,・・・,y15とする。
Figure 2010044251
ここで、変換行列Bは、ある列を入力列とし、当該入力列に対して変換行列Bによる変換を行った後の値の列を出力列とした場合に、入力列及び出力列に含まれる項の内、値が「0」ではない項が、5個以上になるような変換であれば、どのような変換行列を用いてもよい。
そして、このようにして算出されたサブデータ(y,y,・・・,y15)を、(17)式に示すように、サブデータ(s,s,・・・,s15)として、非線形変換γ、バイト置換π及び行列変換θによる変換を3回(合計4回)行うことで、算出されるサブデータ(y,y,・・・,y15)を(17)式のように連結することで、関数Fの出力Yとする。
Figure 2010044251
以上の関数Fでは、前述の関数Fと比較して、一つの入力に対して4回の処理で出力を行うため、安全性を高めることができる。なお、この4回という回数については、適宜変更可能である。
図1に戻り、撹拌部126は、各ラウンドにおける平文ラウンド値を算出する処理を行う。
例えば、撹拌部126による平文ラウンド値の算出は、図5(平文ラウンド値変換関数fの概略図)に示す平文ラウンド値変換関数fを用いて行われる。
図示するように、平文ラウンド値変換関数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)を生成する関数である。
具体的には、平文ラウンド値変換関数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等分する。
次に、撹拌部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)、とする。
次に、撹拌部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))、を算出する。
そして、撹拌部126は、値qと、第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx (r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの平文ラウンド鍵のx (r)とする。
また、撹拌部126は、値qと、第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx (r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの平文ラウンド値のx (r)とする。
次に、撹拌部126は、第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx (r−1)、x (r−1)を、それぞれ第rラウンドの平文ラウンド値x (r)、x (r)とする。
そして、撹拌部126は、以上のようにして算出したx (r)、x (r)、x (r)、x (r)、x (r)、x (r)、x (r)、x (r)を連結して第rラウンドの平文ラウンド値として、第r−1ラウンドの鍵ラウンド値と入れ替えて平文ラウンド値記憶領域114に記憶する。
撹拌部126で使用するF関数である関数Fについては、上述の(13)式で示されているものと同様であるため、説明を省略する。
入力部130は、情報の入力を受け付ける。
出力部140は、情報を出力する。
以上に記載したハッシュ値生成装置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で実現できる。
例えば、記憶部110は、CPU901がメモリ902又は外部記憶装置903を利用することにより実現可能であり、制御部120は、外部記憶装置903に記憶されている所定のプログラムをメモリ902にロードしてCPU901で実行することで実現可能であり、入力部130は、CPU901が入力装置906を利用することで実現可能であり、出力部140は、CPU901が出力装置907を利用することで実現可能である。
この所定のプログラムは、読書装置905を介して記憶媒体904から、あるいは、通信装置908を介してネットワークから、外部記憶装置903にダウンロードされ、それから、メモリ902上にロードされてCPU901により実行されるようにしてもよい。また、読書装置905を介して記憶媒体904から、あるいは、通信装置908を介してネットワークから、メモリ902上に直接ロードされ、CPU901により実行されるようにしてもよい。
次に、図7(ハッシュ値の算出処理を示す概略図)を用いて、ハッシュ値生成装置100がハッシュ値を算出する処理の概略を示す。
まず、ハッシュ値生成装置100では、入力部130を介して、ハッシュ値を生成するメッセージMの入力を受け付け、ハッシュ値生成装置100の全体制御部121が、メッセージブロック化部122にメッセージMを入力する。
そして、メッセージブロック化部122では、メッセージMをパディングして、512ビット毎のメッセージブロック(M’,・・・,M’;kは1以上の整数)に分割する。
次に、全体制御部121は、初期値記憶領域111に記憶されている算出値の初期値H−1と、メッセージブロック化部122でブロック化されたメッセージブロックM’のうち、最初のメッセージブロックM’と、を第一ブロック暗号fに入力することで、平文ラウンド値hを算出する。
ここで、第一ブロック暗号fを用いた処理は、後述するように、ラウンド定数生成部123、第一ラウンド鍵生成部124及び撹拌部126で行われる。
そして、全体制御部121は、算出した平文ラウンド値hと、メッセージブロックM’と、の排他的論理和を算出することで、算出値を求め、求めた算出値と、次のメッセージブロックM’と、を第一ブロック暗号fに入力することで、平文ラウンド値hを算出する。なお、算出された算出値については、算出値記憶領域115に記憶される。
このような処理を、最後のメッセージブロックM’の直前のメッセージブロックM’k−1まで繰り返すことで、平文ラウンド値hk−1を算出する。
そして、全体制御部121は、平文ラウンド値hk−1と、メッセージブロックM’k−1と、の排他的論理和で算出される算出値と、最後のメッセージブロックM’と、を第二ブロック暗号f’に入力することにより、平文ラウンド値hを算出する。
ここで、第二ブロック暗号f’を用いた処理は、後述するように、ラウンド定数生成部123、第二ラウンド鍵生成部125及び撹拌部126で行われる。
そして、全体制御部121は、平文ラウンド値hと、最後のメッセージブロックM’と、の排他的論理和でハッシュ値Hを算出する。
このようなハッシュ値Hは、ハッシュ値記憶領域116に記憶される。
なお、本発明におけるハッシュ値の算出処理(方法)は、図7に示した処理(方法)に限定されるわけではなく、第一ブロック暗号f又は、第二ブロック暗号f’の少なくとも何れか一方を利用すれば、どのようなものであってもよく。
図8は、第一ブロック暗号fでの処理を示す概略図である。
まず、ラウンド定数生成部123は、初期値記憶領域111に記憶されている定数ラウンド値の初期値を取得して、図2に示すような線形変換関数fを用いた処理を行うことにより、ラウンドr=0における定数ラウンド値c(0)を算出し、定数ラウンド値c(0)の下位64ビットを、ラウンドr=0におけるラウンド定数C(0)として算出する。
そして、ラウンド定数生成部123は、算出した定数ラウンド値c(0)を定数ラウンド値記憶領域112に記憶し、ラウンド定数C(0)を第一ラウンド鍵生成部124に出力する。
次に、第一ラウンド鍵生成部124は、第一ブロック暗号fに入力されたメッセージブロックM’がメッセージブロックM’の場合には、初期値記憶領域111に記憶されている算出値の初期値を取得して、一方、第一ブロック暗号fに入力されたメッセージブロックM’がメッセージブロックM’ではない場合には、算出値記憶領域115に記憶されている前メッセージブロックM’における算出値を取得して、図3に示すような第一鍵ラウンド値変換関数fKを用いた処理を行うことにより、r=0における鍵ラウンド値k(0)を算出し、また、鍵ラウンド値k(0)の内のk (0)を、ラウンドr=0のラウンド鍵K(0)として算出する。
そして、第一ラウンド鍵生成部124は、鍵ラウンド値k(0)を鍵ラウンド値記憶領域113に記憶し、ラウンド鍵K(0)を撹拌部126に出力する。
次に、撹拌部126は、第一ブロック暗号fに入力されたメッセージブロックM’を取得して、図5に示すような平文ラウンド値変換関数fを用いた処理を行うことにより、r=0における平文ラウンド値x(0)を算出し、平文ラウンド値記憶領域114に記憶する。
以上で、第0ラウンドの処理を終了する。
次に、ラウンド定数生成部123は、定数ラウンド値記憶領域112に記憶されている定数ラウンド値c(0)を取得して、図2に示すような線形変換関数fを用いた処理を行うことにより、ラウンドr=1における定数ラウンド値c(1)を算出し、定数ラウンド値c(1)の下位64ビットを、ラウンドr=1におけるラウンド定数C(1)として算出する。
そして、ラウンド定数生成部123は、算出した定数ラウンド値c(1)を、定数ラウンド値c(0)に置き換えて(いわゆる上書きして)、定数ラウンド値記憶領域112に記憶し、ラウンド定数C(1)を第一ラウンド鍵生成部124に出力する。
次に、第一ラウンド鍵生成部124は、鍵ラウンド値記憶領域113に記憶されている鍵ラウンド値k(0)を取得して、図3に示すような第一鍵ラウンド値変換関数fKを用いた処理を行うことにより、ラウンドr=1における鍵ラウンド値k(1)を算出し、また、鍵ラウンド値k(1)の内のk (1)を、ラウンドr=1のラウンド鍵K(1)として算出する。
そして、第一ラウンド鍵生成部124は、算出した鍵ラウンド値k(1)を、鍵ラウンド値k(0)に置き換えて(いわゆる上書きして)、鍵ラウンド値記憶領域113に記憶し、ラウンド鍵K(1)を撹拌部126に出力する。
次に、撹拌部126は、平文ラウンド値記憶領域114に記憶されている平文ラウンド値x(0)を取得して、図5に示すような平文ラウンド値変換関数fを用いた処理を行うことにより、ラウンドr=1における平文ラウンド値x(1)を算出し、算出した平文ラウンド値x(1)を、平文ラウンド値x(0)に置き換えて(いわゆる上書きして)、平文ラウンド値記憶領域114に記憶する。
以上で、第1ラウンドの処理を終了する。
そして、以上に記載した第1ラウンドでの処理と同様の処理を、所定のラウンド(ここでは、第31ラウンド)まで繰り返すことで、第一ブロック暗号fでの処理を終了する。
図9は、第二ブロック暗号f’での処理を示す概略図である。
まず、ラウンド定数生成部123は、初期値記憶領域111に記憶されている定数ラウンド値の初期値を取得して、図2に示すような線形変換関数fを用いた処理を行うことにより、ラウンドr=0における定数ラウンド値c(0)を算出し、定数ラウンド値c(0)の下位64ビットを、ラウンドr=0におけるラウンド定数C(0)として算出する。
そして、ラウンド定数生成部123は、算出した定数ラウンド値c(0)を定数ラウンド値記憶領域112に記憶し、ラウンド定数C(0)を第二ラウンド鍵生成部125に出力する。
次に、第二ラウンド鍵生成部125は、算出値記憶領域115に記憶されている前メッセージブロックM’k−1における算出値を取得して、図4に示すような第二鍵ラウンド値変換関数f’を用いた処理を行うことにより、r=0における鍵ラウンド値k(0)を算出し、また、鍵ラウンド値k(0)の内のk (0)を、ラウンドr=0のラウンド鍵K(0)として算出する。
そして、第二ラウンド鍵生成部125は、鍵ラウンド値k(0)を鍵ラウンド値記憶領域113に記憶し、ラウンド鍵K(0)を撹拌部126に出力する。
次に、撹拌部126は、第二ブロック暗号f’に入力されたメッセージブロックM’を取得して、図5に示すような平文ラウンド値変換関数fを用いた処理を行うことにより、r=0における平文ラウンド値x(0)を算出し、平文ラウンド値記憶領域114に記憶する。
以上で、第0ラウンドの処理を終了する。
次に、ラウンド定数生成部123は、定数ラウンド値記憶領域112に記憶されている定数ラウンド値c(0)を取得して、図2に示すような線形変換関数fを用いた処理を行うことにより、ラウンドr=1における定数ラウンド値c(1)を算出し、定数ラウンド値c(1)の下位64ビットを、ラウンドr=1におけるラウンド定数C(1)として算出する。
そして、ラウンド定数生成部123は、算出した定数ラウンド値c(1)を、定数ラウンド値c(0)に置き換えて(いわゆる上書きして)、定数ラウンド値記憶領域112に記憶し、ラウンド定数C(1)を第二ラウンド鍵生成部125に出力する。
次に、第二ラウンド鍵生成部125は、鍵ラウンド値記憶領域113に記憶されている鍵ラウンド値k(0)を取得して、図4に示すような第二鍵ラウンド値変換関数f’を用いた処理を行うことにより、ラウンドr=1における鍵ラウンド値k(1)を算出し、また、鍵ラウンド値k(1)の内のk (1)を、ラウンドr=1のラウンド鍵K(1)として算出する。
そして、第二ラウンド鍵生成部125は、算出した鍵ラウンド値k(1)を、鍵ラウンド値k(0)に置き換えて(いわゆる上書きして)、鍵ラウンド値記憶領域113に記憶し、ラウンド鍵K(1)を撹拌部126に出力する。
次に、撹拌部126は、平文ラウンド値記憶領域114に記憶されている平文ラウンド値x(0)を取得して、図5に示すような平文ラウンド値変換関数fを用いた処理を行うことにより、ラウンドr=1における平文ラウンド値x(1)を算出し、算出した平文ラウンド値x(1)を、平文ラウンド値x(0)に置き換えて(いわゆる上書きして)、平文ラウンド値記憶領域114に記憶する。
以上で、第1ラウンドの処理を終了する。
以上に記載した第1ラウンドでの処理と同様の処理を、所定のラウンド(ここでは、第31ラウンド)まで繰り返すことで、第二ブロック暗号f’での処理を終了する。
図10は、ハッシュ値生成装置100におけるハッシュ値の生成処理を示すフローチャートである。
まず、ハッシュ値生成装置100は、入力部130を介してハッシュ値を生成する元となるメッセージMを取得する(S10)。
次に、メッセージブロック化部122は、入出部130を介して取得したメッセージを予め定められたデータ長に分割することによりk+1個のメッセージブロックM’を生成する(S11)。ここで、本実施形態においては、メッセージを512ビットのデータ長に分割するようにしている。
次に、全体制御部121は、定数ラウンド値記憶領域112、鍵ラウンド値記憶領域113、平文ラウンド値記憶領域114、算出値記憶領域115及びハッシュ値記憶領域116に記憶されている情報のリセットを行う(S12)。具体的には、全てのビット値を「0」にする。
次に、全体制御部121は、メッセージブロックのカウンタであるメッセージカウンタiの値を初期化する(S13)。ここでは、メッセージカウンタiの値に「0」を代入する。
次に、全体制御部121は、メッセージカウンタiの値が、i=kとなっているか否かを判断する(S14)。
ステップS14で、i=kとなっていない場合には(ステップS14でNo)、ステップS15に進み、i=kとなっている場合には(ステップS14でYes)、ステップS21に進む。
ステップS15では、全体制御部121は、ラウンドのカウンタであるラウンドカウンタrに初期値「0」を代入する。
次に、全体制御部121は、ラウンドカウンタrの値が、予め定められた第一ラウンド数(ここでは、ROUND NUM=31)に対して、r=(ROUND NUM)+1の関係にあるか否かを判断する(S16)。ステップS16において、r=(ROUND NUM)+1の関係にある場合には、ステップS19に進み、r=(ROUND NUM)+1の関係にない場合には、ステップS17に進む。
ステップS17では、ラウンド定数生成部123、第一ラウンド鍵生成部124及び撹拌部126において、第一ブロック暗号fを用いて、定数ラウンド値、鍵ラウンド値及び平文ラウンド値を算出し、定数ラウンド値記憶領域112、鍵ラウンド値記憶領域113及び平文ラウンド値記憶領域114に記憶されている情報を更新する。
次に、全体制御部121は、ラウンドカウンタrの値に「1」をインクリメントして、ステップS16に戻って処理を繰り返す。
また、ステップS19では、全体制御部121は、平文ラウンド値記憶領域114に記憶されている平文ラウンド値と、メッセージブロックM’と、の排他的論理和を算出することで算出値を算出し、算出した算出値で算出値記憶領域115に記憶されている情報を更新する。
そして、全体制御部121は、メッセージカウンタiの値に「1」をインクリメントして(S20)、ステップS14に戻って処理を繰り返す。
一方、ステップS14において、i=kとなっている場合には(ステップS14でYes)、ステップS21において、全体制御部121は、ラウンドのカウンタであるラウンドカウンタrに初期値「0」を代入する。
次に、全体制御部121は、ラウンドカウンタrの値が、予め定められた第二ラウンド数(ここでは、ROUND NUM=31)に対して、r=(ROUND NUM)+1の関係にあるか否かを判断する(S22)。
そして、ステップS22において、r=(ROUND NUM)+1の関係にある場合には(ステップS22でYes)、ステップS25に進み、r=(ROUND NUM)+1の関係にない場合には(ステップS22でNo)、ステップS23に進む。
ステップS23では、ラウンド定数生成部123、第二ラウンド鍵生成部125及び撹拌部126において、第二ブロック暗号f’を用いて、定数ラウンド値、鍵ラウンド値及び平文ラウンド値を算出し、定数ラウンド値記憶領域112、鍵ラウンド値記憶領域113及び平文ラウンド値記憶領域114に記憶されている情報を更新する。
次に、全体制御部121は、ラウンドカウンタrの値に「1」をインクリメントして(S24)、ステップS22に戻って処理を繰り返す。
また、ステップS25では、全体制御部121は、平文ラウンド値記憶領域114に記憶されている平文ラウンド値と、メッセージブロックM’と、の排他的論理和を算出することでハッシュ値を算出し、ハッシュ値記憶領域116に記憶されている情報を更新する。
以上のように、本実施形態においては、512ビットにおけるブロック暗号を用いているため、理論的安全性と実装安全性が保証されたハッシュ関数を提供することができる。
図11は、本発明の第二の実施形態であるハッシュ値生成装置200の概略図である。
ここで、本実施形態においては、256ビットのハッシュ値を生成するようにしている。
図示するように、ハッシュ値生成装置200は、記憶部210と、制御部220と、入力部130と、出力部140と、を備え、第一の実施形態と比較して、記憶部210及び制御部220が異なっているため、以下これらの異なっている点に関連する事項について説明する。
記憶部210は、初期値記憶領域211と、定数ラウンド値記憶領域112と、鍵ラウンド値記憶領域113と、平文ラウンド値記憶領域114と、算出値記憶領域115と、ハッシュ値記憶領域116と、を備え、第一の実施形態と比較して、初期値記憶領域211に記憶されている情報が異なっているため、以下この異なっている点に関連する事項について説明する。
初期値記憶領域211には、ハッシュ値を生成する際の初期値を特定する情報が格納される。
本実施形態においては、ハッシュ値を生成する際の初期値として、定数ラウンド値の初期値と、算出値の初期値と、が記憶される。
ここで、定数ラウンド値の初期値は、例えば、c(−1)=0xffffffffffffffffといった定数が記憶される。
また、算出値の初期値は、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、といった定数が記憶される。
なお、定数ラウンド値及び算出値の初期値に使用される定数はこれらに限定されるわけではなく、例えば、疑似乱数生成器等で生成された乱数を使用することも可能である。
制御部220は、全体制御部221と、メッセージブロック化部222と、ラウンド定数生成部223と、第一ラウンド鍵生成部224と、第二ラウンド鍵生成部225と、撹拌部226と、を備える。
全体制御部221は、ハッシュ値生成装置200における処理の全体を制御する。
特に、本実施形態においては、ハッシュ値を算出するメッセージをブロック化したメッセージブロックを管理する処理や、ラウンド定数生成部223、第一ラウンド鍵生成部224、第二ラウンド鍵生成部225及び撹拌部226でのラウンドを管理する処理を行う。
また、全体制御部221は、全てのラウンドを経て撹拌部226において算出された平文ラウンド値と、当該ラウンドでの処理の対象となったメッセージブロックと、の排他的論理和を算出することで、算出値を算出する。
さらに、全体制御部221は、全てのメッセージブロック及び全てのラウンドを経て撹拌部226において算出された平文ラウンド値と、最後のメッセージブロックと、の排他的論理和を算出することで、ハッシュ値を算出する。
メッセージブロック化部222は、ハッシュ値を算出する対象となるメッセージを予め定められたビット長のブロックに分割し、パディングを行う。
ここで、本実施形態では、ハッシュ値を算出する対象となるメッセージを256ビット毎のブロックに分割するようにしているが、このような態様に限定されるわけではない。
また、例えば、本実施形態におけるパディングは、以下のようにして行う。
まず、メッセージブロック化部222は、ハッシュ値を算出する対象となるメッセージのビット数が、256ビットで割り切れる場合には、当該メッセージを256ビット毎に分割することで各々のメッセージブロックを生成するとともに、メッセージブロックを追加して最後のメッセージブロックとする。
そして、メッセージブロック化部222は、この最後のメッセージブロックにおいて、先頭ビットに「1」、先頭ビットの次のビットから数えて191ビットまでに「0」、最後の64ビットにメッセージのビット長、を特定する情報を格納する。
次に、メッセージブロック化部222は、ハッシュ値を算出する対象となるメッセージのビット数が、256ビットで割り切れない場合には、当該メッセージを256ビット毎に分割することで各々のメッセージブロックを生成するとともに、分割した最後尾のメッセージブロックには最後のビットまで「0」を特定する情報を格納することで、256ビットにし、さらに、メッセージブロックを追加して最後のメッセージブロックとする。
そして、メッセージブロック化部122は、この最後のメッセージブロックにおいて、先頭ビットから数えて192ビットまでに「0」、最後の64ビットにメッセージのビット長、を特定する情報を格納する。
なお、本実施形態においては、ハッシュ値を算出するメッセージをMとし、パディングにより、256ビットで割り切れるようなビット長にされたメッセージをM’とし、メッセージブロックの数をk+1(kは1以上の整数)とし、各々のメッセージブロックをM’(iは、0≦i≦kなる整数)とする。
ラウンド定数生成部223は、各ラウンドにおける定数ラウンド値及びラウンド定数を算出する。
本実施形態においても、ラウンド定数生成部223は、最初のラウンドの場合には、初期値記憶領域211に記憶されている定数ラウンド値の初期値から、または、最初のラウンドではない場合には、定数ラウンド値記憶領域212に記憶されている前ラウンドにおける定数ラウンド値から、線形変換関数fを用いて、各ラウンドにおける定数ラウンド値を算出する。
例えば、図2に示すように、ラウンド定数生成部223は、前ラウンド(r−1)の定数ラウンド値c(r−1)(r=0のときは、定数ラウンド値の初期値)を関数fに入力して算出された値の上位ビット(本実施形態では、上位32ビット)と下位ビット(本実施形態では、下位32ビット)を入れ替えることにより、今ラウンド(r)の定数ラウンド値c(r)を算出する。
即ち、上述の(1)式及び(2)式に示されるようにして、前ラウンドの定数ラウンド値c(r−1)(r=0のときは、定数ラウンド値の初期値)から今ラウンドの定数ラウンド値c(r)を算出する。
また、関数fは、線形フィードバックシフトレジスタ(LFSR)を用いる。
一般に、LFSRは多項式で決定されるが、ここではLFSRを決定する多項式g(x)を、下記の(18)式のように定義する。
Figure 2010044251
但し、g(x)は有限体GF(2)において定義される多項式である。
なお、関数fの擬似コードは、下記の(19)のように示される。
Figure 2010044251
ここで、「<<X」は、Xビットの左シフトを示し、「>>Y」は、Yビットの右シフトを示し、「^」は、排他的論理和を示し、「&」は、論理積を示し、「|」は、論理和を示す。また、hは、定数ラウンド値c(r−1)における上位ビット(上位32ビット)、lは、定数ラウンド値c(r−1)における下位ビット(下位32ビット)である。
そして、ラウンド定数生成部223は、算出したラウンド(r)での定数ラウンド値c(r)の下位32ビットを、第rラウンドにおけるラウンド定数C(r)として、第一ラウンド鍵生成部224又は第二ラウンド鍵生成部225に出力する。
以下に、R=96の場合におけるC(r)の一例を掲げる。
(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。
第一ラウンド鍵生成部224は、各ラウンドにおける鍵ラウンド値及びラウンド鍵を算出する処理を行う。
例えば、第一ラウンド鍵生成部224による鍵ラウンド値の算出は、上述の図3に示す第一鍵ラウンド値変換関数fKを用いて行われる。
図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)を生成する関数である。
なお、第一鍵ラウンド値変換関数fKを用いた処理に関しては、ビット数が異なるだけで、第一の実施形態と同様であるため、詳細な説明は省略する。
次に、第一ラウンド鍵生成部224で使用するF関数である関数Fについて説明する。
本実施形態における関数Fも、上述の(5)式に示すように、非線形変換γと、線形変換λと、の合成変換を行う関数であり、線形変換λは、バイト置換πと、行列変換θと、からなる。
ここで、関数Fへの入力をX、関数Fからの出力をYとして説明する。
本実施形態においては、X及びYは、64ビットのデータである。
まず、非線形変換γでは、値Xを8ビット毎のサブデータ(s,s,・・・,s)に分割して、分割した各々のサブデータを、下記の(20)式に示すように、置換テーブルSboxを用いて非線形変換を行う。ここで、変換後のサブデータをs’,s’,・・・,s’とする。
Figure 2010044251
なお、置換テーブルSboxは、例えば、上記の(7)で示される。
次に、行列変換θでは、上記の非線形変換γでの変換後のサブデータ(s’,s’,・・・,s’)を4行2列の行列にして、下記の(21)式に示すように、変換行列Aとの有限体GF(2)上での乗算を行うことで、変換を行う。ここで、変換後のサブデータをs”,s”,・・・,s”とする。
Figure 2010044251
ここで、変換行列Aは、ある列を入力列とし、当該入力列に対して変換行列Aによる変換を行った後の値の列を出力列とした場合に、入力列及び出力列に含まれる項の内、値が「0」ではない項が、5個以上になるような変換であれば、どのような変換行列を用いてもよい。
次に、バイト置換πでは、下記の(22)式に示すように、行列変換θで変換されたサブデータ(s”,s”,・・・,s”)のうちの半分のデータの入れ替えを行う。なお、変換後のサブデータをy,y,・・・,yとする。
Figure 2010044251
そして、以上のようにして算出されたサブデータ(y,y,・・・,y)を(23)式のように連結することで、関数Fの出力Yとする。
Figure 2010044251
以上の関数Fでは、後述する関数Fと比較して、一つの入力に対して一回の処理で出力を行うため、計算量が少なくてすみ、軽実装が可能となる。
図11に戻り、第二ラウンド鍵生成部225は、各ラウンドにおける鍵ラウンド値及びラウンド鍵を算出する処理を行う。
例えば、第二ラウンド鍵生成部225による鍵ラウンド値の算出は、図4に示すような第二鍵ラウンド値変換関数f’を用いて行われる。
図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)を生成する関数である。
なお、第二鍵ラウンド値変換関数f’Kを用いた処理に関しては、ビット数が異なるだけで、第一の実施形態と同様であるため、詳細な説明は省略する。
次に、第二ラウンド鍵生成部225で使用するF関数である関数Fについて説明する。
関数Fは、上述の(13)式に示すように、非線形変換γと、バイト置換πと、行列変換θと、の合成変換を4回(4段分)行う関数である。
ここで、関数Fへの入力をX、関数Fからの出力をYとして説明する。
本実施形態においては、X及びYは、64ビットのデータである。
まず、非線形変換γでは、値Xを8ビット毎のサブデータ(s,s,・・・,s)に分割して、分割した各々のサブデータを、下記の(24)式に示すように、置換テーブルS−boxを用いて非線形変換を行う。ここで、変換後のサブデータをs’,s’,・・・,s’15とする。
Figure 2010044251
なお、置換テーブルS−boxは、例えば、上記の(7)で示されるものを使用すればよい。
次に、バイト置換πでは、下記の(25)式に示すように、非線形変換γで変換されたサブデータ(s’,s’,・・・,s’)を2行4列の行列として、各々の列に含まれる各々の行のデータが各々異なる列に配置されるように、データの入れ替えを行う。なお、(25)式は一例であって、各々の列に含まれる各々の行のデータが各々異なる列に配置されるものであれば、他の入れ替え方式を採用することも可能である。
また、変換後のサブデータをs”,s”,・・・,s”とする。
Figure 2010044251
次に、行列変換θでは、下記の(26)式に示すように、上記のバイト置換πでの変換後のサブデータ(s”,s”,・・・,s”)を要素とする2行4列の行列と、変換行列Bと、の有限体GF(2)上での乗算を行うことで、変換を行う。ここで、変換後のサブデータをy,y,・・・,yとする。
Figure 2010044251
ここで、変換行列Bは、ある列を入力列とし、当該入力列に対して変換行列Bによる変換を行った後の値の列を出力列とした場合に、入力列及び出力列に含まれる項の内、値が「0」ではない項が、3個以上になるような変換であれば、どのような変換行列を用いてもよい。
そして、このようにして算出されたサブデータ(y,y,・・・,y)を、(27)式に示すように、サブデータ(s,s,・・・,s)として、非線形変換γ、バイト置換π及び行列変換θによる変換を3回(合計4回)行うことで、算出されるサブデータ(y,y,・・・,y)を(27)式のように連結することで、関数Fの出力Yとする。
Figure 2010044251
以上の関数Fでは、前述の関数Fと比較して、一つの入力に対して4回の処理で出力を行うため、安全性を高めることができる。なお、この4回の回数に関しては、適宜変更可能である。
図11に戻り、撹拌部226は、各ラウンドにおける平文ラウンド値を算出する処理を行う。
例えば、撹拌部226による平文ラウンド値の算出は、図5に示すような平文ラウンド値変換関数fを用いて行われる。
図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)を生成する関数である。
なお、平文ラウンド値変換関数fを用いた処理に関しては、ビット数が異なるだけで、第一の実施形態と同様であるため、詳細な説明は省略する。
また、撹拌部226で使用するF関数である関数Fについては、上述の第二ラウンド鍵生成部225で使用するF関数である関数Fと同様であるため、説明を省略する。
本実施形態におけるハッシュ値の算出処理についても、図7と同様に行うことが可能である。
まず、ハッシュ値生成装置200では、入力部130を介して、ハッシュ値を生成するメッセージMの入力を受け付け、ハッシュ値生成装置200の全体制御部221が、メッセージブロック化部222にメッセージMを入力する。
そして、メッセージブロック化部222では、メッセージMをパディングして、256ビット毎のメッセージブロック(M’,・・・,M’;kは1以上の整数)に分割する。
次に、全体制御部221は、初期値記憶領域211に記憶されている算出値の初期値H−1と、メッセージブロック化部222でブロック化されたメッセージブロックM’のうち、最初のメッセージブロックM’と、を第一ブロック暗号fに入力することで、平文ラウンド値hを算出する。
ここで、第一ブロック暗号fを用いた処理は、ラウンド定数生成部223、第一ラウンド鍵生成部224及び撹拌部226で行われる。
そして、全体制御部221は、算出した平文ラウンド値hと、メッセージブロックM’と、の排他的論理和を算出することで、算出値を求め、求めた算出値と、次のメッセージブロックM’と、をブロック暗号fに入力することで、平文ラウンド値hを算出する。なお、算出された算出値については、算出値記憶領域115に記憶される。
このような処理を、最後のメッセージブロックM’の直前のメッセージブロックM’k−1まで繰り返すことで、平文ラウンド値hk−1を算出する。
そして、全体制御部221は、平文ラウンド値hk−1と、メッセージブロックM’k−1と、の排他的論理和で算出される算出値と、最後のメッセージブロックM’と、を第二ブロック暗号f’に入力することにより、平文ラウンド値hを算出する。
ここで、第二ブロック暗号f’を用いた処理は、ラウンド定数生成部223、第二ラウンド鍵生成部225及び撹拌部226で行われる。
そして、全体制御部221は、平文ラウンド値hと、最後のメッセージブロックM’と、の排他的論理和でハッシュ値Hを算出する。
このようなハッシュ値Hは、ハッシュ値記憶領域216に記憶される。
ここで、第一ブロック暗号fでの処理及び第二ブロック暗号f’での処理については、ビット数は異なるが、図8及び図9での処理と同様であるため、説明を省略する。
以上のように、本実施形態によれば、256ビットのハッシュ値を算出することができる。
ここで、差分攻撃線形攻撃に対する耐性の指標として、最小のアクティブS−box数を用いた下記の(28)式が用いられる。
Figure 2010044251
この点、AES(Advanced Encryption Standard)型のF関数においては、2段分のアクティブS−box数をBとすると、4段分のアクティブS−box数は、Bとなる。このように、S−boxを4段重ねることで安全性を高めるこのような手法をWTS(Wide Trail Strategy)という。
これに対して、例えば、図5に示されているようなFeistel構造では、F関数の出力をX (r−1)、X (r−1)に加算する処理があるため、単にF関数の段数を増やすWTSを採用することができない。
この点、本発明では、平文ラウンド値変換関数fで使用するF関数である関数Fにおいて、第二非線形変換γと、バイト置換πと、行列変換θと、の合成変換を4回(4段)行うことで安全性を確保している。
例えば、本発明の第一の実施形態における512ビットのハッシュ値を生成するハッシュ値生成装置100では、2段分の最低アクティブS−box数「B=5」であるため、F関数一つ当たりの最低アクティブS−box数「B=25」となる。
そして、12段でアクティブなF関数は、最低5つであるため、アクティブS−box数の最小値は、「5×25=125」となる。
従って、最大の差分伝搬の確率は、「125×6(=750)>512」となるため、(28)式を満たし、差分攻撃に対して耐性を有することがわかる。
また、本発明の第二の実施形態における256ビットのハッシュ値を生成するハッシュ値生成装置200では、2段分の最低アクティブS−box数「B=3」であるため、F関数一つ当たりの最低アクティブS−box数「B=9」となる。
そして、12段でアクティブなF関数は、最低5つであるため、アクティブS−box数の最小値は、「5×9=45」となる。
従って、最大の差分伝搬の確率は、「45×6(=270)>256」となるため、(28)式を満たし、差分攻撃に対して耐性を有することがわかる。
なお、WTSについては、下記の文献2に詳細に記載されている。
文献2:J.Daemen and V. Rijmen, Springer, 2002, February, “The Design of Rijndael”, pp. 123-147
また、以上に記載した第一の実施形態及び第二の実施形態では、それぞれ、512ビット、256ビットのハッシュ値を算出するようにしているが、このような態様に限定されるわけではなく、ビット長を適宜変化させることで、224ビット、384ビット等の他のビット長のハッシュ値を算出することも可能である。
さらに、以上に記載した実施形態においては、ハッシュ値生成装置100、200を図6に示すようなコンピュータ900で実現可能としたが、このような態様に限定されず、例えば、CPUと、発揮性又は不発揮性メモリと、を備える携帯電話端末、非接触型ICカード、商品タグ等の実装規模の小さなデバイスにおいても実現可能である。
また、上述したハッシュ値生成装置100、200は、コンピュータがプログラムを実行することにより実現されるものでなくてもよい。例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等の集積ロジックICによりハード的に実行されるものであってもよいし、あるいは、DSP(Digital Signal Processor)等の計算機によりソフトウェア的に実行されるものであってもよい。
以上に記載した実施形態においては、図5に示すような平文ラウンド値変換関数fを使用しているが、このような態様に限定されず、関数FをF関数として使用するものであれば、どのようなものであってもよい。例えば、図12(平文ラウンド値変換関数f変形例を示す概略図)に示すような平文ラウンド値変換関数fを使用することも可能である。
図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))と、を算出する。
そして、値p及び値qの排他的論理和と、第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx (r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの平文ラウンド鍵のx (r)とする。
また、値p及び値qの排他的論理和と、第r−1ラウンドの平文ラウンド値(r=0の場合は、メッセージブロックM’)の内のx (r−1)と、の排他的論理和を算出し、算出した値を第rラウンドの平文ラウンド値のx (r)とする。
図12に示すような平文ラウンド値変換関数fを用いることで、F関数への入力を出力にフィードフォワードすることで、F関数部分の置換性をくずすことができる。
さらに、図5に示すような平文ラウンド値変換関数fの替わりに、例えば、図13(平文ラウンド値変換関数f変形例を示す概略図)に示すような平文ラウンド値変換関数fを使用することも可能である。
図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))と、を算出する。
ここで、ラウンド鍵K (r)は、第rラウンドの鍵ラウンド値の内のk (r)を用い、ラウンド鍵K (r)は、第rラウンドの鍵ラウンド値の内のk (r)を用いる。
図13に示すような平文ラウンド値変換関数fを用いることで、ラウンド鍵を2倍以上の大きさにすることが可能である。
第一の実施形態であるハッシュ値生成装置の概略図。 線形変換関数fを示す概略図。 第一鍵ラウンド値変換関数fの概略図。 第二鍵ラウンド値変換関数f’の概略図。 平文ラウンド値変換関数fの概略図。 コンピュータの概略図。 ハッシュ値の算出処理を示す概略図。 第一ブロック暗号fでの処理を示す概略図。 第二ブロック暗号f’での処理を示す概略図。 ハッシュ値生成装置におけるハッシュ値の生成処理を示すフローチャート。 第二の実施形態であるハッシュ値生成装置の概略図。 平文ラウンド値変換関数f変形例を示す概略図。 平文ラウンド値変換関数f変形例を示す概略図。
符号の説明
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 撹拌部

Claims (17)

  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関数において、少なくとも非線形変換を含む変換を複数回行う過程を備えること、
    を特徴とするハッシュ値生成方法。
JP2008208635A 2008-08-13 2008-08-13 ハッシュ値生成装置、プログラム及びハッシュ値生成方法 Pending JP2010044251A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2008208635A JP2010044251A (ja) 2008-08-13 2008-08-13 ハッシュ値生成装置、プログラム及びハッシュ値生成方法
US12/393,227 US20100040226A1 (en) 2008-08-13 2009-02-26 Device, program and method for generating hash values

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008208635A JP2010044251A (ja) 2008-08-13 2008-08-13 ハッシュ値生成装置、プログラム及びハッシュ値生成方法

Publications (1)

Publication Number Publication Date
JP2010044251A true JP2010044251A (ja) 2010-02-25

Family

ID=41681285

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008208635A Pending JP2010044251A (ja) 2008-08-13 2008-08-13 ハッシュ値生成装置、プログラム及びハッシュ値生成方法

Country Status (2)

Country Link
US (1) US20100040226A1 (ja)
JP (1) JP2010044251A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010049037A (ja) * 2008-08-22 2010-03-04 Hitachi Ltd ハッシュ値生成装置
JP2012002831A (ja) * 2010-06-14 2012-01-05 Nippon Telegr & Teleph Corp <Ntt> ハッシュ関数の安全性評価装置、方法及びプログラム

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10164772B2 (en) 2014-05-30 2018-12-25 Apple Inc. Permutation composition based hash function
US10833847B2 (en) * 2017-02-28 2020-11-10 Google Llc Cryptographic hash generated using data parallel instructions
US10491377B2 (en) * 2017-02-28 2019-11-26 Google Llc Hashing using data parallel instructions

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006072054A (ja) * 2004-09-03 2006-03-16 Sony Corp 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム
JP2007316614A (ja) * 2006-04-27 2007-12-06 Hitachi Ltd ハッシュ値生成装置、プログラム及びハッシュ値生成方法
JP2008058830A (ja) * 2006-09-01 2008-03-13 Sony Corp データ変換装置、およびデータ変換方法、並びにコンピュータ・プログラム

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2164768C (en) * 1995-12-08 2001-01-23 Carlisle Michael Adams Constructing symmetric ciphers using the cast design procedure
US5949884A (en) * 1996-11-07 1999-09-07 Entrust Technologies, Ltd. Design principles of the shade cipher
US6182216B1 (en) * 1997-09-17 2001-01-30 Frank C. Luyster Block cipher method
US7003107B2 (en) * 2000-05-23 2006-02-21 Mainstream Encryption Hybrid stream cipher
US7283628B2 (en) * 2001-11-30 2007-10-16 Analog Devices, Inc. Programmable data encryption engine
US8275125B2 (en) * 2008-04-21 2012-09-25 Tata Consultancy Services Ltd Method for designing a secure hash function and a system thereof

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2006072054A (ja) * 2004-09-03 2006-03-16 Sony Corp 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム
JP2007316614A (ja) * 2006-04-27 2007-12-06 Hitachi Ltd ハッシュ値生成装置、プログラム及びハッシュ値生成方法
JP2008058830A (ja) * 2006-09-01 2008-03-13 Sony Corp データ変換装置、およびデータ変換方法、並びにコンピュータ・プログラム

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JPN6013011662; Satoh, A., et al.: 'A Compact Rijndael Hardware Architecture with S-Box Optimization' In Proceedings of the 7th International Conference on the Theory and Application of Cryptology and I , 200112, pp. 239-254, [online] *
JPN6013011666; 大和田 徹ほか: 'Lesamntaのハードウェア実装及び評価' 2009年 暗号と情報セキュリティシンポジウム (SCIS2009) 予稿集CD-ROM , 200901, 2C2-3 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010049037A (ja) * 2008-08-22 2010-03-04 Hitachi Ltd ハッシュ値生成装置
JP2012002831A (ja) * 2010-06-14 2012-01-05 Nippon Telegr & Teleph Corp <Ntt> ハッシュ関数の安全性評価装置、方法及びプログラム

Also Published As

Publication number Publication date
US20100040226A1 (en) 2010-02-18

Similar Documents

Publication Publication Date Title
US6829355B2 (en) Device for and method of one-way cryptographic hashing
JP4735644B2 (ja) メッセージ認証装置、メッセージ認証方法、メッセージ認証プログラムとその記録媒体
JP5000365B2 (ja) ハッシュ値生成装置、プログラム及びハッシュ値生成方法
JP4905000B2 (ja) 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム
JP5229315B2 (ja) 共通鍵暗号機能を搭載した暗号化装置及び組込装置
JP6406350B2 (ja) 暗号処理装置、および暗号処理方法、並びにプログラム
JP5532560B2 (ja) データ変換装置、およびデータ変換方法、並びにプログラム
JP5268609B2 (ja) 暗号処理装置及び演算方法
JP2008145791A (ja) 暗号処理装置、および暗号処理方法、並びにコンピュータ・プログラム
JP2007041620A5 (ja)
JP2007041620A (ja) データ変換装置及びデータ変換方法及びデータ変換方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体
US11606189B2 (en) Method and apparatus for improving the speed of advanced encryption standard (AES) decryption algorithm
US20180241544A1 (en) Message authenticator generating apparatus, message authenticator generating method, and computer readable recording medium
JP5504592B2 (ja) データ変換装置、およびデータ変換方法、並びにプログラム
EP2876626B1 (en) Universal hash function computing device, method, and program
JP2010044251A (ja) ハッシュ値生成装置、プログラム及びハッシュ値生成方法
JP2015191107A (ja) 暗号処理装置、および暗号処理方法、並びにプログラム
CN112287333B (zh) 一种轻量级可调分组密码实现方法、系统、电子设备以及可读存储介质
JP5528281B2 (ja) ハッシュ値演算装置
JP4857230B2 (ja) 疑似乱数生成装置及びそれを用いた暗号化処理装置
JP2010256749A (ja) ハッシュ値生成装置、ハッシュ値生成方法およびプログラム
JP6089668B2 (ja) 暗号化処理回路及び復号処理回路とその方法並びにそのプログラム
JP5354914B2 (ja) 暗号処理装置及び復号処理装置及びプログラム
JP5488608B2 (ja) ブロック暗号装置、ブロック暗号化方法およびプログラム
JP2013205437A (ja) 非線形関数S−boxの計算方法及び装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20101214

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130301

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130312

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130508

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20130604