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

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

Info

Publication number
JP2007316614A
JP2007316614A JP2007104636A JP2007104636A JP2007316614A JP 2007316614 A JP2007316614 A JP 2007316614A JP 2007104636 A JP2007104636 A JP 2007104636A JP 2007104636 A JP2007104636 A JP 2007104636A JP 2007316614 A JP2007316614 A JP 2007316614A
Authority
JP
Japan
Prior art keywords
round
conversion
value
predetermined
key
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.)
Granted
Application number
JP2007104636A
Other languages
English (en)
Other versions
JP5000365B2 (ja
Inventor
Hirotaka Yoshida
博隆 吉田
Masaru Watanabe
大 渡辺
Yasuko Fukuzawa
寧子 福澤
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 JP2007104636A priority Critical patent/JP5000365B2/ja
Priority to US11/740,953 priority patent/US20080063187A1/en
Publication of JP2007316614A publication Critical patent/JP2007316614A/ja
Application granted granted Critical
Publication of JP5000365B2 publication Critical patent/JP5000365B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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/04Masking or blinding
    • H04L2209/043Masking or blinding of tables, e.g. lookup, substitution or mapping
    • 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
    • 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/80Wireless
    • H04L2209/805Lightweight hardware, e.g. radio-frequency identification [RFID] or sensor

Landscapes

  • Engineering & Computer Science (AREA)
  • Power Engineering (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)

Abstract

【課題】実装規模が小さく理論的安全性と実装安全性が保証されたハッシュ関数を提供すること。
【解決手段】 入力されたメッセージを予め定められたデータ長のN(Nは自然数)個のメッセージブロックに分割し、該メッセージブロックに対して予め定められたR(Rは2以上の自然数)ラウンドの変換処理を繰り返し行い、第n(nは自然数)メッセージブロックでのRラウンドの変換処理で算出された値を、第n+1メッセージブロックでの鍵情報として用いるブロック暗号化をN回繰り返すことで、入力されたメッセージのハッシュ値を生成する制御部120を備え、制御部120で行う変換処理におけるシフト変換では、シフトするビット数を奇数及び偶数がそれぞれ少なくとも一つずつ含むようにする。
【選択図】図1

Description

本発明は、ハッシュ値を生成する技術に関する。
近年、携帯電話端末、非接触型ICカード、商品タグ等のようにモビリティの高いデバイスを用いたサービスが急速に拡大している。
このようなモビリティの高いデバイスを用いたサービスでは、サービス提供者や被提供者を識別するために、認証技術が通常用いられる。
ここで、認証技術としては、MAC(Message Authentication Code: メッセージ認証子)生成方法を用いたものがよく知られているが、MAC生成方法として、暗号学的ハッシュ関数に基づいたMAC生成方法であるHMAC構成法がある。
ハッシュ関数は任意長のメッセージを入力として、ハッシュ値を生成して出力する。一般的に、ハッシュ関数は固定長のメッセージブロックを入力するブロック暗号から構成され、入力されたメッセージに対してブロック暗号化を繰り返し行うことで、メッセージの攪拌を行い、最終的にハッシュ値として出力する。ハッシュ関数の代表例としてはSHA−1、SHA−256、Whirlpoolといったものがある(非特許文献1参照)。
「ISO/IEC 10118-3情報セキュリティ-ハッシュ関数-(ISO/IEC 10118-3, third edition, Information technology-Security techniques-Hash-functions-)」, (スイス), 第三版, 2004年3月1日, pp 13-15, pp 19-22
ハッシュ関数の代表例として知られているSHA−1、SHA−256、Whirlpoolについては、以下のような問題がある。
まず、SHA−1については、衝突耐性という理論的安全性に問題があることが指摘されている。
次に、SHA−256については、安全性の評価を厳密に行うことは困難であり、特に、現存する攻撃方法で最も脅威とされる差分攻撃法に対する耐性についての厳密な安全性評価は今のところ知られていない。
さらに、Whirlpoolに関しては、その安全性は評価されているが、主に高速性を重点において設計されているため、携帯電話端末、非接触型ICカード、商品タグ等のようにモビリティの高いデバイス等のような軽量実装向けとはいえない。
そこで、本発明は、実装規模が小さく理論的安全性と実装安全性が保証されたハッシュ関数を提供することを目的とする。
以上の課題を解決するため、本発明は、入力されたメッセージを予め定められたデータ長のメッセージブロックに分割し、メッセージブロック毎に予め定められた変換処理を繰り返し行う際に、複数回のシフトを行うシフト変換を実行し、少なくとも一つのシフトでは、奇数ビットのシフトを行い、少なくとも一つのシフトでは、偶数ビットのシフトを行う。
例えば、本発明は、入力されたメッセージを予め定められたデータ長のN(Nは自然数)個のメッセージブロックに分割し、該メッセージブロックに対して予め定められたR(Rは2以上の自然数)ラウンドの変換処理を繰り返し行い、第n(nは自然数)メッセージブロックでのRラウンドの変換処理で算出された値を、第n+1メッセージブロックでの鍵情報として用いるブロック暗号化をN回繰り返すことで、前記メッセージのハッシュ値を生成する制御部を備えるハッシュ値生成装置であって、前記制御部が行う前記変換処理には、シフト変換が含まれており、前記シフト変換は、入力された二つのデータの内、一方のデータに予め定めたビットの巡回シフトを行い、他方のデータに合成する処理、を予め定められた回数行うものであり、前記予め定められた回数の巡回シフトの内、少なくとも一つのシフトでは、奇数ビットのシフトを行うものであり、前記予め定められた回数の巡回シフトの内、少なくとも一つのシフトでは、偶数ビットのシフトを行うものであること、を特徴とする。
以上のように、本発明によれば、実装規模が小さく理論的安全性と実装安全性が保証されたハッシュ関数を提供することができる。
図1は、本発明の第一の実施形態であるハッシュ値生成装置100の概略図である。
図示するように、ハッシュ値生成装置100は、記憶部110と、制御部120と、入出力部130と、を備える。
記憶部110は、初期値記憶領域111と、鍵ステート記憶領域112と、第一の平文ステート記憶領域113と、第二の平文ステート記憶領域114と、を備える。
初期値記憶領域111には、ハッシュ値を生成する際の初期値を特定する情報が格納される。
本実施形態においては、ハッシュ値を生成する際の初期値として、ラウンド定数の初期値と、ラウンド鍵の初期値と、が記憶される。
ここで、ラウンド定数の初期値は、例えば、c(0)=0xcae1ac3f55054a96といった定数が記憶される。
また、ラウンド鍵の初期値は、K (0)=0xbc18bf6d、K (0)=0x369c955b、K (0)=0xbb271cbc、K (0)=0xdd66c368、K (0)=0x356dba5b、K (0)=0x33c00055、K (0)=0x50d2320b、K (0)=0x1c617e21といった定数が記憶される。
なお、ラウンド定数及びラウンド鍵の初期値に使用される定数はこれらに限定されるわけではなく、例えば、疑似乱数生成器等で生成された乱数を使用することも可能である。
鍵ステート記憶領域112には、メッセージブロック毎におけるラウンド毎でのラウンド鍵を特定する情報が格納される。
ここで、本実施形態においては、メッセージブロック毎におけるラウンド毎でのラウンド鍵を後述する変換部123で生成して、鍵ステート記憶領域112に記憶する。
第一の平文ステート記憶領域113には、ラウンド毎に算出される第一の平文を特定する情報が格納される。
ここで、本実施形態においては、ラウンド毎に第一の平文を後述する変換部123で算出して、第一の平文ステート記憶領域113に記憶する。
第二の平文ステート記憶領域114には、メッセージブロック毎に算出される第二の平文を特定する情報が格納される。
ここで、本実施形態においては、メッセージブロック毎に第二の平文を後述する変換部123で算出して、第二の平文ステート記憶領域114に記憶する。
制御部120は、メッセージブロック化部121と、ラウンド定数生成部122と、変換部123と、管理部124と、全体制御部125と、を備える。
メッセージブロック化部121は、後述する入出力部130を介して入力されたメッセージを予め定められたデータ長のメッセージブロックに分割する処理を行う。
ここで、本実施形態においては、メッセージブロック化部121は、後述する入出力部130を介して入力されたメッセージを、256ビットのメッセージブロックに分割する。
但し、メッセージ長がメッセージブロック(256ビット)の倍数ではない場合は、Merkle-Damgaard方式等のパディング方式を用いてメッセージブロックの倍数になるようにパディングを行う。
ラウンド定数生成部122は、各ラウンドにおけるラウンド定数を算出する。
本実施形態においては、初期値記憶領域111に記憶されているラウンド定数の初期値から各ラウンドにおけるラウンド定数を算出する。
なお、本実施形態では、ラウンド定数生成部122として、64ビットの線形変換である線形フィードバックシフトレジスタLRを用いる。
一般に、線形フィードバックシフトレジスタは定義多項式で決定されるが、ここではLRを決定する定義多項式g(x)は、次のように定義する。
g(x) = x63 + x62 + x58 + x55 + x54 + x52+ x50 + x49 + x46 + x43 + x40 + x38 + x37 + x35 + x34 + x30 + x28 + x26 + x24 + x23 + x22 + x18 + x17 + x12 + x11 + x10+ x7 + x3 + x2 + 1
但し、gは有限体GF(2)において定義される多項式である。
線形フィードバックシフトレジスタLRは、c(0)を初期値とし、第r−1ラウンド定数の基礎値c(r−1)から、第rラウンドのラウンド定数の基礎値c(r)を生成する。次に、ラウンド定数生成部122はラウンド定数の基礎値c(r)の下位ブロックをラウンド定数C(r)とする。以下、具体的に説明する。
まず、ラウンド定数生成部122は、第r−1ラウンドのラウンド定数の基礎値c(r−1)を線形フィードバックシフトレジスタLRに入力することで出力値を算出する(出力値:yH (r)||yL (r) = LR(c(r -1)))。
ここで、yLは、基礎値c(r−1)の下位ブロックを予め定められたビット数(本実施形態では、1ビット)だけ、左シフトしたもの。即ち、yL (r) = c(r -1)L << 1 (<< 1は1ビットによる左シフトを表現)。
また、yHは、基礎値c(r−1)の上位ブロックを予め定められたビット数(本実施形態では、31ビット)だけ、左シフトしたもの。即ち、yH (r)= (c(r -1)H << 1)|| (yL >> 31) (>> 31は31ビットによる右シフトを表現)。
但し、c(r−1)の最上位ビットが「1」の場合のみ、yH (r) =c(r-1)H XOR 0xc4d6496c、yL (r) =c(r-1)L XOR 0x55c61c8d、を用いる。
次に、ラウンド定数生成部122は、LRの出力値の上位ビットと下位ビットとを入れ替えることで、第rラウンドのラウンド定数の基礎値c(r)を算出する(c(r) = yL (r)||yH (r))。
そして、ラウンド定数生成部122は、次のラウンドのラウンド定数の基礎値c(r)の下位ビットをラウンド定数C(r)とする(C(r) = c(r)L= yH (r))。
以下に、R=96の場合におけるC(r)の一例を掲げる。
C(0) = 0x51151113; C(1) = 0x3b4f5a2f; C(2) = 0x2b0e343a;C(3) = 0x46b151a6; C(4) = 0xac38d0e9; C(5) = 0xde130ff4;C(6) = 0x1b6f7abf; C(7) = 0xbc9a76bc; C(8) = 0xc631d3e6;C(9) = 0xf269daf1; C(10) = 0xdc1106f5; C(11) = 0xa6fd1bb3;C(12) = 0x1f1e6ba2; C(13) = 0x307857d6; C(14) = 0x7c79ae88;C(15) = 0xc1e15f59; C(16) = 0x3530f34d; C(17) = 0x68df0d12;C(18) = 0x7f4ff42f; C(19) = 0x67aa7d25; C(20) = 0x9265a0cb;C(21) = 0xf1f384e2; C(22) = 0xe21aba37; C(23) = 0x03185ae5;C(24) = 0xe73098aa; C(25) = 0xa7ed528f; C(26) = 0x58142bc4;C(27) = 0x34397327; C(28) = 0xa486e67c; C(29) = 0x7b69f586;C(30) = 0x921b99f1; C(31) = 0x29719f74; C(32) = 0xe3e25ede;C(33) = 0xa5c67dd1; C(34) = 0x4b5f3214; C(35) = 0x3c95ce5f;C(36) = 0xe9aa813c; C(37) = 0x59db0067; C(38) = 0x627c4d9d;C(39) = 0x083671eb; C(40) = 0xe6ab4602; C(41) = 0x8b55feb7;C(42) = 0x5e7b5164; C(43) = 0x86dbc3c7; C(44) = 0xbd3b0cfc;C(45) = 0xb0e33606; C(46) = 0xf4ec33f0; C(47) = 0xc38cd819;C(48) = 0x176686ad; C(49) = 0x61691012; C(50) = 0xf61623af;C(51) = 0x41720925; C(52) = 0xb702fecb; C(53) = 0x6a9254e2;C(54) = 0x7787c237; C(55) = 0x6e9f1ae5; C(56) = 0xb14578ab;C(57) = 0xd5261be2; C(58) = 0x6e99dbb7; C(59) = 0x904e26e5;C(60) = 0xd53d1eaa; C(61) = 0xeab4a28f; C(62) = 0x902233c5;C(63) = 0xc588fa4a; C(64) = 0xeb04f60f; C(65) = 0xd2f5a045;C(66) = 0xc349a84b; C(67) = 0x248cf163; C(68) = 0x627cd15a;C(69) = 0x39bffc97; C(70) = 0x4d250c04; C(71) = 0x4d73cb47;C(72) = 0xf042797d; C(73) = 0x5a955d6b; C(74) = 0xae539583;C(75) = 0x050f05da; C(76) = 0x12c26f16; C(77) = 0x143c1768;C(78) = 0x4b09bc58; C(79) = 0x50f05da1; C(80) = 0xe8f0b80d;C(81) = 0x2c9b06f3; C(82) = 0xcc989042; C(83) = 0x19e022d7;C(84) = 0xf6b40864; C(85) = 0xcc0cb247; C(86) = 0x1e0668fd;C(87) = 0x5f68b96a; C(88) = 0xd3959aef; C(89) = 0xb974acc5;C(90) = 0x210c1bca; C(91) = 0x4e5e8a0e; C(92) = 0x84306f29;C(93) = 0xfdac6154; C(94) = 0xbb4d85bf; C(95) = 0x3267cc3c:
変換部123は、メッセージブロック毎におけるラウンド毎に、ラウンド鍵及び第一の平文の変換を行う。ここで、変換部で行う変換には、算術加算を含まない。
ここで、本実施形態における変換部123は、まず、ラウンド鍵の変換を行う。
ラウンド鍵の変換は、例えば、図2(鍵ステート変換関数fの概略図)に示す鍵ステート変換関数fにより行う。
図示するように鍵ステート変換fは、第rラウンドのラウンド鍵を8分割したK (r)、K (r)、K (r)、K (r)、K (r)、K (r)、K (r)、K (r)を、それぞれ、K (r+1)、K (r+1)、K (r+1)、K (r+1)、K (r+1)、K (r+1)、K (r+1)、K (r+1)に変換し、変換したこれらの値を連結することで、第r+1ラウンドのラウンド鍵を生成する関数である。
具体的には、鍵ステート変換関数fは、まず、変換部123が、鍵ステート記憶領域112に記憶されている第rラウンドのラウンド鍵を、K (r)、K (r)、K (r)、K (r)、K (r)、K (r)、K (r)、K (r)に8等分する。
次に、変換部123は、第rラウンドのラウンド鍵の内のK (r)、K (r)を、それぞれ第r+1ラウンドのラウンド鍵の内のK (r+1)、K (r+1)とする。
次に、変換部123は、ラウンド定数生成部122で生成されたラウンド定数C(r)及び第rラウンドのラウンド鍵の内のK (r)の排他的論理和と、第rラウンドのラウンド鍵の内のK (r)の値を非線形変換関数Fに入力した出力値の内の上位ビットの値bを算出する(bH = F(k4 XOR C(r), k5))。
次に、変換部123は、ラウンド定数生成部122で生成されたラウンド定数C(r)及び第rラウンドのラウンド鍵の内のK (r)の排他的論理和と、第rラウンドのラウンド鍵の内のK (r)の値を非線形変換関数Fに入力した出力値の内の下位ビットの値bを算出する(b = F(k4 XOR C(r), k5))。
次に、変換部123は、第rラウンドのラウンド鍵の内のK (r)、K (r)を、それぞれ第r+1ラウンドのラウンド鍵K (r+1)、K (r+1)とする。
次に、変換部123は、値bと、第rラウンドのラウンド鍵の内のK (r)と、の排他的論理和を算出し、算出した値を第r+1ラウンドのラウンド鍵のK (r+1)とする。
次に、変換部123は、値bと、第rラウンドのラウンド鍵の内のK (r)と、の排他的論理和を算出し、算出した値を第r+1ラウンドのラウンド鍵のK (r+1)とする。
次に、変換部123は、第rラウンドのラウンド鍵の内のK (r)、K (r)を、それぞれ第r+1ラウンドのラウンド鍵K (r+1)、K (r+1)とする。
そして、変換部123は、以上のようにして算出したK (r+1)、K (r+1)、K (r+1)、K (r+1)、K (r+1)、K (r+1)、K (r+1)、K (r+1)を連結して第r+1ラウンドのラウンド鍵として、第rラウンドのラウンド鍵と入れ替えて鍵ステート記憶領域112に記憶する。
また、本実施形態における変換部123は、第一の平文の変換を行う。
第一の平文の変換は、例えば、図3(平文ステート変換関数fの概略図)に示す平文ステート変換関数fにより行う。
図示するように平文ステート変換fは、第rラウンドの第一の平文を8分割したワードX (r)、X (r)、X (r)、X (r)、X (r)、X (r)、X (r)、X (r)を、それぞれ、X (r+1)、X (r+1)、X (r+1)、X (r+1)、X (r+1)、X (r+1)、X (r+1)、X (r+1)に変換し、変換したこれらのワードの値を連結することで、第r+1ラウンドの第一の平文を生成する関数である。
具体的には、平文ステート変換fは、まず、変換部123が、平文ステート変換関数fを用いて、第一の平文ステート記憶領域113に記憶されている第rラウンドの第一の平文を、ワードX (r)、X (r)、X (r)、X (r)、X (r)、X (r)、X (r)、X (r)に8分割する。
次に、変換部123は、第rラウンドの第一の平文のワードX (r)、X (r)を、それぞれ第r+1ラウンドの第一の平文のワードX (r+1)、X (r+1)とする。
次に、変換部123は、鍵ステート記憶領域112に記憶されているラウンド鍵K(r)及び第rラウンドの第一の平文のワードX (r)の排他的論理和と、第rラウンドの第一の平文のワードX (r)の値を非線形変換関数Fに入力した出力値の内の上位ビットの値bを算出する(bH = F(X4 XOR K(r), X5))。
次に、変換部123は、鍵ステート記憶領域112に記憶されているラウンド鍵K(r)及び第rラウンドの第一の平文のワードX (r)の排他的論理和と、第rラウンドの第一の平文のワードX (r)の値を非線形変換関数Fに入力した出力値の内の下位ビットの値bLを算出する(bL = F(X4 XOR K(r), X5)L)。
次に、変換部123は、第rラウンドの第一の平文のワードX (r)、X (r)を、それぞれ第r+1ラウンドの第一の平文のワードX (r+1)、X (r+1)とする。
次に、変換部123は、値bと、第rラウンドの第一の平文のワードX (r)と、の排他的論理和を算出し、算出した値を第r+1ラウンドの第一の平文のワードX (r+1)とする。
次に、変換部123は、値bと、第rラウンドの第一の平文のワードX (r)と、の排他的論理和を算出し、算出した値を第r+1ラウンドの第一の平文のワードX (r+1)とする。
次に、変換部123は、第rラウンドの第一の平文のワードX (r)、X (r)を、それぞれ第r+1ラウンドの第一の平文のワードX (r+1)、X (r+1)とする。
そして、変換部123は、以上のようにして算出したワードX (r+1)、X (r+1)、X (r+1)、X (r+1)、X (r+1)、X (r+1)、X (r+1)、X (r+1)を連結して第r+1ラウンドの第一の平文として、第rラウンドの第一の平文に入れ替えて第一の平文ステート記憶領域113に記憶する。
次に、図2及び図3における非線形変換関数Fについて図4を用いて説明する。
図4は、非線形変換関数Fの概略図である。
図示するように、非線形変換関数Fは、非線形変換関数NLと、線形変換関数Lと、の合成変換を行う関数である。これらの非線形変換関数NL及び線形変換関数Lは、2ブロック入力かつ2ブロック出力の変換であり、非線形変換関数Fは、これらの二つの変換関数の合成として、F=L(NL)のように定義される。
まず、非線形変換関数NLについて説明する。
ここで、非線形変換関数NLへの二つの入力ブロックをa、aとする。
非線形変換関数NLに入力されるそれぞれのブロックは4ビット毎に区切られ、4ビット毎に対応する値を特定した置換テーブルSを用いて非線形変換される(aH,i+16||aH, i ||aL, i+16||aL,i ← S[aH,i+16||aH,i||aL, i+16||aL,i ], 0≦ i < 16)。ここで,aH, i (aH, i)は aH (aL),の下位から数えてi番目のビットをそれぞれ表し,記号S[x]は置換表Sの参照を表す。
なお、例えば、置換テーブルSは、S[256]={4,14,15,1,13,9,10,0,11,2,7,12,3,6,8,5}として定義される。
また、このような置換テーブルSではなく、例えば、有限体における逆元演算とアフィン変換の合成変換を用いてもよい。
次に、線形変換関数Lについて説明する。
ここで、線形変換関数Lへの二つの入力ブロックをd、dとする。
線形変換関数Lは、巡回シフト関数と排他的論理和で構成されており、以下のように巡回シフト関数を6回適用する変換を行い、d、dの値を更新する。ここで巡回シフト関数CSH(q、x)は、ブロック幅におけるxのqビットでの左巡回シフトを表す。
まず、変換部123は、入力ブロックdの値をqビットだけ左巡回シフトしたものに、入力ブロックdの値を排他的論理和演算することで、値tを算出する(t1 = dL XOR CSH(q1, dH))。
次に、変換部123は、値tをqビットだけ左巡回シフトしたものに、入力ブロックdの値を排他的論理和演算することで、値uを算出する(u1 = dH XOR CSH(q2, t1))。
次に、変換部123は、値uをqビットだけ左巡回シフトしたものに、値tを排他的論理和演算することで、値tを算出する(t2 = t1 XOR CSH(q3, u1))。
次に、変換部123は、値tをqビットだけ左巡回シフトしたものに、値uを排他的論理和演算することで、値uを算出する(u2 = u1 XOR CSH(q4, t2))。
次に、変換部123は、値uをqビットだけ左巡回シフトしたものに、値tを排他的論理和演算することで、値tを算出する(t3 = t2 XOR CSH(q5, u2))。
次に、変換部123は、値tをqビットだけ左巡回シフトしたものに、値uを排他的論理和演算することで、値uを算出する(u3 = u2 XOR CSH (q6, t3))。
このようにして算出された値uと値tとを連結することで、変換部123は、出力値bを算出する。
ここで、左巡回シフトするq、q、q、q、q、qの値は、少なくとも一つは奇数であり、かつ、少なくとも一つは偶数であるような値の組み合わせを用いる。
そして、このような組み合わせの内、13個の値q+q、q+q、q+q、q+q+q+q、q+q、q+q、q+q+q+q、q+q、q+q+q+q、q+q+q+q、q+q+q+q+q、q+q+q+q+q、q+q+q+q+q+q、の内の任意の二つの値の差が32の倍数になるような組の個数が3より小さくなるようにすることが望ましい。
本実施形態においては、(q、q、q、q、q、q)=(1、3、4、7、8、14)を用いているが、このような態様に限定されるわけではない。
なお、以上のように、q、q、q、q、q、qの値を選択することで、従来より少ない処理量で、安全性を保証することができるようになる。即ち、少ないシフト回数で安全性を確保することができる。また、合成処理において算術加算を使用していないので、計算量が少なくてすみ、軽実装が可能となる。
以上に記載されたラウンド定数生成部122及び変換部123での処理については、図5(ブロック暗号を説明する概略図)に示すブロック暗号を用いたものである。
このブロック暗号ではデータ処理を3つの処理関数に分割しており、図5の左からラウンド定数生成関数、鍵スケジューリング関数、主攪拌関数と呼ぶ。
図からもわかるように、いずれも入力に対して単一関数を繰り返し(本実施形態では、ROUND NUM回数)作用させる処理である。3つの処理関数の処理単位関数をそれぞれラウンド定数生成関数f、ラウンド鍵生成関数f(図2、図9の鍵ステート変換に対応)、ラウンド関数f(図3、図10の平文ステート変換に対応)と呼ぶ。
ラウンド定数生成関数はラウンド定数初期値c(0)をラウンド定数生成関数fに入力することで、ラウンド定数生成関数fの処理毎に次々とラウンド定数C(r)を生成する。
このようにして生成されたラウンド定数C(r)をラウンド鍵生成関数fへの補助入力とし、ラウンド鍵の初期値をラウンド鍵生成関数fに入力することで、鍵スケジューリング関数は、ラウンド鍵生成関数fの処理毎に次々とラウンド鍵K(r)を生成する。
そして、鍵スケジューリング関数で生成された生成されたラウンド鍵K(r)をラウンド関数fへの補助入力とし、メッセージブロックをラウンド関数fに入力することで、主攪拌関数は、ラウンド関数fの処理を予め定められたラウンド繰り返し行うことで、暗号文を出力する。
ここで、本実施形態では、ラウンド鍵生成関数fとラウンド関数fとにおいて同じ関数を用いることで、実装規模の小さい装置においても論理安全性と実装安全性が保証されたハッシュ関数を生成することができるようになる。
管理部124は、メッセージブロックにおいて予め定められたラウンドの第一の平文の変更処理を終了することにより算出された第一の平文と、第nメッセージブロックの第二の平文と、の排他的論理和を算出することで、第n+1メッセージブロックの第二の平文を算出して、第nメッセージブロックの第二の平文と入れ替えて第二の平文ステート記憶領域114に記憶する。
また、管理部124は、全てのメッセージブロックについて予め定められたラウンドの第一の平文の変更処理が終了し、第二の平文を算出して第二の平文ステート記憶領域114に記憶した場合には、当該第二の平文ステート記憶領域114に記憶した第二の平文をハッシュ値として後述する入出力部130を介して出力する処理を行う。
全体制御部125は、ハッシュ値生成装置100においてハッシュ値を生成する処理の全体を制御する。
特に、本実施形態においては、鍵ステート記憶領域112、第一の平文ステート記憶領域113及び第二の平文ステート記憶領域114に記憶されている情報のリセットや、メッセージブロック数やラウンド数をカウントする処理、鍵ステート記憶領域112にラウンド鍵の初期値又は第二の平文をセットする処理を行う。
入出力部130は、データの入出力を行う。
以上に記載したハッシュ値生成装置100は、例えば、図6(コンピュータ500の概略図)に示すような、CPU501と、メモリ502と、HDD等の外部記憶装置503と、CD−ROMやDVD−ROM等の可搬性を有する記憶媒体504から情報を読み出す読取装置505と、キーボードやマウスなどの入力装置506と、ディスプレイなどの出力装置507と、通信ネットワークに接続するためのNIC(Network Interface Card)等の通信装置508と、を備えた一般的なコンピュータ500で実現できる。
例えば、記憶部110は、CPU501がメモリ502又は外部記憶装置503を利用することにより実現可能であり、制御部120は、外部記憶装置503に記憶されている所定のプログラムをメモリ502にロードしてCPU501で実行することで実現可能であり、入出力部130は、CPU201が出力装置507及び入力装置506を利用することで実現可能である。
この所定のプログラムは、読取装置505を介して記憶媒体504から、あるいは、通信装置508を介してネットワークから、外部記憶装置503にダウンロードされ、それから、メモリ502上にロードされてCPU501により実行されるようにしてもよい。また、読取装置505を介して記憶媒体504から、あるいは、通信装置508を介してネットワークから、メモリ502上に直接ロードされ、CPU501により実行されるようにしてもよい。
以上のように構成されるハッシュ値生成装置100におけるハッシュ値の生成処理を図7に示すフローチャートを用いて説明する。
まず、ハッシュ値生成装置100は、入出力部130を介してハッシュ値を生成する元となるメッセージを取得する(S10)。
次に、メッセージブロック化部121は、入出力部130を介して取得したメッセージを予め定められたデータ長に分割することによりN個のメッセージブロックを生成する(S11)。ここで、本実施形態においては、メッセージを256ビットのデータ長のメッセージブロックに分割するようにしている。
次に、全体制御部125は、鍵ステート記憶領域112、第一の平文ステート記憶領域113及び第二の平文ステート記憶領域114に記憶されている情報のリセットを行う(S12)。具体的には、全てのビット値を「0」にする。
次に、全体制御部125は、メッセージブロックのカウンタであるメッセージカウンタnの値を初期化する(S13)。ここでは、メッセージカウンタnの値に「1」を代入する。
次に、全体制御部125は、メッセージカウンタnの値がメッセージを分割した分割数Nに対して、n=N+1となっているか否かを判断する(S14)。
ステップS14で、n=N+1となっている場合には、ステップS15に進み、第二の平文ステート記憶領域114に記憶されている第二の平文をハッシュ値として入出力部130を介して出力して(S15)、処理を終了する。
ステップS14で、n=N+1となっていない場合には、ステップS16に進む。
ステップS16では、全体制御部125は、鍵ステート記憶領域112、第一の平文ステート記憶領域113及び第二の平文ステート記憶領域114に所定のデータを格納(セット)し、ラウンドのカウンタであるラウンドカウンタrに初期値を代入する。
ここで、全体制御部125は、n=1の場合には、初期値記憶領域111に記憶されているラウンド鍵の初期値を鍵ステート記憶領域112に格納し、メッセージカウンタnに対応するメッセージブロックMnを第一の平文ステート記憶領域113及び第二の平文ステート記憶領域114に格納して、ラウンドカウンタrに「1」を代入する。
一方、全体制御部125は、n>1の場合には、第二の平文ステート記憶領域114に記憶されている第二の平文を鍵ステート記憶領域112に格納し、メッセージカウンタnに対応するメッセージブロックMnを第一の平文ステート記憶領域113及び第二の平文ステート記憶領域114に格納して、ラウンドカウンタrに「1」を代入する。
次に、全体制御部125は、ラウンドカウンタrの値が、予め定められたラウンド数(ROUND NUM)に対して、r=(ROUND NUM)+1の関係にあるか否かを判断する(S17)。ステップS17において、r=(ROUND NUM)+1の関係にある場合には、ステップS20に進み、r=(ROUND NUM)+1の関係にない場合には、ステップS18に進む。
ステップS18では、ラウンド定数生成部122及び変換部123において鍵ステート記憶領域112に記憶されているラウンド鍵及び第一の平文ステート記憶領域113に記憶されている第一の平文を更新する。
具体的には、ラウンド定数生成部122においてラウンドカウンタrに対応するカウンタにおけるラウンド定数C(r)を算出する。
そして、変換部123は、ラウンド定数生成部122において算出したラウンド定数C(r)を補助入力として、鍵ステート記憶領域112に記憶されているラウンドカウンタr−1に対応するラウンドにおけるラウンド鍵K(r−1)から、ラウンドカウンタrに対応するラウンドにおけるラウンド鍵K(r)を算出する。ここで、変換部123は、このようにして算出したラウンド鍵K(r)を、ラウンド鍵K(r−1)に代えて鍵ステート記憶領域112に記憶する。
そして、変換部123は、ラウンド定数生成部122において算出したラウンド鍵K(r)を補助入力として、第一の平文ステート記憶領域113に記憶されているラウンドカウンタr−1に対応するラウンドにおける第一の平文X(r−1)からラウンドカウンタrに対応するラウンドにおける第一の平文X(r)を算出する。ここで、変換部123は、このようにして算出した第一の平文X(r)を、第一の平文X(r−1)に代えて第一の平文ステート記憶領域113に記憶する。
次に、全体制御部125は、ラウンドカウンタrの値に「1」をインクリメントして、ステップS17に戻って処理を繰り返す。
また、ステップS20では、管理部124は、第二の平文ステート記憶領域114に記憶されている第二の平文と、第一の平文ステート記憶領域113に記憶されている第一の平文と、の排他的論理和を算出することにより次の第二の平文を算出し、第二の平文ステート記憶領域114に既に記憶されている第二の平文に代えて、算出した次の第二の平文を記憶する。
そして、全体制御部125は、メッセージカウンタnの値に「1」をインクリメントして(S21)、ステップS14に戻って処理を繰り返す。
以上のように、本実施形態においては、256ビットにおけるブロック暗号を用いているため、理論的安全性と実装安全性が保証されたハッシュ関数を提供することができるとともに、変換部でラウンド鍵と第一の平文を変換する関数として同じ関数を用いているため、実装規模を小さくすることが可能となる。
図8は、本発明の第二の実施形態であるハッシュ値生成装置200の概略図である。
第一の実施形態においては、ハッシュ値生成装置100で生成するハッシュ値は256ビットであったが、本実施形態においては、160ビットのハッシュ値を生成するようにしている。
図示するように、ハッシュ値生成装置200は、記憶部210と、制御部220と、入出力部130と、を備える。
記憶部210は、初期値記憶領域211と、鍵ステート記憶領域212と、第一の平文ステート記憶領域213と、第二の平文ステート記憶領域214と、を備える。
初期値記憶領域211には、第一の実施形態と同様に、ハッシュ値を生成する際の初期値として、ラウンド定数の初期値と、ラウンド鍵の初期値と、が記憶される。
ここで、ラウンド定数の初期値は、例えば、c(0)=0xcae1ac3f55054a96といった定数が記憶される。
また、ラウンド鍵の初期値は、例えば、K (0)=0xbc18bf6d、K (0)=0x369c955b、K (0)=0xbb271cbc、K (0)=0xdd66c368、K (0)=0x356dba5bといった定数が記憶される。
なお、ラウンド定数及びラウンド鍵の初期値に使用される定数はこれらに限定されるわけではなく、例えば、疑似乱数生成器等で生成された乱数を使用することも可能である。
鍵ステート記憶領域212には、第一の実施形態と同様に、各メッセージブロックにおける各ラウンドでのラウンド鍵を特定する情報が格納されるが、本実施形態においては、第一の実施形態と異なり、160ビットのラウンド鍵が鍵ステート記憶領域212に記憶される。
第一の平文ステート記憶領域213には、第一の実施形態と同様に、ラウンド毎に算出される第一の平文を特定する情報が格納されるが、本実施形態においては、160ビットの第一の平文が記憶される。
第二の平文ステート記憶領域114には、第一の実施形態と同様に、メッセージブロック毎に算出される第二の平文を特定する情報が格納されるが、本実施形態においては、160ビットの第二の平文が記憶される。
制御部220は、メッセージブロック化部221と、ラウンド定数生成部222と、変換部223と、管理部224と、全体制御部225と、を備える。
メッセージブロック化部221は、入出力部130を介して入力されたメッセージを予め定められたデータ長のブロックに分割する処理を行う。
ここで、本実施形態においては、メッセージブロック化部221は、後述する入出力部130を介して入力されたメッセージを、160ビットのメッセージブロックに分割する。
但し、メッセージ長がメッセージブロック(160ビット)の倍数ではない場合は、Merkle-Damgaard方式等のパディング方式を用いてメッセージブロックの倍数になるようにパディングを行う。
ラウンド定数生成部222は、第一の実施形態と同様に、各ラウンドにおけるラウンド定数を算出する。
変換部223は、メッセージブロック毎におけるラウンド毎に、ラウンド鍵及び第一の平文の変換を行う。ここで、変換部223で行う変換には、算術加算を行わない。
ここで、本実施形態における変換部223は、まず、ラウンド鍵の変換を行う。
ラウンド鍵の変換は、例えば、図9(鍵ステート変換関数fの概略図)に示す鍵ステート変換関数fにより行う。
図示するように鍵ステート変換fは、第rラウンドのラウンド鍵を5分割したK (r)、K (r)、K (r)、K (r)、K (r)を、それぞれ、K (r+1)、K (r+1)、K (r+1)、K (r+1)、K (r+1)に変換し、変換したこれらの値を連結することで、第r+1ラウンドのラウンド鍵を生成する関数である。
具体的に、鍵ステート変換fでは、まず、変換部223が、鍵ステート記憶領域212に記憶されている第rラウンドのラウンド鍵を、K (r)、K (r)、K (r)、K (r)、K (r)に5等分する。
次に、変換部223は、ラウンド定数生成部222で生成されたラウンド定数C(r)及び第rラウンドのラウンド鍵の内のK (r)の排他的論理和を非線形変換関数Fに入力した出力値bを算出する(b = F(k XOR C(r)))。
次に、変換部223は、出力値bと、第rラウンドのラウンド鍵の内のK (r)と、の排他的論理和を算出して、算出した値を第r+1ラウンドのラウンド鍵の内のK (r+1)とする。
次に、変換部223は、第rラウンドのラウンド鍵の内のK (r)、K (r)、K (r)、K (r)を、それぞれ、第r+1ラウンドのラウンド鍵のK (r+1)、K (r+1)、K (r+1)、K (r+1)とする。
そして、変換部223は、以上のようにして算出したK (r+1)、K (r+1)、K (r+1)、K (r+1)、K (r+1)を連結して第r+1ラウンドのラウンド鍵として、第rラウンドのラウンド鍵と入れ替えて鍵ステート記憶領域212に記憶する。
また、本実施形態における変換部223は、第一の平文の変換を行う。
第一の平文の変換は、例えば、図10(平文ステート変換関数fの概略図)に示す平文ステート変換関数fにより行う。
図示するように平文ステート変換fは、第rラウンドの第一の平文を5分割したワードX (r)、X (r)、X (r)、X (r)、X (r)を、それぞれ、X (r+1)、X (r+1)、X (r+1)、X (r+1)、X (r+1)に変換し、変換したこれらのワードの値を連結することで、第r+1ラウンドの第一の平文を生成する関数である。
平文ステート変換関数fは、まず、変換部223が、第一の平文ステート記憶領域213に記憶されている第rラウンドの第一の平文を、ワードX (r)、X (r)、X (r)、X (r)、X (r)に5分割する。
次に、変換部223は、鍵ステート記憶領域212に記憶されているラウンド鍵K(r)と、ワードX (r)と、の排他的論理和を非線形変換関数Fに入力した出力値bを算出する(b = F(X XOR K(r)))。
次に、変換部223は、出力値bと、ワードX (r)と、の排他的論理和を算出して、算出した値をワードX (r+1)とする。
次に、変換部223は、ワードX (r)、X (r)、X (r)、X (r)を、それぞれ、ワードX (r+1)、X (r+1)、X (r+1)、X (r+1)とする。
そして、変換部223は、以上のようにして算出したX (r+1)、X (r+1)、X (r+1)、X (r+1)、X (r+1)を連結して第r+1ラウンドの第一の平文として、第rラウンドの第一の平文と入れ替えて第一の平文ステート記憶領域213に記憶する。
次に、図9及び図10における非線形変換関数Fについて図11を用いて説明する。
図11は、非線形変換関数Fの概略図である。
図示するように、非線形変換関数Fは、非線形変換関数NLと、線形変換関数Lと、の合成変換を行う関数である。
本実施形態におけるこれらの非線形変換関数NL及び線形変換関数Lは、1ブロック入力かつ1ブロック出力の変換であり、非線形変換関数Fは、これらの二つの変換関数の合成として、F=L(NL)のように定義される。
まず、非線形変換関数NLについて説明する。
ここで、非線形変換関数NLへの入力ブロックをaとする。
非線形変換関数NLに入力されるブロックは4ビット毎に区切られ、4ビット毎に対応する値を特定した置換テーブルSを用いて非線形変換される(di+24||di+16||di+8||di ← S[ai+24||ai+16||ai+8||ai], 0≦ i < 8)。ここで,aiはaの下位から数えてi番目のビットをそれぞれ表し,記号S[x]は置換表Sの参照を表す。
なお、例えば、置換テーブルSは、S[256]={4,14,15,1,13,9,10,0,11,2,7,12,3,6,8,5}として定義される。
また、このような置換テーブルSではなく、例えば、有限体における逆元演算とアフィン変換の合成変換を用いてもよい。
次に、線形変換関数Lについて説明する。
ここで、線形変換関数Lでは、入力ブロックdを、上位ビットのブロックd、下位ビットのブロックdに分割して、下記のように処理する。
線形変換関数Lは、巡回シフト関数と排他的論理和で構成されており、以下のような変換を行い、d、dの値を更新する。ここで巡回シフト関数CSH(q、x)はブロック幅におけるxのqビットでの左巡回シフトを表す。
まず、変換部223は、入力ブロックdの値をqビットだけ左巡回シフトしたものに、入力ブロックdの値を排他的論理和演算することで、値tを算出する(t1 = dL XOR CSH(q1, dH))。
次に、変換部223は、値tをqビットだけ左巡回シフトしたものに、入力ブロックdの値を排他的論理和演算することで、値uを算出する(u1 = dH XOR CSH(q2, t1))。
次に、変換部223は、値uをqビットだけ左巡回シフトしたものに、値tを排他的論理和演算することで、値tを算出する(t2 = t1 XOR CSH(q3, u1))。
次に、変換部123は、値tをqビットだけ左巡回シフトしたものに、値uを排他的論理和演算することで、値uを算出する(u2 = u1 XOR CSH(q4, t2))。
このようにして算出された値uと値tとを連結することで、変換部223は、出力値b(=u2||t2)を算出する。
ここで、左巡回シフトするq、q、q、qの値は、少なくとも一つは奇数であり、かつ、少なくとも一つは偶数であるような値の組み合わせを用いる。
本実施形態においては、(q、q、q、q)=(1、3、4、7)を用いているが、このような態様に限定されるわけではない。
以上に記載されたラウンド定数生成部222及び変換部223での処理については、第一の実施形態と同様に、図5に示すブロック暗号を用いたものである。
ここで、本実施形態では、ラウンド鍵生成関数fとラウンド関数fとにおいて同じ関数を用いることで、実装規模の小さい装置においても論理安全性と実装安全性が保証されたハッシュ関数を生成することができるようになる。
管理部224は、予め定められた全てのラウンドにおける第一の平文の変更処理を終了することにより算出された第一の平文と、第nメッセージブロックの第二の平文と、の排他的論理和を算出することで、第n+1メッセージブロックの第二の平文を算出して、第nメッセージブロックの第二の平文と入れ替えて第二の平文ステート記憶領域214に記憶する。
また、管理部224は、全てのメッセージブロックについて予め定められた全てのラウンドの第一の平文の変更処理が終了し、第二の平文を算出して第二の平文ステート記憶領域214に記憶した場合には、当該第二の平文ステート記憶領域214に記憶した第二の平文をハッシュ値として後述する入出力部130を介して出力する処理を行う。
全体制御部225は、ハッシュ値生成装置200においてハッシュ値を生成する処理の全体を制御する。
特に、本実施形態においては、鍵ステート記憶領域212、第一の平文ステート記憶領域213及び第二の平文ステート記憶領域214に記憶されている情報のリセットや、メッセージブロック数やラウンド数をカウントする処理を行う。
入出力部130は、データの入出力を行う。
以上に記載したハッシュ値生成装置100は、例えば、図6に示すようなコンピュータ500で実現可能である。
以上のように構成されるハッシュ値生成装置200におけるハッシュ値の生成処理については、図7に示すフローチャートと同様であるため説明を省略する。
以上のように、本実施形態においては、160ビットにおけるブロック暗号を用いているため、理論的安全性と実装安全性が保証されたハッシュ関数を提供することができるとともに、変換部でラウンド鍵と第一の平文を変換する関数として同じ関数を用いているため、実装規模を小さくすることが可能となる。
図12は、本発明の第三の実施形態であるメッセージ識別子生成装置300の概略図である。
高速かつ軽量な暗号技術は、ユビキタス社会において、サーバでは高速な処理が要求されるが、クライアントでは実装資源が限られているようなアプリケーションへの応用が期待される。以下では、第一の実施形態を利用したデータの認証および配信システムについて説明する。本実施形態においては、認証技術として、ハッシュ関数に基づいたMAC生成方法であるHMAC構成法を用いる。
図示するように、メッセージ識別子生成装置300は、記憶部110と、制御部320と、入出力部130と、通信部340と、を備え、記憶部110及び入出力部130については第一の実施形態と同様であるため、説明を省略する。
本実施形態における制御部320は、メッセージブロック化部121と、ラウンド定数生成部122と、変換部123と、管理部124と、全体制御部125と、メッセージ識別子生成部326と、を備え、第一の実施形態と比較してメッセージ識別子生成部326が追加されているため、以下、この点に関連する事項について説明する。
メッセージ識別子生成部326は、メッセージブロック化部121、ラウンド定数生成部122、変換部123、管理部124及び全体制御部125で生成するハッシュ値を用いて、メッセージ識別子を生成する。
具体的には、メッセージ識別子生成部326は、図13(メッセージ識別子を生成する手順を示す概略図)に示されているように、入出力部130を介して入力されたデータMと、予め定められた鍵情報Kを連結して、メッセージK1||Mを生成する。
次に、メッセージ識別子生成部326は、メッセージブロック化部121、ラウンド定数生成部122、変換部123、管理部124及び全体制御部125を用いて、メッセージK1||Mのハッシュ値である第一のハッシュ値h(K1||M)を生成する。
次に、メッセージ識別子生成部326は、第一のハッシュ値h(K1||M)と、鍵情報K2と、を連結し、メッセージK2|| (K1||M)を生成する。
そして、メッセージ識別子生成部326は、メッセージブロック化部121、ラウンド定数生成部122、変換部123、管理部124及び全体制御部125を用いて、メッセージK2|| (K1||M)のハッシュ値である第二のハッシュ値h(K2||h(K1||M))を生成する。
そして、メッセージ識別子生成部326は、この第二のハッシュ値をデータMのメッセージ認証子として、入出力部130又は通信部340を介して、出力する。
メッセージ識別子生成装置300は、例えば、図6に示すような、CPU501と、メモリ502と、HDD等の外部記憶装置503と、CD−ROMやDVD−ROM等の可搬性を有する記憶媒体504から情報を読み出す読取装置505と、キーボードやマウスなどの入力装置506と、ディスプレイなどの出力装置507と、通信ネットワークに接続するためのNIC等の通信装置508と、を備えた一般的なコンピュータ500で実現できる。
例えば、記憶部110は、CPU501がメモリ502又は外部記憶装置503を利用することにより実現可能であり、制御部320は、外部記憶装置503に記憶されている所定のプログラムをメモリ502にロードしてCPU501で実行することで実現可能であり、入出力部130は、CPU201が出力装置507及び入力装置506を利用することで実現可能であり、通信部340は、CPU201が通信装置508を利用することで実現可能である。
この所定のプログラムは、読取装置505を介して記憶媒体504から、あるいは、通信装置508を介してネットワークから、外部記憶装置503にダウンロードされ、それから、メモリ502上にロードされてCPU501により実行されるようにしてもよい。また、読取装置505を介して記憶媒体504から、あるいは、通信装置508を介してネットワークから、メモリ502上に直接ロードされ、CPU501により実行されるようにしてもよい。
以上のように構成されるメッセージ識別子生成装置300は、例えば、図14(配信システム400の概略図)に示すように、第一のメッセージ識別子生成装置300Aと、第二のメッセージ識別子生成装置Bと、をネットワーク160を介して接続することにより利用することが可能である。
このような配信システムでは、以下のようにしてデータの送受信を行う。
なお、第一のメッセージ識別子生成装置300A及び第二のメッセージ識別子生成装置Bは、事前に鍵情報K1とK2を秘密状態で共有しているものとする。
まず、第一のメッセー識別子生成装置300Aは、データMを上述のようにして鍵情報K1とK2を用いてメッセージ認証子生成部326において256ビットの第一のメッセージ認証子Vを生成する。
そして、第一のメッセージ識別子生成装置300Aは、通信部340を介して、第一のメッセージ識別子VとデータMとを連結した結果L=M||Vをネットワーク160を通じて第二のメッセージ識別子生成装置300Bに送信する。
第二のメッセージ識別子生成装置300Bは、通信部340を介して、受信したデータL'=M'||V'から、256ビットの第二のメッセージ識別子V'を切り出すことで、第二のデータM'を取得する。
そして、第二のメッセージ識別子生成装置300Bは、第二のデータM'、鍵情報K1及びK2から、上述のように、メッセージ認証子生成部326において第三のメッセージ識別子V''を生成する。
そして、第二のメッセージ識別子生成装置300Bの全体制御部125は、第三のメッセージ識別子V''が、第二のメッセージ識別子V'と等しくない場合には、第二のデータM'に改ざんがあったもの判断する。
一方、これらのメッセージ識別子が等しい場合には、第二のメッセージ識別子生成装置300Bは、受信した第二のデータM'を認証済みのデータとみなす。
以上のように、本実施形態におけるメッセージ識別子生成装置300は、送受信するデータを認証するシステムに利用することが可能となる。
また、第三の実施形態においては、第一の実施形態で説明したハッシュ値によりメッセージ識別子を生成したが、このような態様に限定されず、第二の実施形態で説明したハッシュ値によりメッセージ識別子を生成することも可能である。
また、以上に記載した実施形態においては、鍵ステート変換fと、平文ステート変換fと、を同じ関数で構成したが、実装規模の大きな装置においては、これらの関数を別々の関数にすることも可能である。このような場合には、本実施形態に記載した鍵ステート変換f又は平文ステート変換fの少なくともいずれか一方に、任意のシフト変換や任意の線形又は非線型関数を追加することにより、より安全性の高いハッシュ値を生成することができる。
さらに、以上に記載した実施形態においては、ハッシュ値生成装置100、200を図6で示すようなコンピュータで実現可能としたが、このような態様に限定されず、例えば、CPUと、発揮性又は不発揮性メモリと、通信装置と、を備える携帯電話端末、非接触型ICカード、商品タグ等の実装規模の小さなデバイスにおいても実現可能である。
即ち、記憶部110、210は、メモリにより実現可能で、制御部120、220は、CPUにより実現可能で、入出力部130は、通信装置を介して外部のデバイスからデータの入出力を受ければよい。
また、上述したハッシュ値生成装置100、200は、コンピュータがプログラムを実行することにより実現されるものでなくてもよい。例えば、ASIC(Application Specific Integrated Circuit)やFPGA(Field Programmable Gate Array)等の集積ロジックICによりハード的に実行されるものであってもよいし、あるいは、DSP(Digital Signal Processor)等の計算機によりソフトウェア的に実行されるものであってもよい。
第一の実施形態であるハッシュ値生成装置の概略図。 鍵ステート変換関数fの概略図。 平文ステート変換関数fの概略図。 非線形変換関数Fの概略図。 ブロック暗号を説明する概略図。 コンピュータの概略図。 ハッシュ値生成装置におけるハッシュ値の生成処理を示すフローチャート。 第二の実施形態であるハッシュ値生成装置の概略図。 鍵ステート変換関数fの概略図。 平文ステート変換関数fの概略図。 非線形変換関数Fの概略図。 第三の実施形態であるメッセージ識別子生成装置の概略図。 メッセージ識別子を生成する手順を示す概略図。 配信システムの概略図。
符号の説明
100、200 ハッシュ値生成装置
300 メッセージ識別子生成装置
110、210 記憶部
111、211 初期値記憶領域
112、212 鍵ステート記憶領域
113、213 第一の平文ステート記憶領域
114、214 第二の平文ステート記憶領域
120、220 制御部
121、221 メッセージブロック化部
122、222 ラウンド定数生成部
123、223 変換部
124、224 管理部
125、225 全体制御部
326 メッセージ識別子生成部
130 入出力部
340 通信部

Claims (17)

  1. 入力されたメッセージを予め定められたデータ長のN(Nは自然数)個のメッセージブロックに分割し、該メッセージブロックに対して予め定められたR(Rは2以上の自然数)ラウンドの変換処理を繰り返し行い、第n(nは自然数)メッセージブロックでのRラウンドの変換処理で算出された値を、第n+1メッセージブロックでの鍵情報として用いるブロック暗号化をN回繰り返すことで、前記メッセージのハッシュ値を生成する制御部を備えるハッシュ値生成装置であって、
    前記制御部が行う前記変換処理には、シフト変換が含まれており、
    前記シフト変換は、入力された二つのデータの内、一方のデータに予め定めたビットの巡回シフトを行い、他方のデータに合成する処理、を予め定められた回数行うものであり、
    前記予め定められた回数の巡回シフトの内、少なくとも一つのシフトでは、奇数ビットのシフトを行うものであり、前記予め定められた回数の巡回シフトの内、少なくとも一つのシフトでは、偶数ビットのシフトを行うものであること、
    を特徴とするハッシュ値生成装置。
  2. 請求項1に記載のハッシュ値生成装置であって、
    前記予め定められた回数は、6回であり、
    前記6回のシフト変換でシフトするビット数は、順番にq、q、q、q、q、qであり、
    +q、q+q、q+q、q+q+q+q、q+q、q+q、q+q+q+q、q+q、q+q+q+q、q+q+q+q、q+q+q+q+q、q+q+q+q+q、q+q+q+q+q+q、の13個の値の内の任意の二つの値の差が32の倍数になるような組の個数が3より小さくなるようにしたこと、
    を特徴とするハッシュ値生成装置。
  3. 請求項1に記載のハッシュ値生成装置であって、
    前記制御部が行う前記変換処理では、合成変換が行われており、
    前記合成変換は、排他的論理和を算出するものであること、
    を特徴とするハッシュ値生成装置。
  4. 請求項3に記載のハッシュ値生成装置であって、
    前記合成変換には、算術加算は含まれていないこと、
    を特徴とするハッシュ値生成装置。
  5. 請求項1に記載のハッシュ値生成装置であって、
    ラウンド定数の初期値及びラウンド鍵の初期値を記憶する記憶部を備えており、
    前記制御部は、前記変換処理として、
    前記記憶部に記憶されている前記ラウンド定数の初期値からラウンド毎のラウンド定数を予め定められた関数で算出する処理と、
    ラウンドに対応する前記ラウンド定数と、前記記憶部に記憶されている前記ラウンド鍵の初期値から前回のラウンドで算出されたラウンド鍵と、予め定められた鍵変換関数に入力することによりラウンド毎のラウンド鍵を算出する処理と、
    ラウンドに対応する前記ラウンド鍵と、前記メッセージブロックから前回のラウンドで算出された第一平文と、を予め定められた平文変換関数に入力することによりラウンド毎の第一平文を算出する処理と、
    を行うものであること、
    を特徴とするハッシュ値生成装置。
  6. 請求項5に記載のハッシュ値生成装置であって、
    前記鍵変換関数と、前記平文変換関数と、は同じ関数が用いられること、
    を特徴とするハッシュ値生成装置。
  7. 請求項6に記載のハッシュ値生成装置であって、
    前記鍵変換関数と、前記平文変換関数と、は、
    入力されたデータをY (r)、Y (r)、Y (r)、Y (r)、Y (r)、Y (r)、Y (r)、Y (r)に分割し、
    (r)、Y (r)、Y (r)、Y (r)、Y (r)、Y (r)の値を、それぞれ、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)に変換し、
    (r)と、予め定められた定数と、の排他的論理和を算出したものと、Y (r)と、を予め定められた非線形関数に入力して算出された算出値の上位ビットと、Y (r)と、の排他的論理和を算出したものをY (r+1)に変換し、
    前記算出値の下位ビットと、Y (r)と、の排他的論理和を算出したものをY (r+1)に変換し、
    変換したY (r+1)、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)の値を連結したデータを出力データとするものであること、
    を特徴とするハッシュ値生成装置。
  8. 請求項6に記載のハッシュ値生成装置であって、
    前記鍵変換関数と、前記平文変換関数と、は、
    入力されたデータをY (r)、Y (r)、Y (r)、Y (r)、Y (r)に分割し、
    (r)、Y (r)、Y (r)、Y (r)の値を、それぞれ、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)に変換し、
    (r)と、予め定められた定数と、の排他的論理和を算出したものを予め定められた非線形関数に入力して算出された算出値と、Y (r)と、の排他的論理和を算出したものをY (r+1)に変換し、
    前記算出値の下位ビットと、Y (r)と、の排他的論理和を算出したものをY (r+1)に変換し、
    変換したY (r+1)、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)の値を連結したデータを出力データとするものであること、
    を特徴とするハッシュ値生成装置。
  9. コンピュータを、
    入力されたメッセージを予め定められたデータ長のN(Nは自然数)個のメッセージブロックに分割し、該メッセージブロックに対して予め定められたR(Rは2以上の自然数)ラウンドの変換処理を繰り返し行い、第n(nは自然数)メッセージブロックでのRラウンドの変換処理で算出された値を、第n+1メッセージブロックでの鍵情報として用いるブロック暗号化をN回繰り返すことで、前記メッセージのハッシュ値を生成する制御手段、として機能させるプログラムであって、
    前記制御手段が行う前記変換処理には、シフト変換が含まれており、
    前記シフト変換は、入力された二つのデータの内、一方のデータに予め定めたビットの巡回シフトを行い、他方のデータに合成する処理、を予め定められた回数行うものであり、
    前記予め定められた回数の巡回シフトの内、少なくとも一つのシフトでは、奇数ビットのシフトを行うものであり、前記予め定められた回数の巡回シフトの内、少なくとも一つのシフトでは、偶数ビットのシフトを行うものであること、
    を特徴とするプログラム。
  10. 請求項9に記載のプログラムであって、
    前記予め定められた回数は、6回であり、
    前記6回のシフト変換でシフトするビット数は、順番にq、q、q、q、q、qであり、
    +q、q+q、q+q、q+q+q+q、q+q、q+q、q+q+q+q、q+q、q+q+q+q、q+q+q+q、q+q+q+q+q、q+q+q+q+q、q+q+q+q+q+q、の13個の値の内の任意の二つの値の差が32の倍数になるような組の個数が3より小さくなるようにしたこと、
    を特徴とするプログラム。
  11. 請求項9に記載のプログラムであって、
    前記制御手段が行う前記変換処理では、合成変換が行われており、
    前記合成変換は、排他的論理和を算出するものであること、
    を特徴とするプログラム。
  12. 請求項11に記載のプログラムであって、
    前記合成変換には、算術加算は含まれていないこと、
    を特徴とするプログラム。
  13. 請求項9に記載のプログラムであって、
    前記コンピュータをラウンド定数の初期値及びラウンド鍵の初期値を記憶する記憶手段としても機能させ、
    前記制御手段は、前記変換処理として、
    前記記憶手段に記憶されている前記ラウンド定数の初期値からラウンド毎のラウンド定数を予め定められた関数で算出する処理と、
    ラウンドに対応する前記ラウンド定数と、前記記憶手段に記憶されている前記ラウンド鍵の初期値から前回のラウンドで算出されたラウンド鍵と、予め定められた鍵変換関数に入力することによりラウンド毎のラウンド鍵を算出する処理と、
    ラウンドに対応する前記ラウンド鍵と、前記メッセージブロックから前回のラウンドで算出された第一平文と、を予め定められた平文変換関数に入力することによりラウンド毎の第一平文を算出する処理と、
    を行うものであること、
    を特徴とするプログラム。
  14. 請求項13に記載のプログラムであって、
    前記鍵変換関数と、前記平文変換関数と、は同じ関数が用いられること、
    を特徴とするプログラム。
  15. 請求項14に記載のプログラムであって、
    前記鍵変換関数と、前記平文変換関数と、は、
    入力されたデータをY (r)、Y (r)、Y (r)、Y (r)、Y (r)、Y (r)、Y (r)、Y (r)に分割し、
    (r)、Y (r)、Y (r)、Y (r)、Y (r)、Y (r)の値を、それぞれ、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)に変換し、
    (r)と、予め定められた定数と、の排他的論理和を算出したものと、Y (r)と、を予め定められた非線形関数に入力して算出された算出値の上位ビットと、Y (r)と、の排他的論理和を算出したものをY (r+1)に変換し、
    前記算出値の下位ビットと、Y (r)と、の排他的論理和を算出したものをY (r+1)に変換し、
    変換したY (r+1)、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)の値を連結したデータを出力データとするものであること、
    を特徴とするプログラム。
  16. 請求項14に記載のプログラムであって、
    前記鍵変換関数と、前記平文変換関数と、は、
    入力されたデータをY (r)、Y (r)、Y (r)、Y (r)、Y (r)に分割し、
    (r)、Y (r)、Y (r)、Y (r)の値を、それぞれ、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)に変換し、
    (r)と、予め定められた定数と、の排他的論理和を算出したものを予め定められた非線形関数に入力して算出された算出値と、Y (r)と、の排他的論理和を算出したものをY (r+1)に変換し、
    前記算出値の下位ビットと、Y (r)と、の排他的論理和を算出したものをY (r+1)に変換し、
    変換したY (r+1)、Y (r+1)、Y (r+1)、Y (r+1)、Y (r+1)の値を連結したデータを出力データとするものであること、
    を特徴とするプログラム。
  17. 入力されたメッセージを予め定められたデータ長のN(Nは自然数)個のメッセージブロックに分割し、該メッセージブロックに対して予め定められたR(Rは2以上の自然数)ラウンドの変換処理を繰り返し行い、第n(nは自然数)メッセージブロックでのRラウンドの変換処理で算出された値を、第n+1メッセージブロックでの鍵情報として用いるブロック暗号化をN回繰り返すことで、前記メッセージのハッシュ値を生成する制御部を備えるハッシュ値生成装置が行うハッシュ値生成方法であって、
    前記制御部が行う前記変換処理には、シフト変換を行う過程が含まれており、
    前記シフト変換を行う過程は、入力された二つのデータの内、一方のデータに予め定めたビットの巡回シフトを行い、他方のデータに合成する処理、を予め定められた回数行うものであり、
    前記予め定められた回数の巡回シフトの内、少なくとも一つのシフトでは、奇数ビットのシフトを行うものであり、前記予め定められた回数の巡回シフトの内、少なくとも一つのシフトでは、偶数ビットのシフトを行うものであること、
    を特徴とするハッシュ値生成方法。
