JP5981030B2 - 単一データバッファの並行処理 - Google Patents

単一データバッファの並行処理 Download PDF

Info

Publication number
JP5981030B2
JP5981030B2 JP2015514247A JP2015514247A JP5981030B2 JP 5981030 B2 JP5981030 B2 JP 5981030B2 JP 2015514247 A JP2015514247 A JP 2015514247A JP 2015514247 A JP2015514247 A JP 2015514247A JP 5981030 B2 JP5981030 B2 JP 5981030B2
Authority
JP
Japan
Prior art keywords
data
buffer
computing device
segment
data buffer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2015514247A
Other languages
English (en)
Other versions
JP2015523596A (ja
Inventor
エム. ガリー,ショーン
エム. ガリー,ショーン
ケイ. フェガーリ,ワジディ
ケイ. フェガーリ,ワジディ
ゴパール,ヴィノド
ディー. ギルフォード,ジェイムズ
ディー. ギルフォード,ジェイムズ
エム. ウォルリッチ,ギルバート
エム. ウォルリッチ,ギルバート
エス. ヤップ,カーク
エス. ヤップ,カーク
Original Assignee
インテル コーポレイション
インテル コーポレイション
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by インテル コーポレイション, インテル コーポレイション filed Critical インテル コーポレイション
Publication of JP2015523596A publication Critical patent/JP2015523596A/ja
Application granted granted Critical
Publication of JP5981030B2 publication Critical patent/JP5981030B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F5/00Methods or arrangements for data conversion without changing the order or content of the data handled
    • G06F5/06Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3236Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/20Manipulating the length of blocks of bits, e.g. padding or block truncation
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Computer Hardware Design (AREA)
  • Power Engineering (AREA)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Storage Device Security (AREA)
  • Microcomputers (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Description

本出願は、単一データバッファの並行処理に関する。
本出願は、米国特許法第119条(e)の規定の下、2012年7月11日出願の米国仮出願第61/670,472号及び2012年9月28日出願の米国特許出願第13/631,761号の優先権を主張する。
データファイルやコンピュータプログラムのセキュリティを検証するためのソフトウェアは、オペレーティングシステムブートシーケンス、プログラムコード又はデータファイルのロード、ウェブブラウズ、データ通信及びデータストレージのような、多くの異なるコンテキストにおいて広く行き渡っている。認証及び/又は暗号化に使用されるようなシリアルデータ処理アルゴリズムは、データの単一のバッファに対して、連鎖する従属的な方法で作用し得る。これらのアルゴリズムは、データのあるブロックの処理の結果から得られる出力が、多くの場合、後続のブロックの処理に必要とされるために順次連鎖していくことにより、制約される可能性がある。
例えばMD5(メッセージダイジェストアルゴリズム)並びにSHA1、SHA256及びSHA512(セキュアハッシュアルゴリズム)のような暗号ハッシュ関数は、汎用プロセッサの計算に関してコストが高い可能性がある。そのようなハッシュ関数は、データの単一のバッファに対して順次作用し、ハッシュダイジェスト状態を、各データブロックから導出される計算結果により更新し、相互に依存する複数の処理ラウンドを使用する。単一のバッファのブロックの順次処理は、最新のプロセッサの性能を制限する。ベクトル単一命令複数データ(SIMD)ユニットを使用するマルチバッファ処理のような方法が、複数の独立のデータバッファに対して作用することが可能な場合の用途につき、良い性能のために提案されているが、これらの方法は、単一のバッファのハッシュを要する用途には適用可能ではない。ツリーハッシュは、複数のコア又はエンジンにわたるものではあるが、使用されている別の技術である。
本開示において説明される概念は、限定ではなく例として、添付の図面において図示される。図の簡潔性及び明瞭性のために、図面に示される要素は、必ずしもスケーリングして描かれてはいない。例えば一部の要素の寸法は、明瞭性のために他の要素に対して誇張されることがある。さらに、適切であると考えられる場合、参照符号は、対応する要素又は類似の要素を示すために図面において繰り返し用いられている。
開示される方法を実施するのに用いることが可能なコンピューティングデバイスの少なくとも1つの実施形態を示す、簡略化されたブロック図である。 単一のデータバッファの並行処理のためのシステムの少なくとも1つの実施形態を示す、簡略化されたモジュール図である。 単一のデータバッファの並行処理のための方法の少なくとも1つの実施形態を示す、簡略化されたフロー図である。 単一のデータバッファの並行処理の少なくとも1つの実施形態の簡略化された例を示す図である。 単一のデータバッファの並行処理の少なくとも1つの実施形態の簡略化された例を示す図である。
本開示の概念は、様々な修正及び代替的な形式を許容するが、その具体的な実施形態が、例示として図面に示されており、本明細書において詳細に説明されることになる。しかしながら、本開示の概念を、開示される特定の形態に限定するという意図はなく、むしろ反対に、本開示及び特許請求の範囲と整合性のある全ての修正、均等物及び代替形態を網羅するように意図される。
以下の説明では、ロジック実装、オペレーションコード、オペランドを指定する手段、リソース分割/共有/複製の実装、システムコンポーネントのタイプと相互関係及びロジック分割/統合の選択のような、様々な具体的な詳細が、本開示のより完全な理解を提供するために説明される。しかしながら、当業者には、本開示に係る諸実施形態が、そのような具体的な詳細を必要とせずに実施されてもよいことが認識されよう。他の場合において、本明細書で説明される概念の説明を曖昧にしないように、制御構造、ゲートレベル回路及び完全なソフトウェア命令シーケンスが詳細には示されていないことがある。当業者は、包含される説明により、不必要な実験を行うことなく適切な機能性を実装することができるであろう。
本明細書において、「一実施形態」、「実施形態」、「例示の実施形態」等への言及は、説明される実施形態が特定の特徴、構造又は特性を含み得るが、必ずしも全ての実施形態がその特定の特徴、構造又は特性を含まなくてもよいことを示す。さらに、そのようなフレーズは、必ずしも同じ実施形態を指していないことがある。さらに、特定の特徴、構造又は特性は、ある実施形態との関連で説明されるが、明示的に説明されるか否かに関わらず、そのような特徴、構造又は特性を他の実施形態との関連で達成することは当業者の知識内である。
本明細書で説明される概念に係る実施形態は、ハードウェア、ファームウェア、ソフトウェア又はこれらに任意の組合せで実装され得る。コンピュータシステムで実装される実施形態は、コンポーネント間の1つ又は複数のポイントツーポイント接続又はバスベースの相互接続を含み得る。本明細書で説明される実施形態は、1つ又は複数のプロセッサによって読み取られて実行され得る、1つ又は複数のマシン読取可能又はコンピュータ読取可能記憶媒体によって担持されるか、その上に格納される命令として実装されてもよい。マシン読取可能又はコンピュータ読取可能記憶媒体は、マシン(例えばコンピューティングデバイス)によって読取可能な形式で情報を格納又は伝送するための任意のデバイス、機構又は物理的構造として実装され得る。例えばコンピュータ読取可能又はコンピュータ読取可能記憶媒体は、読取専用メモリ(ROM)デバイス、ランダムアクセスメモリ(RAM)デバイス、磁気ディスク記憶媒体、光記憶媒体、フラッシュメモリデバイス、ミニ又はマイクロSDカード、メモリスティック等として具現され得る。
図面では、デバイス、モジュール、命令ブロック及びデータ要素を表す要素のような図面要素の具体的な配置又は順序が、説明の容易性のために示されている。しかしながら、図面における図面要素の具体的な順序又は配置は、処理の特定の順序又はシーケンスが必要とされること、あるいは処理の分割が必要とされることを示唆するよう意図されるものではないことを当業者は理解されたい。さらに、ある図面内に、ある図面要素が含まれることは、その要素が全ての実施形態において必要とされることを示唆するよう意図されるものではなく、またその要素によって表される特徴が、一部の実施形態では他の要素に含まれないこと又は他の要素と結合されないことを示唆するよう意図されるものでもない。
一般に、命令ブロックを表すのに使用される図面要素は、ソフトウェア又はファームウェアアプリケーション、プログラム、関数、モジュール、ルーチン、プロセス、プロシージャ、プラグイン、アプレット、ウィジット、コードフラグメント及び/又は他のもののような、任意の形式のマシン読取可能な命令を使用して実装されてよく、そのような命令はそれぞれ、任意の適切なプログラミング言語、ライブラリ、アプリケーションプログラミングインタフェース(API)及び/又は他のソフトウェア開発ツールを使用して実装され得る。例えば一部の実施形態は、Java(登録商標)、C++及び/又は他のプログラミング言語を使用して実装され得る。同様に、データ又は情報を表す図面要素は、レジスタ、データストア、テーブル、レコード、アレイ、インデックス、ハッシュ、マップ、ツリー、リスト、グラフ、(任意のファイルタイプの)ファイル、フォルダ、ディレクトリ、データベース及び/又は他のもののような、任意の適切な電気的配置又は構造を使用して実装され得る。さらに、図面において、実線又は破線又は矢印のような接続要素が、2つ又はそれ以上の図面の要素の間の接続、関係又は関連付けを例示するのに使用されている場合、そのような接続要素がないことは、接続、関係及び関連付けが存在しないことを示唆するものではない。言い換えると、開示内容を曖昧にしないために、要素間の一部の接続、関係又は関連付けが図面に示されていないことがある。加えて、図を簡潔にするために、単一の接続要素を使用して、要素間の複数の接続、関係又は関連付けを表すことがある。例えば接続要素が信号、データ又は命令の通信を表す場合、そのような要素は、必要に応じて、通信をもたらす1つ又は複数の信号経路(例えばバス)を表す可能性があることを、当業者は理解されたい。
次に図1を参照すると、データバッファ処理モジュール130が、例示のコンピューティングデバイス100において具現化されている。使用の際、以下で更に詳細に検討されるように、データバッファ処理モジュール130は、入力として単一データバッファ132(例えば任意長の文字列又は「メッセージ」)を受け取る。データバッファ処理モジュール130は、単一データバッファ132の並行性のレベルを決定する、すなわち、シリアルデータ処理アルゴリズム128(例えば暗号ハッシュ関数)によって並行に処理することができる単一データバッファ132の「セグメント」の数を決定する。データバッファ処理モジュール130は、セグメントの並行処理を管理し、並行処理の結果を組み合わせてアルゴリズム128の最終的な出力を形成する。異なりはするものの、そのような並行処理後のアルゴリズム128の出力は、該アルゴリズム128を単一データバッファに対して従来的の方法で(例えば順次)実行することによって通常達成される結果に匹敵するセキュリティ強度を有する。さらに、単一データバッファ132のセグメント化及び並行処理の結果として、性能の向上が達成され得る。このようにして、データバッファ処理モジュール130は、基礎となるアルゴリズムが指定のサイズ(例えば64バイト)のブロックに対して作用するとしても、シリアルデータ処理アルゴリズムを任意長の単一データバッファに対して実行することができる。
例示のコンピューティングデバイス100は、少なくとも1つのプロセッサ110と、メモリ120と、入力/出力(I/O)サブシステム122と、ストレージデバイス124と、1つ又は複数の周辺デバイス140を含む。コンピューティングデバイス100は、特定の用途に応じて、例えばデスクトップコンピュータシステム、ラップトップ又はタブレットコンピュータシステム、サーバ、エンタープライズコンピュータシステム、コンピュータのネットワーク、ハンドヘルド又は他のモバイルコンピューティングデバイス、あるいは他の電気デバイスのような任意のタイプのコンピューティングデバイス内に、あるいはそのようなコンピューティングデバイスとして具現化され得る。
例示のプロセッサ110は、例えばプロセッサコア112、114、116等の1つ又は複数のプロセッサコア、あるいはシングルコアの複数の論理セクションを含み、本明細書では、これらのプロセッサコアは説明の容易性のために単に「コア」と呼ばれる。一部の実施形態において、コア112、114、116の1つ又は複数は、シングルスレッドのコンピュータプログラム(一部の実施形態では、データバッファ処理モジュール13のような)を、SIMD(単一命令複数データ)命令セット又はコンピュータ命令の同様のセットを使用して処理するように構成される。より具体的には、一部の実施形態において、コア112、114、116の少なくとも1つは、ストリーミングSIMD拡張命令(SSE)又は後のバージョン(例えばSSEn又はAVX(Advanced Vector Extensions))のような1つ又は複数のストリーミング拡張を含む命令セットを用いて構成される。
1つ又は複数のコア112、114、116は、1つ又は複数のデータレジスタ118を含むか、通信可能に結合される。レジスタ118は、シリアルデータ処理アルゴリズム128、データバッファ処理モジュール130及び/又はコンピューティングデバイス100の他のコンポーネントの動作中に、データ及び/又は命令を一時的に格納するのに用いられることがある。各レジスタ118はレジスタサイズ又は「幅(width)」を有する。「幅」とは、レジスタ118が所与の時間に格納することができるデータ量である。レジスタ118の少なくとも1つは、データレベルの並行性のために構成される。例えば一部の実施形態において、少なくとも1つのレジスタ118は、SIMD又は同様のデータレベルの並行処理のために構成される、すなわち、データレジスタを、複数のデータに対して同じ動作を同時又は実質的に同時に実行することができる、複数の機能ユニット(例えば「レーン」、「データ経路」又は「実行ユニット」)に分割することができる。例えば128ビット幅を有するSIMD又は同様のレジスタでは、コンピュータ命令は、128ビットのデータの一部をそれぞれ並行に処理することができる、レジスタ118の複数のレーンすなわちデータ経路を指定することができ、その結果、アルゴリズム128を、そのデータ経路の各々において同時に、他のデータ経路とは独立に実行することができる。
例示のコア112、114、116はまた、1つ又は複数のキャッシュメモリ(図示せず)も含むか、通信可能に結合される。キャッシュメモリは、シリアルデータ処理アルゴリズム128、データバッファ処理モジュール130及び/又はコンピューティングデバイス100の他のコンポーネントの動作中に、データ及び/又は命令を一時的に格納するのに用いられることがある。キャッシュメモリ及びレジスタ118に加えて、プロセッサ110及び/又はそのコア112、114、116は、メモリ120を含むか、そうでなければ通信可能に結合される。メモリ120の一部は、動的ランダムアクセスメモリデバイス(DRAM)、同期DRAM(SDRAM)、ダブルデータレート(DDR:double-data rate)SDRAM及び/又は他の揮発性メモリデバイスのような、任意のタイプの適切なメモリデバイスとして具現化され得る。
プロセッサ110は、I/Oサブシステム122にも通信可能に結合される。具体的には示されていないが、I/Oサブシステム122は典型的に、メモリコントローラ(例えばメモリコントローラサブシステム又はノーズブリッジ)、入力/出力コントローラ(例えば入力/出力コントローラサブシステム又はサウスブリッジ)及びファームウェアデバイスを含む。当然、他の実施形態では、他の構成を有するI/Oサブシステムが使用されることがある。例えば一部の実施形態において、I/Oサブシステム122は、システムオンチップ(SoC)の一部を形成し、プロセッサ110及びコンピューティングデバイス100の他のコンポーネントとともに単一の集積回路チップ上に組み込まれてもよい。したがって、I/Oサブシステム122の各コンポーネントは、一部の実施形態において、一般的な集積回路チップ上に配置されてもよいことが認識されよう。
例示のI/Oサブシステム122は、1つ又は複数のストレージデバイス124に通信可能に結合される。ストレージ124の一部は、ディスクストレージ(例えばハードディスク)、メモリカード、メモリスティック及び/又は他のもののような、データ及び/又は命令を格納するための任意の適切なデバイスとして具現化され得る。一部の実施形態において、シリアルデータ処理アルゴリズム128、データバッファ処理モジュール130及び/又は単一のデータバッファ132は、少なくとも一時的に、ストレージデバイス124内に具現化される。実行中、シリアルデータ処理アルゴリズム128、データバッファ処理モジュール130及び/又は単一のデータバッファ132の一部が、より高速な処理又は他の理由のために、メモリ120、キャッシュメモリ及び/又はレジスタ118にロードされ得る。他の実施形態において、シリアルデータ処理アルゴリズム128及びデータバッファ処理モジュール130はそれぞれ、ソフトウェア、ファームウェア、ハードウェア及び/又はこれらの組み合わせとして具現化され得る。さらに、データバッファ処理モジュール130は、シリアルデータ処理アルゴリズム128のサブモジュール、すなわち「拡張」として、あるいはシリアルデータ処理アルゴリズム128及び/又は他のソフトウェア(例えばオペレーティングシステム、セキュリティアプリケーション及び/又は他のもの)によって呼び出し可能な関数、プロシージャ又はライブライオブジェクトとして具現化されてもよい。例えばバッファ処理モジュール130は、セキュアハッシュアルゴリズムのような既存又は将来の暗号ハッシュアルゴリズムに対する、1つ又は複数の拡張として具現化され得る。
I/Oサブシステム122は、1つ又は複数の周辺デバイス140に通信可能に結合されることがある。周辺デバイス140は、1つ又は複数のネットワークインタフェース、グラフィクス及び/又はビデオアダプタ、キーボード、タッチスクリーン、ディスプレイ、プリンタ、データストレージデバイス及び/又は例えばコンピューティングデバイスの意図される使用に応じた他の周辺デバイスを含み得る。さらに、コンピューティングデバイス100は、説明の明瞭性のために図1には図示されていない他のコンポーネント、サブコンポーネント及びデバイスを含んでもよいことを認識されたい。概して、コンピューティングデバイス100のコンポーネントは、図1に示されるように、双方向の矢印として図式的に表される1つ又は複数の信号経路によって通信可能に結合される。そのような信号経路は、それぞれのデバイスの間の通信を促進することが可能な任意のタイプの有線又は無線の信号経路として具現化され得る。例えば信号経路は、バス、ポイントツーポイント相互接続、介入デバイス及び/又は同様のものを介して、任意の数の有線のプリント基板トレースとして具現化され得る。
次に図2を参照すると、バッファ処理モジュール130が、入力データバッファ210にわたるシリアルデータ処理アルゴリズム128の並行処理を管理する、例示のシステム200が図示されている。例示の入力データバッファ210は、(例えばビット又はバイトで測定されるような)任意サイズ又は任意長Lを有するデータ文字の文字列(例えばデータファイル又は「メッセージ」)である。以下でより詳細に説明されるように、バッファ処理モジュール130は、入力データバッファ210を複数のセグメントSに分割する。ここでセグメントの数は、システム200の特定の設計又は実装の要件を望むか又は与えることが可能な入力データバッファ210にわたる並行性のレベル又は程度を表す、正の整数である。バッファ処理モジュール130は、入力データバッファ210をデータレジスタ118へストリーミングし、その結果、各セグメントが、レジスタ118の異なるレーン又はデータ経路に割り当てられる。バッファ処理モジュール130は、アルゴリズム128の実行を、レジスタ118の各レーン又はデータ経路に対して並行に開始し、その結果、入力データバッファ210の各セグメントが、シリアルデータ処理アルゴリズム128によって同時に処理される。
アルゴリズム128は、並行に、データバッファ210のセグメントの各々を(例えばビット又はバイトで測定されるような)指定されたサイズBのデータブロックで順次処理し、ここで各データブロックは、BがWの倍数となるように、(例えばビット又はバイトで測定されるような)サイズWの複数のデータワードで作られる。アルゴリズム128は、(例えばビット又はバイトで測定されるような)固定長Dを有する出力データバッファ(あるいは一部の実施形態では、「メッセージダイジェスト」又は「ハッシュダイジェスト」)212を生成する。例示の実施形態では、入力データバッファ210と出力データバッファ212の双方が、単一のデータバッファ132内に格納される。すなわち、単一のデータバッファ132は、最初、入力データバッファ210に相当するが、バッファ処理モジュール130の実行及びシリアルデータ処理アルゴリズム128が進むと更新される。
一部の実施形態において、アルゴリズム128は、MD5、SHA1、SHA256又はSHA512のような暗号ハッシュ関数であり、データバッファ処理モジュール130は、セグメントの数Sを決定する際に、パラメータとして(例えば関連する米国連邦情報処理規格の発表、すなわちFIPS PUBにおいて定義されるような)暗号ハッシュ関数の特定の仕様を使用する。例として、SHA256セキュアハッシュ関数の規格は、B=512ビット、W=32ビット、D=256ビットを指定する。SHA256セキュアハッシュ関数の規格は、任意長の入力バッファをサイズBのブロックに分割し、各ブロックに対して複数の計算ラウンドを実行し、各ラウンドにおいてそのブロックからサイズWのワードを使用する。各ラウンドは、そのラウンドの出力が次のラウンドの入力となるように、バッファを更新する。
伝統的に、SHA256ハッシュ関数は、あるブロックに対して生成されるハッシュダイジェストが、次のブロックの処理に初期のハッシュダイジェストとして使用されるように、入力バッファ内の各ブロックが処理されるまで、入力バッファのブロックを順次処理する。対照的に、バッファ処理モジュール130は、単一のデータバッファにわたって複数のセグメントを定義し、この場合、各セグメントは、1つ又は複数のブロックを含み、アルゴリズム128をデータバッファのセグメントの各々へ並行に適用する。例えばデータレジスタが、256ビット幅を有する場合、バッファ処理モジュール130は、入力データバッファ210を、(レジスタの幅)/W、すなわち256/32=8セグメントへ分割し、アルゴリズム128を、8つのセグメントの各々に対して並列に実行することができる。
次に図3を参照すると、コンピュータ化されたプログラム、ルーチン、ロジック及び/又は命令としてバッファ処理モジュール130及び/又はコンピューティングデバイス100の他のモジュール若しくはコンポーネントによって実行可能な、単一のデータバッファの並列処理のための例示の方法300が示されている。ブロック310において、方法300は、任意長の入力データバッファ又はメッセージ210について、いずれかの必要な前処理を実行する。例えば暗号ハッシュ関数の場合、入力データバッファ210は、複数のデータビットをそのメッセージの後ろに付加することによって(例えば連結することによって)、該入力データバッファ210が(通常はハッシュアルゴリズム規格又は仕様によって指定される)所望の長さになるまでパディングされる。一部の実施形態において、パディングは、「1」ビットの後に必要な数の「0」ビットが続くことを含む。他の実施形態では、「0」及び「1」ビットの他の組合せ又はパターンをパディングに使用してもよい。基礎となるアルゴリズム128を定義する規格又は仕様は、パディングのスキームを指定する。一部の実施形態において、バッファ210は、パディングされたバッファを、ブロックサイズの最小の倍数とするのに十分なビット数によって拡張される。ブロック310における入力データバッファ210の前処理のための一部の技術は、(1)バッファ210の合計長がB*Sの倍数となるまで、バッファを、長さが連結される固定のビットパターンでパディングすることを含む。これにより、バッファをS−way SIMD処理により効果的に処理し、S個のダイジェストを生成することが可能になる。ダイジェストのセットはその後、長さS*Dの別のデータバッファとして扱われ、サイズDの最終的なハッシュが生成される。また、ブロック310における入力データバッファ210の前処理のための一部の技術は、(2)長さがB*Sの倍数のバッファ210の最も大きい領域を選択することを含み、これにより、並行に、S個のダイジェストを生成することができる。ダイジェストのセットはその後、バッファの残りの部分と連結され、新たなデータバッファとして、サイズDの最終的なハッシュが生成され得る。
ブロック312において、方法300は、入力データバッファ210を分割すべきセグメントの数Sを決定し、入力バッファ210にわたって、決定された数のセグメントを作成する。一部の実施形態において、セグメントの数は予め決定されており、単にパラメータ、引数又は格納済みの値として(例えばルックアップテーブル又はデータベースから)アクセスされることがある。他の実施形態では、セグメントの数を、ロード時又はランタイム時に決定してもよい。一部の実施形態において、セグメントの数は、レジスタ118の幅、シリアルデータ処理アルゴリズム128のパラメータ若しくは仕様(例えばブロックサイズ、ワードサイズ、出力長等)及び/又は入力データバッファ210の長さに応じたものであってもよい。例として、SHA256ハッシュ関数がアルゴリズム128として使用される場合、S=8、W=4バイト、B=64バイトである。別の例として、128ビットのレジスタを用いるSIMDの能力を有するマイクロプロセッサにおいてSHA−1を実行するとき、以下のパラメータ設定:B=64バイト、W=4バイト、S=4、D=20バイトを要する。
さらにブロック312において、セグメントの各々は、特定の幅(例えば32ビット)を有するデータワードで構成されるように定義される。一部の実施形態において、セグメントのワード幅は、アルゴリズム128によって指定されるワード幅Wに対応する。セグメントはそれぞれ、セグメントの長さがブロックサイズBで割り切れるように、入力データバッファ210のSワードごとに使用して作成される。入力データバッファ210の長さLを、セグメントのブロックサイズ(Bを掛けたS、すなわちSB)で割って、どれくらい多くの入力データバッファ210を同じサイズのセグメントで処理することができるかを決定する。入力データバッファ210の長さがSBで割り切れない場合は、余りのデータを備える最後のセグメントが作成される。SHA256の例では、SB=8*64=512バイトである。8つのセグメントが存在するので、各セグメントは、入力データバッファ210の8データワード(32ビット、すなわち4バイト)ごとに使用して512*Nビットになるまで形成される。ここで、Nは、正の整数であり、512*NはLより小さい。バッファ長Lは、L=SB*N+L mod SBとして表され、セグメント長SLは、SL=B*Nとして表される。
ブロック314において、方法300は、セグメントをレジスタ118のデータ経路へストリーミングするか、そうでなければ直接読み出し、その結果、各セグメントが、異なるデータ経路に(例えばインターリーブを使用して)読み出される。一部の実施形態において、これは、SBまで、すなわち均等にサイズ決定されたセグメントが全て処理されるまでインクリメントされる、単一のデータポインタを使用することによって達成される。SHA256の例では、8つの32ビットワードが、レジスタの8つのデータ経路に一度に読み出される。
ブロック316において、シリアルデータ処理アルゴリズム128が、データセグメントの各々に対して並行に実行される。すなわち、各セグメントについて、アルゴリズム128は、そのセグメントのブロックを、他のセグメントがアルゴリズム128によって同様に処理されているのと同時に、順次処理する。したがって、中間結果(例えばハッシュダイジェスト)がセグメントごとに作成される。アルゴリズム128は、入力データバッファ210の残りの部分(もしあれば)に対しても実行され、対応する中間結果が作成される。SHA256の例では、SHA256アルゴリズムが、各データ経路/32ビットワードに対して、実質的に同時に実行され、次いで次の8つのワードがレジスタのデータ経路に読み出されて、SHA256アルゴリズムによって並行に処理され、ブロックサイズBになるまで続く。
ブロック318において、中間結果を全て組み合わせて、アルゴリズム128の最終的な出力(例えばハッシュダイジェスト)を生成する。中間結果を幾つかの異なる方法で組み合わせることができ、これには、排他的論理和(XOR)又は付加(ADD)関数を使用すること、あるいは中間結果を連結して次いでアルゴリズム128を再び実行することによる方法が含まれる。SHA256の例では、8つのハッシュダイジェストをそれぞれ組み合わせて、1つの256ビットのハッシュダイジェストにする。当業者は、方法300を容易に他のプロセッサ構成及びシリアルデータ処理アルゴリズムに適合させることができることを認識されたい。例えば他のレジスタ幅を有するレジスタを用いることができる。例えば512ビットの幅を有するAVX3を使用して、セグメントの数Sを8ではなく16とし、そしてセグメントを16ワード(32ビット)ごとに作ることができる。
方法300の一部の実施形態は、単一のバッファ210を、インターリーブされた独立のバッファと類似する1組のセグメントとして扱い、これらのセグメントについて複数の独立のハッシュダイジェストを並行に生成する。一部の実施形態において、インターリーブされるセグメントの数は2の累乗である。セグメントの並行処理からの中間結果をアルゴリズム128によって処理して、最終的な結果を形成する。一般的に言うと、方法300の一部の実施形態は、バッファ210をブロックサイズ又は大きいサイズの処理の部分に分けるのではなく、データをより細かい粒度(例えばデータワード)でインターリーブする。
次に図3、図4及び図5を参照すると、方法300の例示の実施形態は、整数のサイズBのバイトのブロック毎に作用するように定義されるハッシュアルゴリズムHを使用する。以下の実施形態は、所与のレベルの並行性Sを有する長さLのメッセージM0をハッシュする(ここで||という記号は連結を示す)。図3のブロック310を参照すると、メッセージM0が、Hに関連付けられたパディング関数に従って前処理される。パディング関数はPadH(メッセージ、メッセージの長さ、ブロックサイズB)として示され、メッセージを、所定のパターン及びメッセージ長の連結を用いて、B個のバイトの倍数である最小の長さまで拡張する。パディング関数PadH(M0,L,B*S)をメッセージM0に適用し、長さL’のメッセージM0を生成し、ここで、L’は、M0が拡張され得る、B*Sバイトの倍数の最小の長さである。
図3のブロック312を参照すると、ブロック310からのパディングされたメッセージM0が、それぞれ長さL’/Sの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のインデックスである。図3のブロック316を参照すると、S個のリーフレベルのダイジェストが、セグメントにおいて、k=0…(S-1)についてDk=H(Segk)として生成される。図3のブロック318において、新たなメッセージM1が、ブロック316の結果得られたダイジェストを、ワードサイズ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’))。
一部の実施形態において、メモリ内で整列されるデータバッファ210のコンテンツは、移送する必要性なしに、直接SIMDレジスタへ読み出される(例えば「ストリーミングされる」)。一部の実施形態において、方法300は、(例えばネットワーク接続から)ストリーミングされているデータを、開始時にバッファ210の長さを知る必要なく、直接レジスタ118へ供給することが可能である。したがって、シングルスレッドアプリケーションは(ハッシュアルゴリズムのレベル以外に)修正する必要がなく、開示された並行処理の性能の利点を生かすことができる。
一部の実施形態において、アルゴリズム128を、計算及び/又はセキュリティ上の考慮事項に基づいて選択するか、順序付けることができ、様々なプロトコル/規格の暗号ハッシュアルゴリズムの現在の(潜在的に順序付けされる)リストを、本明細書で開示される並列化されたバージョンにより強化することができる(例えばSHA1x4、SHA1x8、SHA256x4、SHA256x8等)。
一部の実施形態、例えばセキュアにロードされるファイルの署名の検証を要する用途において、署名エンティティは、選択されたセキュリティの既存の暗号ハッシュアルゴリズム(例えばSHA256)を、検証のための計算に最も効率的な方法300のバージョンと置き換えることができる。例えば検証エンティティが、そのプロセッサコアにおいて128ビットのSIMDデータ経路実行ユニットを有している場合において、SHA256の強度のダイジェストが望まれるとき、SHA256x4アルゴリズムを望むことができる(SHA256アルゴリズムは32ビットベースであるので、128ビットのSIMD実行ユニットは、128/32=4セグメントを並行に処理することができる)。したがって、現在使用されている32ビットのアルゴリズムの1つ(例えばMD5、SHA1、SHA256)を使用する代わりに、検証エンティティは、対応するMD5x8、SHAx4、SHAx4の並列化アルゴリズムを使用する可能性がある。一部の実施形態において、128ビットのSIMDの観点からは4つのセグメントのみが必要であるとしても、アルゴリズムの制約されるデータの従属的連鎖のために、更なる並行性がMD5について望まれる可能性がある。
異なる計算強度の多くの検証デバイスが存在し得る場合、署名エンティティは、検証デバイスの大多数に対して作用する並行性のレベルを決定する必要がある。開示される実施形態は、そのSIMD又はハードウェア能力が、指定されたセグメントほど多くのセグメントを一度に全て処理することができない場合、より大きなレベルの並行性を署名中に作成することができ、検証エージェントは検証中にマルチパスアプローチを実行することができるので、サーバがその並行性のレベルを正確に推定する必要はない。例えば署名者はx4スキームを使用することができ、検証エージェントは2つの経路のx2スキームを実行することが可能である。
一部の実施形態において、あまりに多くのパスが必要とされる場合(例えばダイジェストの複数の状態変数を管理するために)効率の何らかの損失が起こり得る可能性があるが、データは依然として、ストリーミング手法によりたった1度で効率的に伝達され得る。この場合において、アプリケーションは、状態変数のセットを繰り返す必要がある。例えば一部の場合において、クライアントデバイスはSIMDユニットを全ては有していないことがあり、単一のスカラー操作を実行してSHA256x4ハッシュを処理する必要がある。この場合、SHA256の状態変数(32バイト)の1つのセットとともに作用する代わりに、4つのそのような状態変数のコピー(128バイト)に対して同時に作用することになり、データバッファからのワードを処理するとき、これらを繰り返す。この状態サイズの増加は非常に小さい。しかしながら、ブロックについての(例えばSHAについての)メッセージスケジュールに関連付けられる、作用するセットのサイズの増加は、一部の場合において望ましくないことがある。作用するセットのサイズの増加が問題となる場合、データの4つのブロックを格納し、厳密に一度に1つのインターリーブされたブロックに対して作用することを選択することが可能である。多くの他の変形が可能であり、様々な実施形態は、任意のデバイスが、不当な負担なく効果的に並行ハッシュ署名を処理することを可能にすることができる。しかしながら、固定のハードウェアエンジンが、パディングを含め、全体的なハッシュ関数を所与のバッファ/長さの入力に対して実行するように設計される場合、パディングは、ハードウェアと同じ結果を達成するように設計され得る。ハードウェアエンジンは、ブロックごとベースで作用する場合、あるいはパディングを含まないモードを有する場合、開示されたマルチハッシュ方法を実行するのに使用され得る。
開示される実施形態は、大きな並行性の程度(例えばx32又はx64)が可能であるが、一部の実施形態では、既存のデバイス又は当然に予想される将来のデバイス(例えばx4又はx8)の能力に応じて、方法300を構成するように望まれることがある。
一部の実施形態において、方法300のSHAx4バージョンが、合理的にサイズ決定された1KBのデータバッファにおける最良のSHA256アルゴリズムの計算に対して約2.6倍の性能向上を提供することが示されている。一部の実施形態において、方法300のMD5x8のバージョンが、標準のMD5アルゴリズムに対して約4.4倍の性能向上につながることが示されている。マルチハッシュの性能は、将来のプロセッサのデータ経路の幅の増加に比例して上がるべきである。さらに、開示される実施形態を使用して、結果として得られるダイジェストは少なくとも、基礎となるハッシュ関数の直接の適用によって取得されるダイジェストと同程度にセキュアかつ衝突耐性があるべきである。今日最も一般的に使用されるハッシュ関数に加えて、開示される実施形態は、新しいSHA3の候補にも適合可能である。

