(57)【要約】【課題】コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法を提供する。【解決手段】メッセージのメッセージ・ダイジェストを生成するために使用される命令が実行される。実行において、メッセージに対して埋め込みが実行されたかどうかを判定するために、この命令の埋め込み状態制御がチェックされる。このチェックが、埋め込みが実行されたことを示している場合、第１の動作が実行され、このチェックが、埋め込みが実行されていないことを示している場合、第１の動作とは異なる第２の動作が実行される。【選択図】図１４
2019533359.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品であって、
処理回路によって読み取り可能な、方法を実行するために前記処理回路によって実行されるための命令を格納しているコンピュータ可読記憶媒体を備えており、前記方法が、
実行される命令を取得することであって、前記命令がメッセージのメッセージ・ダイジェストを生成するために使用される、前記取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
前記命令の埋め込み状態制御をチェックして、前記メッセージに対して埋め込みが実行されたかどうかを判定することと、
前記チェックが埋め込みが実行されたことを示していることに基づいて、第１の動作を実行することと、
前記チェックが埋め込みが実行されていないことを示していることに基づいて、前記第１の動作とは異なる第２の動作を実行することと
を含んでいる、コンピュータ・プログラム製品。
【請求項２】
前記第１の動作が、拡張出力機能の処理を実行して、前記メッセージ・ダイジェストに関連する処理をさらに実行することを含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項３】
前記拡張出力機能の処理を実行することが、前記メッセージ・ダイジェストの少なくとも一部を再ハッシュして、追加の出力を生成することを含んでいる、請求項２に記載のコンピュータ・プログラム製品。
【請求項４】
前記第２の動作が、前記メッセージの少なくとも一部の埋め込みを実行して、選択されたサイズのメッセージ・ブロックを形成することを含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項５】
前記埋め込みを実行することが、埋め込みビットを前記メッセージの前記少なくとも一部の選択された位置に追加することを含んでいる、請求項４に記載のコンピュータ・プログラム製品。
【請求項６】
前記第２の動作が、前記メッセージに対して埋め込みが実行されたことを示すように前記埋め込み状態制御を設定することをさらに含んでいる、請求項４に記載のコンピュータ・プログラム製品。
【請求項７】
前記埋め込み状態制御が、前記命令によって使用されるレジスタ内に配置される、請求項１に記載のコンピュータ・プログラム製品。
【請求項８】
前記埋め込み状態制御が、前記命令がアクセスできるメモリ内に配置される、請求項１に記載のコンピュータ・プログラム製品。
【請求項９】
前記命令が、前記メッセージの１つまたは複数の最後のブロックを処理して、前記メッセージの認証において使用される前記メッセージ・ダイジェストを生成するために使用される、最後のメッセージ・ダイジェストの計算命令を含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項１０】
前記メッセージがメモリ内に格納され、前記命令が、前記メッセージの位置を特定するためのメモリ内のアドレスを提供する、請求項１に記載のコンピュータ・プログラム製品。
【請求項１１】
前記実行することが、
前記埋め込み状態制御が埋め込みが実行されたことを示していることに基づいて、および前記命令が実行を開始していることに基づいて、前記メッセージの長さがゼロ以外であるかどうかを判定することと、
前記長さがゼロ以外であることを示しているとの前記判定に基づいて例外を示すことであって、前記埋め込み状態制御が、埋め込みが実行されて前記命令が実行を開始していることを示している、前記例外を示すことと
をさらに含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項１２】
コンピューティング環境内の処理を容易にするためのコンピュータ・システムであって、
メモリと、
前記メモリと通信するプロセッサとを備えており、前記コンピュータ・システムが方法を実行するように構成されており、前記方法が、
実行される命令を取得することであって、前記命令がメッセージのメッセージ・ダイジェストを生成するために使用される、前記取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
前記命令の埋め込み状態制御をチェックして、前記メッセージに対して埋め込みが実行されたかどうかを判定することと、
前記チェックが埋め込みが実行されたことを示していることに基づいて、第１の動作を実行することと、
前記チェックが埋め込みが実行されていないことを示していることに基づいて、前記第１の動作とは異なる第２の動作を実行することと
を含んでいる、コンピュータ・システム。
【請求項１３】
前記第１の動作が、拡張出力機能の処理を実行して、前記メッセージ・ダイジェストに関連する処理をさらに実行することを含んでいる、請求項１２に記載のコンピュータ・システム。
【請求項１４】
前記第２の動作が、前記メッセージの少なくとも一部の埋め込みを実行して、選択されたサイズのメッセージ・ブロックを形成することを含んでいる、請求項１２に記載のコンピュータ・システム。
【請求項１５】
前記実行することが、
前記埋め込み状態制御が埋め込みが実行されたことを示していることに基づいて、および前記命令が実行を開始していることに基づいて、前記メッセージの長さがゼロ以外であるかどうかを判定することと、
前記長さがゼロ以外であることを示しているとの前記判定に基づいて例外を示すことであって、前記埋め込み状態制御が、埋め込みが実行されて前記命令が実行を開始していることを示している、前記例外を示すことと
をさらに含んでいる、請求項１２に記載のコンピュータ・システム。
【請求項１６】
コンピューティング環境内の処理を容易にするためのコンピュータ実装方法であって、
少なくとも１つのプロセッサによって、実行される命令を取得することであって、前記命令がメッセージのメッセージ・ダイジェストを生成するために使用される、前記取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
前記命令の埋め込み状態制御をチェックして、前記メッセージに対して埋め込みが実行されたかどうかを判定することと、
前記チェックが埋め込みが実行されたことを示していることに基づいて、第１の動作を実行することと、
前記チェックが埋め込みが実行されていないことを示していることに基づいて、前記第１の動作とは異なる第２の動作を実行することと
を含んでいる、コンピュータ実装方法。
【請求項１７】
前記第１の動作が、拡張出力機能の処理を実行して、前記メッセージ・ダイジェストに関連する処理をさらに実行することを含んでいる、請求項１６に記載のコンピュータ実装方法。
【請求項１８】
前記第２の動作が、前記メッセージの少なくとも一部の埋め込みを実行して、選択されたサイズのメッセージ・ブロックを形成することを含んでいる、請求項１６に記載のコンピュータ実装方法。
【請求項１９】
前記命令が、前記メッセージの１つまたは複数の最後のブロックを処理して、前記メッセージの認証において使用される前記メッセージ・ダイジェストを生成するために使用される、最後のメッセージ・ダイジェストの計算命令を含んでいる、請求項１６に記載のコンピュータ実装方法。
【請求項２０】
前記実行することが、
前記埋め込み状態制御が埋め込みが実行されたことを示していることに基づいて、および前記命令が実行を開始していることに基づいて、前記メッセージの長さがゼロ以外であるかどうかを判定することと、
前記長さがゼロ以外であることを示しているとの前記判定に基づいて例外を示すことであって、前記埋め込み状態制御が、埋め込みが実行されて前記命令が実行を開始していることを示している、前記例外を示すことと
をさらに含んでいる、請求項１６に記載のコンピュータ実装方法。
【発明の詳細な説明】
【技術分野】
【０００１】
１つまたは複数の態様は、一般に、コンピューティング環境内の処理に関し、特に、セキュリティで保護されたメッセージ送信に関連付けられた処理に関する。
【背景技術】
【０００２】
電子情報処理の文脈におけるセキュリティで保護されたメッセージ送信は、メッセージの暗号化および暗号解読ならびに認証を含む。メッセージは、送信前に送信側によって暗号化され、暗号化されたメッセージの調査によって真の内容が第三者に公開されないことを保証する。一方、メッセージは、受信側によって暗号解読され、元の内容を公開する。さらに、メッセージ認証は、送信側によって提供されたメッセージの内容が誤って、または悪意を持って送信中に変更されていないことを保証する。したがって、受信されたメッセージは、実際に、送信されたメッセージと同じである。
【０００３】
認証は、多くの場合、メッセージのビットを調べ、ハッシュ・アルゴリズムを使用して、調べられたビットからメッセージ・ダイジェスト（認証タグ、または単にハッシュと呼ばれることがある）を生成することによって実行される。ハッシュ・アルゴリズムのセキュリティ強度（すなわち、衝突攻撃、原像攻撃、第二原像攻撃に対するアルゴリズムの耐性）は、生成されるメッセージ・ダイジェストのサイズによって示される。
【０００４】
米国のＮＩＳＴ（National Institute of Standardsand Technology）は、ＳＨＡ−１（１６０ビットのダイジェスト長）、ＳＨＡ−２（２２４ビット、２５６ビット、３８４ビット、および５１２ビット、ならびにこれらの組み合わせのダイジェスト長）という、セキュア・ハッシュ・アルゴリズムの２つのファミリーに関する標準を採用した。
【０００５】
ＳＨＡ−１アルゴリズムおよびＳＨＡ−２アルゴリズムは、決定論的なゼロ以外のハッシュ・タグ（初期チェイニング値（ＩＣＶ：initial chaining value）と呼ばれる）から始まり、このハッシュ・タグは、メッセージの連続する各ブロックによって反復的に並べ替えられる（メッセージ・ブロックのサイズは、６４バイトまたは１２８バイトのいずれかである）。各並べ替えは、その後の並べ替えのＩＣＶとして使用される出力チェイニング値（ＯＣＶ：output chaining value）を生成する。メッセージのすべての完全なブロックが処理されたときに、最後の短いブロック（または、短いブロックが残っていない場合は、空のブロック）に対して、メッセージの最大長まで埋め込みが実行され、この最後のブロックが使用されて、ＩＣＶを最後に１回並べ替え、結果としてメッセージ・ダイジェスト（すなわち、タグ）を生成する。埋め込みは、メッセージに対して１回実行される。
【０００６】
埋め込みは１回実行されるため、そのような埋め込みに関連付けられた処理が容易になる。
【先行技術文献】
【非特許文献】
【０００７】
【非特許文献１】“z/Architecture Principles of Operation,” IBM Publication No. SA22-7832-10, March2015
【非特許文献２】“Power ISA (TM) Version 2.07B,” International Business Machines Corporation, April 9, 2015
【非特許文献３】FIPS PUB 202: Federal Information Processing Standards Publication, SHA-3 Standard:Permutation-Based Hash and Extendable-Output Functions
【発明の概要】
【発明が解決しようとする課題】
【０００８】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法を提供する。
【課題を解決するための手段】
【０００９】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品の提供によって、従来技術の欠点が克服され、追加の利点がもたらされる。このコンピュータ・プログラム製品は、処理回路によって読み取り可能な、方法を実行するために処理回路によって実行される命令を格納しているストレージ媒体を備える。この方法は、例えば、実行される命令を取得することを含む。命令が使用されて、メッセージのメッセージ・ダイジェストを生成する。この実行することは、命令の埋め込み状態制御（padding state control）をチェックして、メッセージに対して埋め込みが実行されたかどうかを判定することを含む。チェックが埋め込みが実行されたことを示していることに基づいて、第１の動作が実行される。チェックが埋め込みが実行されていないことを示していることに基づいて、第１の動作とは異なる第２の動作が実行される。
【００１０】
それによって、認証に関連付けられた処理が容易になり、コンピューティング環境内の処理を改善する。
【００１１】
一実施形態では、第１の動作は、拡張出力機能（extended output function）の処理を実行して、メッセージ・ダイジェストに関連する処理をさらに実行することを含む。拡張出力機能の処理を実行することは、例えば、メッセージ・ダイジェストの少なくとも一部を再ハッシュして、追加の出力を生成することを含む。
【００１２】
さらに、一実施形態では、第２の動作は、メッセージの少なくとも一部の埋め込みを実行して、選択されたサイズのメッセージ・ブロックを形成することを含む。埋め込みを実行することは、例えば、埋め込みビットを、メッセージの少なくとも一部の選択された位置に追加することを含む。第２の動作は、一実施形態では、メッセージに対して埋め込みが実行されたことを示すように、埋め込み状態制御を設定することをさらに含む。埋め込み状態制御は、例えば、命令によって使用されるレジスタ内に配置される。さらに別の例では、埋め込み状態制御は、命令がアクセスできるメモリ内に配置される。
【００１３】
さらに、一実施形態では、この実行することは、埋め込み状態制御が埋め込みが実行されたことを示していることに基づいて、および命令が実行を開始していることに基づいて、メッセージの長さがゼロ以外であるかどうかを判定し、ゼロ以外である場合に、例外を示すことをさらに含む。
【００１４】
１つの例として、この命令は、メッセージの１つまたは複数の最後のブロックを処理して、メッセージの認証において使用されるメッセージ・ダイジェストを生成するために使用される、最後のメッセージ・ダイジェストの計算命令である。
【００１５】
メッセージは、メモリ内に格納されてよく、命令が、メッセージの位置を特定するためのメモリ内のアドレスを提供する。
【００１６】
１つまたは複数の態様に関連する方法およびシステムも本明細書に記載され、請求される。さらに、１つまたは複数の態様に関連するサービスも本明細書に記載されており、請求されてよい。
【００１７】
その他の特徴および長所が、本明細書に記載された技術によって実現される。その他の実施形態および態様は、本明細書において詳細に説明され、請求される態様の一部と見なされる。
【００１８】
１つまたは複数の態様は、本明細書の最後にある特許請求の範囲において例として具体的に指摘され、明確に請求される。前述の内容、ならびに１つまたは複数の態様の目的、特徴、および長所は、添付の図面と併せて行われる以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【００１９】
【図１】本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一例を示す図である。
【図２】図１のプロセッサの詳細をさらに示す図である。
【図３】本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の例を示す図である。
【図４】図３のメモリの詳細をさらに示す図である。
【図５】本発明の態様による、最後のメッセージ・ダイジェストの計算命令の書式の一実施形態を示す図である。
【図６】本発明の態様による、図５の最後のメッセージ・ダイジェストの計算命令の１つまたは複数の態様によって使用される汎用レジスタ（汎用レジスタ０（ＧＲ０））の内容の一例を示す図である。
【図７】本発明の態様による、図５の最後のメッセージ・ダイジェストの計算命令よって使用される別の汎用レジスタ（汎用レジスタ１（ＧＲ１））の内容の一例を示す図である。
【図８】本発明の態様による、図５の最後のメッセージ・ダイジェストの計算命令によって１つまたは複数の態様において使用されるレジスタＲ１の内容の一例を示す図である。
【図９】本発明の態様による、図５の最後のメッセージ・ダイジェストの計算命令によって１つまたは複数の態様において使用されるレジスタＲ１＋１の内容の一例を示す図である。
【図１０】本発明の態様による、図５の最後のメッセージ・ダイジェストの計算命令によって１つまたは複数の態様において使用されるレジスタＲ２の内容の一例を示す図である。
【図１１】本発明の態様による、図５の最後のメッセージ・ダイジェストの計算命令によって１つまたは複数の態様において使用されるレジスタＲ２＋１の内容の一例を示す図である。
【図１２】本発明の態様による、図５の最後のメッセージ・ダイジェストの計算命令によって１つまたは複数の態様において使用されるパラメータ・ブロックの一例を示す図である。
【図１３】本発明の態様による、最後のメッセージ・ダイジェストの計算命令によって使用される埋め込み動作の一例を示す図である。
【図１４】本発明の態様による、図５の最後のメッセージ・ダイジェストの計算命令の拡張出力機能の処理の一例を示す図である。
【図１５】本発明の態様による、図５の最後のメッセージ・ダイジェストの計算命令による埋め込みの別の例を示す図である。
【図１６】本発明の態様による、図５の最後のメッセージ・ダイジェストの計算命令の拡張出力機能の処理の別の実施形態を示す図である。
【図１７】本発明の態様による、埋め込み状態制御を使用する一例を示す図である。
【図１８】本発明の態様による、埋め込み動作を使用する命令を実行することを含んでいる、コンピューティング環境内の処理を容易にする一例を示す図である。
【図１９】本発明の態様による、埋め込み動作を使用する命令を実行することを含んでいる、コンピューティング環境内の処理を容易にする一例を示す図である。
【発明を実施するための形態】
【００２０】
１つまたは複数の態様によれば、処理を続行する方法を決定するために、メッセージ・ダイジェスト生成する割込み可能な命令などの命令に対して、埋め込み動作が実行されたかどうかを判定するための機能が提供される。１つの例では、そのような埋め込み動作は、下で説明されているように、メッセージ・ダイジェストを生成するために使用される最後のメッセージ・ダイジェストの計算命令によって実行される。本明細書では、メッセージ・ダイジェストを生成する命令を参照して例が説明されるが、この方法は、その他の命令またはその他の処理あるいはその両方と共に使用されてよい。
【００２１】
本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一実施形態が、図１を参照して説明される。１つの例では、コンピューティング環境は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づく。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの一実施形態は、“z/Architecture Principles of Operation,” IBM Publication No. SA22-7832-10, March 2015に記載されており、この文献は本明細書において参照によってその全体が本明細書に組み込まれている。Ｚ／ＡＲＣＨＩＴＥＣＴＵＲＥは、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（米国ニューヨーク州アーモンク）の登録商標である。
【００２２】
別の例では、コンピューティング環境は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるＰｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅに基づく。Ｐｏｗｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅの一実施形態は、“Power ISA (TM) Version 2.07B,” International Business Machines Corporation, April 9, 2015に記載されており、この文献は本明細書において参照によってその全体が本明細書に組み込まれている。ＰＯＷＥＲ  ＡＲＣＨＩＴＥＣＴＵＲＥは、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（米国ニューヨーク州アーモンク）の登録商標である。
【００２３】
コンピューティング環境は、インテルｘ８６アーキテクチャを含むが、これに限定されない、他のアーキテクチャに基づいてもよい。その他の例も存在する。
【００２４】
図１に示されているように、コンピューティング環境１００は、例えば、１つまたは複数のプロセッサまたはプロセッシング・ユニット１６、システム・メモリ２８、およびシステム・メモリ２８を含むさまざまなシステム・コンポーネントをプロセッサ１６に結合するバス１８を含んでよいが、これらに限定されない、コンピュータ・システム／サーバ１２を含んでいる。
【００２５】
バス１８は、メモリ・バスまたはメモリ・コントローラ、ペリフェラル・バス、アクセラレーテッド・グラフィックス・ポート、および任意のさまざまなバス・アーキテクチャを使用するプロセッサまたはローカル・バスを含む、１つまたは複数の任意の種類のバス構造を表す。例として、そのようなアーキテクチャは、ＩＳＡ（Industry Standard Architecture）バス、ＭＣＡ（Micro Channel Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、ＶＥＳＡ（Video Electronics Standards Association）ローカル・バス、およびＰＣＩ（Peripheral Component Interconnect）バスを含むが、これらに限定されない。
【００２６】
コンピュータ・システム／サーバ１２は、通常、さまざまなコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム／サーバ１２によってアクセスできる任意の使用可能な媒体であってよく、揮発性および不揮発性媒体、取り外し可能および取り外し不可の媒体を含む。
【００２７】
システム・メモリ２８は、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）３０またはキャッシュ・メモリ３２あるいはその両方などの、揮発性メモリの形態でのコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム／サーバ１２は、その他の取り外し可能／取り外し不可、揮発性／不揮発性のコンピュータ・システム・ストレージ媒体をさらに含んでよい。単に例として、取り外し不可、不揮発性の磁気媒体（図示されておらず、通常は「ハード・ドライブ」と呼ばれる）に対する読み取りと書き込みを行うために、ストレージ・システム３４を提供することができる。図示されていないが、取り外し可能、不揮発性の磁気ディスク（例えば、「フロッピー・ディスク」）に対する読み取りと書き込みを行うための磁気ディスク・ドライブ、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、またはその他の光媒体などの取り外し可能、不揮発性の光ディスクに対する読み取りと書き込みを行うための光ディスク・ドライブを提供することができる。そのような例では、それぞれを、１つまたは複数のデータ媒体インターフェイスによってバス１８に接続することができる。下でさらに示され、説明されるように、メモリ２８は、本発明の実施形態の機能を実行するように構成された一連の（例えば、少なくとも１つの）プログラム・モジュールを備える少なくとも１つのプログラム製品を含むことができる。
【００２８】
例えば、一連の（少なくとも１つの）プログラム・モジュール４２を含んでいるプログラム／ユーティリティ４０がメモリ２８に格納されてよいが、これに限定されず、オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データも格納されてよい。オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データまたはこれらの何らかの組み合わせは、それぞれネットワーク環境の実装を含んでよい。プログラム・モジュール４２は、通常、本明細書に記載された本発明の実施形態の機能または方法あるいはその両方を実行する。
【００２９】
また、コンピュータ・システム／サーバ１２は、キーボード、ポインティング・デバイス、ディスプレイ２４などの１つまたは複数の外部デバイス１４、ユーザがコンピュータ・システム／サーバ１２と情報をやりとりできるようにする１つまたは複数のデバイス、またはコンピュータ・システム／サーバ１２が１つまたは複数の他のコンピューティング・デバイスと通信できるようにする任意のデバイス（例えば、ネットワーク・カード、モデムなど）、あるいはその組み合わせと通信することもできる。そのような通信は、入出力（Ｉ／Ｏ：Input/Output）インターフェイス２２を介して行うことができる。さらに、コンピュータ・システム／サーバ１２は、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）、一般的な広域ネットワーク（ＷＡＮ：wide area network）、またはパブリック・ネットワーク（例えば、インターネット）、あるいはその組み合わせなどの１つまたは複数のネットワークと、ネットワーク・アダプタ２０を介して通信することができる。図示されているように、ネットワーク・アダプタ２０は、バス１８を介してコンピュータ・システム／サーバ１２の他のコンポーネントと通信する。図示されていないが、その他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方を、コンピュータ・システム／サーバ１２と併用できるということが理解されるべきである。その例として、マイクロコード、デバイス・ドライバ、冗長プロセッシング・ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、これらに限定されない。
【００３０】
１つの例では、プロセッサ１６は、命令を実行するために使用される複数の機能コンポーネントを含む。図２に示されているように、これらの機能コンポーネントは、例えば、実行される命令をフェッチするための命令フェッチ・コンポーネント１２０と、フェッチされた命令をデコードするため、およびデコードされた命令のオペランドを取得するための命令デコード・ユニット１２２と、デコードされた命令を実行するための命令実行コンポーネント１２４と、必要な場合に、命令を実行するためにメモリにアクセスするためのメモリ・アクセス・コンポーネント１２６と、実行された命令の結果を提供するための書き戻しコンポーネント１３０とを含む。これらのコンポーネントのうちの１つまたは複数は、本発明の態様によれば、本明細書に記載されているように、埋め込み動作の状態を決定する（１３６）ために使用されてよい。
【００３１】
プロセッサ１６は、一実施形態では、機能コンポーネントのうちの１つまたは複数によって使用される１つまたは複数のレジスタ１４０も含む。
【００３２】
１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の実施形態が、図３を参照して説明される。この例では、コンピューティング環境２００は、例えば、１つまたは複数のバス２０８またはその他の接続あるいはその両方などを介して互いに結合された、ネイティブ中央処理装置（ＣＰＵ：central processing unit）２０２、メモリ２０４、および１つまたは複数の入出力デバイスまたはインターフェイス２０６あるいはその両方を含む。例として、コンピューティング環境２００は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるＰｏｗｅｒＰＣプロセッサまたはｐＳｅｒｉｅｓサーバ、ヒューレット・パッカード社（カリフォルニア州パロアルト市）によって提供されるインテルＩｔａｎｉｕｍ  ＩＩプロセッサ内蔵ＨＰ  Ｓｕｐｅｒｄｏｍｅ、あるいはＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ、ヒューレット・パッカード社、インテル社、Ｏｒａｃｌｅ社、またはその他の企業によって提供されるアーキテクチャに基づくその他のマシン、あるいはその組み合わせを含んでよい。
【００３３】
ネイティブ中央処理装置２０２は、環境内で処理中に使用される１つまたは複数の汎用レジスタまたは１つまたは複数の専用レジスタあるいはその両方などの、１つまたは複数のネイティブ・レジスタ２１０を含む。これらのレジスタは、いずれかの特定の時点での環境の状態を表す情報を含む。
【００３４】
さらに、ネイティブ中央処理装置２０２は、メモリ２０４に格納された命令およびコードを実行する。１つの特定の例では、中央処理装置は、メモリ２０４に格納されたエミュレータ・コード２１２を実行する。このコードは、あるアーキテクチャで構成されたコンピューティング環境が、別のアーキテクチャをエミュレートできるようにする。例えば、エミュレータ・コード２１２は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ以外のアーキテクチャに基づくマシン（ＰｏｗｅｒＰＣプロセッサ、ｐＳｅｒｉｅｓサーバ、ＨＰ  Ｓｕｐｅｒｄｏｍｅサーバなど）が、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅをエミュレートし、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づいて開発されたソフトウェアおよび命令を実行できるようにする。
【００３５】
エミュレータ・コード２１２に関連する詳細が、図４を参照してさらに説明される。メモリ２０４に格納されたゲスト命令２５０は、ネイティブＣＰＵ２０２のアーキテクチャ以外のアーキテクチャにおいて実行されるように開発された（例えば、マシン命令と相互関係がある）ソフトウェア命令を含む。例えば、ゲスト命令２５０は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅプロセッサ１６上で実行するように設計されてよいが、代わりに、例えばインテルＩｔａｎｉｕｍ  ＩＩプロセッサであってよい、ネイティブＣＰＵ２０２上でエミュレートされる。１つの例では、エミュレータ・コード２１２は、メモリ２０４から１つまたは複数のゲスト命令２５０を取得するため、および取得された命令のローカル・バッファリングを必要に応じて提供するための命令フェッチ・ルーチン２５２を含む。エミュレータ・コード２１２は、取得されたゲスト命令の種類を決定するため、およびゲスト命令を、１つまたは複数の対応するネイティブ命令２５６に変換するための命令変換ルーチン２５４も含む。この変換は、例えば、ゲスト命令によって実行される機能を識別すること、およびこの機能を実行するためのネイティブ命令を選択することを含む。
【００３６】
さらに、エミュレータ２１２は、ネイティブ命令の実行を引き起こすためのエミュレーション制御ルーチン２６０を含む。エミュレーション制御ルーチン２６０は、ネイティブＣＰＵ２０２に、１つまたは複数のすでに取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行の終了時に、次のゲスト命令またはゲスト命令のグループの取得をエミュレートするために、制御を命令フェッチ・ルーチンに返してよい。ネイティブ命令２５６の実行は、データをメモリ２０４からレジスタに読み込むこと、データをレジスタからメモリに再び格納すること、あるいは変換ルーチンによって決定された何らかの種類の算術演算または論理演算を実行することを含んでよい。
【００３７】
例えば、各ルーチンは、メモリに格納されてネイティブ中央処理装置２０２によって実行されるソフトウェアにおいて実装される。他の例では、ルーチンまたは動作のうちの１つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはこれらの何らかの組み合わせにおいて実装される。エミュレートされたプロセッサのレジスタは、ネイティブＣＰＵのレジスタ２１０を使用して、またはメモリ２０４内の位置を使用することによって、エミュレートされてよい。実施形態では、ゲスト命令２５０、ネイティブ命令２５６、およびエミュレータ・コード２１２は、同じメモリ内に存在してよく、または異なるメモリ・デバイス間で分配されてよい。
【００３８】
本明細書において使用されるとき、ファームウェアは、例えば、プロセッサのマイクロコード、ミリコード、またはマクロコード、あるいはその組み合わせを含む。ファームウェアは、例えば、上位レベルの機械コードの実装において使用される、ハードウェア・レベルの命令またはデータ構造あるいはその両方を含む。一実施形態では、ファームウェアは、例えば、信頼できるソフトウェアを含んでいるマイクロコード、または基盤になるハードウェアに固有のマイクロコードとして通常は提供される、システムのハードウェアへのオペレーティング・システムのアクセスを制御する独自のコードを含む。
【００３９】
１つの例では、取得され、変換されて実行されるゲスト命令２５０は、本明細書に記載された最後のメッセージ・ダイジェストの計算命令である。あるアーキテクチャ（例えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ）の命令が、メモリからフェッチされ、変換され、別のアーキテクチャ（例えば、ＰｏｗｅｒＰＣ、ｐＳｅｒｉｅｓ、インテルなど）のネイティブ命令２５６のシーケンスとして表される。その後、これらのネイティブ命令が実行される。
【００４０】
最後のメッセージ・ダイジェストの計算（ＫＬＭＤ：Compute Last Message Digest）命令は、１つの例では、中間メッセージ・ダイジェストの計算（ＫＩＭＤ：Compute Intermediate Message Digest）命令と共に使用され、これらの命令は両方とも、例えばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅでは、認証に使用されるメッセージ・ダイジェストを生成するように定義される。ＫＩＭＤは、メッセージの全長を使用できない場合（例えば、メッセージは、ネットワーク・アダプタまたはディスク・ドライブから細かく分かれて到着することがある）に使用されるよう意図されており、ＫＬＭＤは、必要に応じて埋め込みを実行することを含めて、最後のメッセージ・ブロックを処理するために使用されるよう意図されている。
【００４１】
ＫＩＭＤおよびＫＬＭＤは両方とも、メモリ内のメッセージに対して動作し、このメッセージは、本明細書では命令の第２のオペランドと呼ばれる。メッセージの左端のバイトのメモリ・アドレスは、偶数と奇数の汎用レジスタ対の偶数番号が付けられたレジスタによって指定され、メッセージの長さは、この対の奇数番号が付けられたレジスタによって指定される。
【００４２】
ＫＩＭＤおよびＫＬＭＤは両方とも、ＣＰＵによって決定されたメッセージのバイト数が処理されたが、さらにメッセージのバイトが残っている場合に、条件コードを設定するように定義されており、この条件は、部分的完了と呼ばれ、条件コード（例えば、３）が設定されることを引き起こす。メッセージのすべてのバイトが正常に処理された場合、代替の条件コードが設定される（この条件は、完全な完了と呼ばれ、条件コード（例えば、０）が設定される）。部分的完了または完全な完了のいずれかの場合、（偶数番号が付けられたレジスタ内の）メッセージのアドレスが、処理されたバイト数だけ更新され、（奇数番号が付けられたレジスタ内の）メッセージの残りの長さが、同じ量だけデクリメントされる。部分的完了が発生した場合、プログラムは、単にＫＩＭＤ命令またはＫＬＭＤ命令に分岐して戻り、処理を続行することができる。完全な完了が発生した場合、第２のオペランドの奇数番号が付けられたレジスタ内に残っている長さは、０である。いずれかの個別のメッセージに関して、処理が命令の反復される実行を（部分的完了に起因して）必要とするかどうかに関わらず、この実施形態では、埋め込みがメッセージに対して１回実行される。したがって、この実施形態では、最後の短いブロックまたは空のブロックが処理されるときに、ＫＬＭＤ命令によって埋め込みが実行される。
【００４３】
ＫＩＭＤ命令およびＫＬＭＤ命令は、ＳＨＡ−１およびＳＨＡ−２の両方のハッシュ処理技術をサポートするように構成される。さらに、本発明の態様によれば、ＫＩＭＤ命令およびＫＬＭＤ命令は、ＳＨＡ−３と呼ばれる別のセキュア・ハッシュ処理技術をサポートするようにも構成される。２０１５年８月５日の時点で、ＮＩＳＴは、ＳＨＡ−３標準の公式に採用されたバージョンを公開した。ＳＨＡ−３標準は、２２４ビット、２５６ビット、３８４ビット、および５１２ビットのダイジェスト長（ＳＨＡ−２と同じ）を提供し、ＳＨＡ−２のセキュリティ強度以上のセキュリティ強度を提供するように設計されている。ＳＨＡ−３は、ＳＨＡ−２のアルゴリズムとは異なる、より優れた性能を提供できるＫｅｃｃａｋと呼ばれる並べ替えアルゴリズムを使用する。Ｋｅｃｃａｋは、FIPS PUB 202: Federal Information Processing Standards Publication, SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functionsにおいて説明されている。
【００４４】
Ｋｅｃｃａｋは、決定論的なゼロ以外の初期チェイニング値（ＩＣＶ）から開始するのではなく、メッセージのＩＣＶが０であることを仮定する。ＳＨＡ−３は、各メッセージ・ブロックのサイズが１２８ビット（１６バイト）であるＫｅｃｃａｋのバージョン（Ｋｅｃｃａｋ［ｃ］と呼ばれる）を使用する。Ｋｅｃｃａｋ機能は、メッセージの並べ替えがメッセージをスポンジに吸収することに似ており、結果の生成がスポンジを絞ることに似ているため、スポンジ機能と呼ばれる。
【００４５】
ＳＨＡ−３標準は、例えば１２８ビットまたは２５６ビットのダイジェスト長を使用して、２つの可変長出力機能（ＸＯＦ：extendable-output functions）も定義する。これらのＸＯＦ機能（ＳＨＡ  ＫＥｃｃａｋの場合、ＳＨＡＫＥ機能とも呼ばれる）は、ハッシュ値を入力メッセージから形成する非ＳＨＡＫＥ機能に類似している。しかし、固定長のメッセージ・ダイジェストのみを生成できるＳＨＡ−３機能とは異なり、ＳＨＡＫＥ機能は、その後の出力ブロックを生成するためにＫｅｃｃａｋを使用してダイジェスト・ブロックを再ハッシュするフィードバック・メカニズムを介して、不定の長さの拡張された出力を生成できる。これらのその後の出力ブロックは、疑似乱数発生器などの、追加の処理に使用されてよい。
【００４６】
さまざまなアルゴリズムの１つの特徴は、空の（すなわち、長さが０の）メッセージを処理できることである。したがって、本発明の態様によれば、例えばＫＬＭＤ  ＳＨＡＫＥ機能の個別の実行の場合、メッセージの長さが０であるときに、命令は、埋め込みが実行されたかどうかを判定できる。埋め込みは、例えば、個々のメッセージに対して１回だけ発生する。命令は、第２のオペランドが最初に０であるときに、次のこと以外は同一の２つの条件を区別する。（ａ）埋め込みがまだ実行されていない最初の実行と、（ｂ）埋め込みが実行されている、（例えば、条件コード３の後の）その後の実行。
【００４７】
ＳＨＡ−３標準をサポートするために、新しい機能コードおよび新しいハッシュ・アルゴリズムの説明が、例えばｚ／Ａｒｃｈｉｔｅｃｔｕｒｅにおいて定義されているＫＩＭＤ命令およびＫＬＭＤ命令に追加される。さらに、１つの例では、ＫＬＭＤ  ＳＨＡＫＥ機能の場合、命令の追加の出力オペランドが定義される（第１のオペランドと呼ばれる）。第２のオペランドと同様に、第１のオペランドは、拡張出力機能（ＸＯＦ：extended-output function）データのメモリ位置および長さを指定する。第２のオペランドと同様に、ＫＬＭＤ命令は、ＣＰＵによって決定された数のＸＯＦのバイトを生成し、生成されたＸＯＦのバイトの数に基づいて、第１のオペランドのレジスタを更新し、その後、条件コード（例えば、ＣＣ３）を設定することによって部分的完了を示してよい。プログラムは、その後、正常な完了（例えば、ＣＣ０）を示すまで、命令を再実行することができる。
【００４８】
ＫＩＭＤ機能およびＫＬＭＤ機能のいずれかの最初の第２のオペランドの長さは、空のメッセージに対して埋め込みが実行される、０であってよい。埋め込み動作は、実行されている機能に応じて異なる（ＳＨＡ−１およびＳＨＡ−２の場合、埋め込みはメッセージの長さであり、ＳＨＡ−３機能およびＳＨＡＫＥ機能の場合、埋め込みはビットの予測可能なシーケンスである）。ＸＯＦ処理は、１つの例では、１回発生する埋め込み動作を含めて、第２のオペランド全体が処理されるまで、開始されない。
【００４９】
したがって、第２のオペランドの長さが０であるときに、ＫＬＭＤ命令の実行を開始できる次の２つの方法がある。
【００５０】
１．空の第２のオペランドのメッセージが指定されたが、埋め込みがまだ実行されていない。これは、次の２つの方法で発生することがある。
ａ．命令を発行しているプログラムが、０の最初のメッセージの長さを意図的に指定した。
ｂ．プログラムがメッセージの複数のブロックを処理し、最後のブロックが、ブロック・サイズの正確な倍数を含んでおり、埋め込みが実行される前に、命令が、部分的に完了して終了した。
２．命令が、埋め込みをすでに実行しており、前の部分的完了（例えば、ＣＣ３）の後に、ＸＯＦ生成を続行している。
【００５１】
したがって、本発明の態様によれば、命令の実行の開始時に、これらの２つの条件を区別するための機能が提供される。埋め込み状態（ＰＳ：padding state）制御が、例えばＫＬＭＤ  ＳＨＡＫＥ処理への入力になるように定義される。一実施形態では、ＰＳは、例えば汎用レジスタ（この場合、命令の機能コードも含んでいる汎用レジスタ０）内の１ビットである。０の値は埋め込みが実行されていないことを示し、１の値は埋め込みが実行されていることを示す。プログラムが０の初期値を提供し、ＣＰＵが、メッセージに対して埋め込みを実行することに基づいて、このビットを１に設定する。
【００５２】
埋め込み状態制御を使用するように構成された最後のメッセージ・ダイジェストの計算（ＫＬＭＤ）命令の一実施形態が、図５〜１２を参照して説明される。図に示されているように、命令は複数のフィールドを含んでおり、フィールドには、下付きの数字が関連付けられていることがある。命令のフィールドに関連付けられた下付きの数字は、そのフィールドが適用されるオペランドを示す。例えば、汎用レジスタＲ１に関連付けられた下付きの数字１は、Ｒ１が第１のオペランドに関連付けられていることを示す。
【００５３】
１つの例では、図５を参照すると、最後のメッセージ・ダイジェストの計算（ＫＬＭＤ）命令３００は、最後のメッセージ・ダイジェストの計算動作を示すためのオペレーション・コード（オペコード）を含んでいるオペコード・フィールド３０２（例えば、ビット０〜１５）と、偶数と奇数のレジスタ対を指定するために使用される第１のレジスタ・フィールド３０４（例えば、ビット２４〜２７）であって、Ｒ１が、０を除く偶数番号が付けられたレジスタを指定することになっている、第１のレジスタ・フィールド３０４と、偶数と奇数のレジスタ対を指定するために使用される第２のレジスタ・フィールド３０６（例えば、ビット２８〜３１）であって、Ｒ２が、０を除く偶数番号が付けられたレジスタを指定することになっている、第２のレジスタ・フィールド３０６とを含んでいる。１つの例では、Ｒ１フィールドおよびＲ２フィールドによって指定された偶数と奇数のレジスタ対の内容は、第１および第２のオペランドのアドレスおよび長さをそれぞれ含む。各フィールド３０４〜３０６は、１つの例では、別々であり、オペコード・フィールドから独立している。さらに、一実施形態では、フィールド３０４〜３０８は、別々であり、互いに独立しているが、他の実施形態では、２つ以上のフィールドが結合されてよい。
【００５４】
命令内でエンコードされるＲ１およびＲ２に加えて、命令の１つの実装は、例えば汎用レジスタ０（ＧＲ０）および汎用レジスタ１（ＧＲ１）を含む、１つまたは複数のインプライド・レジスタを使用する。各レジスタが、図６〜１１を参照して以下でさらに説明される。
【００５５】
最初に図６を参照して、汎用レジスタ０（３２０）の書式の一実施形態が説明される。１つの例では、汎用レジスタ０は、埋め込み状態（ＰＳ：padding state）制御３２２（例えば、ビット５５）、および機能コード（ＦＣ：function code）フィールド３２６（例えば、ビット５７〜６３）を含む。１つの例では、汎用レジスタ０のビット５６は０に設定されることになっており、そうでない場合、１つの例では指定例外が認識される。この例では、汎用レジスタ０の他のすべてのビットは無視される。
【００５６】
汎用レジスタ０の各フィールドが、以下でさらに説明される。
【００５７】
埋め込み状態制御（ＰＳ）３２２：ＫＬＭＤ−ＳＨＡＫＥ機能の場合、汎用レジスタ０のビット５５は埋め込み状態であり、他の機能の場合、この例では、このレジスタのビット５５は無視される。
【００５８】
機能コード（ＦＣ）３２６：汎用レジスタ０のビット位置５７〜６３は、機能コードを含む。最後のメッセージ・ダイジェストの計算命令に割り当てられる機能コードの例としては、以下が挙げられる。
【００５９】
【表１】
2019533359.tif 000003
説明：
−−  適用されない
１  最後のブロックを除くすべてのデータ・ブロックの場合。最後のデータ・ブロックのサイズは、０から示された値未満までの範囲内である。
【００６０】
他のすべての機能コードは、この例では割り当てられていない。
【００６１】
図７に示されているように、汎用レジスタ１（３３０）は、ストレージ内のパラメータ・ブロックの左端のバイトの論理アドレス３３２を含み、これは以下でさらに説明される。２４ビット・アドレス指定モードでは、汎用レジスタ１のビット位置４０〜６３の内容はアドレスを構成し、ビット位置０〜３９の内容は無視される。３１ビット・アドレス指定モードでは、汎用レジスタ１のビット位置３３〜６３の内容はアドレスを構成し、ビット位置０〜３２の内容は無視される。６４ビット・アドレス指定モードでは、汎用レジスタ１のビット位置０〜６３の内容はアドレスを構成する。
【００６２】
図８を参照すると、第１のオペランドの左端のバイトの位置３４２が、Ｒ１汎用レジスタ３０４の内容によって指定されている。さらに、図９を参照すると、第１のオペランドの位置のバイト数（すなわち、長さ）３５２が、汎用レジスタＲ１＋１（３５０）内で指定されている。第１のオペランドは、この実施形態では、ＫＬＭＤ−ＳＨＡＫＥ機能のみに適用することができ、他の機能の場合は無視される。
【００６３】
図１０を参照すると、第２のオペランドの左端のバイトの位置３６２が、Ｒ２汎用レジスタ３０６の内容によって指定されている。さらに、図１１を参照すると、第２のオペランドの位置のバイト数（すなわち、長さ）３７２が、汎用レジスタＲ２＋１（３７０）内で指定されている。
【００６４】
ＫＬＭＤ命令の一実施形態の動作では、問い合わせ機能は、他の機能の利用可能性を示す手段を提供する。問い合わせ機能の場合、汎用レジスタＲ１、Ｒ１＋１、Ｒ２、およびＲ２＋１の内容は無視される。
【００６５】
他の機能の場合、第２のオペランド（例えば、Ｒ２内で指定されたアドレスを使用して指定された位置の値）が、パラメータ・ブロック内の初期チェイニング値を使用して、機能コードによって指定されたとおりに処理され（下で説明される）、その結果がチェイニング値を置き換える。ＳＨＡ−１機能、ＳＨＡ−２５６機能、およびＳＨＡ−５１２機能の場合、動作は、パラメータ・ブロック内のメッセージのビット長も使用する。動作は、第２のオペランドの位置の末尾に達するか、またはＣＰＵによって決定されたバイト数が処理されるかのいずれかが最初に発生するまで、継続する。
【００６６】
ＫＬＭＤ−ＳＨＡＫＥ機能の場合、第２のオペランドの末尾に達した場合、拡張出力機能（ＸＯＦ）のダイジェストが（例えば、Ｒ１内で指定された）第１のオペランドの位置に格納される。その後、動作は、第１のオペランドの位置の末尾に達するか、またはＣＰＵによって決定されたバイト数が格納されるかのいずれかが最初に発生するまで、継続する。
【００６７】
結果は、条件コードで示される。
【００６８】
動作の一部として、汎用レジスタＲ２内のアドレスが、第２のオペランドから処理されたバイト数だけインクリメントされ、汎用レジスタＲ２＋１の長さが同じ数だけデクリメントされる。アドレスおよび長さの形成および更新は、アドレス指定モードによって決まる。
【００６９】
例えば、２４ビット・アドレス指定モードでは、汎用レジスタＲ２のビット位置４０〜６３の内容が、第２のオペランドのアドレスを構成し、ビット位置０〜３９の内容が無視され、更新されたアドレスのビット４０〜６３が、汎用レジスタＲ２内の対応するビットを置き換え、更新されたアドレスのビット位置４０からの繰り上げが無視され、汎用レジスタＲ２のビット位置３２〜３９の内容が０に設定される。３１ビット・アドレス指定モードでは、汎用レジスタＲ２のビット位置３３〜６３の内容が、第２のオペランドのアドレスを構成し、ビット位置０〜３２の内容が無視され、更新されたアドレスのビット３３〜６３が、汎用レジスタＲ２内の対応するビットを置き換え、更新されたアドレスのビット位置３３からの繰り上げが無視され、汎用レジスタＲ２のビット位置３２の内容が０に設定される。６４ビット・アドレス指定モードでは、汎用レジスタＲ２のビット位置０〜６３の内容が、第２のオペランドのアドレスを構成し、更新されたアドレスのビット０〜６３が、汎用レジスタＲ２の内容を置き換え、ビット位置０からの繰り上げが無視される。
【００７０】
２４ビット・アドレス指定モードおよび３１ビット・アドレス指定モードの両方では、汎用レジスタＲ２＋１のビット位置３２〜６３の内容が、第２のオペランド内のバイト数を指定する３２ビット符号なし２進整数を形成し、更新された値が、汎用レジスタＲ２＋１のビット位置３２〜６３の内容を置き換える。６４ビット・アドレス指定モードでは、汎用レジスタＲ２＋１のビット位置０〜６３の内容が、第２のオペランド内のバイト数を指定する６４ビット符号なし２進整数を形成し、更新された値が、汎用レジスタＲ２＋１の内容を置き換える。
【００７１】
２４ビット・アドレス指定モードまたは３１ビット・アドレス指定モードでは、汎用レジスタＲ２およびＲ２＋１のビット位置０〜３１の内容は変更されない。
【００７２】
２つのＫＬＭＤ−ＳＨＡＫＥ機能（例えば、機能コード３６、３７）の場合、以下が適用される。
・汎用レジスタ０のビット５５は、埋め込み状態（ＰＳ）制御である。例えば０の値は、第２のオペランドの埋め込みがまだ実行されていないことを示す。例えば１の値は、第２のオペランドの埋め込みが実行されたことを示す。
命令の開始時に、埋め込み状態が１であり、汎用レジスタＲ２＋１内の第２のオペランドの長さがゼロ以外である場合、指定例外が認識され、動作が抑制される。
残りの第２のオペランドの長さが０である場合、ＣＰＵが埋め込み状態を調査して、第２のオペランドの埋め込みが実行されることになっているかどうかを判定する。第２のオペランドの埋め込みが実行されている場合、埋め込み状態がＣＰＵによって１に設定される。
・Ｒ１フィールドは、汎用レジスタの偶数と奇数の対を指定し、汎用レジスタ０以外およびレジスタＲ２以外の偶数番号が付けられたレジスタを指定することになっており、そうでない場合、１つの例では、指定例外が認識される。
・第１のオペランドの左端のバイトの位置は、汎用レジスタＲ１の内容によって指定される。第１のオペランドの位置のバイト数は、汎用レジスタＲ１＋１内で指定される。
・動作の一部として、汎用レジスタＲ１内のアドレスが、第１のオペランドに格納されたバイト数だけインクリメントされ、汎用レジスタＲ１＋１の長さが同じ数だけデクリメントされる。アドレスおよび長さの形成および更新は、アドレス指定モードによって決まる。
・汎用レジスタＲ１のアドレス指定モードの特徴、および汎用レジスタＲ１＋１の長さの特徴は、前述した汎用レジスタＲ２およびＲ２＋１の特徴とそれぞれ同じである。
【００７３】
２つのＫＬＭＤ−ＳＨＡＫＥ機能以外の機能の場合、この実施形態では、汎用レジスタ０のビット５５および命令のＲ１フィールドは無視される。この場合、第１のオペランドは存在せず、汎用レジスタＲ１およびＲ１＋１は変更されない。
【００７４】
アクセス・レジスタ・モードでは、アクセス・レジスタ１およびＲ２が、パラメータ・ブロックおよび第２のオペランドを含んでいるアドレス空間をそれぞれ指定する。ＫＬＭＤ−ＳＨＡＫＥ機能の場合、アクセス・レジスタＲ１が、第１のオペランドを含んでいるアドレス空間を指定する。
【００７５】
処理が第２のオペランドの左端から開始されて、１ブロックずつ右に進むかのように、結果が取得される。ＫＬＭＤ−ＳＨＡＫＥ機能を除くすべての機能の場合、第２のオペランド内のすべてのソース・バイトが処理されたとき（正常完了と呼ばれる）、または第２のオペランドの長さ未満の、ＣＰＵによって決定されたブロック数が処理されたとき（部分的完了と呼ばれる）に、動作が終了する。ＣＰＵによって決定されたブロック数は、モデルに応じて変わり、命令が実行されるたびに異なる番号であってよい。ＣＰＵによって決定されたブロック数は、通常、ゼロ以外である。特定の異常な状況では、この数は０であってよく、進行しないで、条件コード（例えば、３）が設定されてよい。ただし、ＣＰＵは、この進行しないケースの無限の再発を防ぐ。
【００７６】
（例えば、パラメータ・ブロック内の）チェイニング値フィールドが、第１のオペランドまたは第２のオペランドのいずれかの部分と重複する場合、チェイニング値フィールド内の結果は予測不可能である。
【００７７】
ＫＬＭＤ−ＳＨＡ−１機能、ＫＬＭＤ−ＳＨＡ−２５６機能、およびＫＬＭＤ−ＳＨＡ−５１２機能の場合、汎用レジスタＲ２＋１内で指定された第２のオペランド内のすべてのバイトが処理された後に、埋め込み動作が実行され、埋め込まれたブロックに対して最後のハッシュ処理動作が実行され、その後、正常完了が発生する。ＫＬＭＤ−ＳＨＡ３機能およびＫＬＭＤ−ＳＨＡＫＥ機能の場合、第２のオペランドのすべての完全なブロックが処理された後に、残りの部分的なブロックまたは空のブロックのいずれかに対して埋め込み動作が実行され、埋め込まれたブロックに対して最後のハッシュ処理動作が実行される。その後、ＫＬＭＤ−ＳＨＡ３機能に関して、正常完了が発生する。
【００７８】
ＫＬＭＤ−ＳＨＡＫＥ機能の場合、本発明の態様によれば、埋め込みが実行された場合、埋め込み状態が汎用レジスタ０内で１に設定され、拡張出力機能（ＸＯＦ）のメッセージ・ダイジェストが第１のオペランドの位置に格納される。第１のオペランド内のすべてが格納されたとき（正常完了と呼ばれる）、または第１のオペランドの長さ未満の、ＣＰＵによって決定されたブロック数が格納されたとき（部分的完了と呼ばれる）に、ＸＯＦのメッセージ・ダイジェスト生成が終了する。ＣＰＵによって決定されたブロック数は、モデルによって決まり、命令が実行されるたびに異なる数であってよい。ＣＰＵによって決定されたブロック数は、通常、ゼロ以外である。特定の異常な状況では、この数は０であってよく、進行しないで、条件コード（例えば、３）が設定されてよい。ただし、ＣＰＵは、この進行しないケースの無限の再発を防ぐ。
【００７９】
正常完了によって動作が終了した場合、条件コード（例えば、０）が設定され、汎用レジスタＲ２内の第２のオペランドのアドレスが更新され、汎用レジスタＲ２＋１内の第２のオペランドの長さが０になり、ＫＬＭＤ−ＳＨＡＫＥ機能の場合、汎用レジスタＲ１内の第１のオペランドのアドレスが更新され、汎用レジスタＲ１＋１内の第１のオペランドの長さが０になる。
【００８０】
部分的完了によって動作が終了した場合、条件コード（例えば、３）が設定される。ＫＬＭＤ−ＳＨＡＫＥ機能以外の機能の場合、汎用レジスタＲ２＋１内の結果として得られる値はゼロ以外である。ＫＬＭＤ−ＳＨＡＫＥ機能の場合、第２のオペランドが完全に処理されなかった場合、汎用レジスタＲ２＋１内の結果として得られる値はゼロ以外であり、第１のオペランドが完全に処理されなかった場合、汎用レジスタＲ１内の結果として得られる値はゼロ以外である。
【００８１】
第２のオペランドの長さが最初に０であるときに、第２のオペランドはアクセスされず、汎用レジスタＲ２内の第２のオペランドのアドレスおよび汎用レジスタＲ２＋１内の第２のオペランドの長さは変更されず、条件コード（例えば、０）が設定される。ただし、空のブロック（Ｌ＝０）の場合の埋め込み動作が実行され、その結果がパラメータ・ブロックに格納される。
【００８２】
ＫＬＭＤ−ＳＨＡＫＥ機能の場合、第１のオペランドの長さが最初に０であるときに、第１のオペランドはアクセスされず、汎用レジスタＲ１内の第１のオペランドのアドレスおよび汎用レジスタＲ１＋１内の第１のオペランドの長さは変更されない。ただし、第１のオペランドの長さが最初に０である場合でも、パラメータ・ブロックが更新される。
【００８３】
格納されるパラメータ・ブロックの部分および第１のオペランドの位置（適用可能な場合）に関して、ＰＥＲストレージ変更イベントが認識されることがある。第１のオペランドの位置（適用可能な場合）、第２のオペランドの位置、およびパラメータ・ブロックに関して、ＰＥＲゼロ・アドレス検出イベントが認識されることがある。２つ以上の位置に関してＰＥＲイベントが検出された場合、ＰＥＲアクセス識別（ＰＡＩＤ：PER access identification）およびＰＥＲ  ＡＳＣＥ  ＩＤ（ＡＩ）においてどの位置が識別されるかは、予測不可能である。
【００８４】
このＣＰＵ、他のＣＰＵ、およびチャンネル・プログラムによって観察されるとき、パラメータ・ブロックおよびストレージ・オペランドへの参照は、多重アクセス参照であってよく、これらのストレージ位置へのアクセスは、必ずしもブロック・コンカレントではなく、これらのアクセスまたは参照のシーケンスは定義されない。
【００８５】
命令の１回の実行において処理される大きさよりも大きい第１のオペランド（適用可能な場合）および第２のオペランドの部分に関して、アクセス例外が報告されることがあるが、第１のオペランドまたは第２のオペランドの長さを超える位置に関してアクセス例外は認識されず、処理されている現在の位置から４Ｋバイトよりも大きく超える位置に関しても、アクセス例外は認識されない。
【００８６】
上で示したように、最後のメッセージ・ダイジェストの計算命令は、複数の機能を実行するように構成される。それらの機能のうちの２つ（ＫＬＭＤ−ＳＨＡＫＥ−１２８機能およびＫＬＭＤ−ＳＨＡＫＥ−２５６機能）が、下で説明される。これらの機能の説明において、シンボルｘｐ＜ｎ＞は、ＳＨＡＫＥ機能によって使用されるｎ個の埋め込みバイトを指す。埋め込みの左端のバイトのビット位置３〜７は２進数の１を含み、右端の埋め込みバイトのビット位置０は２進数の１を含む（これは、ビッグエンディアン形式の場合であり、例えばリトルエンディアンなどの他の形式の場合は、異なることがある）。１つの例では、他のすべてのビットは０である。例えば、埋め込み状態（ＰＳ、汎用レジスタ０のビット５５）が０であり、残りの第２のオペランドの長さがデータ・ブロック・サイズ未満である場合、ＳＨＡＫＥ機能の埋め込みが実行される。
【００８７】
ＫＬＭＤ−ＳＨＡＫＥ−１２８（ＫＬＭＤ機能コード３６）
【００８８】
この機能では、１つの例では、図１２を参照すると、チェイニング値３８２を含んでいるパラメータ・ブロック３８０が使用される。最初に、チェイニング値３８２は、初期チェイニング値（ＩＣＶ）を含む。初期チェイニング値は、例えば、ＳＨＡ−３アルゴリズムおよびＳＨＡＫＥアルゴリズムを実装するＫｅｃｃａｋ［ｃ］機能によって使用される１６００ビットの状態配列を表す。
【００８９】
この機能の動作では、汎用レジスタＲ２＋１内の第２のオペランドの長さが１６８バイト以上である場合、パラメータ・ブロック３８０内の２００バイトの初期チェイニング値と共にＫｅｃｃａｋ［ｃ］アルゴリズムを使用して、オペランド２内の１６８バイトのメッセージ・ブロックに対して、２００バイトの中間メッセージ・ダイジェストが生成される。生成された中間メッセージ・ダイジェスト（出力チェイニング値（ＯＣＶ）とも呼ばれる）は、パラメータ・ブロックのチェイニング値３８２を置き換える。
【００９０】
１つの例では、ＳＨＡ３機能およびＳＨＡＫＥ機能の場合、Ｋｅｃｃａｋ［ｃ］アルゴリズムは、パラメータ・ブロック内の１，６００ビットの状態配列を使用する。この状態配列は、それぞれ６４ビットを含んでいる２５のレーンを含む。この状態配列の各ビットには、０〜１，５９９の番号が付けられ、各レーンの各ビットには、０〜６３の番号が付けられる。
【００９１】
パラメータ・ブロック内で、状態配列の各バイトは、左から右への昇順に現れるが、各バイト内では、各ビットは左から右への降順に現れる。すなわち、パラメータ・ブロックのバイト０が状態配列のビット７、６、５、４、３、２、１、および０を（左から右に）含み、バイト１が状態配列のビット１５、１４、１３、１２、１１、１０、９、および８を含む、などとなる。メモリ内で表されるとき、状態配列の個別のレーンのビット位置は、２のべき乗に対応する（他の実施形態では、順序付けが異なってよい）。
【００９２】
前述したパラメータ・ブロックのビットの順序付けは、第２のオペランドのメッセージのバイトにも適用される。ＫＬＭＤ−ＳＨＡＫＥ機能の場合、第１のオペランドに格納される結果は、各バイト内のビットの左から右への順序付けが７、６、５、４、３、２、１、および０であるパラメータ・ブロックの結果に類似している。
【００９３】
さらに、動作において、残りの第２のオペランドの長さが完全なブロック（例えば、１６８バイト）より短い場合の処理は、下で説明されているとおりである。
【００９４】
埋め込み状態（汎用レジスタ０のビット５５）が０である場合（埋め込みがまだ実行されていないことを示す）、図１３を参照して下で説明されているように、埋め込みが発生する。
・シンボル「ｘｐ＜ｎ＞」に関して説明されているように、第２のオペランド４００の右側の残りのバイト４０２で埋め込みが実行され、１６８バイトのメッセージ・ブロック４０４を形成する。埋め込みは、バイトが第２のオペランドに残っていない場合でも発生し、第２のオペランドの内容を変更しない。
・埋め込み状態制御が１に設定され、埋め込みが実行されたことを示す。
・汎用レジスタＲ２内の第２のオペランドのアドレスが、処理されたメッセージのバイト数だけインクリメントされ、汎用レジスタＲ２＋１内の第２のオペランドの長さが０に設定される。
・１６８バイトの埋め込まれたメッセージ４０４と、（パラメータ・ブロック内のＩＣＶからの、または前のブロックの処理から得られたＯＣＶからの）状態配列４０８の内容との排他的ＯＲ４０６が計算されて、拡張出力機能（ＸＯＦ）の処理で使用される出力チェイニング値４１０を形成する。
【００９５】
埋め込みが完了したときの処理された第２のオペランドのブロックの数に応じて、（ａ）出力チェイニング値がパラメータ・ブロックに格納され、条件コード（例えば、３（部分的完了））を設定することによって命令が完了するか、または（ｂ）動作が、下で説明されているように、拡張出力機能（ＸＯＦ）の処理を続行する。
【００９６】
埋め込み状態が１である場合（命令の現在または前の実行によって、メッセージに対して埋め込みが実行されたことを示す）、図１４を参照して下で説明されているように、拡張出力機能（ＸＯＦ）の処理が実行される。
１．  汎用レジスタＲ１＋１内の第１のオペランドの長さが０である場合、出力チェイニング値がパラメータ・ブロック５００に格納され、命令が条件コード（例えば、０）を伴って完了する。命令の開始時に第１のオペランドの長さが０である場合、ＩＣＶがパラメータ・ブロックからフェッチされて、変更されずにＯＣＶとして再び格納されるかどうかは、モデルに依存する。
２．  前の出力チェイニング値（ＯＣＶ）を入力として使用してＫｅｃｃａｋ［ｃ］機能５０２が呼び出され、出力チェイニング値を置き換える。
３．  汎用レジスタＲ１が、第１のオペランドの現在のアドレスを含み、汎用レジスタＲ１＋１が、第１のオペランドの残りの長さを含む。格納されるバイト数ｎは、残りの第１のオペランドの長さまたは１６８のいずれか小さい方である。
出力チェイニング値の最初のｎバイトが、第１のオペランドの位置に格納される。
汎用レジスタＲ１内の第１のオペランドのアドレスが、ｎだけインクリメントされ、汎用レジスタＲ１＋１内の第１のオペランドの長さが、ｎだけデクリメントされる。
【００９７】
このプロセスのステップ１〜３は、第１のオペランドの長さが０になるまで（この場合、命令が、条件コード（例えば、０）を伴って完了する）、またはＣＰＵによって決定されたバイト数が格納されるまで（この場合、命令が、条件コード（例えば、３）を伴って完了する）、繰り返される。出力チェイニング値５１０は、条件コード０または３のいずれが設定されるかに関わらず、パラメータ・ブロックのバイト０〜１９９に格納される。
【００９８】
ＫＬＭＤ−ＳＨＡＫＥ−２５６（ＫＬＭＤ機能コード３７）
【００９９】
この機能の場合、使用されるパラメータ・ブロックは、図１２に示されているように、チェイニング値３８２も含む。
【０１００】
この機能の動作では、汎用レジスタＲ２＋１内の第２のオペランドの長さが１３６バイト以上である場合、パラメータ・ブロック内の２００バイトの初期チェイニング値と共にＫｅｃｃａｋ［ｃ］アルゴリズムを使用して、オペランド２内の１３６バイトのメッセージ・ブロックに対して、２００バイトの中間メッセージ・ダイジェストが生成される。生成された中間メッセージ・ダイジェスト（出力チェイニング値（ＯＣＶ）とも呼ばれる）は、パラメータ・ブロックのチェイニング値を置き換える。状態配列内のビットの番号付けと比較したときの、パラメータ・ブロックおよび第２のオペランド内のビットの番号付けは、上で説明したとおりである。この動作は、第２のオペランドの長さが１３６バイト未満になるまで継続し、この長さが１３６バイト未満になった時点で、下で説明されているように、動作が続行する。
【０１０１】
埋め込み状態（汎用レジスタ０のビット５５）が０である場合（埋め込みがまだ実行されていないことを示す）、図１５を参照して下で説明されているように、埋め込みが発生する。
・シンボル「ｘｐ＜ｎ＞」に関して説明されているように、第２のオペランド６００の右側の残りのバイト６０２で埋め込みが実行され、１３６バイトのメッセージ・ブロック６０４を形成する。埋め込みは、バイトが第２のオペランドに残っていない場合でも発生し、第２のオペランドの内容を変更しない。
・埋め込み状態制御が１に設定され、埋め込みが実行されたことを示す。
・汎用レジスタＲ２内の第２のオペランドのアドレスが、処理されたメッセージのバイト数だけインクリメントされ、汎用レジスタＲ２＋１内の第２のオペランドの長さが０に設定される。
・１３６バイトの埋め込まれたメッセージ６０４と、（パラメータ・ブロック内のＩＣＶからの、または前のブロックの処理から得られたＯＣＶからの）状態配列６０８の内容との排他的ＯＲ６０６が計算されて、拡張出力機能（ＸＯＦ）の処理で使用される出力チェイニング値６１０を形成する。
【０１０２】
埋め込みが完了したときの処理された第２のオペランドのブロックの数に応じて、（ａ）出力チェイニング値がパラメータ・ブロックに格納され、条件コード（例えば、３（部分的完了））を設定することによって命令が完了するか、または（ｂ）動作が、下で説明されているように、拡張出力機能（ＸＯＦ）の処理を続行する。
【０１０３】
埋め込み状態が１である場合（命令の現在または前の実行によって、メッセージに対して埋め込みが実行されたことを示す）、図１６を参照して下で説明されているように、拡張出力機能（ＸＯＦ）の処理が実行される。
１．  汎用レジスタＲ１＋１内の第１のオペランドの長さが０である場合、出力チェイニング値がパラメータ・ブロック７００に格納され、命令が条件コード０を伴って完了する。命令の開始時に第１のオペランドの長さが０である場合、ＩＣＶがパラメータ・ブロックからフェッチされて、変更されずにＯＣＶとして再び格納されるかどうかは、モデルに依存する。
２．  前の出力チェイニング値（ＯＣＶ）を入力として使用してＫｅｃｃａｋ［ｃ］機能７０２が呼び出され、出力チェイニング値を置き換える。
３．  汎用レジスタＲ１が、第１のオペランドの現在のアドレスを含み、汎用レジスタＲ１＋１が、第１のオペランドの残りの長さを含む。格納されるバイト数ｎは、残りの第１のオペランドの長さまたは１３６のいずれか小さい方である。出力チェイニング値の最初のｎバイトが、第１のオペランドの位置７０４に格納される。汎用レジスタＲ１内の第１のオペランドのアドレスが、ｎだけインクリメントされ、汎用レジスタＲ１＋１内の第１のオペランドの長さが、ｎだけデクリメントされる。
【０１０４】
このプロセスのステップ１〜３は、第１のオペランドの長さが０になるまで（この場合、命令が、条件コード（例えば、０）を伴って完了する）、またはＣＰＵによって決定されたバイト数が格納されるまで（この場合、命令が、条件コード（例えば、３）を伴って完了する）、繰り返される。出力チェイニング値７１０は、条件コード０または３のいずれが設定されるかに関わらず、パラメータ・ブロックのバイト０〜１９９に格納される。
【０１０５】
ＫＬＭＤ命令に関する特殊な条件：
【０１０６】
１つの例では、次のいずれかが発生した場合に、指定例外が認識され、他の動作は実行されない。
・汎用レジスタ０のビット５６が０でない。
・汎用レジスタ０のビット５７〜６３が、割り当てられていないか、またはインストールされていない機能コードを指定する。
・Ｒ２フィールドが、奇数番号が付けられたレジスタまたは汎用レジスタ０を指定する。
・ＫＬＭＤ−ＳＨＡＫＥ機能の場合に、次のいずれかが真である。
−  Ｒ１フィールドが、奇数番号が付けられたレジスタ、汎用レジスタ０、またはレジスタＲ２を指定する。
−  第２のオペランドの長さがゼロ以外であり、埋め込み状態が１である。
得られる条件コード：
０  正常完了
１  −−
２  −−
３  部分的完了
【０１０７】
一実施形態では、
＊  ＫＬＭＤ−ＳＨＡＫＥ機能の場合、ＸＯＦの処理中に条件コード３が設定されたときに、汎用レジスタＲ１内の第１のオペランドのアドレスおよび汎用レジスタＲ１＋１内の第１のオペランドの長さが、プログラムが命令に分岐して戻り、動作を続行できるように、更新される。
異常な状況の場合、ＣＰＵは、この進行しないケースの無限の再発を防ぐ。したがって、プログラムは、条件コード３が設定されているときに、無限ループに陥ることなく、常に安全に命令に分岐して戻ることができる。
＊  最後のメッセージ・ダイジェストの計算命令は、第２のオペランドがデータ・ブロック・サイズの倍数になることを必要としない。最後のメッセージ・ダイジェストの計算命令は、まず完全なブロックを処理し、条件コード（例えば、３）を設定してから、すべてのブロックを処理することができる。最後のメッセージ・ダイジェストの計算命令は、すべての完全なブロックを処理した後に、第２のオペランドの残りの部分を含む、埋め込み動作を実行する。この実行では、指定されたブロック・ダイジェスト・アルゴリズムの１回または２回の反復を使用してよい。
＊  最後のメッセージ・ダイジェストの計算命令は、８ビットの倍数の長さのメッセージに対するＳＨＡ埋め込みを実行する。ＳＨＡ機能が８ビットの倍数ではないビット列に適用される場合、プログラムは、ＳＨＡ埋め込みを実行し、中間メッセージ・ダイジェストの計算命令を使用する。
＊  ＫＬＭＤ−ＳＨＡＫＥ機能の場合、１つの例では、以下が適用される。
ａ．メッセージに対するＫＬＭＤの最初の実行の前に、埋め込み状態（汎用レジスタ０のビット５５）が０に設定され、埋め込み状態は、正常完了が発生するまで、同じメッセージに対するその後のＫＬＭＤの実行のために、プログラムによって変更されない。
ｂ．第１のオペランドの長さが０であるときに、第２のオペランドの最後の（短いか、または空の）ブロックの埋め込みが実行された場合、埋め込まれたブロックと、状態配列の内容との排他的ＯＲが計算され、その結果が出力チェイニング値としてパラメータ・ブロックに格納され、命令が条件コード０を伴って完了する。この場合、Ｋｅｃｃａｋ［ｃ］機能は呼び出されない。
＊  １つの態様では、最終的なＮＩＳＴのＳＨＡ−３仕様に従って、ＫＬＭＤ  ＳＨＡ−３機能およびＳＨＡＫＥ機能が（例えば、指定されたビットのシーケンスを使用して）埋め込みを実行する。ＳＨＡ−３仕様の以前のバージョンでは、異なる埋め込みのビット・シーケンスを使用していた。以前のＳＨＡ−３仕様に従って設計されたソフトウェアは、最後のメッセージ・ブロックの埋め込みを実行する場合、ＫＩＭＤ  ＳＨＡ−３機能およびＳＨＡＫＥ機能から引き続き恩恵を受けることができる。
【０１０８】
本明細書に記載されているように、最後のメッセージ・ダイジェストの計算命令の１つまたは複数の機能が、埋め込み動作を実行する。しかし、一実施形態では、この埋め込み動作は１回実行され、したがって、特定の処理が実行される。この処理に関するその他の詳細が、図１７を参照して説明される。この処理は、少なくとも１つのプロセッサによって実行される。
【０１０９】
図１７を参照すると、最初に入力メッセージの最後のブロックの処理に基づいて、第２のオペランドの長さが指定された値（例えば、０）に等しいかどうかに関する判定（照会８００）が行われる。この長さが０に等しくない場合、最後の（短い）ブロックに対して埋め込みが実行され、埋め込まれたブロックが、Ｋｅｃｃａｋアルゴリズムを使用してハッシュされ、レジスタＲ２内の第２のオペランドのアドレスが、処理されたバイト数だけインクリメントされ、汎用レジスタＲ２＋１内の第２のオペランドの長さが０に設定される（ステップ８０６）。埋め込み状態制御が１に設定されて（ステップ８０８）から、拡張出力機能の処理が開始される（ステップ８０２）。この処理の例は、上で説明されている。
【０１１０】
照会８００に戻り、第２のオペランドの長さが指定された値に等しい場合、埋め込み状態制御のチェックが実行される（照会８０４）。埋め込み状態制御が１に設定されている場合（このメッセージに対して埋め込みがすでに実行されていることを示す）、拡張出力機能の処理が開始されるか、または続行される（ステップ８０２）。しかし、照会８０４に戻ると、埋め込み状態制御が０に設定された場合（このメッセージに対して埋め込みが実行されていないことを示す）、本明細書に記載されているように埋め込みが実行され、埋め込まれたブロックが、Ｋｅｃｃａｋアルゴリズムを使用してハッシュされ、レジスタＲ２内の第２のオペランドのアドレスが、処理されたバイト数だけインクリメントされ、汎用レジスタＲ２＋１内の第２のオペランドの長さが０に設定される（ステップ８０６）。埋め込み状態制御が１に設定され（ステップ８０８）、拡張出力機能の処理が開始される（ステップ８０２）。これによって処理を完了する。
【０１１１】
本明細書に記載されているように、命令の実行の開始時に、空の第２のオペランドのメッセージが指定されたのか、それとも埋め込みがすでに実行されたのかを含む複数の状態を区別するための機能が提供される。この制御を提供することによって、データの認証およびその他の処理を含む、コンピューティング環境内の処理が容易になる。したがって、本発明の態様は、コンピューティング技術に密接に関係している。
【０１１２】
命令を実行することおよび埋め込み制御を使用することを含む、コンピューティング環境内の処理を容易にすることに関する詳細が、図１８〜１９を参照してさらに説明される。
【０１１３】
図１８を参照すると、メッセージのメッセージ・ダイジェストを生成するために使用される命令が取得され（ステップ９００）、少なくとも１つのプロセッサによって実行される（ステップ９０２）。この実行することは、例えば、命令の埋め込み状態制御をチェックして、メッセージに対して埋め込みが実行されたかどうかを判定することと（ステップ９０４）、チェックが埋め込みが実行されたことを示していることに基づいて、第１の動作を実行することと（ステップ９０６）、チェックが埋め込みが実行されていないことを示していることに基づいて、第１の動作とは異なる第２の動作を実行することと（ステップ９０８）を含む。
【０１１４】
一例として、第１の動作は、拡張出力機能の処理を実行して、メッセージ・ダイジェストに関連する処理をさらに実行することを含む（ステップ９１０）。拡張出力機能の処理を実行することは、例えば、メッセージ・ダイジェストの少なくとも一部を再ハッシュして、追加の出力を生成することを含む（ステップ９１２）。
【０１１５】
さらに、一例として、第２の動作は、メッセージの少なくとも一部の埋め込みを実行して、選択されたサイズのメッセージ・ブロックを形成することを含む（ステップ９１４）。埋め込みを実行することは、例えば、０のビットを、メッセージの少なくとも一部の選択された位置に埋め込むことを含む（ステップ９１６）。さらに、第２の動作は、メッセージに対して埋め込みが実行されたことを示すように埋め込み状態制御を設定することを含む（ステップ９１８）。
【０１１６】
例として図１９を参照すると、埋め込み状態制御が、命令によって使用されるレジスタ内に配置されるか（９２０）、または埋め込み状態制御が、命令がアクセスできるメモリ内に配置される（９２２）。
【０１１７】
１つの例では、この命令は、メッセージの１つまたは複数の最後のブロックを処理して、メッセージの認証において使用されるメッセージ・ダイジェストを生成するために使用される、最後のメッセージ・ダイジェストの計算命令である（９２４）。
【０１１８】
メッセージは、例えば、メモリ内に格納され、命令が、メッセージの位置を特定するためのメモリ内のアドレスを提供する（９２６）。
【０１１９】
一実施形態では、この実行することは、埋め込み状態制御が埋め込みが実行されたことを示していることに基づいて、および命令が実行を開始していることに基づいて、メッセージの長さがゼロ以外であるかどうかを判定することと、長さがゼロ以外であることを示しているとの判定に基づいて例外を示すことであって、埋め込み状態制御が、埋め込みが実行されて命令が実行を開始していることを示している、こととをさらに含む（ステップ９２８）。
【０１２０】
本明細書ではさまざまな実施形態および例が示されたが、多くの変形が可能である。例えば、命令によって使用されるレジスタまたはフィールドあるいはその両方に含まれている値は、他の実施形態では、メモリ位置などの他の位置にあってよい。さらに、その他の追加の、またはより少ないフィールドまたはレジスタ、あるいはその他のサイズが使用されてよい。多くの変形が可能である。例えば、明示的に指定されるレジスタまたはフィールドの代わりに、暗黙的なレジスタが使用されてよい。さらに、本発明の１つまたは複数の態様が、他のハッシュ・アルゴリズム、またはその他の技術またはプロセス、あるいはその両方と共に使用されてよい。その他の変形も可能である。
【０１２１】
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
【０１２２】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスにすることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：random access memory）、読み取り専用メモリ（ＲＯＭ：read-only memory）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭ：erasable programmable read-only memoryまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ：static random access memory）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：compact disc read-only memory）、デジタル多用途ディスク（ＤＶＤ：digital versatile disk）、メモリ・スティック、フロッピー・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されているコンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、あるいはワイヤを介して送信される電気信号などの一時的信号であると解釈されるべきではない。
【０１２３】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス／処理デバイスへ、またはネットワーク（例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ）を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス／処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【０１２４】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ：instruction-set-architecture）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む１つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）または広域ネットワーク（ＷＡＮ：wide area network）を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ：field-programmable gate arrays）、またはプログラマブル・ロジック・アレイ（ＰＬＡ：programmable logic arrays）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【０１２５】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【０１２６】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【０１２７】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施するように、コンピュータ実装プロセスを生成すべく、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれ、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で一連の動作可能なステップを実行させるものであってもよい。
【０１２８】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【０１２９】
上に加えて、顧客の環境の管理を提供するサービス・プロバイダによって、１つまたは複数の態様が提供されること、デプロイされること、管理されること、サービス提供されることなどが行われてよい。例えば、サービス・プロバイダは、１人または複数人の顧客のために１つまたは複数の態様を実行するコンピュータ・コードまたはコンピュータ・インフラストラクチャあるいはその両方を作成すること、維持すること、サポートすることなどを行うことができる。その見返りとして、サービス・プロバイダは、例えばサブスクリプションまたは料金契約あるいはその両方の下で、顧客から支払いを受け取ってよい。追加または代替として、サービス・プロバイダは、１つまたは複数のサード・パーティへの広告コンテンツの販売から支払いを受け取ってよい。
【０１３０】
１つの態様では、１つまたは複数の実施形態を実行するために、アプリケーションがデプロイされてよい。１つの例として、アプリケーションのデプロイは、１つまたは複数の実施形態を実行するよう動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【０１３１】
さらに別の態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラストラクチャがデプロイされてよく、このコンピューティング・システムでは、コンピューティング・システムと組み合わせたコードが、１つまたは複数の実施形態を実行できる。
【０１３２】
さらに別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含んでいる、コンピューティング・インフラストラクチャを統合するためのプロセスが提供されてよい。コンピュータ・システムは、コンピュータ可読媒体を備え、このコンピュータ可読媒体では、コンピュータ媒体が１つまたは複数の実施形態を含む。コンピュータ・システムと組み合わせたコードは、１つまたは複数の実施形態を実行できる。
【０１３３】
上ではさまざまな実施形態が説明されたが、それらは単なる例である。例えば、１つまたは複数の実施形態を組み込んで使用するために、他のアーキテクチャのコンピューティング環境が使用され得る。さらに、異なる命令、命令形式、命令フィールド、または命令値、あるいはその組み合わせが使用されてよい。多くの変形が可能である。
【０１３４】
さらに、他の種類のコンピューティング環境が、恩恵を受けることができ、使用され得る。一例として、プログラム・コードの格納または実行あるいはその両方を行うのに適した、システム・バスを介して直接的または間接的にメモリ素子に結合された少なくとも２つのプロセッサを含んでいる、データ処理システムを使用できる。これらのメモリ素子は、例えば、プログラム・コードの実際の実行時に使用されるローカル・メモリ、バルク・ストレージ、および実行時にバルク・ストレージからコードが取得されなければならない回数を減らすために少なくとも一部のプログラム・コードを一時的に格納するキャッシュ・メモリを含む。
【０１３５】
入出力デバイスまたはＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サム・ドライブ、およびその他の記憶媒体などを含むが、これらに限定されない）は、直接的に、または介在するＩ／Ｏコントローラを通じて、システムに結合できる。ネットワーク・アダプタがシステムに結合され、介在するプライベート・ネットワークまたはパブリック・ネットワークを通じて、データ処理システムを、他のデータ処理システムまたはリモート・プリンタまたはストレージ・デバイスに結合できるようにしてもよい。モデム、ケーブル・モデム、およびイーサネット（Ｒ）・カードは、使用可能なネットワーク・アダプタのうちの、ごくわずかの種類にすぎない。
【０１３６】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、制限することを意図していない。本明細書において使用されるとき、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、特に明示的に示されない限り、複数形も含むことが意図されている。「備える（ｃｏｍｐｒｉｓｅ）」または「備えている（ｃｏｍｐｒｉｓｉｎｇ）」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、動作、要素、またはコンポーネント、あるいはその組み合わせの存在を示すが、１つまたは複数のその他の機能、整数、ステップ、動作、要素、コンポーネント、またはこれらのグループ、あるいはその組み合わせの存在または追加を除外していないということが、さらに理解されるであろう。
【０１３７】
添付の特許請求の範囲内のすべてのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、動作、および均等なものは、もしあれば、具体的に請求されるとき、その他の請求される要素と組み合わせて、機能を実行するための任意の構造、材料、または動作を含むことが意図されている。１つまたは複数の実施形態の説明は、例示および説明の目的で提示されているが、網羅的であることは意図されておらず、開示された形態に限定されない。多くの変更および変形が、当業者にとって明らかであろう。さまざまな態様および実際的な適用を最も適切に説明するため、および他の当業者が、企図されている特定の用途に適しているようなさまざまな変更を伴う多様な実施形態を理解できるようにするために、実施形態が選択されて説明された。
【図１】
2019533359.tif 000004
【図２】
2019533359.tif 000005
【図３】
2019533359.tif 000006
【図４】
2019533359.tif 000007
【図５】
2019533359.tif 000008
【図６】
2019533359.tif 000009
【図７】
2019533359.tif 000010
【図８】
2019533359.tif 000011
【図９】
2019533359.tif 000012
【図１０】
2019533359.tif 000013
【図１１】
2019533359.tif 000014
【図１２】
2019533359.tif 000015
【図１３】
2019533359.tif 000016
【図１４】
2019533359.tif 000017
【図１５】
2019533359.tif 000018
【図１６】
2019533359.tif 000019
【図１７】
2019533359.tif 000020
【図１８】
2019533359.tif 000021
【図１９】
2019533359.tif 000022
【国際調査報告】
2019533359.tif 000023
2019533359.tif 000024
2019533359.tif 000025