JP6141421B2 - シングルデータバッファの並行処理 - Google Patents

シングルデータバッファの並行処理 Download PDF

Info

Publication number
JP6141421B2
JP6141421B2 JP2015515295A JP2015515295A JP6141421B2 JP 6141421 B2 JP6141421 B2 JP 6141421B2 JP 2015515295 A JP2015515295 A JP 2015515295A JP 2015515295 A JP2015515295 A JP 2015515295A JP 6141421 B2 JP6141421 B2 JP 6141421B2
Authority
JP
Japan
Prior art keywords
data
buffer
segment
segments
computing device
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
JP2015515295A
Other languages
English (en)
Other versions
JP2015529865A (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 JP2015529865A publication Critical patent/JP2015529865A/ja
Application granted granted Critical
Publication of JP6141421B2 publication Critical patent/JP6141421B2/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
    • 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
    • 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
    • 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)
  • Health & Medical Sciences (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Power Engineering (AREA)
  • Storage Device Security (AREA)
  • Microcomputers (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Description

本発明は、データバッファを処理するためのコンピューティング装置に関する。
データファイルやコンピュータプログラムの安全性を検証するためのソフトウェアは、オペレーティングシステムブートシーケンス、プログラムコード又はデータファイルのローディング、ウェブブラウジング、データ通信、及びデータ記憶などの多くの種々の背景において普及している。認証及び/又は暗号化に使用されるシリアルデータ処理アルゴリズムなどのシリアルデータ処理アルゴリズムは、データのシングルバッファに対して、連鎖して依存する方法で演算することがある。これらのアルゴリズムは、上記バッファ内のデータの1ブロックの処理から結果的に生じる出力が後続ブロックの処理のためにしばしば必要とされる点で、シリアルの連鎖(serial chaining)によって制約されることがある。
例えば、MD5(メッセージ‐ダイジェストアルゴリズム)並びにSHA1、SHA256及びSHA512(セキュアハッシュアルゴリズム)などの暗号ハッシュ関数は、汎用目的プロセッサ上の計算に関して、高価であることがある。こうしたハッシュ関数は、データのシングルバッファに対して、各データブロックから導出される計算を用いてハッシュダイジェスト状態を更新し、及び互いに依存する複数のラウンド(rounds)の処理を使用して、順次動作する。シングルバッファのブロックの順次処理は、現代のプロセッサにおけるパフォーマンスを制限している。ベクトル単一命令多重データ(SIMD)ユニットを用いるマルチバッファ処理などの方法が、アプリケーションにおけるより良いパフォーマンスのために提案されており、これにおいて、複数の独立したデータバッファに対して動作することが可能である。しかしながら、これらの方法は、シングルバッファをハッシュすることに関連するアプリケーションに適用可能ではない。ツリーハッシュ法が、使用されている別の手法であるが、複数のコア又はエンジンを横断する。
シングルバッファのブロックの順次処理が、現代のプロセッサにおけるパフォーマンスを制限している。
一実施例が、データバッファを処理するためのコンピューティング装置を含む。上記コンピューティング装置は、データバッファ処理モジュールであって、バッファ長と複数のデータセグメントとを有する任意長のデータバッファにアクセスするステップであり、各データセグメントは、ゼロより大きく上記バッファ長より小さいセグメント長を有する、ステップと、各データセグメントをシリアルデータ処理アルゴリズムに従ってパディングするステップと、上記のパディングされたデータセグメントの各々をデータレジスタに直接読み込むステップであり、上記データレジスタは複数のデータパスを有し、各々のパディングされたデータセグメントは異なるデータパスに直接読み込まれる、ステップと、各データパスのための結果を作成するように、上記データパスの各々に対してシリアルデータ処理アルゴリズムを実質的に並行して行うステップと、をなす、データバッファ処理モジュールを含む。
本明細書に説明される概念は、添付の図面において、限定としてではなく例として例示される。例示の簡素さと明りょうさとを目的として、図に例示される要素は、必ずしも縮尺どおりに描かれてはいない。適切と考えられる場合、参照ラベルは、図面にわたって繰り返されて、対応する又は類似の要素を示している。
コンピューティング装置の少なくとも1つの実施形態の簡素化されたブロック図であり、このコンピューティング装置と関連して、開示される方法を実施することができる。 シングルデータバッファの並行処理のためのシステムの少なくとも1つの実施形態の簡素化されたモジュール図である。 シングルデータバッファの並行処理のための方法の少なくとも1つの実施形態の簡素化されたフロー図である。
本開示の概念は、種々の変更及び代替形式を受け入れる余地があるが、本開示の特定実施形態が、図面において例として図示されており、本明細書に詳細に説明されることになる。しかしながら、本開示の概念を開示される特定形式に限定する意図はまったくなく、逆に、意図するところは、本開示と添付される特許請求の範囲とに調和するすべての変更、均等物及び代替手段をカバーすることであることを理解されたい。
本明細書における「1つの実施形態」「一実施形態」「一例示的実施形態」などの表現は、その説明される実施形態が特定の特徴、構造又は特性を含むことができることを示すが、あらゆる実施形態が上記特定の特徴、構造又は特性を含んでよく、あるいは必ずしも含まなくてもよい。さらに、こうした表現は、必ずしも同一の実施形態を参照するものではない。さらに、特定の特徴、構造又は特性が一実施形態と関連して説明されるとき、明示的に説明されるか否かにかかわらず、こうした特徴、構造又は特性を他の実施形態と関連して達成することは当業者の知識の範囲内であると考えられる。
開示される実施形態は、いくつかの場合、ハードウェア、ファームウェア、ソフトウェア、又はこれらの任意の組み合わせにおいて実施することができる。開示される実施形態は、一時的又は非一時的なマシン読取可能(例えば、コンピュータ読取可能)記憶媒体により伝達される又は該記憶媒体上に記憶される命令として実施されることもでき、この命令を、1又は複数のプロセッサが読み出して実行することができる。マシン読取可能記憶媒体は、任意の記憶装置、機構、又はマシンにより読取可能な形式で情報を記憶する若しくは送信するための他の物理構造(例えば、揮発性若しくは不揮発性のメモリ、メディアディスク又は他のメディア装置)として具現化されることができる。
図面において、いくつかの構造又は方法の特徴が、特定の配置及び/又は順序で図示されることがある。しかしながら、こうした特定の配置及び/又は順序は必ずしも必要とされないことを十分理解されたい。むしろ、いくつかの実施形態において、こうした特徴は、例示的な図に示されるものとは異なる態様及び/又は順序で配置される可能性がある。さらに、特定の図に構造又は方法の特徴を含むことは、こうした特徴がすべての実施形態に必要とされることを意味するものではなく、いくつかの実施形態において、含まれない場合があり、あるいは他の特徴と組み合わせられてよい。
次に図1を参照すると、データバッファ処理モジュール130が、例示的なコンピューティング装置100に具現化されている。使用において、データバッファ処理モジュール130は、入力として、シングルデータバッファ132(例えば、任意長の文字列又は「メッセージ」)をとる。データバッファ処理モジュール130は、シングルデータバッファ132のための並列性のレベル、すなわち、シリアルデータ処理アルゴリズム128(例えば、暗号ハッシュ関数)が並行して(in parallel)処理できるシングルデータバッファ132の「セグメント」の数を決定する。データバッファ処理モジュール130は、アルゴリズム128によるセグメントの並行処理を管理する。こうした並行処理後のアルゴリズム128の出力は、相違するが、従来の方法で(例えば、順次に)シングルデータバッファに対してアルゴリズム128を実行することにより通常達成される結果に相当するセキュリティ強度を有する。さらに、シングルデータバッファ132のセグメント化と並行処理との結果として、パフォーマンス向上を達成することができる。このように、データバッファ処理モジュール130は、下層のアルゴリズムが特定サイズ(例えば、64バイト)のブロックに対して動作するとしても、いかなる任意長のシングルデータバッファに対してもシリアルデータ処理アルゴリズムを行うことができる。
例示的なコンピューティング装置100は、少なくとも1つのプロセッサ110、メモリ120、入力/出力(I/O)サブシステム122、記憶装置124、及び1又は複数の周辺装置140を含む。コンピューティング装置100は、特定の用途に依存して、例えば、デスクトップコンピュータシステム、ラップトップ若しくはタブレットコンピュータシステム、サーバ、エンタープライズコンピュータシステム、コンピュータのネットワーク、ハンドヘルド若しくはその他のモバイルコンピューティング装置、又は他の電子装置などの、任意のタイプのコンピューティング装置の中に又は任意のタイプのコンピューティング装置として具現化されてよい。
例示的なプロセッサ110は、1又は複数のプロセッサコア又はシングルコアの論理部分、例えば、プロセッサコア112、114、116を含み、これらは、説明を簡易にするため、本明細書において単に「コア」という。いくつかの実施形態において、コア112、114、116のうち1又は複数は、SIMD(単一命令多重データ)命令セット又は同様のコンピュータ命令セットを使用してシングルスレッドのコンピュータプログラム(いくつかの実施形態において、データバッファ処理モジュール130など)を処理するように構成される。より詳細には、いくつかの実施形態において、コア112、114、116のうち少なくとも1つは、ストリーミングSIMD拡張(SSE)又はその後のバージョン(例えば、SSEn又はAVX(Advanced Vector Extensions))などの、1又は複数のストリーミング拡張を含む命令セットを用いて構成される。
1又は複数のコア112、114、116は、1又は複数のデータレジスタ118を含み、あるいはこれに通信可能につながれる。データレジスタ118を利用して、シリアルデータ処理アルゴリズム128、データバッファ処理モジュール130及び/又はコンピューティング装置100の他のコンポーネントの演算の間、データ及び/又は命令を一時的に記憶することができる。各レジスタ118は、レジスタサイズ又は「幅」を有し、このレジスタサイズ又は「幅」は、レジスタ118が一時に記憶することができるデータの量である。データレジスタ118の少なくとも1つは、データ‐レベル並列性のために構成される。例えば、いくつかの実施形態において、少なくとも1つのデータレジスタ118は、SIMD又は同様のデータ‐レベル並行処理のために構成され、すなわち、少なくとも1つのデータレジスタ118は、複数のデータに対して同一のオペレーションを同時に又は実質的に同時に行うことができる複数の機能ユニット(例えば、「レーン」、「データパス」又は「実行ユニット」)に分割されることができる。例えば、128ビットの幅を有するSIMD又は同様のレジスタにおいて、コンピュータ命令は、この128ビットのデータの部分を各々処理することができるレジスタ118の複数のレーン又はデータパスを指定することができ、したがって、アルゴリズム128は、他のデータパスとは独立して、データパスの各々に対して同時に実行されることができる。
例示的なコア112、114、116はさらに、1又は複数のキャッシュメモリ(図示せず)を含み、あるいはこれに通信可能につながれる。キャッシュメモリを利用して、シリアルデータ処理アルゴリズム128、データバッファ処理モジュール130及び/又はコンピューティング装置100の他のコンポーネントの演算の間、データ及び/又は命令を一時的に記憶することができる。キャッシュメモリとレジスタ118とに加えて、プロセッサ110及び/又はそのコア112、114、116は、メモリ120を含み、あるいはこれにその他の方法で通信可能につながれる。メモリ120の部分は、ダイナミックランダムアクセスメモリ装置(DRAM)、同期型ダイナミックランダムアクセスメモリ装置(SDRAM)、ダブルデータレートダイナミックランダムアクセスメモリ(DDS 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は、回路、マシン実行可能論理ユニット又は同様のものとして具現化されることができる。すなわち、シリアルデータ処理アルゴリズム128及び/又はデータバッファ処理モジュール130は、様々な実施形態において、ソフトウェア、ファームウェア、ハードウェア及び/又はこれらの組み合わせとして各々具現化されることができる。さらに、データバッファ処理モジュール130は、シリアルデータ処理アルゴリズム128のサブモジュール又は「拡張」として、あるいはシリアルデータ処理アルゴリズム128及び/又は他のソフトウェア(例えば、オペレーティングシステム、セキュリティアプリケーション及び/又はその他)によりコール可能な関数、プロシージャ又はライブラリオブジェクトとして具現化されることができる。例えば、バッファ処理モジュール130は、セキュアハッシュアルゴリズムなどの既存の又は将来の暗号ハッシュアルゴリズムに対する1又は複数のソフトウェア拡張として具現化されることができる。
I/Oサブシステム122は、1又は複数の周辺装置140に通信可能につなぐことができる。(1又は複数の)周辺装置140は、例えば、コンピューティング装置100の使用意図に依存して、1又は複数のネットワークインタフェース、グラフィクス及び/若しくはビデオアダプタ、キーボード、タッチスクリーン、ディスプレイ、プリンタ、データ記憶装置、並びに/又は他の周辺装置を含むことができる。さらに、コンピューティング装置100は、説明の明りょうさを目的として図1に例示されていない他のコンポーネント、サブコンポーネント及び装置を含んでよいことを十分理解されたい。
概して、コンピューティング装置100のコンポーネントは、図1に図示されるとおり、両矢印で図式的に表された1又は複数の信号パスによって通信可能につながれる。こうした信号パスは、それぞれの装置間の通信を容易にすることができる任意のタイプの有線又は無線の信号パスとして具現化されることができる。例えば、信号パスは、任意の数のワイヤ、プリント回路板トレース、ビア、バス、2地点間相互接続、介在装置及び/又は同様のものとして具現化されることができる。
次に図2を参照すると、バッファ処理モジュール130が入力データバッファ210にわたるシリアルデータ処理アルゴリズム128の並行実行を管理する例示的なシステム200が図示されている。例示的な入力データバッファ210は、例えば、任意のサイズ又は長さL(例えばビット又はバイト単位で測定される)を有するデータ文字列(データファイル又は「メッセージ」)である。以下でより詳細に説明されるとおり、バッファ処理モジュール130は、入力データバッファ210の内容を、複数のセグメントSに分割し、これにおいて、セグメントの数は、システム200の特定のデザイン又は実装の要件を所与として所望される又は可能である、入力データバッファ210にわたる並列性のレベル又は度合いを表す正の整数である。例示的な実施形態において、各セグメントは、シリアルデータ処理アルゴリズム128の要件に従って指定された長さにパディングされる(be padded)ことができる。換言すると、パディング前のセグメントの長さとシリアルデータ処理アルゴリズム128の仕様とに依存して、パディングされることがあるセグメントもあれば、パディングされないセグメントもある。
バッファ処理モジュール130は、入力データバッファ210(例えば、必要に応じてパディングされた、セグメント)の内容を、各セグメントがレジスタ118の異なるレーン又はデータパスに割り当てられるように、データレジスタ118に流す(streams)。バッファ処理モジュール130は、アルゴリズム128の実行をレジスタ118の各レーン又はデータパスに対して並行して始動し、したがって、各セグメントはシリアルデータ処理アルゴリズム128によって同時に処理される。
アルゴリズム128は、指定されたサイズB(例えばビット又はバイト単位で測定される)のデータブロック単位で順次、データバッファ210の(必要に応じてパディングされた)セグメントの各々を並行して処理し、これにおいて、各データブロックは、サイズW(例えば、ビット又はバイト単位で測定される)の複数のデータワードから成り、ここでBはWの倍数である。アルゴリズム128は、各セグメントについて、出力(又は、いくつかの実施形態において「メッセージダイジェスト」又は「ハッシュダイジェスト」)を生成し、この出力は、出力データバッファ212に少なくとも一時的に記憶されることができる。出力データバッファ212(1)〜(S)の各々の内容は(ここで、Sはセグメントの数である)、固定された長さD(例えば、ビット又はバイト単位で測定される)を有する。入力データバッファ210と出力データバッファ212(1)〜(S)との双方は、様々な実施形態において、シングルデータバッファ132として又は1若しくは複数の一時記憶バッファ内に、具現化されることができる。例えば、シングルデータバッファ132の内容は、最初、入力データバッファ210の内容に対応することができ、バッファ処理モジュール130及び/又はシリアルデータ処理アルゴリズム128の実行が進むにつれて、更新されることができる。
いくつかの実施形態において、アルゴリズム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つのラウンドの出力が後続のラウンドに対する入力になるように、バッファを更新する。
従来、SHA256ハッシュ関数は入力バッファの内容のブロックを順次処理し、したがって、1つのブロックのために作成されるハッシュダイジェストは、入力バッファ内のデータの各ブロックが処理され終わるまで、次ブロックの処理のための最初のハッシュダイジェストとして使用されるなどする。対照的に、バッファ処理モジュール130は、シングルデータバッファにわたる複数のセグメントを定義し、これにおいて、各セグメントはデータの1又は複数のブロックを含み、データバッファのセグメントの各々にアルゴリズム128を並行して適用する。例えば、データレジスタが256ビットの幅を有する場合、バッファ処理モジュール130は、入力データバッファ210の内容を、(レジスタ幅)/W、すなわち256/32=8セグメントに分割し、8セグメントの各々に対してアルゴリズム128を並行して実行することができる。
次に図3を参照すると、コンピュータ化されたプログラム、ルーチン、ロジック及び/又は命令としてバッファ処理モジュール130及び/又はコンピューティング装置100の他のモジュール若しくはコンポーネントが実行可能な、シングルデータバッファの並行処理のための例示的な方法300が図示されている。ブロック310において、方法300は、入力データバッファ210の内容を分割するための、セグメントの数Sを決定し、これに応じて、決定された数のセグメントを、入力バッファ210の内容を分割することによって作成する。いくつかの実施形態において、セグメントの数は予め決定され、パラメータ、引数又は格納された値(例えば、ルックアップテーブル又はデータベースから)として単にアクセスされることができる。他の実施形態において、セグメントの数は、ロード時又は実行時に決定されることができる。いくつかの実施形態において、セグメントの数は、レジスタ118の幅、シリアルデータ処理アルゴリズム128のパラメータ若しくは仕様(例えば、ブロックサイズ、ワードサイズ、出力長など)、及び/又は入力データバッファ210の長さの関数とすることができる。一例として、SHA256ハッシュ関数がアルゴリズム128として使用される場合、S=8、W=4バイト、及びB=64バイトである。
引き続きブロック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より小さい。
ブロック312において、方法300は、必要に応じて前処理ルーチン又は「オンザフライ」の一部として、セグメントの各々のための任意の必要なパディングを行う。例えば、暗号ハッシュ関数の場合、各セグメントは、バッファ長の表示に加えて複数のデータビットをメッセージの末尾に(例えば、連結によって)付加することによって、必要に応じてパディングされることができ、したがって、セグメントは、選択されたアルゴリズム128による処理のために指定された長さになる。いくつかの実施形態において、パディングは、“1”のビットの後に必要数の“0”のビットが続き、その後にバッファ長が続くものを含む。他の実施形態において、“0”及び“1”のビットの他の組み合わせ又はパターンが、各セグメントのパディングに使用されてよい。下層のアルゴリズム128を定義する標準又は仕様が、パディングスキームを指定する。いくつかの実施形態において、セグメントの各々は、十分な複数のビットによって拡張されて、パディングされるバッファをブロックサイズの最小倍数にする。例えば、バッファ210の各セグメントは、それに最も近いBバイトの倍数までパディングされ、それからアルゴリズム128に適用されるS重の(S-way)SIMD処理を用いて処理されてS個のダイジェストを生成することができる。この場合、セグメントごとのパディングは、アルゴリズム128の標準パディングスキームに従って行われる。いくつかの場合(残りのセグメントの場合など)、セグメントは、他のパディングされたセグメントとは異なるパディング長(padded length)を有することができる。例えば、パディングは、必要なパディングを加えたセグメント内のデータ量がブロックサイズより大きくなるとき、追加のブロックを有するセグメントをもたらすことができる。
ブロック314において、方法300は、セグメントをレジスタ118のデータパスに流し、あるいはその他の方法で読み込み、したがって、各セグメントは、(例えばインタリービングを使用して)異なるデータパスへと読み込まれる。いくつかの実施形態において、これは、最大でSBまで、すなわち、均等にサイズ調整されたセグメントのすべてが処理され終わるまでインクリメントされるシングルデータポインタを使用することによって達成される。SHA256の例において、8個の32ビットワードが、一時に、レジスタの8個のデータパスに読み込まれる。別の例として、128ビットレジスタを備えたSIMD能力があるマイクロプロセッサ上でSHA‐1を実行することは、下記のパラメータ設定、すなわち、B=64バイト、W=4バイト、S=4、D=20バイトを有することになる。
ブロック316において、シリアルデータ処理アルゴリズム128は、パディングされたデータセグメントの各々に対して並行して実行される。すなわち、各々のパディングされたセグメントについて、アルゴリズム128は、セグメントのブロックを、他のセグメントがアルゴリズム128により同様に処理されているのと同時に、順次処理する。したがって、各々のパディングされたセグメントについて、中間結果(例えば、ハッシュダイジェスト)が作成される。SHA256の例において、SHA256アルゴリズムは、各データパス/32ビットワードに対して実質的に同時に実行され、それからその次の8ワードがレジスタデータパスに読み込まれ、SHA256アルゴリズムによって、最大でブロックサイズBまで、並行して処理されるなどする。
各データセグメントがアルゴリズム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ビット)ワードから作ることができる。
いくつかの実施形態において、データセグメントは、インタリーブされた独立したバッファに類似し、これにおいて、複数の独立したハッシュダイジェストが、上記セグメントについて、上記で論じられたとおり並行して生成される。いくつかの実施形態において、インタリーブされるセグメントの数は、2のべき乗である。セグメントの作成において、方法300のいくつかの実施形態は、バッファ210をブロックサイズの又はより大きなサイズの処理部分に分割するのではなく、データをより細かい粒度(例えば、データワード)でインタリーブする。
図3に再び戻ると、方法300の例示的な実施形態は、ハッシュアルゴリズムHを使用し、このハッシュアルゴリズムは、サイズBバイトの整数ブロックに対して各々動作するように定義される。下記の実施形態は、長さLのメッセージMを、所与のレベルの並列性Sを用いてハッシュする(ここで、||シンボルは連結を表す)。セグメントが作成された後、Hに関連するパディング関数が、予め決定されたパターンとBバイトの倍数である最小長さへのセグメント長の連結とを用いてメッセージの各セグメントを拡張する。
図3のブロック310を参照すると、メッセージMは、各々が長さL/SであるS個のセグメントに分割される。メッセージMは、MのワードサイズWビットごとが異なるセグメントに割り当てられるように、インタリーブされる方法で分割されることができる。各セグメントは、Wビットワードの配列として表されることができ、
Seg=M[0]||M[S]||M[2S]|| ...
Seg=M[1]||M[S+1]||M[2S+1]|| ...
...
SegS−1=M[S−1]||M[2S−1]||M[3S−1]|| ...
ここで、各M[n]は、メッセージへのワードサイズWのインデックスである。図3のブロック312を参照すると、アルゴリズム128により指定されるパディング関数は、メッセージの各セグメントに適用され、各々が或るパディング長を有する個々のセグメントを生成する。各セグメントのパディング長は、それぞれのセグメントをBバイトの倍数に拡張することができる最小の長さである。上記で言及されたとおり、いくつかのセグメントは、他のセグメントとは異なるパディング長を有することができる。
図3のブロック316を参照すると、S個のリーフレベルダイジェストDが、パディングされたセグメントに対して、k=0〜(S−1)についてD=H(Seg)で生成される。図3のブロック318(場合による)を参照すると、新しいメッセージMが、ブロック316からの結果的なダイジェストをワードサイズWビットごとずつインタリーブすることによって作成されることができる。M=D[0]||D[0]...||D(S−1)[0]||D[1]...||D(S−1)[(D/W)−1]である場合、各D[n]は、セグメントのダイジェストへのワードサイズWのインデックスであり得る。そして、ハッシュアルゴリズムHは、Mに適用されることができる(例えば、H(M))。
いくつかの実施形態において、メモリ内で整合されたデータバッファ210の内容が、置き換え(transposing)の必要なしに、SIMDレジスタに直接読み込まれる(例えば、「流される」)。いくつかの実施形態において、方法300は、開始時にバッファ210の長さを知る必要なしに、流されるデータ(例えば、ネットワークから)がレジスタ118に直接供給されることを可能にする。これに応じて、シングルスレッドアプリケーションは、開示された並行処理のパフォーマンスの恩恵を生かすために(ハッシュアルゴリズムレベルにおいて以外で)変更される必要がなくなる。
いくつかの実施形態において、アルゴリズム128は、計算及び/又は安全性の検討に基づいて選択され、あるいは順序付けられることができ、様々なプロトコル/標準における暗号ハッシュアルゴリズムの現在の(可能性として順序付けられた)リストが、本明細書に開示されたとおり並列化されたバージョンを用いて増強されることができる(例えば、SHA1x4、SHA1x8、SHA256x4、SHA256x8など)。
いくつかの実施形態、例えば、安全にロードされたファイルの署名を検証することに関連するアプリケーションにおいて、署名エンティティは、選択されたセキュリティ(例えば、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と共に所望されることがある。
種々の計算強度についての多くの検証装置が存在し得る実施形態において、署名エンティティは、上記検証装置の大半について動作する並列性のレベルを決定する必要がある場合がある。開示された実施形態は、より大きなレベルの並列性が署名の間に作成されることができるとき、サーバがこれを非常に正確に推定することを必要とせず、検証エージェントは、そのSIMD又はハードウェア能力が指定された数と同数のセグメントをいっせいに処理することができない場合、検証の間、マルチパス(multi-pass)アプローチを行うことができる。例えば、署名部がx4スキームを使用することができながら、検証エージェントは2パス(passes)のx2スキームを行うことができる。
いくつかの実施形態において、あまりに多くのパス(passes)が(例えば、ダイジェストの複数の状態変数を管理することに起因して)必要とされる場合、効率性のいくらかのロスが生じることがあるが、データは依然としてただ1回でストリーミング方法で効率良く運ばれることができる。この場合、アプリケーションは、状態変数のセットを通じてサイクルを回す(cycle)必要があることになる。例えば、いくつかの場合、クライアント装置がSIMDユニットをまったく有さないことがあり、単純なスカラー演算を行ってSHAx4ハッシュを処理する必要がある。この場合、上記クライアント装置は、1セットのSHA256状態変数(32バイト)を用いて動作することに代わって、4つの上記状態変数のコピー(128バイト)に対して同時に動作することになり、データバッファからワードを処理するとき、上記状態変数のコピーを通じてサイクルを回すことになる。状態サイズにおけるこの増加は、非常に小さい。しかしながら、一ブロックのための(例えば、SHAのための)メッセージスケジュールに関連する動作用セットサイズの増加は、いくつかの場合、望まれないことがある。動作用セットサイズにおける増加が問題になる場合、4ブロックのデータを記憶し、一時に1つのインタリーブされたブロックに対して厳密に動作するように選択することができる。多くの他の変形が可能であり、様々な実施形態が、任意の装置が過度の負荷無しに効率良く並行ハッシュ署名を処理することを可能にすることができる。しかしながら、固定のハードウェアエンジンが、パディングを含めハッシュ関数全体を所与のバッファ/長さ入力に対して実行するようにデザインされる場合、このパディングは、上記ハードウェアとして同様に設計されて同一の結果を達成することができる。ハードウェアエンジンがブロック単位に対して動作し、あるいはパディングを含まないモードを有する場合、このハードウェアエンジンを使用して、開示されたマルチハッシュ方法を行うことができる。
開示された実施形態は、大きな度合いの並列性(例えば、x32又はx64)の能力があるが、いくつかの実施形態において、既存の装置又は合理的に予期される将来の装置(例えば、x4又はx8)の能力に従って方法300を構成することが望まれ得る。
いくつかの実施形態において、方法300のSHA256x4バージョンは、合理的にサイズ調整された1KBデータバッファに対して最良のSHA256アルゴリズム計算を介して約2.6xのパフォーマンス向上を提供することが示されている。いくつかの実施形態において、方法300のMD5x8バージョンは、標準MD5アルゴリズムを介して約4.4xのパフォーマンス向上をもたらすことが示されている。マルチハッシュパフォーマンスは、将来のプロセッサのデータパス幅の増加に比例して増減する(scale)であろう。さらに、開示された実施形態を用いると、結果的に生じるダイジェストは、下層のハッシュ関数の直接適用によって取得されるダイジェストと少なくとも同じ安全性及び衝突耐性があるであろう。今日最も広く使用されているハッシュ関数に加えて、開示された実施形態は、新しいSHA3候補に対して適合させることができる。
実施例(EXAMPLES)
本明細書に開示される装置、システム及び方法の例示的な実施例が以下に提供される。上記装置、システム及び方法の一実施形態には、以下に説明される実施例のうち1又は複数、及び任意の組み合わせを含むことができる。
実施例1は、データバッファを処理するためのコンピューティング装置を含む。上記コンピューティング装置は、データバッファ処理モジュールであって、バッファ長と複数のデータセグメントとを有する任意長のデータバッファにアクセスするステップであり、各データセグメントは、ゼロより大きく上記バッファ長より小さいセグメント長を有する、ステップと、各データセグメントをシリアルデータ処理アルゴリズムに従ってパディングするステップと、上記のパディングされたデータセグメントの各々をデータレジスタに直接読み込むステップであり、上記データレジスタは複数のデータパスを有し、各々のパディングされたデータセグメントは異なるデータパスに直接読み込まれる、ステップと、各データパスのための結果を作成するように、上記データパスの各々に対してシリアルデータ処理アルゴリズムを実質的に並行して行うステップと、をなす、データバッファ処理モジュールを含む。
実施例2は、実施例1の対象事項を含み、上記データバッファは任意長を有する。
実施例3は、実施例1又は実施例2の対象事項を含み、上記データバッファ処理モジュールは、上記のパディングされたデータセグメントの各々を上記データレジスタの異なるデータパスに直接読み込むデータバッファ処理モジュールを含む。
実施例4は、実施例1乃至3のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、上記データセグメントの各々を上記シリアルデータ処理アルゴリズムに従ってパディングするデータバッファ処理モジュールを含む。
実施例5は、実施例1乃至4のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、暗号ハッシュアルゴリズムに対する拡張として具現化される。
実施例6は、実施例1乃至5のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、上記コンピューティング装置のマイクロプロセッサのシングルコア上で実行するデータバッファ処理モジュールを含む。
実施例7は、実施例1乃至6のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、上記シングルコアのシングルスレッド上で実行するデータバッファ処理モジュールを含む。
実施例8は、実施例1乃至7のうちいずれかの対象事項を含み、上記コンピューティング装置の単一命令多重データ対応プロセッサ上で実行するデータバッファ処理モジュールを含む。
実施例9は、実施例1乃至8のうちいずれかの対象事項を含み、上記データバッファ処理モジュールは、シングルスレッドソフトウェアアプリケーションで実行するデータバッファ処理モジュールを含む。
実施例10は、任意長のデータバッファを処理するための方法を含む。上記方法は、上記データバッファを複数のデータセグメントとして定義するステップであり、各データセグメントは、ゼロより大きく上記データバッファの長さより小さいセグメント長を有する、ステップと、各データセグメントをシリアルデータ処理アルゴリズムに従ってパディングするステップと、上記のパディングされたデータセグメントをデータレジスタに流すステップであり、上記データレジスタは複数のデータパス実行ユニットを有し、各々のパディングされたデータセグメントは、シングルデータポインタを用いて異なるデータパス実行ユニットに流される、ステップと、各データパス実行ユニットのための結果を作成するように、上記データパス実行ユニットの各々でシリアルデータ処理アルゴリズムを実質的に並行して実行するステップと、を含む。
実施例11は、実施例10の対象事項を含み、上記データレジスタの幅と上記シリアルデータ処理アルゴリズムにより指定されるワードサイズとに基づいて上記セグメント長を定義するステップ、をさらに含む。
実施例12は、実施例10及び11のうちいずれかの対象事項を含み、上記データバッファを複数のデータセグメントとして定義するステップは、上記データバッファをインタリーブされる方法で上記複数のデータセグメントに分割するステップを含む。
実施例13は、実施例10乃至12のうちいずれかの対象事項を含み、上記データバッファは複数のデータワードを含み、上記データバッファをインタリーブされる方法で上記複数のデータセグメントに分割するステップは、各データセグメントがデータワードの配列を含むように、上記データバッファ内の各データワードを異なるデータセグメントに割り当てるステップを含む。
実施例14は、実施例10乃至13のうちいずれかの対象事項を含み、各結果は複数のデータワードを含み、上記結果を上記データワードずつインタリーブするステップ、をさらに含む。
実施例15は、実施例10乃至14のうちいずれかの対象事項を含み、シリアルデータ処理アルゴリズムを実行するステップは、暗号ハッシュ関数を実行するステップを含む。
実施例16は、実施例10乃至15のうちいずれかの対象事項を含み、上記のパディングされたデータセグメントの各々のためのハッシュダイジェストを生成するステップ、をさらに含む。
実施例17は、実施例10乃至16のうちいずれかの対象事項を含み、上記ハッシュダイジェストを結合して新しいデータバッファを形成し、上記新しいデータバッファに対して上記暗号ハッシュ関数を実行する、結合するステップ、をさらに含む。
実施例18は、実施例10乃至17のうちいずれかの対象事項を含み、上記結合するステップは、上記結果を連結し、上記の連結された結果に対して上記シリアルデータ処理アルゴリズムを実行するステップを含む。
実施例19は、実施例10乃至18のうちいずれかの対象事項を含み、上記シリアルデータ処理アルゴリズムに関連するブロックサイズを決定し、パディングされたデータセグメントの各々の長さが上記ブロックサイズの倍数になるように上記データセグメントの各々をパディングするステップ、をさらに含む。
実施例20は、実施例10乃至19のうちいずれかの対象事項を含み、固定されたパターンのデータビットを上記データセグメントの各々に付加するステップ、をさらに含む。
実施例21は、実施例10乃至20のうちいずれかの対象事項を含み、上記コンピューティング装置のマイクロプロセッサの特性に基づいてデータセグメントの数を決定するステップ、をさらに含む。
実施例22は、実施例10乃至21のうちいずれかの対象事項を含み、上記シリアルデータ処理アルゴリズムの特性に基づいてデータセグメントの数を決定するステップ、をさらに含む。
実施例23は、プロセッサとメモリとを有する、複数の命令を記憶したコンピューティング装置を含み、上記複数の命令は、上記プロセッサにより実行されると、上記コンピューティング装置に実施例10乃至22のうちいずれかの方法を実行させる。
実施例24は、複数の命令を記憶した1又は複数のマシン読取可能記憶媒体を含み、上記複数の命令は、実行されたことに応じて、実施例10乃至22のうちいずれかの方法を実行するコンピューティング装置をもたらす。
実施例25は、複数の命令を記憶した1又は複数のマシン読取可能記憶媒体を含み、上記複数の命令は、実行されたことに応じて、データバッファを複数のデータセグメントに分割するステップであり、各データセグメントは、ゼロより大きく上記データバッファの長さより小さいセグメント長を有する、ステップと、各データセグメントをシリアルデータ処理アルゴリズムに従ってパディングするステップと、各々のパディングされたデータセグメントをコンピューティング装置のデータレジスタの異なるデータパス実行ユニットに直接読み込むステップと、各データパス実行ユニットのための結果を作成するように、上記データパス実行ユニットの各々に対して暗号ハッシュアルゴリズムを実質的に並行して実行するステップと、をなす上記コンピューティング装置をもたらす。
実施例26は、実施例25の対象事項を含み、上記データパス実行ユニットにおいて作成された上記結果を結合するステップ、をさらに含む。
実施例27は、実施例25又は実施例26の対象事項を含み、上記の結合された結果に対して上記暗号ハッシュアルゴリズムを実行するステップ、をさらに含む。
実施例28は、実施例25乃至27のうちいずれかの対象事項を含み、上記暗号ハッシュアルゴリズムは、セキュアハッシュアルゴリズム又はMD5アルゴリズムを含む。
実施例29は、実施例25乃至28のうちいずれかの対象事項を含み、上記データレジスタの幅と上記暗号ハッシュアルゴリズムにより指定されるワードサイズとに基づいて上記セグメント長を定義するステップ、をさらに含む。
実施例30は、実施例25乃至29のうちいずれかの対象事項を含み、上記データバッファを複数のデータセグメントとして定義するステップは、上記データバッファをインタリーブされる方法で上記複数のデータセグメントに分割するステップを含む。
実施例31は、実施例25乃至30のうちいずれかの対象事項を含み、上記データバッファは複数のデータワードを含み、各データワードは複数のデータビットを含み、上記データバッファをインタリーブされる方法で上記複数のデータセグメントに分割するステップは、各データセグメントがデータワードの配列を含むように、上記データバッファ内の各データワードを異なるデータセグメントに割り当てるステップを含む。
実施例32は、実施例25乃至31のうちいずれかの対象事項を含み、各結果は複数のデータワードを含み、方法は、上記結果を上記データワードずつインタリーブするステップを含む。
実施例33は、実施例25乃至32のうちいずれかの対象事項を含み、上記コンピューティング装置のマイクロプロセッサの特性と上記暗号ハッシュアルゴリズムの特性とのうち1又は複数に基づいてデータセグメントの数を決定するステップ、をさらに含む。
関連出願の相互参照
本出願は、35U.S.C.§119(e)のもと、2012年7月11日に申請された米国特許仮出願第61/670,472号及び2012年9月28日に申請された米国特許出願第13/631,763号に対して優先権を主張する。

Claims (25)

  1. データバッファを処理するコンピューティング装置であって、
    データバッファ処理モジュールであり、
    バッファ長と複数のデータセグメントとを有するデータバッファにアクセスすることであって、各データセグメントは、ゼロより大きく前記バッファ長より小さいセグメント長を有し、1つ以上のワードを含み、
    前記データセグメントのうち1つ以上をシリアルデータ処理アルゴリズムに従ってパディングし、
    記データセグメントの各々を1つ以上のデータレジスタに読み込むことであって、前記1つ以上のデータレジスタの各データレジスタは複数のデータパスを有し、前記データセグメントの各々を前記1つ以上のデータレジスタに読み込むことは、前記1つ以上のデータレジスタのいずれかに、各データセグメントからの1ワードを同じデータレジスタの異なるデータパスに順次読み込むことを含み、
    各データパスのための結果を作成するように、前記データセグメントの各々に対して前記シリアルデータ処理アルゴリズムを並行して行う、
    ように構成された、データバッファ処理モジュール、
    を含、コンピューティング装置。
  2. 前記データバッファは、任意長を有する、請求項1のコンピューティング装置。
  3. 前記データバッファ処理モジュールは、前記のパディングされたデータセグメントの各々を前記データレジスタの異なるデータパスに直接読み込むようにさらに構成される、請求項1又は請求項2のコンピューティング装置。
  4. 前記データバッファ処理モジュールは、前記データセグメントの各々を前記シリアルデータ処理アルゴリズムに従ってパディングするようにさらに構成される、請求項1乃至3のうちいずれか1項のコンピューティング装置。
  5. 前記データバッファ処理モジュールは、暗号ハッシュアルゴリズムに対するサブモジュール、又は前記暗号ハッシュアルゴリズムによりコール可能な関数、プロシージャ若しくはライブラリオブジェクトである、請求項1乃至4のうちいずれか1項のコンピューティング装置。
  6. 前記データバッファ処理モジュールは、当該コンピューティング装置のマイクロプロセッサのシングルコア上での実行のために構成される、請求項1乃至5のうちいずれか1項のコンピューティング装置。
  7. 前記データバッファ処理モジュールは、前記シングルコアのシングルスレッド上での実行のために構成される、請求項6のコンピューティング装置。
  8. 前記データバッファ処理モジュールは、当該コンピューティング装置の単一命令多重データ対応プロセッサ上での実行のために構成される、請求項1乃至7のうちいずれか1項のコンピューティング装置。
  9. 前記データバッファ処理モジュールは、シングルスレッドソフトウェアアプリケーションとの使用のために構成される、請求項1乃至8のうちいずれか1項のコンピューティング装置。
  10. データバッファを処理する方法であって、
    前記データバッファを複数のデータセグメントとして定義するステップであり、各データセグメントは、ゼロより大きく前記データバッファの長さより小さいセグメント長を有1つ以上のワードを含む、ステップと、
    前記データセグメントのうち1つ以上をシリアルデータ処理アルゴリズムに従ってパディングするステップと、
    記データセグメントの各々1つ以上のデータレジスタに流すステップであり、前記1つ以上のデータレジスタの各データレジスタは複数のデータパスを有し、前記データセグメントの各々を前記1つ以上のデータレジスタに流すステップは、前記1つ以上のデータレジスタのいずれかに、各データセグメントからの1ワードを同じデータレジスタの異なるデータパスに順次流すステップを含む、ステップと、
    各データパスのための結果を作成するように、前記データセグメントの各々に対して前記シリアルデータ処理アルゴリズムを並行して実行するステップと、
    含む方法
  11. 記データレジスタの幅と前記シリアルデータ処理アルゴリズムにより指定されるワードサイズとに基づいて前記セグメント長を定義するステップをさらに含む請求項10の方法
  12. 前記データバッファを複数のデータセグメントとして定義するステップは、前記データバッファをインタリーブされる方法で前記複数のデータセグメントに分割するステップを含む、請求項10又は請求項11の方法
  13. 前記データバッファは複数のデータワードを含み、前記データバッファをインタリーブされる方法で前記複数のデータセグメントに分割するステップは、各データセグメントがデータワードの配列を含むように、前記データバッファ内の各データワードを異なるデータセグメントに割り当てるステップを含む、請求項12の方法
  14. シリアルデータ処理アルゴリズムを実行するステップは、暗号ハッシュ関数を実行するステップを含む、請求項10乃至13のうちいずれか1項の方法
  15. 前記データセグメントの各々のためのハッシュダイジェストを生成するステップであり、1つのデータセグメントについて1つのハッシュダイジェストが生成される、ステップをさらに含む請求項14の方法
  16. 記ハッシュダイジェストを結合して新しいデータバッファを形成し、前記新しいデータバッファに対して前記暗号ハッシュ関数を実行するステップ、をさらに含む請求項15の方法
  17. 前記ハッシュダイジェストを結合するステップは、前記結果を連結し、前記の連結された結果に対して前記シリアルデータ処理アルゴリズムを実行するステップを含む、請求項16の方法
  18. 記シリアルデータ処理アルゴリズムに関連するブロックサイズを決定し、前記データセグメントの各々の長さが前記ブロックサイズの倍数になるように前記データセグメントの各々をパディングするステップ、をさらに含む請求項10乃至17のうちいずれか1項の方法
  19. 定されたパターンのデータビットを前記データセグメントの各々に付加するステップをさらに含む請求項18の方法
  20. ンピューティング装置のマイクロプロセッサの特性に基づいてデータセグメントの数を決定するステップをさらに含む請求項10乃至19のうちいずれか1項の方法
  21. 記シリアルデータ処理アルゴリズムの特性に基づいてデータセグメントの数を決定するステップをさらに含む請求項10乃至20のうちいずれか1項の方法
  22. 各結果は複数のデータワードを含み、前記結果を前記データワードずつインタリーブするステップ、をさらに含む請求項10乃至13のうちいずれか1項の方法。
  23. 前記シリアルデータ処理アルゴリズムは、セキュアハッシュアルゴリズム又はMD5を含む、請求項10乃至22のうちいずれか1項の方法。
  24. 請求項10乃至23のうちいずれか1項に記載の方法をコンピュータに実行させるコンピュータプログラム。
  25. 請求項24に記載のコンピュータプログラムを記憶したマシン読取可能記憶媒体。
JP2015515295A 2012-07-11 2013-07-10 シングルデータバッファの並行処理 Expired - Fee Related JP6141421B2 (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,763 US10203934B2 (en) 2012-07-11 2012-09-28 Parallell processing of a single data buffer
US13/631,763 2012-09-28
PCT/US2013/049887 WO2014011743A1 (en) 2012-07-11 2013-07-10 Parallel processing of a single data buffer

Publications (2)

Publication Number Publication Date
JP2015529865A JP2015529865A (ja) 2015-10-08
JP6141421B2 true JP6141421B2 (ja) 2017-06-07

Family

ID=49915004

Family Applications (2)

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

Family Applications After (1)

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

Country Status (6)

Country Link
US (2) US10198248B2 (ja)
EP (2) EP2872987B1 (ja)
JP (2) JP6141421B2 (ja)
KR (3) KR20150008483A (ja)
CN (2) CN104364756B (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
US9430285B2 (en) * 2012-10-31 2016-08-30 Nec Corporation Dividing and parallel processing record sets using a plurality of sub-tasks executing across different computers
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
EP3108358B1 (en) * 2014-02-20 2021-06-23 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 华为技术有限公司 数据处理设备和光传送网络交换机
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
EP3384406A4 (en) 2015-12-04 2018-11-14 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
US6973187B2 (en) 2000-01-31 2005-12-06 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
CN104364757B (zh) 2020-08-11
JP2015523596A (ja) 2015-08-13
WO2014011746A1 (en) 2014-01-16
WO2014011743A1 (en) 2014-01-16
US20140019693A1 (en) 2014-01-16
EP2872987A4 (en) 2016-02-24
CN104364756B (zh) 2019-05-14
EP2872987B1 (en) 2019-10-16
JP5981030B2 (ja) 2016-08-31
EP2872990A1 (en) 2015-05-20
JP2015529865A (ja) 2015-10-08
CN104364757A (zh) 2015-02-18
US10198248B2 (en) 2019-02-05
EP2872990A4 (en) 2016-03-02
CN104364756A (zh) 2015-02-18
US10203934B2 (en) 2019-02-12
KR20150008185A (ko) 2015-01-21
EP2872990B1 (en) 2019-10-09
KR101753548B1 (ko) 2017-07-03
EP2872987A1 (en) 2015-05-20
KR20150008483A (ko) 2015-01-22
US20140019694A1 (en) 2014-01-16
KR20160105988A (ko) 2016-09-08
KR101755541B1 (ko) 2017-07-07

Similar Documents

Publication Publication Date Title
JP6141421B2 (ja) シングルデータバッファの並行処理
US20210382719A1 (en) Apparatuses, methods, and systems for access synchronization in a shared memory
JP5764257B2 (ja) レジスタをアライメントするためのシステム、装置、および方法
TWI476684B (zh) 於電腦處理器中執行聚集跨步指令及分散跨步指令之方法及設備
KR20170097008A (ko) 벡터 요소 세트에 대해 축소 연산을 수행하기 위한 방법 및 장치
CN106030514B (zh) 用于执行采用传播的被屏蔽源元素存储指令的处理器及其方法
JP2017529597A (ja) ビット群インターリーブプロセッサ、方法、システムおよび命令
JP6807073B2 (ja) 高速ベクトルによる動的なメモリ競合検出
CN112148666A (zh) 用于知识产权块的标准化接口
US20200266995A1 (en) Managing state in accelerators
JP2017539010A (ja) ベクトル飽和ダブルワード/クワッドワードの加算を実行するための命令およびロジック
CN115859315A (zh) 用于对安全存储装置的直接外围访问的系统、装置和方法
Fan et al. Multi-core and SIMD architecture based implementation on SHA-256 of Blockchain
KR20170094147A (ko) 스핀-루프 점프를 수행하기 위한 장치 및 방법

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151209

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160126

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160421

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160927

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161222

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: 20170404

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170502

R150 Certificate of patent or registration of utility model

Ref document number: 6141421

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees