(57)【要約】【課題】認証命令を含む暗号メッセージを実現するコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法を提供する。【解決手段】暗号処理および認証を実行するための命令が実行される。この実行することは、命令によって提供されたデータの１つのセットを暗号処理して、暗号処理されたデータを取得することと、暗号処理されたデータを指定された位置に配置することとを含む。この実行することは、命令によって提供されたデータの追加のセットを認証することをさらに含んでおり、この認証することは、メッセージ認証タグの少なくとも一部を生成する。メッセージ認証タグの少なくとも一部は、選択された位置に格納される。【選択図】図２７
2019535036.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品であって、
処理回路によって読み取り可能な、方法を実行するために前記処理回路によって実行されるための命令を格納しているコンピュータ可読記憶媒体を備えており、前記方法が、
暗号処理および認証を含む複数の動作を実行するための命令を取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
前記命令によって提供されたデータの１つのセットを暗号処理して、暗号処理されたデータを取得することと、
前記暗号処理されたデータを指定された位置に配置することと、
前記命令によって提供されたデータの追加のセットを認証することであって、メッセージ認証タグの少なくとも一部を生成する、前記認証することと、
前記メッセージ認証タグの前記少なくとも一部を選択された位置に格納することと
を含んでいる、コンピュータ・プログラム製品。
【請求項２】
前記実行することが前記暗号処理されたデータを認証することをさらに含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項３】
前記データの追加のセットが、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり、前記実行することが、
前記データの追加のセットが、認証されるデータの最後のブロックを含んでいるかどうかを判定することと、
前記データの追加のセットが前記認証されるデータの最後のブロックを含んでいるかどうかに基づいて前記認証することを実行することと
をさらに含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項４】
前記判定することが、前記命令の最後の追加認証データ制御をチェックして、前記データの追加のセットが前記認証されるデータの最後のブロックを含んでいるかどうかを判定することを含んでいる、請求項３に記載のコンピュータ・プログラム製品。
【請求項５】
前記データの１つのセットが、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり、前記実行することが、
前記データの１つのセットが、暗号処理されるデータの最後のブロックを含んでいるかどうかを判定することと、
前記データの１つのセットが前記暗号処理されるデータの最後のブロックを含んでいるかどうかに基づいて前記暗号処理することを実行することと
をさらに含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項６】
前記判定することが、前記命令の最後のテキスト制御をチェックして、前記データの１つのセットが前記暗号処理されるデータの最後のブロックを含んでいるかどうかを判定することを含んでいる、請求項５に記載のコンピュータ・プログラム製品。
【請求項７】
前記暗号処理することが、選択された値に設定されている前記命令によって提供された制御に基づいて前記データの１つのセットを暗号化することを含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項８】
前記暗号処理することが、特定の値に設定されている前記命令によって提供された制御に基づいて前記データの１つのセットを暗号解読することを含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項９】
前記データの追加のセットを前記認証することが、ハッシュ技術を使用して、前記メッセージ認証タグの前記少なくとも一部を生成することを含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項１０】
前記ハッシュ技術が、選択された値に設定されている前記命令の、ハッシュ・サブキーによって提供される制御に基づいて、前記命令によって使用されるパラメータ・ブロックに格納されるハッシュ・サブキーを使用する、請求項９に記載のコンピュータ・プログラム製品。
【請求項１１】
前記データの１つのセットが、メッセージの少なくとも一部を含んでおり、前記データの追加のセットが、前記メッセージのルーティング情報を含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項１２】
コンピューティング環境内の処理を容易にするためのコンピュータ・システムであって、
メモリと、
前記メモリと通信するプロセッサとを備えており、前記コンピュータ・システムが方法を実行するように構成されており、前記方法が、
暗号処理および認証を含む複数の動作を実行するための命令を取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
前記命令によって提供されたデータの１つのセットを暗号処理して、暗号処理されたデータを取得することと、
前記暗号処理されたデータを指定された位置に配置することと、
前記命令によって提供されたデータの追加のセットを認証することであって、メッセージ認証タグの少なくとも一部を生成する、前記認証することと、
前記メッセージ認証タグの前記少なくとも一部を選択された位置に格納することと
を含んでいる、コンピュータ・システム。
【請求項１３】
前記実行することが前記暗号処理されたデータを認証することをさらに含んでいる、請求項１２に記載のコンピュータ・システム。
【請求項１４】
前記データの追加のセットが、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり、前記実行することが、
前記データの追加のセットが認証されるデータの最後のブロックを含んでいるかどうかを判定することであって、前記命令の最後の追加認証データ制御をチェックして、前記データの追加のセットが、前記認証されるデータの最後のブロックを含んでいるかどうかを判定する、前記判定することと、
前記データの追加のセットが前記認証されるデータの最後のブロックを含んでいるかどうかに基づいて前記認証することを実行することと
をさらに含んでいる、請求項１２に記載のコンピュータ・システム。
【請求項１５】
前記データの１つのセットが、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり、前記実行することが、
前記データの１つのセットが暗号処理されるデータの最後のブロックを含んでいるかどうかを判定することであって、前記命令の最後のテキスト制御をチェックして、前記データの１つのセットが、前記暗号処理されるデータの最後のブロックを含んでいるかどうかを判定する、前記判定することと、
前記データの１つのセットが前記暗号処理されるデータの最後のブロックを含んでいるかどうかに基づいて前記暗号処理することを実行することと
をさらに含んでいる、請求項１２に記載のコンピュータ・システム。
【請求項１６】
前記データの追加のセットを前記認証することが、ハッシュ技術を使用して前記メッセージ認証タグの前記少なくとも一部を生成することを含んでおり、前記ハッシュ技術が、選択された値に設定されている前記命令の、ハッシュ・サブキーによって提供される制御に基づいて、前記命令によって使用されるパラメータ・ブロックに格納されるハッシュ・サブキーを使用する、請求項１２に記載のコンピュータ・システム。
【請求項１７】
コンピューティング環境内の処理を容易にするためのコンピュータ実装方法であって、
プロセッサによって、暗号処理および認証を含む複数の動作を実行するための命令を取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
前記命令によって提供されたデータの１つのセットを暗号処理して、暗号処理されたデータを取得することと、
前記暗号処理されたデータを指定された位置に配置することと、
前記命令によって提供されたデータの追加のセットを認証することであって、メッセージ認証タグの少なくとも一部を生成する、前記認証することと、
前記メッセージ認証タグの前記少なくとも一部を選択された位置に格納することと
を含んでいる、コンピュータ実装方法。
【請求項１８】
前記実行することが前記暗号処理されたデータを認証することをさらに含んでいる、請求項１７に記載のコンピュータ実装方法。
【請求項１９】
前記データの追加のセットが、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり、前記実行することが、
前記データの追加のセットが認証されるデータの最後のブロックを含んでいるかどうかを判定することであって、前記命令の最後の追加認証データ制御をチェックして、前記データの追加のセットが、前記認証されるデータの最後のブロックを含んでいるかどうかを判定する、前記判定することと、
前記データの追加のセットが前記認証されるデータの最後のブロックを含んでいるかどうかに基づいて前記認証することを実行することと
をさらに含んでいる、請求項１７に記載のコンピュータ実装方法。
【請求項２０】
前記データの１つのセットが、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり、前記実行することが、
前記データの１つのセットが暗号処理されるデータの最後のブロックを含んでいるかどうかを判定することであって、前記命令の最後のテキスト制御をチェックして、前記データの１つのセットが、前記暗号処理されるデータの最後のブロックを含んでいるかどうかを判定する、前記判定することと、
前記データの１つのセットが前記暗号処理されるデータの最後のブロックを含んでいるかどうかに基づいて前記暗号処理することを実行することと
をさらに含んでいる、請求項１７に記載のコンピュータ実装方法。
【発明の詳細な説明】
【技術分野】
【０００１】
１つまたは複数の態様は、一般に、コンピューティング環境内の処理に関し、特に、データの暗号処理および認証に関連付けられた処理に関する。
【背景技術】
【０００２】
電子情報処理の文脈におけるセキュリティで保護されたメッセージ送信は、メッセージの暗号化および暗号解読ならびに認証を含む。メッセージは、送信前に送信側によって暗号化され、暗号化されたメッセージの調査によって真の内容が第三者に公開されないことを保証する。一方、メッセージは、受信側によって暗号解読され、元の内容を公開する。さらに、メッセージ認証は、送信側によって提供されたメッセージの内容が誤って、または悪意を持って送信中に変更されていないことを保証する。したがって、受信されたメッセージは、実際に、送信されたメッセージと同じである。
【０００３】
U.S. National Institute of Science and Technology (NIST) Special Publication 800-38D, Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC（ＧＭＡＣ：Galois Message Authentication Code）に、以下の動作が記載されている。
【０００４】
ＮＩＳＴ  ＳＰ  ８００−３８Ｄにおいて説明されている、ガロア・ハッシュ（ＧＨＡＳＨ：Galois Hashing）アルゴリズムを使用した追加認証データの認証。追加認証データの例は、メッセージ用のネットワーク・ルーティング情報である。このデータは、ネットワーク・ルータがメッセージを適切にディスパッチできるように、暗号化されないが、ルーティング情報は認証され、例えば、データが予期されたソースから来たことを保証する必要があることがある。
【０００５】
高度暗号化標準（ＡＥＳ：advanced encryption standard）などの、１２８ビットのブロック・サイズで承認された対称鍵ブロック暗号を使用したメッセージの暗号処理。暗号処理されたブロックの繰り返しの可能性を最小限に抑えるために、この暗号処理技術は、１つのブロックから、暗号処理プロセスに含まれている次のブロックにインクリメントされるカウンタを使用する。
【０００６】
ＧＨＡＳＨを使用して暗号化されたメッセージ・データの認証。
【０００７】
さまざまな暗号処理アルゴリズムを使用してメッセージの暗号処理を実行するため、およびメッセージのメッセージ・ディジットを生成するために、個別の命令を使用できる。
【先行技術文献】
【非特許文献】
【０００８】
【非特許文献１】U.S. National Institute of Scienceand Technology (NIST) Special Publication 800-38D, Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC
【非特許文献２】“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
【発明の概要】
【発明が解決しようとする課題】
【０００９】
認証命令を含む暗号メッセージを実現するコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法を提供する。
【課題を解決するための手段】
【００１０】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品の提供によって、従来技術の欠点が克服され、追加の利点がもたらされる。このコンピュータ・プログラム製品は、処理回路によって読み取り可能な、方法を実行するために処理回路によって実行される命令を格納しているストレージ媒体を備える。この方法は、例えば、暗号処理および認証を含む、複数の動作を実行するための命令を取得することと、命令を実行することとを含む。この実行することは、命令によって提供されたデータの１つのセットを暗号処理して、暗号処理されたデータを取得することと、暗号処理されたデータを指定された位置に配置することとを含む。この実行することは、命令によって提供されたデータの追加のセットを認証することをさらに含んでおり、この認証することは、メッセージ認証タグの少なくとも一部を生成する。メッセージ認証タグの少なくとも一部は、選択された位置に格納される。さらに別の実施形態では、この実行することは、暗号処理されたデータを認証することをさらに含む。
【００１１】
追加認証データのメッセージ・ダイジェストを生成すること、メッセージを暗号処理すること、および暗号化されたメッセージのメッセージ・ダイジェストを生成することができる１つの命令が提供される。この命令は、フェッチされ、デコードされ、実行される命令の数を減らすことによって、および暗号文がフェッチされる回数を減らすことによって、システムの性能を改善する。
【００１２】
１つの例では、データの追加のセットは、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり、この実行することは、データの追加のセットが、認証されるデータの最後のブロックを含んでいるかどうかを判定することをさらに含む。この認証することは、データの追加のセットが、認証されるデータの最後のブロックを含んでいるかどうかに基づいて実行される。この判定することは、例えば、命令の最後の追加認証データ制御（additional authenticated data control）をチェックして、データの追加のセットが、認証されるデータの最後のブロックを含んでいるかどうかを判定することを含む。最後の追加認証データ制御は、追加認証データの最後のブロックが提供されているかどうかを示し、単一の命令が、追加認証データの最初のブロック、中間のブロック、および最後のブロックを処理できるようにする。
【００１３】
さらに、１つの例では、データの１つのセットは、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり、この実行することは、データの１つのセットが、暗号処理されるデータの最後のブロックを含んでいるかどうかを判定することをさらに含む。この暗号処理することは、データの１つのセットが、暗号処理されるデータの最後のブロックを含んでいるかどうかに基づいて実行される。この判定することは、例えば、命令の最後のテキスト制御をチェックして、データの１つのセットが、暗号処理されるデータの最後のブロックを含んでいるかどうかを判定することを含む。最後のテキスト制御は、平文／暗号文の最後のブロックが提供されているかどうかを示し、単一の命令が、平文／暗号文の最初のブロック、中間のブロック、および最後のブロックを処理できるようにする。
【００１４】
例として、暗号処理することは、選択された値に設定されている命令によって提供される制御に基づいて、データの１つのセットを暗号化すること、または特定の値に設定されている命令によって提供される制御に基づいて、データの１つのセットを暗号解読することを含む。
【００１５】
一実施形態では、データの追加のセットを認証することは、ハッシュ技術を使用して、メッセージ認証タグの少なくとも一部を生成すること含む。一実施形態では、ハッシュ技術は、選択された値に設定されている命令の、ハッシュ・サブキー（hash subkey）によって提供される制御に基づいて、命令によって使用されるパラメータ・ブロックに格納されるハッシュ・サブキーを使用する。ハッシュ・サブキーによって提供される制御によって、プログラムは、それ自身のハッシュ・サブキーを提供したことを示すことができ、このようにして、同じハッシュ・サブキーを使用する場合に、性能上の利益をもたらすことができる。
【００１６】
一例として、データの１つのセットは、メッセージの少なくとも一部を含み、データの追加のセットは、メッセージのルーティング情報を含む。
【００１７】
その他の特徴および長所が、本明細書に記載された技術によって実現される。その他の実施形態および態様は、本明細書において詳細に説明され、請求される態様の一部と見なされる。
【００１８】
１つまたは複数の態様は、本明細書の最後にある特許請求の範囲において例として具体的に指摘され、明確に請求される。前述の内容、ならびに１つまたは複数の態様の目的、特徴、および長所は、添付の図面と併せて行われる以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【００１９】
【図１】本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一例を示す図である。
【図２】図１のプロセッサの詳細をさらに示す図である。
【図３】本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の例を示す図である。
【図４】図３のメモリの詳細をさらに示す図である。
【図５】本発明の態様による、認証命令を含む暗号メッセージの書式の一実施形態を示す図である。
【図６】本発明の態様による、図５の認証命令を含む暗号メッセージの１つまたは複数の態様によって使用される汎用レジスタ（汎用レジスタ０（ＧＲ０））の内容の一例を示す図である。
【図７】本発明の態様による、図５の認証命令を含む暗号メッセージよって使用される別の汎用レジスタ（汎用レジスタ１（ＧＲ１））の内容の一例を示す図である。
【図８】本発明の態様による、図５の認証命令を含む暗号メッセージによって１つまたは複数の態様において使用されるレジスタＲ１の内容の一例を示す図である。
【図９】本発明の態様による、図５の認証命令を含む暗号メッセージによって１つまたは複数の態様において使用されるレジスタＲ２の内容の一例を示す図である。
【図１０】本発明の態様による、図５の認証命令を含む暗号メッセージによって１つまたは複数の態様において使用されるレジスタＲ２＋１の内容の一例を示す図である。
【図１１】本発明の態様による、図５の認証命令を含む暗号メッセージによって１つまたは複数の態様において使用されるレジスタＲ３の内容の一例を示す図である。
【図１２】本発明の態様による、図５の認証命令を含む暗号メッセージによって１つまたは複数の態様において使用されるレジスタＲ３＋１の内容の一例を示す図である。
【図１３】本発明の態様による、図５の認証命令を含む暗号メッセージによって使用するためのパラメータ・ブロックの書式の一例を示す図である。
【図１４】本発明の態様による、ハッシュ・サブキーを暗号化する一例を示す図である。
【図１５】本発明の態様による、追加認証データの完全なブロックのガロア・ハッシュ処理の一例を示す図である。
【図１６】本発明の態様による、追加認証データの最後の（短い）ブロックのガロア・ハッシュ処理の一例を示す図である。
【図１７】本発明の態様による、暗号化のためのメッセージの完全なブロックの結合された暗号処理およびハッシュ処理の一例を示す図である。
【図１８】本発明の態様による、暗号解読のためのメッセージの完全なブロックの結合された暗号処理およびハッシュ処理の一例を示す図である。
【図１９】本発明の態様による、メッセージの最後の（短い）ブロックの暗号処理およびハッシュ処理の一例を示す図である。
【図２０】本発明の態様による、最後のタグのハッシュ処理および暗号化の一例を示す図である。
【図２１】本発明の態様による、認証命令を含む暗号メッセージに関連付けられた選択された処理の一例を示す図である。
【図２２】本発明の態様による、認証命令を含む暗号メッセージに関連付けられた処理の一例を示す図である。
【図２３】本発明の態様による、認証命令を含む暗号メッセージに関連付けられた処理の一例を示す図である。
【図２４】本発明の態様による、認証命令を含む暗号メッセージに関連付けられた処理の一例を示す図である。
【図２５】本発明の態様による、認証命令を含む暗号メッセージに関連付けられた処理の一例を示す図である。
【図２６】本発明の態様による、認証命令を含む暗号メッセージに関連付けられた処理の一例を示す図である。
【図２７】本発明の態様による、追加の認証動作を伴って暗号メッセージを実行するように構成された命令を実行することを含んでいる、コンピューティング環境内の処理を容易にする一例を示す図である。
【図２８】本発明の態様による、追加の認証動作を伴って暗号メッセージを実行するように構成された命令を実行することを含んでいる、コンピューティング環境内の処理を容易にする一例を示す図である。
【発明を実施するための形態】
【００２０】
１つまたは複数の態様によれば、認証および暗号処理の機能を結合する単一の命令（例えば、ハードウェア／ソフトウェア・インターフェイスでの単一の設計されたハードウェア・マシン命令（hardware machine instruction））が提供される。例えば、（追加認証データおよびメッセージの両方の）メッセージ認証タグを生成する機能を、メッセージの暗号処理と結合する単一の命令が提供される。一実施形態では、この命令は、ガロア／カウンタ・モードの仕様に従って暗号処理および認証を実行するが、他の実施形態では、この命令は、追加のアルゴリズムまたは他のアルゴリズムあるいはその両方を使用して、暗号処理および認証を実行してもよい。この命令は、本明細書では、認証命令を含む暗号メッセージと呼ばれる。
【００２１】
前述したように、データ暗号化アルゴリズム、トリプル・データ暗号化アルゴリズム、および高度暗号化標準を含む、さまざまな暗号処理アルゴリズムを使用してメッセージの暗号処理を実行するため、およびメッセージ・ダイジェストを生成するために、別々の命令を使用できる。さらに、ＧＨＡＳＨを含むさまざまなハッシュ・アルゴリズムを実行するために、他の機能を使用できる。しかし、メッセージの暗号処理と、追加認証データの認証を含むメッセージの認証を結合する、単一の命令は存在しない。したがって、本発明の態様によれば、メッセージの暗号処理および認証を結合するそのような命令（例えば、認証命令を含む暗号メッセージ）が提供される。
【００２２】
本発明の１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一実施形態が、図１を参照して説明される。１つの例では、コンピューティング環境は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づく。ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅの一実施形態は、“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）バス、ＭＣＡ（MicroChannel Architecture）バス、ＥＩＳＡ（Enhanced ISA）バス、ＶＥＳＡ（Video Electronics Standards Association）ローカル・バス、およびＰＣＩ（Peripheral Component Interconnect）バスを含むが、これらに限定されない。
【００２７】
コンピュータ・システム／サーバ１２は、通常、さまざまなコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム／サーバ１２によってアクセスできる任意の使用可能な媒体であってよく、揮発性および不揮発性媒体、取り外し可能および取り外し不可の媒体を含む。
【００２８】
システム・メモリ２８は、ランダム・アクセス・メモリ（ＲＡＭ：randomaccess memory）３０またはキャッシュ・メモリ３２あるいはその両方などの、揮発性メモリの形態でのコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム／サーバ１２は、その他の取り外し可能／取り外し不可、揮発性／不揮発性のコンピュータ・システム・ストレージ媒体をさらに含んでよい。単に例として、取り外し不可、不揮発性の磁気媒体（図示されておらず、通常は「ハード・ドライブ」と呼ばれる）に対する読み取りと書き込みを行うために、ストレージ・システム３４を提供することができる。図示されていないが、取り外し可能、不揮発性の磁気ディスク（例えば、「フロッピー（Ｒ）・ディスク」）に対する読み取りと書き込みを行うための磁気ディスク・ドライブ、およびＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、またはその他の光媒体などの取り外し可能、不揮発性の光ディスクに対する読み取りと書き込みを行うための光ディスク・ドライブを提供することができる。そのような例では、それぞれを、１つまたは複数のデータ媒体インターフェイスによってバス１８に接続することができる。下でさらに示され、説明されるように、メモリ２８は、本発明の実施形態の機能を実行するように構成された一連の（例えば、少なくとも１つの）プログラム・モジュールを備える少なくとも１つのプログラム製品を含むことができる。
【００２９】
例えば、一連の（少なくとも１つの）プログラム・モジュール４２を含んでいるプログラム／ユーティリティ４０がメモリ２８に格納されてよいが、これに限定されず、オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データも格納されてよい。オペレーティング・システム、１つまたは複数のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データまたはこれらの何らかの組み合わせは、それぞれネットワーク環境の実装を含んでよい。プログラム・モジュール４２は、通常、本明細書に記載された本発明の実施形態の機能または方法あるいはその両方を実行する。
【００３０】
また、コンピュータ・システム／サーバ１２は、キーボード、ポインティング・デバイス、ディスプレイ２４などの１つまたは複数の外部デバイス１４、ユーザがコンピュータ・システム／サーバ１２と情報をやりとりできるようにする１つまたは複数のデバイス、またはコンピュータ・システム／サーバ１２が１つまたは複数の他のコンピューティング・デバイスと通信できるようにする任意のデバイス（例えば、ネットワーク・カード、モデムなど）、あるいはその組み合わせと通信することもできる。そのような通信は、入出力（Ｉ／Ｏ：Input/Output）インターフェイス２２を介して行うことができる。さらに、コンピュータ・システム／サーバ１２は、ローカル・エリア・ネットワーク（ＬＡＮ：local area network）、一般的な広域ネットワーク（WAN：wide area network）、またはパブリック・ネットワーク（例えば、インターネット）、あるいはその組み合わせなどの１つまたは複数のネットワークと、ネットワーク・アダプタ２０を介して通信することができる。図示されているように、ネットワーク・アダプタ２０は、バス１８を介してコンピュータ・システム／サーバ１２の他のコンポーネントと通信する。図示されていないが、その他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方を、コンピュータ・システム／サーバ１２と併用できるということが理解されるべきである。その例として、マイクロコード、デバイス・ドライバ、冗長プロセッシング・ユニット、外部ディスク・ドライブ・アレイ、ＲＡＩＤシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、これらに限定されない。
【００３１】
１つの例では、プロセッサ１６は、命令を実行するために使用される複数の機能コンポーネントを含む。図２に示されているように、これらの機能コンポーネントは、例えば、実行される命令をフェッチするための命令フェッチ・コンポーネント１２０と、フェッチされた命令をデコードするため、およびデコードされた命令のオペランドを取得するための命令デコード・ユニット１２２と、デコードされた命令を実行するための命令実行コンポーネント１２４と、必要な場合に、命令を実行するためにメモリにアクセスするためのメモリ・アクセス・コンポーネント１２６と、実行された命令の結果を提供するための書き戻しコンポーネント１３０とを含む。これらのコンポーネントのうちの１つまたは複数は、本発明の態様によれば、本明細書に記載されているように、追加認証データの認証を含む、暗号処理および認証動作１３６を提供してよい。
【００３２】
プロセッサ１６は、一実施形態では、機能コンポーネントのうちの１つまたは複数によって使用される１つまたは複数のレジスタ１４０も含む。
【００３３】
１つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の実施形態が、図３を参照して説明される。この例では、コンピューティング環境２００は、例えば、１つまたは複数のバス２０８またはその他の接続あるいはその両方などを介して互いに結合された、ネイティブ中央処理装置（ＣＰＵ：central processing unit）２０２、メモリ２０４、および１つまたは複数の入出力デバイスまたはインターフェイス２０６あるいはその両方を含む。例として、コンピューティング環境２００は、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ（ニューヨーク州アーモンク）によって提供されるＰｏｗｅｒＰＣプロセッサまたはｐＳｅｒｉｅｓサーバ、ヒューレット・パッカード社（カリフォルニア州パロアルト市）によって提供されるインテルＩｔａｎｉｕｍ  ＩＩプロセッサ内蔵ＨＰ  Ｓｕｐｅｒｄｏｍｅ、あるいはＩｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  Ｃｏｒｐｏｒａｔｉｏｎ、ヒューレット・パッカード社、インテル社、Ｏｒａｃｌｅ社、またはその他の企業によって提供されるアーキテクチャに基づくその他のマシン、あるいはその組み合わせを含んでよい。
【００３４】
ネイティブ中央処理装置２０２は、環境内で処理中に使用される１つまたは複数の汎用レジスタまたは１つまたは複数の専用レジスタあるいはその両方などの、１つまたは複数のネイティブ・レジスタ２１０を含む。これらのレジスタは、いずれかの特定の時点での環境の状態を表す情報を含む。
【００３５】
さらに、ネイティブ中央処理装置２０２は、メモリ２０４に格納された命令およびコードを実行する。１つの特定の例では、中央処理装置は、メモリ２０４に格納されたエミュレータ・コード２１２を実行する。このコードは、あるアーキテクチャで構成されたコンピューティング環境が、別のアーキテクチャをエミュレートできるようにする。例えば、エミュレータ・コード２１２は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ以外のアーキテクチャに基づくマシン（ＰｏｗｅｒＰＣプロセッサ、ｐＳｅｒｉｅｓサーバ、ＨＰ  Ｓｕｐｅｒｄｏｍｅサーバなど）が、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅをエミュレートし、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅに基づいて開発されたソフトウェアおよび命令を実行できるようにする。
【００３６】
エミュレータ・コード２１２に関連する詳細が、図４を参照してさらに説明される。メモリ２０４に格納されたゲスト命令２５０は、ネイティブＣＰＵ２０２のアーキテクチャ以外のアーキテクチャにおいて実行されるように開発された（例えば、マシン命令と相互関係がある）ソフトウェア命令を含む。例えば、ゲスト命令２５０は、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅプロセッサ１６上で実行するように設計されてよいが、代わりに、例えばインテルＩｔａｎｉｕｍ  ＩＩプロセッサであってよい、ネイティブＣＰＵ２０２上でエミュレートされる。１つの例では、エミュレータ・コード２１２は、メモリ２０４から１つまたは複数のゲスト命令２５０を取得するため、および取得された命令のローカル・バッファリングを必要に応じて提供するための命令フェッチ・ルーチン２５２を含む。エミュレータ・コード２１２は、取得されたゲスト命令の種類を決定するため、およびゲスト命令を、１つまたは複数の対応するネイティブ命令２５６に変換するための命令変換ルーチン２５４も含む。この変換は、例えば、ゲスト命令によって実行される機能を識別すること、およびこの機能を実行するためのネイティブ命令を選択することを含む。
【００３７】
さらに、エミュレータ２１２は、ネイティブ命令の実行を引き起こすためのエミュレーション制御ルーチン２６０を含む。エミュレーション制御ルーチン２６０は、ネイティブＣＰＵ２０２に、１つまたは複数のすでに取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行の終了時に、次のゲスト命令またはゲスト命令のグループの取得をエミュレートするために、制御を命令フェッチ・ルーチンに返してよい。ネイティブ命令２５６の実行は、データをメモリ２０４からレジスタに読み込むこと、データをレジスタからメモリに再び格納すること、あるいは変換ルーチンによって決定された何らかの種類の算術演算または論理演算を実行することを含んでよい。
【００３８】
例えば、各ルーチンは、メモリに格納されてネイティブ中央処理装置２０２によって実行されるソフトウェアにおいて実装される。他の例では、ルーチンまたは動作のうちの１つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはこれらの何らかの組み合わせにおいて実装される。エミュレートされたプロセッサのレジスタは、ネイティブＣＰＵのレジスタ２１０を使用して、またはメモリ２０４内の位置を使用することによって、エミュレートされてよい。実施形態では、ゲスト命令２５０、ネイティブ命令２５６、およびエミュレータ・コード２１２は、同じメモリ内に存在してよく、または異なるメモリ・デバイス間で分配されてよい。
【００３９】
本明細書において使用されるとき、ファームウェアは、例えば、プロセッサのマイクロコード、ミリコード、またはマクロコード、あるいはその組み合わせを含む。ファームウェアは、例えば、上位レベルの機械コードの実装において使用される、ハードウェア・レベルの命令またはデータ構造あるいはその両方を含む。一実施形態では、ファームウェアは、例えば、信頼できるソフトウェアを含んでいるマイクロコード、または基盤になるハードウェアに固有のマイクロコードとして通常は提供される、システムのハードウェアへのオペレーティング・システムのアクセスを制御する独自のコードを含む。
【００４０】
１つの例では、取得され、変換されて実行されるゲスト命令２５０は、本明細書に記載された認証命令を含む暗号メッセージである。あるアーキテクチャ（例えば、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅ）の命令が、メモリからフェッチされ、変換され、別のアーキテクチャ（例えば、ＰｏｗｅｒＰＣ、ｐＳｅｒｉｅｓ、インテルなど）のネイティブ命令２５６のシーケンスとして表される。その後、これらのネイティブ命令が実行される。
【００４１】
命令の明示的フィールドおよび暗黙的フィールドを含んでいる、認証命令を含む暗号メッセージ、ならびに（ネイティブ・システム内またはエミュレートされたシステム内の）プロセッサによる実行の一実施形態に関連する詳細が本明細書において説明される。本発明の態様によれば、認証命令を含む暗号メッセージは、追加認証データおよびメッセージの両方のメッセージ認証タグを生成する機能を、メッセージの暗号処理と結合する、単一の命令である。
【００４２】
認証命令を含む暗号メッセージの一実施形態が、図５を参照して説明される。１つの例では、認証命令を含む暗号メッセージ３００は、認証動作を伴う暗号メッセージを示すためのオペレーション・コード（オペコード）を含むオペコード・フィールド３０２（例えば、ビット０〜１５）、少なくとも１つの第１のレジスタ（Ｒ１）を指定するために使用される第１のレジスタ・フィールド３０４（例えば、ビット２４〜２７）、少なくとも１つの第２のレジスタ（Ｒ２）を指定するために使用される第２のレジスタ・フィールド３０６（例えば、ビット２８〜３１）、および少なくとも１つの第３のレジスタ（Ｒ３）を指定するために使用される第３のレジスタ・フィールド３０８（例えば、ビット１６〜１９）を含む。各フィールド３０４〜３０８は、１つの例では、別々であり、オペコード・フィールドから独立している。さらに、一実施形態では、フィールド３０４〜３０８は、別々であり、互いに独立しているが、他の実施形態では、２つ以上のフィールドが結合されてよい。
【００４３】
１つの例では、Ｒ１フィールドによって指定された偶数番号が付けられたレジスタの内容は、第１のオペランドのアドレスを含む。さらに、Ｒ２フィールドおよびＲ３フィールドによって指定された偶数と奇数のレジスタ対の内容は、第２のおよび第３のオペランドのアドレスおよび長さをそれぞれ含む。
【００４４】
命令内でエンコードされるＲ１、Ｒ２、およびＲ３に加えて、命令の１つの実装は、例えば汎用レジスタ０（ＧＲ０）および汎用レジスタ１（ＧＲ１）を含む、１つまたは複数のインプライド・レジスタを使用する。各レジスタが、図６〜１２を参照して以下でさらに説明される。
【００４５】
最初に図６を参照して、汎用レジスタ０（３２０）の書式の一実施形態が説明される。１つの例では、汎用レジスタ０は、フラグ（Ｆ：flags）フィールド３２２（例えば、ビット４８〜５５）、変更子（Ｍ：modifier）制御３２４（例えば、ビット５６）、および機能コード（ＦＣ：function code）フィールド３２６（例えば、ビット５７〜６３）を含む。各フィールドが、以下でさらに説明される。
【００４６】
フラグ（Ｆ）３２２：汎用レジスタ０のビット位置４８〜５５は、機能の動作を制御する８ビットのフラグ・フィールドを含む。フラグ・フィールドは、汎用レジスタ０のビット５７〜６３内の機能コードが暗号処理機能を指定するとき（すなわち、機能コードがゼロ以外であるとき）に、意味を持つ。１つの例では、フラグ・フィールドの書式は次のとおりである。
【００４７】
予備：フラグ・フィールドのビット０〜４は予備であり、ゼロを含むべきである。そうでない場合、プログラムは将来、互換性を維持して動作しなくなることがある。
【００４８】
ハッシュ・サブキーによって提供される（ＨＳ：Hash Subkey Supplied）フラグ：フラグ・フィールドのビット５は、パラメータ・ブロック（下で説明される）内のハッシュ・サブキー（Ｈ：hash subkey）フィールドが有効なハッシュ・サブキーを含んでいるかどうかを示す。ＨＳフラグは、機能コードがゼロ以外であり、機能が暗号化された暗号鍵を使用しない場合に意味を持つ。ＨＳフラグは、暗号化された暗号鍵を使用する機能では、無視される。
【００４９】
最後の追加認証データ（ＬＡＡＤ：Last Additional Authenticated Data）フラグ：フラグ・フィールドのビット６は、第３のオペランドの内容に資格を与える。ＬＡＡＤフラグが１である場合、第３のオペランドが最後の一連の追加認証データ・ブロックを指定していることを示す。ＬＡＡＤフラグが０である場合、第３のオペランドが最後の一連の追加認証データ・ブロックを指定していないことを示す。
【００５０】
最後の平文／暗号文（ＬＰＣ：Last Plaintext/Ciphertext）フラグ（本明細書では、最後のテキスト制御とも呼ばれる）：フラグ・フィールドのビット７は、第２のオペランドの内容に資格を与える。ＬＰＣフラグが１である場合、第２のオペランドが最後の一連の平文または暗号文ブロックを指定していることを示す。ＬＰＣフラグが０である場合、第２のオペランドが最後の一連の平文または暗号文ブロックを指定していないことを示す。
【００５１】
ＬＰＣフラグが１、かつＬＡＡＤフラグが０の場合、指定例外が認識され、動作が抑制される。
【００５２】
変更子（Ｍ）３２４：汎用レジスタ０のビット５７〜６３内の機能コードがゼロ以外である場合、汎用レジスタ０のビット位置５６は、暗号化または暗号解読が機能によって実行されることになっていることを示す変更子制御を含む。Ｍ制御がゼロである場合、機能は第２のオペランドの暗号化を実行し、Ｍ制御が１である場合、機能は第２のオペランドの暗号解読を実行する。機能コードがゼロである場合、Ｍ制御は無視される。
【００５３】
機能コード（ＦＣ）３２６：汎用レジスタ０のビット位置５７〜６３は、機能コードを含む。命令の動作において、機能コードによって指定された機能が実行される。認証を含む暗号メッセージに割り当てられる機能コードの例としては、以下が挙げられる。
【００５４】
【表１】
2019535036.tif 000003
【００５５】
汎用レジスタ０のビット０〜３１は無視される。汎用レジスタ０のビット３２〜４７は予備であり、ゼロを含むべきである。そうでない場合、プログラムは将来、互換性を維持して動作しなくなることがある。
【００５６】
問い合わせ機能（例えば、機能コード０）は、他の機能の利用可能性を示す手段を提供する。問い合わせ機能の場合、汎用レジスタＲ１、Ｒ２、Ｒ２＋１、Ｒ３、およびＲ３＋１の内容は無視される。
【００５７】
問い合わせ機能以外の機能の場合（すなわち、ゼロ以外の機能コードを有する機能の場合）、メッセージ認証タグが、第３のオペランドの内容から、およびＭ制御が０または１のいずれであるかに応じて、得られた第１のオペランドまたは第２のオペランドのいずれかの内容から、形成される。Ｍ制御に基づいて、パラメータ・ブロック（下で説明される）からの暗号鍵およびカウンタ値を使用して、第２のオペランドが暗号化されるか、または暗号解読され、その結果が第１のオペランドの位置に配置される。
【００５８】
図７に示されているように、汎用レジスタ１（３３０）は、ストレージ内のパラメータ・ブロックの左端のバイトの論理アドレス３３２を含む。２４ビット・アドレス指定モードでは、汎用レジスタ１のビット位置４０〜６３の内容はアドレスを構成し、ビット位置０〜３９の内容は無視される。３１ビット・アドレス指定モードでは、汎用レジスタ１のビット位置３３〜６３の内容はアドレスを構成し、ビット位置０〜３２の内容は無視される。６４ビット・アドレス指定モードでは、汎用レジスタ１のビット位置０〜６３の内容はアドレスを構成する。
【００５９】
図８を参照すると、Ｒ１フィールド（３０４）は、汎用レジスタを指定し、偶数番号が付けられたレジスタを指定することになっており、そうでない場合、指定例外が認識される。Ｒ２およびＲ３フィールドはそれぞれ、偶数と奇数の汎用レジスタ対を指定し、それぞれ、偶数番号が付けられたレジスタを指定することになっており、そうでない場合、指定例外が認識される。Ｒ３フィールドがＲ１フィールドまたはＲ２フィールドのいずれかと同じレジスタを指定する場合も、指定例外が認識される。
【００６０】
第１、第２、第３のオペランドの左端のバイトの位置は、汎用レジスタＲ１３０４（図８）、Ｒ２３０６（図９）、およびＲ３３０８（図１１）の内容によってそれぞれ指定される。第２のオペランドの位置のバイト数は、汎用レジスタＲ２＋１（３７０、図１０）内で指定される。第１のオペランドは、第２のオペランドと同じ長さである。第３のオペランドの位置のバイト数は、汎用レジスタＲ３＋１（３９０、図１２）内で指定される。
【００６１】
動作の一部として、汎用レジスタＲ３（３８０、図１１）内のアドレス３８２が、処理された第３のオペランドのバイト数によってインクリメントされ、汎用レジスタＲ３＋１（３９０）内の長さ３９２が、同じ数によってデクリメントされ、さらに、汎用レジスタＲ１およびＲ２内のアドレス３４２、３６２が、処理された第２のオペランドのバイト数によってそれぞれインクリメントされ、汎用レジスタＲ２＋１（３７０）内の長さ３７２が、同じ数によってデクリメントされる。アドレスおよび長さの形成および更新は、アドレス指定モードによって決まる。
【００６２】
例えば、２４ビット・アドレス指定モードでは、汎用レジスタＲ１、Ｒ２、およびＲ３内のビット位置４０〜６３の内容が、第１、第２、および第３のオペランドのアドレスをそれぞれ構成し、ビット位置０〜３９の内容が無視され、更新されたアドレスのビット４０〜６３が、汎用レジスタＲ１、Ｒ２、およびＲ３内の対応するビットを置き換え、更新されたアドレスのビット位置４０からの繰り上げが無視され、汎用レジスタＲ１、Ｒ２、およびＲ３のビット位置３２〜３９の内容が０に設定される。３１ビット・アドレス指定モードでは、汎用レジスタＲ１、Ｒ２、およびＲ３内のビット位置３３〜６３の内容が、第１、第２、および第３のオペランドのアドレスをそれぞれ構成し、ビット位置０〜３２の内容が無視され、更新されたアドレスのビット３３〜６３が、汎用レジスタＲ１、Ｒ２、およびＲ３内の対応するビットを置き換え、更新されたアドレスのビット位置３３からの繰り上げが無視され、汎用レジスタＲ１、Ｒ２、およびＲ３のビット位置３２の内容が０に設定される。６４ビット・アドレス指定モードでは、汎用レジスタＲ１、Ｒ２、およびＲ３のビット位置０〜６３の内容が、第１、第２、および第３のオペランドのアドレスをそれぞれ構成し、更新されたアドレスのビット０〜６３が、汎用レジスタＲ１、Ｒ２、およびＲ３の内容を置き換え、ビット位置０からの繰り上げが無視される。
【００６３】
２４ビット・アドレス指定モードおよび３１ビット・アドレス指定モードの両方では、汎用レジスタＲ２＋１のビット位置３２〜６３の内容が、第１および第２のオペランド内のバイト数を指定する３２ビット符号なし２進整数を形成し、ビット位置０〜３１の内容が無視され、更新された値のビット３２〜６３が、汎用レジスタＲ２＋１内の対応するビットを置き換える。６４ビット・アドレス指定モードでは、汎用レジスタＲ２＋１のビット位置０〜６３の内容が、第１および第２のオペランド内のバイト数を指定する６４ビット符号なし２進整数を形成し、更新された値が、汎用レジスタＲ２＋１の内容を置き換える。
【００６４】
２４ビット・アドレス指定モードおよび３１ビット・アドレス指定モードの両方では、汎用レジスタＲ３＋１のビット位置３２〜６３の内容が、第３のオペランド内のバイト数を指定する３２ビット符号なし２進整数を形成し、ビット位置０〜３１の内容が無視され、更新された値のビット３２〜６３が、汎用レジスタＲ３＋１内の対応するビットを置き換える。６４ビット・アドレス指定モードでは、汎用レジスタＲ３＋１のビット位置０〜６３の内容が、第３のオペランド内のバイト数を指定する６４ビット符号なし２進整数を形成し、更新された値が、汎用レジスタＲ３＋１の内容を置き換える。
【００６５】
２４ビット・アドレス指定モードまたは３１ビット・アドレス指定モードでは、汎用レジスタＲ１、Ｒ２、Ｒ２＋１、Ｒ３、およびＲ３＋１のビット位置０〜３１の内容は変更されない。
【００６６】
アクセス・レジスタ・モードでは、アクセス・レジスタ１、Ｒ１、Ｒ２、およびＲ３が、パラメータ・ブロック、第１のオペランド、第２のオペランド、および第３のオペランドを含んでいるアドレス空間をそれぞれ指定する。
【００６７】
各機能が、以下で説明される。
【００６８】
問い合わせ（機能コード０）
【００６９】
この機能は、例えばパラメータ・ブロックに格納された１２８ビット状態ワードを含んでいる、パラメータ・ブロックを使用する。このフィールドのビット０〜１２７は、認証命令を含む暗号メッセージの機能コード０〜１２７にそれぞれ対応する。ビットが１である場合、対応する機能がインストールされ、そうでない場合、その機能はインストールされない。
【００７０】
問い合わせ機能の実行が完了したときに、条件コード０が設定され、条件コード１、２、および３は、この機能には適用できない。
【００７１】
ガロア／カウンタ・モード（ＧＣＭ）−ＡＥＳ機能（選択的なゼロ以外の機能コード）
【００７２】
一実施形態では、次の６つのＧＣＭ−ＡＥＳ機能が存在する。
【００７３】
＊  ＧＣＭ−ＡＥＳ−１２８（機能コード１８）
【００７４】
＊  ＧＣＭ−ＡＥＳ−１９２（機能コード１９）
【００７５】
＊  ＧＣＭ−ＡＥＳ−２５６（機能コード２０）
【００７６】
＊  ＧＣＭ−暗号化  ＡＥＳ−１２８（機能コード２６）
【００７７】
＊  ＧＣＭ−暗号化  ＡＥＳ−１９２（機能コード２７）
【００７８】
＊  ＧＣＭ−暗号化  ＡＥＳ−２５６（機能コード２８）
【００７９】
これらの機能はパラメータ・ブロックも使用し、ＧＣＭ−ＡＥＳ機能に使用されるパラメータ・ブロックの一例が、図１３を参照して説明される。１つの例では、パラメータ・ブロック４００は以下を含む。
【００８０】
予備：パラメータ・ブロックのバイト０〜１１は予備である。予備フィールドは、命令の予測不可能な値を含むことがある。
【００８１】
カウンタ値（ＣＶ：Counter Value）４０２：パラメータ・ブロックのバイト１２〜１５は、例えば３２ビット２進整数を含む。初期カウンタ値４１２（パラメータ・ブロックのバイト６４〜７９内のＪ０）の左端の１２バイトが、ＣＶフィールドの内容の右側に連結され、下で説明されるＧＣＴＲ（ガロア・カウンタ）機能によって使用される初期カウンタ・ブロック（ＩＣＢ：initial counter block）を形成する。
【００８２】
命令の実行ごとに、ＣＰＵは、パラメータ・ブロック内のＣＶフィールドを、処理された第２のオペランドのブロックの数だけインクリメントする。ＣＶフィールドのビット位置０からの繰り上げは無視される。
【００８３】
タグ（Ｔ：Tag）４０４：パラメータ・ブロックのバイト１６〜３１は、メッセージ認証タグ・フィールドを含む。
【００８４】
第３のオペランドのブロックごと、および得られた第１のオペランド（Ｍが０である場合）のブロックごとまたは第２のオペランド（Ｍが１である場合）のブロックごとに、ＣＰＵは、タグ・フィールドを、下で説明されるガロア・ハッシュ（ＧＨＡＳＨ：Galois Hash）機能の入力および出力の両方として使用する。すべての追加認証データおよび暗号文がハッシュされた場合、ＴＡＡＤＬ４０８フィールドおよびＴＰＣＬ４１０フィールド（下で説明される）の連結が、ＧＨＡＳＨを使用してハッシュされ、ハッシュの結果が、ＧＣＴＲ機能を使用して暗号化されて、最後のタグ（Ｔ）フィールドをパラメータ・ブロック内に生成する。
【００８５】
ハッシュ・サブキー（Ｈ）４０６：ＧＣＭ−ＡＥＳ機能の場合、パラメータ・ブロックのバイト３２〜４７は、例えば、命令のＧＨＡＳＨ機能によって使用される１２８ビット・ハッシュ・サブキーを含む。ハッシュ・サブキーによって提供されるフラグ（ＨＳ、汎用レジスタ０のビット５３）が０である場合、ＣＰＵは、暗号鍵（Ｋ：key）を使用して、２進ゼロの１２８ビットを暗号化することによって、ハッシュ・サブキーを計算し、ハッシュ・サブキーをＨフィールドに格納し、ＨＳフラグを１に設定する。ＨＳフラグが１である場合、ＣＰＵは、Ｈフィールド内の、プログラムによって提供されるハッシュ・サブキーを使用し、この場合、ＨフィールドおよびＨＳフラグは変更されない。
【００８６】
ＧＣＭ−暗号化−ＡＥＳ機能の場合、パラメータ・ブロックのバイト３２〜４７は予備であり、ゼロを含むべきである。そうでない場合、プログラムは将来、互換性を維持して動作しなくなることがある。この場合、ＣＰＵは、暗号解読された暗号鍵（Ｋ）を使用して、２進ゼロの１２８ビットを暗号化することによって、ハッシュ・サブキーを計算し、この場合、ＨフィールドおよびＨＳフラグは変更されない。
【００８７】
追加認証データの全長（ＴＡＡＤＬ：Total Additional Authenticated Data Length）４０８：パラメータ・ブロックのバイト４８〜５５は、処理されているメッセージの追加認証データ全体の全長をビット単位で指定する６４ビット符号なし２進整数を含む。
【００８８】
平文または暗号文の全長（ＴＰＣＬ：Total Plaintext or Ciphertext Length）４１０：パラメータ・ブロックのバイト５６〜６３は、処理されているメッセージの平文または暗号文全体の全長をビット単位で指定する６４ビット符号なし２進整数を含む。
【００８９】
初期カウンタ値（Ｊ０）４１２：パラメータ・ブロックのバイト６４〜７９は、（ａ）ＧＣＴＲ機能によって使用される初期カウンタ・ブロックの左端の９６ビットを提供するため、および（ｂ）最後の認証タグ（Ｔ）フィールドを暗号化するために使用される、１２８ビット初期カウンタ値を含む。
【００９０】
暗号鍵（Ｋ）４１４：暗号化動作および暗号解読動作において使用される暗号鍵は、パラメータ・ブロックのバイト８０から始まる。パラメータ・ブロック内の鍵フィールドのサイズおよびオフセットは、下に示されているように、機能コードによって決まる。
【００９１】
【表２】
2019535036.tif 000004
【００９２】
ＡＥＳラッピング鍵検証パターン（ＷＫａＶＰ：Wrapping Key Verification Pattern）４１８：ＧＣＭ−暗号化−ＡＥＳ機能（コード２６〜２８）の場合、パラメータ・ブロック内の鍵の直後の３２バイトは、ＡＥＳラッピング鍵検証パターン（ＷＫａＶＰ）を含む。
【００９３】
ＧＣＭ−ＡＥＳ機能（コード１８〜２０）の場合、ＷＫａＶＰフィールドは、パラメータ・ブロック内に存在しない。
【００９４】
一実施形態では、ＧＣＭ−ＡＥＳ機能の場合、追加認証データの認証ならびにメッセージの暗号処理および認証は、動作のシーケンスを含む。汎用レジスタ０内のフラグおよび機能コードによって決まる、実行される動作のシーケンスは、例えば、以下を含む。
【００９５】
１．ラッピング鍵検証：このプロセスは、命令の実行ごとに１回実行され、暗号化されたラッピング鍵を使用する機能が鍵の正しいバージョンを使用することを保証する。ＧＣＭ−暗号化−ＡＥＳ機能（機能コード２６〜２８）の場合、３２バイトのＷＫａＶＰフィールドの内容が、ＡＥＳラッピング鍵検証パターン・レジスタの内容と比較される。それらが一致しない場合、第１のオペランドおよびパラメータ・ブロックの位置は変更されず、条件コード（例えば、１）を設定することによって、動作が完了される。それらが一致する場合、パラメータ・ブロックの鍵フィールド４１４の内容が、ＡＥＳラッピング鍵を使用して暗号解読され、機能によって使用される１２８ビットの暗号鍵（Ｋ４１４）を取得するが、パラメータ・ブロックの鍵フィールドは変更されない。暗号化された鍵（コード１８〜２０）を使用しないＧＣＭ−ＡＥＳ機能の場合、ラッピング鍵検証は実行されない。
【００９６】
２．ハッシュ・サブキーの計算：このプロセスは、１２８ビットのゼロの値を受け取り、暗号処理アルゴリズム（例えば、ＡＥＳ暗号化）を使用して暗号処理する。ラップされた鍵を使用しない機能の場合、実装によって、プログラムが事前に計算されたハッシュ・サブキーを指定できるようにする。ハッシュ・サブキーは、ＧＨＡＳＨ処理において使用され、結果としてメッセージ認証タグを生成する。
【００９７】
ＧＣＭ−ＡＥＳ機能（機能コード１８〜２０）の場合、以下が適用される。
【００９８】
＊  ハッシュ・サブキーによって提供されるフラグ（ＨＳ、汎用レジスタ０のビット５３）が０である場合、ＡＥＳアルゴリズムを使用して、１２８個の２進ゼロのブロックが暗号化される。図１４に示されているように、ＡＥＳアルゴリズム５００は、パラメータ・ブロックからの鍵（Ｋ）フィールド４１４を使用する。得られた１２８ビットのハッシュ・サブキー５０４がパラメータ・ブロックのＨフィールド４０６に配置され、ＨＳフラグが汎用レジスタ０内で１に設定される。
【００９９】
＊  ＨＳフラグが１である場合、パラメータ・ブロック内のＨフィールド４０６がハッシュ・サブキーとして使用される。この場合、ＨフィールドおよびＨＳフラグは変更されない。
【０１００】
ＧＣＭ−暗号化−ＡＥＳ機能（機能コード２６〜２８）の場合、ＨＳフラグは無視される。暗号解読された鍵（Ｋ）を使用する図１４に示されたＡＥＳアルゴリズムを使用して、１２８個の２進ゼロのブロックが暗号化される。この場合、パラメータ・ブロックのＨフィールド４０６およびＨＳフラグは変更されない。
【０１０１】
３．追加認証データのハッシュ処理：いずれかの追加認証データがＧＨＡＳＨアルゴリズムによって処理されて、部分的なメッセージ・タグを形成する。汎用レジスタＲ３＋１内の第３のオペランドの長さがゼロ以外である場合、追加認証データのハッシュ処理が実行される。この場合、命令のＲ３のオペランドによって指定された偶数番号が付けられた汎用レジスタは、ＧＨＡＳＨアルゴリズムを使用したメッセージ認証タグの計算に使用されるデータを含んでいるストレージ位置のアドレスを含む。第３のオペランドのブロックに加えて、ＧＨＡＳＨ機能は、パラメータ・ブロック内のハッシュ・サブキー４０６およびタグ・フィールド４０４を入力値として使用する。
【０１０２】
処理が第３のオペランドの左端から開始されて、１ブロックずつ右に進むかのように、結果が取得される。追加認証データの１つまたは複数の完全な１６バイト・ブロックが残っている場合、処理は図１５に示されているようになり、図１５において、５１０での動作はビット単位の排他的ＯＲであり、５１２での動作はＧＦ（２１２８）上のＧＣＭ乗算演算である。
【０１０３】
１つの実装では、次のいずれかが真である場合に、追加認証データのハッシュ処理が終了する。
【０１０４】
＊  第３のオペランドの長さ未満の、ＣＰＵによって決定されたブロック数が処理された。この場合、それまでに計算されたメッセージ認証が、パラメータ・ブロックのＴフィールド４０４に配置され、汎用レジスタＲ３が、処理された第３のオペランドのバイト数だけインクリメントされ、汎用レジスタＲ３＋１が、同じ量だけデクリメントされ、例えば条件コード３を設定することによって、命令が完了する。
【０１０５】
＊  最後の追加認証データ・フラグ（ＬＡＡＤ、汎用レジスタ０のビット５４）が０であり、第３のオペランドに残っているバイトの数が１６未満である。この場合、それまでに計算されたメッセージ認証タグが（もしあれば）、パラメータ・ブロックのＴフィールド４０４に配置され、汎用レジスタＲ３が、処理された第３のオペランドのバイト数だけ（もしあれば）インクリメントされ、汎用レジスタＲ３＋１が、同じ量だけデクリメントされ、例えば条件コード２を設定することによって、命令が完了する。
【０１０６】
＊  ＬＡＡＤフラグが１であり、第３のオペランドに残っているバイトの数が１〜１５の範囲内である。この場合、以下が実行される。
【０１０７】
−  残っている短いブロックのコピーの右側に十分な２進ゼロが埋められ、ＧＨＡＳＨを使用してハッシュされる完全なブロックを形成する。
【０１０８】
−  汎用レジスタＲ３が、処理された第３のオペランドのバイト数だけインクリメントされ、汎用レジスタＲ３＋１内の第３のオペランドの長さが０に設定される。
【０１０９】
第３のオペランドの最後のブロックの処理は、図１６に示されているようになる。
【０１１０】
＊  ＬＡＡＤフラグが１であり、第３のオペランドに残っているバイトの数が０である。この場合、命令が、例えば条件コード３を伴って完了するのか、それとも処理が、第２のオペランドの暗号処理およびハッシュ処理を続行するのかは、下で説明されているように、モデルに依存する。
【０１１１】
汎用レジスタＲ３＋１内の第３のオペランドの長さが最初に０であり、ＬＡＡＤフラグが１である場合、追加認証データのハッシュ処理は実行されない。この場合、パラメータ・ブロック内のＴフィールド４０４がフェッチされて、変更されずに再び格納されるかどうかは、モデルに依存する。
【０１１２】
４．メッセージの暗号処理およびハッシュ処理：これは、メッセージを暗号化または暗号解読し、暗号化されたデータに基づいてメッセージ・タグを計算するプロセスである。Ｍビット（汎用レジスタ０のビット５６）に応じて、第２のオペランドの各ブロックが、ＧＣＴＲ機能を使用して暗号化されるか、または暗号解読される。暗号化または暗号解読された各結果は、第１のオペランドの位置に配置され、暗号化されたオペランドは、ＧＨＡＳＨ機能を使用してハッシュされる。ＧＣＴＲ処理およびＧＨＡＳＨ処理の結合が、ＧＣＭ機能として説明される。
【０１１３】
概念的には、図１７および図１８に示されているように、処理が第１および第２のオペランドの左端から開始されて、１ブロックずつ右に進むかのように、結果が取得される。しかし、モデルに応じて、動作のユニットは、第１および第２のオペランドの複数のブロックを並列に処理してよく、したがって、各ブロックは、必ずしも左から右への順序でアクセスされなくてよい。さらに、複数のアクセスが１つのブロックに対して行われてよく、暗号化動作の場合、第１のオペランドのブロックが、格納された後に、再びフェッチされてよい。
【０１１４】
ＧＣＴＲ機能は、初期カウンタ値（Ｊ０）４１２の左端の１２バイトを左側に、４バイトのカウンタ（ＣＶ）４０２を右側に連結して形成された１６バイトの初期カウンタ・ブロック（ＩＣＢ）を使用する。ＧＣＴＲは、鍵フィールドも使用する（ＧＣＭ−ＡＥＳ機能の場合、パラメータ・ブロックから直接使用するか、またはＧＣＭ−暗号化−ＡＥＳ機能の場合、暗号解読された鍵を使用する）。ＧＣＴＲによって暗号処理されるブロックごとに、カウンタ値（ＣＶ）が１だけインクリメントされ、カウンタ値のビット位置０からの繰り上げが無視される。その後、ＧＣＴＲ機能は、インクリメントされたカウンタ値と連結されたＪ０の左端の１２バイトから形成された１６バイトのカウンタ・ブロック（ＣＢ：counter block）を使用する。
【０１１５】
ＧＨＡＳＨ機能は、暗号化されたデータ（すなわち、Ｍが０である場合、暗号化された第１のオペランドの結果、またはＭが１である場合、第２のオペランド）、パラメータ・ブロックから、または先行するステップからのタグ（Ｔ）フィールド、およびハッシュ・サブキーを使用する。
【０１１６】
Ｍビットが０である場合（すなわち、第２のオペランドが暗号化されている場合）、完全なブロックのＧＣＭ処理は、図１７に示されているようになる。Ｍビットが１である場合（すなわち、第２のオペランドが暗号解読されている場合）、完全なブロックのＧＣＭ処理は、図１８に示されているようになる。
【０１１７】
１つの例では、次のいずれかが真になるまで、暗号化または暗号解読のいずれかの暗号処理およびハッシュ処理が継続する。
【０１１８】
＊  第２のオペランドの長さ未満の、ＣＰＵによって決定されたブロック数が処理された。この場合、現在のカウンタ値がパラメータ・ブロックのＣＶフィールド４０２に配置され、それまでに計算されたメッセージ認証タグが、パラメータ・ブロックのＴフィールド４０４に配置され、汎用レジスタＲ１およびＲ２が、処理された第２のオペランドのバイト数だけインクリメントされ、汎用レジスタＲ２＋１が、同じ量だけデクリメントされ、例えば条件コード３を設定することによって、命令が完了する。
【０１１９】
＊  最後の平文／暗号文フラグ（ＬＰＣ、汎用レジスタ０のビット５５）が０であり、第２のオペランドに残っているバイトの数が１６未満である。この場合、現在のカウンタ値がパラメータ・ブロックのＣＶフィールド４０２に配置され、それまでに計算されたメッセージ認証タグが（もしあれば）、パラメータ・ブロックのＴフィールド４０４に配置され、汎用レジスタＲ１およびＲ２が、処理された第２のオペランドのバイト数だけ（もしあれば）インクリメントされ、汎用レジスタＲ２＋１が、同じ量だけデクリメントされ、例えば条件コード２を設定することによって、命令が完了する。
【０１２０】
＊  ＬＰＣフラグが１であり、第２のオペランドに残っているバイトの数が１〜１５の範囲内である。この場合、以下が実行される。
【０１２１】
−  第２のオペランドの残りのバイトのコピーの右側に十分な２進ゼロが埋められて、ＧＣＴＲアルゴリズムを使用して暗号処理される完全なブロックを形成し、その結果得られる暗号化または暗号解読されたブロックの左端のバイトが、第１のオペランドの位置に配置される。第１のオペランドの位置に配置されるバイトの数は、第２のオペランドに残っているバイトの数（つまり、１６未満）と同じである。
【０１２２】
−  その後、ＧＨＡＳＨアルゴリズムが暗号文に適用される。Ｍが０である場合、ＧＨＡＳＨアルゴリズムへの入力は、完全なブロックを形成するために右側に十分な２進ゼロが埋められた、第１のオペランドの位置に格納された短いブロックのコピーを含む。Ｍが１である場合、ＧＨＡＳＨアルゴリズムへの入力は、ＧＣＴＲアルゴリズムへの入力（すなわち、完全なブロックを形成するために右側に十分な２進ゼロが埋められた、第２のオペランドの残りのバイトのコピー）と同じである。
【０１２３】
−  現在のカウンタ値が、パラメータ・ブロックのＣＶフィールド４０２に配置され、得られたタグ値がパラメータ・ブロック内に配置され、汎用レジスタＲ１およびＲ２が、処理された第２のオペランドのバイト数だけインクリメントされ、汎用レジスタＲ２＋１が０に設定される。
【０１２４】
第２のオペランドの最後のブロックのＧＣＭ処理は、図１９に示されているようになる。
【０１２５】
＊  ＬＰＣフラグが１であり、第２のオペランドに残っているバイトの数が０である。この場合、命令が、例えば条件コード３を伴って完了するのか、それとも、下で説明されているように最後のメッセージ認証タグのハッシュ処理および暗号化の処理を続行するのかは、モデルに依存する。
【０１２６】
５．最後のメッセージ認証タグのハッシュ処理および暗号化：このプロセスは、追加認証データおよびメッセージの全長をビット単位で受け取り、それにＧＨＡＳＨアルゴリズムを適用し、その後、暗号化された初期カウンタ値とマージして、最終的なメッセージ認証タグを形成する。パラメータ・ブロックからの６４ビットの追加認証データの全長（ＴＡＡＤＬ）フィールドおよび平文または暗号文の全長（ＴＰＣＬ）フィールドの連結を含んでいる１２８ビットの値が、ＧＨＡＳＨ機能を使用してハッシュされる。ＧＨＡＳＨ機能は、連結された長さフィールド、暗号処理およびハッシュ処理の動作において計算されたタグ（Ｔ）フィールド、およびハッシュ・サブキーを使用する。
【０１２７】
次に、ＧＨＡＳＨの得られた１２８ビットの出力が、ＧＣＴＲアルゴリズムによって処理される。暗号処理およびハッシュ処理の動作とは異なり、ＧＣＴＲへの入力カウンタは、パラメータ・ブロックからの初期カウンタ・ブロック（Ｊ０）フィールド４１２である、ということに注意する。得られた１２８ビット値が、パラメータ・ブロック内のタグ（Ｔ）フィールド４０４を置き換え、命令が、例えば条件コード０を伴って完了する。図２０は、最後のタグ値のハッシュ処理および暗号化の一実施形態を示している。
【０１２８】
一実施形態では、命令を発行するプログラムは、正確なＴＡＡＤＬおよびＴＰＣＬの値を（例えば、ビット単位で）提供する役割を担う。さらに別の実施形態では、プログラムは、メッセージの処理の開始時に、ＴＡＡＤＬおよびＴＰＣＬの値を０に設定してよく、ＣＰＵは、命令の１回または複数回の反復される実行がメッセージを処理するときに、これらのフィールドを更新できる。
【０１２９】
命令に関連するその他の詳細を、以下に示す。
【０１３０】
部分的な完了をもたらす条件（例えば、条件コード３）の検出は、モデルに応じて変わり、命令が実行されるたびに異なる番号であってよい。ＣＰＵによって決定されたブロック数は、通常、ゼロ以外である。特定の異常な状況では、この数は０であってよく、進行しないで、条件コード（例えば、３）が設定されてよい。ただし、ＣＰＵは、この進行しないケースの無限の再発を防ぐ。
【０１３１】
次のいずれかが真である場合、結果は予測不可能である。
【０１３２】
＊  第３のオペランドが、追加認証データの処理中に更新されることのあるパラメータ・ブロックのいずれかの部分と破壊的に重複する。
【０１３３】
＊  ＬＡＡＤフラグが１であり、次のいずれかが真である。
【０１３４】
−  第２のオペランドが、暗号処理およびハッシュ処理中に更新されることのあるパラメータ・ブロックのいずれかの部分と破壊的に重複する。
【０１３５】
−  第１のオペランドが、暗号処理およびハッシュ処理中にアクセスされることのあるパラメータ・ブロックのいずれかの部分と破壊的に重複する。
【０１３６】
−  第１のオペランドが第２のオペランドと破壊的に重複するが、これらのオペランドが同じ位置を指定しない。
【０１３７】
処理が左から右に向かって実行されると仮定して、データがある位置に移動された後に、その位置がソースとして使用される場合に、オペランドは、破壊的に重複すると言われる。
【０１３８】
命令によって設定されるさまざまな条件コードの１つの例、およびＬＡＡＤフラグおよびＬＰＣフラグに基づいて得られる第２および第３のオペランドの長さを以下に示す。
【０１３９】
【表３】
2019535036.tif 000005
説明：
−  適用されない
†  汎用レジスタＲ１、Ｒ２、およびＲ３内の第１、第２、および第３のオペランドのアドレスも変化しない。
‡  これらの条件（ＣＣ０の条件と同一である）に対してＣＣ３が設定されるかどうかは、モデルに依存する。
ＣＣ  条件コード
ＬＡＡＤ  最後の追加認証データ・フラグ、汎用レジスタ０のビット５４
ＬＰＣ  最後の平文／暗号文フラグ、汎用レジスタ０のビット５５
第３のＯｐＬ  第３のオペランドの長さ
第２のＯｐＬ  第２のオペランドの長さ
【０１４０】
命令によってＣＶフィールド、Ｔフィールド、およびＨフィールドのみが格納されるとしても、パラメータ・ブロック内のいずれかの位置に関して、格納タイプ・アクセス例外（Store-type access exceptions）が認識されることがある。
【０１４１】
第１のオペランドの位置に関して、および格納されるパラメータ・ブロックの部分に関して、ＰＥＲストレージ変更イベントが認識されることがある。第１、第２、および第３のオペランドの位置に関して、および（パラメータ・ブロックの予備フィールドを含んでいる）パラメータ・ブロックに関して、ＰＥＲゼロ・アドレス検出イベントが認識されることがある。これらの位置のうちの１つまたは複数に関してＰＥＲイベントが検出された場合、ＰＥＲアクセス識別（ＰＡＩＤ：PER access identification）およびＰＥＲ  ＡＳＣＥ  ＩＤ（ＡＩ）においてどの位置が識別されるかは、予測不可能である。
【０１４２】
パラメータ・ブロックに関してＰＥＲストレージ変更イベントが認識された場合、処理された第１、第２、または第３のオペランドの位置のバイト数は、予測不可能である。第１のオペランドの位置に関してストレージ変更ＰＥＲイベントが認識された場合、イベントが報告される前に、４Ｋ未満の追加バイトが第１のオペランドの位置に格納される。
【０１４３】
第３のオペランドの長さが最初に０であるときに、第３のオペランドはアクセスされず、汎用レジスタＲ３内の第３のオペランドのアドレスおよび汎用レジスタＲ３＋１内の第３のオペランドの長さは変更されない。第２のオペランドの長さが最初に０であるときに、第２のオペランドはアクセスされず、汎用レジスタＲ２内の第２のオペランドのアドレスおよび汎用レジスタＲ２＋１内の第２のオペランドの長さは変更されない。ただし、第２および第３のオペランドの長さが両方とも０である場合でも、パラメータ・ブロックはアクセスされてよい。
【０１４４】
Ｒ１フィールドおよびＲ２フィールドの内容が同じである場合、指定されたレジスタの内容が、処理されたバイト数の倍数ではなく、処理されたバイト数だけインクリメントされる。
【０１４５】
このＣＰＵ、他のＣＰＵ、およびチャンネル・プログラムによって観察されるとき、パラメータ・ブロックおよびストレージ・オペランドへの参照は、多重アクセス参照であってよく、これらのストレージ位置へのアクセスは、必ずしもブロック・コンカレントではなく、これらのアクセスまたは参照のシーケンスは定義されない。
【０１４６】
特定の異常な状況では、処理された第１、第２、および第３のオペランドの最後のユニットを反映するようにレジスタを更新しないで、条件コード３を設定することによって、命令の実行が完了してよい。この場合に処理されるユニットのサイズは、状況およびモデルに応じて変わるが、処理されていて、報告されていない第１および第２のオペランドの部分がストレージ内で重複せず、処理されていて、報告されていない第１および第３のオペランドの部分がストレージ内で重複しないように、制限される。いかなる場合でも、該当する場合は、処理されたすべての第１のオペランドの位置に関して、変更ビットが設定され、ＰＥＲストレージ変更イベントが報告される。
【０１４７】
ラッピング鍵検証パターン・レジスタとの暗号化された暗号鍵の比較を実行する機能の場合、比較の結果が不一致になり、各オペランドの長さがゼロ以外であるときに、第１、第２、および第３のオペランドに関してアクセス例外およびＰＥＲゼロ・アドレス検出イベントが認識されるかどうかは、予測不可能である。
【０１４８】
命令の１回の実行において処理される大きさよりも大きいオペランドの部分に関して、アクセス例外が報告されることがあるが、オペランドの長さを超える位置に関してアクセス例外は認識されず、処理されている現在の位置から４Ｋバイトよりも大きく超える位置に関しても、アクセス例外は認識されない。
【０１４９】
１つの例では、次のいずれかが発生した場合に、指定例外が認識され、他の動作は実行されない。
【０１５０】
１．汎用レジスタ０のビット５７〜６３が、割り当てられていないか、またはインストールされていない機能コードを指定する。
【０１５１】
２．Ｒ１フィールド、Ｒ２フィールド、またはＲ３フィールドが、奇数番号が付けられたレジスタまたは汎用レジスタ０を指定する。
【０１５２】
３．Ｒ３フィールドが、Ｒ１フィールドまたはＲ２フィールドのいずれかと同じレジスタを指定する。
【０１５３】
４．機能コードがゼロ以外であり、ＬＰＣフラグが１である（平文または暗号文の最後のブロックが処理されていることを示す）が、ＬＡＡＤフラグが０（一部の追加認証データが処理されていないことを示す）である。
【０１５４】
生成される条件コードの例：
【０１５５】
０  正常完了
【０１５６】
１  検証パターンとの不一致
【０１５７】
２  不完全な処理（ＬＡＡＤフラグが０であるときに、残っている第３のオペランドの長さが、例えば１６未満であるか、またはＬＰＣフラグが０であるときに、残っている第２のオペランドの長さが、例えば１６未満である）
【０１５８】
３  部分的な完了（モデルに依存する制限を超えた）
【０１５９】
プログラム例外の例として、以下が挙げられる。
【０１６０】
＊  アクセス（オペランド２、オペランド３、パラメータ・ブロックのフィールドのフェッチ、オペランド１、カウンタ値、ハッシュ・サブキー、タグの格納）
【０１６１】
＊  演算（メッセージ・セキュリティ・アシスト例外８がインストールされていない場合）
【０１６２】
＊  指定
【０１６３】
＊  トランザクション制約
【０１６４】
さらに、実行優先度に関する例外／完了条件の例として、以下が挙げられる。
【０１６５】
１．〜７．一般的なケースに関する、プログラム割込み条件の優先度と同じ優先度を持つ例外。
【０１６６】
８．無効な機能コードまたは無効なレジスタ番号に起因する指定例外。
【０１６７】
９．ＬＡＡＤフラグが０であるときに、ＬＰＣフラグが１であることに起因する指定例外（機能コードがゼロ以外である場合に適用できる）。
【０１６８】
１０．Ａ．１  パラメータ・ブロックへのアクセスに関するアクセス例外。
【０１６９】
１０．Ａ．２．検証パターンとの不一致に起因する条件コード１。
【０１７０】
１０．Ｂ  第１、第２、または第３のオペランドへのアクセスに関するアクセス例外。
【０１７１】
１１．第３のオペランドの部分的な処理に起因する条件コード３。
【０１７２】
１２．ＬＡＡＤフラグが０であるときに、残っている第３のオペランドの長さが例えば１６未満であることに起因する条件コード２。
【０１７３】
１３．第２のオペランドの部分的な処理に起因する条件コード３。
【０１７４】
１４．ＬＰＣフラグが０であるときに、残っている第２のオペランドの長さが例えば１６未満であることに起因する条件コード２。
【０１７５】
１５．正常完了に起因する条件コード0。
【０１７６】
さらに、１つまたは複数の実施形態では、以下が適用される。
【０１７７】
プログラムは、個々のメッセージを処理するときに、１つの例では、パラメータ・ブロック内の次のフィールドを最初に設定し、条件コード（例えば、０）を伴って命令が完了するまで、これらのフィールドを変更せず、そうしないと、結果がＧＣＭ規格に従わない。
【０１７８】
ａ．  カウンタ値（ＣＶ）：ＣＶフィールドは、初期カウンタ値（Ｊ０）フィールドの右端の４バイトを使用して初期化される。
【０１７９】
ｂ．  タグ（Ｔ）：タグ・フィールドは、０に初期化される。
【０１８０】
ｃ．  ハッシュ・サブキー（Ｈ）：ＫＭＡ−ＧＣＭ−ＡＥＳ機能（コード１８〜２０）の場合、以下が適用される。
【０１８１】
＊  ＨＳフラグが１である場合、プログラムは、事前に計算されたハッシュ・サブキーをＨフィールドに提供する。サブキーは、ＡＥＳアルゴリズムを使用して暗号化された、例えば１６バイトの０を含む。
【０１８２】
＊  ＨＳフラグが０である場合、ＣＰＵは、ＡＥＳアルゴリズムおよびパラメータ・ブロック内の鍵フィールドを使用して、例えば１６バイトの０を暗号化し、その結果をＨフィールドに格納し、ＨＳフラグを１に設定する。
【０１８３】
ＫＭ−暗号化−ＡＥＳ機能（コード２６〜２８）の場合、ＣＰＵは、ハッシュ・サブキーを計算し、ＨフィールドおよびＨＳフラグは変更されない。
【０１８４】
ｄ．  初期カウンタ値（Ｊ０）：初期カウンタ値は、プログラムによって提供される初期化ベクトル（ＩＶ：initialization vector）から生成される。プログラムが例えば９６ビットのＩＶを使用する場合、プログラムは、そのＩＶをＪ０フィールドの左端の１２バイトに格納し、１６進数の０００００００１をＪ０フィールドの右端のバイトに格納する。プログラムが異なる長さを有するＩＶを使用する場合、プログラムは、ＧＨＡＳＨアルゴリズムを使用して、ＩＶの例えば１６バイトのハッシュ値をＪ０フィールドに提供する。
【０１８５】
ｅ．  鍵値（Ｋ）およびラッピング鍵検証パターン（ＷＫａＶＰ）：個々のメッセージを適切に暗号処理するために、鍵を、命令のすべての実行で同じにする。ＫＭ−暗号化−ＡＥＳ機能の場合、ラッピング鍵検証パターン・フィールドも、変更されない。
【０１８６】
最後の平文または暗号文のブロックを処理するとき（すなわち、ＬＰＣフラグが１であるとき）、パラメータ・ブロック内の追加認証データの全長（ＴＡＡＤＬ）フィールドおよび平文／暗号文の全長（ＴＰＣＬ）フィールドが、メッセージ全体の各追加認証データおよび平文または暗号文のビット単位の全長を含む。
【０１８７】
プログラムは、メッセージの信頼性を保証するために、暗号解読されたメッセージのハッシュ・タグを、暗号化されたときのメッセージのハッシュ・タグと比較する役割を担う。
【０１８８】
ＬＡＡＤフラグおよびＬＰＣフラグは、命令の１回の実行でメッセージの一部の構成要素を使用できない場合に、メッセージを暗号処理してハッシュできるようにする手段を提供する。例えば、メッセージの平文または暗号文の部分が、複数のディスクまたはテープのレコードにまたがっていて、メッセージの一部のブロックがストレージに読み取られなかった場合、プログラムは、ＬＰＣフラグが０に設定された命令を発行することによって、メッセージの前のブロックを処理することができる。メッセージの最後の平文または暗号文のブロックを使用できる場合、プログラムは、ＬＰＣフラグが１に設定された命令を発行することによって、メッセージの暗号処理を完了できる。
【０１８９】
ＬＡＡＤフラグまたはＬＰＣフラグのいずれかまたは両方が０であることに起因して、条件コード２が設定された場合、オペランドのアドレスおよび長さを含んでいる汎用レジスタおよびパラメータ・ブロックが、それまでの進行を示すように更新される。ただし、（プログラムが単に命令に分岐して戻り、動作を続行できる）条件コード３とは異なり、プログラムは、必要に応じて命令に分岐して戻る前に、オペランドのアドレスおよび長さ、ならびにＬＡＡＤフラグおよびＬＰＣフラグを更新する役割を担う。条件コード２に応答してプログラムが単に命令に分岐して戻る場合、１つの例では、非生産的なプログラムのループが発生する。
【０１９０】
条件コード３が設定された場合、プログラムが単に命令に分岐して戻り、動作を続行できるように、オペランドのアドレスおよび長さを含んでいる汎用レジスタおよびパラメータ・ブロックが、通常は更新される。
【０１９１】
ガロア／カウンタ・モードのさまざまな機能に関するその他の詳細が、下で説明される。これらは例に過ぎず、U.S. National Institute of Science and Technology (NIST) Special Publication 800-38D, Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMACに記載されている。変形が行われてよく、あるいはガロア／カウンタ・モードまたはその他の暗号モードあるいはその両方に関連するその他の機能が使用されてよく、あるいはその両方が行われてよい。
【０１９２】
以下の機能を理解するために、次のシンボルが説明される。
【０１９３】
変数：
【０１９４】
Ａ  追加認証データ。
【０１９５】
Ｃ  暗号文。
【０１９６】
Ｈ  ハッシュ・サブキー。
【０１９７】
ＩＣＢ  初期カウンタ・ブロック。
【０１９８】
ＩＶ  初期化ベクトル。
【０１９９】
Ｋ  ブロック暗号鍵。
【０２００】
Ｐ  平文。
【０２０１】
Ｒ  ブロック乗算演算（block multiplication operation）用のアルゴリズム内の定数。
【０２０２】
Ｔ  認証タグ。
【０２０３】
ｔ  認証タグのビット長。
【０２０４】
演算および機能：
【０２０５】
０ｓ  「０」のビットから成るビット列。
【０２０６】
ＣＩＰＨＫ（Ｘ）  ブロックＸに適用される鍵Ｋの下でのブロック暗号の前方暗号機能（forward cipher function）の出力。
【０２０７】
ＧＣＴＲＫ（ＩＣＢ，Ｘ）  初期カウンタ・ブロックＩＣＢを使用して、鍵Ｋがビット列Ｘに適用される、特定のブロック暗号のＧＣＴＲ機能の出力。
【０２０８】
ＧＨＡＳＨＨ（Ｘ）  ビット列Ｘに適用されるハッシュ・サブキーＨの下でのＧＨＡＳＨ機能の出力。
【０２０９】
ｉｎｃｓ（Ｘ）  １モジュロ２ｓによる、整数の２進表現と見なされる、ビット列Ｘの右端のｓビットのインクリメントの出力。
【０２１０】
ｉｎｔ（Ｘ）  ２進表現であるビット列Ｘに対応する整数。
【０２１１】
ｌｅｎ（Ｘ）  ビット列Ｘのビット長。
【０２１２】
ＬＳＢｓ（Ｘ）  ビット列Ｘの右端のｓビットから成るビット列。
【０２１３】
ＭＳＢｓ（Ｘ）  ビット列Ｘの左端のｓビットから成るビット列。
【０２１４】
【数１】
2019535036.tif 000006
実数ｘ以上の最小の整数。
【０２１５】
［ｘ］ｓ  ｘ＜２ｓである場合の、ｓビットの列としての非負整数ｘの２進表現。
【０２１６】
Ｘ＞＞１  ビット列Ｘの右端のビットを切り捨て、「０」のビットを左側の先頭に追加して得られるビット列。
【０２１７】
Ｘ｜｜Ｙ  ２つのビット列ＸおよびＹの連結。
【０２１８】
【数２】
2019535036.tif 000007
同じ長さの２つのビット列ＸおよびＹのビット単位の排他的ＯＲ。
【０２１９】
Ｘ∃Ｙ  特定の２進ガロア・フィールドの要素と見なされる、２つのブロックＸおよびＹの積。
【０２２０】
Ｘｉ  正の整数ｉに関する、積「・」の下でのＸのｉ乗
【０２２１】
ｘ・ｙ  ２つの整数ｘおよびｙの積。
【０２２２】
例えば、ブロック（Ｘ・Ｙ）の乗算の一例として、以下が挙げられる。
【０２２３】
前提条件：
【０２２４】
Ｒ＝１１１００００１｜｜０１２０とする。
【０２２５】
入力：
【０２２６】
ブロックＸ、Ｙ。
【０２２７】
出力：
【０２２８】
ブロックＸ・Ｙ
【０２２９】
ステップ：
【０２３０】
１．Ｘ０Ｘ１．．．Ｘ１２７は、Ｘ内のビットのシーケンスを示すものとする。
【０２３１】
２．Ｚ０＝０１２８およびＶ０＝Ｙとする。
【０２３２】
３．ｉ＝０〜１２７に関して、ブロックＺｉ＋１およびＶｉ＋１を次のように計算する。
【０２３３】
Ｚｉ＋１＝Ｚｉ    ［ｘｉ＝０の場合、または］
【０２３４】
【数３】
2019535036.tif 000008
［ｘｉ＝１の場合］
【０２３５】
Ｖｉ＋１＝Ｖｉ＞＞１    ［ＬＳＢｉ（Ｖｉ）＝０の場合、または］
【０２３６】
【数４】
2019535036.tif 000009
［ＬＳＢｉ（Ｖｉ）＝１の場合］
【０２３７】
４．Ｚ１２８を返す。
【０２３８】
ＧＣＭ暗号化機能の一例を、下にさらに詳細に示す。
【０２３９】
アルゴリズム： ＧＣＭ−ＡＥＫ（ＩＶ，Ｐ，Ａ）
【０２４０】
前提条件：
【０２４１】
１２８ビットのブロック・サイズを使用する承認されたブロック暗号ＣＩＰＨ。
【０２４２】
鍵Ｋ。
【０２４３】
サポートされる入力／出力の長さの定義。
【０２４４】
鍵に関連付けられたサポートされるタグの長さｔ。
【０２４５】
入力：
【０２４６】
初期化ベクトルＩＶ（サポートされる長さを有する）。
【０２４７】
平文Ｐ（サポートされる長さを有する）。
【０２４８】
追加認証データＡ（サポートされる長さを有する）。
【０２４９】
出力：
【０２５０】
暗号文Ｃ。
【０２５１】
認証タグＴ。
【０２５２】
ステップ：
【０２５３】
１．Ｈ＝ＣＩＰＨＫ（０１２８）とする。
【０２５４】
２．ブロックＪ０を次のように定義する。
【０２５５】
ｌｅｎ（ＩＶ）＝９６の場合、Ｊ０＝ＩＶΨ０３１Ψ１とする。
【０２５６】
ｌｅｎ（ＩＶ）γ９６の場合、
【数５】
2019535036.tif 000010
とし、
【０２５７】
Ｊ０＝ＧＨＡＳＨＨ（ＩＶΨ０ｓ＋６４Ψ［ｌｅｎ（ＩＶ）６４］）とする。
【０２５８】
３．Ｃ＝ＧＣＴＲＫ（ｉｎｃ３２（Ｊ０），Ｐ）とする。
【０２５９】
４．
【数６】
2019535036.tif 000011
とし、
【０２６０】
【数７】
2019535036.tif 000012
とする
【０２６１】
５．ブロックＳを次のように定義する。
【０２６２】
Ｓ＝ＧＨＡＳＨＨ（ＡΨ０ＶΨＣΨ０ｕΨ［ｌｅｎ（Ａ）］６４Ψ［ｌｅｎ（Ｃ）］６４）。
【０２６３】
６．Ｔ＝ＭＳＢｔ（ＧＣＴＲＫ（Ｊ０，Ｓ））とする。
【０２６４】
７．（Ｃ，Ｔ）を返す。
【０２６５】
ＧＣＭ暗号解読機能の一実施形態が下で説明される。
【０２６６】
アルゴリズム：ＧＣＭ−ＡＤＫ（ＩＶ，Ｃ，Ａ，Ｔ）
【０２６７】
前提条件：
【０２６８】
上の暗号化の場合と同じ
【０２６９】
入力：
【０２７０】
初期化ベクトルＩＶ。
【０２７１】
暗号文Ｃ。
【０２７２】
追加認証データＡ。
【０２７３】
認証タグＴ。
【０２７４】
出力：
【０２７５】
平文Ｐまたは信頼性がないことを示すＦＡＩＬ。
【０２７６】
ステップ：
【０２７７】
１．ＩＶ、Ａ、またはＣのビット長がサポートされていない場合、またはｌｅｎ（Ｔ）γｔの場合、ＦＡＩＬを返す。
【０２７８】
２．Ｈ＝ＣＩＰＨＫ（０１２８）とする。
【０２７９】
３．ブロックＪ０を次のように定義する。
【０２８０】
ｌｅｎ（ＩＶ）＝９６の場合、Ｊ０＝ＩＶΨ０３１Ψ１とする。
【０２８１】
ｌｅｎ（ＩＶ）γ９６の場合、
【数８】
2019535036.tif 000013
とし、
【０２８２】
Ｊ０＝ＧＨＡＳＨＨ（ＩＶΨ０ｓ＋６４Ψ［ｌｅｎ（ＩＶ）６４］）とする。
【０２８３】
４．Ｐ＝ＧＣＴＲＫ（ｉｎｃ３２（Ｊ０），Ｃ）とする。
【０２８４】
５．
【数９】
2019535036.tif 000014
とし、
【数１０】
2019535036.tif 000015
とする。
【０２８５】
６．ブロックＳを次のように定義する。
【０２８６】
Ｓ＝ＧＨＡＳＨＨ（ＡΨ０ＶΨＣΨ０ｕΨ［ｌｅｎ（Ａ）］６４Ψ［ｌｅｎ（Ｃ）］６４）。
【０２８７】
７．Ｔ’＝ＭＳＢｔ（ＧＣＴＲＫ（Ｊ０，Ｓ））とする。
【０２８８】
８．Ｔ＝Ｔ’である場合、Ｐを返し、そうでない場合、ＦＡＩＬを返す。
【０２８９】
ガロア・ハッシュ（ＧＨＡＳＨ）機能の一実施形態が下で説明される。
【０２９０】
アルゴリズム：ＧＨＡＳＨＨ（Ｘ）
【０２９１】
前提条件：
【０２９２】
ブロックＨ、ハッシュ・サブキー。
【０２９３】
入力：
【０２９４】
何らかの正の整数ｍに関してｌｅｎ（Ｘ）＝１２８ｍとなる、ビット列Ｘ。
【０２９５】
出力：
【０２９６】
ブロックＧＨＡＳＨＨ（Ｘ）。
【０２９７】
ステップ：
【０２９８】
１．Ｘ１，Ｘ２，．．．，Ｘｍ−１，Ｘｍは、Ｘ＝Ｘ１ΨＸ２Ψ，．．．，ΨＸｍ−１ΨＸｍとなるようなブロックの一意のシーケンスを示すものとする。
【０２９９】
２．Ｙ０を「ゼロ・ブロック」０１２８（すなわち、１２８ビットの０）とする。
【０３００】
３．ｉ＝１，．．．，ｍに関して、Ｙｉ＝（Ｙｉ−１／Ｘｉ）∃Ｈとする。
【０３０１】
４．Ｙｍを返す。
【０３０２】
さらに、ガロア・カウンタ（ＧＣＴＲ）機能の一実施形態が下で説明される。
【０３０３】
アルゴリズム：ＧＣＴＲＫ（ＩＣＢ，Ｘ）
【０３０４】
前提条件：
【０３０５】
１２８ビットのブロック・サイズを使用する承認されたブロック暗号ＣＩＰＨ。
【０３０６】
鍵Ｋ。
【０３０７】
入力：
【０３０８】
初期カウンタ・ブロックＩＣＢ。
【０３０９】
任意の長さのビット列Ｘ。
【０３１０】
出力：
【０３１１】
ビット長ｌｅｎ（Ｘ）のビット列Ｙ。
【０３１２】
ステップ：
【０３１３】
１．Ｘが空の列である場合、Ｙとして空の列を返す。
【０３１４】
２．
【数１１】
2019535036.tif 000016
とする。
【０３１５】
３．Ｘ1，Ｘ2，．．．，Ｘｎ-1，Ｘｎ＊は、次のようになるビット列の一意のシーケンスを示すものとする。
【０３１６】
Ｘ＝Ｘ1ΨＸ2Ψ．．．ΨＸｎ-1ΨＸｎ＊。
【０３１７】
Ｘ1，Ｘ2，．．．，Ｘｎ-1は完全なブロックである。
【０３１８】
４．ＣＢ１＝ＩＣＢとする。
【０３１９】
５．ｉ＝２〜ｎに関して、ＣＢｉ＝ｉｎｃ３２（ＣＢｉ−１）とする。
【０３２０】
６．ｉ＝１〜ｎ−１に関して、Ｙｉ＝Ｘｉ／ＣＩＰＨＫ（ＣＢｉ）とする。［最後を除くすべての完全なブロックに関する］
【０３２１】
７．Ｙｎ＊＝Ｘｎ＊／ＭＳＢｌｅｎ（Ｘｎ＊）（ＣＩＰＨＫ（ＣＢｎ））とする。［最後の完全なブロックまたは部分的なブロックに関する］
【０３２２】
８．Ｙ＝Ｙ1ΨＹ2Ψ．．．ΨＹｎ＊とする。
【０３２３】
９．Ｙを返す。
【０３２４】
認証命令を含む暗号メッセージの図解表現が図２１に示されている。図に示されているように、認証命令を含む暗号メッセージ３００は、暗号処理（暗号化または暗号解読）された結果を含んでいる第１のオペランド６００、暗号処理（暗号化または暗号解読）されてハッシュされるメッセージを含んでいる第２のオペランド６０２、および認証（ハッシュ）されるが暗号処理されない追加データを含んでいる第３のオペランド６０４を含む。
【０３２５】
認証命令を含む暗号メッセージの一実施形態に関連付けられた処理に関する詳細が、図２２〜２６を参照してさらに説明される。
【０３２６】
図２２を参照すると、最初に、命令によって使用される汎用レジスタ０に含まれる機能コードが有効かどうかに関する判定が行われる（照会７００）。機能コードが有効でない場合、エラーが提供されてよく（ステップ７０２）、命令の処理が完了する。そうではなく、機能コードが有効である場合、第１、第２、または第３のレジスタ・フィールド（すなわち、Ｒ１、Ｒ２、Ｒ３）内で指定されたレジスタが、奇数番号が付けられたレジスタであるかどうかに関する判定がさらに行われる（照会７０４）。それらのレジスタのうちの１つが奇数番号が付けられたレジスタである場合、１つの例では、エラーが提供され（ステップ７０６）、処理が完了する。そうでない場合、Ｒ３フィールド内で指定されたレジスタがＲ１フィールド内で指定されたレジスタに等しいかどうか、またはＲ３フィールド内で指定されたレジスタがＲ２フィールド内で指定されたレジスタに等しいかどうかに関する判定がさらに行われる（照会７０８）。Ｒ１またはＲ２内で指定されたレジスタがＲ３内で指定されたレジスタに等しい場合、１つの例ではエラーが指定されてよく（ステップ７１０）、処理が完了する。そうでない場合、最後の平文／暗号文フラグが指定された値（１など）に等しいかどうか、および最後の追加認証データ・フラグが選択された値（０など）に設定されているかどうかに関するチェックがさらに行われる。これらが両方とも真である場合、エラーが提供されてよく（ステップ７１４）、命令の処理が完了する。そうではなく、最後の平文／暗号文制御が１に等しくなく、最後の追加認証データ制御が０に等しくない場合、機能コードが０に等しいかどうかに関するチェックが行われる（照会７１６）。機能コードが０である場合、問い合わせ機能が実行され、有効な機能がパラメータ・ブロックに格納される（ステップ７１８）。１つの例では、例えば０の条件コードが設定される（ステップ７２０）。しかし、機能コードが０でない場合、処理は、図２３を参照して説明されているように、ハッシュ・サブキーの生成を続行する。
【０３２７】
図２３を参照すると、暗号化された鍵を使用しない暗号処理機能の場合、プログラムは、プログラム自身のハッシュ・サブキーをパラメータ・ブロックに提供するか、または命令にハッシュ・サブキーを生成させてよい。暗号化された鍵を使用する暗号処理機能の場合、命令がハッシュ・サブキーを生成し、プログラムによって提供されたハッシュ・サブキーは無視される。したがって、一実施形態では、機能コードが暗号化されていない鍵の機能を指定している（すなわち、指定された値（２０など）以下の機能コードである）かどうかに関する判定が行われる（照会７３０）。機能コードが暗号化されていない鍵の機能を指定している（すなわち、機能コードが例えば２０以下である）場合、プログラムがハッシュ・サブキーを提供したかどうかに関する判定が行われる（照会７３２）。プログラムがハッシュ・サブキーを提供しなかった（例えば、ＨＳ制御が０である）場合、ハッシュ・サブキーが生成される（ステップ７３４）。例えば、Ｈ＝ＡＥＳ（０１２８，鍵）である。さらに、ハッシュ・タグがパラメータ・ブロック（ＰＬ．Ｈ）に格納され、ハッシュ・サブキーによって提供される制御（ＨＳ）が１に設定される（ステップ７３６）（説明および図におけるＰＬは、パラメータ・ブロックを指している）。
【０３２８】
照会７３２に戻り、プログラムがハッシュ・サブキーを提供した場合（例えば、ＨＳ制御が１である場合）、図２４を参照して説明されているように、処理が追加認証データのハッシュ処理を続行する。
【０３２９】
照会７３０に戻り、機能コードが暗号化された鍵を使用する機能を指定している場合（例えば、機能コードが２０より大きい場合）、機能はラッピング鍵の機能であり、Ｈが計算される（例えば、Ｈ＝ＡＥＳ（０１２８，鍵））（ステップ７３８）が、保存されず、図２４を参照して説明されているように、処理が追加認証データのハッシュ処理を続行する。
【０３３０】
図２４を参照すると、一実施形態では、モデルに依存するタイムアウトがあったかどうかに関する判定が行われる（照会７４０）。モデルに依存するタイムアウトがあった場合、１つの例では、処理が例えば３の条件コードを伴って終了する（ステップ７４２）。しかし、モデルに依存するタイムアウトが発生しなかった場合、オペランド３の長さ（Ｏｐ３Ｌ）が指定された値（１６など）より大きいかどうかに関する判定が行われる（照会７４４）。オペランド３の長さが１６より大きい場合、完全な追加認証データ・ブロックを処理に使用できる（ステップ７４６）。例えば、パラメータ・ブロック（ＰＬ．Ｔ）内のタグ４０４がＨ∃（ＰＬ．Ｔ／＊Ｏｐ３Ａ）に設定され、＊はＯｐ３Ａが第３のオペランド（Ｏｐ３Ａ）へのポインタであることを示し（すなわち、パラメータ・ブロック内のタグ・フィールド（Ｔ）と、Ｒ３によって指定された汎用レジスタが指しているストレージとの排他的ＯＲが計算される）、一例として、１６バイトがオペランド３（Ｏｐ３Ａ）のアドレスに追加され、一例として、１６バイトがオペランド３の長さ（Ｏｐ３Ｌ）から差し引かれる。Ｏｐ３Ｌは、例えばオペランド３のバイト単位の長さである。その後、処理は照会７４０を続行する。
【０３３１】
照会７４４に戻り、オペランド３の長さが指定された値（例えば、１６）以下である場合、フラグ・フィールドの最後の追加認証データ制御の判定が行われる（照会７５０）。制御の値が０である場合、一実施形態では、条件コード（条件コード２など）が設定される（ステップ７５２）。これは、処理される追加認証データが存在することを示す。
【０３３２】
照会７５０に戻り、制御が１である場合、オペランド３の長さ（Ｏｐ３Ｌ）のチェックがさらに行われる（照会７５４）。この長さが０より大きい場合、パラメータ・ブロックのタグ４０４が設定され（例えば、ＰＬ．Ｔ＝Ｈ∃（ＰＬ．Ｔ／（＊Ｏｐ３Ａ［Ｏｐ３Ｌ］Ψゼロ［１６−Ｏｐ３Ｌ］）））、オペランド３のアドレスが、オペランド３の長さだけインクリメントされ、オペランド３の長さが０に設定される（ステップ７５６）。その後、処理が、図２５を参照して説明されているように、平文／暗号文の処理を続行する。さらに、オペランド３の長さが０である場合（照会７５４）、処理が、図２５の平文／暗号文の処理を続行する。
【０３３３】
図２５を参照すると、モデルに依存するタイムアウトがあったかどうかに関する判定が行われる（照会７６０）。モデルに依存するタイムアウトがあった場合、処理が例えば３の条件コードを伴って完了する（ステップ７６２）。モデルに依存するタイムアウトがなかった場合、オペランド２の長さ（Ｏｐ２Ｌ）が指定された値（１６など）より大きいかどうかに関する判定が行われる（照会７６４）。オペランド２の長さが指定された値より大きい場合、ＣＢ＝ＰＬ．Ｊ０［１２］Ψ＋＋ＰＬ．ＣＶ（＋＋はインクリメントを示し、パラメータ・ブロック内のカウンタ値がインクリメントされる）、および＊Ｏｐ１Ａ＝ＡＥＳ（鍵，ＣＢ）／＊Ｏｐ２Ａ、ＰＬ．Ｔ＝Ｈ∃（ＰＬ．Ｔ／（Ｍ？＊Ｏｐ２Ａ：＊Ｏｐ１Ａ））（ステップ７６６）となる。（１つの例では、テキスト（Ｍ？＊Ｏｐ２Ａ：＊Ｏｐ１Ａ）は、Ｍが真または偽（１または０）のいずれであるかに関する判定が行われることを示す。真である場合、＊Ｏｐ２Ａが第２のオペランド内の入力暗号文へのポインタとして使用される。偽である場合、＊Ｏｐ１Ａが、第１のオペランド内の出力暗号文へのポインタである。）さらに、オペランド１（Ｏｐ１Ａ）のアドレスが、例えば１６バイトだけインクリメントされ、オペランド２（Ｏｐ２Ａ）のアドレスが、例えば１６バイトだけインクリメントされ、オペランド２の長さ（Ｏｐ２Ｌ）が、例えば１６バイトだけデクリメントされる（ステップ７６６）。その後、処理が照会７６０に進む。
【０３３４】
照会７６４に戻り、オペランド２の長さが指定された値（例えば、１６）以下である場合、フラグ・フィールドの最後の平文／暗号文制御のチェックが行われる（照会７６８）。フラグが０に等しい場合、指定された条件コード（例えば、条件コード２）が設定される（ステップ７７０）。これは、処理される平文／暗号文がさらに存在することを示す。しかし、最後の平文／暗号文制御が１に設定された場合、オペランド２の長さに関する判定がさらに行われる（照会７７２）。この長さが０より大きい場合、ＣＢ＝ＰＬ．Ｊ０［１２］Ψ＋＋ＰＬ．ＣＶ、および＊Ｏｐ１Ａ＝ＡＥＳ（ＰＬ．鍵，ＣＢ）／（＊Ｏｐ２Ａ［Ｏｐ２Ｌ］Ψゼロ［１６−Ｏｐ２Ｌ）、ＰＬ．Ｔ＝Ｈ∃（ＰＬ．Ｔ／（Ｍ？＊Ｏｐ２Ａ：＊Ｏｐ１Ａ［Ｏｐ２Ｌ］Ψゼロ［１６＝Ｏｐ２Ｌ］））となる（ステップ７７４）。さらに、オペランド１およびオペランド２のアドレスが、オペランド２の長さだけ増やされ、その後、オペランド２の長さが０に設定される（ステップ７７４）。その後、またはオペランド２の長さが０である場合（照会７７２）、処理が、図２６を参照して説明されているように、最後のタグの処理を続行する。
【０３３５】
図２６を参照すると、タグがＨ∃（ＰＬ．Ｔ／（ＰＬ．ＴＡＡＤＬΨＰＬ．ＴＰＣＬ）に設定され、追加認証データの最大ビット長および暗号文最大ビット長に対してハッシュ機能（例えば、ＧＨＡＳＨ）が実行される。その後、タグがＡＥＳ（ＰＬ．鍵，ＰＬ．Ｊ０）／ＰＬ．Ｔに設定され、最後のハッシュ値と、暗号化された初期カウンタ（Ｊ０）との排他的ＯＲが計算されて、タグの結果を形成する（ステップ７８０）。（すなわち、前に計算されたタグと、２つのビット長フィールドの連結との排他的ＯＲが計算され、その結果に対してＧＨＡＳＨが実行される。その後、Ｊ０フィールドが暗号化され、その結果と、上の計算結果との排他的ＯＲが計算され、最後のタグを形成する。）その後、処理が完了し、例えば０の条件コードが設定される（ステップ７８２）。
【０３３６】
本明細書では、ハッシュ処理および暗号処理を単一の命令（例えば、単一の設計されたマシン命令）に結合する機能が説明されており、この機能は、割込み可能な命令を適切に再実行してメッセージの処理を続行できることを保証するための制御をさらに含む。再実行の１つの理由が、下で説明される。
【０３３７】
１つの実装では、ｚ／Ａｒｃｈｉｔｅｃｔｕｒｅによって定義された暗号処理命令は、６４ビット・レジスタを使用してメッセージの長さを定義し、したがって、メッセージの長さは、最大１８，４４６，７４４，０７３，７０９，５５１，６１６（１６Ｅ）バイトになることができる。ＧＣＭの仕様は、メッセージの長さを、６８，７１９，４７６，７３６（６４Ｇ）バイト、すなわち、３２ビット・カウンタの最大値に１２８ビット（１６バイト）のメッセージ・ブロックのサイズを掛けた値に制限する。しかし、著しく長時間の命令の実行を防ぐために、いずれかの個別の暗号処理命令の処理が、非常に小さい量（通常は、最大で４，０９６バイト）に制限される。暗号処理命令が完了するときに、暗号処理命令は、処理されたバイト数に基づいて、メッセージのオペランドのアドレスおよび長さを指定するレジスタを更新する。命令がメッセージを部分的にしか処理しない場合、命令は、指示的な条件コード（例えば、ＣＣ３）を設定することによって完了する。命令がメッセージを完全に処理する場合、命令は、代替の指示的な条件コード（例えば、ＣＣ０）を設定することによって完了する。
【０３３８】
本明細書に記載されているように、認証命令を含む暗号メッセージは、非常に大きいメッセージに対応することができるが、１回の実行ではメッセージの一部しか処理できない。認証命令を含む暗号メッセージは、例えばプログラムによって指定される２つの制御の組み合わせならびに追加認証データおよびメッセージを含んでいるオペランドの残りの長さに基づいて、追加認証データのハッシュ処理ならびにメッセージの暗号処理およびハッシュ処理における進行を区別する。
【０３３９】
＊  最後の追加認証データ（ＬＡＡＤ）制御は、プログラムが追加認証データのオペランド全体を提供したかどうかを示す。
【０３４０】
＊  最後の平文／暗号文（ＬＰＣ）フラグは、プログラムが、暗号処理および認証されるメッセージ・テキスト全体を提供したかどうかを示す。
【０３４１】
命令は、各オペランドの長さを指定する汎用レジスタ内の値と共に、ＬＡＡＤ制御およびＬＰＣ制御の組み合わせに基づいて、入力に対していくつかのチェックを実行し、矛盾する制御を拒否することができる。
【０３４２】
ハッシュ処理および暗号処理を単一の命令に結合することによって、追加認証データをハッシュするために別の命令を実行することが回避され、ハッシュおよび暗号処理のためにメッセージのオペランドを複数回フェッチすることが回避され、結合された動作が、ハードウェア・コプロセッサによって効率的に実行され得る。プログラムは、単一の命令を使用することによって、０を暗号化してハッシュ・サブキーを形成することと、ＴＡＡＤＬおよびＴＰＣＬをハッシュすることと、カウンタとしてＪ０を使用して最後のタグを暗号化およびハッシュすることとを実行するために、命令を別々に発行する必要がない。
【０３４３】
認証命令を含む暗号メッセージの実行を含む、コンピューティング環境内の処理を容易にする一実施形態が、図２７〜２８を参照して説明される。
【０３４４】
図２７を参照すると、一実施形態では、暗号処理および認証を含む複数の動作を実行するための命令が取得され（ステップ８００）、この命令が実行される（ステップ８０２）。この実行することは、例えば、命令によって提供されたデータの１つのセットを暗号処理して暗号処理されたデータを取得することと（ステップ８０４）、暗号処理されたデータを指定された位置に配置することと（ステップ８０６）、命令によって提供されたデータの追加のセットを認証することであって、この認証することが、メッセージ認証タグの少なくとも一部を生成する、認証することと（ステップ８０８）、メッセージ認証タグの少なくとも一部を選択された位置に格納すること（ステップ８１０）とを含む。さらに別の実施形態では、この実行することは、暗号処理されたデータを認証することをさらに含む（ステップ８１２）。
【０３４５】
１つの例では、データの追加のセットは、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり（８１４）、この実行することは、データの追加のセットが、認証されるデータの最後のブロックを含んでいるかどうかを判定すること（ステップ８１６）と、データの追加のセットが、認証されるデータの最後のブロックを含んでいるかどうかに基づいて認証を実行すること（ステップ８１８）とをさらに含む。
【０３４６】
この判定することは、例えば、命令の最後の追加認証データ制御をチェックして、データの追加のセットが、認証されるデータの最後のブロックを含んでいるかどうかを判定することを含む（ステップ８２０）。
【０３４７】
さらに、１つの例では、図２８を参照すると、データの１つのセットは、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり（８２２）、この実行することは、データの１つのセットが、暗号処理されるデータの最後のブロックを含んでいるかどうかを判定すること（ステップ８２４）と、データの１つのセットが、暗号処理されるデータの最後のブロックを含んでいるかどうかに基づいて暗号処理を実行すること（ステップ８２６）とをさらに含む。
【０３４８】
この判定することは、例えば、命令の最後のテキスト制御をチェックして、データの１つのセットが、暗号処理されるデータの最後のブロックを含んでいるかどうかを判定することを含む（ステップ８２８）。
【０３４９】
例として、暗号処理することは、選択された値に設定されている命令によって提供される制御に基づいて、データの１つのセットを暗号化すること（ステップ８３０）、または特定の値に設定されている命令によって提供される制御に基づいて、データの１つのセットを暗号解読すること（ステップ８３２）を含む。
【０３５０】
一実施形態では、データの追加のセットを認証することは、ハッシュ技術を使用して、メッセージ認証タグの少なくとも一部を生成すること含む（ステップ８３４）。さらに、一実施形態では、ハッシュ技術は、選択された値に設定されている命令の、ハッシュ・サブキーによって提供される制御に基づいて、命令によって使用されるパラメータ・ブロックに格納されるハッシュ・サブキーを使用する（ステップ８３６）。
【０３５１】
一例として、データの１つのセットは、メッセージの少なくとも一部を含み、データの追加のセットは、メッセージのルーティング情報を含む（８４０）。
【０３５２】
本明細書に記載されているように、１つの例では、追加認証データのメッセージ・ダイジェストを生成する（すなわち、ハッシュする）ことと、メッセージを暗号処理することと、暗号化されたメッセージのメッセージ・ダイジェストを生成することとを実行するように構成された単一の命令が提供される。他の例では、複数の機能のうちの１つまたは複数が提供されないことがある。
【０３５３】
１つの例では、命令は以下を使用する。
【０３５４】
プログラムがプログラム自身のハッシュ・サブキーを提供したことを示すことができるようにする、ＨＳフラグ。これによって、同じハッシュ・サブキーを使用する場合に、性能上の利益をもたらす。ハッシュ・サブキーは、暗号化された鍵の機能の場合に計算される（格納されない）。
【０３５５】
追加認証データの最後のブロックが提供されたことを示すＬＡＡＤフラグ。これによって、単一の命令が、追加認証データの最初のブロック、中間のブロック、および最後のブロックを処理できるようにする。
【０３５６】
平文／暗号文の最後のブロックが提供されたことを示すＬＰＣフラグ。これによって、単一の命令が、平文／暗号文の最初のブロック、中間のブロック、および最後のブロックを処理できるようにし、ＬＡＡＤと共に、命令の使用に関する何らかの妥当性チェックを実現する。
【０３５７】
本発明の態様は、データの暗号化／暗号解読または認証あるいはその両方などの、セキュリティに関連付けられた処理を含むが、これに限定されない、コンピューティング環境内の処理を改善するコンピュータ技術に密接に関係している。
【０３５８】
データ暗号化標準（ＤＥＳ：Data Encryption Standard）などの他の暗号化技術、またはＳＨＡ（セキュア・ハッシュ・アルゴリズム：Secure Hash Algorithm）−２、ＳＨＡ−３などの他のハッシュ処理技術、あるいはその両方を使用することを含むが、これに限定されない、多くの変形が可能である。
【０３５９】
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
【０３６０】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスにすることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー（Ｒ）・ディスク、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：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）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【０３６３】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【０３６４】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【０３６５】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックに指定される機能／動作を実施するように、コンピュータ実装プロセスを生成すべく、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれ、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で一連の動作可能なステップを実行させるものであってもよい。
【０３６６】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための１つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された２つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【０３６７】
上に加えて、顧客の環境の管理を提供するサービス・プロバイダによって、１つまたは複数の態様が提供されること、デプロイされること、管理されること、サービス提供されることなどが行われてよい。例えば、サービス・プロバイダは、１人または複数人の顧客のために１つまたは複数の態様を実行するコンピュータ・コードまたはコンピュータ・インフラストラクチャあるいはその両方を作成すること、維持すること、サポートすることなどを行うことができる。その見返りとして、サービス・プロバイダは、例えばサブスクリプションまたは料金契約あるいはその両方の下で、顧客から支払いを受け取ってよい。追加または代替として、サービス・プロバイダは、１つまたは複数のサード・パーティへの広告コンテンツの販売から支払いを受け取ってよい。
【０３６８】
１つの態様では、１つまたは複数の実施形態を実行するために、アプリケーションがデプロイされてよい。１つの例として、アプリケーションのデプロイは、１つまたは複数の実施形態を実行するよう動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【０３６９】
さらに別の態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラストラクチャがデプロイされてよく、このコンピューティング・システムでは、コンピューティング・システムと組み合わせたコードが、１つまたは複数の実施形態を実行できる。
【０３７０】
さらに別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含んでいる、コンピューティング・インフラストラクチャを統合するためのプロセスが提供されてよい。コンピュータ・システムは、コンピュータ可読媒体を備え、このコンピュータ可読媒体では、コンピュータ媒体が１つまたは複数の実施形態を含む。コンピュータ・システムと組み合わせたコードは、１つまたは複数の実施形態を実行できる。
【０３７１】
上ではさまざまな実施形態が説明されたが、それらは単なる例である。例えば、１つまたは複数の実施形態を組み込んで使用するために、他のアーキテクチャのコンピューティング環境が使用され得る。さらに、異なる命令、命令形式、命令フィールド、または命令値、あるいはその組み合わせが使用されてよい。多くの変形が可能である。
【０３７２】
さらに、他の種類のコンピューティング環境が、恩恵を受けることができ、使用され得る。一例として、プログラム・コードの格納または実行あるいはその両方を行うのに適した、システム・バスを介して直接的または間接的にメモリ素子に結合された少なくとも２つのプロセッサを含んでいる、データ処理システムを使用できる。これらのメモリ素子は、例えば、プログラム・コードの実際の実行時に使用されるローカル・メモリ、バルク・ストレージ、および実行時にバルク・ストレージからコードが取得されなければならない回数を減らすために少なくとも一部のプログラム・コードを一時的に格納するキャッシュ・メモリを含む。
【０３７３】
入出力デバイスまたはＩ／Ｏデバイス（キーボード、ディスプレイ、ポインティング・デバイス、ＤＡＳＤ、テープ、ＣＤ、ＤＶＤ、サム・ドライブ、およびその他の記憶媒体などを含むが、これらに限定されない）は、直接的に、または介在するＩ／Ｏコントローラを通じて、システムに結合できる。ネットワーク・アダプタがシステムに結合され、介在するプライベート・ネットワークまたはパブリック・ネットワークを通じて、データ処理システムを、他のデータ処理システムまたはリモート・プリンタまたはストレージ・デバイスに結合できるようにしてもよい。モデム、ケーブル・モデム、およびイーサネット（Ｒ）・カードは、使用可能なネットワーク・アダプタのうちの、ごくわずかの種類にすぎない。
【０３７４】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、制限することを意図していない。本明細書において使用されるとき、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、特に明示的に示されない限り、複数形も含むことが意図されている。「備える（ｃｏｍｐｒｉｓｅ）」または「備えている（ｃｏｍｐｒｉｓｉｎｇ）」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、動作、要素、またはコンポーネント、あるいはその組み合わせの存在を示すが、１つまたは複数のその他の機能、整数、ステップ、動作、要素、コンポーネント、またはこれらのグループ、あるいはその組み合わせの存在または追加を除外していないということが、さらに理解されるであろう。
【０３７５】
添付の特許請求の範囲内のすべてのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、動作、および均等なものは、もしあれば、具体的に請求されるとき、その他の請求される要素と組み合わせて、機能を実行するための任意の構造、材料、または動作を含むことが意図されている。１つまたは複数の実施形態の説明は、例示および説明の目的で提示されているが、網羅的であることは意図されておらず、開示された形態に限定されない。多くの変更および変形が、当業者にとって明らかであろう。さまざまな態様および実際的な適用を最も適切に説明するため、および他の当業者が、企図されている特定の用途に適しているようなさまざまな変更を伴う多様な実施形態を理解できるようにするために、実施形態が選択されて説明された。
【図１】
2019535036.tif 000017
【図２】
2019535036.tif 000018
【図３】
2019535036.tif 000019
【図４】
2019535036.tif 000020
【図５】
2019535036.tif 000021
【図６】
2019535036.tif 000022
【図７】
2019535036.tif 000023
【図８】
2019535036.tif 000024
【図９】
2019535036.tif 000025
【図１０】
2019535036.tif 000026
【図１１】
2019535036.tif 000027
【図１２】
2019535036.tif 000028
【図１３】
2019535036.tif 000029
【図１４】
2019535036.tif 000030
【図１５】
2019535036.tif 000031
【図１６】
2019535036.tif 000032
【図１７】
2019535036.tif 000033
【図１８】
2019535036.tif 000034
【図１９】
2019535036.tif 000035
【図２０】
2019535036.tif 000036
【図２１】
2019535036.tif 000037
【図２２】
2019535036.tif 000038
【図２３】
2019535036.tif 000039
【図２４】
2019535036.tif 000040
【図２５】
2019535036.tif 000041
【図２６】
2019535036.tif 000042
【図２７】
2019535036.tif 000043
【図２８】
2019535036.tif 000044
【手続補正書】
【提出日】令和1年5月30日(2019.5.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品であって、
処理回路によって読み取り可能な、方法を実行するために前記処理回路によって実行されるための命令を格納しているコンピュータ可読記憶媒体を備えており、前記方法が、
暗号処理および認証を含む複数の動作を実行するための命令を取得することであって、前記命令が、ハードウェア／ソフトウェア・インターフェイスでの単一の設計されたハードウェア・マシン命令であり、認証動作を伴う暗号メッセージを示すためのオペレーション・コードを含むオペコード・フィールド、および前記命令によって使用される１つまたは複数のレジスタを指定するために使用される１つまたは複数のレジスタ・フィールドを含んでいる、前記取得することと、
前記命令を実行することとによって特徴付けられており、前記実行することが、
前記命令の前記１つまたは複数のレジスタのうちの１つのレジスタを使用して提供されたデータの１つのセットを暗号処理して、暗号処理されたデータを取得することと、
前記暗号処理されたデータを指定された位置に配置することと、
前記命令によって提供されたデータの追加のセットを認証することであって、メッセージ認証タグの少なくとも一部を生成する、前記認証することと、
前記メッセージ認証タグの前記少なくとも一部を選択された位置に格納することと
を含んでいる、コンピュータ・プログラム製品。
【請求項２】
前記実行することが前記暗号処理されたデータを認証することをさらに含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項３】
前記データの追加のセットが、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり、前記実行することが、
前記データの追加のセットが、認証されるデータの最後のブロックを含んでいるかどうかを判定することと、
前記データの追加のセットが前記認証されるデータの最後のブロックを含んでいるかどうかに基づいて前記認証することを実行することと
をさらに含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項４】
前記判定することが、前記命令の最後の追加認証データ制御をチェックして、前記データの追加のセットが前記認証されるデータの最後のブロックを含んでいるかどうかを判定することを含んでいる、請求項３に記載のコンピュータ・プログラム製品。
【請求項５】
前記データの１つのセットが、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり、前記実行することが、
前記データの１つのセットが、暗号処理されるデータの最後のブロックを含んでいるかどうかを判定することと、
前記データの１つのセットが前記暗号処理されるデータの最後のブロックを含んでいるかどうかに基づいて前記暗号処理することを実行することと
をさらに含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項６】
前記判定することが、前記命令の最後のテキスト制御をチェックして、前記データの１つのセットが前記暗号処理されるデータの最後のブロックを含んでいるかどうかを判定することを含んでいる、請求項５に記載のコンピュータ・プログラム製品。
【請求項７】
前記暗号処理することが、選択された値に設定されている前記命令によって提供された制御に基づいて前記データの１つのセットを暗号化することを含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項８】
前記暗号処理することが、特定の値に設定されている前記命令によって提供された制御に基づいて前記データの１つのセットを暗号解読することを含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項９】
前記データの追加のセットを前記認証することが、ハッシュ技術を使用して、前記メッセージ認証タグの前記少なくとも一部を生成することを含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項１０】
前記ハッシュ技術が、選択された値に設定されている前記命令の、ハッシュ・サブキーによって提供される制御に基づいて、前記命令によって使用されるパラメータ・ブロックに格納されるハッシュ・サブキーを使用する、請求項９に記載のコンピュータ・プログラム製品。
【請求項１１】
前記データの１つのセットが、メッセージの少なくとも一部を含んでおり、前記データの追加のセットが、前記メッセージのルーティング情報を含んでいる、請求項１に記載のコンピュータ・プログラム製品。
【請求項１２】
コンピューティング環境内の処理を容易にするためのコンピュータ・システムであって、
メモリと、
前記メモリと通信するプロセッサとによって特徴付けられることを含んでおり、前記コンピュータ・システムが方法を実行するように構成されており、前記方法が、
暗号処理および認証を含む複数の動作を実行するための命令を取得することであって、前記命令が、ハードウェア／ソフトウェア・インターフェイスでの単一の設計されたハードウェア・マシン命令であり、認証動作を伴う暗号メッセージを示すためのオペレーション・コードを含むオペコード・フィールド、および前記命令によって使用される１つまたは複数のレジスタを指定するために使用される１つまたは複数のレジスタ・フィールドを含んでいる、前記取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
前記命令の前記１つまたは複数のレジスタのうちの１つのレジスタを使用して提供されたデータの１つのセットを暗号処理して、暗号処理されたデータを取得することと、
前記暗号処理されたデータを指定された位置に配置することと、
前記命令によって提供されたデータの追加のセットを認証することであって、メッセージ認証タグの少なくとも一部を生成する、前記認証することと、
前記メッセージ認証タグの前記少なくとも一部を選択された位置に格納することと
を含んでいる、コンピュータ・システム。
【請求項１３】
前記実行することが前記暗号処理されたデータを認証することをさらに含んでいる、請求項１２に記載のコンピュータ・システム。
【請求項１４】
前記データの追加のセットが、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり、前記実行することが、
前記データの追加のセットが認証されるデータの最後のブロックを含んでいるかどうかを判定することであって、前記命令の最後の追加認証データ制御をチェックして、前記データの追加のセットが、前記認証されるデータの最後のブロックを含んでいるかどうかを判定する、前記判定することと、
前記データの追加のセットが前記認証されるデータの最後のブロックを含んでいるかどうかに基づいて前記認証することを実行することと
をさらに含んでいる、請求項１２に記載のコンピュータ・システム。
【請求項１５】
前記データの１つのセットが、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり、前記実行することが、
前記データの１つのセットが暗号処理されるデータの最後のブロックを含んでいるかどうかを判定することであって、前記命令の最後のテキスト制御をチェックして、前記データの１つのセットが、前記暗号処理されるデータの最後のブロックを含んでいるかどうかを判定する、前記判定することと、
前記データの１つのセットが前記暗号処理されるデータの最後のブロックを含んでいるかどうかに基づいて前記暗号処理することを実行することと
をさらに含んでいる、請求項１２に記載のコンピュータ・システム。
【請求項１６】
前記データの追加のセットを前記認証することが、ハッシュ技術を使用して前記メッセージ認証タグの前記少なくとも一部を生成することを含んでおり、前記ハッシュ技術が、選択された値に設定されている前記命令の、ハッシュ・サブキーによって提供される制御に基づいて、前記命令によって使用されるパラメータ・ブロックに格納されるハッシュ・サブキーを使用する、請求項１２に記載のコンピュータ・システム。
【請求項１７】
コンピューティング環境内の処理を容易にするためのコンピュータ実装方法であって、
プロセッサによって、暗号処理および認証を含む複数の動作を実行するための命令を取得することであって、前記命令が、ハードウェア／ソフトウェア・インターフェイスでの単一の設計されたハードウェア・マシン命令であり、認証動作を伴う暗号メッセージを示すためのオペレーション・コードを含むオペコード・フィールド、および前記命令によって使用される１つまたは複数のレジスタを指定するために使用される１つまたは複数のレジスタ・フィールドを含んでいる、前記取得することと、
前記命令を実行することとを含むことによって特徴付けられており、前記実行することが、
前記命令の前記１つまたは複数のレジスタのうちの１つのレジスタを使用して提供されたデータの１つのセットを暗号処理して、暗号処理されたデータを取得することと、
前記暗号処理されたデータを指定された位置に配置することと、
前記命令によって提供されたデータの追加のセットを認証することであって、メッセージ認証タグの少なくとも一部を生成する、前記認証することと、
前記メッセージ認証タグの前記少なくとも一部を選択された位置に格納することと
を含んでいる、コンピュータ実装方法。
【請求項１８】
前記実行することが前記暗号処理されたデータを認証することをさらに含んでいる、請求項１７に記載のコンピュータ実装方法。
【請求項１９】
前記データの追加のセットが、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり、前記実行することが、
前記データの追加のセットが認証されるデータの最後のブロックを含んでいるかどうかを判定することであって、前記命令の最後の追加認証データ制御をチェックして、前記データの追加のセットが、前記認証されるデータの最後のブロックを含んでいるかどうかを判定する、前記判定することと、
前記データの追加のセットが前記認証されるデータの最後のブロックを含んでいるかどうかに基づいて前記認証することを実行することと
をさらに含んでいる、請求項１７に記載のコンピュータ実装方法。
【請求項２０】
前記データの１つのセットが、データの１つまたは複数のブロックのうちのデータの少なくとも１つのブロックを含んでおり、前記実行することが、
前記データの１つのセットが暗号処理されるデータの最後のブロックを含んでいるかどうかを判定することであって、前記命令の最後のテキスト制御をチェックして、前記データの１つのセットが、前記暗号処理されるデータの最後のブロックを含んでいるかどうかを判定する、前記判定することと、
前記データの１つのセットが前記暗号処理されるデータの最後のブロックを含んでいるかどうかに基づいて前記暗号処理することを実行することと
をさらに含んでいる、請求項１７に記載のコンピュータ実装方法。
【国際調査報告】
2019535036.tif 000045
2019535036.tif 000046
2019535036.tif 000047