(57)【要約】  シングルの可変長のデータバッファに対してシリアルデータ処理アルゴリズムを実行するためのテクノロジーが、バッファのデータセグメントをパディングするステップと、データセグメントをデータレジスタに流すステップと、セグメントの各々に対してシリアルデータ処理アルゴリズムを並行して実行するステップと、を含む。
2015529865.tif 000002
【特許請求の範囲】
【請求項１】
データバッファを処理するコンピューティング装置であって、
データバッファ処理モジュールであり、
バッファ長と複数のデータセグメントとを有する任意長のデータバッファにアクセスするステップであり、各データセグメントは、ゼロより大きく前記バッファ長より小さいセグメント長を有する、ステップと、
各データセグメントをシリアルデータ処理アルゴリズムに従ってパディングするステップと、
前記のパディングされたデータセグメントの各々をデータレジスタに直接読み込むステップであり、前記データレジスタは複数のデータパスを有し、各々のパディングされたデータセグメントは異なるデータパスに直接読み込まれる、ステップと、
各データパスのための結果を作成するように、前記データパスの各々に対してシリアルデータ処理アルゴリズムを実質的に並行して行うステップと、
をなす、データバッファ処理モジュール、
を含むコンピューティング装置。
【請求項２】
前記データバッファは任意長を有する、請求項１のコンピューティング装置。
【請求項３】
前記データバッファ処理モジュールは、前記のパディングされたデータセグメントの各々を前記データレジスタの異なるデータパスに直接読み込むデータバッファ処理モジュールを含む、請求項１又は請求項２のコンピューティング装置。
【請求項４】
前記データバッファ処理モジュールは、前記データセグメントの各々を前記シリアルデータ処理アルゴリズムに従ってパディングするデータバッファ処理モジュールを含む、請求項１乃至３のうちいずれか１項のコンピューティング装置。
【請求項５】
前記データバッファ処理モジュールは、暗号ハッシュアルゴリズムに対する拡張として具現化される、請求項１乃至４のうちいずれか１項のコンピューティング装置。
【請求項６】
前記データバッファ処理モジュールは、当該コンピューティング装置のマイクロプロセッサのシングルコア上で実行するデータバッファ処理モジュールを含む、請求項１乃至５のうちいずれか１項のコンピューティング装置。
【請求項７】
前記データバッファ処理モジュールは、前記シングルコアのシングルスレッド上で実行するデータバッファ処理モジュールを含む、請求項６のコンピューティング装置。
【請求項８】
前記データバッファ処理モジュールは、当該コンピューティング装置の単一命令多重データ対応プロセッサ上で実行するデータバッファ処理モジュールを含む、請求項１乃至７のうちいずれか１項のコンピューティング装置。
【請求項９】
前記データバッファ処理モジュールは、シングルスレッドソフトウェアアプリケーションで実行するデータバッファ処理モジュールを含む、請求項１乃至８のうちいずれか１項のコンピューティング装置。
【請求項１０】
複数の命令を記憶した１又は複数のマシン読取可能記憶媒体であって、前記複数の命令は、実行されたことに応じて、コンピューティング装置に、
前記コンピューティング装置の任意長のデータバッファを複数のデータセグメントとして定義するステップであり、各データセグメントは、ゼロより大きく前記データバッファの長さより小さいセグメント長を有する、ステップと、
各データセグメントをシリアルデータ処理アルゴリズムに従ってパディングするステップと、
前記のパディングされたデータセグメントをデータレジスタに流すステップであり、前記データレジスタは複数のデータパス実行ユニットを有し、各々のパディングされたデータセグメントは、シングルデータポインタを用いて異なるデータパス実行ユニットに流される、ステップと、
各データパス実行ユニットのための結果を作成するように、前記データパス実行ユニットの各々でシリアルデータ処理アルゴリズムを実質的に並行して実行するステップと、
を実行させる、マシン読取可能記憶媒体。
【請求項１１】
前記複数の命令は、前記コンピューティング装置に、前記データレジスタの幅と前記シリアルデータ処理アルゴリズムにより指定されるワードサイズとに基づいて前記セグメント長を定義するステップをさらに実行させる、請求項１０のマシン読取可能記憶媒体。
【請求項１２】
前記データバッファを複数のデータセグメントとして定義するステップは、前記データバッファをインタリーブされる方法で前記複数のデータセグメントに分割するステップを含む、請求項１０又は請求項１１のマシン読取可能記憶媒体。
【請求項１３】
前記データバッファは複数のデータワードを含み、前記データバッファをインタリーブされる方法で前記複数のデータセグメントに分割するステップは、各データセグメントがデータワードの配列を含むように、前記データバッファ内の各データワードを異なるデータセグメントに割り当てるステップを含む、請求項１２のマシン読取可能記憶媒体。
【請求項１４】
各結果は複数のデータワードを含み、前記複数の命令は、前記コンピューティング装置に、前記結果を前記データワードずつインタリーブするステップをさらに実行させる、請求項１０乃至１３のうちいずれか１項のマシン読取可能記憶媒体。
【請求項１５】
シリアルデータ処理アルゴリズムを実行するステップは、暗号ハッシュ関数を実行するステップを含む、請求項１０乃至１４のうちいずれか１項のマシン読取可能記憶媒体。
【請求項１６】
前記複数の命令は、前記コンピューティング装置に、前記のパディングされたデータセグメントの各々のためのハッシュダイジェストを生成するステップをさらに実行させる、請求項１５のマシン読取可能記憶媒体。
【請求項１７】
前記複数の命令は、前記コンピューティング装置に、前記ハッシュダイジェストを結合して新しいデータバッファを形成し、前記新しいデータバッファに対して前記暗号ハッシュ関数を実行する、結合するステップ、をさらに実行させる、請求項１６のマシン読取可能記憶媒体。
【請求項１８】
前記ハッシュダイジェストを結合するステップは、前記結果を連結し、前記の連結された結果に対して前記シリアルデータ処理アルゴリズムを実行するステップを含む、請求項１７のマシン読取可能記憶媒体。
【請求項１９】
前記複数の命令は、前記コンピューティング装置に、前記シリアルデータ処理アルゴリズムに関連するブロックサイズを決定し、パディングされたデータセグメントの各々の長さが前記ブロックサイズの倍数になるように前記データセグメントの各々をパディングするステップ、をさらに実行させる、請求項１０乃至１８のうちいずれか１項のマシン読取可能記憶媒体。
【請求項２０】
前記複数の命令は、前記コンピューティング装置に、固定されたパターンのデータビットを前記データセグメントの各々に付加するステップをさらに実行させる、請求項１９のマシン読取可能記憶媒体。
【請求項２１】
前記複数の命令は、前記コンピューティング装置に、該コンピューティング装置のマイクロプロセッサの特性に基づいてデータセグメントの数を決定するステップをさらに実行させる、請求項１０乃至２０のうちいずれか１項のマシン読取可能記憶媒体。
【請求項２２】
前記複数の命令は、前記コンピューティング装置に、前記シリアルデータ処理アルゴリズムの特性に基づいてデータセグメントの数を決定するステップをさらに実行させる、請求項１０乃至２１のうちいずれか１項のマシン読取可能記憶媒体。
【請求項２３】
任意長のデータバッファを処理する方法であって、
前記データバッファを複数のデータセグメントとして定義するステップであり、各データセグメントは、ゼロより大きく前記データバッファの長さより小さいセグメント長を有する、ステップと、
各データセグメントをシリアルデータ処理アルゴリズムに従ってパディングするステップと、
前記のパディングされたデータセグメントをデータレジスタに流すステップであり、前記データレジスタは複数のデータパス実行ユニットを有し、各々のパディングされたデータセグメントは、シングルデータポインタを用いて異なるデータパス実行ユニットに流される、ステップと、
各データパス実行ユニットのための結果を作成するように、前記データパス実行ユニットの各々でシリアルデータ処理アルゴリズムを実質的に並行して実行するステップと、
を含む方法。
【請求項２４】
前記データバッファは複数のデータワードを含み、
前記データバッファを複数のデータセグメントとして定義するステップは、前記データバッファをインタリーブされる方法で前記複数のデータセグメントに分割するステップを含み、
前記データバッファをインタリーブされる方法で前記複数のデータセグメントに分割するステップは、各データセグメントがデータワードの配列を含むように、前記データバッファ内の各データワードを異なるデータセグメントに割り当てるステップを含む、
請求項２３の方法。
【請求項２５】
前記シリアルデータ処理アルゴリズムに関連するブロックサイズを決定し、パディングされたデータセグメントの各々の長さが前記ブロックサイズの倍数になるように前記データセグメントの各々をパディングするステップ、
をさらに含む請求項２３又は請求項２４の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データバッファを処理するためのコンピューティング装置に関する。
【背景技術】
【０００２】
データファイルやコンピュータプログラムの安全性を検証するためのソフトウェアは、オペレーティングシステムブートシーケンス、プログラムコード又はデータファイルのローディング、ウェブブラウジング、データ通信、及びデータ記憶などの多くの種々の背景において普及している。認証及び／又は暗号化に使用されるシリアルデータ処理アルゴリズムなどのシリアルデータ処理アルゴリズムは、データのシングルバッファに対して、連鎖して依存する方法で演算することがある。これらのアルゴリズムは、上記バッファ内のデータの１ブロックの処理から結果的に生じる出力が後続ブロックの処理のためにしばしば必要とされる点で、シリアルの連鎖（serial  chaining）によって制約されることがある。
【０００３】
例えば、ＭＤ５（メッセージ‐ダイジェストアルゴリズム）並びにＳＨＡ１、ＳＨＡ２５６及びＳＨＡ５１２（セキュアハッシュアルゴリズム）などの暗号ハッシュ関数は、汎用目的プロセッサ上の計算に関して、高価であることがある。こうしたハッシュ関数は、データのシングルバッファに対して、各データブロックから導出される計算を用いてハッシュダイジェスト状態を更新し、及び互いに依存する複数のラウンド（rounds）の処理を使用して、順次動作する。シングルバッファのブロックの順次処理は、現代のプロセッサにおけるパフォーマンスを制限している。ベクトル単一命令多重データ（ＳＩＭＤ）ユニットを用いるマルチバッファ処理などの方法が、アプリケーションにおけるより良いパフォーマンスのために提案されており、これにおいて、複数の独立したデータバッファに対して動作することが可能である。しかしながら、これらの方法は、シングルバッファをハッシュすることに関連するアプリケーションに適用可能ではない。ツリーハッシュ法が、使用されている別の手法であるが、複数のコア又はエンジンを横断する。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
シングルバッファのブロックの順次処理が、現代のプロセッサにおけるパフォーマンスを制限している。
【課題を解決するための手段】
【０００５】
一実施例が、データバッファを処理するためのコンピューティング装置を含む。上記コンピューティング装置は、データバッファ処理モジュールであって、バッファ長と複数のデータセグメントとを有する任意長のデータバッファにアクセスするステップであり、各データセグメントは、ゼロより大きく上記バッファ長より小さいセグメント長を有する、ステップと、各データセグメントをシリアルデータ処理アルゴリズムに従ってパディングするステップと、上記のパディングされたデータセグメントの各々をデータレジスタに直接読み込むステップであり、上記データレジスタは複数のデータパスを有し、各々のパディングされたデータセグメントは異なるデータパスに直接読み込まれる、ステップと、各データパスのための結果を作成するように、上記データパスの各々に対してシリアルデータ処理アルゴリズムを実質的に並行して行うステップと、をなす、データバッファ処理モジュールを含む。
【図面の簡単な説明】
【０００６】
本明細書に説明される概念は、添付の図面において、限定としてではなく例として例示される。例示の簡素さと明りょうさとを目的として、図に例示される要素は、必ずしも縮尺どおりに描かれてはいない。適切と考えられる場合、参照ラベルは、図面にわたって繰り返されて、対応する又は類似の要素を示している。
【図１】コンピューティング装置の少なくとも１つの実施形態の簡素化されたブロック図であり、このコンピューティング装置と関連して、開示される方法を実施することができる。
【図２】シングルデータバッファの並行処理のためのシステムの少なくとも１つの実施形態の簡素化されたモジュール図である。
【図３】シングルデータバッファの並行処理のための方法の少なくとも１つの実施形態の簡素化されたフロー図である。
【発明を実施するための形態】
【０００７】
本開示の概念は、種々の変更及び代替形式を受け入れる余地があるが、本開示の特定実施形態が、図面において例として図示されており、本明細書に詳細に説明されることになる。しかしながら、本開示の概念を開示される特定形式に限定する意図はまったくなく、逆に、意図するところは、本開示と添付される特許請求の範囲とに調和するすべての変更、均等物及び代替手段をカバーすることであることを理解されたい。
【０００８】
本明細書における「１つの実施形態」「一実施形態」「一例示的実施形態」などの表現は、その説明される実施形態が特定の特徴、構造又は特性を含むことができることを示すが、あらゆる実施形態が上記特定の特徴、構造又は特性を含んでよく、あるいは必ずしも含まなくてもよい。さらに、こうした表現は、必ずしも同一の実施形態を参照するものではない。さらに、特定の特徴、構造又は特性が一実施形態と関連して説明されるとき、明示的に説明されるか否かにかかわらず、こうした特徴、構造又は特性を他の実施形態と関連して達成することは当業者の知識の範囲内であると考えられる。
【０００９】
開示される実施形態は、いくつかの場合、ハードウェア、ファームウェア、ソフトウェア、又はこれらの任意の組み合わせにおいて実施することができる。開示される実施形態は、一時的又は非一時的なマシン読取可能（例えば、コンピュータ読取可能）記憶媒体により伝達される又は該記憶媒体上に記憶される命令として実施されることもでき、この命令を、１又は複数のプロセッサが読み出して実行することができる。マシン読取可能記憶媒体は、任意の記憶装置、機構、又はマシンにより読取可能な形式で情報を記憶する若しくは送信するための他の物理構造（例えば、揮発性若しくは不揮発性のメモリ、メディアディスク又は他のメディア装置）として具現化されることができる。
【００１０】
図面において、いくつかの構造又は方法の特徴が、特定の配置及び／又は順序で図示されることがある。しかしながら、こうした特定の配置及び／又は順序は必ずしも必要とされないことを十分理解されたい。むしろ、いくつかの実施形態において、こうした特徴は、例示的な図に示されるものとは異なる態様及び／又は順序で配置される可能性がある。さらに、特定の図に構造又は方法の特徴を含むことは、こうした特徴がすべての実施形態に必要とされることを意味するものではなく、いくつかの実施形態において、含まれない場合があり、あるいは他の特徴と組み合わせられてよい。
【００１１】
次に図１を参照すると、データバッファ処理モジュール１３０が、例示的なコンピューティング装置１００に具現化されている。使用において、データバッファ処理モジュール１３０は、入力として、シングルデータバッファ１３２（例えば、任意長の文字列又は「メッセージ」）をとる。データバッファ処理モジュール１３０は、シングルデータバッファ１３２のための並列性のレベル、すなわち、シリアルデータ処理アルゴリズム１２８（例えば、暗号ハッシュ関数）が並行して（in  parallel）処理できるシングルデータバッファ１３２の「セグメント」の数を決定する。データバッファ処理モジュール１３０は、アルゴリズム１２８によるセグメントの並行処理を管理する。こうした並行処理後のアルゴリズム１２８の出力は、相違するが、従来の方法で（例えば、順次に）シングルデータバッファに対してアルゴリズム１２８を実行することにより通常達成される結果に相当するセキュリティ強度を有する。さらに、シングルデータバッファ１３２のセグメント化と並行処理との結果として、パフォーマンス向上を達成することができる。このように、データバッファ処理モジュール１３０は、下層のアルゴリズムが特定サイズ（例えば、６４バイト）のブロックに対して動作するとしても、いかなる任意長のシングルデータバッファに対してもシリアルデータ処理アルゴリズムを行うことができる。
【００１２】
例示的なコンピューティング装置１００は、少なくとも１つのプロセッサ１１０、メモリ１２０、入力／出力（Ｉ／Ｏ）サブシステム１２２、記憶装置１２４、及び１又は複数の周辺装置１４０を含む。コンピューティング装置１００は、特定の用途に依存して、例えば、デスクトップコンピュータシステム、ラップトップ若しくはタブレットコンピュータシステム、サーバ、エンタープライズコンピュータシステム、コンピュータのネットワーク、ハンドヘルド若しくはその他のモバイルコンピューティング装置、又は他の電子装置などの、任意のタイプのコンピューティング装置の中に又は任意のタイプのコンピューティング装置として具現化されてよい。
【００１３】
例示的なプロセッサ１１０は、１又は複数のプロセッサコア又はシングルコアの論理部分、例えば、プロセッサコア１１２、１１４、１１６を含み、これらは、説明を簡易にするため、本明細書において単に「コア」という。いくつかの実施形態において、コア１１２、１１４、１１６のうち１又は複数は、ＳＩＭＤ（単一命令多重データ）命令セット又は同様のコンピュータ命令セットを使用してシングルスレッドのコンピュータプログラム（いくつかの実施形態において、データバッファ処理モジュール１３０など）を処理するように構成される。より詳細には、いくつかの実施形態において、コア１１２、１１４、１１６のうち少なくとも１つは、ストリーミングＳＩＭＤ拡張（ＳＳＥ）又はその後のバージョン（例えば、ＳＳＥｎ又はＡＶＸ（Advanced  Vector  Extensions））などの、１又は複数のストリーミング拡張を含む命令セットを用いて構成される。
【００１４】
１又は複数のコア１１２、１１４、１１６は、１又は複数のデータレジスタ１１８を含み、あるいはこれに通信可能につながれる。データレジスタ１１８を利用して、シリアルデータ処理アルゴリズム１２８、データバッファ処理モジュール１３０及び／又はコンピューティング装置１００の他のコンポーネントの演算の間、データ及び／又は命令を一時的に記憶することができる。各レジスタ１１８は、レジスタサイズ又は「幅」を有し、このレジスタサイズ又は「幅」は、レジスタ１１８が一時に記憶することができるデータの量である。データレジスタ１１８の少なくとも１つは、データ‐レベル並列性のために構成される。例えば、いくつかの実施形態において、少なくとも１つのデータレジスタ１１８は、ＳＩＭＤ又は同様のデータ‐レベル並行処理のために構成され、すなわち、少なくとも１つのデータレジスタ１１８は、複数のデータに対して同一のオペレーションを同時に又は実質的に同時に行うことができる複数の機能ユニット（例えば、「レーン」、「データパス」又は「実行ユニット」）に分割されることができる。例えば、１２８ビットの幅を有するＳＩＭＤ又は同様のレジスタにおいて、コンピュータ命令は、この１２８ビットのデータの部分を各々処理することができるレジスタ１１８の複数のレーン又はデータパスを指定することができ、したがって、アルゴリズム１２８は、他のデータパスとは独立して、データパスの各々に対して同時に実行されることができる。
【００１５】
例示的なコア１１２、１１４、１１６はさらに、１又は複数のキャッシュメモリ（図示せず）を含み、あるいはこれに通信可能につながれる。キャッシュメモリを利用して、シリアルデータ処理アルゴリズム１２８、データバッファ処理モジュール１３０及び／又はコンピューティング装置１００の他のコンポーネントの演算の間、データ及び／又は命令を一時的に記憶することができる。キャッシュメモリとレジスタ１１８とに加えて、プロセッサ１１０及び／又はそのコア１１２、１１４、１１６は、メモリ１２０を含み、あるいはこれにその他の方法で通信可能につながれる。メモリ１２０の部分は、ダイナミックランダムアクセスメモリ装置（ＤＲＡＭ）、同期型ダイナミックランダムアクセスメモリ装置（ＳＤＲＡＭ）、ダブルデータレートダイナミックランダムアクセスメモリ（ＤＤＳ  ＳＤＲＡＭ）及び／又は他の揮発性メモリ装置などの、任意のタイプの適切なメモリ装置として具現化されることができる。
【００１６】
プロセッサ１１０はさらに、Ｉ／Ｏサブシステム１２２に通信可能につながれる。具体的に図示されてはいないが、Ｉ／Ｏサブシステム１２２は、通常、メモリコントローラ（例えば、メモリコントローラサブシステム又はノースブリッジ）、入力／出力コントローラ（例えば、入力／出力コントローラサブシステム又はサウスブリッジ）及びファームウェア装置を含む。当然ながら、他の実施形態において、他の構成を有するＩ／Ｏサブシステムが使用されてよい。例えば、いくつかの実施形態において、Ｉ／Ｏサブシステム１２２は、システムオンチップ（ＳｏＣ）の部分を形成し、プロセッサ１１０とコンピューティングシステム１００の他のコンポーネントとともに、単一の集積回路チップ上に組み込まれることができる。このようなものとして、Ｉ／Ｏサブシステム１２２の各コンポーネントは、いくつかの実施形態において、共通の集積回路チップ上に位置することができることを十分理解されたい。
【００１７】
例示的なＩ／Ｏサブシステム１２２は、１又は複数の記憶装置１２４に通信可能につながれる。記憶装置１２４の部分は、ディスク記憶装置（例えば、ハードディスク）、メモリカード、メモリスティック及び／又はその他などの、データ及び／又は命令を記憶するための任意の適切な装置として具現化されることができる。いくつかの実施形態において、シリアルデータ処理アルゴリズム１２８、データバッファ処理モジュール１３０及び／又はシングルデータバッファ１３２は、記憶装置１２４に少なくとも一時的に具現化される。実行の間、シリアルデータ処理アルゴリズム１２８、データバッファ処理モジュール１３０及び／又はシングルデータバッファ１３２の部分は、より迅速な処理又は他の理由を目的として、メモリ１２０、キャッシュメモリ及び／又はレジスタ１１８にロードされることができる。他の実施形態において、シリアルデータ処理アルゴリズム１２８及び／又はデータバッファ処理モジュール１３０は、回路、マシン実行可能論理ユニット又は同様のものとして具現化されることができる。すなわち、シリアルデータ処理アルゴリズム１２８及び／又はデータバッファ処理モジュール１３０は、様々な実施形態において、ソフトウェア、ファームウェア、ハードウェア及び／又はこれらの組み合わせとして各々具現化されることができる。さらに、データバッファ処理モジュール１３０は、シリアルデータ処理アルゴリズム１２８のサブモジュール又は「拡張」として、あるいはシリアルデータ処理アルゴリズム１２８及び／又は他のソフトウェア（例えば、オペレーティングシステム、セキュリティアプリケーション及び／又はその他）によりコール可能な関数、プロシージャ又はライブラリオブジェクトとして具現化されることができる。例えば、バッファ処理モジュール１３０は、セキュアハッシュアルゴリズムなどの既存の又は将来の暗号ハッシュアルゴリズムに対する１又は複数のソフトウェア拡張として具現化されることができる。
【００１８】
Ｉ／Ｏサブシステム１２２は、１又は複数の周辺装置１４０に通信可能につなぐことができる。（１又は複数の）周辺装置１４０は、例えば、コンピューティング装置１００の使用意図に依存して、１又は複数のネットワークインタフェース、グラフィクス及び／若しくはビデオアダプタ、キーボード、タッチスクリーン、ディスプレイ、プリンタ、データ記憶装置、並びに／又は他の周辺装置を含むことができる。さらに、コンピューティング装置１００は、説明の明りょうさを目的として図１に例示されていない他のコンポーネント、サブコンポーネント及び装置を含んでよいことを十分理解されたい。
【００１９】
概して、コンピューティング装置１００のコンポーネントは、図１に図示されるとおり、両矢印で図式的に表された１又は複数の信号パスによって通信可能につながれる。こうした信号パスは、それぞれの装置間の通信を容易にすることができる任意のタイプの有線又は無線の信号パスとして具現化されることができる。例えば、信号パスは、任意の数のワイヤ、プリント回路板トレース、ビア、バス、２地点間相互接続、介在装置及び／又は同様のものとして具現化されることができる。
【００２０】
次に図２を参照すると、バッファ処理モジュール１３０が入力データバッファ２１０にわたるシリアルデータ処理アルゴリズム１２８の並行実行を管理する例示的なシステム２００が図示されている。例示的な入力データバッファ２１０は、例えば、任意のサイズ又は長さＬ（例えばビット又はバイト単位で測定される）を有するデータ文字列（データファイル又は「メッセージ」）である。以下でより詳細に説明されるとおり、バッファ処理モジュール１３０は、入力データバッファ２１０の内容を、複数のセグメントＳに分割し、これにおいて、セグメントの数は、システム２００の特定のデザイン又は実装の要件を所与として所望される又は可能である、入力データバッファ２１０にわたる並列性のレベル又は度合いを表す正の整数である。例示的な実施形態において、各セグメントは、シリアルデータ処理アルゴリズム１２８の要件に従って指定された長さにパディングされる（be  padded）ことができる。換言すると、パディング前のセグメントの長さとシリアルデータ処理アルゴリズム１２８の仕様とに依存して、パディングされることがあるセグメントもあれば、パディングされないセグメントもある。
【００２１】
バッファ処理モジュール１３０は、入力データバッファ２１０（例えば、必要に応じてパディングされた、セグメント）の内容を、各セグメントがレジスタ１１８の異なるレーン又はデータパスに割り当てられるように、データレジスタ１１８に流す（streams）。バッファ処理モジュール１３０は、アルゴリズム１２８の実行をレジスタ１１８の各レーン又はデータパスに対して並行して始動し、したがって、各セグメントはシリアルデータ処理アルゴリズム１２８によって同時に処理される。
【００２２】
アルゴリズム１２８は、指定されたサイズＢ（例えばビット又はバイト単位で測定される）のデータブロック単位で順次、データバッファ２１０の（必要に応じてパディングされた）セグメントの各々を並行して処理し、これにおいて、各データブロックは、サイズＷ（例えば、ビット又はバイト単位で測定される）の複数のデータワードから成り、ここでＢはＷの倍数である。アルゴリズム１２８は、各セグメントについて、出力（又は、いくつかの実施形態において「メッセージダイジェスト」又は「ハッシュダイジェスト」）を生成し、この出力は、出力データバッファ２１２に少なくとも一時的に記憶されることができる。出力データバッファ２１２(１)〜(Ｓ)の各々の内容は（ここで、Ｓはセグメントの数である）、固定された長さＤ（例えば、ビット又はバイト単位で測定される）を有する。入力データバッファ２１０と出力データバッファ２１２(１)〜(Ｓ)との双方は、様々な実施形態において、シングルデータバッファ１３２として又は１若しくは複数の一時記憶バッファ内に、具現化されることができる。例えば、シングルデータバッファ１３２の内容は、最初、入力データバッファ２１０の内容に対応することができ、バッファ処理モジュール１３０及び／又はシリアルデータ処理アルゴリズム１２８の実行が進むにつれて、更新されることができる。
【００２３】
いくつかの実施形態において、アルゴリズム１２８は、ＭＤ５、ＳＨＡ１、ＳＨＡ２５６又はＳＨＡ５１２などの暗号ハッシュ関数であり、データバッファ処理モジュール１３０は、セグメント数Ｓの決定において、暗号ハッシュ関数の特定の仕様を（例えば、関連する連邦情報処理標準公開（Federal  Information  Processing  Standards  Publication）又はＦＩＰＳ  ＰＵＢに定義されるように）パラメータとして使用する。一例として、ＳＨＡ２５６セキュアハッシュ関数のための標準は、Ｂ＝５１２ビット、Ｗ＝３２ビット及びＤ＝２５６ビットであることを指定する。標準のＳＨＡ２５６ハッシュ関数は、任意長の入力バッファの内容をサイズＢのブロックに分割し、複数の計算ラウンドを各ブロックに対して実行し、各ラウンドにおいて、ブロックからサイズＷのワードを使用する。各ラウンドは、１つのラウンドの出力が後続のラウンドに対する入力になるように、バッファを更新する。
【００２４】
従来、ＳＨＡ２５６ハッシュ関数は入力バッファの内容のブロックを順次処理し、したがって、１つのブロックのために作成されるハッシュダイジェストは、入力バッファ内のデータの各ブロックが処理され終わるまで、次ブロックの処理のための最初のハッシュダイジェストとして使用されるなどする。対照的に、バッファ処理モジュール１３０は、シングルデータバッファにわたる複数のセグメントを定義し、これにおいて、各セグメントはデータの１又は複数のブロックを含み、データバッファのセグメントの各々にアルゴリズム１２８を並行して適用する。例えば、データレジスタが２５６ビットの幅を有する場合、バッファ処理モジュール１３０は、入力データバッファ２１０の内容を、(レジスタ幅)／Ｗ、すなわち２５６／３２＝８セグメントに分割し、８セグメントの各々に対してアルゴリズム１２８を並行して実行することができる。
【００２５】
次に図３を参照すると、コンピュータ化されたプログラム、ルーチン、ロジック及び／又は命令としてバッファ処理モジュール１３０及び／又はコンピューティング装置１００の他のモジュール若しくはコンポーネントが実行可能な、シングルデータバッファの並行処理のための例示的な方法３００が図示されている。ブロック３１０において、方法３００は、入力データバッファ２１０の内容を分割するための、セグメントの数Ｓを決定し、これに応じて、決定された数のセグメントを、入力バッファ２１０の内容を分割することによって作成する。いくつかの実施形態において、セグメントの数は予め決定され、パラメータ、引数又は格納された値（例えば、ルックアップテーブル又はデータベースから）として単にアクセスされることができる。他の実施形態において、セグメントの数は、ロード時又は実行時に決定されることができる。いくつかの実施形態において、セグメントの数は、レジスタ１１８の幅、シリアルデータ処理アルゴリズム１２８のパラメータ若しくは仕様（例えば、ブロックサイズ、ワードサイズ、出力長など）、及び／又は入力データバッファ２１０の長さの関数とすることができる。一例として、ＳＨＡ２５６ハッシュ関数がアルゴリズム１２８として使用される場合、Ｓ＝８、Ｗ＝４バイト、及びＢ＝６４バイトである。
【００２６】
引き続きブロック３１０において、セグメントの各々は、特定の幅（例えば、３２ビット）を有するデータワードから成るものとして定義される。いくつかの実施形態において、セグメントワード幅は、アルゴリズム１２８により指定されるワード幅Ｗに対応する。セグメントは、セグメントの長さがブロックサイズＢで均等に割り切れるように、入力データバッファ２１０のＳ個おきのワード（every  Sth  word）を使用して各々作成される。入力データバッファ２１０の長さＬはセグメントブロックサイズ（Ｂ×Ｓ、又はＳＢ）で除算されて、入力データバッファ２１０の内容のどれほどを同一サイズのセグメントで処理することができるかが判定される。入力データバッファの長さＬがＳＢで均等に割り切れない場合、セグメントのうち１又は複数がパディングされ、あるいは残りのデータから成る最後のセグメントが作成されることができる。ＳＨＡ２５６の例において、ＳＢ＝８×６４＝５１２バイトである。８セグメント存在するため、各セグメントは、入力データバッファ２１０内の８個おきのデータワード（３２ビット、又は４バイト）を、最大で５１２×Ｎビットまで使用して形成され、ここで、Ｎは正の整数であり、５１２×ＮはＬより小さい。
【００２７】
ブロック３１２において、方法３００は、必要に応じて前処理ルーチン又は「オンザフライ」の一部として、セグメントの各々のための任意の必要なパディングを行う。例えば、暗号ハッシュ関数の場合、各セグメントは、バッファ長の表示に加えて複数のデータビットをメッセージの末尾に（例えば、連結によって）付加することによって、必要に応じてパディングされることができ、したがって、セグメントは、選択されたアルゴリズム１２８による処理のために指定された長さになる。いくつかの実施形態において、パディングは、“１”のビットの後に必要数の“０”のビットが続き、その後にバッファ長が続くものを含む。他の実施形態において、“０”及び“１”のビットの他の組み合わせ又はパターンが、各セグメントのパディングに使用されてよい。下層のアルゴリズム１２８を定義する標準又は仕様が、パディングスキームを指定する。いくつかの実施形態において、セグメントの各々は、十分な複数のビットによって拡張されて、パディングされるバッファをブロックサイズの最小倍数にする。例えば、バッファ２１０の各セグメントは、それに最も近いＢバイトの倍数までパディングされ、それからアルゴリズム１２８に適用されるＳ重の（S-way）ＳＩＭＤ処理を用いて処理されてＳ個のダイジェストを生成することができる。この場合、セグメントごとのパディングは、アルゴリズム１２８の標準パディングスキームに従って行われる。いくつかの場合（残りのセグメントの場合など）、セグメントは、他のパディングされたセグメントとは異なるパディング長（padded  length）を有することができる。例えば、パディングは、必要なパディングを加えたセグメント内のデータ量がブロックサイズより大きくなるとき、追加のブロックを有するセグメントをもたらすことができる。
【００２８】
ブロック３１４において、方法３００は、セグメントをレジスタ１１８のデータパスに流し、あるいはその他の方法で読み込み、したがって、各セグメントは、（例えばインタリービングを使用して）異なるデータパスへと読み込まれる。いくつかの実施形態において、これは、最大でＳＢまで、すなわち、均等にサイズ調整されたセグメントのすべてが処理され終わるまでインクリメントされるシングルデータポインタを使用することによって達成される。ＳＨＡ２５６の例において、８個の３２ビットワードが、一時に、レジスタの８個のデータパスに読み込まれる。別の例として、１２８ビットレジスタを備えたＳＩＭＤ能力があるマイクロプロセッサ上でＳＨＡ‐１を実行することは、下記のパラメータ設定、すなわち、Ｂ＝６４バイト、Ｗ＝４バイト、Ｓ＝４、Ｄ＝２０バイトを有することになる。
【００２９】
ブロック３１６において、シリアルデータ処理アルゴリズム１２８は、パディングされたデータセグメントの各々に対して並行して実行される。すなわち、各々のパディングされたセグメントについて、アルゴリズム１２８は、セグメントのブロックを、他のセグメントがアルゴリズム１２８により同様に処理されているのと同時に、順次処理する。したがって、各々のパディングされたセグメントについて、中間結果（例えば、ハッシュダイジェスト）が作成される。ＳＨＡ２５６の例において、ＳＨＡ２５６アルゴリズムは、各データパス／３２ビットワードに対して実質的に同時に実行され、それからその次の８ワードがレジスタデータパスに読み込まれ、ＳＨＡ２５６アルゴリズムによって、最大でブロックサイズＢまで、並行して処理されるなどする。
【００３０】
各データセグメントがアルゴリズム１２８の仕様に従ってパディングされ処理されるという事実に起因して、いくつかの実施形態において、個々のセグメント結果が結合される必要がなくなる。従って、セグメント結果は、別個のバッファに、又は１つのバッファに一緒に（例えば、連結されている場合）、記憶されることができる。場合により、ブロック３１８において、個々のＳ個のダイジェストを結合して、ただ１つの結果、例えば、アルゴリズム１２８の最終結果を形成することができる。例えば、Ｓ個のダイジェストのセットが長さＳ×Ｄの別のデータバッファとして扱われることができ、それから、サイズＤの最終ハッシュがシングルバッファ方法で生成されることができる。セグメント結果は、排他的ＯＲ（ＸＯＲ）又は加算（ＡＤＤ）関数を使用することを含む複数の種々の方法で、あるいはセグメント結果を連結してアルゴリズム１２８を再度実行することによって、結合することができる。ＳＨＡ２５６の例を用いると、８個のハッシュダイジェストの各々を結合して、１個の２５６ビットのハッシュダイジェストにすることができる。方法３００は他のプロセッサ構成及びシリアルデータ処理アルゴリズムに容易に適合させることができることを、当業者には十分理解されたい。例えば、他のレジスタ幅を有するレジスタが使用されてよい。一例として、５１２ビットの幅を有するＡＶＸ３を使用すると、セグメントの数Ｓは８ではなく１６にすることができ、各セグメントは１６個おきの（３２ビット）ワードから作ることができる。
【００３１】
いくつかの実施形態において、データセグメントは、インタリーブされた独立したバッファに類似し、これにおいて、複数の独立したハッシュダイジェストが、上記セグメントについて、上記で論じられたとおり並行して生成される。いくつかの実施形態において、インタリーブされるセグメントの数は、２のべき乗である。セグメントの作成において、方法３００のいくつかの実施形態は、バッファ２１０をブロックサイズの又はより大きなサイズの処理部分に分割するのではなく、データをより細かい粒度（例えば、データワード）でインタリーブする。
【００３２】
図３に再び戻ると、方法３００の例示的な実施形態は、ハッシュアルゴリズムＨを使用し、このハッシュアルゴリズムは、サイズＢバイトの整数ブロックに対して各々動作するように定義される。下記の実施形態は、長さＬのメッセージＭ０を、所与のレベルの並列性Ｓを用いてハッシュする（ここで、||シンボルは連結を表す）。セグメントが作成された後、Ｈに関連するパディング関数が、予め決定されたパターンとＢバイトの倍数である最小長さへのセグメント長の連結とを用いてメッセージの各セグメントを拡張する。
【００３３】
図３のブロック３１０を参照すると、メッセージＭ０は、各々が長さＬ／ＳであるＳ個のセグメントに分割される。メッセージＭ０は、Ｍ０のワードサイズＷビットごとが異なるセグメントに割り当てられるように、インタリーブされる方法で分割されることができる。各セグメントは、Ｗビットワードの配列として表されることができ、
Ｓｅｇ０＝Ｍ０[０]||Ｍ０[Ｓ]||Ｍ０[２Ｓ]||  ...
Ｓｅｇ１＝Ｍ０[１]||Ｍ０[Ｓ＋１]||Ｍ０[２Ｓ＋１]||  ...
...
ＳｅｇＳ−１＝Ｍ０[Ｓ−１]||Ｍ０[２Ｓ−１]||Ｍ０[３Ｓ−１]||  ...
ここで、各Ｍ０[ｎ]は、メッセージへのワードサイズＷのインデックスである。図３のブロック３１２を参照すると、アルゴリズム１２８により指定されるパディング関数は、メッセージの各セグメントに適用され、各々が或るパディング長を有する個々のセグメントを生成する。各セグメントのパディング長は、それぞれのセグメントをＢバイトの倍数に拡張することができる最小の長さである。上記で言及されたとおり、いくつかのセグメントは、他のセグメントとは異なるパディング長を有することができる。
【００３４】
図３のブロック３１６を参照すると、Ｓ個のリーフレベルダイジェストＤｋが、パディングされたセグメントに対して、ｋ＝０〜(Ｓ−１)についてＤｋ＝Ｈ(Ｓｅｇｋ)で生成される。図３のブロック３１８（場合による）を参照すると、新しいメッセージＭ１が、ブロック３１６からの結果的なダイジェストをワードサイズＷビットごとずつインタリーブすることによって作成されることができる。Ｍ１＝Ｄ０[０]||Ｄ１[０]...||Ｄ(Ｓ−１)[０]||Ｄ１[１]...||Ｄ(Ｓ−１)[(Ｄ／Ｗ)−１]である場合、各Ｄｋ[ｎ]は、セグメントのダイジェストへのワードサイズＷのインデックスであり得る。そして、ハッシュアルゴリズムＨは、Ｍ１に適用されることができる（例えば、Ｈ(Ｍ１)）。
【００３５】
いくつかの実施形態において、メモリ内で整合されたデータバッファ２１０の内容が、置き換え（transposing）の必要なしに、ＳＩＭＤレジスタに直接読み込まれる（例えば、「流される」）。いくつかの実施形態において、方法３００は、開始時にバッファ２１０の長さを知る必要なしに、流されるデータ（例えば、ネットワークから）がレジスタ１１８に直接供給されることを可能にする。これに応じて、シングルスレッドアプリケーションは、開示された並行処理のパフォーマンスの恩恵を生かすために（ハッシュアルゴリズムレベルにおいて以外で）変更される必要がなくなる。
【００３６】
いくつかの実施形態において、アルゴリズム１２８は、計算及び／又は安全性の検討に基づいて選択され、あるいは順序付けられることができ、様々なプロトコル／標準における暗号ハッシュアルゴリズムの現在の（可能性として順序付けられた）リストが、本明細書に開示されたとおり並列化されたバージョンを用いて増強されることができる（例えば、ＳＨＡ１ｘ４、ＳＨＡ１ｘ８、ＳＨＡ２５６ｘ４、ＳＨＡ２５６ｘ８など）。
【００３７】
いくつかの実施形態、例えば、安全にロードされたファイルの署名を検証することに関連するアプリケーションにおいて、署名エンティティは、選択されたセキュリティ（例えば、ＳＨＡ２５６）の既存の暗号ハッシュアルゴリズムを、検証のために計算するのに最も効率の良い方法３００のバージョンで置換する。例えば、検証エンティティがそのプロセッサコア内に１２８ビットＳＩＭＤデータパス実行ユニットを有する場合、及びＳＨＡ２５６強度のダイジェストが所望される場合、ＳＨＡ２５６ｘ４アルゴリズムが所望され得る（ＳＨＡ２５６アルゴリズムが３２ビットベースであるとき、１２８ビットＳＩＭＤ実行ユニットは１２８／３２＝４セグメントを並行して処理することができる）。したがって、現在使用されている３２ビットアルゴリズム（例えば、ＭＤ５、ＳＨＡ１、ＳＨＡ２５６）のうち１つを使用することに代わって、検証エンティティは、対応するＭＤ５ｘ８、ＳＨＡ１ｘ４、ＳＨＡ２５６ｘ４の並列化されたアルゴリズムを使用することになる。いくつかの実施形態において、１２８ビットＳＩＭＤ全体像（perspective）から４セグメントだけしか必要とされないにもかかわらず、アルゴリズムの制約されたデータ依存連鎖に起因して、追加の並列性が、ＭＤ５と共に所望されることがある。
【００３８】
種々の計算強度についての多くの検証装置が存在し得る実施形態において、署名エンティティは、上記検証装置の大半について動作する並列性のレベルを決定する必要がある場合がある。開示された実施形態は、より大きなレベルの並列性が署名の間に作成されることができるとき、サーバがこれを非常に正確に推定することを必要とせず、検証エージェントは、そのＳＩＭＤ又はハードウェア能力が指定された数と同数のセグメントをいっせいに処理することができない場合、検証の間、マルチパス（multi-pass）アプローチを行うことができる。例えば、署名部がｘ４スキームを使用することができながら、検証エージェントは２パス（passes）のｘ２スキームを行うことができる。
【００３９】
いくつかの実施形態において、あまりに多くのパス（passes）が（例えば、ダイジェストの複数の状態変数を管理することに起因して）必要とされる場合、効率性のいくらかのロスが生じることがあるが、データは依然としてただ１回でストリーミング方法で効率良く運ばれることができる。この場合、アプリケーションは、状態変数のセットを通じてサイクルを回す（cycle）必要があることになる。例えば、いくつかの場合、クライアント装置がＳＩＭＤユニットをまったく有さないことがあり、単純なスカラー演算を行ってＳＨＡｘ４ハッシュを処理する必要がある。この場合、上記クライアント装置は、１セットのＳＨＡ２５６状態変数（３２バイト）を用いて動作することに代わって、４つの上記状態変数のコピー（１２８バイト）に対して同時に動作することになり、データバッファからワードを処理するとき、上記状態変数のコピーを通じてサイクルを回すことになる。状態サイズにおけるこの増加は、非常に小さい。しかしながら、一ブロックのための（例えば、ＳＨＡのための）メッセージスケジュールに関連する動作用セットサイズの増加は、いくつかの場合、望まれないことがある。動作用セットサイズにおける増加が問題になる場合、４ブロックのデータを記憶し、一時に１つのインタリーブされたブロックに対して厳密に動作するように選択することができる。多くの他の変形が可能であり、様々な実施形態が、任意の装置が過度の負荷無しに効率良く並行ハッシュ署名を処理することを可能にすることができる。しかしながら、固定のハードウェアエンジンが、パディングを含めハッシュ関数全体を所与のバッファ／長さ入力に対して実行するようにデザインされる場合、このパディングは、上記ハードウェアとして同様に設計されて同一の結果を達成することができる。ハードウェアエンジンがブロック単位に対して動作し、あるいはパディングを含まないモードを有する場合、このハードウェアエンジンを使用して、開示されたマルチハッシュ方法を行うことができる。
【００４０】
開示された実施形態は、大きな度合いの並列性（例えば、ｘ３２又はｘ６４）の能力があるが、いくつかの実施形態において、既存の装置又は合理的に予期される将来の装置（例えば、ｘ４又はｘ８）の能力に従って方法３００を構成することが望まれ得る。
【００４１】
いくつかの実施形態において、方法３００のＳＨＡ２５６ｘ４バージョンは、合理的にサイズ調整された１ＫＢデータバッファに対して最良のＳＨＡ２５６アルゴリズム計算を介して約２．６ｘのパフォーマンス向上を提供することが示されている。いくつかの実施形態において、方法３００のＭＤ５ｘ８バージョンは、標準ＭＤ５アルゴリズムを介して約４．４ｘのパフォーマンス向上をもたらすことが示されている。マルチハッシュパフォーマンスは、将来のプロセッサのデータパス幅の増加に比例して増減する（scale）であろう。さらに、開示された実施形態を用いると、結果的に生じるダイジェストは、下層のハッシュ関数の直接適用によって取得されるダイジェストと少なくとも同じ安全性及び衝突耐性があるであろう。今日最も広く使用されているハッシュ関数に加えて、開示された実施形態は、新しいＳＨＡ３候補に対して適合させることができる。
【００４２】
実施例（EXAMPLES）
本明細書に開示される装置、システム及び方法の例示的な実施例が以下に提供される。上記装置、システム及び方法の一実施形態には、以下に説明される実施例のうち１又は複数、及び任意の組み合わせを含むことができる。
【００４３】
実施例１は、データバッファを処理するためのコンピューティング装置を含む。上記コンピューティング装置は、データバッファ処理モジュールであって、バッファ長と複数のデータセグメントとを有する任意長のデータバッファにアクセスするステップであり、各データセグメントは、ゼロより大きく上記バッファ長より小さいセグメント長を有する、ステップと、各データセグメントをシリアルデータ処理アルゴリズムに従ってパディングするステップと、上記のパディングされたデータセグメントの各々をデータレジスタに直接読み込むステップであり、上記データレジスタは複数のデータパスを有し、各々のパディングされたデータセグメントは異なるデータパスに直接読み込まれる、ステップと、各データパスのための結果を作成するように、上記データパスの各々に対してシリアルデータ処理アルゴリズムを実質的に並行して行うステップと、をなす、データバッファ処理モジュールを含む。
【００４４】
実施例２は、実施例１の対象事項を含み、上記データバッファは任意長を有する。
【００４５】
実施例３は、実施例１又は実施例２の対象事項を含み、上記データバッファ処理モジュールは、上記のパディングされたデータセグメントの各々を上記データレジスタの異なるデータパスに直接読み込むデータバッファ処理モジュールを含む。
【００４６】
実施例４は、実施例１乃至３のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、上記データセグメントの各々を上記シリアルデータ処理アルゴリズムに従ってパディングするデータバッファ処理モジュールを含む。
【００４７】
実施例５は、実施例１乃至４のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、暗号ハッシュアルゴリズムに対する拡張として具現化される。
【００４８】
実施例６は、実施例１乃至５のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、上記コンピューティング装置のマイクロプロセッサのシングルコア上で実行するデータバッファ処理モジュールを含む。
【００４９】
実施例７は、実施例１乃至６のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、上記シングルコアのシングルスレッド上で実行するデータバッファ処理モジュールを含む。
【００５０】
実施例８は、実施例１乃至７のうちいずれかの対象事項を含み、上記コンピューティング装置の単一命令多重データ対応プロセッサ上で実行するデータバッファ処理モジュールを含む。
【００５１】
実施例９は、実施例１乃至８のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、シングルスレッドソフトウェアアプリケーションで実行するデータバッファ処理モジュールを含む。
【００５２】
実施例１０は、任意長のデータバッファを処理するための方法を含む。上記方法は、上記データバッファを複数のデータセグメントとして定義するステップであり、各データセグメントは、ゼロより大きく上記データバッファの長さより小さいセグメント長を有する、ステップと、各データセグメントをシリアルデータ処理アルゴリズムに従ってパディングするステップと、上記のパディングされたデータセグメントをデータレジスタに流すステップであり、上記データレジスタは複数のデータパス実行ユニットを有し、各々のパディングされたデータセグメントは、シングルデータポインタを用いて異なるデータパス実行ユニットに流される、ステップと、各データパス実行ユニットのための結果を作成するように、上記データパス実行ユニットの各々でシリアルデータ処理アルゴリズムを実質的に並行して実行するステップと、を含む。
【００５３】
実施例１１は、実施例１０の対象事項を含み、上記データレジスタの幅と上記シリアルデータ処理アルゴリズムにより指定されるワードサイズとに基づいて上記セグメント長を定義するステップ、をさらに含む。
【００５４】
実施例１２は、実施例１０及び１１のうちいずれかの対象事項を含み、上記データバッファを複数のデータセグメントとして定義するステップは、上記データバッファをインタリーブされる方法で上記複数のデータセグメントに分割するステップを含む。
【００５５】
実施例１３は、実施例１０乃至１２のうちいずれかの対象事項を含み、上記データバッファは複数のデータワードを含み、上記データバッファをインタリーブされる方法で上記複数のデータセグメントに分割するステップは、各データセグメントがデータワードの配列を含むように、上記データバッファ内の各データワードを異なるデータセグメントに割り当てるステップを含む。
【００５６】
実施例１４は、実施例１０乃至１３のうちいずれかの対象事項を含み、各結果は複数のデータワードを含み、上記結果を上記データワードずつインタリーブするステップ、をさらに含む。
【００５７】
実施例１５は、実施例１０乃至１４のうちいずれかの対象事項を含み、シリアルデータ処理アルゴリズムを実行するステップは、暗号ハッシュ関数を実行するステップを含む。
【００５８】
実施例１６は、実施例１０乃至１５のうちいずれかの対象事項を含み、上記のパディングされたデータセグメントの各々のためのハッシュダイジェストを生成するステップ、をさらに含む。
【００５９】
実施例１７は、実施例１０乃至１６のうちいずれかの対象事項を含み、上記ハッシュダイジェストを結合して新しいデータバッファを形成し、上記新しいデータバッファに対して上記暗号ハッシュ関数を実行する、結合するステップ、をさらに含む。
【００６０】
実施例１８は、実施例１０乃至１７のうちいずれかの対象事項を含み、上記結合するステップは、上記結果を連結し、上記の連結された結果に対して上記シリアルデータ処理アルゴリズムを実行するステップを含む。
【００６１】
実施例１９は、実施例１０乃至１８のうちいずれかの対象事項を含み、上記シリアルデータ処理アルゴリズムに関連するブロックサイズを決定し、パディングされたデータセグメントの各々の長さが上記ブロックサイズの倍数になるように上記データセグメントの各々をパディングするステップ、をさらに含む。
【００６２】
実施例２０は、実施例１０乃至１９のうちいずれかの対象事項を含み、固定されたパターンのデータビットを上記データセグメントの各々に付加するステップ、をさらに含む。
【００６３】
実施例２１は、実施例１０乃至２０のうちいずれかの対象事項を含み、上記コンピューティング装置のマイクロプロセッサの特性に基づいてデータセグメントの数を決定するステップ、をさらに含む。
【００６４】
実施例２２は、実施例１０乃至２１のうちいずれかの対象事項を含み、上記シリアルデータ処理アルゴリズムの特性に基づいてデータセグメントの数を決定するステップ、をさらに含む。
【００６５】
実施例２３は、プロセッサとメモリとを有する、複数の命令を記憶したコンピューティング装置を含み、上記複数の命令は、上記プロセッサにより実行されると、上記コンピューティング装置に実施例１０乃至２２のうちいずれかの方法を実行させる。
【００６６】
実施例２４は、複数の命令を記憶した１又は複数のマシン読取可能記憶媒体を含み、上記複数の命令は、実行されたことに応じて、実施例１０乃至２２のうちいずれかの方法を実行するコンピューティング装置をもたらす。
【００６７】
実施例２５は、複数の命令を記憶した１又は複数のマシン読取可能記憶媒体を含み、上記複数の命令は、実行されたことに応じて、データバッファを複数のデータセグメントに分割するステップであり、各データセグメントは、ゼロより大きく上記データバッファの長さより小さいセグメント長を有する、ステップと、各データセグメントをシリアルデータ処理アルゴリズムに従ってパディングするステップと、各々のパディングされたデータセグメントをコンピューティング装置のデータレジスタの異なるデータパス実行ユニットに直接読み込むステップと、各データパス実行ユニットのための結果を作成するように、上記データパス実行ユニットの各々に対して暗号ハッシュアルゴリズムを実質的に並行して実行するステップと、をなす上記コンピューティング装置をもたらす。
【００６８】
実施例２６は、実施例２５の対象事項を含み、上記データパス実行ユニットにおいて作成された上記結果を結合するステップ、をさらに含む。
【００６９】
実施例２７は、実施例２５又は実施例２６の対象事項を含み、上記の結合された結果に対して上記暗号ハッシュアルゴリズムを実行するステップ、をさらに含む。
【００７０】
実施例２８は、実施例２５乃至２７のうちいずれかの対象事項を含み、上記暗号ハッシュアルゴリズムは、セキュアハッシュアルゴリズム又はＭＤ５アルゴリズムを含む。
【００７１】
実施例２９は、実施例２５乃至２８のうちいずれかの対象事項を含み、上記データレジスタの幅と上記暗号ハッシュアルゴリズムにより指定されるワードサイズとに基づいて上記セグメント長を定義するステップ、をさらに含む。
【００７２】
実施例３０は、実施例２５乃至２９のうちいずれかの対象事項を含み、上記データバッファを複数のデータセグメントとして定義するステップは、上記データバッファをインタリーブされる方法で上記複数のデータセグメントに分割するステップを含む。
【００７３】
実施例３１は、実施例２５乃至３０のうちいずれかの対象事項を含み、上記データバッファは複数のデータワードを含み、各データワードは複数のデータビットを含み、上記データバッファをインタリーブされる方法で上記複数のデータセグメントに分割するステップは、各データセグメントがデータワードの配列を含むように、上記データバッファ内の各データワードを異なるデータセグメントに割り当てるステップを含む。
【００７４】
実施例３２は、実施例２５乃至３１のうちいずれかの対象事項を含み、各結果は複数のデータワードを含み、方法は、上記結果を上記データワードずつインタリーブするステップを含む。
【００７５】
実施例３３は、実施例２５乃至３２のうちいずれかの対象事項を含み、上記コンピューティング装置のマイクロプロセッサの特性と上記暗号ハッシュアルゴリズムの特性とのうち１又は複数に基づいてデータセグメントの数を決定するステップ、をさらに含む。
【００７６】
関連出願の相互参照
本出願は、３５Ｕ.Ｓ.Ｃ.§１１９(ｅ)のもと、２０１２年７月１１日に申請された米国特許仮出願第６１/６７０,４７２号及び２０１２年９月２８日に申請された米国特許出願第１３/６３１,７６３号に対して優先権を主張する。
【図１】
2015529865.tif 000003
【図２】
2015529865.tif 000004
【図３】
2015529865.tif 000005
【国際調査報告】
2015529865.tif 000006
2015529865.tif 000007
2015529865.tif 000008
2015529865.tif 000009