(57)【特許請求の範囲】
【請求項１】
データバッファを処理するためのコンピューティングデバイスであって、当該コンピューティングデバイスは：
バッファ長及び複数のデータセグメントを有する任意長のデータバッファにアクセスすることであって、各データセグメントが、ゼロ超かつ前記バッファ長より小さいセグメント長を有し、１つ以上のワードを備え；
前記データセグメントの各々を単一のデータレジスタに直接読み出すことであって、前記単一のデータレジスタは複数のデータ経路を有しており、各データセグメントの各ワードを前記単一のデータレジスタの異なるデータ経路に直接読み出し、前記データセグメントの各々を単一のデータレジスタに直接読み出すことは、各データセグメントから一度に１つのワードを順次直接読み出すことを備え；
当該コンピューティングデバイスのマイクロプロセッサのシングルコアにより、シリアルデータ処理アルゴリズムを前記単一のデータレジスタの前記データ経路の各々に対して実質的に並行に実行して、各データ経路について結果を生成し；
前記の結果を組み合わせて前記シリアルデータ処理アルゴリズムの出力を形成する；
データバッファ処理モジュール
を備える、コンピューティングデバイス。
【請求項２】
前記データバッファ処理モジュールは、暗号ハッシュアルゴリズムに対する拡張として具現化される、
請求項１に記載のコンピューティングデバイス。
【請求項３】
前記データバッファ処理モジュールは、前記シングルコアのシングルスレッドにおける実行のために構成される、
請求項１に記載のコンピューティングデバイス。
【請求項４】
前記データバッファ処理モジュールは、当該コンピューティングデバイスの単一命令複数データ能力を有するプロセッサにおける実行のために構成される、
請求項１乃至３のいずれかに記載のコンピューティングデバイス。
【請求項５】
前記データバッファ処理モジュールは、シングルスレッドのソフトウェアアプリケーションを用いる使用のために構成される、
請求項１乃至３のいずれかに記載のコンピューティングデバイス。
【請求項６】
コンピューティングデバイスによって実行されたことに応答して、該コンピューティングデバイスに、
データバッファを複数のデータセグメントに分割することであって、各データセグメントが、ゼロ超かつ前記データバッファの長さより小さいセグメント長を有し、１つ以上のワードを備えることと、
各データセグメントの各ワードを、当該コンピューティングデバイスの単一のデータレジスタの異なるデータ経路実行ユニットに直接読み出すことであって、前記データセグメントの各々を単一のデータレジスタに読み出すことは、各データセグメントから前記単一のデータレジスタへ一度に１つのワードを順次読み出すことを備えることと、
前記コンピューティングデバイスのマイクロプロセッサのシングルコアにより、暗号ハッシュアルゴリズムを前記単一のデータレジスタの前記データ経路実行ユニットの各々に対して実質的に並行に実行して、各データ経路実行ユニットの結果を得ることと、
前記データ経路実行ユニットにおいて得られた結果を連結することと、
前記暗号ハッシュアルゴリズムを前記連結した結果に対して実行して、前記暗号ハッシュアルゴリズムの出力を得ることと
を実行させる、プログラム。
【請求項７】
前記コンピューティングデバイスに、前記データレジスタの幅及び前記暗号ハッシュアルゴリズムによって指定されるワードサイズに基づいて、前記セグメント長を定義させる、
請求項６に記載のプログラム。
【請求項８】
前記コンピューティングデバイスに、インターリーブ手法で前記複数のデータセグメントを作成させる、
請求項６に記載のプログラム。
【請求項９】
前記コンピューティングデバイスに、前記暗号ハッシュアルゴリズムに関連付けられるブロックサイズを決定させ、前記データバッファの長さが前記ブロックサイズの倍数となるように、前記データバッファをパディングさせる、
請求項６乃至８のいずれかに記載のプログラム。
【請求項１０】
前記コンピューティングデバイスに、前記データバッファの長さが前記データセグメントを掛けたブロックサイズと等しくなるように、固定のパターンのデータビットを前記データバッファに付加させる、
請求項９に記載のプログラム。
【請求項１１】
前記コンピューティングデバイスに、前記コンピューティングデバイスのマイクロプロセッサの特性に基づいて、前記データセグメントの数を決定させる、
請求項６乃至８のいずれかに記載のプログラム。
【請求項１２】
前記コンピューティングデバイスに、シリアルデータ処理アルゴリズムの特性に基づいて、前記データセグメントの数を決定させる、
請求項６乃至８のいずれかに記載のプログラム。
【請求項１３】
前記暗号ハッシュアルゴリズムは、セキュアハッシュアルゴリズム又はＭＤ５アルゴリズムを備える、
請求項６乃至８のいずれかに記載のプログラム。
【請求項１４】
請求項６乃至１３のいずれか一項に記載のプログラムを記憶する、マシン読取可能記憶媒体。
【請求項１５】
任意長のデータバッファを処理するための方法であって、
前記データバッファを複数のデータセグメントとして定義するステップであって、各データセグメントは、ゼロ超かつ前記データバッファの長さより小さいセグメント長を有し、１つ以上のワードを備える、ステップと、
前記データセグメントを単一のデータレジスタにストリーミングするステップであって、該単一のデータレジスタは複数のデータ経路実行ユニットを有し、各データセグメントの各ワードは、単一のデータポインタを使用して異なるデータ経路実行ユニットにストリーミングされ、前記データセグメントの各々を単一のデータレジスタにストリーミングすることは、各データセグメントから前記単一のデータレジスタへ一度に１つのワードを順次ストリーミングすることを備える、ステップと、
コンピューティングデバイスのマイクロプロセッサのシングルコアにより、シリアルデータ処理アルゴリズムを前記単一のデータレジスタの前記データ経路実行ユニットの各々において実質的に並行に実行して、各データ経路実行ユニットについて結果を得るステップと、
前記の結果を組み合わせて、前記シリアルデータ処理アルゴリズムの出力を形成するステップと
を含む、方法。
【請求項１６】
前記データレジスタの幅及び前記シリアルデータ処理アルゴリズムによって指定されるワードサイズに基づいて、前記セグメント長を決定するステップを備える、
請求項１５に記載の方法。
【請求項１７】
前記データバッファを複数のデータセグメントとして定義するステップは、前記データバッファを、インターリーブされる手法で前記複数のデータセグメントへと分割するステップを含む、
請求項１５に記載の方法。
【請求項１８】
前記データバッファは複数のデータワードを備え、各ワードは複数のデータビットを備え、当該方法は、各データセグメントがデータワードのアレイを備えるように、前記データバッファ内の各データワードを、異なるデータセグメントに割り当てるステップを含む、
請求項１７に記載の方法。
【請求項１９】
各結果は、複数のデータワードを備え、各データワードは複数のデータビットを備え、前記の組み合わせる処理は、前記の結果を前記データワードでインターリーブすることを含む、
請求項１５乃至１８のいずれかに記載の方法。
【請求項２０】
各データセグメントに対してハッシュダイジェストを生成するステップを更に含む、
請求項１５乃至１８のいずれかに記載の方法。
【請求項２１】
前記ハッシュダイジェストを組み合わせて、新たなデータバッファを形成するステップと、該新たなデータバッファに対して暗号ハッシュ関数を実行するステップとを更に含む、
請求項２０に記載の方法。
【請求項２２】
前記シリアルデータ処理アルゴリズムに関連付けられるブロックサイズを決定するステップと、前記データバッファの長さが前記ブロックサイズの倍数となるように前記データバッファをパディングするステップとを更に含む、
請求項１５乃至１８のいずれかに記載の方法。
【請求項２３】
前記データバッファの長さが、前記データセグメントの数を掛けた前記ブロックサイズと等しくなるように、固定のパターンのデータビットを前記データバッファに付加するステップを更に含む、
請求項２２に記載の方法。
【請求項２４】
前記の組み合わせる処理は、前記の結果を連結することと、該連結された結果に対して前記シリアルデータ処理アルゴリズムを実行することとを含む、
請求項１５乃至１８のいずれかに記載の方法。
【請求項２５】
コンピューティングデバイスのマイクロプロセッサの特性又は前記シリアルデータ処理アルゴリズムの特性に基づいて、前記データセグメントの数を決定するステップを更に含む、
請求項１５乃至１８のいずれかに記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、単一データバッファの並行処理に関する。
【０００２】
本出願は、米国特許法第１１９条（ｅ）の規定の下、２０１２年７月１１日出願の米国仮出願第６１／６７０，４７２号及び２０１２年９月２８日出願の米国特許出願第１３／６３１，７６１号の優先権を主張する。
【背景技術】
【０００３】
データファイルやコンピュータプログラムのセキュリティを検証するためのソフトウェアは、オペレーティングシステムブートシーケンス、プログラムコード又はデータファイルのロード、ウェブブラウズ、データ通信及びデータストレージのような、多くの異なるコンテキストにおいて広く行き渡っている。認証及び／又は暗号化に使用されるようなシリアルデータ処理アルゴリズムは、データの単一のバッファに対して、連鎖する従属的な方法で作用し得る。これらのアルゴリズムは、データのあるブロックの処理の結果から得られる出力が、多くの場合、後続のブロックの処理に必要とされるために順次連鎖していくことにより、制約される可能性がある。
【発明の概要】
【０００４】
例えばＭＤ５（メッセージダイジェストアルゴリズム）並びにＳＨＡ１、ＳＨＡ２５６及びＳＨＡ５１２（セキュアハッシュアルゴリズム）のような暗号ハッシュ関数は、汎用プロセッサの計算に関してコストが高い可能性がある。そのようなハッシュ関数は、データの単一のバッファに対して順次作用し、ハッシュダイジェスト状態を、各データブロックから導出される計算結果により更新し、相互に依存する複数の処理ラウンドを使用する。単一のバッファのブロックの順次処理は、最新のプロセッサの性能を制限する。ベクトル単一命令複数データ（ＳＩＭＤ）ユニットを使用するマルチバッファ処理のような方法が、複数の独立のデータバッファに対して作用することが可能な場合の用途につき、良い性能のために提案されているが、これらの方法は、単一のバッファのハッシュを要する用途には適用可能ではない。ツリーハッシュは、複数のコア又はエンジンにわたるものではあるが、使用されている別の技術である。
【０００５】
本開示において説明される概念は、限定ではなく例として、添付の図面において図示される。図の簡潔性及び明瞭性のために、図面に示される要素は、必ずしもスケーリングして描かれてはいない。例えば一部の要素の寸法は、明瞭性のために他の要素に対して誇張されることがある。さらに、適切であると考えられる場合、参照符号は、対応する要素又は類似の要素を示すために図面において繰り返し用いられている。
【図面の簡単な説明】
【０００６】
【図１】開示される方法を実施するのに用いることが可能なコンピューティングデバイスの少なくとも１つの実施形態を示す、簡略化されたブロック図である。
【図２】単一のデータバッファの並行処理のためのシステムの少なくとも１つの実施形態を示す、簡略化されたモジュール図である。
【図３】単一のデータバッファの並行処理のための方法の少なくとも１つの実施形態を示す、簡略化されたフロー図である。
【図４】単一のデータバッファの並行処理の少なくとも１つの実施形態の簡略化された例を示す図である。
【図５】単一のデータバッファの並行処理の少なくとも１つの実施形態の簡略化された例を示す図である。
【発明を実施するための形態】
【０００７】
本開示の概念は、様々な修正及び代替的な形式を許容するが、その具体的な実施形態が、例示として図面に示されており、本明細書において詳細に説明されることになる。しかしながら、本開示の概念を、開示される特定の形態に限定するという意図はなく、むしろ反対に、本開示及び特許請求の範囲と整合性のある全ての修正、均等物及び代替形態を網羅するように意図される。
【０００８】
以下の説明では、ロジック実装、オペレーションコード、オペランドを指定する手段、リソース分割／共有／複製の実装、システムコンポーネントのタイプと相互関係及びロジック分割／統合の選択のような、様々な具体的な詳細が、本開示のより完全な理解を提供するために説明される。しかしながら、当業者には、本開示に係る諸実施形態が、そのような具体的な詳細を必要とせずに実施されてもよいことが認識されよう。他の場合において、本明細書で説明される概念の説明を曖昧にしないように、制御構造、ゲートレベル回路及び完全なソフトウェア命令シーケンスが詳細には示されていないことがある。当業者は、包含される説明により、不必要な実験を行うことなく適切な機能性を実装することができるであろう。
【０００９】
本明細書において、「一実施形態」、「実施形態」、「例示の実施形態」等への言及は、説明される実施形態が特定の特徴、構造又は特性を含み得るが、必ずしも全ての実施形態がその特定の特徴、構造又は特性を含まなくてもよいことを示す。さらに、そのようなフレーズは、必ずしも同じ実施形態を指していないことがある。さらに、特定の特徴、構造又は特性は、ある実施形態との関連で説明されるが、明示的に説明されるか否かに関わらず、そのような特徴、構造又は特性を他の実施形態との関連で達成することは当業者の知識内である。
【００１０】
本明細書で説明される概念に係る実施形態は、ハードウェア、ファームウェア、ソフトウェア又はこれらに任意の組合せで実装され得る。コンピュータシステムで実装される実施形態は、コンポーネント間の１つ又は複数のポイントツーポイント接続又はバスベースの相互接続を含み得る。本明細書で説明される実施形態は、１つ又は複数のプロセッサによって読み取られて実行され得る、１つ又は複数のマシン読取可能又はコンピュータ読取可能記憶媒体によって担持されるか、その上に格納される命令として実装されてもよい。マシン読取可能又はコンピュータ読取可能記憶媒体は、マシン（例えばコンピューティングデバイス）によって読取可能な形式で情報を格納又は伝送するための任意のデバイス、機構又は物理的構造として実装され得る。例えばコンピュータ読取可能又はコンピュータ読取可能記憶媒体は、読取専用メモリ（ＲＯＭ）デバイス、ランダムアクセスメモリ（ＲＡＭ）デバイス、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイス、ミニ又はマイクロＳＤカード、メモリスティック等として具現され得る。
【００１１】
図面では、デバイス、モジュール、命令ブロック及びデータ要素を表す要素のような図面要素の具体的な配置又は順序が、説明の容易性のために示されている。しかしながら、図面における図面要素の具体的な順序又は配置は、処理の特定の順序又はシーケンスが必要とされること、あるいは処理の分割が必要とされることを示唆するよう意図されるものではないことを当業者は理解されたい。さらに、ある図面内に、ある図面要素が含まれることは、その要素が全ての実施形態において必要とされることを示唆するよう意図されるものではなく、またその要素によって表される特徴が、一部の実施形態では他の要素に含まれないこと又は他の要素と結合されないことを示唆するよう意図されるものでもない。
【００１２】
一般に、命令ブロックを表すのに使用される図面要素は、ソフトウェア又はファームウェアアプリケーション、プログラム、関数、モジュール、ルーチン、プロセス、プロシージャ、プラグイン、アプレット、ウィジット、コードフラグメント及び／又は他のもののような、任意の形式のマシン読取可能な命令を使用して実装されてよく、そのような命令はそれぞれ、任意の適切なプログラミング言語、ライブラリ、アプリケーションプログラミングインタフェース（ＡＰＩ）及び／又は他のソフトウェア開発ツールを使用して実装され得る。例えば一部の実施形態は、Ｊａｖａ（登録商標）、Ｃ＋＋及び／又は他のプログラミング言語を使用して実装され得る。同様に、データ又は情報を表す図面要素は、レジスタ、データストア、テーブル、レコード、アレイ、インデックス、ハッシュ、マップ、ツリー、リスト、グラフ、（任意のファイルタイプの）ファイル、フォルダ、ディレクトリ、データベース及び／又は他のもののような、任意の適切な電気的配置又は構造を使用して実装され得る。さらに、図面において、実線又は破線又は矢印のような接続要素が、２つ又はそれ以上の図面の要素の間の接続、関係又は関連付けを例示するのに使用されている場合、そのような接続要素がないことは、接続、関係及び関連付けが存在しないことを示唆するものではない。言い換えると、開示内容を曖昧にしないために、要素間の一部の接続、関係又は関連付けが図面に示されていないことがある。加えて、図を簡潔にするために、単一の接続要素を使用して、要素間の複数の接続、関係又は関連付けを表すことがある。例えば接続要素が信号、データ又は命令の通信を表す場合、そのような要素は、必要に応じて、通信をもたらす１つ又は複数の信号経路（例えばバス）を表す可能性があることを、当業者は理解されたい。
【００１３】
次に図１を参照すると、データバッファ処理モジュール１３０が、例示のコンピューティングデバイス１００において具現化されている。使用の際、以下で更に詳細に検討されるように、データバッファ処理モジュール１３０は、入力として単一データバッファ１３２（例えば任意長の文字列又は「メッセージ」）を受け取る。データバッファ処理モジュール１３０は、単一データバッファ１３２の並行性のレベルを決定する、すなわち、シリアルデータ処理アルゴリズム１２８（例えば暗号ハッシュ関数）によって並行に処理することができる単一データバッファ１３２の「セグメント」の数を決定する。データバッファ処理モジュール１３０は、セグメントの並行処理を管理し、並行処理の結果を組み合わせてアルゴリズム１２８の最終的な出力を形成する。異なりはするものの、そのような並行処理後のアルゴリズム１２８の出力は、該アルゴリズム１２８を単一データバッファに対して従来的の方法で（例えば順次）実行することによって通常達成される結果に匹敵するセキュリティ強度を有する。さらに、単一データバッファ１３２のセグメント化及び並行処理の結果として、性能の向上が達成され得る。このようにして、データバッファ処理モジュール１３０は、基礎となるアルゴリズムが指定のサイズ（例えば６４バイト）のブロックに対して作用するとしても、シリアルデータ処理アルゴリズムを任意長の単一データバッファに対して実行することができる。
【００１４】
例示のコンピューティングデバイス１００は、少なくとも１つのプロセッサ１１０と、メモリ１２０と、入力／出力（Ｉ／Ｏ）サブシステム１２２と、ストレージデバイス１２４と、１つ又は複数の周辺デバイス１４０を含む。コンピューティングデバイス１００は、特定の用途に応じて、例えばデスクトップコンピュータシステム、ラップトップ又はタブレットコンピュータシステム、サーバ、エンタープライズコンピュータシステム、コンピュータのネットワーク、ハンドヘルド又は他のモバイルコンピューティングデバイス、あるいは他の電気デバイスのような任意のタイプのコンピューティングデバイス内に、あるいはそのようなコンピューティングデバイスとして具現化され得る。
【００１５】
例示のプロセッサ１１０は、例えばプロセッサコア１１２、１１４、１１６等の１つ又は複数のプロセッサコア、あるいはシングルコアの複数の論理セクションを含み、本明細書では、これらのプロセッサコアは説明の容易性のために単に「コア」と呼ばれる。一部の実施形態において、コア１１２、１１４、１１６の１つ又は複数は、シングルスレッドのコンピュータプログラム（一部の実施形態では、データバッファ処理モジュール１３のような）を、ＳＩＭＤ（単一命令複数データ）命令セット又はコンピュータ命令の同様のセットを使用して処理するように構成される。より具体的には、一部の実施形態において、コア１１２、１１４、１１６の少なくとも１つは、ストリーミングＳＩＭＤ拡張命令（ＳＳＥ）又は後のバージョン（例えばＳＳＥｎ又はＡＶＸ（Advanced  Vector  Extensions））のような１つ又は複数のストリーミング拡張を含む命令セットを用いて構成される。
【００１６】
１つ又は複数のコア１１２、１１４、１１６は、１つ又は複数のデータレジスタ１１８を含むか、通信可能に結合される。レジスタ１１８は、シリアルデータ処理アルゴリズム１２８、データバッファ処理モジュール１３０及び／又はコンピューティングデバイス１００の他のコンポーネントの動作中に、データ及び／又は命令を一時的に格納するのに用いられることがある。各レジスタ１１８はレジスタサイズ又は「幅（width）」を有する。「幅」とは、レジスタ１１８が所与の時間に格納することができるデータ量である。レジスタ１１８の少なくとも１つは、データレベルの並行性のために構成される。例えば一部の実施形態において、少なくとも１つのレジスタ１１８は、ＳＩＭＤ又は同様のデータレベルの並行処理のために構成される、すなわち、データレジスタを、複数のデータに対して同じ動作を同時又は実質的に同時に実行することができる、複数の機能ユニット（例えば「レーン」、「データ経路」又は「実行ユニット」）に分割することができる。例えば１２８ビット幅を有するＳＩＭＤ又は同様のレジスタでは、コンピュータ命令は、１２８ビットのデータの一部をそれぞれ並行に処理することができる、レジスタ１１８の複数のレーンすなわちデータ経路を指定することができ、その結果、アルゴリズム１２８を、そのデータ経路の各々において同時に、他のデータ経路とは独立に実行することができる。
【００１７】
例示のコア１１２、１１４、１１６はまた、１つ又は複数のキャッシュメモリ（図示せず）も含むか、通信可能に結合される。キャッシュメモリは、シリアルデータ処理アルゴリズム１２８、データバッファ処理モジュール１３０及び／又はコンピューティングデバイス１００の他のコンポーネントの動作中に、データ及び／又は命令を一時的に格納するのに用いられることがある。キャッシュメモリ及びレジスタ１１８に加えて、プロセッサ１１０及び／又はそのコア１１２、１１４、１１６は、メモリ１２０を含むか、そうでなければ通信可能に結合される。メモリ１２０の一部は、動的ランダムアクセスメモリデバイス（ＤＲＡＭ）、同期ＤＲＡＭ（ＳＤＲＡＭ）、ダブルデータレート（ＤＤＲ：double-data  rate）ＳＤＲＡＭ及び／又は他の揮発性メモリデバイスのような、任意のタイプの適切なメモリデバイスとして具現化され得る。
【００１８】
プロセッサ１１０は、Ｉ／Ｏサブシステム１２２にも通信可能に結合される。具体的には示されていないが、Ｉ／Ｏサブシステム１２２は典型的に、メモリコントローラ（例えばメモリコントローラサブシステム又はノーズブリッジ）、入力／出力コントローラ（例えば入力／出力コントローラサブシステム又はサウスブリッジ）及びファームウェアデバイスを含む。当然、他の実施形態では、他の構成を有するＩ／Ｏサブシステムが使用されることがある。例えば一部の実施形態において、Ｉ／Ｏサブシステム１２２は、システムオンチップ（ＳｏＣ）の一部を形成し、プロセッサ１１０及びコンピューティングデバイス１００の他のコンポーネントとともに単一の集積回路チップ上に組み込まれてもよい。したがって、Ｉ／Ｏサブシステム１２２の各コンポーネントは、一部の実施形態において、一般的な集積回路チップ上に配置されてもよいことが認識されよう。
【００１９】
例示のＩ／Ｏサブシステム１２２は、１つ又は複数のストレージデバイス１２４に通信可能に結合される。ストレージ１２４の一部は、ディスクストレージ（例えばハードディスク）、メモリカード、メモリスティック及び／又は他のもののような、データ及び／又は命令を格納するための任意の適切なデバイスとして具現化され得る。一部の実施形態において、シリアルデータ処理アルゴリズム１２８、データバッファ処理モジュール１３０及び／又は単一のデータバッファ１３２は、少なくとも一時的に、ストレージデバイス１２４内に具現化される。実行中、シリアルデータ処理アルゴリズム１２８、データバッファ処理モジュール１３０及び／又は単一のデータバッファ１３２の一部が、より高速な処理又は他の理由のために、メモリ１２０、キャッシュメモリ及び／又はレジスタ１１８にロードされ得る。他の実施形態において、シリアルデータ処理アルゴリズム１２８及びデータバッファ処理モジュール１３０はそれぞれ、ソフトウェア、ファームウェア、ハードウェア及び／又はこれらの組み合わせとして具現化され得る。さらに、データバッファ処理モジュール１３０は、シリアルデータ処理アルゴリズム１２８のサブモジュール、すなわち「拡張」として、あるいはシリアルデータ処理アルゴリズム１２８及び／又は他のソフトウェア（例えばオペレーティングシステム、セキュリティアプリケーション及び／又は他のもの）によって呼び出し可能な関数、プロシージャ又はライブライオブジェクトとして具現化されてもよい。例えばバッファ処理モジュール１３０は、セキュアハッシュアルゴリズムのような既存又は将来の暗号ハッシュアルゴリズムに対する、１つ又は複数の拡張として具現化され得る。
【００２０】
Ｉ／Ｏサブシステム１２２は、１つ又は複数の周辺デバイス１４０に通信可能に結合されることがある。周辺デバイス１４０は、１つ又は複数のネットワークインタフェース、グラフィクス及び／又はビデオアダプタ、キーボード、タッチスクリーン、ディスプレイ、プリンタ、データストレージデバイス及び／又は例えばコンピューティングデバイスの意図される使用に応じた他の周辺デバイスを含み得る。さらに、コンピューティングデバイス１００は、説明の明瞭性のために図１には図示されていない他のコンポーネント、サブコンポーネント及びデバイスを含んでもよいことを認識されたい。概して、コンピューティングデバイス１００のコンポーネントは、図１に示されるように、双方向の矢印として図式的に表される１つ又は複数の信号経路によって通信可能に結合される。そのような信号経路は、それぞれのデバイスの間の通信を促進することが可能な任意のタイプの有線又は無線の信号経路として具現化され得る。例えば信号経路は、バス、ポイントツーポイント相互接続、介入デバイス及び／又は同様のものを介して、任意の数の有線のプリント基板トレースとして具現化され得る。
【００２１】
次に図２を参照すると、バッファ処理モジュール１３０が、入力データバッファ２１０にわたるシリアルデータ処理アルゴリズム１２８の並行処理を管理する、例示のシステム２００が図示されている。例示の入力データバッファ２１０は、（例えばビット又はバイトで測定されるような）任意サイズ又は任意長Ｌを有するデータ文字の文字列（例えばデータファイル又は「メッセージ」）である。以下でより詳細に説明されるように、バッファ処理モジュール１３０は、入力データバッファ２１０を複数のセグメントＳに分割する。ここでセグメントの数は、システム２００の特定の設計又は実装の要件を望むか又は与えることが可能な入力データバッファ２１０にわたる並行性のレベル又は程度を表す、正の整数である。バッファ処理モジュール１３０は、入力データバッファ２１０をデータレジスタ１１８へストリーミングし、その結果、各セグメントが、レジスタ１１８の異なるレーン又はデータ経路に割り当てられる。バッファ処理モジュール１３０は、アルゴリズム１２８の実行を、レジスタ１１８の各レーン又はデータ経路に対して並行に開始し、その結果、入力データバッファ２１０の各セグメントが、シリアルデータ処理アルゴリズム１２８によって同時に処理される。
【００２２】
アルゴリズム１２８は、並行に、データバッファ２１０のセグメントの各々を（例えばビット又はバイトで測定されるような）指定されたサイズＢのデータブロックで順次処理し、ここで各データブロックは、ＢがＷの倍数となるように、（例えばビット又はバイトで測定されるような）サイズＷの複数のデータワードで作られる。アルゴリズム１２８は、（例えばビット又はバイトで測定されるような）固定長Ｄを有する出力データバッファ（あるいは一部の実施形態では、「メッセージダイジェスト」又は「ハッシュダイジェスト」）２１２を生成する。例示の実施形態では、入力データバッファ２１０と出力データバッファ２１２の双方が、単一のデータバッファ１３２内に格納される。すなわち、単一のデータバッファ１３２は、最初、入力データバッファ２１０に相当するが、バッファ処理モジュール１３０の実行及びシリアルデータ処理アルゴリズム１２８が進むと更新される。
【００２３】
一部の実施形態において、アルゴリズム１２８は、ＭＤ５、ＳＨＡ１、ＳＨＡ２５６又はＳＨＡ５１２のような暗号ハッシュ関数であり、データバッファ処理モジュール１３０は、セグメントの数Ｓを決定する際に、パラメータとして（例えば関連する米国連邦情報処理規格の発表、すなわちＦＩＰＳ  ＰＵＢにおいて定義されるような）暗号ハッシュ関数の特定の仕様を使用する。例として、ＳＨＡ２５６セキュアハッシュ関数の規格は、Ｂ＝５１２ビット、Ｗ＝３２ビット、Ｄ＝２５６ビットを指定する。ＳＨＡ２５６セキュアハッシュ関数の規格は、任意長の入力バッファをサイズＢのブロックに分割し、各ブロックに対して複数の計算ラウンドを実行し、各ラウンドにおいてそのブロックからサイズＷのワードを使用する。各ラウンドは、そのラウンドの出力が次のラウンドの入力となるように、バッファを更新する。
【００２４】
伝統的に、ＳＨＡ２５６ハッシュ関数は、あるブロックに対して生成されるハッシュダイジェストが、次のブロックの処理に初期のハッシュダイジェストとして使用されるように、入力バッファ内の各ブロックが処理されるまで、入力バッファのブロックを順次処理する。対照的に、バッファ処理モジュール１３０は、単一のデータバッファにわたって複数のセグメントを定義し、この場合、各セグメントは、１つ又は複数のブロックを含み、アルゴリズム１２８をデータバッファのセグメントの各々へ並行に適用する。例えばデータレジスタが、２５６ビット幅を有する場合、バッファ処理モジュール１３０は、入力データバッファ２１０を、（レジスタの幅）／Ｗ、すなわち２５６／３２＝８セグメントへ分割し、アルゴリズム１２８を、８つのセグメントの各々に対して並列に実行することができる。
【００２５】
次に図３を参照すると、コンピュータ化されたプログラム、ルーチン、ロジック及び／又は命令としてバッファ処理モジュール１３０及び／又はコンピューティングデバイス１００の他のモジュール若しくはコンポーネントによって実行可能な、単一のデータバッファの並列処理のための例示の方法３００が示されている。ブロック３１０において、方法３００は、任意長の入力データバッファ又はメッセージ２１０について、いずれかの必要な前処理を実行する。例えば暗号ハッシュ関数の場合、入力データバッファ２１０は、複数のデータビットをそのメッセージの後ろに付加することによって（例えば連結することによって）、該入力データバッファ２１０が（通常はハッシュアルゴリズム規格又は仕様によって指定される）所望の長さになるまでパディングされる。一部の実施形態において、パディングは、「１」ビットの後に必要な数の「０」ビットが続くことを含む。他の実施形態では、「０」及び「１」ビットの他の組合せ又はパターンをパディングに使用してもよい。基礎となるアルゴリズム１２８を定義する規格又は仕様は、パディングのスキームを指定する。一部の実施形態において、バッファ２１０は、パディングされたバッファを、ブロックサイズの最小の倍数とするのに十分なビット数によって拡張される。ブロック３１０における入力データバッファ２１０の前処理のための一部の技術は、（１）バッファ２１０の合計長がＢ*Ｓの倍数となるまで、バッファを、長さが連結される固定のビットパターンでパディングすることを含む。これにより、バッファをＳ−ｗａｙ  ＳＩＭＤ処理により効果的に処理し、Ｓ個のダイジェストを生成することが可能になる。ダイジェストのセットはその後、長さＳ*Ｄの別のデータバッファとして扱われ、サイズＤの最終的なハッシュが生成される。また、ブロック３１０における入力データバッファ２１０の前処理のための一部の技術は、（２）長さがＢ*Ｓの倍数のバッファ２１０の最も大きい領域を選択することを含み、これにより、並行に、Ｓ個のダイジェストを生成することができる。ダイジェストのセットはその後、バッファの残りの部分と連結され、新たなデータバッファとして、サイズＤの最終的なハッシュが生成され得る。
【００２６】
ブロック３１２において、方法３００は、入力データバッファ２１０を分割すべきセグメントの数Ｓを決定し、入力バッファ２１０にわたって、決定された数のセグメントを作成する。一部の実施形態において、セグメントの数は予め決定されており、単にパラメータ、引数又は格納済みの値として（例えばルックアップテーブル又はデータベースから）アクセスされることがある。他の実施形態では、セグメントの数を、ロード時又はランタイム時に決定してもよい。一部の実施形態において、セグメントの数は、レジスタ１１８の幅、シリアルデータ処理アルゴリズム１２８のパラメータ若しくは仕様（例えばブロックサイズ、ワードサイズ、出力長等）及び／又は入力データバッファ２１０の長さに応じたものであってもよい。例として、ＳＨＡ２５６ハッシュ関数がアルゴリズム１２８として使用される場合、Ｓ＝８、Ｗ＝４バイト、Ｂ＝６４バイトである。別の例として、１２８ビットのレジスタを用いるＳＩＭＤの能力を有するマイクロプロセッサにおいてＳＨＡ−１を実行するとき、以下のパラメータ設定：Ｂ＝６４バイト、Ｗ＝４バイト、Ｓ＝４、Ｄ＝２０バイトを要する。
【００２７】
さらにブロック３１２において、セグメントの各々は、特定の幅（例えば３２ビット）を有するデータワードで構成されるように定義される。一部の実施形態において、セグメントのワード幅は、アルゴリズム１２８によって指定されるワード幅Ｗに対応する。セグメントはそれぞれ、セグメントの長さがブロックサイズＢで割り切れるように、入力データバッファ２１０のＳワードごとに使用して作成される。入力データバッファ２１０の長さＬを、セグメントのブロックサイズ（Ｂを掛けたＳ、すなわちＳＢ）で割って、どれくらい多くの入力データバッファ２１０を同じサイズのセグメントで処理することができるかを決定する。入力データバッファ２１０の長さがＳＢで割り切れない場合は、余りのデータを備える最後のセグメントが作成される。ＳＨＡ２５６の例では、ＳＢ＝８*６４＝５１２バイトである。８つのセグメントが存在するので、各セグメントは、入力データバッファ２１０の８データワード（３２ビット、すなわち４バイト）ごとに使用して５１２＊Ｎビットになるまで形成される。ここで、Ｎは、正の整数であり、５１２＊ＮはＬより小さい。バッファ長Ｌは、L＝SB*N＋L  mod  SBとして表され、セグメント長ＳＬは、SL＝B*Nとして表される。
【００２８】
ブロック３１４において、方法３００は、セグメントをレジスタ１１８のデータ経路へストリーミングするか、そうでなければ直接読み出し、その結果、各セグメントが、異なるデータ経路に（例えばインターリーブを使用して）読み出される。一部の実施形態において、これは、ＳＢまで、すなわち均等にサイズ決定されたセグメントが全て処理されるまでインクリメントされる、単一のデータポインタを使用することによって達成される。ＳＨＡ２５６の例では、８つの３２ビットワードが、レジスタの８つのデータ経路に一度に読み出される。
【００２９】
ブロック３１６において、シリアルデータ処理アルゴリズム１２８が、データセグメントの各々に対して並行に実行される。すなわち、各セグメントについて、アルゴリズム１２８は、そのセグメントのブロックを、他のセグメントがアルゴリズム１２８によって同様に処理されているのと同時に、順次処理する。したがって、中間結果（例えばハッシュダイジェスト）がセグメントごとに作成される。アルゴリズム１２８は、入力データバッファ２１０の残りの部分（もしあれば）に対しても実行され、対応する中間結果が作成される。ＳＨＡ２５６の例では、ＳＨＡ２５６アルゴリズムが、各データ経路／３２ビットワードに対して、実質的に同時に実行され、次いで次の８つのワードがレジスタのデータ経路に読み出されて、ＳＨＡ２５６アルゴリズムによって並行に処理され、ブロックサイズＢになるまで続く。
【００３０】
ブロック３１８において、中間結果を全て組み合わせて、アルゴリズム１２８の最終的な出力（例えばハッシュダイジェスト）を生成する。中間結果を幾つかの異なる方法で組み合わせることができ、これには、排他的論理和（ＸＯＲ）又は付加（ＡＤＤ）関数を使用すること、あるいは中間結果を連結して次いでアルゴリズム１２８を再び実行することによる方法が含まれる。ＳＨＡ２５６の例では、８つのハッシュダイジェストをそれぞれ組み合わせて、１つの２５６ビットのハッシュダイジェストにする。当業者は、方法３００を容易に他のプロセッサ構成及びシリアルデータ処理アルゴリズムに適合させることができることを認識されたい。例えば他のレジスタ幅を有するレジスタを用いることができる。例えば５１２ビットの幅を有するＡＶＸ３を使用して、セグメントの数Ｓを８ではなく１６とし、そしてセグメントを１６ワード（３２ビット）ごとに作ることができる。
【００３１】
方法３００の一部の実施形態は、単一のバッファ２１０を、インターリーブされた独立のバッファと類似する１組のセグメントとして扱い、これらのセグメントについて複数の独立のハッシュダイジェストを並行に生成する。一部の実施形態において、インターリーブされるセグメントの数は２の累乗である。セグメントの並行処理からの中間結果をアルゴリズム１２８によって処理して、最終的な結果を形成する。一般的に言うと、方法３００の一部の実施形態は、バッファ２１０をブロックサイズ又は大きいサイズの処理の部分に分けるのではなく、データをより細かい粒度（例えばデータワード）でインターリーブする。
【００３２】
次に図３、図４及び図５を参照すると、方法３００の例示の実施形態は、整数のサイズBのバイトのブロック毎に作用するように定義されるハッシュアルゴリズムHを使用する。以下の実施形態は、所与のレベルの並行性Sを有する長さLのメッセージM0をハッシュする（ここで||という記号は連結を示す）。図３のブロック３１０を参照すると、メッセージM0が、Hに関連付けられたパディング関数に従って前処理される。パディング関数はPadH（メッセージ、メッセージの長さ、ブロックサイズB）として示され、メッセージを、所定のパターン及びメッセージ長の連結を用いて、B個のバイトの倍数である最小の長さまで拡張する。パディング関数PadH（M0，L，B*S）をメッセージM0に適用し、長さL’のメッセージM0を生成し、ここで、L’は、M0が拡張され得る、B*Sバイトの倍数の最小の長さである。
【００３３】
図３のブロック３１２を参照すると、ブロック３１０からのパディングされたメッセージM0が、それぞれ長さL’/SのＳ個のセグメントに分割される。パディングされたメッセージM0’は、M0’のワードサイズのWビットごとに異なるセグメントに割り当てられるように、インターリーブされる手法で分割される。各セグメントは、Wビットのワードのアレイとして表される。
【００３４】
Seg0＝M0’[0]||M0’[S]||M0’[2S]||…
Seg１＝M0’[1]||M0’[S+1]||M0’[2S+1]||…
…
Segs-1＝M0’[S-1]||M0’[2S-1]||M0’[3S-1]||…
【００３５】
ここで、各M0’[n]は、パディングされたメッセージへのワードサイズWのインデックスである。図３のブロック３１６を参照すると、Ｓ個のリーフレベルのダイジェストが、セグメントにおいて、ｋ=0…(S-1)についてDk＝H（Segk）として生成される。図３のブロック３１８において、新たなメッセージM1が、ブロック３１６の結果得られたダイジェストを、ワードサイズWビットごとにインターリーブすることによって作成される。M1＝D0’[0]||D1[0]…||D(S-1)[0]||D1[1]…||D(S-1)(D/W)-1]であり、各Dk[n]がセグメントのダイジェストへのワードサイズWのインデックスである場合、パディングされたM1’を、PadH（M1，S*D，B）として生成することができる。ハッシュアルゴリズムHは、次いでM1’に適用され得る（例えばH（M1’））。
【００３６】
一部の実施形態において、メモリ内で整列されるデータバッファ２１０のコンテンツは、移送する必要性なしに、直接ＳＩＭＤレジスタへ読み出される（例えば「ストリーミングされる」）。一部の実施形態において、方法３００は、（例えばネットワーク接続から）ストリーミングされているデータを、開始時にバッファ２１０の長さを知る必要なく、直接レジスタ１１８へ供給することが可能である。したがって、シングルスレッドアプリケーションは（ハッシュアルゴリズムのレベル以外に）修正する必要がなく、開示された並行処理の性能の利点を生かすことができる。
【００３７】
一部の実施形態において、アルゴリズム１２８を、計算及び／又はセキュリティ上の考慮事項に基づいて選択するか、順序付けることができ、様々なプロトコル／規格の暗号ハッシュアルゴリズムの現在の（潜在的に順序付けされる）リストを、本明細書で開示される並列化されたバージョンにより強化することができる（例えばＳＨＡ１ｘ４、ＳＨＡ１ｘ８、ＳＨＡ２５６ｘ４、ＳＨＡ２５６ｘ８等）。
【００３８】
一部の実施形態、例えばセキュアにロードされるファイルの署名の検証を要する用途において、署名エンティティは、選択されたセキュリティの既存の暗号ハッシュアルゴリズム（例えばＳＨＡ２５６）を、検証のための計算に最も効率的な方法３００のバージョンと置き換えることができる。例えば検証エンティティが、そのプロセッサコアにおいて１２８ビットのＳＩＭＤデータ経路実行ユニットを有している場合において、ＳＨＡ２５６の強度のダイジェストが望まれるとき、ＳＨＡ２５６ｘ４アルゴリズムを望むことができる（ＳＨＡ２５６アルゴリズムは３２ビットベースであるので、１２８ビットのＳＩＭＤ実行ユニットは、１２８／３２＝４セグメントを並行に処理することができる）。したがって、現在使用されている３２ビットのアルゴリズムの１つ（例えばＭＤ５、ＳＨＡ１、ＳＨＡ２５６）を使用する代わりに、検証エンティティは、対応するＭＤ５ｘ８、ＳＨＡｘ４、ＳＨＡｘ４の並列化アルゴリズムを使用する可能性がある。一部の実施形態において、１２８ビットのＳＩＭＤの観点からは４つのセグメントのみが必要であるとしても、アルゴリズムの制約されるデータの従属的連鎖のために、更なる並行性がＭＤ５について望まれる可能性がある。
【００３９】
異なる計算強度の多くの検証デバイスが存在し得る場合、署名エンティティは、検証デバイスの大多数に対して作用する並行性のレベルを決定する必要がある。開示される実施形態は、そのＳＩＭＤ又はハードウェア能力が、指定されたセグメントほど多くのセグメントを一度に全て処理することができない場合、より大きなレベルの並行性を署名中に作成することができ、検証エージェントは検証中にマルチパスアプローチを実行することができるので、サーバがその並行性のレベルを正確に推定する必要はない。例えば署名者はｘ４スキームを使用することができ、検証エージェントは２つの経路のｘ２スキームを実行することが可能である。
【００４０】
一部の実施形態において、あまりに多くのパスが必要とされる場合（例えばダイジェストの複数の状態変数を管理するために）効率の何らかの損失が起こり得る可能性があるが、データは依然として、ストリーミング手法によりたった１度で効率的に伝達され得る。この場合において、アプリケーションは、状態変数のセットを繰り返す必要がある。例えば一部の場合において、クライアントデバイスはＳＩＭＤユニットを全ては有していないことがあり、単一のスカラー操作を実行してＳＨＡ２５６ｘ４ハッシュを処理する必要がある。この場合、ＳＨＡ２５６の状態変数（３２バイト）の１つのセットとともに作用する代わりに、４つのそのような状態変数のコピー（１２８バイト）に対して同時に作用することになり、データバッファからのワードを処理するとき、これらを繰り返す。この状態サイズの増加は非常に小さい。しかしながら、ブロックについての（例えばＳＨＡについての）メッセージスケジュールに関連付けられる、作用するセットのサイズの増加は、一部の場合において望ましくないことがある。作用するセットのサイズの増加が問題となる場合、データの４つのブロックを格納し、厳密に一度に１つのインターリーブされたブロックに対して作用することを選択することが可能である。多くの他の変形が可能であり、様々な実施形態は、任意のデバイスが、不当な負担なく効果的に並行ハッシュ署名を処理することを可能にすることができる。しかしながら、固定のハードウェアエンジンが、パディングを含め、全体的なハッシュ関数を所与のバッファ／長さの入力に対して実行するように設計される場合、パディングは、ハードウェアと同じ結果を達成するように設計され得る。ハードウェアエンジンは、ブロックごとベースで作用する場合、あるいはパディングを含まないモードを有する場合、開示されたマルチハッシュ方法を実行するのに使用され得る。
【００４１】
開示される実施形態は、大きな並行性の程度（例えばｘ３２又はｘ６４）が可能であるが、一部の実施形態では、既存のデバイス又は当然に予想される将来のデバイス（例えばｘ４又はｘ８）の能力に応じて、方法３００を構成するように望まれることがある。
【００４２】
一部の実施形態において、方法３００のＳＨＡｘ４バージョンが、合理的にサイズ決定された１ＫＢのデータバッファにおける最良のＳＨＡ２５６アルゴリズムの計算に対して約２．６倍の性能向上を提供することが示されている。一部の実施形態において、方法３００のＭＤ５ｘ８のバージョンが、標準のＭＤ５アルゴリズムに対して約４．４倍の性能向上につながることが示されている。マルチハッシュの性能は、将来のプロセッサのデータ経路の幅の増加に比例して上がるべきである。さらに、開示される実施形態を使用して、結果として得られるダイジェストは少なくとも、基礎となるハッシュ関数の直接の適用によって取得されるダイジェストと同程度にセキュアかつ衝突耐性があるべきである。今日最も一般的に使用されるハッシュ関数に加えて、開示される実施形態は、新しいＳＨＡ３の候補にも適合可能である。
【００４３】
例
例１は、データバッファを処理するためのコンピューティングデバイスを含む。当該コンピューティングデバイスは、データバッファ処理モジュールを含み、該データバッファ処理モジュールは、バッファ長を有する任意長のデータバッファと、各データセグメントがゼロ超かつ前記バッファ長より小さい複数のデータセグメントとにアクセスすることと、データセグメントをデータレジスタに直接読み出すことであって、データレジスタは複数のデータ経路を有しており、各データセグメントを異なるデータ経路に直接読み出すことと、シリアルデータ処理アルゴリズムをデータ経路の各々に対して実質的に並行に実行して、各データ経路の結果を生成することと、該結果を組み合わせてシリアルデータ処理アルゴリズムの出力を形成することとを行う。
【００４４】
例２は、例１に係る主題を含み、データバッファ処理モジュールが、暗号ハッシュアルゴリズムに対する拡張として具現化される。
【００４５】
例３は、例１及び例２のいずれかに係る主題を含み、データバッファ処理モジュールが、コンピューティングデバイスのマイクロプロセッサのシングルコアにおける実行のために構成される。
【００４６】
例４は、例１乃至３のいずれかに係る主題を含み、データバッファ処理モジュールは、シングルコアのシングルスレッドにおける実行のために構成される。
【００４７】
例５は、例１乃至４のいずれかに係る主題を含み、データバッファ処理モジュールは、コンピューティングデバイスの単一命令複数データ能力を有するプロセッサにおける実行のために構成される。
【００４８】
例６は、例１乃至５のいずれかに係る主題を含み、データバッファ処理モジュールは、シングルスレッドソフトウェアアプリケーションを用いる使用のために構成される。
【００４９】
例７は、例１乃至６のいずれかに係る主題を含み、データバッファ処理モジュールは、マルチスレッドソフトウェアアプリケーションを用いる使用のために構成される。
【００５０】
例８は、任意長のデータバッファを処理するための方法を含む。当該方法は、データバッファを複数のデータセグメントとして定義するステップであって、各データセグメントが、ゼロ超かつデータバッファの長さより小さいセグメント長を有する、ステップと、データセグメントをデータレジスタにストリーミングするステップであって、該データレジスタは複数のデータ経路実行ユニットを有し、各データセグメントが、単一のデータポインタを使用して異なるデータ経路実行ユニットにストリーミングされる、ステップと、シリアルデータ処理アルゴリズムをデータ経路実行ユニットの各々において実質的に並行に実行し、各データ経路実行ユニットについての結果を生成するステップと、該結果を組み合わせて、シリアルデータ処理アルゴリズムの出力を形成するステップとを含む。
【００５１】
例９は、例８に係る主題を含み、データレジスタの幅とシリアルデータ処理アルゴリズムによって指定されるワードサイズとに基づいて、セグメント長を決定するステップを更に含む。
【００５２】
例１０は、例８及び例９のいずれかに係る主題を含み、データバッファを複数のデータセグメントとして定義するステップは、データバッファを、インターリーブされる手法で複数のデータセグメントへと分割するステップを含む。
【００５３】
例１１は、例８乃至１０のいずれかに係る主題を含み、データバッファは複数のデータワードを備え、各ワードは複数のデータビットを備え、当該方法は、各データセグメントがデータワードのアレイを備えるように、データバッファ内の各データワードを異なるデータセグメントに割り当てるステップを含む。
【００５４】
例１２は、例８乃至１０のいずれかに係る主題を含み、各結果は、複数のデータワードを備え、各データワードは複数のデータビットを備え、前記の組み合わせる処理は、前記の結果を前記データワードでインターリーブすることを含む。
【００５５】
例１３は、例８乃至１２のいずれかに係る主題を含み、シリアルデータ処理アルゴリズムを実行するステップは、暗号ハッシュ関数を実行することを含む。
【００５６】
例１４は、例８乃至１３のいずれかに係る主題を含み、各データセグメントに対してハッシュダイジェストを生成するステップを含む。
【００５７】
例１５は、例８乃至１４のいずれかに係る主題を含み、ハッシュダイジェストを組み合わせて、新たなデータバッファを形成するステップと、該新たなデータバッファに対して暗号ハッシュ関数を実行するステップとを更に含む。
【００５８】
例１６は、例８乃至１５のいずれかに係る主題を含み、シリアルデータ処理アルゴリズムに関連付けられるブロックサイズを決定するステップと、データバッファの長さがブロックサイズの倍数となるようにデータバッファをパディングするステップとを更に含む。
【００５９】
例１７は、例８乃至１６のいずれかに係る主題を含み、データバッファの長さが、データセグメントの数を掛けたブロックサイズと等しくなるように、固定のパターンのデータビットをデータバッファに付加するステップを更に含む。
【００６０】
例１８は、例８乃至１７のいずれかに係る主題を含み、前記の組み合わせる処理は、前記の結果を連結することと、該連結された結果に対してシリアルデータ処理アルゴリズムを実行することとを含む。
【００６１】
例１９は、例８乃至１８のいずれかに係る主題を含み、コンピューティングデバイスのマイクロプロセッサの特性に基づいて、データセグメントの数を決定するステップを更に含む。
【００６２】
例２０は、例８乃至１９のいずれかに係る主題を含み、シリアルデータ処理アルゴリズムの特性に基づいて、データセグメントの数を決定するステップを更に含む。
【００６３】
例２１は、コンピューティングデバイスを含み、当該コンピューティングデバイスは、プロセッサと、該プロセッサによって実行されると当該コンピューティングデバイスに、例８乃至２０のいずれかに記載の方法を実行させる複数の命令を格納しているメモリとを有する。
【００６４】
例２２は、１つ又は複数のマシン読取可能な記憶媒体であって、実行されたことに応答して、コンピューティングデバイスに例８乃至２０のいずれかに記載の方法を実行させる複数の命令を備えた１つ又は複数のマシン読取可能な記憶媒体を含む。
【００６５】
例２３は、複数の命令を備えた１つ又は複数のマシン読取可能記憶媒体を含み、複数の命令は、コンピューティングデバイスによって実行されていることに応答して、当該コンピューティングデバイスに、データバッファを複数のデータセグメントに分割するステップであって、各データセグメントが、ゼロ超かつデータバッファの長さより小さいセグメント長を有する、ステップと、各データセグメントを、当該コンピューティングデバイスのデータレジスタの異なるデータ経路実行ユニットに直接読み出すステップと、暗号ハッシュアルゴリズムをデータ経路実行ユニットの各々に対して実質的に並行に実行して、各データ経路実行ユニットについての結果を生成するステップと、データ経路実行ユニットにおいて生成された結果を連結するステップと、暗号ハッシュアルゴリズムを、連結された結果に対して実行して、暗号ハッシュアルゴリズムの出力を生成するステップとを含む処理を実行させる。
【００６６】
例２４は、例２３に係る主題を含み、データレジスタの幅及び暗号ハッシュアルゴリズムによって指定されるワードサイズに基づいてセグメント長を定義するステップを更に含む。
【００６７】
例２５は、例２３及び例２４のいずれかに係る主題を含み、インターリーブされる手法で複数のデータセグメントを作成するステップを更に含む。
【００６８】
例２６は、例２３乃至２５のいずれかに係る主題を含み、暗号ハッシュアルゴリズムに関連付けられるブロックサイズを決定するステップと、データバッファの長さがブロックサイズの倍数になるように、データバッファをパディングするステップとを更に含む。
【００６９】
例２７は、例２３乃至２６のいずれかに係る主題を含み、データバッファの長さが、データセグメントの数を掛けたブロックサイズと等しくなるように、固定のパターンのデータビットをデータバッファに付加するステップを更に含む。
【００７０】
例２８は、例２３乃至２７のいずれかに係る主題を含み、コンピューティングデバイスのマイクロプロセッサの特性に基づいて、データセグメントの数を決定するステップを更に含む。
【００７１】
例２９は、例２３乃至２８のいずれかに係る主題を含み、シリアルデータ処理アルゴリズムの特性に基づいて、データセグメントの数を決定するステップと更に含む。
【００７２】
例３０は、例２３乃至２９のいずれかに係る主題を含み、暗号ハッシュアルゴリズムは、セキュアハッシュアルゴリズム又はＭＤ５アルゴリズムを備える。
【図１】
0005981030.tif 000002
【図２】
0005981030.tif 000003
【図３】
0005981030.tif 000004
【図４】
0005981030.tif 000005
【図５】
0005981030.tif 000006