例1は、データバッファを処理するためのコンピューティングデバイスを含む。当該コンピューティングデバイスは、データバッファ処理モジュールを含み、該データバッファ処理モジュールは、バッファ長を有する任意長のデータバッファと、各データセグメントがゼロ超かつ前記バッファ長より小さい複数のデータセグメントとにアクセスすることと、データセグメントをデータレジスタに直接読み出すことであって、データレジスタは複数のデータ経路を有しており、各データセグメントを異なるデータ経路に直接読み出すことと、シリアルデータ処理アルゴリズムをデータ経路の各々に対して実質的に並行に実行して、各データ経路の結果を生成することと、該結果を組み合わせてシリアルデータ処理アルゴリズムの出力を形成することとを行う。
例2は、例1に係る主題を含み、データバッファ処理モジュールが、暗号ハッシュアルゴリズムに対する拡張として具現化される。
例3は、例1及び例2のいずれかに係る主題を含み、データバッファ処理モジュールが、コンピューティングデバイスのマイクロプロセッサのシングルコアにおける実行のために構成される。
例4は、例1乃至3のいずれかに係る主題を含み、データバッファ処理モジュールは、シングルコアのシングルスレッドにおける実行のために構成される。
例5は、例1乃至4のいずれかに係る主題を含み、データバッファ処理モジュールは、コンピューティングデバイスの単一命令複数データ能力を有するプロセッサにおける実行のために構成される。
例6は、例1乃至5のいずれかに係る主題を含み、データバッファ処理モジュールは、シングルスレッドソフトウェアアプリケーションを用いる使用のために構成される。
例7は、例1乃至6のいずれかに係る主題を含み、データバッファ処理モジュールは、マルチスレッドソフトウェアアプリケーションを用いる使用のために構成される。
例8は、任意長のデータバッファを処理するための方法を含む。当該方法は、データバッファを複数のデータセグメントとして定義するステップであって、各データセグメントが、ゼロ超かつデータバッファの長さより小さいセグメント長を有する、ステップと、データセグメントをデータレジスタにストリーミングするステップであって、該データレジスタは複数のデータ経路実行ユニットを有し、各データセグメントが、単一のデータポインタを使用して異なるデータ経路実行ユニットにストリーミングされる、ステップと、シリアルデータ処理アルゴリズムをデータ経路実行ユニットの各々において実質的に並行に実行し、各データ経路実行ユニットについての結果を生成するステップと、該結果を組み合わせて、シリアルデータ処理アルゴリズムの出力を形成するステップとを含む。
例9は、例8に係る主題を含み、データレジスタの幅とシリアルデータ処理アルゴリズムによって指定されるワードサイズとに基づいて、セグメント長を決定するステップを更に含む。
例10は、例8及び例9のいずれかに係る主題を含み、データバッファを複数のデータセグメントとして定義するステップは、データバッファを、インターリーブされる手法で複数のデータセグメントへと分割するステップを含む。
例11は、例8乃至10のいずれかに係る主題を含み、データバッファは複数のデータワードを備え、各ワードは複数のデータビットを備え、当該方法は、各データセグメントがデータワードのアレイを備えるように、データバッファ内の各データワードを異なるデータセグメントに割り当てるステップを含む。
例12は、例8乃至10のいずれかに係る主題を含み、各結果は、複数のデータワードを備え、各データワードは複数のデータビットを備え、前記の組み合わせる処理は、前記の結果を前記データワードでインターリーブすることを含む。
例13は、例8乃至12のいずれかに係る主題を含み、シリアルデータ処理アルゴリズムを実行するステップは、暗号ハッシュ関数を実行することを含む。
例14は、例8乃至13のいずれかに係る主題を含み、各データセグメントに対してハッシュダイジェストを生成するステップを含む。
例15は、例8乃至14のいずれかに係る主題を含み、ハッシュダイジェストを組み合わせて、新たなデータバッファを形成するステップと、該新たなデータバッファに対して暗号ハッシュ関数を実行するステップとを更に含む。
例16は、例8乃至15のいずれかに係る主題を含み、シリアルデータ処理アルゴリズムに関連付けられるブロックサイズを決定するステップと、データバッファの長さがブロックサイズの倍数となるようにデータバッファをパディングするステップとを更に含む。
例17は、例8乃至16のいずれかに係る主題を含み、データバッファの長さが、データセグメントの数を掛けたブロックサイズと等しくなるように、固定のパターンのデータビットをデータバッファに付加するステップを更に含む。
例18は、例8乃至17のいずれかに係る主題を含み、前記の組み合わせる処理は、前記の結果を連結することと、該連結された結果に対してシリアルデータ処理アルゴリズムを実行することとを含む。
例19は、例8乃至18のいずれかに係る主題を含み、コンピューティングデバイスのマイクロプロセッサの特性に基づいて、データセグメントの数を決定するステップを更に含む。
例20は、例8乃至19のいずれかに係る主題を含み、シリアルデータ処理アルゴリズムの特性に基づいて、データセグメントの数を決定するステップを更に含む。
例21は、コンピューティングデバイスを含み、当該コンピューティングデバイスは、プロセッサと、該プロセッサによって実行されると当該コンピューティングデバイスに、例8乃至20のいずれかに記載の方法を実行させる複数の命令を格納しているメモリとを有する。
例22は、1つ又は複数のマシン読取可能な記憶媒体であって、実行されたことに応答して、コンピューティングデバイスに例8乃至20のいずれかに記載の方法を実行させる複数の命令を備えた1つ又は複数のマシン読取可能な記憶媒体を含む。
例23は、複数の命令を備えた1つ又は複数のマシン読取可能記憶媒体を含み、複数の命令は、コンピューティングデバイスによって実行されていることに応答して、当該コンピューティングデバイスに、データバッファを複数のデータセグメントに分割するステップであって、各データセグメントが、ゼロ超かつデータバッファの長さより小さいセグメント長を有する、ステップと、各データセグメントを、当該コンピューティングデバイスのデータレジスタの異なるデータ経路実行ユニットに直接読み出すステップと、暗号ハッシュアルゴリズムをデータ経路実行ユニットの各々に対して実質的に並行に実行して、各データ経路実行ユニットについての結果を生成するステップと、データ経路実行ユニットにおいて生成された結果を連結するステップと、暗号ハッシュアルゴリズムを、連結された結果に対して実行して、暗号ハッシュアルゴリズムの出力を生成するステップとを含む処理を実行させる。
例24は、例23に係る主題を含み、データレジスタの幅及び暗号ハッシュアルゴリズムによって指定されるワードサイズに基づいてセグメント長を定義するステップを更に含む。
例25は、例23及び例24のいずれかに係る主題を含み、インターリーブされる手法で複数のデータセグメントを作成するステップを更に含む。
例26は、例23乃至25のいずれかに係る主題を含み、暗号ハッシュアルゴリズムに関連付けられるブロックサイズを決定するステップと、データバッファの長さがブロックサイズの倍数になるように、データバッファをパディングするステップとを更に含む。
例27は、例23乃至26のいずれかに係る主題を含み、データバッファの長さが、データセグメントの数を掛けたブロックサイズと等しくなるように、固定のパターンのデータビットをデータバッファに付加するステップを更に含む。
例28は、例23乃至27のいずれかに係る主題を含み、コンピューティングデバイスのマイクロプロセッサの特性に基づいて、データセグメントの数を決定するステップを更に含む。
例29は、例23乃至28のいずれかに係る主題を含み、シリアルデータ処理アルゴリズムの特性に基づいて、データセグメントの数を決定するステップと更に含む。
例30は、例23乃至29のいずれかに係る主題を含み、暗号ハッシュアルゴリズムは、セキュアハッシュアルゴリズム又はMD5アルゴリズムを備える。

