【文献】
太田英憲,米田健,データスライシング技術によるSHA−1の高速化,2010年 暗号と情報セキュリティシンポジウム(SCIS2010),2010年 1月19日,4F1-3
【文献】
坪内佑樹,他,重複排除ストレージにおけるSHA−1計算のSSEによるスループット向上手法,情報処理学会研究報告,日本,情報処理学会,2012年 4月15日,Vol. 2012-HPC-133,No. 31,pp. 1-7
(58)【調査した分野】(Int.Cl.,DB名)
前記データバッファ処理モジュールは、前記のパディングされたデータセグメントの各々を前記データレジスタの異なるデータパスに直接読み込むようにさらに構成される、請求項1又は請求項2のコンピューティング装置。
前記データバッファ処理モジュールは、前記データセグメントの各々を前記シリアルデータ処理アルゴリズムに従ってパディングするようにさらに構成される、請求項1乃至3のうちいずれか1項のコンピューティング装置。
前記データバッファ処理モジュールは、暗号ハッシュアルゴリズムに対するサブモジュール、又は前記暗号ハッシュアルゴリズムによりコール可能な関数、プロシージャ若しくはライブラリオブジェクトである、請求項1乃至4のうちいずれか1項のコンピューティング装置。
前記データバッファ処理モジュールは、当該コンピューティング装置のマイクロプロセッサのシングルコア上での実行のために構成される、請求項1乃至5のうちいずれか1項のコンピューティング装置。
前記データバッファ処理モジュールは、当該コンピューティング装置の単一命令多重データ対応プロセッサ上での実行のために構成される、請求項1乃至7のうちいずれか1項のコンピューティング装置。
前記データバッファ処理モジュールは、シングルスレッドソフトウェアアプリケーションとの使用のために構成される、請求項1乃至8のうちいずれか1項のコンピューティング装置。
前記データバッファを複数のデータセグメントとして定義するステップは、前記データバッファをインタリーブされる方法で前記複数のデータセグメントに分割するステップを含む、請求項10又は請求項11の方法。
前記データバッファは複数のデータワードを含み、前記データバッファをインタリーブされる方法で前記複数のデータセグメントに分割するステップは、各データセグメントがデータワードの配列を含むように、前記データバッファ内の各データワードを異なるデータセグメントに割り当てるステップを含む、請求項12の方法。
前記ハッシュダイジェストを結合するステップは、前記結果を連結し、前記の連結された結果に対して前記シリアルデータ処理アルゴリズムを実行するステップを含む、請求項16の方法。
【発明を実施するための形態】
【0007】
本開示の概念は、種々の変更及び代替形式を受け入れる余地があるが、本開示の特定実施形態が、図面において例として図示されており、本明細書に詳細に説明されることになる。しかしながら、本開示の概念を開示される特定形式に限定する意図はまったくなく、逆に、意図するところは、本開示と添付される特許請求の範囲とに調和するすべての変更、均等物及び代替手段をカバーすることであることを理解されたい。
【0008】
本明細書における「1つの実施形態」「一実施形態」「一例示的実施形態」などの表現は、その説明される実施形態が特定の特徴、構造又は特性を含むことができることを示すが、あらゆる実施形態が上記特定の特徴、構造又は特性を含んでよく、あるいは必ずしも含まなくてもよい。さらに、こうした表現は、必ずしも同一の実施形態を参照するものではない。さらに、特定の特徴、構造又は特性が一実施形態と関連して説明されるとき、明示的に説明されるか否かにかかわらず、こうした特徴、構造又は特性を他の実施形態と関連して達成することは当業者の知識の範囲内であると考えられる。
【0009】
開示される実施形態は、いくつかの場合、ハードウェア、ファームウェア、ソフトウェア、又はこれらの任意の組み合わせにおいて実施することができる。開示される実施形態は、一時的又は非一時的なマシン読取可能(例えば、コンピュータ読取可能)記憶媒体により伝達される又は該記憶媒体上に記憶される命令として実施されることもでき、この命令を、1又は複数のプロセッサが読み出して実行することができる。マシン読取可能記憶媒体は、任意の記憶装置、機構、又はマシンにより読取可能な形式で情報を記憶する若しくは送信するための他の物理構造(例えば、揮発性若しくは不揮発性のメモリ、メディアディスク又は他のメディア装置)として具現化されることができる。
【0010】
図面において、いくつかの構造又は方法の特徴が、特定の配置及び/又は順序で図示されることがある。しかしながら、こうした特定の配置及び/又は順序は必ずしも必要とされないことを十分理解されたい。むしろ、いくつかの実施形態において、こうした特徴は、例示的な図に示されるものとは異なる態様及び/又は順序で配置される可能性がある。さらに、特定の図に構造又は方法の特徴を含むことは、こうした特徴がすべての実施形態に必要とされることを意味するものではなく、いくつかの実施形態において、含まれない場合があり、あるいは他の特徴と組み合わせられてよい。
【0011】
次に
図1を参照すると、データバッファ処理モジュール130が、例示的なコンピューティング装置100に具現化されている。使用において、データバッファ処理モジュール130は、入力として、シングルデータバッファ132(例えば、任意長の文字列又は「メッセージ」)をとる。データバッファ処理モジュール130は、シングルデータバッファ132のための並列性のレベル、すなわち、シリアルデータ処理アルゴリズム128(例えば、暗号ハッシュ関数)が並行して(in parallel)処理できるシングルデータバッファ132の「セグメント」の数を決定する。データバッファ処理モジュール130は、アルゴリズム128によるセグメントの並行処理を管理する。こうした並行処理後のアルゴリズム128の出力は、相違するが、従来の方法で(例えば、順次に)シングルデータバッファに対してアルゴリズム128を実行することにより通常達成される結果に相当するセキュリティ強度を有する。さらに、シングルデータバッファ132のセグメント化と並行処理との結果として、パフォーマンス向上を達成することができる。このように、データバッファ処理モジュール130は、下層のアルゴリズムが特定サイズ(例えば、64バイト)のブロックに対して動作するとしても、いかなる任意長のシングルデータバッファに対してもシリアルデータ処理アルゴリズムを行うことができる。
【0012】
例示的なコンピューティング装置100は、少なくとも1つのプロセッサ110、メモリ120、入力/出力(I/O)サブシステム122、記憶装置124、及び1又は複数の周辺装置140を含む。コンピューティング装置100は、特定の用途に依存して、例えば、デスクトップコンピュータシステム、ラップトップ若しくはタブレットコンピュータシステム、サーバ、エンタープライズコンピュータシステム、コンピュータのネットワーク、ハンドヘルド若しくはその他のモバイルコンピューティング装置、又は他の電子装置などの、任意のタイプのコンピューティング装置の中に又は任意のタイプのコンピューティング装置として具現化されてよい。
【0013】
例示的なプロセッサ110は、1又は複数のプロセッサコア又はシングルコアの論理部分、例えば、プロセッサコア112、114、116を含み、これらは、説明を簡易にするため、本明細書において単に「コア」という。いくつかの実施形態において、コア112、114、116のうち1又は複数は、SIMD(単一命令多重データ)命令セット又は同様のコンピュータ命令セットを使用してシングルスレッドのコンピュータプログラム(いくつかの実施形態において、データバッファ処理モジュール130など)を処理するように構成される。より詳細には、いくつかの実施形態において、コア112、114、116のうち少なくとも1つは、ストリーミングSIMD拡張(SSE)又はその後のバージョン(例えば、SSEn又はAVX(Advanced Vector Extensions))などの、1又は複数のストリーミング拡張を含む命令セットを用いて構成される。
【0014】
1又は複数のコア112、114、116は、1又は複数のデータレジスタ118を含み、あるいはこれに通信可能につながれる。データレジスタ118を利用して、シリアルデータ処理アルゴリズム128、データバッファ処理モジュール130及び/又はコンピューティング装置100の他のコンポーネントの演算の間、データ及び/又は命令を一時的に記憶することができる。各レジスタ118は、レジスタサイズ又は「幅」を有し、このレジスタサイズ又は「幅」は、レジスタ118が一時に記憶することができるデータの量である。データレジスタ118の少なくとも1つは、データ‐レベル並列性のために構成される。例えば、いくつかの実施形態において、少なくとも1つのデータレジスタ118は、SIMD又は同様のデータ‐レベル並行処理のために構成され、すなわち、少なくとも1つのデータレジスタ118は、複数のデータに対して同一のオペレーションを同時に又は実質的に同時に行うことができる複数の機能ユニット(例えば、「レーン」、「データパス」又は「実行ユニット」)に分割されることができる。例えば、128ビットの幅を有するSIMD又は同様のレジスタにおいて、コンピュータ命令は、この128ビットのデータの部分を各々処理することができるレジスタ118の複数のレーン又はデータパスを指定することができ、したがって、アルゴリズム128は、他のデータパスとは独立して、データパスの各々に対して同時に実行されることができる。
【0015】
例示的なコア112、114、116はさらに、1又は複数のキャッシュメモリ(図示せず)を含み、あるいはこれに通信可能につながれる。キャッシュメモリを利用して、シリアルデータ処理アルゴリズム128、データバッファ処理モジュール130及び/又はコンピューティング装置100の他のコンポーネントの演算の間、データ及び/又は命令を一時的に記憶することができる。キャッシュメモリとレジスタ118とに加えて、プロセッサ110及び/又はそのコア112、114、116は、メモリ120を含み、あるいはこれにその他の方法で通信可能につながれる。メモリ120の部分は、ダイナミックランダムアクセスメモリ装置(DRAM)、同期型ダイナミックランダムアクセスメモリ装置(SDRAM)、ダブルデータレートダイナミックランダムアクセスメモリ(DDS SDRAM)及び/又は他の揮発性メモリ装置などの、任意のタイプの適切なメモリ装置として具現化されることができる。
【0016】
プロセッサ110はさらに、I/Oサブシステム122に通信可能につながれる。具体的に図示されてはいないが、I/Oサブシステム122は、通常、メモリコントローラ(例えば、メモリコントローラサブシステム又はノースブリッジ)、入力/出力コントローラ(例えば、入力/出力コントローラサブシステム又はサウスブリッジ)及びファームウェア装置を含む。当然ながら、他の実施形態において、他の構成を有するI/Oサブシステムが使用されてよい。例えば、いくつかの実施形態において、I/Oサブシステム122は、システムオンチップ(SoC)の部分を形成し、プロセッサ110とコンピューティングシステム100の他のコンポーネントとともに、単一の集積回路チップ上に組み込まれることができる。このようなものとして、I/Oサブシステム122の各コンポーネントは、いくつかの実施形態において、共通の集積回路チップ上に位置することができることを十分理解されたい。
【0017】
例示的なI/Oサブシステム122は、1又は複数の記憶装置124に通信可能につながれる。記憶装置124の部分は、ディスク記憶装置(例えば、ハードディスク)、メモリカード、メモリスティック及び/又はその他などの、データ及び/又は命令を記憶するための任意の適切な装置として具現化されることができる。いくつかの実施形態において、シリアルデータ処理アルゴリズム128、データバッファ処理モジュール130及び/又はシングルデータバッファ132は、記憶装置124に少なくとも一時的に具現化される。実行の間、シリアルデータ処理アルゴリズム128、データバッファ処理モジュール130及び/又はシングルデータバッファ132の部分は、より迅速な処理又は他の理由を目的として、メモリ120、キャッシュメモリ及び/又はレジスタ118にロードされることができる。他の実施形態において、シリアルデータ処理アルゴリズム128及び/又はデータバッファ処理モジュール130は、回路、マシン実行可能論理ユニット又は同様のものとして具現化されることができる。すなわち、シリアルデータ処理アルゴリズム128及び/又はデータバッファ処理モジュール130は、様々な実施形態において、ソフトウェア、ファームウェア、ハードウェア及び/又はこれらの組み合わせとして各々具現化されることができる。さらに、データバッファ処理モジュール130は、シリアルデータ処理アルゴリズム128のサブモジュール又は「拡張」として、あるいはシリアルデータ処理アルゴリズム128及び/又は他のソフトウェア(例えば、オペレーティングシステム、セキュリティアプリケーション及び/又はその他)によりコール可能な関数、プロシージャ又はライブラリオブジェクトとして具現化されることができる。例えば、バッファ処理モジュール130は、セキュアハッシュアルゴリズムなどの既存の又は将来の暗号ハッシュアルゴリズムに対する1又は複数のソフトウェア拡張として具現化されることができる。
【0018】
I/Oサブシステム122は、1又は複数の周辺装置140に通信可能につなぐことができる。(1又は複数の)周辺装置140は、例えば、コンピューティング装置100の使用意図に依存して、1又は複数のネットワークインタフェース、グラフィクス及び/若しくはビデオアダプタ、キーボード、タッチスクリーン、ディスプレイ、プリンタ、データ記憶装置、並びに/又は他の周辺装置を含むことができる。さらに、コンピューティング装置100は、説明の明りょうさを目的として
図1に例示されていない他のコンポーネント、サブコンポーネント及び装置を含んでよいことを十分理解されたい。
【0019】
概して、コンピューティング装置100のコンポーネントは、
図1に図示されるとおり、両矢印で図式的に表された1又は複数の信号パスによって通信可能につながれる。こうした信号パスは、それぞれの装置間の通信を容易にすることができる任意のタイプの有線又は無線の信号パスとして具現化されることができる。例えば、信号パスは、任意の数のワイヤ、プリント回路板トレース、ビア、バス、2地点間相互接続、介在装置及び/又は同様のものとして具現化されることができる。
【0020】
次に
図2を参照すると、バッファ処理モジュール130が入力データバッファ210にわたるシリアルデータ処理アルゴリズム128の並行実行を管理する例示的なシステム200が図示されている。例示的な入力データバッファ210は、例えば、任意のサイズ又は長さL(例えばビット又はバイト単位で測定される)を有するデータ文字列(データファイル又は「メッセージ」)である。以下でより詳細に説明されるとおり、バッファ処理モジュール130は、入力データバッファ210の内容を、複数のセグメントSに分割し、これにおいて、セグメントの数は、システム200の特定のデザイン又は実装の要件を所与として所望される又は可能である、入力データバッファ210にわたる並列性のレベル又は度合いを表す正の整数である。例示的な実施形態において、各セグメントは、シリアルデータ処理アルゴリズム128の要件に従って指定された長さにパディングされる(be padded)ことができる。換言すると、パディング前のセグメントの長さとシリアルデータ処理アルゴリズム128の仕様とに依存して、パディングされることがあるセグメントもあれば、パディングされないセグメントもある。
【0021】
バッファ処理モジュール130は、入力データバッファ210(例えば、必要に応じてパディングされた、セグメント)の内容を、各セグメントがレジスタ118の異なるレーン又はデータパスに割り当てられるように、データレジスタ118に流す(streams)。バッファ処理モジュール130は、アルゴリズム128の実行をレジスタ118の各レーン又はデータパスに対して並行して始動し、したがって、各セグメントはシリアルデータ処理アルゴリズム128によって同時に処理される。
【0022】
アルゴリズム128は、指定されたサイズB(例えばビット又はバイト単位で測定される)のデータブロック単位で順次、データバッファ210の(必要に応じてパディングされた)セグメントの各々を並行して処理し、これにおいて、各データブロックは、サイズW(例えば、ビット又はバイト単位で測定される)の複数のデータワードから成り、ここでBはWの倍数である。アルゴリズム128は、各セグメントについて、出力(又は、いくつかの実施形態において「メッセージダイジェスト」又は「ハッシュダイジェスト」)を生成し、この出力は、出力データバッファ212に少なくとも一時的に記憶されることができる。出力データバッファ212(1)〜(S)の各々の内容は(ここで、Sはセグメントの数である)、固定された長さD(例えば、ビット又はバイト単位で測定される)を有する。入力データバッファ210と出力データバッファ212(1)〜(S)との双方は、様々な実施形態において、シングルデータバッファ132として又は1若しくは複数の一時記憶バッファ内に、具現化されることができる。例えば、シングルデータバッファ132の内容は、最初、入力データバッファ210の内容に対応することができ、バッファ処理モジュール130及び/又はシリアルデータ処理アルゴリズム128の実行が進むにつれて、更新されることができる。
【0023】
いくつかの実施形態において、アルゴリズム128は、MD5、SHA1、SHA256又はSHA512などの暗号ハッシュ関数であり、データバッファ処理モジュール130は、セグメント数Sの決定において、暗号ハッシュ関数の特定の仕様を(例えば、関連する連邦情報処理標準公開(Federal Information Processing Standards Publication)又はFIPS PUBに定義されるように)パラメータとして使用する。一例として、SHA256セキュアハッシュ関数のための標準は、B=512ビット、W=32ビット及びD=256ビットであることを指定する。標準のSHA256ハッシュ関数は、任意長の入力バッファの内容をサイズBのブロックに分割し、複数の計算ラウンドを各ブロックに対して実行し、各ラウンドにおいて、ブロックからサイズWのワードを使用する。各ラウンドは、1つのラウンドの出力が後続のラウンドに対する入力になるように、バッファを更新する。
【0024】
従来、SHA256ハッシュ関数は入力バッファの内容のブロックを順次処理し、したがって、1つのブロックのために作成されるハッシュダイジェストは、入力バッファ内のデータの各ブロックが処理され終わるまで、次ブロックの処理のための最初のハッシュダイジェストとして使用されるなどする。対照的に、バッファ処理モジュール130は、シングルデータバッファにわたる複数のセグメントを定義し、これにおいて、各セグメントはデータの1又は複数のブロックを含み、データバッファのセグメントの各々にアルゴリズム128を並行して適用する。例えば、データレジスタが256ビットの幅を有する場合、バッファ処理モジュール130は、入力データバッファ210の内容を、(レジスタ幅)/W、すなわち256/32=8セグメントに分割し、8セグメントの各々に対してアルゴリズム128を並行して実行することができる。
【0025】
次に
図3を参照すると、コンピュータ化されたプログラム、ルーチン、ロジック及び/又は命令としてバッファ処理モジュール130及び/又はコンピューティング装置100の他のモジュール若しくはコンポーネントが実行可能な、シングルデータバッファの並行処理のための例示的な方法300が図示されている。ブロック310において、方法300は、入力データバッファ210の内容を分割するための、セグメントの数Sを決定し、これに応じて、決定された数のセグメントを、入力バッファ210の内容を分割することによって作成する。いくつかの実施形態において、セグメントの数は予め決定され、パラメータ、引数又は格納された値(例えば、ルックアップテーブル又はデータベースから)として単にアクセスされることができる。他の実施形態において、セグメントの数は、ロード時又は実行時に決定されることができる。いくつかの実施形態において、セグメントの数は、レジスタ118の幅、シリアルデータ処理アルゴリズム128のパラメータ若しくは仕様(例えば、ブロックサイズ、ワードサイズ、出力長など)、及び/又は入力データバッファ210の長さの関数とすることができる。一例として、SHA256ハッシュ関数がアルゴリズム128として使用される場合、S=8、W=4バイト、及びB=64バイトである。
【0026】
引き続きブロック310において、セグメントの各々は、特定の幅(例えば、32ビット)を有するデータワードから成るものとして定義される。いくつかの実施形態において、セグメントワード幅は、アルゴリズム128により指定されるワード幅Wに対応する。セグメントは、セグメントの長さがブロックサイズBで均等に割り切れるように、入力データバッファ210のS個おきのワード(every Sth word)を使用して各々作成される。入力データバッファ210の長さLはセグメントブロックサイズ(B×S、又はSB)で除算されて、入力データバッファ210の内容のどれほどを同一サイズのセグメントで処理することができるかが判定される。入力データバッファの長さLがSBで均等に割り切れない場合、セグメントのうち1又は複数がパディングされ、あるいは残りのデータから成る最後のセグメントが作成されることができる。SHA256の例において、SB=8×64=512バイトである。8セグメント存在するため、各セグメントは、入力データバッファ210内の8個おきのデータワード(32ビット、又は4バイト)を、最大で512×Nビットまで使用して形成され、ここで、Nは正の整数であり、512×NはLより小さい。
【0027】
ブロック312において、方法300は、必要に応じて前処理ルーチン又は「オンザフライ」の一部として、セグメントの各々のための任意の必要なパディングを行う。例えば、暗号ハッシュ関数の場合、各セグメントは、バッファ長の表示に加えて複数のデータビットをメッセージの末尾に(例えば、連結によって)付加することによって、必要に応じてパディングされることができ、したがって、セグメントは、選択されたアルゴリズム128による処理のために指定された長さになる。いくつかの実施形態において、パディングは、“1”のビットの後に必要数の“0”のビットが続き、その後にバッファ長が続くものを含む。他の実施形態において、“0”及び“1”のビットの他の組み合わせ又はパターンが、各セグメントのパディングに使用されてよい。下層のアルゴリズム128を定義する標準又は仕様が、パディングスキームを指定する。いくつかの実施形態において、セグメントの各々は、十分な複数のビットによって拡張されて、パディングされるバッファをブロックサイズの最小倍数にする。例えば、バッファ210の各セグメントは、それに最も近いBバイトの倍数までパディングされ、それからアルゴリズム128に適用されるS重の(S-way)SIMD処理を用いて処理されてS個のダイジェストを生成することができる。この場合、セグメントごとのパディングは、アルゴリズム128の標準パディングスキームに従って行われる。いくつかの場合(残りのセグメントの場合など)、セグメントは、他のパディングされたセグメントとは異なるパディング長(padded length)を有することができる。例えば、パディングは、必要なパディングを加えたセグメント内のデータ量がブロックサイズより大きくなるとき、追加のブロックを有するセグメントをもたらすことができる。
【0028】
ブロック314において、方法300は、セグメントをレジスタ118のデータパスに流し、あるいはその他の方法で読み込み、したがって、各セグメントは、(例えばインタリービングを使用して)異なるデータパスへと読み込まれる。いくつかの実施形態において、これは、最大でSBまで、すなわち、均等にサイズ調整されたセグメントのすべてが処理され終わるまでインクリメントされるシングルデータポインタを使用することによって達成される。SHA256の例において、8個の32ビットワードが、一時に、レジスタの8個のデータパスに読み込まれる。別の例として、128ビットレジスタを備えたSIMD能力があるマイクロプロセッサ上でSHA‐1を実行することは、下記のパラメータ設定、すなわち、B=64バイト、W=4バイト、S=4、D=20バイトを有することになる。
【0029】
ブロック316において、シリアルデータ処理アルゴリズム128は、パディングされたデータセグメントの各々に対して並行して実行される。すなわち、各々のパディングされたセグメントについて、アルゴリズム128は、セグメントのブロックを、他のセグメントがアルゴリズム128により同様に処理されているのと同時に、順次処理する。したがって、各々のパディングされたセグメントについて、中間結果(例えば、ハッシュダイジェスト)が作成される。SHA256の例において、SHA256アルゴリズムは、各データパス/32ビットワードに対して実質的に同時に実行され、それからその次の8ワードがレジスタデータパスに読み込まれ、SHA256アルゴリズムによって、最大でブロックサイズBまで、並行して処理されるなどする。
【0030】
各データセグメントがアルゴリズム128の仕様に従ってパディングされ処理されるという事実に起因して、いくつかの実施形態において、個々のセグメント結果が結合される必要がなくなる。従って、セグメント結果は、別個のバッファに、又は1つのバッファに一緒に(例えば、連結されている場合)、記憶されることができる。場合により、ブロック318において、個々のS個のダイジェストを結合して、ただ1つの結果、例えば、アルゴリズム128の最終結果を形成することができる。例えば、S個のダイジェストのセットが長さS×Dの別のデータバッファとして扱われることができ、それから、サイズDの最終ハッシュがシングルバッファ方法で生成されることができる。セグメント結果は、排他的OR(XOR)又は加算(ADD)関数を使用することを含む複数の種々の方法で、あるいはセグメント結果を連結してアルゴリズム128を再度実行することによって、結合することができる。SHA256の例を用いると、8個のハッシュダイジェストの各々を結合して、1個の256ビットのハッシュダイジェストにすることができる。方法300は他のプロセッサ構成及びシリアルデータ処理アルゴリズムに容易に適合させることができることを、当業者には十分理解されたい。例えば、他のレジスタ幅を有するレジスタが使用されてよい。一例として、512ビットの幅を有するAVX3を使用すると、セグメントの数Sは8ではなく16にすることができ、各セグメントは16個おきの(32ビット)ワードから作ることができる。
【0031】
いくつかの実施形態において、データセグメントは、インタリーブされた独立したバッファに類似し、これにおいて、複数の独立したハッシュダイジェストが、上記セグメントについて、上記で論じられたとおり並行して生成される。いくつかの実施形態において、インタリーブされるセグメントの数は、2のべき乗である。セグメントの作成において、方法300のいくつかの実施形態は、バッファ210をブロックサイズの又はより大きなサイズの処理部分に分割するのではなく、データをより細かい粒度(例えば、データワード)でインタリーブする。
【0032】
図3に再び戻ると、方法300の例示的な実施形態は、ハッシュアルゴリズムHを使用し、このハッシュアルゴリズムは、サイズBバイトの整数ブロックに対して各々動作するように定義される。下記の実施形態は、長さLのメッセージM
0を、所与のレベルの並列性Sを用いてハッシュする(ここで、||シンボルは連結を表す)。セグメントが作成された後、Hに関連するパディング関数が、予め決定されたパターンとBバイトの倍数である最小長さへのセグメント長の連結とを用いてメッセージの各セグメントを拡張する。
【0033】
図3のブロック310を参照すると、メッセージM
0は、各々が長さL/SであるS個のセグメントに分割される。メッセージM
0は、M
0のワードサイズWビットごとが異なるセグメントに割り当てられるように、インタリーブされる方法で分割されることができる。各セグメントは、Wビットワードの配列として表されることができ、
Seg
0=M
0[0]||M
0[S]||M
0[2S]|| ...
Seg
1=M
0[1]||M
0[S+1]||M
0[2S+1]|| ...
...
Seg
S−1=M
0[S−1]||M
0[2S−1]||M
0[3S−1]|| ...
ここで、各M
0[n]は、メッセージへのワードサイズWのインデックスである。
図3のブロック312を参照すると、アルゴリズム128により指定されるパディング関数は、メッセージの各セグメントに適用され、各々が或るパディング長を有する個々のセグメントを生成する。各セグメントのパディング長は、それぞれのセグメントをBバイトの倍数に拡張することができる最小の長さである。上記で言及されたとおり、いくつかのセグメントは、他のセグメントとは異なるパディング長を有することができる。
【0034】
図3のブロック316を参照すると、S個のリーフレベルダイジェストD
kが、パディングされたセグメントに対して、k=0〜(S−1)についてD
k=H(Seg
k)で生成される。
図3のブロック318(場合による)を参照すると、新しいメッセージM
1が、ブロック316からの結果的なダイジェストをワードサイズWビットごとずつインタリーブすることによって作成されることができる。M
1=D
0[0]||D
1[0]...||D
(S−1)[0]||D
1[1]...||D
(S−1)[(D/W)−1]である場合、各D
k[n]は、セグメントのダイジェストへのワードサイズWのインデックスであり得る。そして、ハッシュアルゴリズムHは、M
1に適用されることができる(例えば、H(M
1))。
【0035】
いくつかの実施形態において、メモリ内で整合されたデータバッファ210の内容が、置き換え(transposing)の必要なしに、SIMDレジスタに直接読み込まれる(例えば、「流される」)。いくつかの実施形態において、方法300は、開始時にバッファ210の長さを知る必要なしに、流されるデータ(例えば、ネットワークから)がレジスタ118に直接供給されることを可能にする。これに応じて、シングルスレッドアプリケーションは、開示された並行処理のパフォーマンスの恩恵を生かすために(ハッシュアルゴリズムレベルにおいて以外で)変更される必要がなくなる。
【0036】
いくつかの実施形態において、アルゴリズム128は、計算及び/又は安全性の検討に基づいて選択され、あるいは順序付けられることができ、様々なプロトコル/標準における暗号ハッシュアルゴリズムの現在の(可能性として順序付けられた)リストが、本明細書に開示されたとおり並列化されたバージョンを用いて増強されることができる(例えば、SHA1x4、SHA1x8、SHA256x4、SHA256x8など)。
【0037】
いくつかの実施形態、例えば、安全にロードされたファイルの署名を検証することに関連するアプリケーションにおいて、署名エンティティは、選択されたセキュリティ(例えば、SHA256)の既存の暗号ハッシュアルゴリズムを、検証のために計算するのに最も効率の良い方法300のバージョンで置換する。例えば、検証エンティティがそのプロセッサコア内に128ビットSIMDデータパス実行ユニットを有する場合、及びSHA256強度のダイジェストが所望される場合、SHA256x4アルゴリズムが所望され得る(SHA256アルゴリズムが32ビットベースであるとき、128ビットSIMD実行ユニットは128/32=4セグメントを並行して処理することができる)。したがって、現在使用されている32ビットアルゴリズム(例えば、MD5、SHA1、SHA256)のうち1つを使用することに代わって、検証エンティティは、対応するMD5x8、SHA1x4、SHA256x4の並列化されたアルゴリズムを使用することになる。いくつかの実施形態において、128ビットSIMD全体像(perspective)から4セグメントだけしか必要とされないにもかかわらず、アルゴリズムの制約されたデータ依存連鎖に起因して、追加の並列性が、MD5と共に所望されることがある。
【0038】
種々の計算強度についての多くの検証装置が存在し得る実施形態において、署名エンティティは、上記検証装置の大半について動作する並列性のレベルを決定する必要がある場合がある。開示された実施形態は、より大きなレベルの並列性が署名の間に作成されることができるとき、サーバがこれを非常に正確に推定することを必要とせず、検証エージェントは、そのSIMD又はハードウェア能力が指定された数と同数のセグメントをいっせいに処理することができない場合、検証の間、マルチパス(multi-pass)アプローチを行うことができる。例えば、署名部がx4スキームを使用することができながら、検証エージェントは2パス(passes)のx2スキームを行うことができる。
【0039】
いくつかの実施形態において、あまりに多くのパス(passes)が(例えば、ダイジェストの複数の状態変数を管理することに起因して)必要とされる場合、効率性のいくらかのロスが生じることがあるが、データは依然としてただ1回でストリーミング方法で効率良く運ばれることができる。この場合、アプリケーションは、状態変数のセットを通じてサイクルを回す(cycle)必要があることになる。例えば、いくつかの場合、クライアント装置がSIMDユニットをまったく有さないことがあり、単純なスカラー演算を行ってSHAx4ハッシュを処理する必要がある。この場合、上記クライアント装置は、1セットのSHA256状態変数(32バイト)を用いて動作することに代わって、4つの上記状態変数のコピー(128バイト)に対して同時に動作することになり、データバッファからワードを処理するとき、上記状態変数のコピーを通じてサイクルを回すことになる。状態サイズにおけるこの増加は、非常に小さい。しかしながら、一ブロックのための(例えば、SHAのための)メッセージスケジュールに関連する動作用セットサイズの増加は、いくつかの場合、望まれないことがある。動作用セットサイズにおける増加が問題になる場合、4ブロックのデータを記憶し、一時に1つのインタリーブされたブロックに対して厳密に動作するように選択することができる。多くの他の変形が可能であり、様々な実施形態が、任意の装置が過度の負荷無しに効率良く並行ハッシュ署名を処理することを可能にすることができる。しかしながら、固定のハードウェアエンジンが、パディングを含めハッシュ関数全体を所与のバッファ/長さ入力に対して実行するようにデザインされる場合、このパディングは、上記ハードウェアとして同様に設計されて同一の結果を達成することができる。ハードウェアエンジンがブロック単位に対して動作し、あるいはパディングを含まないモードを有する場合、このハードウェアエンジンを使用して、開示されたマルチハッシュ方法を行うことができる。
【0040】
開示された実施形態は、大きな度合いの並列性(例えば、x32又はx64)の能力があるが、いくつかの実施形態において、既存の装置又は合理的に予期される将来の装置(例えば、x4又はx8)の能力に従って方法300を構成することが望まれ得る。
【0041】
いくつかの実施形態において、方法300のSHA256x4バージョンは、合理的にサイズ調整された1KBデータバッファに対して最良のSHA256アルゴリズム計算を介して約2.6xのパフォーマンス向上を提供することが示されている。いくつかの実施形態において、方法300のMD5x8バージョンは、標準MD5アルゴリズムを介して約4.4xのパフォーマンス向上をもたらすことが示されている。マルチハッシュパフォーマンスは、将来のプロセッサのデータパス幅の増加に比例して増減する(scale)であろう。さらに、開示された実施形態を用いると、結果的に生じるダイジェストは、下層のハッシュ関数の直接適用によって取得されるダイジェストと少なくとも同じ安全性及び衝突耐性があるであろう。今日最も広く使用されているハッシュ関数に加えて、開示された実施形態は、新しいSHA3候補に対して適合させることができる。
【0042】
実施例(EXAMPLES)
本明細書に開示される装置、システム及び方法の例示的な実施例が以下に提供される。上記装置、システム及び方法の一実施形態には、以下に説明される実施例のうち1又は複数、及び任意の組み合わせを含むことができる。
【0043】
実施例1は、データバッファを処理するためのコンピューティング装置を含む。上記コンピューティング装置は、データバッファ処理モジュールであって、バッファ長と複数のデータセグメントとを有する任意長のデータバッファにアクセスするステップであり、各データセグメントは、ゼロより大きく上記バッファ長より小さいセグメント長を有する、ステップと、各データセグメントをシリアルデータ処理アルゴリズムに従ってパディングするステップと、上記のパディングされたデータセグメントの各々をデータレジスタに直接読み込むステップであり、上記データレジスタは複数のデータパスを有し、各々のパディングされたデータセグメントは異なるデータパスに直接読み込まれる、ステップと、各データパスのための結果を作成するように、上記データパスの各々に対してシリアルデータ処理アルゴリズムを実質的に並行して行うステップと、をなす、データバッファ処理モジュールを含む。
【0044】
実施例2は、実施例1の対象事項を含み、上記データバッファは任意長を有する。
【0045】
実施例3は、実施例1又は実施例2の対象事項を含み、上記データバッファ処理モジュールは、上記のパディングされたデータセグメントの各々を上記データレジスタの異なるデータパスに直接読み込むデータバッファ処理モジュールを含む。
【0046】
実施例4は、実施例1乃至3のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、上記データセグメントの各々を上記シリアルデータ処理アルゴリズムに従ってパディングするデータバッファ処理モジュールを含む。
【0047】
実施例5は、実施例1乃至4のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、暗号ハッシュアルゴリズムに対する拡張として具現化される。
【0048】
実施例6は、実施例1乃至5のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、上記コンピューティング装置のマイクロプロセッサのシングルコア上で実行するデータバッファ処理モジュールを含む。
【0049】
実施例7は、実施例1乃至6のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、上記シングルコアのシングルスレッド上で実行するデータバッファ処理モジュールを含む。
【0050】
実施例8は、実施例1乃至7のうちいずれかの対象事項を含み、上記コンピューティング装置の単一命令多重データ対応プロセッサ上で実行するデータバッファ処理モジュールを含む。
【0051】
実施例9は、実施例1乃至8のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、シングルスレッドソフトウェアアプリケーションで実行するデータバッファ処理モジュールを含む。
【0052】
実施例10は、任意長のデータバッファを処理するための方法を含む。上記方法は、上記データバッファを複数のデータセグメントとして定義するステップであり、各データセグメントは、ゼロより大きく上記データバッファの長さより小さいセグメント長を有する、ステップと、各データセグメントをシリアルデータ処理アルゴリズムに従ってパディングするステップと、上記のパディングされたデータセグメントをデータレジスタに流すステップであり、上記データレジスタは複数のデータパス実行ユニットを有し、各々のパディングされたデータセグメントは、シングルデータポインタを用いて異なるデータパス実行ユニットに流される、ステップと、各データパス実行ユニットのための結果を作成するように、上記データパス実行ユニットの各々でシリアルデータ処理アルゴリズムを実質的に並行して実行するステップと、を含む。
【0053】
実施例11は、実施例10の対象事項を含み、上記データレジスタの幅と上記シリアルデータ処理アルゴリズムにより指定されるワードサイズとに基づいて上記セグメント長を定義するステップ、をさらに含む。
【0054】
実施例12は、実施例10及び11のうちいずれかの対象事項を含み、上記データバッファを複数のデータセグメントとして定義するステップは、上記データバッファをインタリーブされる方法で上記複数のデータセグメントに分割するステップを含む。
【0055】
実施例13は、実施例10乃至12のうちいずれかの対象事項を含み、上記データバッファは複数のデータワードを含み、上記データバッファをインタリーブされる方法で上記複数のデータセグメントに分割するステップは、各データセグメントがデータワードの配列を含むように、上記データバッファ内の各データワードを異なるデータセグメントに割り当てるステップを含む。
【0056】
実施例14は、実施例10乃至13のうちいずれかの対象事項を含み、各結果は複数のデータワードを含み、上記結果を上記データワードずつインタリーブするステップ、をさらに含む。
【0057】
実施例15は、実施例10乃至14のうちいずれかの対象事項を含み、シリアルデータ処理アルゴリズムを実行するステップは、暗号ハッシュ関数を実行するステップを含む。
【0058】
実施例16は、実施例10乃至15のうちいずれかの対象事項を含み、上記のパディングされたデータセグメントの各々のためのハッシュダイジェストを生成するステップ、をさらに含む。
【0059】
実施例17は、実施例10乃至16のうちいずれかの対象事項を含み、上記ハッシュダイジェストを結合して新しいデータバッファを形成し、上記新しいデータバッファに対して上記暗号ハッシュ関数を実行する、結合するステップ、をさらに含む。
【0060】
実施例18は、実施例10乃至17のうちいずれかの対象事項を含み、上記結合するステップは、上記結果を連結し、上記の連結された結果に対して上記シリアルデータ処理アルゴリズムを実行するステップを含む。
【0061】
実施例19は、実施例10乃至18のうちいずれかの対象事項を含み、上記シリアルデータ処理アルゴリズムに関連するブロックサイズを決定し、パディングされたデータセグメントの各々の長さが上記ブロックサイズの倍数になるように上記データセグメントの各々をパディングするステップ、をさらに含む。
【0062】
実施例20は、実施例10乃至19のうちいずれかの対象事項を含み、固定されたパターンのデータビットを上記データセグメントの各々に付加するステップ、をさらに含む。
【0063】
実施例21は、実施例10乃至20のうちいずれかの対象事項を含み、上記コンピューティング装置のマイクロプロセッサの特性に基づいてデータセグメントの数を決定するステップ、をさらに含む。
【0064】
実施例22は、実施例10乃至21のうちいずれかの対象事項を含み、上記シリアルデータ処理アルゴリズムの特性に基づいてデータセグメントの数を決定するステップ、をさらに含む。
【0065】
実施例23は、プロセッサとメモリとを有する、複数の命令を記憶したコンピューティング装置を含み、上記複数の命令は、上記プロセッサにより実行されると、上記コンピューティング装置に実施例10乃至22のうちいずれかの方法を実行させる。
【0066】
実施例24は、複数の命令を記憶した1又は複数のマシン読取可能記憶媒体を含み、上記複数の命令は、実行されたことに応じて、実施例10乃至22のうちいずれかの方法を実行するコンピューティング装置をもたらす。
【0067】
実施例25は、複数の命令を記憶した1又は複数のマシン読取可能記憶媒体を含み、上記複数の命令は、実行されたことに応じて、データバッファを複数のデータセグメントに分割するステップであり、各データセグメントは、ゼロより大きく上記データバッファの長さより小さいセグメント長を有する、ステップと、各データセグメントをシリアルデータ処理アルゴリズムに従ってパディングするステップと、各々のパディングされたデータセグメントをコンピューティング装置のデータレジスタの異なるデータパス実行ユニットに直接読み込むステップと、各データパス実行ユニットのための結果を作成するように、上記データパス実行ユニットの各々に対して暗号ハッシュアルゴリズムを実質的に並行して実行するステップと、をなす上記コンピューティング装置をもたらす。
【0068】
実施例26は、実施例25の対象事項を含み、上記データパス実行ユニットにおいて作成された上記結果を結合するステップ、をさらに含む。
【0069】
実施例27は、実施例25又は実施例26の対象事項を含み、上記の結合された結果に対して上記暗号ハッシュアルゴリズムを実行するステップ、をさらに含む。
【0070】
実施例28は、実施例25乃至27のうちいずれかの対象事項を含み、上記暗号ハッシュアルゴリズムは、セキュアハッシュアルゴリズム又はMD5アルゴリズムを含む。
【0071】
実施例29は、実施例25乃至28のうちいずれかの対象事項を含み、上記データレジスタの幅と上記暗号ハッシュアルゴリズムにより指定されるワードサイズとに基づいて上記セグメント長を定義するステップ、をさらに含む。
【0072】
実施例30は、実施例25乃至29のうちいずれかの対象事項を含み、上記データバッファを複数のデータセグメントとして定義するステップは、上記データバッファをインタリーブされる方法で上記複数のデータセグメントに分割するステップを含む。
【0073】
実施例31は、実施例25乃至30のうちいずれかの対象事項を含み、上記データバッファは複数のデータワードを含み、各データワードは複数のデータビットを含み、上記データバッファをインタリーブされる方法で上記複数のデータセグメントに分割するステップは、各データセグメントがデータワードの配列を含むように、上記データバッファ内の各データワードを異なるデータセグメントに割り当てるステップを含む。
【0074】
実施例32は、実施例25乃至31のうちいずれかの対象事項を含み、各結果は複数のデータワードを含み、方法は、上記結果を上記データワードずつインタリーブするステップを含む。
【0075】
実施例33は、実施例25乃至32のうちいずれかの対象事項を含み、上記コンピューティング装置のマイクロプロセッサの特性と上記暗号ハッシュアルゴリズムの特性とのうち1又は複数に基づいてデータセグメントの数を決定するステップ、をさらに含む。
【0076】
関連出願の相互参照
本出願は、35U.S.C.§119(e)のもと、2012年7月11日に申請された米国特許仮出願第61/670,472号及び2012年9月28日に申請された米国特許出願第13/631,763号に対して優先権を主張する。