(57)【要約】【課題】メッセージ・ダイジェストを生成するための方法を提供する。【解決手段】本発明の方法は、データ・ブロックを受けるステップ及びメッセージ・ダイジェストを得るためにそのデータ・ブロックを処理するステップを含み、そのデータ・ブロックを処理するステップは、時間（ｔ−ｘ）に基いて時間（ｔ）におけるデータ・ブロックを算定することを含む。ｘは、２よりも大きいか又は２に等しい。【選択図】　図１
2004004784.tif 000002
【特許請求の範囲】
【請求項１】
メッセージ・ダイジェストを生成する方法であって、
データ・ブロックを受けるステップと、
メッセージ・ダイジェストを得るために前記データ・ブロックを処理するステップとを含み、
前記データ・ブロックを処理するステップは、サイクル＝（ｔ−ｘ）に基いてサイクル＝ｔにおける前記データ・ブロックを算定するステップを含み、
ｘは２よりも大きいか又は２に等しい、
方法。
【請求項２】
前記データ・ブロックが５１２ビットである、請求項１に記載の方法。
【請求項３】
前記データ・ブロックが６４ビット・インクレメントで受領され、及び／又は、処理される、請求項１に記載の方法。
【請求項４】
前記メッセージ・ダイジェストが１６０ビットを含む、請求項２に記載の方法。
【請求項５】
前記メッセージ・ダイジェストが１２８ビットを含む、請求項２に記載の方法。
【請求項６】
前記処理するステップは、
Ｅ（ｔ）＝Ｃ（ｔ−２）；
Ｄ（ｔ）＝Ｓ３０［Ｂ（ｔ−２）］；
Ｃ（ｔ）＝Ｓ３０［Ａ（ｔ−２）］；
Ｂ（ｔ）＝Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１；及び
Ａ（ｔ）＝Ｓ５（Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１）＋ｆｔ（Ａ（ｔ−２），Ｓ３０［Ｂ（ｔ−２）］，Ｃ（ｔ−２））＋Ｄ（ｔ−２）＋Ｗｔ＋Ｋｔ＝Ｓ５（Ｂ（ｔ））ｆｔ（Ａ（ｔ−２），Ｓ３０［Ｂ（ｔ−２）］，Ｃ（ｔ−２））＋Ｄ（ｔ−２）＋Ｗｔ＋Ｋｔ
の行程を含む、請求項４に記載の方法。
【請求項７】
前記処理するステップは、更に
Ｄ［ｔ−１］＝Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ−１］）＜＜＜Ｓａ）＋（（Ｄ［ｔ−２］＋Ｆ（（Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ−１］）＜＜＜Ｓａ）），Ｂ［ｔ−２］，Ｃ［ｔ−２］）＋Ｍ［ｊｂ］＋Ｔ［ｔ−１］）＜＜＜Ｓｂ）；及び
Ｂ［ｔ］＝Ｄ［ｔ−１］＋（（Ｃ［ｔ−１］＋ｆｔ（Ｄ［ｔ−１］，Ａ［ｔ−１］，Ｂ［ｔ−１］）＋Ｍｊ＋Ｔｔ−１）＜＜＜Ｓ）＋（（Ｂ［ｔ−１］＋ｆｔ（（Ｄ［ｔ−１］＋（（Ｃ［ｔ−１］＋ｆｔ（Ｄ［ｔ−１］，Ａ［ｔ−１］，Ｂ［ｔ−１］）Ｍｊ＋Ｔｔ−１）＜＜＜Ｓ）），Ｄ［ｔ−１］，Ａ［ｔ−１］）＋Ｍｊ＋Ｔｔ）＜＜＜Ｓ）
の行程を含む、請求項４に記載の方法。。
【請求項８】
メッセージ・ダイジェストを生成するステップを含み、
前記生成するステップは、前記メッセージ・ダイジェストを得るためにデータ・ブロックを処理するステップを含み、
前記データ・ブロックを処理するステップは、サイクル＝（ｔ−ｘ）に基いてサイクル＝ｔにおける前記データ・ブロックを算定するステップを含み、
ｘは２よりも大きいか又は２に等しい、
改良されたＳＨＡハッシュ・アルゴリズム。
【請求項９】
前記生成するステップは、更に
Ｅ（ｔ）＝Ｃ（ｔ−２）；
Ｄ（ｔ）＝Ｓ３０［Ｂ（ｔ−２）］；
Ｃ（ｔ）＝Ｓ３０［Ａ（ｔ−２）］；
Ｂ（ｔ）＝Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１；及び
Ａ（ｔ）＝Ｓ５（Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１）＋ｆｔ（Ａ（ｔ−２），Ｓ３０［Ｂ（ｔ−２）］，Ｃ（ｔ−２））＋Ｄ（ｔ−２）＋Ｗｔ＋Ｋｔ＝Ｓ５（Ｂ（ｔ））ｆｔ（Ａ（ｔ−２），Ｓ３０［Ｂ（ｔ−２）］，Ｃ（ｔ−２））＋Ｄ（ｔ−２）＋Ｗｔ＋Ｋｔ
の行程を含む、請求項８に記載の改良されたＳＨＡハッシュ・アルゴリズム。
【請求項１０】
メッセージ・ダイジェストを生成するステップを含み、
前記生成するステップは、前記メッセージ・ダイジェストを得るためにデータ・ブロックを処理するステップを含み、
前記データ・ブロックを処理するステップは、サイクル＝（ｔ−ｘ）に基いてサイクル＝ｔにおける前記データ・ブロックを算定するステップを含み、
ｘは２よりも大きいか又は２に等しい、
改良されたＭＤ５ハッシュ・アルゴリズム。
【請求項１１】
前記生成するステップは、更に
Ｄ［ｔ−１］＝Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ−１］）＜＜＜Ｓａ）＋（（Ｄ［ｔ−２］＋Ｆ（（Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ−１］）＜＜＜Ｓａ）），Ｂ［ｔ−２］，Ｃ［ｔ−２］）＋Ｍ［ｊｂ］＋Ｔ［ｔ−１］）＜＜＜Ｓｂ）；及び
Ｂ［ｔ］＝Ｄ［ｔ−１］＋（（Ｃ［ｔ−１］＋ｆｔ（Ｄ［ｔ−１］，Ａ［ｔ−１］，Ｂ［ｔ−１］）＋Ｍｊ＋Ｔｔ−１）＜＜＜Ｓ）＋（（Ｂ［ｔ−１］＋ｆｔ（（Ｄ［ｔ−１］＋（（Ｃ［ｔ−１］＋ｆｔ（Ｄ［ｔ−１］，Ａ［ｔ−１］，Ｂ［ｔ−１］）Ｍｊ＋Ｔｔ−１）＜＜＜Ｓ）），Ｄ［ｔ−１］，Ａ［ｔ−１］）＋Ｍｊ＋Ｔｔ）＜＜＜Ｓ）
の行程を含む、請求項１０に記載の改良されたＭＤ５ハッシュ・アルゴリズム。
【請求項１２】
メッセージ・ダイジェストを生成するためのシステムにして、
データ・ブロックを受けるためのメモリ記憶ロケーションと、
メッセージ・ダイジェストを得るために前記データ・ブロックを処理するためのプロセッサとを含み、
前記データ・ブロックの処理は、サイクル＝（ｔ−ｘ）に基いてサイクル＝ｔにおける前記データ・ブロックを算定し、
ｘは２よりも大きいか又は２に等しい、
システム。
【請求項１３】
前記データ・ブロックが５１２ビットである、請求項１２に記載のシステム。
【請求項１４】
前記メモリ記憶ロケーションが６４ビットのインクレメントで前記データ・ブロックを受領し、及び／又は、処理する、請求項１２に記載のシステム。
【請求項１５】
前記メッセージ・ダイジェストが１６０ビットを含む、請求項１３に記載のシステム。
【請求項１６】
前記メッセージ・ダイジェストが１２８ビットを含む、請求項１３に記載のシステム。
【請求項１７】
前記プロセッサは、
Ｅ（ｔ）＝Ｃ（ｔ−２）；
Ｄ（ｔ）＝Ｓ３０［Ｂ（ｔ−２）］；
Ｃ（ｔ）＝Ｓ３０［Ａ（ｔ−２）］；
Ｂ（ｔ）＝Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１；及び
Ａ（ｔ）＝Ｓ５（Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１）＋ｆｔ（Ａ（ｔ−２），Ｓ３０［Ｂ（ｔ−２）］，Ｃ（ｔ−２））＋Ｄ（ｔ−２）＋Ｗｔ＋Ｋｔ＝Ｓ５（Ｂ（ｔ））ｆｔ（Ａ（ｔ−２），Ｓ３０［Ｂ（ｔ−２）］，Ｃ（ｔ−２））＋Ｄ（ｔ−２）＋Ｗｔ＋Ｋｔ
の行程を実行する、請求項１６に記載のシステム。
【請求項１８】
前記プロセッサは、
Ｄ［ｔ−１］＝Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ−１］）＜＜＜Ｓａ）＋（（Ｄ［ｔ−２］＋Ｆ（（Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ−１］）＜＜＜Ｓａ）），Ｂ［ｔ−２］，Ｃ［ｔ−２］）＋Ｍ［ｊｂ］＋Ｔ［ｔ−１］）＜＜＜Ｓｂ）；及びＢ［ｔ］＝Ｄ［ｔ−１］＋（（Ｃ［ｔ−１］＋ｆｔ（Ｄ［ｔ−１］，Ａ［ｔ−１］，Ｂ［ｔ−１］）＋Ｍｊ＋Ｔｔ−１）＜＜＜Ｓ）＋（（Ｂ［ｔ−１］＋ｆｔ（（Ｄ［ｔ−１］＋（（Ｃ［ｔ−１］＋ｆｔ（Ｄ［ｔ−１］，Ａ［ｔ−１］，Ｂ［ｔ−１］）Ｍｊ＋Ｔｔ−１）＜＜＜Ｓ）），Ｄ［ｔ−１］，Ａ［ｔ−１］）＋Ｍｊ＋Ｔｔ）＜＜＜Ｓ）
の行程を実行する、請求項１６に記載のシステム。
【請求項１９】
メッセージ・ダイジェストを生成するためのコンピュータ・プログラムであって、コンピュータ・システムを、
データ・ブロックを受けるため手段と、
メッセージ・ダイジェストを得るために前記データ・ブロックを処理するための手段として機能させ、
前記データ・ブロックの処理は、サイクル＝（ｔ−ｘ）に基いてサイクル＝ｔにおける前記データ・ブロックの算定を含み、
ｘは２よりも大きいか又は２に等しい、
コンピュータ・プログラム。
【請求項２０】
メッセージ・ダイジェストを生成するための方法にして、
メッセージがｍビットよりも小さい場合、前記メッセージをパッドするステップと、
前記メッセージをＷ［０］乃至Ｗ［ｎ］から成るｎ個のワードに分割するステップと、
ＡをＨ０に等しく設定し、ＢをＨ１に等しく設定し、ＣをＨ２に等しく設定し、ＤをＨ３に等しく設定し、ＥをＨ４に等しく設定する処理を実行するステップと、反復実行する場合に使用される値を記憶するためのｔと呼ばれるカウンタを設定するステップと、
ｔを初期値に設定するステップと、
ターミナル値を初期値に設定するステップと、
ｔが前記ターミナル値に等しくならないように、ステップ（ａ）乃至（ｅ）を反復的に実行するステップと、
Ｈ０をＨ０＋Ａに等しく設定し、Ｈ１をＨ１＋Ｂに等しく設定し、Ｈ２をＨ２＋Ｃに等しく設定し、Ｈ３をＨ３＋Ｄに等しく設定し、Ｈ４をＨ４＋Ｅに等しく設定する処理を実行するステップを含み、
前記ステップ（ａ）乃至（ｅ）が
（ａ）Ｓを（Ｔ　ＡＮＤ　ＭＡＳＫ）に等しく設定するステップ、
（ｂ）ｔが第１の定義された値よりも大きいか又はそれに等しい場合、Ｗ［ｔ］を第１のシフトビット・オペレーションの値に等しく設定するステップ、
（ｃ）ＴＥＭＰを第２シフトビット・オペレーションの値　＋　ｆ（Ｂ，Ｃ，Ｄ）　＋　Ｅ　＋　Ｗ［ｓ］　＋　Ｋｔに等しく設定するステップ（Ｋｔは一定値を含む）、
（ｄ）ＥをＤに等しく設定し、ＤをＣに等しく設定し、Ｃを第３のシフトビット・オペレーションの値に等しく設定し、ＢをＡに等しく設定し、ＡをＴＥＭＰに等しく設定する処理を実行するステップ、
（ｅ）ｔをインクレメントするステップ、
である、方法。
【請求項２１】
ｍは５１２に等しく、ｎは８に等しく、各ワードは６４ビットに等しい、請求項２０に記載の方法。
【請求項２２】
前記第１の定義された値は８に等しい、請求項２１に記載の方法。
【請求項２３】
Ｗ［０］は最も左のワードである、請求項２１に記載の方法。
【請求項２４】
前記ＭＡＳＫが、　０ｘ０００００００７に等しい、請求項２１に記載の方法。
【請求項２５】
前記ｔの初期値が０に等しく、前記ターミナル値は３９よりも小さいか又は３９に等しい、請求項２１に記載の方法。
【請求項２６】
ｔが０よりも大きいか又は０に等しい場合、及びｔが９よりも小さいか又は９に等しい場合に、ｆｔ（Ｂ，Ｃ，Ｄ）を（Ｂ　ＡＮＤ　Ｃ）ＯＲ（ＮＯＴ（Ｂ）ＡＮＤ　Ｄ）に等しく設定し、ｆｔ（Ａ，Ｂ，Ｃ）を（Ａ　ＡＮＤ　Ｂ）ＯＲ（ＮＯＴ（Ａ）ＡＮＤ　Ｃ）に等しく設定する処理を実行するステップと、ｔが１０よりも大きいか又は１０に等しい場合、及びｔが１９よりも小さいか又は１９に等しい場合、ｆｔ（Ｂ，Ｃ，Ｄ）を（Ｂ　ＸＯＲ　Ｃ　ＸＯＲ　Ｄ）に等しく設定し、ｆｔ（Ａ，Ｂ，Ｃ）を（Ａ　ＸＯＲ　Ｂ　ＸＯＲ　Ｃ）に等しく設定する処理を実行するステップと、
ｔが２０よりも大きいか又は２０に等しい場合、及びｔが２９よりも小さいか又は２９に等しい場合、ｆｔ（Ｂ，Ｃ，Ｄ）を（Ｂ　ＡＮＤ　Ｃ）ＯＲ（Ｂ　ＡＮＤ　Ｄ）ＯＲ（Ｃ　ＡＮＤ　Ｄ）に等しく設定し、ｆｔ（Ａ，Ｂ，Ｃ）を（Ａ　ＡＮＤ　Ｂ）ＯＲ（Ａ　ＡＮＤ　Ｃ）ＯＲ（Ｂ　ＡＮＤ　Ｃ）に等しく設定する処理を実行するステップと、
ｔが３０よりも大きいか又は３０に等しい場合、及びｔが３９よりも小さいか又は３９に等しい場合、ｆｔ（Ｂ，Ｃ，Ｄ）を（Ｂ　ＸＯＲ　Ｃ　ＸＯＲ　Ｄ）に等しく設定し、ｆｔ（Ａ，Ｂ，Ｃ）を（Ａ　ＸＯＲ　Ｂ　ＸＯＲ　Ｃ）に等しく設定する処理を実行するステップと、
を更に含む、請求項２５に記載の方法。
【請求項２７】
前記第１のシフトビット・オペレーションは、更に
ｓｈｉｆｔ１ｂｉｔｌｅｆｔ（Ｗ［（ｔ＋６）ＡＮＤ　ＭＡＳＫ］　ＸＯＲ　Ｗ［（ｔ＋３）ＡＮＤ　ＭＡＳＫ］
ＸＯＲ　Ｗ［（ｔ＋１）ＡＮＤ　ＭＡＳＫ］　ＸＯＲ　Ｗ［（ｔ＋０）］）。
の行程を含む、請求項２６に記載の方法。
【請求項２８】
前記第２のシフトビット・オペレーションは、更に
ｓｈｉｆｔ５ｂｉｔｓｌｅｆｔ（Ａ）。
の行程を含む、請求項２７に記載の方法。
【請求項２９】
前記第３のシフトビット・オペレーションは、更に
ｓｈｉｆｔ３０ｂｉｔｓｌｅｆｔ（Ｂ）。
の行程を含む、請求項２８に記載の方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、メッセージ・ダイジェストの生成に関し、特に、ハッシュ・アルゴリズムを実装するためのシステム及び方法に関する。
【０００２】
【従来の技術】
暗号手法は、基本的には、メッセージの内容が容易にアクセスし得ないようにそのメッセージを暗号化及び暗号解読するプロセスから成る。これらのプロセスは、「サイファ（ｃｉｐｈｅｒ）」として知られた特定のアルゴリズムに依存する。メッセージを暗号化及び暗号解読するためには、サイファと関連してキーが使用される。そのキーは、文字ストリングがパスワードとして使用される場合にはあり得ることだが、意味のあるものに見えることがあるが、これを変形するとまったく見当違いなものとなる。即ち、キーの機能は、それが非暗号化テキストから暗号化テキストへのマッピングを決定するビット・ストリングであるということにある。情報へのアクセスを保護することが暗号システムを使用する主要な理由であるけれども、そのようなシステムは、個人の識別のために並びに認証及び非拒絶（ｎｏｎ−ｒｅｐｕｄｉａｔｉｏｎ）のために益々使用されるようになっている。
【０００３】
暗号識別／認証の１つの形態は、ディジタル署名として知られている。ディジタル署名は、メッセージが特定の個人によって生成されたということ及び或る意図された受信者によって受信されたメッセージが特定の個人によって最初に生成されたメッセージであるということを保証するために使用される。更に詳しく云えば、ハッシュ・アルゴリズムは、メッセージの認証を検証するために使用されるメッセージ「指紋（ｆｉｎｇｅｒｐｒｉｎｔｓ）」を生成するためにディジタル署名システムによって使用される望ましいメカニズムである。一方向性（ｏｎｅ−ｗａｙ）ハッシュ・アルゴリズムとして知られている１つのタイプのハッシュ・アルゴリズムは、任意の長さのメッセージを入力として受け、ハッシュ値又はメッセージ・ダイジェストとして知られている一意的な固定長のメッセージを出力する。入力メッセージ及び一方向性ハッシュ・アルゴリズムを与えられてメッセージ・ダイジェストを決定することは容易であるけれども、そのアルゴリズム及びメッセージ・ダイジェストを与えられて入力メッセージを決定することは一般には不可能である。更に、所定のハッシュ・アルゴリズムに入力として個々に供給されたランダム・メッセージが同じメッセージ・ダイジェストを生成させることは一般には不可能であるというようなメッセージ・アルゴリズムが開発されている。従って、一方向性ハッシュ・アルゴリズムを使用して生成されたメッセージ・ダイジェストは、メッセージ指紋としての使用に非常に適している。
【０００４】
【発明が解決しようとする課題】
電子取引に参加しているエンティティの数が増加し続けているので、信頼性の高い且つ効率的な暗号識別／認証に対する要求も増加している。計算的に集中した識別／認証メカニズムの使用と結合した電子取引の数の増加は、その結果として更なる計算資源に対する要求の比例的増加を生じた。この要求を満足させるための１つの方法は、既存の資源を使用して且つ経済上のコスト及び不可避と思われる他のコストをこうむることなく、付加的な／複雑な取引がサポートされ得るような更に効率的なアルゴリズムを開発することである。本願は、ハッシュ・アルゴリズムをインプリメントするためのシステム及び方法を開示する。
【０００５】
【課題を解決するための手段】
メッセージ・ダイジェストを生成するためのシステム及び方法は、データ・ブロックを受け取り、メッセージ・ダイジェストを得るためにそのデータ・ブロックを処理することを含む。そのデータ・ブロックの処理は、時間（ｔ）におけるデータ・ブロックを時間（ｔ−ｘ）に基いて算定（ｅｖａｌｕａｔｅ）することを含む。ｘは、２よりも大きいか又は２に等しい。
【０００６】
【発明の実施の形態】
典型的な実施例は、ハードウェア、ソフトウェア、又はそれらの結合によって実現され得る。少なくとも部分的にハードウェアを含む実施態様のパフォーマンスは、利用可能なハードウェア・テクノロジ及び必要な回路を位置決めするために使用可能なチップ・スペースに依存する。少なくとも部分的にソフトウェアを含む実施態様のパフォーマンスは、ハードウェア・プラットフォーム、選択されたプログラミング言語、及びプログラミング・スタイルのような幾つかの要素に依存し、本願では、論理的処理オペレーション、計算的処理オペレーション、又は他の処理オペレーションを遂行するために共に作用する一組の電気的回路及び（又は）同等のコンポーネントが論理構造体（「構造体」）と呼ばれる。
【０００７】
ハッシュ・アルゴリズムは、ハードウェア又はソフトウェアのどちらで実装されようとも、一般に、３つのコンポーネントに分類可能である。第１のコンポーネント（ブロック）は、処理されるデータの受け取りを担当し、第２のブロックは、データの処理を担当し、第３のブロックは、最終値の記憶を担当する。
【０００８】
典型的な実施例は、第１及び第２のブロックの最適化に焦点を合わせている。第１のブロックに影響を及ぼす２つの要素がある。その要素は、（１６サイクル、８サイクル等のための）エンジンに影響する受信データ（ｉｎｃｏｍｉｎｇ　ｄａｔａ）のためのインターフェース・データ幅（ｉｎｔｅｒｆａｃｅ　ｂａｎｄ　ｗｉｄｔｈ）（「幅（ｗｉｄｔｈ）」）（即ち、３２ビット、６４ビット等）及び第１のブロックに関する方程式（ｅｑｕａｔｉｏｎ）である。複数のサイクルをスキップするために、典型的な実施例はインターフェース・データ幅を変化させる。例えば、１６０ビットのメッセージ・ダイジェストを生成する時、８０サイクルから４０サイクルにサイクル数を減少させるために、反復（ｉｔａｒａｔｉｏｎ）ごとに１サイクルがスキップされなければならない。従って、第２のブロックは、各サイクルごとに更なる３２ビット値を備えなければならない。その結果、第１のブロックから第２のブロックへの各サイクル当たり６４ビットの転送速度が生じる。システムが３２ビット・インターフェースに限定され、且つ第２のブロックが３２ビットよりも大きい（例えば、６４ビット）幅を持ったデータを処理する場合、第２のブロックは、データを処理するために十分な３２ビット値を受け取るまで待つこととなる。
【０００９】
既存のアルゴリズムを考察すると、データは位置決めされるが処理のためには利用されない（ｄａｔａ　ｉｓ　ｌｏｃａｔｅｄ　ｂｕｔ　ｎｏｔ　ｕｔｉｌｉｚｅｄ　ｆｏｒ　ｐｒｏｃｅｓｓｉｎｇ）というサイクルを含むことが理解される。典型的な実施例は、データの位置決め（ｄａｔａ　ｌｏｃａｔｉｎｇ）を含むスキッピング・ステップ（ｓｋｉｐｐｉｎｇ　ｓｔｅｐｓ）によって、第２のブロックの間にデータを処理するに必要なサイクルの総数を減少させる。詳しく云えば、サイクルの方程式は、前のサイクルによって算定（ｖａｌｕｅ）される。例えば、１６０ビットのメッセージ・ダイジェストを生成するために必要なサイクル数を８０サイクルから４０サイクルに減少させるために、時間ｔにおける方程式は、ｔ−２によって算定される。本願においては、第１、第２、及び第３のブロック又はステージを有するアルゴリズムを説明するが、アルゴリズムが、本発明の範囲を逸脱することなく類似又は非類似の機能を有する、より多い又はより少ないブロックを含み得ることは当然である。
【００１０】
ある実施例では、開示されたハッシュ・アルゴリズムは、２０００年１月２７日発行の米国連邦情報・技術局（ＮＩＳＴ）の連邦情報処理標準（ＦＩＰＳ）資料１８６−２：「ディジタル署名標準（Ｄｉｇｉｔａｌ　Ｓｉｇｎａｔｕｒｅ　Ｓｔａｎｄａｒｄ　−ＤＳＳ）」に関連する。ＤＳＳは、安全ハッシュ・アルゴリズム（Ｓｅｃｕｒｅ　Ｈａｓｈｉｎｇ　Ａｌｇｏｒｉｔｈｍ　−ＳＨＡ−１）を詳述した１９９５年４月１７日発行のＮＩＳＴ　ＦＩＰＳ資料１８０−１：「安全ハッシュ標準（Ｓｅｃｕｒｅ　Ｈａｓｈ　Ｓｔａｎｄａｒｄ）」において定義されたような安全ハッシュ標準（ＳＨＳ）に従ってＤＳＳと共に使用するためのハッシュ・アルゴリズムが実装されることを必要とする。この特定の実施例に関しては、典型的なソフトウェアの実施例を実装するために、Ｃ／Ｃ＋＋プログラミング言語が選択されている。
【００１１】
ＳＨＳ／ＳＨＡ−１と同様に、典型的な実施例のシステムは、１６０ビットのメッセージ・ダイジェストの生成を必要とし、それは次のような２つのステップを含む。
（１）メッセージのビット長が５１２ビットの倍数になるよう調節されるようにメッセージをパッドするステップ。
（２）１６０ビットのメッセージ・ダイジェストを生成するためのハッシュ・アルゴリズムへの入力として、メッセージを５１２ビットのブロックの形で供給するステップ。
【００１２】
Ａ．パッディング（Ｐａｄｄｉｎｇ）
入力メッセージは、ＮＩＳＴ　ＦＩＰＳの資料１８０−１において定義されたパッディング・プロセスに従ってパッドされる。ＮＩＳＴ　ＦＩＰＳ資料１８０−１は、次のパッディング及びパッディング・プロセスを定義している。
【００１３】
メッセージ・パッディングの目的は、パッドされたメッセージの全長を５１２の倍数にすることである。ＳＨＡ−１は、メッセージ・ダイジェストを計算するとき、５１２ビットのブロックを順次に処理する。次に、このパッディングがどのように行われるかを示す。概して云えば、５１２＊ｎのパッドされたメッセージを作るために「１」の後にｍ個の「０」が続き、更に６４ビットの整数が続いたものがメッセージの末尾に付加される。その６４ビットの整数は、オリジナル・メッセージの長さＬである。そこで、そのパッドされたメッセージがＳＨＡ−１によってｎ個の５１２ビット・ブロックとして処理される。メッセージは、長さＬ＜２６４を有するものと仮定する。メッセージは、それがＳＨＡ−１に入力される前に、次のように右側にパッドされる：
（ａ）「１」が付加される。
例：オリジナル・メッセージが「０１０１００００」である場合、これは「０１０１００００１」にパッドされる。
（ｂ）「０」が付加される。「０」の数は、メッセージのオリジナル長に依存するであろう。最後の５１２ビット・ブロックの最後の６４ビットがオリジナル・メッセージの長さＬに対して予約される。
例：オリジナル・メッセージは次のビット・ストリングであると仮定する。
０１１００００１　０１１０００１０　０１１０００１１　０１１００１００　０１１００１０１
ステップ（ａ）の後、これは、０１１００００１　０１１０００１０　０１１０００１１　０１１００１００　０１１００１０１　１を与える。Ｌ＝４０であるので、上記におけるビットの数は４１であり、４０７個の「０」が付加され、今や総数を４４８にする。これは、次のような値（１６進数）を与える。
６１６２６３６４　６５８０００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００．
（ｃ）オリジナルメッセージにおけるビットの数であるＬの２ワード表示を得る。
Ｌ＜２３２である場合、第１のワードはすべてゼロである。これら２つのワードをそのパッドされたメッセージに付加する。
例：オリジナルメッセージは（ｂ）におけるようなものであると仮定する。従って、Ｌ＝４０である（すべてのパッディングの前にＬが計算される）。
【００１４】
４０の２ワード表示は１６進数　００００００００　００００００２８である。従って、最終的なパッドされたメッセージは、次のような１６進数である。
６１６２６３６４　６５８０００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００００　００００００２８．
【００１５】
パッドされたメッセージは、或るｎ＞０に対して１６＊ｎ個のワードを含むであろう。パッドされたメッセージは、一連のｎ個のブロックＭ１、Ｍ２、．．．、Ｍｎと見なされる。なお、各Ｍｉは、１６個のワードを含み、Ｍ１は、そのメッセージの最初のキャラクタ（又は、ビット）を含む。
【００１６】
Ｂ．メッセージ・ダイジェストの生成
典型的な実施例は、メッセージ・ダイジェストを生成するための効率的なハッシュ・アルゴリズムを含む。説明及び比較のみのために、５１２ビット・ブロックを処理してメッセージ・ダイジェストを生成するために８０個の計算的サイクルを必要とするハッシュ・アルゴリズムＳＨＡ−１が次に考察される。ＮＩＳＴＦＩＰＳ資料１８０−１は、次のように、ＳＨＡ−１ハッシュ・アルゴリズムを使用してメッセージ・ダイジェストの生成を説明している。
【００１７】
一連の論理関数ｆ０、ｆ１、．．．、ｆ７９がＳＨＡ−１において使用される。各ｆｔ（０＜＝ｔ＜＝７９）は、３つの３２ビット・ワードＢ、Ｃ、Ｄに関して操作し、出力として３２ビット・ワードを生じる。ｆｔ（Ｂ，Ｃ，Ｄ）は、次のように定義される。
ｆｔ（Ｂ，Ｃ，Ｄ）＝（Ｂ　ＡＮＤ　Ｃ）ＯＲ（（ＮＯＴ　Ｂ）ＡＮＤ　Ｄ）　（０＜＝ｔ＜＝１９）
ｆｔ（Ｂ，Ｃ，Ｄ）＝　Ｂ　ＸＯＲ　Ｃ　ＸＯＲ　Ｄ　（２０＜＝ｔ＜＝３９）
ｆｔ（Ｂ，Ｃ，Ｄ）＝（Ｂ　ＡＮＤ　Ｃ）ＯＲ（Ｂ　ＡＮＤ　Ｄ）ＯＲ（Ｃ　ＡＮＤ　Ｄ）　（４０＜＝ｔ＜＝５９）
ｆｔ（Ｂ，Ｃ，Ｄ）＝　Ｂ　ＸＯＲ　Ｃ　ＸＯＲ　Ｄ　（６０＜＝ｔ＜＝７９）
【００１８】
一連の一定ワード（ｃｏｎｓｔａｎｔ　ｗｏｒｄ）Ｋ（０）、Ｋ（１）、．．．、Ｋ（７９）がＳＨＡ−１において使用される。これらは、１６進数で次のように与えられる。
Ｋｔ＝　５Ａ８２７９９９　（０＜＝ｔ＜＝１９）
Ｋｔ＝　６ＥＤ９ＥＢＡ１　（２０＜＝ｔ＜＝３９）
Ｋｔ＝　８Ｆ１ＢＢＣＤＣ　（４０＜＝ｔ＜＝５９）
Ｋｔ＝　ＣＡ６２Ｃ１Ｄ６　（６０＜＝ｔ＜＝７９）
【００１９】
最後のパッドされたメッセージを使用して、メッセージ・ダイジェストが計算される。その計算は、各々が３２ビット・ワードから成る２つのバッファ及び８０個の３２ビット・ワードを使用する。最初の５ワード・バッファのワードは、Ａ、Ｂ、Ｃ、Ｄ、Ｅと呼ばれる。２番目の５ワード・バッファのワードは、Ｈ０、Ｈ１、Ｈ２、Ｈ３、Ｈ４と呼ばれる。８０ワード・シーケンスのワードは、Ｗ０、Ｗ１、．．．、Ｗ７９と呼ばれる。単一のワード・バッファＴＥＭＰも使用される。
【００２０】
メッセージ・ダイジェストを生成するために、１６ワード・ブロックＭ０、Ｍ１、．．．、Ｍｎが順次処理される。Ｍｉの処理は８０個のステップを伴う。
【００２１】
いずれのブロックを処理する前にも、｛Ｈｉ｝が次のように初期設定される。即ち、１６進数表示では、
Ｈ０＝　６７４５２３０１
Ｈ１＝　ＥＦＣＤＡＢ８９
Ｈ２＝　９８ＢＡＤＣＦＥ
Ｈ３＝　１０３２５４７６
Ｈ４＝　Ｃ３Ｄ２Ｅ１Ｆ０．
【００２２】
次に、Ｍ１、Ｍ２、．．．、Ｍｎが処理される。Ｍｉの処理は、次のように進行する。（ａ）Ｍｉを１６個のワードＷ０、Ｗ１、．．．、Ｗ１５に分割する。Ｗ０は、最も左のワードである。
（ｂ）ｔ＝１６乃至７９に対して、Ｗｔ＝Ｓ１（Ｗｔ−３ＸＯＲ　Ｗｔ−８ＸＯＲ　Ｗｔ−１４ＸＯＲ　Ｗｔ−１６）とする。
（ｃ）Ａ＝Ｈ０、Ｂ＝Ｈ１、Ｃ＝Ｈ２、Ｄ＝Ｈ３、Ｅ＝Ｈ４とする。
（ｄ）ｔ＝０乃至７９に対して、次のような操作を行う。
ＴＥＭＰ＝Ｓ５（Ａ）＋ｆｔ（Ｂ，Ｃ，Ｄ）＋Ｅ＋Ｗｔ＋Ｋｔ；
Ｅ＝Ｄ；　Ｄ＝Ｃ；　Ｃ＝Ｓ３０（Ｂ）；　Ｂ＝Ａ；　Ａ＝ＴＥＭＰ；
（ｅ）Ｈ０＝Ｈ０＋Ａ、Ｈ１＝Ｈ１＋Ｂ、Ｈ２＝Ｈ２＋Ｃ、Ｈ３＝Ｈ３＋Ｄ、Ｈ４＝Ｈ４＋Ｅ　とする。
【００２３】
Ｍｎを処理した後、メッセージ・ダイジェストは、５個のワードＨ０、Ｈ１、Ｈ２、Ｈ３、Ｈ４によって表された１６０ビットのストリングとなる。
【００２４】
表１は、オリジナルＦＩＰＳ　１８０−１アルゴリズムがサンプル・メッセージに適用された場合の中間値及び最終の一般化されたメッセージ・ダイジェストを含む。表１に示されるように、メッセージ・ダイジェストの生成のためには８０サイクルが必要である。
【００２５】
2004004784.tif 000003
2004004784.tif 000004
2004004784.tif 000005
2004004784.tif 000006
【００２６】
本発明の実施例は、オリジナルのＳＨＡ−１アルゴリズムに比べて５０パーセント以上も計算サイクルの必要数を減少させるメッセージ・ダイジェスト・アルゴリズムを含んでいる。更に、そのアルゴリズムが反復的に繰り返される場合、必要な計算サイクルの数は更に減少する。例えば、オリジナルのＳＨＡ−１は８０サイクルであるが、その方法を１回適用した後はサイクル数が４０に減少し、その方法を２回適用した後ではサイクル数は２０に減少し、その後では１６に減少する等々である。次の表２は、反復ごとにスキップされる各サイクル数に対する計算サイクルの可能な減少を表す部分的な表である。
【００２７】
2004004784.tif 000007
【００２８】
典型的な実施例は、後述のメッセージ生成アルゴリズムを含んでいるが、メッセージ・ダイジェスト生成アルゴリズムが本発明の範囲を超えることなく変更され得ることは当然である。以下は、典型的な実施例に対するメッセージ生成アルゴリズムである。
（ａ）データ・ブロックが５１２ビットよりも小さい場合、それは、前述のように、パッディングによってパッドされなければならない。
（ｂ）５１２ビットのメッセージＭを８個の６４ビット・ワードＷ［０］、．．．、Ｗ［８］に分割する。Ｗ［０］は最も左のワードである。
2004004784.tif 000008
【００２９】
ブロックに影響を及ぼす２つの要素がある。１つの要素は、８サイクルの間エンジンに影響を与える受信データのためのインターフェース・データ幅である。残りの６４サイクルに影響を与える別の要素がそのブロックの内部方程式である。複数のサイクルをスキップするために、方程式が変化し、その唯一の変化がＷオペランドの幅である。その幅は、スキップしたいサイクルの数に関連する。例えば、８０サイクルから４０サイクルに進みたい場合、各反復ごとに１サイクルがスキップされる。これは、サイクルごとに更なる３２ビット値を有する第２ブロックを与える必要があることを意味する。典型的な実施例は、オリジナルＳＨＡ方程式に対して一時に処理される３２ビットのデータの代わりに一時に６４ビットのデータを処理するための次のような第１ブロック方程式を提供する。
Ｗｔ＝Ｓ１（ＷｔＸＯＲ　Ｗｔ＋１　ＸＯＲ　Ｗｔ＋３　ＸＯＲ　Ｗｔ＋６）
但し、ｔは、現在のサイクルであり、Ｓ１は、１ビットだけ左に循環的に回転した値（ｖａｌｕｅ　ｃｉｒｃｕｌａｒｌｙ　ｒｏｔａｔｅｄ　ｌｅｆｔ　ｂｙ　ｏｎｅ　ｂｉｔ）に等しく、Ｗｔは、処理のために第２ブロックに送られた値である。
【００３０】
第２ブロックは、サイクル毎に及び５１２ビット・ブロックの処理の終了時に更新される。ｔ−１による時間ｔにおけるオリジナルＳＨＡの第２ブロック方程式は、次のようになる。
Ｅ（ｔ）＝Ｄ（ｔ−１）
Ｄ（ｔ）＝Ｃ（ｔ−１）
Ｃ（ｔ）＝Ｓ３０［Ｂ（ｔ−１）］
Ｂ（ｔ）＝Ａ（ｔ−１）
Ａ（ｔ）＝Ｓ５（Ａ（ｔ−１））＋ｆｔ（Ｂ（ｔ−１），Ｃ（ｔ−１），Ｄ（ｔ−１））＋Ｅ（ｔ−１）＋Ｗｔ＋Ｋｔ
【００３１】
上記の方程式を算定する場合、Ａ（ｔ）の決定だけは複雑な計算を必要とすることに注目すべきである。ｔ−２による時間ｔ−１の時のオリジナルＳＨＡ方程式に対する第２ブロック方程式は次のようになる。
Ｅ（ｔ−１）＝Ｄ（ｔ−２）
Ｄ（ｔ−１）＝Ｃ（ｔ−２）
Ｃ（ｔ−１）＝Ｓ３０［Ｂ（ｔ−２）］
Ｂ（ｔ−１）＝Ａ（ｔ−２）
Ａ（ｔ−１）＝Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１
【００３２】
ここでもう一度、Ａ（ｔ−１）の決定が複雑な計算を必要とすることに注目すべきである。典型的な実施例は、第２ブロックに必要なサイクル数の減少をもたらす。これは、例えば、第２方程式セットにおける値を第１方程式セットにおける値に代入することによって達成され、その結果、次のような修正された方程式が生じ得る。
Ｅ（ｔ）＝Ｃ（ｔ−２）
Ｄ（ｔ）＝Ｓ３０［Ｂ（ｔ−２）］
Ｃ（ｔ）＝Ｓ３０［Ａ（ｔ−２）］
Ｂ（ｔ）＝Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１
Ａ（ｔ）＝Ｓ５（Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１）＋ｆｔ（Ａ（ｔ−２），Ｓ３０［Ｂ（ｔ−２）］，Ｃ（ｔ−２））＋Ｄ（ｔ−２）＋Ｗｔ＋Ｋｔ＝Ｓ５（Ｂ（ｔ））＋ｆｔ（Ａ（ｔ−２），Ｓ３０［Ｂ（ｔ−２）］，Ｃ（ｔ−２））＋Ｗｔ＋Ｋｔ
【００３３】
この手順は、本発明の範囲を逸脱することなくｔ−３、ｔ−４、ｔ−５等における値によって時間ｔにおける値を計算することにより、サイクル数の大きな減少を得るように反復可能である。
【００３４】
第３ブロックは、５１２ビットのデータの処理の終了時に更新される。その処理が８０サイクルを必要とする場合、第３ブロックは８０サイクル毎に更新される。１ステップをスキップすれば、サイクルの総数は４０になる。それは、第３ブロックが４０サイクル毎に更新されることを意味する。従って、第３ブロックは、スキップするサイクル数に関係なく同じままである。唯一の相違点は、それがスキップのサイクル数に関連した種々の時間に更新されることである。
【００３５】
表３は、前述のＦＩＰＳ　１８０−１アルゴリズムが適用された同じサンプルメッセージに上記のアルゴリズムが適用された場合の中間値及び最終的に生成されたメッセージ・ダイジェストを含む。表２に示されるように、ＦＩＰＳ　１８０−１アルゴリズムを使用するときのメッセージ・ダイジェスト生成のために必要とされた８０サイクルに比べると、４０サイクルがそのメッセージ・ダイジェスト生成のために使用される。
【００３６】
2004004784.tif 000009
2004004784.tif 000010
【００３７】
Ｃ．ハードウェア・インプリメンテーション
前述のように、典型的な実施例は、ソフトウェア・インプリメンテーション及びハードウェア・インプリメンテーションの両方を提供する。当業者に知られている任意のハードウェア・テクノロジを使用してメッセージ・ダイジェスト生成アルゴリズムがインプリメントされ得ること及び別のハードウェア・テクノロジの使用が本発明の範囲を超えないことは当然である。更に、メッセージ・ダイジェスト生成アルゴリズムが、レジスタ、アダー、マルチプレクサ（ＭＵＸ）、ＡＮＤゲート、ＯＲゲート、及びＸＯＲゲートを含む当業者に知られた構成の任意の組み合わせを使用してインプリメントされ得ることも当然である。この開示の目的から見て、レジスタ又は他の構造体が直接に参照されるとき、それは、その参照に関するコンテキストが指示する場所に含まれた値に対する参照であるということも当然である。
【００３８】
過度な計算上のオーバヘッド及び効率の低下を避けるために、所与の反復中にスキップされるべきサイクル数は、剰余がゼロ・マイナス１である場合、１、３、４、７、９、１５、１９及び３９のような８０の素数の組み合わせでなければならない。スキッピング・ステップは、スキップされたステップ数Ｘが方程式　Ｙ−［８０／（Ｘ＋１）−１］を満足する場合に成功する。Ｙは、分数部分及び整数部分から成る。更に、その整数部分は、そのブロックを処理するために必要なサイクル数を表す。Ｘは、スキップされたステップ数を表す。分数部分がゼロに等しくない場合、過剰なオーバヘッドが導入される。
【００３９】
第１のハードウェア・インプリメンテーションは、７．５ｎｓのサイクル・タイムを有するＣＭＯＳ７ＳＦ／ＣＭＯＳ８ＳＦテクノロジを使用する。図１は、ＣＭＯＳ７ＳＦ／ＣＭＯＳ８ＳＦテクノロジを使用して形成された例示的なメッセージ・ダイジェスト・ジェネレータ１０を示し、図２は、図１におけるアダー構造体４０の詳細図である。図１を参照すると、参照番号１２−２８で示されたレジスタＲ００−Ｒ１７は５１２ビット・メッセージを受ける。参照番号１２のＲ００／Ｒ０１は、ＸＯＲ３０−３４及び右シフタ３６によって発生された６４ビット値を受ける。アダー構造体４０は、参照番号４２−５０におけるレジスタＡ乃至Ｅに記憶された値、レジスタ５２に記憶された一定の値、構造体５４によって生成されたＦｔ（Ａ，Ｂ，Ｃ）の値、及び参照番号５８−６６で示されたレジスタＨ０乃至Ｈ４に記憶された値を受ける。レジスタＡ乃至Ｅ４２−５０及びレジスタＨ０乃至Ｈ４は、アダー構造体４０からの値を受ける。メッセージ・ダイジェストを生成するために必要な最終サイクル中、生成されたメッセージ・ダイジェストは、レジスタＨ０乃至Ｈ４に記憶され、更に、レジスタＡ乃至Ｅにも記憶される。
【００４０】
次に図２を参照する。なお、ｔ＝「現在のサイクル」及びｎ＝「サイクルの総数」である。ｔ＝０乃至ｔ＝ｎ−１に対して、アダー構造体１００は次のように動作する。Ａの５ビット・シフトＳ５（Ａ）及びｆｔ（Ｂ，Ｃ，Ｄ）がアダー１０２に入力として供給される。Ｅ及びＷｔ，Ｒ０１がアダー１０４に入力として供給される。アダー１０４の出力及びＫがアダー１０６に入力として供給される。アダー１０２及びアダー１０６の出力がアダー１０８に入力として供給される。アダー１０８の出力が参照番号４４におけるレジスタＢ（図１）に記憶される。ｆｔ（Ａ，Ｓ３０（Ｂ），Ｃ）及びＤがアダー１１０に入力として供給される。アダー１１０の出力及びＫｔがアダー１１２に入力として供給される。アダー１１２の出力がＷｔ，Ｒ００と共にアダー１１４に入力として供給される。アダー１１４の出力及びアダー１０８の出力における左シフト５ビット１１８がアダー１１６に入力として供給される。アダー１１６の出力が参照番号４２におけるレジスタＡ（図１）に記憶される。参照番号１２２のＡ（ｔ−２）の３０ビット・シフトが参照番号４２のレジスタＣに記憶される。参照番号１２４におけるＢ（ｔ−２）の３０ビット・シフトが参照番号４８のレジスタＤに記憶される。参照番号１２６のＣ（ｔ−２）が参照番号５０のレジスタＥに記憶される。
【００４１】
ｔ＝ｎに対して、アダー構造体１００は次のように動作する。レジスタＨ０５８及びレジスタＡ４２の出力がアダー１３０に入力として供給される。アダー１３０の出力がレジスタＡ４２及びレジスタＨ０５８に記憶される。レジスタＨ１６０及びレジスタＢ４４の出力がアダー１３２に入力として供給される。アダー１３２の出力がレジスタＨ１６０及びレジスタＢ４４に記憶される。レジスタＨ２６２及びレジスタＣ４６の出力がアダー１３４に入力として供給される。アダー１３４の出力がレジスタＨ２６２及びレジスタＣ４６に記憶される。レジスタＨ３６４及びレジスタＤ４８の出力がアダー１３６に入力として供給される。アダー１３６の出力がレジスタＨ３６４及びレジスタＤ４８に記憶される。レジスタＨ４６６及びレジスタＥ５０の出力がアダー１３８に入力として供給される。アダー１３８の出力がレジスタＨ４６６及びレジスタＥ５０に記憶される。
【００４２】
図３及び図４は、７．５ｎｓのサイクル・タイムを有するＣＭＯＳ７ＳＦ／ＣＭＯＳ８ＳＦテクノロジを利用した第１の代替えハードウェア・インプリメンテーションを示す。図３を参照すると、参照番号３５２−３６８のレジスタＲ００乃至Ｒ１７はアダー３７８からデータを受け取る。アダー３７８は、定数レジスタ３８０、データ・インターフェース、及び１ビット左シフタ３７６からデータを受け取る。ＸＯＲ３７０は、参照番号３６８のＲ１６、Ｒ１７及び参照番号３６６のＲ１４、Ｒ１５から値を受け取る。ＸＯＲ３７２は、ＸＯＲ３７０及び参照番号３６２のＲ１０、Ｒ１１から値を受け取る。ＸＯＲ３７４は、ＸＯＲ３７２及び参照番号３５６のＲ０４、Ｒ０５から値を受け取る。１ビット左シフタ３７６は、ＸＯＲ３７４から値を受け取る。参照番号３５４のＲ０２、Ｒ０３は、データ・インターフェース及び１ビット左シフタ３７６から値を受け取る。アダー構造体４０６は、参照番号３５２のＲ００、Ｒ０１、参照番号３８２−３９０のレジスタＡ乃至Ｅ、参照番号３９６−４０４のレジスタＨ０乃至Ｈ４、参照番号３９２のＦｔ（Ｂ，Ｃ，Ｄ）及び参照番号３９４のＦｔ（Ａ，Ｂ，Ｃ）から値を受け取る。参照番号３９２のＦｔ（Ｂ，Ｃ，Ｄ）は、レジスタＤ３８４、レジスタＣ３８６、及びレジスタＢ３８８から値を受け取る。参照番号３９４のＦｔ（Ａ，Ｂ，Ｃ）は、レジスタＣ３８６、レジスタＢ３８８、及びレジスタＡ３９０から値を受け取る。参照番号３８２−３９０のレジスタＡ乃至Ｅ及び参照番号３９６−４０４のレジスタＨ０乃至Ｈ４は、アダー構造体４０６から値を受け取る。
【００４３】
図４は、図３のアダー構造体４０６を示す。なお、ｔ＝「現在のサイクル」及びｎ＝「サイクルの総数」である。ｔ＝０乃至ｔ＝ｎ−１に対して、アダー構造体４０６は次のように動作する。アダー４５０は、Ｓ５（Ａ）及びｆｔ（Ｂ，Ｃ，Ｄ）を入力として受け取る。アダー４５２がＥ及びＷｔ，Ｒ０１を入力として受け取る。アダー４５０及びアダー４５２の出力はアダー４５４に対する入力である。アダー４５６は、Ｄ及びＷｔ，Ｒ００を入力として受け取る。アダー４５８は、アダー４５６の出力及びｆｔ（Ａ，Ｓ３０（Ｂ），Ｃ）を入力として受け取る。アダー４６２は、アダー４５８の出力及びアダー４５４の出力５ビット左シフト４６０の出力を入力として受け取る。アダー４６２の出力は、参照番号３９０のレジスタＡ（図３）に記憶される。アダー４５４の出力は、参照番号３８８のレジスタＢ（図３）に記憶される。Ｓ３０［Ａ］がライン４６４を介して参照番号３８６のレジスタＣ（図３）に記憶される。Ｓ３０［Ｂ］がライン４６６を介して参照番号３８４のレジスタＤ（図３）に記憶される。Ｃがライン４６８を介して参照番号３８２のレジスタＥ（図３）に記憶される。
【００４４】
ｔ＝ｎに対して、アダー構造体４０６は次のように動作する。レジスタＨ０４０４及びレジスタＡ３９０がアダー４７０に入力として供給される。アダー４７０の出力がレジスタＡ３９０及びレジスタＨ０４０４に記憶される。レジスタＨ１４０２及びレジスタＢ３８８がアダー４７２に入力として供給される。アダー４７２の出力がレジスタＨ１４０２及びレジスタＢ３８８に記憶される。レジスタＨ２４００及びレジスタＣ３８６がアダー４７４に入力として供給される。アダー４７４の出力がレジスタＨ２４００及びレジスタＣ３８６に記憶される。レジスタＨ３３９８及びレジスタＤ３８４がアダー４７６に入力として供給される。アダー４７６の出力がレジスタＨ３３９８及びレジスタＤ３８４に記憶される。レジスタＨ４３９６及びレジスタＥ３８２がアダー４７８に入力として供給される。アダー４７８の出力がレジスタＨ４３９６及びレジスタＥ３８２に記憶される。
【００４５】
第２のハードウェア・インプリメンテーションは、６００ｐｓのサイクル・タイムを有するＳＡ３８（ＣＭＯＳ９Ｓ）テクノロジを使用し、その結果、同じテクノロジを使用してインプリメントされたオリジナルＳＨＡ−１アルゴリズムに比べると５０パーセントの全体的なサイクル減少が生じる。図５は、ＳＡ３８テクノロジを使用して形成されたメッセージ・ジェネレータ２１０を示す。図５を参照すると、参照番号２１２−２２６で示されたレジスタＲ００−Ｒ１５が５１２ビットのメッセージを受け取る。Ｒ００２１２は、ＸＯＲ２４０の１ビット右シフト２４２の出力を受け取る。ＸＯＲ２４０は、Ｒ０１２１２及びＸＯＲ２３８の出力を受け取る。ＸＯＲ２３８は、Ｒ０６２１８及びＸＯＲ２３６の出力を受け取る。ＸＯＲ２３６は、Ｒ１２２２４及びＲ１４２２６の出力を受け取る。Ｒ０１２１２は、ＸＯＲ２３２の１ビット右シフト２３４の出力を受け取る。ＸＯＲ２３２は、Ｒ０２２１４及びＸＯＲ２３０の出力を受け取る。ＸＯＲ２３０は、Ｒ０７２１８及びＸＯＲ２２８の出力を受け取る。ＸＯＲ２２８は、Ｒ１３２２４及びＲ１５２２６の出力を受け取る。
【００４６】
ＭＵＸ２５６は、Ｒ１４２２６、Ｂ２７２のシフト右５ビット２４６、ＫＥＹ２４８、ｆｔ（Ａ，Ｂ，Ｃ）２４４，Ｈ４２５２、Ｈ２２５０、及びＨ０２５４から値を受け取る。ＴＥＭＰ２５８は、ＭＵＸ２５６から値を受け取る。ＭＵＸ２７８は、Ｅ２６０、Ｃ２６２、Ａ２６４、Ｄ２７０、及びアダー２８２から値を受け取る。ＴＥＭＰ２８０は、ＭＵＸ２７８から値を受け取る。アダー２８２は、ＴＥＭＰ２５８及びＴＥＭＰ２８０から値を受け取る。
【００４７】
ＭＵＸ２９０は、Ｅ２６０、ＫＥＹ２７７、ｆｔ（Ｂ，Ｃ，Ｄ）２７６、Ａ２６４の右シフト５ビット２６８、Ｂ２７２、Ｈ３２８６、及びＨ１２８４から値を受け取る。ＴＥＭＰ２９４は、ＭＵＸ２９０から値を受け取る。ＭＵＸ２９２は、Ｄ２７０、Ｂ２７２、Ｒ１５２２６、アダー２８２の回転右５ビット２８８、及びアダー２９８から値を受け取る。ＴＥＭＰ２９６は、ＭＵＸ２９２から値を受け取る。アダー２９８は、ＴＥＭＰ２９４及びＴＥＭＰ２９６から値を受け取る。Ｅ２６０は、Ｃ２６２、アダー２８２、及び入力データ２８１から値を受け取る。Ｃ２６２は、入力データ２８１、アダー２８２、及びＡ２６４の右シフト２ビット２６６から値を受け取る。Ａ２６４は、入力データ２８１及びアダー２８２から値を受け取る。Ｄ２７０は、入力データ２８１、アダー２９８、及びＢ２７２の右シフト２ビット２７４から値を受け取る。Ｂ２７２は、入力データ２８１及びアダー２９８から値を受け取る。Ｈ４２５２は、入力データ２８３及びアダー２８２から値を受け取る。Ｈ２２５０は、入力データ２８３及びアダー２８２から値を受け取る。Ｈ０２５４は、入力データ２８３及びアダー２８２から値を受け取る。Ｈ３２８６は、入力データ２７９及びアダー２９８から値を受け取る。Ｈ１２８４は、入力データ２７９及びアダー２９８から値を受け取る。
【００４８】
上記の実施例はＦＩＰＳ　１８０−１に関連するけれども、本発明が当業者に知られた任意の互換性あるアルゴリズムに関してインプリメントされ得ることは明らかである。例えば、別の実施例では、既知のＭＤ５アルゴリズムに関連した別のメッセージ生成アルゴリズムが提供される。ＳＨＡアルゴリズムのようなその別のＭＤ５アルゴリズムは、５１２ビット・ブロックを操作する。しかし、それは、１２８ビット・メッセージ・ダイジェストを生成する。説明及び比較のみを目的として、５１２ビット・ブロックを処理し且つメッセージ・ダイジェストを生成するためには６４計算サイクルを必要とする既知のＭＤ５ハッシュ・アルゴリズムが次に検討される。
（ａ）データ・ブロックが５１２ビットよりも小さい場合、それはパッドされなければならない。
（ｂ）５１２ビットのメッセージＭを８個の６４ビットワードＷ［０］、．．．、Ｗ［８］に分割する。Ｗ［０］は最も左のワードである。それらをエンジンに転送する。
2004004784.tif 000011
2004004784.tif 000012
【００４９】
その別の実施例では、処理時間が減少し、それは、メッセージ・ダイジェスト生成に必要な処理時間も減少させる。ＳＨＡアルゴリズムに対して行われたように、その後のサイクルの値が前のサイクルにおいて置換され、その結果、同じサイクルにおいて２つの方程式の処理が生じた。その結果は、メッセージ・ダイジェストの生成が、完了するためには３３サイクルを必要とするであろうということである。オリジナルのＭＤ５方程式は次のようになる。
Ａ［ｔ−１］＝Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ］）＜＜＜Ｓａ）
Ｄ［ｔ］＝Ａ［ｔ−１］＋（（Ｄ［ｔ−２］＋Ｆ（Ａ［ｔ−２］，Ｂ［ｔ−２］，Ｃ［ｔ−２］）＋Ｍ［ｊａ］＋Ｔ［ｔ］）＜＜＜Ｓｂ）
［ｔ−２］によってＤ［ｔ］を決定することにより、それらの方程式は次のようになる。
Ｄ［ｔ−１］＝Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ−１］）＜＜＜Ｓａ）＋（（Ｄ［ｔ−２］＋Ｆ（（Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ−１］）＜＜＜Ｓａ）），Ｂ［ｔ−２］，Ｃ［ｔ−２］）＋Ｍ［ｊｂ］＋Ｔ［ｔ−１］）＜＜＜Ｓｂ）
Ｂ［ｔ］＝Ｄ［ｔ−１］＋（（Ｃ［ｔ−１］＋ｆｔ（Ｄ［ｔ−１］，Ａ［ｔ−１］，Ｂ［ｔ−１］）＋Ｍｊ＋Ｔｔ−１）＜＜＜Ｓ）＋（（Ｂ［ｔ−１］＋ｆｔ（（Ｄ［ｔ−１］＋（（Ｃ［ｔ−１］＋ｆｔ（Ｄ［ｔ−１］，Ａ［ｔ−１］，Ｂ［ｔ−１］）＋Ｍｊ＋Ｔｔ−１）＜＜＜Ｓ）），Ｄ［ｔ−１］，Ａ［ｔ−１］）＋Ｍｊ＋Ｔｔ）＜＜＜Ｓ）
従って、本発明を利用するとき、１２８ビット・メッセージ・ダイジェストの生成は、３２＋１サイクルを必要とし、一方、オリジナルＭＤ５アルゴリズムは６４＋１サイクルを必要とする。
【００５０】
以下は、その別の実施例に対するメッセージ生成アルゴリズムである。その実施例は後述のメッセージ生成アルゴリズムを含むけれども、その望ましいメッセージ・ダイジェスト生成アルゴリズムが本発明の範囲を超えることなく変更され得ることは当然である。
（ａ）データ・ブロックが５１２ビットよりも小さい場合、それはパッドされなければならない。
（ｂ）５１２ビットのメッセージＭを８個の６４ビット・ワードＷ［０］、．．．、Ｗ［７］に分割する。Ｗ［０］は最も左のワードである。それらをエンジンに転送する。それらは、内部的に３２ビットのチャンク（ｃｈｕｎｋ）に分割されるであろう。
2004004784.tif 000013
2004004784.tif 000014
【００５１】
図６、図７、及び図８は、上記の例示的なＭＤ５アルゴリズムに対する例示的ハードウェア・インプリメンテーションを示す。そのメッセージ・ダイジェスト生成アルゴリズムが当業者にとって既知の任意のハードウェア・テクノロジを使用してインプリメントされ得ること及び別のハードウェア・テクノロジの使用が本発明の範囲を超えないことは当然である。更に、そのメッセージ・ダイジェスト生成アルゴリズムが、レジスタ、アダー、マルチプレクサ（ＭＵＸ）、ＡＮＤゲート、ＯＲゲート、及びＸＯＲゲートを含む当業者には既知の構造体の任意の組み合わせを使用してインプリメントされ得ること、従って、そのようなハードウェア・インプリメンテーションが本願において開示された例示的なハードウェア・インプリメンテーションに限定されないことは当然である。この開示の目的から見て、レジスタ又は他の構造体が直接に参照されるとき、それは、その参照に関するコンテキストが指示する場所に含まれた値に対する参照であるということも当然である。
【００５２】
図６を参照すると、データがデータ入力ブロック５００によって受け取られる。アダー構造体５３０は、データ入力ブロック５００、コンスタント・キー・レジスタ５０２、５０４、レジスタＡ乃至Ｄ５０６−５１２、レジスタＨ０乃至Ｈ３５２２−５２８から値を受ける。アダー５３０は、Ｆｔ（Ｄ，Ａ，Ｂ）５１４、Ｆｔ（Ｄ，Ａ，Ｂ）５１６、Ｆｔ（Ｂ，Ｃ，Ｄ）５１８、及びＦｔ（Ａ，Ｂ，Ｃ）５２０による値も受ける。アダー構造体５３０からの出力は、レジスタＡ乃至Ｄ５０６−５１２及びレジスタＨ０乃至Ｈ３５２２−５２８に記憶される。
【００５３】
図７は、更に、図６の入力ブロック５００を示す。レジスタＲ００乃至Ｒ１５はデータを受ける。ＭＵＸ５８２は、レジスタＲ０３５７４、Ｒ０７５６６、Ｒ１１５５８、及びＲ１５５５０から値を受ける。ＭＵＸ５８４は、レジスタＲ０２５７６、Ｒ０６５６８、Ｒ１０５６０、及びＲ１４５５２から値を受ける。ＭＵＸ５８６は、レジスタＲ０１５７８、Ｒ０５５７０、Ｒ０９５６２、及びＲ１３５５４から値を受ける。ＭＵＸ５８８は、レジスタＲ００５８０、Ｒ０４５７２、Ｒ０８５６４、及びＲ１２５５６から値を受ける。ＭＵＸ５９０及びＭＵＸ５９２は、それぞれ、ＭＵＸ５８２、ＭＵＸ５８４、ＭＵＸ５８６、及びＭＵＸ５８８から値を受ける。
【００５４】
図８は、更に、図６のアダー構造体５３０を示す。なお、ｔ＝「現在のサイクル」であり、ｎ＝「サイクルの総数」である。ｔ＝０乃至ｔ＝ｎ−１に対して、アダー構造体５３０は次のようの動作する。アダー６００が一定キー・レジスタ５０２（図６）及びレジスタＣ５０８（図６）から入力値を受ける。アダー６００及びＭＵＸ５９２（図７）の出力は、アダー６０２に入力される。アダー６０２の出力は、レジスタ６０４に入力される。ｆｔ及びレジスタ６０４に記憶された値は、アダー６０６に入力される。アダー６０６の出力におけるシフト左Ｓｊａビット６０８は、レジスタＢ５１０の出力と共にアダー６１０に入力される。アダー６１０の出力は、レジスタＣ５０８に記憶される。アダー６１２は、一定キー・レジスタ５０４及びレジスタＣ５０８から値を受ける。アダー６１２及びＭＵＸ５９０（図７）の出力は、アダー６１４に入力される。アダー６１４の出力は、レジスタ６１６に記憶される。レジスタ６１６に記憶された値及びｆｔがアダー６１８に入力される。アダー６１８の出力におけるシフト左Ｓｊｂビット６２０は、アダー６１０の出力と共にアダー６２２に入力される。アダー６２２の出力は、レジスタＢ５１０に記憶される。レジスタＣ５０８の値は、ライン６２４を介してレジスタＡ５１２に記憶される。レジスタＢ５１０の値は、ライン６２６を介してレジスタＤ５０６に記憶される。
【００５５】
ｔ＝ｎに対して、アダー４０６（図３）は次のように動作する。図６のレジスタＨ０５２８及びレジスタＡ５１２がアダー６２８に入力として供給される。アダー６２８の出力がレジスタＡ５１２及びレジスタＨ０５２８に記憶される。図６のレジスタＨ１５２６及びレジスタＢ５１０がアダー６３０に入力として供給される。アダー６３０の出力がレジスタＨ１５２６及びレジスタＢ５１０に記憶される。図６のレジスタＨ２５２４及びレジスタＣ５０８がアダー６３２に入力として供給される。アダー６３２の出力がレジスタＨ２５２４及びレジスタＣ５０８に記憶される。図６のレジスタＨ３５２２及びレジスタＤ５０６がアダー６３４に入力として供給される。アダー６３４の出力がレジスタＨ３５２２及びレジスタＤ５０６に記憶される。
【００５６】
上記の実施例に関する記述は単に説明のためのものである。上記のように、それらのプロセスを実施するためのコンピュータ・インプリメントされたプロセス及び装置の形式の実施例も含まれ得る。フロッピ・ディスケット、ＣＤ−ＲＯＭ、ハード・ドライブ、又は他の任意のコンピュータ可読記憶媒体のような実体のある媒体において具体化された、命令を含むコンピュータ・プログラム・コードの形式の実施例も含まれ得る。この場合、コンピュータ・プログラム・コードがコンピュータにロードされ、コンピュータによって実行されるとき、コンピュータは本発明を実施するための装置となる。更に、コンピュータ・プログラム・コードの形式で、例えば、それが記憶媒体に記憶されようとも、コンピュータにロードされようとも、及び（又は）コンピュータによって実行されようとも、或いは変調された搬送波であろうと又はなかろうと、電気的配線又はケーブルのような伝送媒体を介して、光ファイバを通して、又は電磁放射を介して伝送されたデータ信号としての実施例も含まれ得る。なお、コンピュータ・プログラムがコンピュータにロードされそしてコンピュータによって実行されるとき、コンピュータは本発明を実施するための装置になる。コンピュータ・プログラム・コード・セグメントは、汎用マイクロプロセッサにインプリメントされるとき、特定の論理回路を作成するようにマイクロプロセッサを構成する。
【００５７】
典型的な実施例に関連して本発明を説明したが、本発明の技術的範囲を逸脱することなく種々の変更が行われ、均等物がその構成要素に代用され得ることは当業者には明らかである。更に、本発明の本質的な範囲から逸脱することなく、本発明の教示するところに状況又は材料を適応させるための多くの修正が行われ得る。従って、本発明は、本発明を実行するための開示された特定の実施例に限定されず、本発明は、特許請求の範囲に入るすべての実施例を含むものである。
【００５８】
まとめとして、本発明の構成に関して以下の事項を開示する。
【００５９】
（１）メッセージ・ダイジェストを生成する方法であって、
データ・ブロックを受けるステップと、
メッセージ・ダイジェストを得るために前記データ・ブロックを処理するステップとを含み、
前記データ・ブロックを処理するステップは、サイクル＝（ｔ−ｘ）に基いてサイクル＝ｔにおける前記データ・ブロックを算定するステップを含み、
ｘは２よりも大きいか又は２に等しい、
方法。
（２）前記データ・ブロックが５１２ビットである、上記（１）に記載の方法。
（３）前記データ・ブロックが６４ビット・インクレメントで受領され、及び／又は、処理される、上記（１）に記載の方法。
（４）前記メッセージ・ダイジェストが１６０ビットを含む、上記（２）に記載の方法。
（５）前記メッセージ・ダイジェストが１２８ビットを含む、上記（２）に記載の方法。
（６）前記処理するステップは、
Ｅ（ｔ）＝Ｃ（ｔ−２）；
Ｄ（ｔ）＝Ｓ３０［Ｂ（ｔ−２）］；
Ｃ（ｔ）＝Ｓ３０［Ａ（ｔ−２）］；
Ｂ（ｔ）＝Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１；及び
Ａ（ｔ）＝Ｓ５（Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１）＋ｆｔ（Ａ（ｔ−２），Ｓ３０［Ｂ（ｔ−２）］，Ｃ（ｔ−２））＋Ｄ（ｔ−２）＋Ｗｔ＋Ｋｔ＝Ｓ５（Ｂ（ｔ））ｆｔ（Ａ（ｔ−２），Ｓ３０［Ｂ（ｔ−２）］，Ｃ（ｔ−２））＋Ｄ（ｔ−２）＋Ｗｔ＋Ｋｔ
の行程を含む、上記（４）に記載の方法。
（７）前記処理するステップは、更に
Ｄ［ｔ−１］＝Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ−１］）＜＜＜Ｓａ）＋（（Ｄ［ｔ−２］＋Ｆ（（Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ−１］）＜＜＜Ｓａ）），Ｂ［ｔ−２］，Ｃ［ｔ−２］）＋Ｍ［ｊｂ］＋Ｔ［ｔ−１］）＜＜＜Ｓｂ）；及び
Ｂ［ｔ］＝Ｄ［ｔ−１］＋（（Ｃ［ｔ−１］＋ｆｔ（Ｄ［ｔ−１］，Ａ［ｔ−１］，Ｂ［ｔ−１］）＋Ｍｊ＋Ｔｔ−１）＜＜＜Ｓ）＋（（Ｂ［ｔ−１］＋ｆｔ（（Ｄ［ｔ−１］＋（（Ｃ［ｔ−１］＋ｆｔ（Ｄ［ｔ−１］，Ａ［ｔ−１］，Ｂ［ｔ−１］）Ｍｊ＋Ｔｔ−１）＜＜＜Ｓ）），Ｄ［ｔ−１］，Ａ［ｔ−１］）＋Ｍｊ＋Ｔｔ）＜＜＜Ｓ）
の行程を含む、上記（４）に記載の方法。。
（８）メッセージ・ダイジェストを生成するステップを含み、
前記生成するステップは、前記メッセージ・ダイジェストを得るためにデータ・ブロックを処理するステップを含み、
前記データ・ブロックを処理するステップは、サイクル＝（ｔ−ｘ）に基いてサイクル＝ｔにおける前記データ・ブロックを算定するステップを含み、
ｘは２よりも大きいか又は２に等しい、
改良されたＳＨＡハッシュ・アルゴリズム。
（９）前記生成するステップは、更に
Ｅ（ｔ）＝Ｃ（ｔ−２）；
Ｄ（ｔ）＝Ｓ３０［Ｂ（ｔ−２）］；
Ｃ（ｔ）＝Ｓ３０［Ａ（ｔ−２）］；
Ｂ（ｔ）＝Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１；及び
Ａ（ｔ）＝Ｓ５（Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１）＋ｆｔ（Ａ（ｔ−２），Ｓ３０［Ｂ（ｔ−２）］，Ｃ（ｔ−２））＋Ｄ（ｔ−２）＋Ｗｔ＋Ｋｔ＝Ｓ５（Ｂ（ｔ））ｆｔ（Ａ（ｔ−２），Ｓ３０［Ｂ（ｔ−２）］，Ｃ（ｔ−２））＋Ｄ（ｔ−２）＋Ｗｔ＋Ｋｔ
の行程を含む、上記（８）に記載の改良されたＳＨＡハッシュ・アルゴリズム。
（１０）メッセージ・ダイジェストを生成するステップを含み、
前記生成するステップは、前記メッセージ・ダイジェストを得るためにデータ・ブロックを処理するステップを含み、
前記データ・ブロックを処理するステップは、サイクル＝（ｔ−ｘ）に基いてサイクル＝ｔにおける前記データ・ブロックを算定するステップを含み、
ｘは２よりも大きいか又は２に等しい、
改良されたＭＤ５ハッシュ・アルゴリズム。
（１１）前記生成するステップは、更に
Ｄ［ｔ−１］＝Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ−１］）＜＜＜Ｓａ）＋（（Ｄ［ｔ−２］＋Ｆ（（Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ−１］）＜＜＜Ｓａ）），Ｂ［ｔ−２］，Ｃ［ｔ−２］）＋Ｍ［ｊｂ］＋Ｔ［ｔ−１］）＜＜＜Ｓｂ）；及び
Ｂ［ｔ］＝Ｄ［ｔ−１］＋（（Ｃ［ｔ−１］＋ｆｔ（Ｄ［ｔ−１］，Ａ［ｔ−１］，Ｂ［ｔ−１］）＋Ｍｊ＋Ｔｔ−１）＜＜＜Ｓ）＋（（Ｂ［ｔ−１］＋ｆｔ（（Ｄ［ｔ−１］＋（（Ｃ［ｔ−１］＋ｆｔ（Ｄ［ｔ−１］，Ａ［ｔ−１］，Ｂ［ｔ−１］）Ｍｊ＋Ｔｔ−１）＜＜＜Ｓ）），Ｄ［ｔ−１］，Ａ［ｔ−１］）＋Ｍｊ＋Ｔｔ）＜＜＜Ｓ）
の行程を含む、上記（１０）に記載の改良されたＭＤ５ハッシュ・アルゴリズム。
（１２）メッセージ・ダイジェストを生成するためのシステムにして、
データ・ブロックを受けるためのメモリ記憶ロケーションと、
メッセージ・ダイジェストを得るために前記データ・ブロックを処理するためのプロセッサとを含み、
前記データ・ブロックの処理は、サイクル＝（ｔ−ｘ）に基いてサイクル＝ｔにおける前記データ・ブロックを算定し、
ｘは２よりも大きいか又は２に等しい、
システム。
（１３）前記データ・ブロックが５１２ビットである、上記（１２）に記載のシステム。
（１４）前記メモリ記憶ロケーションが６４ビットのインクレメントで前記データ・ブロックを受領し、及び／又は、処理する、上記（１２）に記載のシステム。
（１５）前記メッセージ・ダイジェストが１６０ビットを含む、上記（１３）に記載のシステム。
（１６）前記メッセージ・ダイジェストが１２８ビットを含む、上記（１３）に記載のシステム。
（１７）前記プロセッサは、
Ｅ（ｔ）＝Ｃ（ｔ−２）；
Ｄ（ｔ）＝Ｓ３０［Ｂ（ｔ−２）］；
Ｃ（ｔ）＝Ｓ３０［Ａ（ｔ−２）］；
Ｂ（ｔ）＝Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１；及び
Ａ（ｔ）＝Ｓ５（Ｓ５（Ａ（ｔ−２））＋ｆｔ（Ｂ（ｔ−２），Ｃ（ｔ−２），Ｄ（ｔ−２））＋Ｅ（ｔ−２）＋Ｗｔ−１＋Ｋｔ−１）＋ｆｔ（Ａ（ｔ−２），Ｓ３０［Ｂ（ｔ−２）］，Ｃ（ｔ−２））＋Ｄ（ｔ−２）＋Ｗｔ＋Ｋｔ＝Ｓ５（Ｂ（ｔ））ｆｔ（Ａ（ｔ−２），Ｓ３０［Ｂ（ｔ−２）］，Ｃ（ｔ−２））＋Ｄ（ｔ−２）＋Ｗｔ＋Ｋｔ
の行程を実行する、上記（１６）に記載のシステム。
（１８）前記プロセッサは、
Ｄ［ｔ−１］＝Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ−１］）＜＜＜Ｓａ）＋（（Ｄ［ｔ−２］＋Ｆ（（Ｂ［ｔ−２］＋（（Ｆ（Ｂ［ｔ−２］，Ｃ［ｔ−２］，Ｄ［ｔ−２］）＋Ａ［ｔ−２］＋Ｍ［ｊａ］＋Ｔ［ｔ−１］）＜＜＜Ｓａ）），Ｂ［ｔ−２］，Ｃ［ｔ−２］）＋Ｍ［ｊｂ］＋Ｔ［ｔ−１］）＜＜＜Ｓｂ）；及び
Ｂ［ｔ］＝Ｄ［ｔ−１］＋（（Ｃ［ｔ−１］＋ｆｔ（Ｄ［ｔ−１］，Ａ［ｔ−１］，Ｂ［ｔ−１］）＋Ｍｊ＋Ｔｔ−１）＜＜＜Ｓ）＋（（Ｂ［ｔ−１］＋ｆｔ（（Ｄ［ｔ−１］＋（（Ｃ［ｔ−１］＋ｆｔ（Ｄ［ｔ−１］，Ａ［ｔ−１］，Ｂ［ｔ−１］）Ｍｊ＋Ｔｔ−１）＜＜＜Ｓ）），Ｄ［ｔ−１］，Ａ［ｔ−１］）＋Ｍｊ＋Ｔｔ）＜＜＜Ｓ）
の行程を実行する、上記（１６）に記載のシステム。
（１９）メッセージ・ダイジェストを生成するためのコンピュータ・プログラムであって、コンピュータ・システムを、
データ・ブロックを受けるため手段と、
メッセージ・ダイジェストを得るために前記データ・ブロックを処理するための手段として機能させ、
前記データ・ブロックの処理は、サイクル＝（ｔ−ｘ）に基いてサイクル＝ｔにおける前記データ・ブロックの算定を含み、
ｘは２よりも大きいか又は２に等しい、
コンピュータ・プログラム。
（２０）メッセージ・ダイジェストを生成するための方法にして、
メッセージがｍビットよりも小さい場合、前記メッセージをパッドするステップと、
前記メッセージをＷ［０］乃至Ｗ［ｎ］から成るｎ個のワードに分割するステップと、
ＡをＨ０に等しく設定し、ＢをＨ１に等しく設定し、ＣをＨ２に等しく設定し、ＤをＨ３に等しく設定し、ＥをＨ４に等しく設定する処理を実行するステップと、反復実行する場合に使用される値を記憶するためのｔと呼ばれるカウンタを設定するステップと、
ｔを初期値に設定するステップと、
ターミナル値を初期値に設定するステップと、
ｔが前記ターミナル値に等しくならないように、下記のステップ（ａ）乃至（ｅ）を反復的に実行するステップと、
（ａ）Ｓを（Ｔ　ＡＮＤ　ＭＡＳＫ）に等しく設定するステップ
（ｂ）ｔが第１の定義された値よりも大きいか又はそれに等しい場合、Ｗ［ｔ］を第１のシフトビット・オペレーションの値に等しく設定するステップ
（ｃ）ＴＥＭＰを第２シフトビット・オペレーションの値　＋　ｆ（Ｂ，Ｃ，Ｄ）　＋　Ｅ　＋　Ｗ［ｓ］　＋　Ｋｔに等しく設定するステップ（Ｋｔは一定値を含む）
（ｄ）ＥをＤに等しく設定し、ＤをＣに等しく設定し、Ｃを第３のシフトビット・オペレーションの値に等しく設定し、ＢをＡに等しく設定し、ＡをＴＥＭＰに等しく設定する処理を実行するステップ
（ｅ）ｔをインクレメントするステップ
Ｈ０をＨ０＋Ａに等しく設定し、Ｈ１をＨ１＋Ｂに等しく設定し、Ｈ２をＨ２＋Ｃに等しく設定し、Ｈ３をＨ３＋Ｄに等しく設定し、Ｈ４をＨ４＋Ｅに等しく設定する処理を実行するステップと、
を含む、方法。
（２１）ｍは５１２に等しく、ｎは８に等しく、各ワードは６４ビットに等しい、上記（２０）に記載の方法。
（２２）前記第１の定義された値は８に等しい、上記（２１）に記載の方法。
（２３）Ｗ［０］は最も左のワードである、上記（２１）に記載の方法。
（２４）前記マスクが、　０ｘ０００００００７に等しい、上記（２１）に記載の方法。
（２５）前記ｔの初期値が０に等しく、前記ターミナル値は３９よりも小さいか又は３９に等しい、上記（２１）に記載の方法。
（２６）ｔが０よりも大きいか又は０に等しい場合、及びｔが９よりも小さいか又は９に等しい場合に、ｆｔ（Ｂ，Ｃ，Ｄ）を（Ｂ　ＡＮＤ　Ｃ）ＯＲ（ＮＯＴ（Ｂ）ＡＮＤ　Ｄ）に等しく設定し、ｆｔ（Ａ，Ｂ，Ｃ）を（Ａ　ＡＮＤ　Ｂ）ＯＲ（ＮＯＴ（Ａ）ＡＮＤ　Ｃ）に等しく設定する処理を実行するステップと、
ｔが１０よりも大きいか又は１０に等しい場合、及びｔが１９よりも小さいか又は１９に等しい場合、ｆｔ（Ｂ，Ｃ，Ｄ）を（Ｂ　ＸＯＲ　Ｃ　ＸＯＲ　Ｄ）に等しく設定し、ｆｔ（Ａ，Ｂ，Ｃ）を（Ａ　ＸＯＲ　Ｂ　ＸＯＲ　Ｃ）に等しく設定する処理を実行するステップと、
ｔが２０よりも大きいか又は２０に等しい場合、及びｔが２９よりも小さいか又は２９に等しい場合、ｆｔ（Ｂ，Ｃ，Ｄ）を（Ｂ　ＡＮＤ　Ｃ）ＯＲ（Ｂ　ＡＮＤ　Ｄ）ＯＲ（Ｃ　ＡＮＤ　Ｄ）に等しく設定し、ｆｔ（Ａ，Ｂ，Ｃ）を（Ａ　ＡＮＤ　Ｂ）ＯＲ（Ａ　ＡＮＤ　Ｃ）ＯＲ（Ｂ　ＡＮＤ　Ｃ）に等しく設定する処理を実行するステップと、
ｔが３０よりも大きいか又は３０に等しい場合、及びｔが３９よりも小さいか又は３９に等しい場合、ｆｔ（Ｂ，Ｃ，Ｄ）を（Ｂ　ＸＯＲ　Ｃ　ＸＯＲ　Ｄ）に等しく設定し、ｆｔ（Ａ，Ｂ，Ｃ）を（Ａ　ＸＯＲ　Ｂ　ＸＯＲ　Ｃ）に等しく設定する処理を実行するステップと、
を更に含む、上記（２５）に記載の方法。
（２７）前記第１のシフトビット・オペレーションは、更に
ｓｈｉｆｔ１ｂｉｔｌｅｆｔ（Ｗ［（ｔ＋６）ＡＮＤ　ＭＡＳＫ］　ＸＯＲ　Ｗ［（ｔ＋３）ＡＮＤ　ＭＡＳＫ］
ＸＯＲ　Ｗ［（ｔ＋１）ＡＮＤ　ＭＡＳＫ］　ＸＯＲ　Ｗ［（ｔ＋０）］）。
の行程を含む、上記（２６）に記載の方法。
（２８）前記第２のシフトビット・オペレーションは、更に
ｓｈｉｆｔ５ｂｉｔｓｌｅｆｔ（Ａ）。
の行程を含む、上記（２７）に記載の方法。
（２９）前記第３のシフトビット・オペレーションは、更に
ｓｈｉｆｔ３０ｂｉｔｓｌｅｆｔ（Ｂ）。
の行程を含む、上記（２８）に記載の方法。
【図面の簡単な説明】
【図１】１６０ビットのメッセージを生成するために多くとも４１サイクルしか必要としない１６０ビット・メッセージ・ダイジェスト・ジェネレータをインプリメントするためのハードウェア図である。
【図２】図１に示されたアダー構造体の詳細図である。
【図３】１６０ビットのメッセージを生成するために多くとも４１サイクルしか必要としない１６０ビット・メッセージ・ダイジェスト・ジェネレータをインプリメントするための別のハードウェア図である。
【図４】図３に示されたアダー構造体の詳細図である。
【図５】１６０ビットのメッセージを生成するために多くとも２０５サイクルしか必要としない１６０ビット・メッセージ・ダイジェスト・ジェネレータをインプリメントするためのハードウェア図である。
【図６】１２８ビットのメッセージを生成するために多くとも３３サイクルしか必要としない１２８ビット・メッセージ・ダイジェスト・ジェネレータをインプリメントするためのハードウェア図である。
【図７】図６に示された入力ブロック構造体の詳細図である。
【図８】図６に示されたアダー構造体の詳細図である。
【図１】
2004004784.tif 000015
【図２】
2004004784.tif 000016
【図３】
2004004784.tif 000017
【図４】
2004004784.tif 000018
【図５】
2004004784.tif 000019
【図６】
2004004784.tif 000020
【図７】
2004004784.tif 000021
【図８】
2004004784.tif 000022