Claims (25)

  1. データバッファを処理するためのコンピューティングデバイスであって、当該コンピューティングデバイスは
    バッファ長及び複数のデータセグメントを有する任意長のデータバッファにアクセスすることであって、各データセグメントがゼロ超かつ前記バッファ長より小さいセグメント長を有し、1つ以上のワードを備え
    前記データセグメントの各々単一のデータレジスタに直接読み出すことであって、前記単一のデータレジスタは複数のデータ経路を有しており、各データセグメントの各ワード前記単一のデータレジスタの異なるデータ経路に直接読み出し、前記データセグメントの各々を単一のデータレジスタに直接読み出すことは、各データセグメントから一度に1つのワードを順次直接読み出すことを備え
    当該コンピューティングデバイスのマイクロプロセッサのシングルコアにより、シリアルデータ処理アルゴリズムを前記単一のデータレジスタの前記データ経路の各々に対して実質的に並行に実行して、各データ経路について結果を生成し;
    前記の結果を組み合わせて前記シリアルデータ処理アルゴリズムの出力を形成する;
    データバッファ処理モジュール
    を備える、コンピューティングデバイス。
  2. 前記データバッファ処理モジュールは、暗号ハッシュアルゴリズムに対する拡張として具現化される、
    請求項1に記載のコンピューティングデバイス。
  3. 前記データバッファ処理モジュールは、前記シングルコアのシングルスレッドにおける実行のために構成される、
    請求項に記載のコンピューティングデバイス。
  4. 前記データバッファ処理モジュールは、当該コンピューティングデバイスの単一命令複数データ能力を有するプロセッサにおける実行のために構成される、
    請求項1乃至のいずれかに記載のコンピューティングデバイス。
  5. 前記データバッファ処理モジュールは、シングルスレッドのソフトウェアアプリケーションを用いる使用のために構成される、
    請求項1乃至のいずれかに記載のコンピューティングデバイス。
  6. ンピューティングデバイスによって実行されことに応答して、該コンピューティングデバイスに、
    データバッファを複数のデータセグメントに分割することであって、各データセグメントが、ゼロ超かつ前記データバッファの長さより小さいセグメント長を有し、1つ以上のワードを備えることと、
    各データセグメントの各ワードを、当該コンピューティングデバイスの単一のデータレジスタの異なるデータ経路実行ユニットに直接読み出すことであって、前記データセグメントの各々を単一のデータレジスタに読み出すことは、各データセグメントから前記単一のデータレジスタへ一度に1つのワードを順次読み出すことを備えることと、
    前記コンピューティングデバイスのマイクロプロセッサのシングルコアにより、暗号ハッシュアルゴリズムを前記単一のデータレジスタの前記データ経路実行ユニットの各々に対して実質的に並行に実行して、各データ経路実行ユニットの結果を得ることと、
    前記データ経路実行ユニットにおいて得られた結果を連結することと、
    前記暗号ハッシュアルゴリズムを前記連結した結果に対して実行して、前記暗号ハッシュアルゴリズムの出力を得ることと
    を実行させる、プログラム
  7. 記コンピューティングデバイスに、前記データレジスタの幅及び前記暗号ハッシュアルゴリズムによって指定されるワードサイズに基づいて、前記セグメント長を定義させる、
    請求項に記載のプログラム
  8. 記コンピューティングデバイスに、インターリーブ手法で前記複数のデータセグメントを作成させる、
    請求項に記載のプログラム
  9. 記コンピューティングデバイスに、前記暗号ハッシュアルゴリズムに関連付けられるブロックサイズを決定させ、前記データバッファの長さが前記ブロックサイズの倍数となるように、前記データバッファをパディングさせる、
    請求項乃至のいずれかに記載のプログラム
  10. 記コンピューティングデバイスに、前記データバッファの長さが前記データセグメントを掛けたブロックサイズと等しくなるように、固定のパターンのデータビットを前記データバッファに付加させる、
    請求項に記載のプログラム
  11. 記コンピューティングデバイスに、前記コンピューティングデバイスのマイクロプロセッサの特性に基づいて、前記データセグメントの数を決定させる、
    請求項乃至のいずれかに記載のプログラム
  12. 記コンピューティングデバイスに、シリアルデータ処理アルゴリズムの特性に基づいて、前記データセグメントの数を決定させる、
    請求項乃至のいずれかに記載のプログラム
  13. 前記暗号ハッシュアルゴリズムは、セキュアハッシュアルゴリズム又はMD5アルゴリズムを備える、
    請求項乃至のいずれかに記載のプログラム
  14. 請求項6乃至13のいずれか一項に記載のプログラムを記憶する、マシン読取可能記憶媒体。
  15. 任意長のデータバッファを処理するための方法であって、
    前記データバッファを複数のデータセグメントとして定義するステップであって、各データセグメントは、ゼロ超かつ前記データバッファの長さより小さいセグメント長を有し、1つ以上のワードを備える、ステップと、
    前記データセグメントを単一のデータレジスタにストリーミングするステップであって、該単一のデータレジスタは複数のデータ経路実行ユニットを有し、各データセグメントの各ワードは、単一のデータポインタを使用して異なるデータ経路実行ユニットにストリーミングされ、前記データセグメントの各々を単一のデータレジスタにストリーミングすることは、各データセグメントから前記単一のデータレジスタへ一度に1つのワードを順次ストリーミングすることを備える、ステップと、
    コンピューティングデバイスのマイクロプロセッサのシングルコアにより、シリアルデータ処理アルゴリズムを前記単一のデータレジスタの前記データ経路実行ユニットの各々において実質的に並行に実行して、各データ経路実行ユニットについて結果を得るステップと、
    前記の結果を組み合わせて、前記シリアルデータ処理アルゴリズムの出力を形成するステップと
    を含む、方法。
  16. 前記データレジスタの幅及び前記シリアルデータ処理アルゴリズムによって指定されるワードサイズに基づいて、前記セグメント長を決定するステップを備える、
    請求項15に記載の方法。
  17. 前記データバッファを複数のデータセグメントとして定義するステップは、前記データバッファを、インターリーブされる手法で前記複数のデータセグメントへと分割するステップを含む、
    請求項15に記載の方法。
  18. 前記データバッファは複数のデータワードを備え、各ワードは複数のデータビットを備え、当該方法は、各データセグメントがデータワードのアレイを備えるように、前記データバッファ内の各データワードを、異なるデータセグメントに割り当てるステップを含む、
    請求項17に記載の方法。
  19. 各結果は、複数のデータワードを備え、各データワードは複数のデータビットを備え、前記の組み合わせる処理は、前記の結果を前記データワードでインターリーブすることを含む、
    請求項15乃至18のいずれかに記載の方法。
  20. 各データセグメントに対してハッシュダイジェストを生成するステップを更に含む、
    請求項15乃至18のいずれかに記載の方法。
  21. 前記ハッシュダイジェストを組み合わせて、新たなデータバッファを形成するステップと、該新たなデータバッファに対して暗号ハッシュ関数を実行するステップとを更に含む、
    請求項20に記載の方法。
  22. 前記シリアルデータ処理アルゴリズムに関連付けられるブロックサイズを決定するステップと、前記データバッファの長さが前記ブロックサイズの倍数となるように前記データバッファをパディングするステップとを更に含む、
    請求項15乃至18のいずれかに記載の方法。
  23. 前記データバッファの長さが、前記データセグメントの数を掛けた前記ブロックサイズと等しくなるように、固定のパターンのデータビットを前記データバッファに付加するステップを更に含む、
    請求項22に記載の方法。
  24. 前記の組み合わせる処理は、前記の結果を連結することと、該連結された結果に対して前記シリアルデータ処理アルゴリズムを実行することとを含む、
    請求項15乃至18のいずれかに記載の方法。
  25. コンピューティングデバイスのマイクロプロセッサの特性又は前記シリアルデータ処理アルゴリズムの特性に基づいて、前記データセグメントの数を決定するステップを更に含む、
    請求項15乃至18のいずれかに記載の方法。
JP2015514247A 2012-07-11 2013-07-10 単一データバッファの並行処理 Expired - Fee Related JP5981030B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201261670472P 2012-07-11 2012-07-11
US61/670,472 2012-07-11
US13/631,761 US10198248B2 (en) 2012-07-11 2012-09-28 Parallel processing of a single data buffer
US13/631,761 2012-09-28
PCT/US2013/049890 WO2014011746A1 (en) 2012-07-11 2013-07-10 Parallel processing of a single data buffer

Publications (2)

Publication Number Publication Date
JP2015523596A JP2015523596A (ja) 2015-08-13
JP5981030B2 true JP5981030B2 (ja) 2016-08-31

Family

ID=49915004

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2015514247A Expired - Fee Related JP5981030B2 (ja) 2012-07-11 2013-07-10 単一データバッファの並行処理
JP2015515295A Expired - Fee Related JP6141421B2 (ja) 2012-07-11 2013-07-10 シングルデータバッファの並行処理

Family Applications After (1)

Application Number Title Priority Date Filing Date
JP2015515295A Expired - Fee Related JP6141421B2 (ja) 2012-07-11 2013-07-10 シングルデータバッファの並行処理

Country Status (6)

Country Link
US (2) US10198248B2 (ja)
EP (2) EP2872990B1 (ja)
JP (2) JP5981030B2 (ja)
KR (3) KR101753548B1 (ja)
CN (2) CN104364757B (ja)
WO (2) WO2014011746A1 (ja)

Families Citing this family (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9501448B2 (en) 2008-05-27 2016-11-22 Stillwater Supercomputing, Inc. Execution engine for executing single assignment programs with affine dependencies
US10198248B2 (en) * 2012-07-11 2019-02-05 Intel Corporation Parallel processing of a single data buffer
JP6183374B2 (ja) * 2012-10-31 2017-08-23 日本電気株式会社 データ処理システム、データ処理方法およびプログラム
US8924741B2 (en) 2012-12-29 2014-12-30 Intel Corporation Instruction and logic to provide SIMD secure hashing round slice functionality
US10038550B2 (en) 2013-08-08 2018-07-31 Intel Corporation Instruction and logic to provide a secure cipher hash round functionality
US9425953B2 (en) 2013-10-09 2016-08-23 Intel Corporation Generating multiple secure hashes from a single data buffer
US10503510B2 (en) 2013-12-27 2019-12-10 Intel Corporation SM3 hash function message expansion processors, methods, systems, and instructions
WO2015126495A2 (en) * 2014-02-20 2015-08-27 Stillwater Supercomputing, Inc. Execution engine for executing single assignment programs with affine dependencies
US9912481B2 (en) * 2014-03-27 2018-03-06 Intel Corporation Method and apparatus for efficiently executing hash operations
US9317719B2 (en) 2014-09-04 2016-04-19 Intel Corporation SM3 hash algorithm acceleration processors, methods, systems, and instructions
US9658854B2 (en) 2014-09-26 2017-05-23 Intel Corporation Instructions and logic to provide SIMD SM3 cryptographic hashing functionality
CN106375243B (zh) * 2015-07-22 2019-09-03 华为技术有限公司 数据处理设备和光传送网络交换机
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US10686589B2 (en) 2015-12-04 2020-06-16 Hewlett Packard Enterprise Development Lp Combining hashes of data blocks
WO2018169911A1 (en) * 2017-03-14 2018-09-20 Yuan Li Reconfigurable parallel processing
GB2564878B (en) * 2017-07-25 2020-02-26 Advanced Risc Mach Ltd Parallel processing of fetch blocks of data
CN107888657B (zh) * 2017-10-11 2020-11-06 上海交通大学 低延迟分布式存储系统
US10725789B2 (en) 2017-11-22 2020-07-28 Electronics And Telecommunications Research Institute Data generation device for parallel processing
KR102290229B1 (ko) * 2017-11-22 2021-08-20 한국전자통신연구원 병렬 처리를 위한 데이터 생성 장치
CN108549583B (zh) * 2018-04-17 2021-05-07 致云科技有限公司 大数据处理方法、装置、服务器及可读存储介质
CN108984470A (zh) * 2018-06-19 2018-12-11 四川斐讯信息技术有限公司 一种fpga矿机算力的提升系统及方法
CN112148391A (zh) * 2019-06-26 2020-12-29 北京百度网讯科技有限公司 生成基于芯片的计算功能的方法、装置、设备和存储介质
CN112104449B (zh) * 2020-08-20 2022-02-11 郑州信大捷安信息技术股份有限公司 一种用于哈希算法的sdk

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6018778A (en) 1996-05-03 2000-01-25 Netcell Corporation Disk array controller for reading/writing striped data using a single address counter for synchronously transferring data between data ports and buffer memory
US20070294510A1 (en) 1999-04-09 2007-12-20 Dave Stuttard Parallel data processing apparatus
DE19957594B4 (de) 1999-11-30 2004-08-26 OCé PRINTING SYSTEMS GMBH Verfahren zum Synchronisieren von threads eines Computerprogramms
EP1252738A2 (en) 2000-01-31 2002-10-30 VDG Inc. Block encryption method and schemes for data confidentiality and integrity protection
CA2343437A1 (en) 2001-04-06 2002-10-06 Ibm Canada Limited-Ibm Canada Limitee Method and system for cross platform, parallel processing
US7818356B2 (en) 2001-10-29 2010-10-19 Intel Corporation Bitstream buffer manipulation with a SIMD merge instruction
US8140824B2 (en) 2002-11-21 2012-03-20 International Business Machines Corporation Secure code authentication
US7552419B2 (en) 2004-03-18 2009-06-23 Intel Corporation Sharing trusted hardware across multiple operational environments
US7734674B2 (en) 2005-08-08 2010-06-08 Freescale Semiconductor, Inc. Fast fourier transform (FFT) architecture in a multi-mode wireless processing system
US8055970B1 (en) * 2005-11-14 2011-11-08 Raytheon Company System and method for parallel processing of data integrity algorithms
US20080010463A1 (en) * 2006-07-10 2008-01-10 Motorola, Inc. Method for producing truncated message digests
US8122247B2 (en) 2006-10-23 2012-02-21 Alcatel Lucent Processing method for message integrity with tolerance for non-sequential arrival of message data
WO2008064153A2 (en) 2006-11-21 2008-05-29 Lucent Technologies Inc. Processing method for message integrity with tolerance for non-sequential arrival of message data
CN101304473B (zh) 2008-06-20 2010-09-08 中山大学 一种基于散列表的双向机顶盒会话信息维护方法
US8788841B2 (en) 2008-10-23 2014-07-22 Samsung Electronics Co., Ltd. Representation and verification of data for safe computing environments and systems
US8493979B2 (en) * 2008-12-30 2013-07-23 Intel Corporation Single instruction processing of network packets
US8832464B2 (en) * 2009-03-31 2014-09-09 Oracle America, Inc. Processor and method for implementing instruction support for hash algorithms
US8996556B2 (en) 2009-06-05 2015-03-31 Microsoft Technology Licensing, Llc Parallel processing of an ordered data stream
JP2011081594A (ja) 2009-10-07 2011-04-21 Mitsubishi Electric Corp データ処理装置及びデータ処理プログラム
US8443343B2 (en) 2009-10-28 2013-05-14 Intel Corporation Context-sensitive slicing for dynamically parallelizing binary programs
US8467532B2 (en) 2010-01-04 2013-06-18 Tata Consultancy Services Limited System and method for secure transaction of data between a wireless communication device and a server
US8842833B2 (en) 2010-07-09 2014-09-23 Tata Consultancy Services Limited System and method for secure transaction of data between wireless communication device and server
US8566841B2 (en) 2010-11-10 2013-10-22 International Business Machines Corporation Processing communications events in parallel active messaging interface by awakening thread from wait state
US8856546B2 (en) * 2012-06-07 2014-10-07 Intel Corporation Speed up secure hash algorithm (SHA) using single instruction multiple data (SIMD) architectures
US10198248B2 (en) 2012-07-11 2019-02-05 Intel Corporation Parallel processing of a single data buffer

Also Published As

Publication number Publication date
US20140019693A1 (en) 2014-01-16
KR20150008185A (ko) 2015-01-21
CN104364757A (zh) 2015-02-18
WO2014011743A1 (en) 2014-01-16
US10203934B2 (en) 2019-02-12
US20140019694A1 (en) 2014-01-16
EP2872990B1 (en) 2019-10-09
CN104364756B (zh) 2019-05-14
EP2872987B1 (en) 2019-10-16
WO2014011746A1 (en) 2014-01-16
KR101755541B1 (ko) 2017-07-07
EP2872987A4 (en) 2016-02-24
JP2015523596A (ja) 2015-08-13
JP6141421B2 (ja) 2017-06-07
EP2872990A1 (en) 2015-05-20
KR20160105988A (ko) 2016-09-08
KR101753548B1 (ko) 2017-07-03
US10198248B2 (en) 2019-02-05
CN104364757B (zh) 2020-08-11
CN104364756A (zh) 2015-02-18
KR20150008483A (ko) 2015-01-22
JP2015529865A (ja) 2015-10-08
EP2872987A1 (en) 2015-05-20
EP2872990A4 (en) 2016-03-02

Similar Documents

Publication Publication Date Title
JP5981030B2 (ja) 単一データバッファの並行処理
US11106464B2 (en) Apparatuses, methods, and systems for access synchronization in a shared memory
KR101776227B1 (ko) 슬라이딩 윈도 인코딩 알고리즘들을 위한 명령어들
KR101926241B1 (ko) 레지스터 정렬을 위한 시스템, 장치 및 방법
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
CN113051626A (zh) 基于动态密钥推导的多密钥全存储器加密的方法和装置
KR20170099869A (ko) 인덱스 및 즉치로 벡터 치환을 수행하기 위한 방법 및 장치
US20230169173A1 (en) Standardized Interface for Intellectual Property Blocks
KR20170099873A (ko) 벡터 비트 셔플을 수행하기 위한 방법 및 장치
US11829464B2 (en) Apparatus and method for authentication of software
KR20170099855A (ko) 마스크 및 벡터 레지스터들 사이의 가변 확장을 위한 방법 및 장치
JP6807073B2 (ja) 高速ベクトルによる動的なメモリ競合検出
CN112148210A (zh) 用于存储器保护的装置id
US20200266995A1 (en) Managing state in accelerators
US20230032236A1 (en) Data streaming accelerator
CN115859315A (zh) 用于对安全存储装置的直接外围访问的系统、装置和方法
CN115525335A (zh) 使用具有可信计算基(tcb)可恢复性的物理不可克隆函数(puf)的平台密封秘密
Plank et al. Gf-complete: A comprehensive open source library for Galois field arithmetic version 1.02
US10185604B2 (en) Methods and apparatus for software chaining of co-processor commands before submission to a command queue

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151111

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151215

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160315

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160628

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160727

R150 Certificate of patent or registration of utility model

Ref document number: 5981030

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees