JP2004004784A - ハッシュ・アルゴリズムを実装するためのシステム及び方法 - Google Patents
ハッシュ・アルゴリズムを実装するためのシステム及び方法 Download PDFInfo
- Publication number
- JP2004004784A JP2004004784A JP2003115786A JP2003115786A JP2004004784A JP 2004004784 A JP2004004784 A JP 2004004784A JP 2003115786 A JP2003115786 A JP 2003115786A JP 2003115786 A JP2003115786 A JP 2003115786A JP 2004004784 A JP2004004784 A JP 2004004784A
- Authority
- JP
- Japan
- Prior art keywords
- equal
- data block
- message digest
- message
- xor
- 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
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic 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/0643—Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/50—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols using hash chains, e.g. blockchains or hash trees
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/04—Masking or blinding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/12—Details relating to cryptographic hardware or logic circuitry
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/20—Manipulating the length of blocks of bits, e.g. padding or block truncation
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Power Engineering (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
【解決手段】本発明の方法は、データ・ブロックを受けるステップ及びメッセージ・ダイジェストを得るためにそのデータ・ブロックを処理するステップを含み、そのデータ・ブロックを処理するステップは、時間(t−x)に基いて時間(t)におけるデータ・ブロックを算定することを含む。xは、2よりも大きいか又は2に等しい。
【選択図】 図1
Description
【発明の属する技術分野】
本発明は、メッセージ・ダイジェストの生成に関し、特に、ハッシュ・アルゴリズムを実装するためのシステム及び方法に関する。
【0002】
【従来の技術】
暗号手法は、基本的には、メッセージの内容が容易にアクセスし得ないようにそのメッセージを暗号化及び暗号解読するプロセスから成る。これらのプロセスは、「サイファ(cipher)」として知られた特定のアルゴリズムに依存する。メッセージを暗号化及び暗号解読するためには、サイファと関連してキーが使用される。そのキーは、文字ストリングがパスワードとして使用される場合にはあり得ることだが、意味のあるものに見えることがあるが、これを変形するとまったく見当違いなものとなる。即ち、キーの機能は、それが非暗号化テキストから暗号化テキストへのマッピングを決定するビット・ストリングであるということにある。情報へのアクセスを保護することが暗号システムを使用する主要な理由であるけれども、そのようなシステムは、個人の識別のために並びに認証及び非拒絶(non−repudiation)のために益々使用されるようになっている。
【0003】
暗号識別/認証の1つの形態は、ディジタル署名として知られている。ディジタル署名は、メッセージが特定の個人によって生成されたということ及び或る意図された受信者によって受信されたメッセージが特定の個人によって最初に生成されたメッセージであるということを保証するために使用される。更に詳しく云えば、ハッシュ・アルゴリズムは、メッセージの認証を検証するために使用されるメッセージ「指紋(fingerprints)」を生成するためにディジタル署名システムによって使用される望ましいメカニズムである。一方向性(one−way)ハッシュ・アルゴリズムとして知られている1つのタイプのハッシュ・アルゴリズムは、任意の長さのメッセージを入力として受け、ハッシュ値又はメッセージ・ダイジェストとして知られている一意的な固定長のメッセージを出力する。入力メッセージ及び一方向性ハッシュ・アルゴリズムを与えられてメッセージ・ダイジェストを決定することは容易であるけれども、そのアルゴリズム及びメッセージ・ダイジェストを与えられて入力メッセージを決定することは一般には不可能である。更に、所定のハッシュ・アルゴリズムに入力として個々に供給されたランダム・メッセージが同じメッセージ・ダイジェストを生成させることは一般には不可能であるというようなメッセージ・アルゴリズムが開発されている。従って、一方向性ハッシュ・アルゴリズムを使用して生成されたメッセージ・ダイジェストは、メッセージ指紋としての使用に非常に適している。
【0004】
【発明が解決しようとする課題】
電子取引に参加しているエンティティの数が増加し続けているので、信頼性の高い且つ効率的な暗号識別/認証に対する要求も増加している。計算的に集中した識別/認証メカニズムの使用と結合した電子取引の数の増加は、その結果として更なる計算資源に対する要求の比例的増加を生じた。この要求を満足させるための1つの方法は、既存の資源を使用して且つ経済上のコスト及び不可避と思われる他のコストをこうむることなく、付加的な/複雑な取引がサポートされ得るような更に効率的なアルゴリズムを開発することである。本願は、ハッシュ・アルゴリズムをインプリメントするためのシステム及び方法を開示する。
【0005】
【課題を解決するための手段】
メッセージ・ダイジェストを生成するためのシステム及び方法は、データ・ブロックを受け取り、メッセージ・ダイジェストを得るためにそのデータ・ブロックを処理することを含む。そのデータ・ブロックの処理は、時間(t)におけるデータ・ブロックを時間(t−x)に基いて算定(evaluate)することを含む。xは、2よりも大きいか又は2に等しい。
【0006】
【発明の実施の形態】
典型的な実施例は、ハードウェア、ソフトウェア、又はそれらの結合によって実現され得る。少なくとも部分的にハードウェアを含む実施態様のパフォーマンスは、利用可能なハードウェア・テクノロジ及び必要な回路を位置決めするために使用可能なチップ・スペースに依存する。少なくとも部分的にソフトウェアを含む実施態様のパフォーマンスは、ハードウェア・プラットフォーム、選択されたプログラミング言語、及びプログラミング・スタイルのような幾つかの要素に依存し、本願では、論理的処理オペレーション、計算的処理オペレーション、又は他の処理オペレーションを遂行するために共に作用する一組の電気的回路及び(又は)同等のコンポーネントが論理構造体(「構造体」)と呼ばれる。
【0007】
ハッシュ・アルゴリズムは、ハードウェア又はソフトウェアのどちらで実装されようとも、一般に、3つのコンポーネントに分類可能である。第1のコンポーネント(ブロック)は、処理されるデータの受け取りを担当し、第2のブロックは、データの処理を担当し、第3のブロックは、最終値の記憶を担当する。
【0008】
典型的な実施例は、第1及び第2のブロックの最適化に焦点を合わせている。第1のブロックに影響を及ぼす2つの要素がある。その要素は、(16サイクル、8サイクル等のための)エンジンに影響する受信データ(incoming data)のためのインターフェース・データ幅(interface band width)(「幅(width)」)(即ち、32ビット、64ビット等)及び第1のブロックに関する方程式(equation)である。複数のサイクルをスキップするために、典型的な実施例はインターフェース・データ幅を変化させる。例えば、160ビットのメッセージ・ダイジェストを生成する時、80サイクルから40サイクルにサイクル数を減少させるために、反復(itaration)ごとに1サイクルがスキップされなければならない。従って、第2のブロックは、各サイクルごとに更なる32ビット値を備えなければならない。その結果、第1のブロックから第2のブロックへの各サイクル当たり64ビットの転送速度が生じる。システムが32ビット・インターフェースに限定され、且つ第2のブロックが32ビットよりも大きい(例えば、64ビット)幅を持ったデータを処理する場合、第2のブロックは、データを処理するために十分な32ビット値を受け取るまで待つこととなる。
【0009】
既存のアルゴリズムを考察すると、データは位置決めされるが処理のためには利用されない(data is located but not utilized for processing)というサイクルを含むことが理解される。典型的な実施例は、データの位置決め(data locating)を含むスキッピング・ステップ(skipping steps)によって、第2のブロックの間にデータを処理するに必要なサイクルの総数を減少させる。詳しく云えば、サイクルの方程式は、前のサイクルによって算定(value)される。例えば、160ビットのメッセージ・ダイジェストを生成するために必要なサイクル数を80サイクルから40サイクルに減少させるために、時間tにおける方程式は、t−2によって算定される。本願においては、第1、第2、及び第3のブロック又はステージを有するアルゴリズムを説明するが、アルゴリズムが、本発明の範囲を逸脱することなく類似又は非類似の機能を有する、より多い又はより少ないブロックを含み得ることは当然である。
【0010】
ある実施例では、開示されたハッシュ・アルゴリズムは、2000年1月27日発行の米国連邦情報・技術局(NIST)の連邦情報処理標準(FIPS)資料186−2:「ディジタル署名標準(Digital Signature Standard −DSS)」に関連する。DSSは、安全ハッシュ・アルゴリズム(Secure Hashing Algorithm −SHA−1)を詳述した1995年4月17日発行のNIST FIPS資料180−1:「安全ハッシュ標準(Secure Hash Standard)」において定義されたような安全ハッシュ標準(SHS)に従ってDSSと共に使用するためのハッシュ・アルゴリズムが実装されることを必要とする。この特定の実施例に関しては、典型的なソフトウェアの実施例を実装するために、C/C++プログラミング言語が選択されている。
【0011】
SHS/SHA−1と同様に、典型的な実施例のシステムは、160ビットのメッセージ・ダイジェストの生成を必要とし、それは次のような2つのステップを含む。
(1)メッセージのビット長が512ビットの倍数になるよう調節されるようにメッセージをパッドするステップ。
(2)160ビットのメッセージ・ダイジェストを生成するためのハッシュ・アルゴリズムへの入力として、メッセージを512ビットのブロックの形で供給するステップ。
【0012】
A.パッディング(Padding)
入力メッセージは、NIST FIPSの資料180−1において定義されたパッディング・プロセスに従ってパッドされる。NIST FIPS資料180−1は、次のパッディング及びパッディング・プロセスを定義している。
【0013】
メッセージ・パッディングの目的は、パッドされたメッセージの全長を512の倍数にすることである。SHA−1は、メッセージ・ダイジェストを計算するとき、512ビットのブロックを順次に処理する。次に、このパッディングがどのように行われるかを示す。概して云えば、512*nのパッドされたメッセージを作るために「1」の後にm個の「0」が続き、更に64ビットの整数が続いたものがメッセージの末尾に付加される。その64ビットの整数は、オリジナル・メッセージの長さLである。そこで、そのパッドされたメッセージがSHA−1によってn個の512ビット・ブロックとして処理される。メッセージは、長さL<264を有するものと仮定する。メッセージは、それがSHA−1に入力される前に、次のように右側にパッドされる:
(a)「1」が付加される。
例:オリジナル・メッセージが「01010000」である場合、これは「010100001」にパッドされる。
(b)「0」が付加される。「0」の数は、メッセージのオリジナル長に依存するであろう。最後の512ビット・ブロックの最後の64ビットがオリジナル・メッセージの長さLに対して予約される。
例:オリジナル・メッセージは次のビット・ストリングであると仮定する。
01100001 01100010 01100011 01100100 01100101
ステップ(a)の後、これは、01100001 01100010 01100011 01100100 01100101 1を与える。L=40であるので、上記におけるビットの数は41であり、407個の「0」が付加され、今や総数を448にする。これは、次のような値(16進数)を与える。
61626364 65800000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000.
(c)オリジナルメッセージにおけるビットの数であるLの2ワード表示を得る。
L<232である場合、第1のワードはすべてゼロである。これら2つのワードをそのパッドされたメッセージに付加する。
例:オリジナルメッセージは(b)におけるようなものであると仮定する。従って、L=40である(すべてのパッディングの前にLが計算される)。
【0014】
40の2ワード表示は16進数 00000000 00000028である。従って、最終的なパッドされたメッセージは、次のような16進数である。
61626364 65800000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000028.
【0015】
パッドされたメッセージは、或るn>0に対して16*n個のワードを含むであろう。パッドされたメッセージは、一連のn個のブロックM1、M2、...、Mnと見なされる。なお、各Miは、16個のワードを含み、M1は、そのメッセージの最初のキャラクタ(又は、ビット)を含む。
【0016】
B.メッセージ・ダイジェストの生成
典型的な実施例は、メッセージ・ダイジェストを生成するための効率的なハッシュ・アルゴリズムを含む。説明及び比較のみのために、512ビット・ブロックを処理してメッセージ・ダイジェストを生成するために80個の計算的サイクルを必要とするハッシュ・アルゴリズムSHA−1が次に考察される。NISTFIPS資料180−1は、次のように、SHA−1ハッシュ・アルゴリズムを使用してメッセージ・ダイジェストの生成を説明している。
【0017】
一連の論理関数f0、f1、...、f79がSHA−1において使用される。各ft(0<=t<=79)は、3つの32ビット・ワードB、C、Dに関して操作し、出力として32ビット・ワードを生じる。ft(B,C,D)は、次のように定義される。
ft(B,C,D)=(B AND C)OR((NOT B)AND D) (0<=t<=19)
ft(B,C,D)= B XOR C XOR D (20<=t<=39)
ft(B,C,D)=(B AND C)OR(B AND D)OR(C AND D) (40<=t<=59)
ft(B,C,D)= B XOR C XOR D (60<=t<=79)
【0018】
一連の一定ワード(constant word)K(0)、K(1)、...、K(79)がSHA−1において使用される。これらは、16進数で次のように与えられる。
Kt= 5A827999 (0<=t<=19)
Kt= 6ED9EBA1 (20<=t<=39)
Kt= 8F1BBCDC (40<=t<=59)
Kt= CA62C1D6 (60<=t<=79)
【0019】
最後のパッドされたメッセージを使用して、メッセージ・ダイジェストが計算される。その計算は、各々が32ビット・ワードから成る2つのバッファ及び80個の32ビット・ワードを使用する。最初の5ワード・バッファのワードは、A、B、C、D、Eと呼ばれる。2番目の5ワード・バッファのワードは、H0、H1、H2、H3、H4と呼ばれる。80ワード・シーケンスのワードは、W0、W1、...、W79と呼ばれる。単一のワード・バッファTEMPも使用される。
【0020】
メッセージ・ダイジェストを生成するために、16ワード・ブロックM0、M1、...、Mnが順次処理される。Miの処理は80個のステップを伴う。
【0021】
いずれのブロックを処理する前にも、{Hi}が次のように初期設定される。即ち、16進数表示では、
H0= 67452301
H1= EFCDAB89
H2= 98BADCFE
H3= 10325476
H4= C3D2E1F0.
【0022】
次に、M1、M2、...、Mnが処理される。Miの処理は、次のように進行する。(a)Miを16個のワードW0、W1、...、W15に分割する。W0は、最も左のワードである。
(b)t=16乃至79に対して、Wt=S1(Wt−3XOR Wt−8XOR Wt−14XOR Wt−16)とする。
(c)A=H0、B=H1、C=H2、D=H3、E=H4とする。
(d)t=0乃至79に対して、次のような操作を行う。
TEMP=S5(A)+ft(B,C,D)+E+Wt+Kt;
E=D; D=C; C=S30(B); B=A; A=TEMP;
(e)H0=H0+A、H1=H1+B、H2=H2+C、H3=H3+D、H4=H4+E とする。
【0023】
Mnを処理した後、メッセージ・ダイジェストは、5個のワードH0、H1、H2、H3、H4によって表された160ビットのストリングとなる。
【0024】
表1は、オリジナルFIPS 180−1アルゴリズムがサンプル・メッセージに適用された場合の中間値及び最終の一般化されたメッセージ・ダイジェストを含む。表1に示されるように、メッセージ・ダイジェストの生成のためには80サイクルが必要である。
【0025】
【0026】
本発明の実施例は、オリジナルのSHA−1アルゴリズムに比べて50パーセント以上も計算サイクルの必要数を減少させるメッセージ・ダイジェスト・アルゴリズムを含んでいる。更に、そのアルゴリズムが反復的に繰り返される場合、必要な計算サイクルの数は更に減少する。例えば、オリジナルのSHA−1は80サイクルであるが、その方法を1回適用した後はサイクル数が40に減少し、その方法を2回適用した後ではサイクル数は20に減少し、その後では16に減少する等々である。次の表2は、反復ごとにスキップされる各サイクル数に対する計算サイクルの可能な減少を表す部分的な表である。
【0027】
【0028】
典型的な実施例は、後述のメッセージ生成アルゴリズムを含んでいるが、メッセージ・ダイジェスト生成アルゴリズムが本発明の範囲を超えることなく変更され得ることは当然である。以下は、典型的な実施例に対するメッセージ生成アルゴリズムである。
(a)データ・ブロックが512ビットよりも小さい場合、それは、前述のように、パッディングによってパッドされなければならない。
(b)512ビットのメッセージMを8個の64ビット・ワードW[0]、...、W[8]に分割する。W[0]は最も左のワードである。
【0029】
ブロックに影響を及ぼす2つの要素がある。1つの要素は、8サイクルの間エンジンに影響を与える受信データのためのインターフェース・データ幅である。残りの64サイクルに影響を与える別の要素がそのブロックの内部方程式である。複数のサイクルをスキップするために、方程式が変化し、その唯一の変化がWオペランドの幅である。その幅は、スキップしたいサイクルの数に関連する。例えば、80サイクルから40サイクルに進みたい場合、各反復ごとに1サイクルがスキップされる。これは、サイクルごとに更なる32ビット値を有する第2ブロックを与える必要があることを意味する。典型的な実施例は、オリジナルSHA方程式に対して一時に処理される32ビットのデータの代わりに一時に64ビットのデータを処理するための次のような第1ブロック方程式を提供する。
Wt=S1(WtXOR Wt+1 XOR Wt+3 XOR Wt+6)
但し、tは、現在のサイクルであり、S1は、1ビットだけ左に循環的に回転した値(value circularly rotated left by one bit)に等しく、Wtは、処理のために第2ブロックに送られた値である。
【0030】
第2ブロックは、サイクル毎に及び512ビット・ブロックの処理の終了時に更新される。t−1による時間tにおけるオリジナルSHAの第2ブロック方程式は、次のようになる。
E(t)=D(t−1)
D(t)=C(t−1)
C(t)=S30[B(t−1)]
B(t)=A(t−1)
A(t)=S5(A(t−1))+ft(B(t−1),C(t−1),D(t−1))+E(t−1)+Wt+Kt
【0031】
上記の方程式を算定する場合、A(t)の決定だけは複雑な計算を必要とすることに注目すべきである。t−2による時間t−1の時のオリジナルSHA方程式に対する第2ブロック方程式は次のようになる。
E(t−1)=D(t−2)
D(t−1)=C(t−2)
C(t−1)=S30[B(t−2)]
B(t−1)=A(t−2)
A(t−1)=S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1
【0032】
ここでもう一度、A(t−1)の決定が複雑な計算を必要とすることに注目すべきである。典型的な実施例は、第2ブロックに必要なサイクル数の減少をもたらす。これは、例えば、第2方程式セットにおける値を第1方程式セットにおける値に代入することによって達成され、その結果、次のような修正された方程式が生じ得る。
E(t)=C(t−2)
D(t)=S30[B(t−2)]
C(t)=S30[A(t−2)]
B(t)=S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1
A(t)=S5(S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1)+ft(A(t−2),S30[B(t−2)],C(t−2))+D(t−2)+Wt+Kt=S5(B(t))+ft(A(t−2),S30[B(t−2)],C(t−2))+Wt+Kt
【0033】
この手順は、本発明の範囲を逸脱することなくt−3、t−4、t−5等における値によって時間tにおける値を計算することにより、サイクル数の大きな減少を得るように反復可能である。
【0034】
第3ブロックは、512ビットのデータの処理の終了時に更新される。その処理が80サイクルを必要とする場合、第3ブロックは80サイクル毎に更新される。1ステップをスキップすれば、サイクルの総数は40になる。それは、第3ブロックが40サイクル毎に更新されることを意味する。従って、第3ブロックは、スキップするサイクル数に関係なく同じままである。唯一の相違点は、それがスキップのサイクル数に関連した種々の時間に更新されることである。
【0035】
表3は、前述のFIPS 180−1アルゴリズムが適用された同じサンプルメッセージに上記のアルゴリズムが適用された場合の中間値及び最終的に生成されたメッセージ・ダイジェストを含む。表2に示されるように、FIPS 180−1アルゴリズムを使用するときのメッセージ・ダイジェスト生成のために必要とされた80サイクルに比べると、40サイクルがそのメッセージ・ダイジェスト生成のために使用される。
【0036】
【0037】
C.ハードウェア・インプリメンテーション
前述のように、典型的な実施例は、ソフトウェア・インプリメンテーション及びハードウェア・インプリメンテーションの両方を提供する。当業者に知られている任意のハードウェア・テクノロジを使用してメッセージ・ダイジェスト生成アルゴリズムがインプリメントされ得ること及び別のハードウェア・テクノロジの使用が本発明の範囲を超えないことは当然である。更に、メッセージ・ダイジェスト生成アルゴリズムが、レジスタ、アダー、マルチプレクサ(MUX)、ANDゲート、ORゲート、及びXORゲートを含む当業者に知られた構成の任意の組み合わせを使用してインプリメントされ得ることも当然である。この開示の目的から見て、レジスタ又は他の構造体が直接に参照されるとき、それは、その参照に関するコンテキストが指示する場所に含まれた値に対する参照であるということも当然である。
【0038】
過度な計算上のオーバヘッド及び効率の低下を避けるために、所与の反復中にスキップされるべきサイクル数は、剰余がゼロ・マイナス1である場合、1、3、4、7、9、15、19及び39のような80の素数の組み合わせでなければならない。スキッピング・ステップは、スキップされたステップ数Xが方程式 Y−[80/(X+1)−1]を満足する場合に成功する。Yは、分数部分及び整数部分から成る。更に、その整数部分は、そのブロックを処理するために必要なサイクル数を表す。Xは、スキップされたステップ数を表す。分数部分がゼロに等しくない場合、過剰なオーバヘッドが導入される。
【0039】
第1のハードウェア・インプリメンテーションは、7.5nsのサイクル・タイムを有するCMOS7SF/CMOS8SFテクノロジを使用する。図1は、CMOS7SF/CMOS8SFテクノロジを使用して形成された例示的なメッセージ・ダイジェスト・ジェネレータ10を示し、図2は、図1におけるアダー構造体40の詳細図である。図1を参照すると、参照番号12−28で示されたレジスタR00−R17は512ビット・メッセージを受ける。参照番号12のR00/R01は、XOR30−34及び右シフタ36によって発生された64ビット値を受ける。アダー構造体40は、参照番号42−50におけるレジスタA乃至Eに記憶された値、レジスタ52に記憶された一定の値、構造体54によって生成されたFt(A,B,C)の値、及び参照番号58−66で示されたレジスタH0乃至H4に記憶された値を受ける。レジスタA乃至E42−50及びレジスタH0乃至H4は、アダー構造体40からの値を受ける。メッセージ・ダイジェストを生成するために必要な最終サイクル中、生成されたメッセージ・ダイジェストは、レジスタH0乃至H4に記憶され、更に、レジスタA乃至Eにも記憶される。
【0040】
次に図2を参照する。なお、t=「現在のサイクル」及びn=「サイクルの総数」である。t=0乃至t=n−1に対して、アダー構造体100は次のように動作する。Aの5ビット・シフトS5(A)及びft(B,C,D)がアダー102に入力として供給される。E及びWt,R01がアダー104に入力として供給される。アダー104の出力及びKがアダー106に入力として供給される。アダー102及びアダー106の出力がアダー108に入力として供給される。アダー108の出力が参照番号44におけるレジスタB(図1)に記憶される。ft(A,S30(B),C)及びDがアダー110に入力として供給される。アダー110の出力及びKtがアダー112に入力として供給される。アダー112の出力がWt,R00と共にアダー114に入力として供給される。アダー114の出力及びアダー108の出力における左シフト5ビット118がアダー116に入力として供給される。アダー116の出力が参照番号42におけるレジスタA(図1)に記憶される。参照番号122のA(t−2)の30ビット・シフトが参照番号42のレジスタCに記憶される。参照番号124におけるB(t−2)の30ビット・シフトが参照番号48のレジスタDに記憶される。参照番号126のC(t−2)が参照番号50のレジスタEに記憶される。
【0041】
t=nに対して、アダー構造体100は次のように動作する。レジスタH058及びレジスタA42の出力がアダー130に入力として供給される。アダー130の出力がレジスタA42及びレジスタH058に記憶される。レジスタH160及びレジスタB44の出力がアダー132に入力として供給される。アダー132の出力がレジスタH160及びレジスタB44に記憶される。レジスタH262及びレジスタC46の出力がアダー134に入力として供給される。アダー134の出力がレジスタH262及びレジスタC46に記憶される。レジスタH364及びレジスタD48の出力がアダー136に入力として供給される。アダー136の出力がレジスタH364及びレジスタD48に記憶される。レジスタH466及びレジスタE50の出力がアダー138に入力として供給される。アダー138の出力がレジスタH466及びレジスタE50に記憶される。
【0042】
図3及び図4は、7.5nsのサイクル・タイムを有するCMOS7SF/CMOS8SFテクノロジを利用した第1の代替えハードウェア・インプリメンテーションを示す。図3を参照すると、参照番号352−368のレジスタR00乃至R17はアダー378からデータを受け取る。アダー378は、定数レジスタ380、データ・インターフェース、及び1ビット左シフタ376からデータを受け取る。XOR370は、参照番号368のR16、R17及び参照番号366のR14、R15から値を受け取る。XOR372は、XOR370及び参照番号362のR10、R11から値を受け取る。XOR374は、XOR372及び参照番号356のR04、R05から値を受け取る。1ビット左シフタ376は、XOR374から値を受け取る。参照番号354のR02、R03は、データ・インターフェース及び1ビット左シフタ376から値を受け取る。アダー構造体406は、参照番号352のR00、R01、参照番号382−390のレジスタA乃至E、参照番号396−404のレジスタH0乃至H4、参照番号392のFt(B,C,D)及び参照番号394のFt(A,B,C)から値を受け取る。参照番号392のFt(B,C,D)は、レジスタD384、レジスタC386、及びレジスタB388から値を受け取る。参照番号394のFt(A,B,C)は、レジスタC386、レジスタB388、及びレジスタA390から値を受け取る。参照番号382−390のレジスタA乃至E及び参照番号396−404のレジスタH0乃至H4は、アダー構造体406から値を受け取る。
【0043】
図4は、図3のアダー構造体406を示す。なお、t=「現在のサイクル」及びn=「サイクルの総数」である。t=0乃至t=n−1に対して、アダー構造体406は次のように動作する。アダー450は、S5(A)及びft(B,C,D)を入力として受け取る。アダー452がE及びWt,R01を入力として受け取る。アダー450及びアダー452の出力はアダー454に対する入力である。アダー456は、D及びWt,R00を入力として受け取る。アダー458は、アダー456の出力及びft(A,S30(B),C)を入力として受け取る。アダー462は、アダー458の出力及びアダー454の出力5ビット左シフト460の出力を入力として受け取る。アダー462の出力は、参照番号390のレジスタA(図3)に記憶される。アダー454の出力は、参照番号388のレジスタB(図3)に記憶される。S30[A]がライン464を介して参照番号386のレジスタC(図3)に記憶される。S30[B]がライン466を介して参照番号384のレジスタD(図3)に記憶される。Cがライン468を介して参照番号382のレジスタE(図3)に記憶される。
【0044】
t=nに対して、アダー構造体406は次のように動作する。レジスタH0404及びレジスタA390がアダー470に入力として供給される。アダー470の出力がレジスタA390及びレジスタH0404に記憶される。レジスタH1402及びレジスタB388がアダー472に入力として供給される。アダー472の出力がレジスタH1402及びレジスタB388に記憶される。レジスタH2400及びレジスタC386がアダー474に入力として供給される。アダー474の出力がレジスタH2400及びレジスタC386に記憶される。レジスタH3398及びレジスタD384がアダー476に入力として供給される。アダー476の出力がレジスタH3398及びレジスタD384に記憶される。レジスタH4396及びレジスタE382がアダー478に入力として供給される。アダー478の出力がレジスタH4396及びレジスタE382に記憶される。
【0045】
第2のハードウェア・インプリメンテーションは、600psのサイクル・タイムを有するSA38(CMOS9S)テクノロジを使用し、その結果、同じテクノロジを使用してインプリメントされたオリジナルSHA−1アルゴリズムに比べると50パーセントの全体的なサイクル減少が生じる。図5は、SA38テクノロジを使用して形成されたメッセージ・ジェネレータ210を示す。図5を参照すると、参照番号212−226で示されたレジスタR00−R15が512ビットのメッセージを受け取る。R00212は、XOR240の1ビット右シフト242の出力を受け取る。XOR240は、R01212及びXOR238の出力を受け取る。XOR238は、R06218及びXOR236の出力を受け取る。XOR236は、R12224及びR14226の出力を受け取る。R01212は、XOR232の1ビット右シフト234の出力を受け取る。XOR232は、R02214及びXOR230の出力を受け取る。XOR230は、R07218及びXOR228の出力を受け取る。XOR228は、R13224及びR15226の出力を受け取る。
【0046】
MUX256は、R14226、B272のシフト右5ビット246、KEY248、ft(A,B,C)244,H4252、H2250、及びH0254から値を受け取る。TEMP258は、MUX256から値を受け取る。MUX278は、E260、C262、A264、D270、及びアダー282から値を受け取る。TEMP280は、MUX278から値を受け取る。アダー282は、TEMP258及びTEMP280から値を受け取る。
【0047】
MUX290は、E260、KEY277、ft(B,C,D)276、A264の右シフト5ビット268、B272、H3286、及びH1284から値を受け取る。TEMP294は、MUX290から値を受け取る。MUX292は、D270、B272、R15226、アダー282の回転右5ビット288、及びアダー298から値を受け取る。TEMP296は、MUX292から値を受け取る。アダー298は、TEMP294及びTEMP296から値を受け取る。E260は、C262、アダー282、及び入力データ281から値を受け取る。C262は、入力データ281、アダー282、及びA264の右シフト2ビット266から値を受け取る。A264は、入力データ281及びアダー282から値を受け取る。D270は、入力データ281、アダー298、及びB272の右シフト2ビット274から値を受け取る。B272は、入力データ281及びアダー298から値を受け取る。H4252は、入力データ283及びアダー282から値を受け取る。H2250は、入力データ283及びアダー282から値を受け取る。H0254は、入力データ283及びアダー282から値を受け取る。H3286は、入力データ279及びアダー298から値を受け取る。H1284は、入力データ279及びアダー298から値を受け取る。
【0048】
上記の実施例はFIPS 180−1に関連するけれども、本発明が当業者に知られた任意の互換性あるアルゴリズムに関してインプリメントされ得ることは明らかである。例えば、別の実施例では、既知のMD5アルゴリズムに関連した別のメッセージ生成アルゴリズムが提供される。SHAアルゴリズムのようなその別のMD5アルゴリズムは、512ビット・ブロックを操作する。しかし、それは、128ビット・メッセージ・ダイジェストを生成する。説明及び比較のみを目的として、512ビット・ブロックを処理し且つメッセージ・ダイジェストを生成するためには64計算サイクルを必要とする既知のMD5ハッシュ・アルゴリズムが次に検討される。
(a)データ・ブロックが512ビットよりも小さい場合、それはパッドされなければならない。
(b)512ビットのメッセージMを8個の64ビットワードW[0]、...、W[8]に分割する。W[0]は最も左のワードである。それらをエンジンに転送する。
【0049】
その別の実施例では、処理時間が減少し、それは、メッセージ・ダイジェスト生成に必要な処理時間も減少させる。SHAアルゴリズムに対して行われたように、その後のサイクルの値が前のサイクルにおいて置換され、その結果、同じサイクルにおいて2つの方程式の処理が生じた。その結果は、メッセージ・ダイジェストの生成が、完了するためには33サイクルを必要とするであろうということである。オリジナルのMD5方程式は次のようになる。
A[t−1]=B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t])<<<Sa)
D[t]=A[t−1]+((D[t−2]+F(A[t−2],B[t−2],C[t−2])+M[ja]+T[t])<<<Sb)
[t−2]によってD[t]を決定することにより、それらの方程式は次のようになる。
D[t−1]=B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t−1])<<<Sa)+((D[t−2]+F((B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t−1])<<<Sa)),B[t−2],C[t−2])+M[jb]+T[t−1])<<<Sb)
B[t]=D[t−1]+((C[t−1]+ft(D[t−1],A[t−1],B[t−1])+Mj+Tt−1)<<<S)+((B[t−1]+ft((D[t−1]+((C[t−1]+ft(D[t−1],A[t−1],B[t−1])+Mj+Tt−1)<<<S)),D[t−1],A[t−1])+Mj+Tt)<<<S)
従って、本発明を利用するとき、128ビット・メッセージ・ダイジェストの生成は、32+1サイクルを必要とし、一方、オリジナルMD5アルゴリズムは64+1サイクルを必要とする。
【0050】
以下は、その別の実施例に対するメッセージ生成アルゴリズムである。その実施例は後述のメッセージ生成アルゴリズムを含むけれども、その望ましいメッセージ・ダイジェスト生成アルゴリズムが本発明の範囲を超えることなく変更され得ることは当然である。
(a)データ・ブロックが512ビットよりも小さい場合、それはパッドされなければならない。
(b)512ビットのメッセージMを8個の64ビット・ワードW[0]、...、W[7]に分割する。W[0]は最も左のワードである。それらをエンジンに転送する。それらは、内部的に32ビットのチャンク(chunk)に分割されるであろう。
【0051】
図6、図7、及び図8は、上記の例示的なMD5アルゴリズムに対する例示的ハードウェア・インプリメンテーションを示す。そのメッセージ・ダイジェスト生成アルゴリズムが当業者にとって既知の任意のハードウェア・テクノロジを使用してインプリメントされ得ること及び別のハードウェア・テクノロジの使用が本発明の範囲を超えないことは当然である。更に、そのメッセージ・ダイジェスト生成アルゴリズムが、レジスタ、アダー、マルチプレクサ(MUX)、ANDゲート、ORゲート、及びXORゲートを含む当業者には既知の構造体の任意の組み合わせを使用してインプリメントされ得ること、従って、そのようなハードウェア・インプリメンテーションが本願において開示された例示的なハードウェア・インプリメンテーションに限定されないことは当然である。この開示の目的から見て、レジスタ又は他の構造体が直接に参照されるとき、それは、その参照に関するコンテキストが指示する場所に含まれた値に対する参照であるということも当然である。
【0052】
図6を参照すると、データがデータ入力ブロック500によって受け取られる。アダー構造体530は、データ入力ブロック500、コンスタント・キー・レジスタ502、504、レジスタA乃至D506−512、レジスタH0乃至H3522−528から値を受ける。アダー530は、Ft(D,A,B)514、Ft(D,A,B)516、Ft(B,C,D)518、及びFt(A,B,C)520による値も受ける。アダー構造体530からの出力は、レジスタA乃至D506−512及びレジスタH0乃至H3522−528に記憶される。
【0053】
図7は、更に、図6の入力ブロック500を示す。レジスタR00乃至R15はデータを受ける。MUX582は、レジスタR03574、R07566、R11558、及びR15550から値を受ける。MUX584は、レジスタR02576、R06568、R10560、及びR14552から値を受ける。MUX586は、レジスタR01578、R05570、R09562、及びR13554から値を受ける。MUX588は、レジスタR00580、R04572、R08564、及びR12556から値を受ける。MUX590及びMUX592は、それぞれ、MUX582、MUX584、MUX586、及びMUX588から値を受ける。
【0054】
図8は、更に、図6のアダー構造体530を示す。なお、t=「現在のサイクル」であり、n=「サイクルの総数」である。t=0乃至t=n−1に対して、アダー構造体530は次のようの動作する。アダー600が一定キー・レジスタ502(図6)及びレジスタC508(図6)から入力値を受ける。アダー600及びMUX592(図7)の出力は、アダー602に入力される。アダー602の出力は、レジスタ604に入力される。ft及びレジスタ604に記憶された値は、アダー606に入力される。アダー606の出力におけるシフト左Sjaビット608は、レジスタB510の出力と共にアダー610に入力される。アダー610の出力は、レジスタC508に記憶される。アダー612は、一定キー・レジスタ504及びレジスタC508から値を受ける。アダー612及びMUX590(図7)の出力は、アダー614に入力される。アダー614の出力は、レジスタ616に記憶される。レジスタ616に記憶された値及びftがアダー618に入力される。アダー618の出力におけるシフト左Sjbビット620は、アダー610の出力と共にアダー622に入力される。アダー622の出力は、レジスタB510に記憶される。レジスタC508の値は、ライン624を介してレジスタA512に記憶される。レジスタB510の値は、ライン626を介してレジスタD506に記憶される。
【0055】
t=nに対して、アダー406(図3)は次のように動作する。図6のレジスタH0528及びレジスタA512がアダー628に入力として供給される。アダー628の出力がレジスタA512及びレジスタH0528に記憶される。図6のレジスタH1526及びレジスタB510がアダー630に入力として供給される。アダー630の出力がレジスタH1526及びレジスタB510に記憶される。図6のレジスタH2524及びレジスタC508がアダー632に入力として供給される。アダー632の出力がレジスタH2524及びレジスタC508に記憶される。図6のレジスタH3522及びレジスタD506がアダー634に入力として供給される。アダー634の出力がレジスタH3522及びレジスタD506に記憶される。
【0056】
上記の実施例に関する記述は単に説明のためのものである。上記のように、それらのプロセスを実施するためのコンピュータ・インプリメントされたプロセス及び装置の形式の実施例も含まれ得る。フロッピ・ディスケット、CD−ROM、ハード・ドライブ、又は他の任意のコンピュータ可読記憶媒体のような実体のある媒体において具体化された、命令を含むコンピュータ・プログラム・コードの形式の実施例も含まれ得る。この場合、コンピュータ・プログラム・コードがコンピュータにロードされ、コンピュータによって実行されるとき、コンピュータは本発明を実施するための装置となる。更に、コンピュータ・プログラム・コードの形式で、例えば、それが記憶媒体に記憶されようとも、コンピュータにロードされようとも、及び(又は)コンピュータによって実行されようとも、或いは変調された搬送波であろうと又はなかろうと、電気的配線又はケーブルのような伝送媒体を介して、光ファイバを通して、又は電磁放射を介して伝送されたデータ信号としての実施例も含まれ得る。なお、コンピュータ・プログラムがコンピュータにロードされそしてコンピュータによって実行されるとき、コンピュータは本発明を実施するための装置になる。コンピュータ・プログラム・コード・セグメントは、汎用マイクロプロセッサにインプリメントされるとき、特定の論理回路を作成するようにマイクロプロセッサを構成する。
【0057】
典型的な実施例に関連して本発明を説明したが、本発明の技術的範囲を逸脱することなく種々の変更が行われ、均等物がその構成要素に代用され得ることは当業者には明らかである。更に、本発明の本質的な範囲から逸脱することなく、本発明の教示するところに状況又は材料を適応させるための多くの修正が行われ得る。従って、本発明は、本発明を実行するための開示された特定の実施例に限定されず、本発明は、特許請求の範囲に入るすべての実施例を含むものである。
【0058】
まとめとして、本発明の構成に関して以下の事項を開示する。
【0059】
(1)メッセージ・ダイジェストを生成する方法であって、
データ・ブロックを受けるステップと、
メッセージ・ダイジェストを得るために前記データ・ブロックを処理するステップとを含み、
前記データ・ブロックを処理するステップは、サイクル=(t−x)に基いてサイクル=tにおける前記データ・ブロックを算定するステップを含み、
xは2よりも大きいか又は2に等しい、
方法。
(2)前記データ・ブロックが512ビットである、上記(1)に記載の方法。
(3)前記データ・ブロックが64ビット・インクレメントで受領され、及び/又は、処理される、上記(1)に記載の方法。
(4)前記メッセージ・ダイジェストが160ビットを含む、上記(2)に記載の方法。
(5)前記メッセージ・ダイジェストが128ビットを含む、上記(2)に記載の方法。
(6)前記処理するステップは、
E(t)=C(t−2);
D(t)=S30[B(t−2)];
C(t)=S30[A(t−2)];
B(t)=S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1;及び
A(t)=S5(S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1)+ft(A(t−2),S30[B(t−2)],C(t−2))+D(t−2)+Wt+Kt=S5(B(t))ft(A(t−2),S30[B(t−2)],C(t−2))+D(t−2)+Wt+Kt
の行程を含む、上記(4)に記載の方法。
(7)前記処理するステップは、更に
D[t−1]=B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t−1])<<<Sa)+((D[t−2]+F((B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t−1])<<<Sa)),B[t−2],C[t−2])+M[jb]+T[t−1])<<<Sb);及び
B[t]=D[t−1]+((C[t−1]+ft(D[t−1],A[t−1],B[t−1])+Mj+Tt−1)<<<S)+((B[t−1]+ft((D[t−1]+((C[t−1]+ft(D[t−1],A[t−1],B[t−1])Mj+Tt−1)<<<S)),D[t−1],A[t−1])+Mj+Tt)<<<S)
の行程を含む、上記(4)に記載の方法。。
(8)メッセージ・ダイジェストを生成するステップを含み、
前記生成するステップは、前記メッセージ・ダイジェストを得るためにデータ・ブロックを処理するステップを含み、
前記データ・ブロックを処理するステップは、サイクル=(t−x)に基いてサイクル=tにおける前記データ・ブロックを算定するステップを含み、
xは2よりも大きいか又は2に等しい、
改良されたSHAハッシュ・アルゴリズム。
(9)前記生成するステップは、更に
E(t)=C(t−2);
D(t)=S30[B(t−2)];
C(t)=S30[A(t−2)];
B(t)=S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1;及び
A(t)=S5(S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1)+ft(A(t−2),S30[B(t−2)],C(t−2))+D(t−2)+Wt+Kt=S5(B(t))ft(A(t−2),S30[B(t−2)],C(t−2))+D(t−2)+Wt+Kt
の行程を含む、上記(8)に記載の改良されたSHAハッシュ・アルゴリズム。
(10)メッセージ・ダイジェストを生成するステップを含み、
前記生成するステップは、前記メッセージ・ダイジェストを得るためにデータ・ブロックを処理するステップを含み、
前記データ・ブロックを処理するステップは、サイクル=(t−x)に基いてサイクル=tにおける前記データ・ブロックを算定するステップを含み、
xは2よりも大きいか又は2に等しい、
改良されたMD5ハッシュ・アルゴリズム。
(11)前記生成するステップは、更に
D[t−1]=B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t−1])<<<Sa)+((D[t−2]+F((B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t−1])<<<Sa)),B[t−2],C[t−2])+M[jb]+T[t−1])<<<Sb);及び
B[t]=D[t−1]+((C[t−1]+ft(D[t−1],A[t−1],B[t−1])+Mj+Tt−1)<<<S)+((B[t−1]+ft((D[t−1]+((C[t−1]+ft(D[t−1],A[t−1],B[t−1])Mj+Tt−1)<<<S)),D[t−1],A[t−1])+Mj+Tt)<<<S)
の行程を含む、上記(10)に記載の改良されたMD5ハッシュ・アルゴリズム。
(12)メッセージ・ダイジェストを生成するためのシステムにして、
データ・ブロックを受けるためのメモリ記憶ロケーションと、
メッセージ・ダイジェストを得るために前記データ・ブロックを処理するためのプロセッサとを含み、
前記データ・ブロックの処理は、サイクル=(t−x)に基いてサイクル=tにおける前記データ・ブロックを算定し、
xは2よりも大きいか又は2に等しい、
システム。
(13)前記データ・ブロックが512ビットである、上記(12)に記載のシステム。
(14)前記メモリ記憶ロケーションが64ビットのインクレメントで前記データ・ブロックを受領し、及び/又は、処理する、上記(12)に記載のシステム。
(15)前記メッセージ・ダイジェストが160ビットを含む、上記(13)に記載のシステム。
(16)前記メッセージ・ダイジェストが128ビットを含む、上記(13)に記載のシステム。
(17)前記プロセッサは、
E(t)=C(t−2);
D(t)=S30[B(t−2)];
C(t)=S30[A(t−2)];
B(t)=S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1;及び
A(t)=S5(S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1)+ft(A(t−2),S30[B(t−2)],C(t−2))+D(t−2)+Wt+Kt=S5(B(t))ft(A(t−2),S30[B(t−2)],C(t−2))+D(t−2)+Wt+Kt
の行程を実行する、上記(16)に記載のシステム。
(18)前記プロセッサは、
D[t−1]=B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t−1])<<<Sa)+((D[t−2]+F((B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t−1])<<<Sa)),B[t−2],C[t−2])+M[jb]+T[t−1])<<<Sb);及び
B[t]=D[t−1]+((C[t−1]+ft(D[t−1],A[t−1],B[t−1])+Mj+Tt−1)<<<S)+((B[t−1]+ft((D[t−1]+((C[t−1]+ft(D[t−1],A[t−1],B[t−1])Mj+Tt−1)<<<S)),D[t−1],A[t−1])+Mj+Tt)<<<S)
の行程を実行する、上記(16)に記載のシステム。
(19)メッセージ・ダイジェストを生成するためのコンピュータ・プログラムであって、コンピュータ・システムを、
データ・ブロックを受けるため手段と、
メッセージ・ダイジェストを得るために前記データ・ブロックを処理するための手段として機能させ、
前記データ・ブロックの処理は、サイクル=(t−x)に基いてサイクル=tにおける前記データ・ブロックの算定を含み、
xは2よりも大きいか又は2に等しい、
コンピュータ・プログラム。
(20)メッセージ・ダイジェストを生成するための方法にして、
メッセージがmビットよりも小さい場合、前記メッセージをパッドするステップと、
前記メッセージをW[0]乃至W[n]から成るn個のワードに分割するステップと、
AをH0に等しく設定し、BをH1に等しく設定し、CをH2に等しく設定し、DをH3に等しく設定し、EをH4に等しく設定する処理を実行するステップと、反復実行する場合に使用される値を記憶するためのtと呼ばれるカウンタを設定するステップと、
tを初期値に設定するステップと、
ターミナル値を初期値に設定するステップと、
tが前記ターミナル値に等しくならないように、下記のステップ(a)乃至(e)を反復的に実行するステップと、
(a)Sを(T AND MASK)に等しく設定するステップ
(b)tが第1の定義された値よりも大きいか又はそれに等しい場合、W[t]を第1のシフトビット・オペレーションの値に等しく設定するステップ
(c)TEMPを第2シフトビット・オペレーションの値 + f(B,C,D) + E + W[s] + Ktに等しく設定するステップ(Ktは一定値を含む)
(d)EをDに等しく設定し、DをCに等しく設定し、Cを第3のシフトビット・オペレーションの値に等しく設定し、BをAに等しく設定し、AをTEMPに等しく設定する処理を実行するステップ
(e)tをインクレメントするステップ
H0をH0+Aに等しく設定し、H1をH1+Bに等しく設定し、H2をH2+Cに等しく設定し、H3をH3+Dに等しく設定し、H4をH4+Eに等しく設定する処理を実行するステップと、
を含む、方法。
(21)mは512に等しく、nは8に等しく、各ワードは64ビットに等しい、上記(20)に記載の方法。
(22)前記第1の定義された値は8に等しい、上記(21)に記載の方法。
(23)W[0]は最も左のワードである、上記(21)に記載の方法。
(24)前記マスクが、 0x00000007に等しい、上記(21)に記載の方法。
(25)前記tの初期値が0に等しく、前記ターミナル値は39よりも小さいか又は39に等しい、上記(21)に記載の方法。
(26)tが0よりも大きいか又は0に等しい場合、及びtが9よりも小さいか又は9に等しい場合に、ft(B,C,D)を(B AND C)OR(NOT(B)AND D)に等しく設定し、ft(A,B,C)を(A AND B)OR(NOT(A)AND C)に等しく設定する処理を実行するステップと、
tが10よりも大きいか又は10に等しい場合、及びtが19よりも小さいか又は19に等しい場合、ft(B,C,D)を(B XOR C XOR D)に等しく設定し、ft(A,B,C)を(A XOR B XOR C)に等しく設定する処理を実行するステップと、
tが20よりも大きいか又は20に等しい場合、及びtが29よりも小さいか又は29に等しい場合、ft(B,C,D)を(B AND C)OR(B AND D)OR(C AND D)に等しく設定し、ft(A,B,C)を(A AND B)OR(A AND C)OR(B AND C)に等しく設定する処理を実行するステップと、
tが30よりも大きいか又は30に等しい場合、及びtが39よりも小さいか又は39に等しい場合、ft(B,C,D)を(B XOR C XOR D)に等しく設定し、ft(A,B,C)を(A XOR B XOR C)に等しく設定する処理を実行するステップと、
を更に含む、上記(25)に記載の方法。
(27)前記第1のシフトビット・オペレーションは、更に
shift1bitleft(W[(t+6)AND MASK] XOR W[(t+3)AND MASK]
XOR W[(t+1)AND MASK] XOR W[(t+0)])。
の行程を含む、上記(26)に記載の方法。
(28)前記第2のシフトビット・オペレーションは、更に
shift5bitsleft(A)。
の行程を含む、上記(27)に記載の方法。
(29)前記第3のシフトビット・オペレーションは、更に
shift30bitsleft(B)。
の行程を含む、上記(28)に記載の方法。
【図面の簡単な説明】
【図1】160ビットのメッセージを生成するために多くとも41サイクルしか必要としない160ビット・メッセージ・ダイジェスト・ジェネレータをインプリメントするためのハードウェア図である。
【図2】図1に示されたアダー構造体の詳細図である。
【図3】160ビットのメッセージを生成するために多くとも41サイクルしか必要としない160ビット・メッセージ・ダイジェスト・ジェネレータをインプリメントするための別のハードウェア図である。
【図4】図3に示されたアダー構造体の詳細図である。
【図5】160ビットのメッセージを生成するために多くとも205サイクルしか必要としない160ビット・メッセージ・ダイジェスト・ジェネレータをインプリメントするためのハードウェア図である。
【図6】128ビットのメッセージを生成するために多くとも33サイクルしか必要としない128ビット・メッセージ・ダイジェスト・ジェネレータをインプリメントするためのハードウェア図である。
【図7】図6に示された入力ブロック構造体の詳細図である。
【図8】図6に示されたアダー構造体の詳細図である。
Claims (29)
- メッセージ・ダイジェストを生成する方法であって、
データ・ブロックを受けるステップと、
メッセージ・ダイジェストを得るために前記データ・ブロックを処理するステップとを含み、
前記データ・ブロックを処理するステップは、サイクル=(t−x)に基いてサイクル=tにおける前記データ・ブロックを算定するステップを含み、
xは2よりも大きいか又は2に等しい、
方法。 - 前記データ・ブロックが512ビットである、請求項1に記載の方法。
- 前記データ・ブロックが64ビット・インクレメントで受領され、及び/又は、処理される、請求項1に記載の方法。
- 前記メッセージ・ダイジェストが160ビットを含む、請求項2に記載の方法。
- 前記メッセージ・ダイジェストが128ビットを含む、請求項2に記載の方法。
- 前記処理するステップは、
E(t)=C(t−2);
D(t)=S30[B(t−2)];
C(t)=S30[A(t−2)];
B(t)=S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1;及び
A(t)=S5(S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1)+ft(A(t−2),S30[B(t−2)],C(t−2))+D(t−2)+Wt+Kt=S5(B(t))ft(A(t−2),S30[B(t−2)],C(t−2))+D(t−2)+Wt+Kt
の行程を含む、請求項4に記載の方法。 - 前記処理するステップは、更に
D[t−1]=B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t−1])<<<Sa)+((D[t−2]+F((B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t−1])<<<Sa)),B[t−2],C[t−2])+M[jb]+T[t−1])<<<Sb);及び
B[t]=D[t−1]+((C[t−1]+ft(D[t−1],A[t−1],B[t−1])+Mj+Tt−1)<<<S)+((B[t−1]+ft((D[t−1]+((C[t−1]+ft(D[t−1],A[t−1],B[t−1])Mj+Tt−1)<<<S)),D[t−1],A[t−1])+Mj+Tt)<<<S)
の行程を含む、請求項4に記載の方法。。 - メッセージ・ダイジェストを生成するステップを含み、
前記生成するステップは、前記メッセージ・ダイジェストを得るためにデータ・ブロックを処理するステップを含み、
前記データ・ブロックを処理するステップは、サイクル=(t−x)に基いてサイクル=tにおける前記データ・ブロックを算定するステップを含み、
xは2よりも大きいか又は2に等しい、
改良されたSHAハッシュ・アルゴリズム。 - 前記生成するステップは、更に
E(t)=C(t−2);
D(t)=S30[B(t−2)];
C(t)=S30[A(t−2)];
B(t)=S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1;及び
A(t)=S5(S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1)+ft(A(t−2),S30[B(t−2)],C(t−2))+D(t−2)+Wt+Kt=S5(B(t))ft(A(t−2),S30[B(t−2)],C(t−2))+D(t−2)+Wt+Kt
の行程を含む、請求項8に記載の改良されたSHAハッシュ・アルゴリズム。 - メッセージ・ダイジェストを生成するステップを含み、
前記生成するステップは、前記メッセージ・ダイジェストを得るためにデータ・ブロックを処理するステップを含み、
前記データ・ブロックを処理するステップは、サイクル=(t−x)に基いてサイクル=tにおける前記データ・ブロックを算定するステップを含み、
xは2よりも大きいか又は2に等しい、
改良されたMD5ハッシュ・アルゴリズム。 - 前記生成するステップは、更に
D[t−1]=B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t−1])<<<Sa)+((D[t−2]+F((B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t−1])<<<Sa)),B[t−2],C[t−2])+M[jb]+T[t−1])<<<Sb);及び
B[t]=D[t−1]+((C[t−1]+ft(D[t−1],A[t−1],B[t−1])+Mj+Tt−1)<<<S)+((B[t−1]+ft((D[t−1]+((C[t−1]+ft(D[t−1],A[t−1],B[t−1])Mj+Tt−1)<<<S)),D[t−1],A[t−1])+Mj+Tt)<<<S)
の行程を含む、請求項10に記載の改良されたMD5ハッシュ・アルゴリズム。 - メッセージ・ダイジェストを生成するためのシステムにして、
データ・ブロックを受けるためのメモリ記憶ロケーションと、
メッセージ・ダイジェストを得るために前記データ・ブロックを処理するためのプロセッサとを含み、
前記データ・ブロックの処理は、サイクル=(t−x)に基いてサイクル=tにおける前記データ・ブロックを算定し、
xは2よりも大きいか又は2に等しい、
システム。 - 前記データ・ブロックが512ビットである、請求項12に記載のシステム。
- 前記メモリ記憶ロケーションが64ビットのインクレメントで前記データ・ブロックを受領し、及び/又は、処理する、請求項12に記載のシステム。
- 前記メッセージ・ダイジェストが160ビットを含む、請求項13に記載のシステム。
- 前記メッセージ・ダイジェストが128ビットを含む、請求項13に記載のシステム。
- 前記プロセッサは、
E(t)=C(t−2);
D(t)=S30[B(t−2)];
C(t)=S30[A(t−2)];
B(t)=S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1;及び
A(t)=S5(S5(A(t−2))+ft(B(t−2),C(t−2),D(t−2))+E(t−2)+Wt−1+Kt−1)+ft(A(t−2),S30[B(t−2)],C(t−2))+D(t−2)+Wt+Kt=S5(B(t))ft(A(t−2),S30[B(t−2)],C(t−2))+D(t−2)+Wt+Kt
の行程を実行する、請求項16に記載のシステム。 - 前記プロセッサは、
D[t−1]=B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t−1])<<<Sa)+((D[t−2]+F((B[t−2]+((F(B[t−2],C[t−2],D[t−2])+A[t−2]+M[ja]+T[t−1])<<<Sa)),B[t−2],C[t−2])+M[jb]+T[t−1])<<<Sb);及びB[t]=D[t−1]+((C[t−1]+ft(D[t−1],A[t−1],B[t−1])+Mj+Tt−1)<<<S)+((B[t−1]+ft((D[t−1]+((C[t−1]+ft(D[t−1],A[t−1],B[t−1])Mj+Tt−1)<<<S)),D[t−1],A[t−1])+Mj+Tt)<<<S)
の行程を実行する、請求項16に記載のシステム。 - メッセージ・ダイジェストを生成するためのコンピュータ・プログラムであって、コンピュータ・システムを、
データ・ブロックを受けるため手段と、
メッセージ・ダイジェストを得るために前記データ・ブロックを処理するための手段として機能させ、
前記データ・ブロックの処理は、サイクル=(t−x)に基いてサイクル=tにおける前記データ・ブロックの算定を含み、
xは2よりも大きいか又は2に等しい、
コンピュータ・プログラム。 - メッセージ・ダイジェストを生成するための方法にして、
メッセージがmビットよりも小さい場合、前記メッセージをパッドするステップと、
前記メッセージをW[0]乃至W[n]から成るn個のワードに分割するステップと、
AをH0に等しく設定し、BをH1に等しく設定し、CをH2に等しく設定し、DをH3に等しく設定し、EをH4に等しく設定する処理を実行するステップと、反復実行する場合に使用される値を記憶するためのtと呼ばれるカウンタを設定するステップと、
tを初期値に設定するステップと、
ターミナル値を初期値に設定するステップと、
tが前記ターミナル値に等しくならないように、ステップ(a)乃至(e)を反復的に実行するステップと、
H0をH0+Aに等しく設定し、H1をH1+Bに等しく設定し、H2をH2+Cに等しく設定し、H3をH3+Dに等しく設定し、H4をH4+Eに等しく設定する処理を実行するステップを含み、
前記ステップ(a)乃至(e)が
(a)Sを(T AND MASK)に等しく設定するステップ、
(b)tが第1の定義された値よりも大きいか又はそれに等しい場合、W[t]を第1のシフトビット・オペレーションの値に等しく設定するステップ、
(c)TEMPを第2シフトビット・オペレーションの値 + f(B,C,D) + E + W[s] + Ktに等しく設定するステップ(Ktは一定値を含む)、
(d)EをDに等しく設定し、DをCに等しく設定し、Cを第3のシフトビット・オペレーションの値に等しく設定し、BをAに等しく設定し、AをTEMPに等しく設定する処理を実行するステップ、
(e)tをインクレメントするステップ、
である、方法。 - mは512に等しく、nは8に等しく、各ワードは64ビットに等しい、請求項20に記載の方法。
- 前記第1の定義された値は8に等しい、請求項21に記載の方法。
- W[0]は最も左のワードである、請求項21に記載の方法。
- 前記MASKが、 0x00000007に等しい、請求項21に記載の方法。
- 前記tの初期値が0に等しく、前記ターミナル値は39よりも小さいか又は39に等しい、請求項21に記載の方法。
- tが0よりも大きいか又は0に等しい場合、及びtが9よりも小さいか又は9に等しい場合に、ft(B,C,D)を(B AND C)OR(NOT(B)AND D)に等しく設定し、ft(A,B,C)を(A AND B)OR(NOT(A)AND C)に等しく設定する処理を実行するステップと、tが10よりも大きいか又は10に等しい場合、及びtが19よりも小さいか又は19に等しい場合、ft(B,C,D)を(B XOR C XOR D)に等しく設定し、ft(A,B,C)を(A XOR B XOR C)に等しく設定する処理を実行するステップと、
tが20よりも大きいか又は20に等しい場合、及びtが29よりも小さいか又は29に等しい場合、ft(B,C,D)を(B AND C)OR(B AND D)OR(C AND D)に等しく設定し、ft(A,B,C)を(A AND B)OR(A AND C)OR(B AND C)に等しく設定する処理を実行するステップと、
tが30よりも大きいか又は30に等しい場合、及びtが39よりも小さいか又は39に等しい場合、ft(B,C,D)を(B XOR C XOR D)に等しく設定し、ft(A,B,C)を(A XOR B XOR C)に等しく設定する処理を実行するステップと、
を更に含む、請求項25に記載の方法。 - 前記第1のシフトビット・オペレーションは、更に
shift1bitleft(W[(t+6)AND MASK] XOR W[(t+3)AND MASK]
XOR W[(t+1)AND MASK] XOR W[(t+0)])。
の行程を含む、請求項26に記載の方法。 - 前記第2のシフトビット・オペレーションは、更に
shift5bitsleft(A)。
の行程を含む、請求項27に記載の方法。 - 前記第3のシフトビット・オペレーションは、更に
shift30bitsleft(B)。
の行程を含む、請求項28に記載の方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/127,393 US7151829B2 (en) | 2002-04-22 | 2002-04-22 | System and method for implementing a hash algorithm |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2004004784A true JP2004004784A (ja) | 2004-01-08 |
Family
ID=29215256
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003115786A Pending JP2004004784A (ja) | 2002-04-22 | 2003-04-21 | ハッシュ・アルゴリズムを実装するためのシステム及び方法 |
Country Status (2)
Country | Link |
---|---|
US (1) | US7151829B2 (ja) |
JP (1) | JP2004004784A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010041307A1 (ja) * | 2008-10-07 | 2010-04-15 | 富士通株式会社 | 暗号化装置 |
JP2019071075A (ja) * | 2012-09-28 | 2019-05-09 | インテル・コーポレーション | 複数の128ビットデータパスにおけるsha1ラウンド処理のための命令セット |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20050065976A (ko) * | 2003-12-26 | 2005-06-30 | 한국전자통신연구원 | Sha-1 해쉬값 연산 장치 및 방법 |
KR100901697B1 (ko) * | 2007-07-09 | 2009-06-08 | 한국전자통신연구원 | 저전력 sha-1 해쉬 연산 장치 및 이를 이용한 저전력hmac 암호 장치 |
US10348506B2 (en) | 2016-09-30 | 2019-07-09 | International Business Machines Corporation | Determination of state of padding operation |
EP3873011A1 (en) * | 2020-02-26 | 2021-09-01 | Renesas Electronics America Inc. | Error detection |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4881264A (en) * | 1987-07-30 | 1989-11-14 | Merkle Ralph C | Digital signature system and method based on a conventional encryption function |
US5231668A (en) * | 1991-07-26 | 1993-07-27 | The United States Of America, As Represented By The Secretary Of Commerce | Digital signature algorithm |
IL101623A (en) * | 1992-04-16 | 1997-06-10 | Fortress U & T 2000 Ltd | Digital signature device |
WO1998034403A1 (en) * | 1995-09-29 | 1998-08-06 | Intel Corporation | Apparatus and method for securing captured data transmitted between two sources |
US5903651A (en) * | 1996-05-14 | 1999-05-11 | Valicert, Inc. | Apparatus and method for demonstrating and confirming the status of a digital certificates and other data |
US5809145A (en) * | 1996-06-28 | 1998-09-15 | Paradata Systems Inc. | System for distributing digital information |
JPH10171350A (ja) * | 1996-12-10 | 1998-06-26 | Hitachi Ltd | ハッシュ値生成方法および装置 |
US6021201A (en) * | 1997-01-07 | 2000-02-01 | Intel Corporation | Method and apparatus for integrated ciphering and hashing |
US5892829A (en) * | 1997-01-08 | 1999-04-06 | Bell Communications Research, Inc. | Method and apparatus for generating secure hash functions |
US5953502A (en) * | 1997-02-13 | 1999-09-14 | Helbig, Sr.; Walter A | Method and apparatus for enhancing computer system security |
EP0966810A2 (en) * | 1997-03-10 | 1999-12-29 | Guy L. Fielder | Secure deterministic encryption key generator system and method |
US6003135A (en) * | 1997-06-04 | 1999-12-14 | Spyrus, Inc. | Modular security device |
US5991414A (en) * | 1997-09-12 | 1999-11-23 | International Business Machines Corporation | Method and apparatus for the secure distributed storage and retrieval of information |
US6091821A (en) * | 1998-02-12 | 2000-07-18 | Vlsi Technology, Inc. | Pipelined hardware implementation of a hashing algorithm |
US7299355B2 (en) * | 2001-01-12 | 2007-11-20 | Broadcom Corporation | Fast SHA1 implementation |
US6829355B2 (en) * | 2001-03-05 | 2004-12-07 | The United States Of America As Represented By The National Security Agency | Device for and method of one-way cryptographic hashing |
-
2002
- 2002-04-22 US US10/127,393 patent/US7151829B2/en not_active Expired - Fee Related
-
2003
- 2003-04-21 JP JP2003115786A patent/JP2004004784A/ja active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2010041307A1 (ja) * | 2008-10-07 | 2010-04-15 | 富士通株式会社 | 暗号化装置 |
JP5198572B2 (ja) * | 2008-10-07 | 2013-05-15 | 富士通株式会社 | 暗号化装置 |
JP2019071075A (ja) * | 2012-09-28 | 2019-05-09 | インテル・コーポレーション | 複数の128ビットデータパスにおけるsha1ラウンド処理のための命令セット |
Also Published As
Publication number | Publication date |
---|---|
US7151829B2 (en) | 2006-12-19 |
US20030198342A1 (en) | 2003-10-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9225521B2 (en) | Apparatus and method for skein hashing | |
EP0792041B1 (en) | Method and apparatus for block encryption | |
US6578150B2 (en) | Block cipher method | |
US8086870B2 (en) | Methods and apparatus for hardware normalization and denormalization | |
US6185304B1 (en) | Method and apparatus for a symmetric block cipher using multiple stages | |
US5651069A (en) | Software-efficient message authentication | |
US20210256165A1 (en) | Protecting parallel multiplication operations from external monitoring attacks | |
US20090310775A1 (en) | Using a single instruction multiple data (SIMD) instruction to speed up galois counter mode (GCM) computations | |
US8411855B1 (en) | Size optimization for large elliptic curve cryptography scalar multiplication acceleration tables | |
Baldwin et al. | The rc5, rc5-cbc, rc5-cbc-pad, and rc5-cts algorithms | |
JP2005529364A (ja) | 擬似乱数生成器の出力の予測不可能性を向上させる方法 | |
Yang et al. | A high speed architecture for galois/counter mode of operation (gcm) | |
Boesgaard et al. | The stream cipher rabbit | |
WO2021129470A1 (zh) | 基于多项式完全同态的二进制数据加密系统及方法 | |
Sleem et al. | TestU01 and Practrand: Tools for a randomness evaluation for famous multimedia ciphers | |
Cortez et al. | Cryptographic randomness test of the modified hashing function of SHA256 to address length extension attack | |
US7403615B2 (en) | Methods and apparatus for accelerating ARC4 processing | |
JP2006259735A (ja) | Simd処理を用いた楕円曲線点8倍化 | |
US20020191783A1 (en) | Method and apparatus for creating a message digest using a multiple round, one-way hash algorithm | |
Prasanna et al. | Performance analysis of md5 and sha-256 algorithms to maintain data integrity | |
JP2004004784A (ja) | ハッシュ・アルゴリズムを実装するためのシステム及び方法 | |
CN111712816B (zh) | 使用密码蒙蔽以用于高效地使用蒙哥马利乘法 | |
US7505586B2 (en) | Method for computer-based encryption and decryption of data | |
Baldwin et al. | RFC2040: The RC5, RC5-CBC, RC5-CBC-Pad, and RC5-CTS Algorithms | |
Chowdhury et al. | Progress in Cryptology-INDOCRYPT 2008: 9th International Conference on Cryptology in India, Kharagpur, India, December 14-17, 2008. Proceedings |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060131 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060421 |
|
RD12 | Notification of acceptance of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7432 Effective date: 20060421 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20060421 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20060620 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060718 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20060824 |
|
A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20070330 |
|
RD14 | Notification of resignation of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7434 Effective date: 20090218 |