JP2007104636A 2006-04-27 2007-04-12 ハッシュ値生成装置、プログラム及びハッシュ値生成方法 Expired - Fee Related JP5000365B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2007104636A JP5000365B2 (ja) 2006-04-27 2007-04-12 ハッシュ値生成装置、プログラム及びハッシュ値生成方法
US11/740,953 US20080063187A1 (en) 2006-04-27 2007-04-27 Hash value generation device, program, and hash value generation method

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2006122868 2006-04-27
JP2006122868 2006-04-27
JP2007104636A JP5000365B2 (ja) 2006-04-27 2007-04-12 ハッシュ値生成装置、プログラム及びハッシュ値生成方法

Publications (2)

Publication Number Publication Date
JP2007316614A true JP2007316614A (ja) 2007-12-06
JP5000365B2 JP5000365B2 (ja) 2012-08-15

Family

ID=38850473

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007104636A Expired - Fee Related JP5000365B2 (ja) 2006-04-27 2007-04-12 ハッシュ値生成装置、プログラム及びハッシュ値生成方法

Country Status (2)

Country Link
US (1) US20080063187A1 (ja)
JP (1) JP5000365B2 (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010044251A (ja) * 2008-08-13 2010-02-25 Hitachi Ltd ハッシュ値生成装置、プログラム及びハッシュ値生成方法
WO2010024248A1 (ja) * 2008-08-25 2010-03-04 ソニー株式会社 データ変換装置、およびデータ変換方法、並びにプログラム
WO2010024247A1 (ja) * 2008-08-25 2010-03-04 ソニー株式会社 データ変換装置、およびデータ変換方法、並びにプログラム
JP2010049037A (ja) * 2008-08-22 2010-03-04 Hitachi Ltd ハッシュ値生成装置
JP2015025930A (ja) * 2013-07-26 2015-02-05 日本電信電話株式会社 圧縮関数演算装置、圧縮関数演算方法及びプログラム
JP2016525836A (ja) * 2013-07-19 2016-08-25 クアルコム,インコーポレイテッド ブロック暗号アルゴリズムで使用するための鍵更新のための装置および方法

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8175266B2 (en) * 2008-05-07 2012-05-08 Apple Inc. System and method of performing authentication
US8244909B1 (en) * 2009-06-18 2012-08-14 Google Inc. Method, apparatus and networking equipment for performing flow hashing using quasi cryptographic hash functions
US20150244685A1 (en) * 2012-09-18 2015-08-27 Interdigital Patent Holdings Generalized cryptographic framework
US10795873B1 (en) * 2016-11-22 2020-10-06 Innovium, Inc. Hash output manipulation
WO2018094566A1 (zh) * 2016-11-22 2018-05-31 深圳大学 并行哈希函数的构造方法
US11240022B1 (en) * 2019-04-11 2022-02-01 Wells Fargo Bank, N.A. Passive encryption rotation keys
CN110659472A (zh) * 2019-09-29 2020-01-07 苏州浪潮智能科技有限公司 一种密码卡以及数据存储系统

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01144091A (ja) * 1987-11-30 1989-06-06 Nippon Telegr & Teleph Corp <Ntt> データ拡散装置
JP2001034163A (ja) * 1999-07-21 2001-02-09 Hitachi Ltd 暗号装置、復号装置、暗号通信方法および自動料金徴収システム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3029381B2 (ja) * 1994-01-10 2000-04-04 富士通株式会社 データ変換装置
US5664016A (en) * 1995-06-27 1997-09-02 Northern Telecom Limited Method of building fast MACS from hash functions
JP3928819B2 (ja) * 1997-01-21 2007-06-13 ソニー株式会社 データ受信装置及び暗号処理プログラム更新方法
US6832316B1 (en) * 1999-12-22 2004-12-14 Intertrust Technologies, Corp. Systems and methods for protecting data secrecy and integrity

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01144091A (ja) * 1987-11-30 1989-06-06 Nippon Telegr & Teleph Corp <Ntt> データ拡散装置
JP2001034163A (ja) * 1999-07-21 2001-02-09 Hitachi Ltd 暗号装置、復号装置、暗号通信方法および自動料金徴収システム

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010044251A (ja) * 2008-08-13 2010-02-25 Hitachi Ltd ハッシュ値生成装置、プログラム及びハッシュ値生成方法
JP2010049037A (ja) * 2008-08-22 2010-03-04 Hitachi Ltd ハッシュ値生成装置
WO2010024248A1 (ja) * 2008-08-25 2010-03-04 ソニー株式会社 データ変換装置、およびデータ変換方法、並びにプログラム
WO2010024247A1 (ja) * 2008-08-25 2010-03-04 ソニー株式会社 データ変換装置、およびデータ変換方法、並びにプログラム
US8787563B2 (en) 2008-08-25 2014-07-22 Sony Corporation Data converter, data conversion method and program
JP2016525836A (ja) * 2013-07-19 2016-08-25 クアルコム,インコーポレイテッド ブロック暗号アルゴリズムで使用するための鍵更新のための装置および方法
JP2015025930A (ja) * 2013-07-26 2015-02-05 日本電信電話株式会社 圧縮関数演算装置、圧縮関数演算方法及びプログラム

Also Published As

Publication number Publication date
US20080063187A1 (en) 2008-03-13
JP5000365B2 (ja) 2012-08-15

Similar Documents

Publication Publication Date Title
JP5000365B2 (ja) ハッシュ値生成装置、プログラム及びハッシュ値生成方法
Eastlake 3rd et al. US secure hash algorithms (SHA and SHA-based HMAC and HKDF)
JP6519473B2 (ja) 認証暗号装置、認証暗号方法および認証暗号用プログラム
JP2005215688A (ja) S−box演算を用いるハードウェア暗号化/復号化装置及び、その方法
US8180048B2 (en) Method and system for computational transformation
US8122075B2 (en) Pseudorandom number generator and encryption device using the same
CN113824547A (zh) 保留格式的加密和解密方法、装置、电子设备和介质
Vyakaranal et al. Performance analysis of symmetric key cryptographic algorithms
JP3180836B2 (ja) 暗号通信装置
Courtois et al. Combined algebraic and truncated differential cryptanalysis on reduced-round simon
EP2876626B1 (en) Universal hash function computing device, method, and program
Joshy et al. Text to image encryption technique using RGB substitution and AES
JPWO2006019152A1 (ja) メッセージ認証子生成装置、メッセージ認証子検証装置、およびメッセージ認証子生成方法
CN112100144A (zh) 区块链文件共享方法、装置、存储介质及电子设备
JPH10240500A (ja) 乱数生成装置及び方法、暗号化装置及び方法、復号装置及び方法、並びにストリーム暗号システム
CN114124359A (zh) 保留格式加密数据的方法、装置、电子设备及存储介质
KR101445339B1 (ko) 기밀성과 무결성을 제공하는 통합 암호화 장치 및 그 방법
JP2010044251A (ja) ハッシュ値生成装置、プログラム及びハッシュ値生成方法
El Hanouti et al. A lightweight hash function for cryptographic and pseudo-cryptographic applications
WO2020095382A1 (ja) 認証暗号化装置、認証復号装置、認証暗号化方法、認証復号方法、認証暗号化プログラムおよび認証復号プログラム
JP4857230B2 (ja) 疑似乱数生成装置及びそれを用いた暗号化処理装置
Gupta et al. Enhancement of security using B-RSA algorithm
JP2010256749A (ja) ハッシュ値生成装置、ハッシュ値生成方法およびプログラム
Labbi et al. Symmetric encryption algorithm for RFID systems using a dynamic generation of key
kadhim Bermani et al. Efficient cryptography techniques for image encryption in cloud storage

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090820

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120131

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120328

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120417

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120516

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150525

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees