特表2019-533359(P2019-533359A)IP Force 特許公報掲載プロジェクト 2015.5.11 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧
特表2019-533359コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法
<>
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000004
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000005
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000006
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000007
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000008
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000009
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000010
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000011
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000012
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000013
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000014
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000015
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000016
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000017
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000018
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000019
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000020
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000021
  • 特表2019533359-コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法 図000022
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】特表2019-533359(P2019-533359A)
(43)【公表日】2019年11月14日
(54)【発明の名称】コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法
(51)【国際特許分類】
   H04L 9/32 20060101AFI20191018BHJP
   G09C 1/00 20060101ALI20191018BHJP
   H04L 9/10 20060101ALI20191018BHJP
【FI】
   H04L9/00 675A
   G09C1/00 640D
   H04L9/00 621
【審査請求】未請求
【予備審査請求】未請求
【全頁数】34
(21)【出願番号】特願2019-516158(P2019-516158)
(86)(22)【出願日】2017年9月27日
(85)【翻訳文提出日】2019年3月25日
(86)【国際出願番号】EP2017074478
(87)【国際公開番号】WO2018060236
(87)【国際公開日】20180405
(31)【優先権主張番号】15/281,631
(32)【優先日】2016年9月30日
(33)【優先権主張国】US
(81)【指定国】 AP(BW,GH,GM,KE,LR,LS,MW,MZ,NA,RW,SD,SL,ST,SZ,TZ,UG,ZM,ZW),EA(AM,AZ,BY,KG,KZ,RU,TJ,TM),EP(AL,AT,BE,BG,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GB,GR,HR,HU,IE,IS,IT,LT,LU,LV,MC,MK,MT,NL,NO,PL,PT,RO,RS,SE,SI,SK,SM,TR),OA(BF,BJ,CF,CG,CI,CM,GA,GN,GQ,GW,KM,ML,MR,NE,SN,TD,TG),AE,AG,AL,AM,AO,AT,AU,AZ,BA,BB,BG,BH,BN,BR,BW,BY,BZ,CA,CH,CL,CN,CO,CR,CU,CZ,DE,DJ,DK,DM,DO,DZ,EC,EE,EG,ES,FI,GB,GD,GE,GH,GM,GT,HN,HR,HU,ID,IL,IN,IR,IS,JO,JP,KE,KG,KH,KN,KP,KR,KW,KZ,LA,LC,LK,LR,LS,LU,LY,MA,MD,ME,MG,MK,MN,MW,MX,MY,MZ,NA,NG,NI,NO,NZ,OM,PA,PE,PG,PH,PL,PT,QA,RO,RS,RU,RW,SA,SC,SD,SE,SG,SK,SL,SM,ST,SV,SY,TH,TJ,TM,TN,TR,TT
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
(74)【代理人】
【識別番号】100108501
【弁理士】
【氏名又は名称】上野 剛史
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】グレイナー、ダン
(72)【発明者】
【氏名】スリゲル、ティモシー
(72)【発明者】
【氏名】ツェリン、クリスチャン
(57)【要約】
【課題】コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法を提供する。
【解決手段】メッセージのメッセージ・ダイジェストを生成するために使用される命令が実行される。実行において、メッセージに対して埋め込みが実行されたかどうかを判定するために、この命令の埋め込み状態制御がチェックされる。このチェックが、埋め込みが実行されたことを示している場合、第1の動作が実行され、このチェックが、埋め込みが実行されていないことを示している場合、第1の動作とは異なる第2の動作が実行される。
【選択図】図14
【特許請求の範囲】
【請求項1】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品であって、
処理回路によって読み取り可能な、方法を実行するために前記処理回路によって実行されるための命令を格納しているコンピュータ可読記憶媒体を備えており、前記方法が、
実行される命令を取得することであって、前記命令がメッセージのメッセージ・ダイジェストを生成するために使用される、前記取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
前記命令の埋め込み状態制御をチェックして、前記メッセージに対して埋め込みが実行されたかどうかを判定することと、
前記チェックが埋め込みが実行されたことを示していることに基づいて、第1の動作を実行することと、
前記チェックが埋め込みが実行されていないことを示していることに基づいて、前記第1の動作とは異なる第2の動作を実行することと
を含んでいる、コンピュータ・プログラム製品。
【請求項2】
前記第1の動作が、拡張出力機能の処理を実行して、前記メッセージ・ダイジェストに関連する処理をさらに実行することを含んでいる、請求項1に記載のコンピュータ・プログラム製品。
【請求項3】
前記拡張出力機能の処理を実行することが、前記メッセージ・ダイジェストの少なくとも一部を再ハッシュして、追加の出力を生成することを含んでいる、請求項2に記載のコンピュータ・プログラム製品。
【請求項4】
前記第2の動作が、前記メッセージの少なくとも一部の埋め込みを実行して、選択されたサイズのメッセージ・ブロックを形成することを含んでいる、請求項1に記載のコンピュータ・プログラム製品。
【請求項5】
前記埋め込みを実行することが、埋め込みビットを前記メッセージの前記少なくとも一部の選択された位置に追加することを含んでいる、請求項4に記載のコンピュータ・プログラム製品。
【請求項6】
前記第2の動作が、前記メッセージに対して埋め込みが実行されたことを示すように前記埋め込み状態制御を設定することをさらに含んでいる、請求項4に記載のコンピュータ・プログラム製品。
【請求項7】
前記埋め込み状態制御が、前記命令によって使用されるレジスタ内に配置される、請求項1に記載のコンピュータ・プログラム製品。
【請求項8】
前記埋め込み状態制御が、前記命令がアクセスできるメモリ内に配置される、請求項1に記載のコンピュータ・プログラム製品。
【請求項9】
前記命令が、前記メッセージの1つまたは複数の最後のブロックを処理して、前記メッセージの認証において使用される前記メッセージ・ダイジェストを生成するために使用される、最後のメッセージ・ダイジェストの計算命令を含んでいる、請求項1に記載のコンピュータ・プログラム製品。
【請求項10】
前記メッセージがメモリ内に格納され、前記命令が、前記メッセージの位置を特定するためのメモリ内のアドレスを提供する、請求項1に記載のコンピュータ・プログラム製品。
【請求項11】
前記実行することが、
前記埋め込み状態制御が埋め込みが実行されたことを示していることに基づいて、および前記命令が実行を開始していることに基づいて、前記メッセージの長さがゼロ以外であるかどうかを判定することと、
前記長さがゼロ以外であることを示しているとの前記判定に基づいて例外を示すことであって、前記埋め込み状態制御が、埋め込みが実行されて前記命令が実行を開始していることを示している、前記例外を示すことと
をさらに含んでいる、請求項1に記載のコンピュータ・プログラム製品。
【請求項12】
コンピューティング環境内の処理を容易にするためのコンピュータ・システムであって、
メモリと、
前記メモリと通信するプロセッサとを備えており、前記コンピュータ・システムが方法を実行するように構成されており、前記方法が、
実行される命令を取得することであって、前記命令がメッセージのメッセージ・ダイジェストを生成するために使用される、前記取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
前記命令の埋め込み状態制御をチェックして、前記メッセージに対して埋め込みが実行されたかどうかを判定することと、
前記チェックが埋め込みが実行されたことを示していることに基づいて、第1の動作を実行することと、
前記チェックが埋め込みが実行されていないことを示していることに基づいて、前記第1の動作とは異なる第2の動作を実行することと
を含んでいる、コンピュータ・システム。
【請求項13】
前記第1の動作が、拡張出力機能の処理を実行して、前記メッセージ・ダイジェストに関連する処理をさらに実行することを含んでいる、請求項12に記載のコンピュータ・システム。
【請求項14】
前記第2の動作が、前記メッセージの少なくとも一部の埋め込みを実行して、選択されたサイズのメッセージ・ブロックを形成することを含んでいる、請求項12に記載のコンピュータ・システム。
【請求項15】
前記実行することが、
前記埋め込み状態制御が埋め込みが実行されたことを示していることに基づいて、および前記命令が実行を開始していることに基づいて、前記メッセージの長さがゼロ以外であるかどうかを判定することと、
前記長さがゼロ以外であることを示しているとの前記判定に基づいて例外を示すことであって、前記埋め込み状態制御が、埋め込みが実行されて前記命令が実行を開始していることを示している、前記例外を示すことと
をさらに含んでいる、請求項12に記載のコンピュータ・システム。
【請求項16】
コンピューティング環境内の処理を容易にするためのコンピュータ実装方法であって、
少なくとも1つのプロセッサによって、実行される命令を取得することであって、前記命令がメッセージのメッセージ・ダイジェストを生成するために使用される、前記取得することと、
前記命令を実行することとを含んでおり、前記実行することが、
前記命令の埋め込み状態制御をチェックして、前記メッセージに対して埋め込みが実行されたかどうかを判定することと、
前記チェックが埋め込みが実行されたことを示していることに基づいて、第1の動作を実行することと、
前記チェックが埋め込みが実行されていないことを示していることに基づいて、前記第1の動作とは異なる第2の動作を実行することと
を含んでいる、コンピュータ実装方法。
【請求項17】
前記第1の動作が、拡張出力機能の処理を実行して、前記メッセージ・ダイジェストに関連する処理をさらに実行することを含んでいる、請求項16に記載のコンピュータ実装方法。
【請求項18】
前記第2の動作が、前記メッセージの少なくとも一部の埋め込みを実行して、選択されたサイズのメッセージ・ブロックを形成することを含んでいる、請求項16に記載のコンピュータ実装方法。
【請求項19】
前記命令が、前記メッセージの1つまたは複数の最後のブロックを処理して、前記メッセージの認証において使用される前記メッセージ・ダイジェストを生成するために使用される、最後のメッセージ・ダイジェストの計算命令を含んでいる、請求項16に記載のコンピュータ実装方法。
【請求項20】
前記実行することが、
前記埋め込み状態制御が埋め込みが実行されたことを示していることに基づいて、および前記命令が実行を開始していることに基づいて、前記メッセージの長さがゼロ以外であるかどうかを判定することと、
前記長さがゼロ以外であることを示しているとの前記判定に基づいて例外を示すことであって、前記埋め込み状態制御が、埋め込みが実行されて前記命令が実行を開始していることを示している、前記例外を示すことと
をさらに含んでいる、請求項16に記載のコンピュータ実装方法。
【発明の詳細な説明】
【技術分野】
【0001】
1つまたは複数の態様は、一般に、コンピューティング環境内の処理に関し、特に、セキュリティで保護されたメッセージ送信に関連付けられた処理に関する。
【背景技術】
【0002】
電子情報処理の文脈におけるセキュリティで保護されたメッセージ送信は、メッセージの暗号化および暗号解読ならびに認証を含む。メッセージは、送信前に送信側によって暗号化され、暗号化されたメッセージの調査によって真の内容が第三者に公開されないことを保証する。一方、メッセージは、受信側によって暗号解読され、元の内容を公開する。さらに、メッセージ認証は、送信側によって提供されたメッセージの内容が誤って、または悪意を持って送信中に変更されていないことを保証する。したがって、受信されたメッセージは、実際に、送信されたメッセージと同じである。
【0003】
認証は、多くの場合、メッセージのビットを調べ、ハッシュ・アルゴリズムを使用して、調べられたビットからメッセージ・ダイジェスト(認証タグ、または単にハッシュと呼ばれることがある)を生成することによって実行される。ハッシュ・アルゴリズムのセキュリティ強度(すなわち、衝突攻撃、原像攻撃、第二原像攻撃に対するアルゴリズムの耐性)は、生成されるメッセージ・ダイジェストのサイズによって示される。
【0004】
米国のNIST(National Institute of Standardsand Technology)は、SHA−1(160ビットのダイジェスト長)、SHA−2(224ビット、256ビット、384ビット、および512ビット、ならびにこれらの組み合わせのダイジェスト長)という、セキュア・ハッシュ・アルゴリズムの2つのファミリーに関する標準を採用した。
【0005】
SHA−1アルゴリズムおよびSHA−2アルゴリズムは、決定論的なゼロ以外のハッシュ・タグ(初期チェイニング値(ICV:initial chaining value)と呼ばれる)から始まり、このハッシュ・タグは、メッセージの連続する各ブロックによって反復的に並べ替えられる(メッセージ・ブロックのサイズは、64バイトまたは128バイトのいずれかである)。各並べ替えは、その後の並べ替えのICVとして使用される出力チェイニング値(OCV:output chaining value)を生成する。メッセージのすべての完全なブロックが処理されたときに、最後の短いブロック(または、短いブロックが残っていない場合は、空のブロック)に対して、メッセージの最大長まで埋め込みが実行され、この最後のブロックが使用されて、ICVを最後に1回並べ替え、結果としてメッセージ・ダイジェスト(すなわち、タグ)を生成する。埋め込みは、メッセージに対して1回実行される。
【0006】
埋め込みは1回実行されるため、そのような埋め込みに関連付けられた処理が容易になる。
【先行技術文献】
【非特許文献】
【0007】
【非特許文献1】“z/Architecture Principles of Operation,” IBM Publication No. SA22-7832-10, March2015
【非特許文献2】“Power ISA (TM) Version 2.07B,” International Business Machines Corporation, April 9, 2015
【非特許文献3】FIPS PUB 202: Federal Information Processing Standards Publication, SHA-3 Standard:Permutation-Based Hash and Extendable-Output Functions
【発明の概要】
【発明が解決しようとする課題】
【0008】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品、コンピュータ・システム、およびコンピュータ実装方法を提供する。
【課題を解決するための手段】
【0009】
コンピューティング環境内の処理を容易にするためのコンピュータ・プログラム製品の提供によって、従来技術の欠点が克服され、追加の利点がもたらされる。このコンピュータ・プログラム製品は、処理回路によって読み取り可能な、方法を実行するために処理回路によって実行される命令を格納しているストレージ媒体を備える。この方法は、例えば、実行される命令を取得することを含む。命令が使用されて、メッセージのメッセージ・ダイジェストを生成する。この実行することは、命令の埋め込み状態制御(padding state control)をチェックして、メッセージに対して埋め込みが実行されたかどうかを判定することを含む。チェックが埋め込みが実行されたことを示していることに基づいて、第1の動作が実行される。チェックが埋め込みが実行されていないことを示していることに基づいて、第1の動作とは異なる第2の動作が実行される。
【0010】
それによって、認証に関連付けられた処理が容易になり、コンピューティング環境内の処理を改善する。
【0011】
一実施形態では、第1の動作は、拡張出力機能(extended output function)の処理を実行して、メッセージ・ダイジェストに関連する処理をさらに実行することを含む。拡張出力機能の処理を実行することは、例えば、メッセージ・ダイジェストの少なくとも一部を再ハッシュして、追加の出力を生成することを含む。
【0012】
さらに、一実施形態では、第2の動作は、メッセージの少なくとも一部の埋め込みを実行して、選択されたサイズのメッセージ・ブロックを形成することを含む。埋め込みを実行することは、例えば、埋め込みビットを、メッセージの少なくとも一部の選択された位置に追加することを含む。第2の動作は、一実施形態では、メッセージに対して埋め込みが実行されたことを示すように、埋め込み状態制御を設定することをさらに含む。埋め込み状態制御は、例えば、命令によって使用されるレジスタ内に配置される。さらに別の例では、埋め込み状態制御は、命令がアクセスできるメモリ内に配置される。
【0013】
さらに、一実施形態では、この実行することは、埋め込み状態制御が埋め込みが実行されたことを示していることに基づいて、および命令が実行を開始していることに基づいて、メッセージの長さがゼロ以外であるかどうかを判定し、ゼロ以外である場合に、例外を示すことをさらに含む。
【0014】
1つの例として、この命令は、メッセージの1つまたは複数の最後のブロックを処理して、メッセージの認証において使用されるメッセージ・ダイジェストを生成するために使用される、最後のメッセージ・ダイジェストの計算命令である。
【0015】
メッセージは、メモリ内に格納されてよく、命令が、メッセージの位置を特定するためのメモリ内のアドレスを提供する。
【0016】
1つまたは複数の態様に関連する方法およびシステムも本明細書に記載され、請求される。さらに、1つまたは複数の態様に関連するサービスも本明細書に記載されており、請求されてよい。
【0017】
その他の特徴および長所が、本明細書に記載された技術によって実現される。その他の実施形態および態様は、本明細書において詳細に説明され、請求される態様の一部と見なされる。
【0018】
1つまたは複数の態様は、本明細書の最後にある特許請求の範囲において例として具体的に指摘され、明確に請求される。前述の内容、ならびに1つまたは複数の態様の目的、特徴、および長所は、添付の図面と併せて行われる以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【0019】
図1】本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一例を示す図である。
図2図1のプロセッサの詳細をさらに示す図である。
図3】本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の例を示す図である。
図4図3のメモリの詳細をさらに示す図である。
図5】本発明の態様による、最後のメッセージ・ダイジェストの計算命令の書式の一実施形態を示す図である。
図6】本発明の態様による、図5の最後のメッセージ・ダイジェストの計算命令の1つまたは複数の態様によって使用される汎用レジスタ(汎用レジスタ0(GR0))の内容の一例を示す図である。
図7】本発明の態様による、図5の最後のメッセージ・ダイジェストの計算命令よって使用される別の汎用レジスタ(汎用レジスタ1(GR1))の内容の一例を示す図である。
図8】本発明の態様による、図5の最後のメッセージ・ダイジェストの計算命令によって1つまたは複数の態様において使用されるレジスタRの内容の一例を示す図である。
図9】本発明の態様による、図5の最後のメッセージ・ダイジェストの計算命令によって1つまたは複数の態様において使用されるレジスタR+1の内容の一例を示す図である。
図10】本発明の態様による、図5の最後のメッセージ・ダイジェストの計算命令によって1つまたは複数の態様において使用されるレジスタRの内容の一例を示す図である。
図11】本発明の態様による、図5の最後のメッセージ・ダイジェストの計算命令によって1つまたは複数の態様において使用されるレジスタR+1の内容の一例を示す図である。
図12】本発明の態様による、図5の最後のメッセージ・ダイジェストの計算命令によって1つまたは複数の態様において使用されるパラメータ・ブロックの一例を示す図である。
図13】本発明の態様による、最後のメッセージ・ダイジェストの計算命令によって使用される埋め込み動作の一例を示す図である。
図14】本発明の態様による、図5の最後のメッセージ・ダイジェストの計算命令の拡張出力機能の処理の一例を示す図である。
図15】本発明の態様による、図5の最後のメッセージ・ダイジェストの計算命令による埋め込みの別の例を示す図である。
図16】本発明の態様による、図5の最後のメッセージ・ダイジェストの計算命令の拡張出力機能の処理の別の実施形態を示す図である。
図17】本発明の態様による、埋め込み状態制御を使用する一例を示す図である。
図18】本発明の態様による、埋め込み動作を使用する命令を実行することを含んでいる、コンピューティング環境内の処理を容易にする一例を示す図である。
図19】本発明の態様による、埋め込み動作を使用する命令を実行することを含んでいる、コンピューティング環境内の処理を容易にする一例を示す図である。
【発明を実施するための形態】
【0020】
1つまたは複数の態様によれば、処理を続行する方法を決定するために、メッセージ・ダイジェスト生成する割込み可能な命令などの命令に対して、埋め込み動作が実行されたかどうかを判定するための機能が提供される。1つの例では、そのような埋め込み動作は、下で説明されているように、メッセージ・ダイジェストを生成するために使用される最後のメッセージ・ダイジェストの計算命令によって実行される。本明細書では、メッセージ・ダイジェストを生成する命令を参照して例が説明されるが、この方法は、その他の命令またはその他の処理あるいはその両方と共に使用されてよい。
【0021】
本発明の1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の一実施形態が、図1を参照して説明される。1つの例では、コンピューティング環境は、International Business Machines Corporation(ニューヨーク州アーモンク)によって提供されるz/Architectureに基づく。z/Architectureの一実施形態は、“z/Architecture Principles of Operation,” IBM Publication No. SA22-7832-10, March 2015に記載されており、この文献は本明細書において参照によってその全体が本明細書に組み込まれている。Z/ARCHITECTUREは、International Business Machines Corporation(米国ニューヨーク州アーモンク)の登録商標である。
【0022】
別の例では、コンピューティング環境は、International Business Machines Corporation(ニューヨーク州アーモンク)によって提供されるPower Architectureに基づく。Power Architectureの一実施形態は、“Power ISA (TM) Version 2.07B,” International Business Machines Corporation, April 9, 2015に記載されており、この文献は本明細書において参照によってその全体が本明細書に組み込まれている。POWER ARCHITECTUREは、International Business Machines Corporation(米国ニューヨーク州アーモンク)の登録商標である。
【0023】
コンピューティング環境は、インテルx86アーキテクチャを含むが、これに限定されない、他のアーキテクチャに基づいてもよい。その他の例も存在する。
【0024】
図1に示されているように、コンピューティング環境100は、例えば、1つまたは複数のプロセッサまたはプロセッシング・ユニット16、システム・メモリ28、およびシステム・メモリ28を含むさまざまなシステム・コンポーネントをプロセッサ16に結合するバス18を含んでよいが、これらに限定されない、コンピュータ・システム/サーバ12を含んでいる。
【0025】
バス18は、メモリ・バスまたはメモリ・コントローラ、ペリフェラル・バス、アクセラレーテッド・グラフィックス・ポート、および任意のさまざまなバス・アーキテクチャを使用するプロセッサまたはローカル・バスを含む、1つまたは複数の任意の種類のバス構造を表す。例として、そのようなアーキテクチャは、ISA(Industry Standard Architecture)バス、MCA(Micro Channel Architecture)バス、EISA(Enhanced ISA)バス、VESA(Video Electronics Standards Association)ローカル・バス、およびPCI(Peripheral Component Interconnect)バスを含むが、これらに限定されない。
【0026】
コンピュータ・システム/サーバ12は、通常、さまざまなコンピュータ・システム可読媒体を含む。そのような媒体は、コンピュータ・システム/サーバ12によってアクセスできる任意の使用可能な媒体であってよく、揮発性および不揮発性媒体、取り外し可能および取り外し不可の媒体を含む。
【0027】
システム・メモリ28は、ランダム・アクセス・メモリ(RAM:random access memory)30またはキャッシュ・メモリ32あるいはその両方などの、揮発性メモリの形態でのコンピュータ・システム可読媒体を含むことができる。コンピュータ・システム/サーバ12は、その他の取り外し可能/取り外し不可、揮発性/不揮発性のコンピュータ・システム・ストレージ媒体をさらに含んでよい。単に例として、取り外し不可、不揮発性の磁気媒体(図示されておらず、通常は「ハード・ドライブ」と呼ばれる)に対する読み取りと書き込みを行うために、ストレージ・システム34を提供することができる。図示されていないが、取り外し可能、不揮発性の磁気ディスク(例えば、「フロッピー・ディスク」)に対する読み取りと書き込みを行うための磁気ディスク・ドライブ、およびCD−ROM、DVD−ROM、またはその他の光媒体などの取り外し可能、不揮発性の光ディスクに対する読み取りと書き込みを行うための光ディスク・ドライブを提供することができる。そのような例では、それぞれを、1つまたは複数のデータ媒体インターフェイスによってバス18に接続することができる。下でさらに示され、説明されるように、メモリ28は、本発明の実施形態の機能を実行するように構成された一連の(例えば、少なくとも1つの)プログラム・モジュールを備える少なくとも1つのプログラム製品を含むことができる。
【0028】
例えば、一連の(少なくとも1つの)プログラム・モジュール42を含んでいるプログラム/ユーティリティ40がメモリ28に格納されてよいが、これに限定されず、オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データも格納されてよい。オペレーティング・システム、1つまたは複数のアプリケーション・プログラム、その他のプログラム・モジュール、およびプログラム・データまたはこれらの何らかの組み合わせは、それぞれネットワーク環境の実装を含んでよい。プログラム・モジュール42は、通常、本明細書に記載された本発明の実施形態の機能または方法あるいはその両方を実行する。
【0029】
また、コンピュータ・システム/サーバ12は、キーボード、ポインティング・デバイス、ディスプレイ24などの1つまたは複数の外部デバイス14、ユーザがコンピュータ・システム/サーバ12と情報をやりとりできるようにする1つまたは複数のデバイス、またはコンピュータ・システム/サーバ12が1つまたは複数の他のコンピューティング・デバイスと通信できるようにする任意のデバイス(例えば、ネットワーク・カード、モデムなど)、あるいはその組み合わせと通信することもできる。そのような通信は、入出力(I/O:Input/Output)インターフェイス22を介して行うことができる。さらに、コンピュータ・システム/サーバ12は、ローカル・エリア・ネットワーク(LAN:local area network)、一般的な広域ネットワーク(WAN:wide area network)、またはパブリック・ネットワーク(例えば、インターネット)、あるいはその組み合わせなどの1つまたは複数のネットワークと、ネットワーク・アダプタ20を介して通信することができる。図示されているように、ネットワーク・アダプタ20は、バス18を介してコンピュータ・システム/サーバ12の他のコンポーネントと通信する。図示されていないが、その他のハードウェア・コンポーネントまたはソフトウェア・コンポーネントあるいはその両方を、コンピュータ・システム/サーバ12と併用できるということが理解されるべきである。その例として、マイクロコード、デバイス・ドライバ、冗長プロセッシング・ユニット、外部ディスク・ドライブ・アレイ、RAIDシステム、テープ・ドライブ、およびデータ・アーカイブ・ストレージ・システムなどが挙げられるが、これらに限定されない。
【0030】
1つの例では、プロセッサ16は、命令を実行するために使用される複数の機能コンポーネントを含む。図2に示されているように、これらの機能コンポーネントは、例えば、実行される命令をフェッチするための命令フェッチ・コンポーネント120と、フェッチされた命令をデコードするため、およびデコードされた命令のオペランドを取得するための命令デコード・ユニット122と、デコードされた命令を実行するための命令実行コンポーネント124と、必要な場合に、命令を実行するためにメモリにアクセスするためのメモリ・アクセス・コンポーネント126と、実行された命令の結果を提供するための書き戻しコンポーネント130とを含む。これらのコンポーネントのうちの1つまたは複数は、本発明の態様によれば、本明細書に記載されているように、埋め込み動作の状態を決定する(136)ために使用されてよい。
【0031】
プロセッサ16は、一実施形態では、機能コンポーネントのうちの1つまたは複数によって使用される1つまたは複数のレジスタ140も含む。
【0032】
1つまたは複数の態様を組み込んで使用するためのコンピューティング環境の別の実施形態が、図3を参照して説明される。この例では、コンピューティング環境200は、例えば、1つまたは複数のバス208またはその他の接続あるいはその両方などを介して互いに結合された、ネイティブ中央処理装置(CPU:central processing unit)202、メモリ204、および1つまたは複数の入出力デバイスまたはインターフェイス206あるいはその両方を含む。例として、コンピューティング環境200は、International Business Machines Corporation(ニューヨーク州アーモンク)によって提供されるPowerPCプロセッサまたはpSeriesサーバ、ヒューレット・パッカード社(カリフォルニア州パロアルト市)によって提供されるインテルItanium IIプロセッサ内蔵HP Superdome、あるいはInternational Business Machines Corporation、ヒューレット・パッカード社、インテル社、Oracle社、またはその他の企業によって提供されるアーキテクチャに基づくその他のマシン、あるいはその組み合わせを含んでよい。
【0033】
ネイティブ中央処理装置202は、環境内で処理中に使用される1つまたは複数の汎用レジスタまたは1つまたは複数の専用レジスタあるいはその両方などの、1つまたは複数のネイティブ・レジスタ210を含む。これらのレジスタは、いずれかの特定の時点での環境の状態を表す情報を含む。
【0034】
さらに、ネイティブ中央処理装置202は、メモリ204に格納された命令およびコードを実行する。1つの特定の例では、中央処理装置は、メモリ204に格納されたエミュレータ・コード212を実行する。このコードは、あるアーキテクチャで構成されたコンピューティング環境が、別のアーキテクチャをエミュレートできるようにする。例えば、エミュレータ・コード212は、z/Architecture以外のアーキテクチャに基づくマシン(PowerPCプロセッサ、pSeriesサーバ、HP Superdomeサーバなど)が、z/Architectureをエミュレートし、z/Architectureに基づいて開発されたソフトウェアおよび命令を実行できるようにする。
【0035】
エミュレータ・コード212に関連する詳細が、図4を参照してさらに説明される。メモリ204に格納されたゲスト命令250は、ネイティブCPU202のアーキテクチャ以外のアーキテクチャにおいて実行されるように開発された(例えば、マシン命令と相互関係がある)ソフトウェア命令を含む。例えば、ゲスト命令250は、z/Architectureプロセッサ16上で実行するように設計されてよいが、代わりに、例えばインテルItanium IIプロセッサであってよい、ネイティブCPU202上でエミュレートされる。1つの例では、エミュレータ・コード212は、メモリ204から1つまたは複数のゲスト命令250を取得するため、および取得された命令のローカル・バッファリングを必要に応じて提供するための命令フェッチ・ルーチン252を含む。エミュレータ・コード212は、取得されたゲスト命令の種類を決定するため、およびゲスト命令を、1つまたは複数の対応するネイティブ命令256に変換するための命令変換ルーチン254も含む。この変換は、例えば、ゲスト命令によって実行される機能を識別すること、およびこの機能を実行するためのネイティブ命令を選択することを含む。
【0036】
さらに、エミュレータ212は、ネイティブ命令の実行を引き起こすためのエミュレーション制御ルーチン260を含む。エミュレーション制御ルーチン260は、ネイティブCPU202に、1つまたは複数のすでに取得されたゲスト命令をエミュレートするネイティブ命令のルーチンを実行させ、そのような実行の終了時に、次のゲスト命令またはゲスト命令のグループの取得をエミュレートするために、制御を命令フェッチ・ルーチンに返してよい。ネイティブ命令256の実行は、データをメモリ204からレジスタに読み込むこと、データをレジスタからメモリに再び格納すること、あるいは変換ルーチンによって決定された何らかの種類の算術演算または論理演算を実行することを含んでよい。
【0037】
例えば、各ルーチンは、メモリに格納されてネイティブ中央処理装置202によって実行されるソフトウェアにおいて実装される。他の例では、ルーチンまたは動作のうちの1つまたは複数は、ファームウェア、ハードウェア、ソフトウェア、またはこれらの何らかの組み合わせにおいて実装される。エミュレートされたプロセッサのレジスタは、ネイティブCPUのレジスタ210を使用して、またはメモリ204内の位置を使用することによって、エミュレートされてよい。実施形態では、ゲスト命令250、ネイティブ命令256、およびエミュレータ・コード212は、同じメモリ内に存在してよく、または異なるメモリ・デバイス間で分配されてよい。
【0038】
本明細書において使用されるとき、ファームウェアは、例えば、プロセッサのマイクロコード、ミリコード、またはマクロコード、あるいはその組み合わせを含む。ファームウェアは、例えば、上位レベルの機械コードの実装において使用される、ハードウェア・レベルの命令またはデータ構造あるいはその両方を含む。一実施形態では、ファームウェアは、例えば、信頼できるソフトウェアを含んでいるマイクロコード、または基盤になるハードウェアに固有のマイクロコードとして通常は提供される、システムのハードウェアへのオペレーティング・システムのアクセスを制御する独自のコードを含む。
【0039】
1つの例では、取得され、変換されて実行されるゲスト命令250は、本明細書に記載された最後のメッセージ・ダイジェストの計算命令である。あるアーキテクチャ(例えば、z/Architecture)の命令が、メモリからフェッチされ、変換され、別のアーキテクチャ(例えば、PowerPC、pSeries、インテルなど)のネイティブ命令256のシーケンスとして表される。その後、これらのネイティブ命令が実行される。
【0040】
最後のメッセージ・ダイジェストの計算(KLMD:Compute Last Message Digest)命令は、1つの例では、中間メッセージ・ダイジェストの計算(KIMD:Compute Intermediate Message Digest)命令と共に使用され、これらの命令は両方とも、例えばz/Architectureでは、認証に使用されるメッセージ・ダイジェストを生成するように定義される。KIMDは、メッセージの全長を使用できない場合(例えば、メッセージは、ネットワーク・アダプタまたはディスク・ドライブから細かく分かれて到着することがある)に使用されるよう意図されており、KLMDは、必要に応じて埋め込みを実行することを含めて、最後のメッセージ・ブロックを処理するために使用されるよう意図されている。
【0041】
KIMDおよびKLMDは両方とも、メモリ内のメッセージに対して動作し、このメッセージは、本明細書では命令の第2のオペランドと呼ばれる。メッセージの左端のバイトのメモリ・アドレスは、偶数と奇数の汎用レジスタ対の偶数番号が付けられたレジスタによって指定され、メッセージの長さは、この対の奇数番号が付けられたレジスタによって指定される。
【0042】
KIMDおよびKLMDは両方とも、CPUによって決定されたメッセージのバイト数が処理されたが、さらにメッセージのバイトが残っている場合に、条件コードを設定するように定義されており、この条件は、部分的完了と呼ばれ、条件コード(例えば、3)が設定されることを引き起こす。メッセージのすべてのバイトが正常に処理された場合、代替の条件コードが設定される(この条件は、完全な完了と呼ばれ、条件コード(例えば、0)が設定される)。部分的完了または完全な完了のいずれかの場合、(偶数番号が付けられたレジスタ内の)メッセージのアドレスが、処理されたバイト数だけ更新され、(奇数番号が付けられたレジスタ内の)メッセージの残りの長さが、同じ量だけデクリメントされる。部分的完了が発生した場合、プログラムは、単にKIMD命令またはKLMD命令に分岐して戻り、処理を続行することができる。完全な完了が発生した場合、第2のオペランドの奇数番号が付けられたレジスタ内に残っている長さは、0である。いずれかの個別のメッセージに関して、処理が命令の反復される実行を(部分的完了に起因して)必要とするかどうかに関わらず、この実施形態では、埋め込みがメッセージに対して1回実行される。したがって、この実施形態では、最後の短いブロックまたは空のブロックが処理されるときに、KLMD命令によって埋め込みが実行される。
【0043】
KIMD命令およびKLMD命令は、SHA−1およびSHA−2の両方のハッシュ処理技術をサポートするように構成される。さらに、本発明の態様によれば、KIMD命令およびKLMD命令は、SHA−3と呼ばれる別のセキュア・ハッシュ処理技術をサポートするようにも構成される。2015年8月5日の時点で、NISTは、SHA−3標準の公式に採用されたバージョンを公開した。SHA−3標準は、224ビット、256ビット、384ビット、および512ビットのダイジェスト長(SHA−2と同じ)を提供し、SHA−2のセキュリティ強度以上のセキュリティ強度を提供するように設計されている。SHA−3は、SHA−2のアルゴリズムとは異なる、より優れた性能を提供できるKeccakと呼ばれる並べ替えアルゴリズムを使用する。Keccakは、FIPS PUB 202: Federal Information Processing Standards Publication, SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functionsにおいて説明されている。
【0044】
Keccakは、決定論的なゼロ以外の初期チェイニング値(ICV)から開始するのではなく、メッセージのICVが0であることを仮定する。SHA−3は、各メッセージ・ブロックのサイズが128ビット(16バイト)であるKeccakのバージョン(Keccak[c]と呼ばれる)を使用する。Keccak機能は、メッセージの並べ替えがメッセージをスポンジに吸収することに似ており、結果の生成がスポンジを絞ることに似ているため、スポンジ機能と呼ばれる。
【0045】
SHA−3標準は、例えば128ビットまたは256ビットのダイジェスト長を使用して、2つの可変長出力機能(XOF:extendable-output functions)も定義する。これらのXOF機能(SHA KEccakの場合、SHAKE機能とも呼ばれる)は、ハッシュ値を入力メッセージから形成する非SHAKE機能に類似している。しかし、固定長のメッセージ・ダイジェストのみを生成できるSHA−3機能とは異なり、SHAKE機能は、その後の出力ブロックを生成するためにKeccakを使用してダイジェスト・ブロックを再ハッシュするフィードバック・メカニズムを介して、不定の長さの拡張された出力を生成できる。これらのその後の出力ブロックは、疑似乱数発生器などの、追加の処理に使用されてよい。
【0046】
さまざまなアルゴリズムの1つの特徴は、空の(すなわち、長さが0の)メッセージを処理できることである。したがって、本発明の態様によれば、例えばKLMD SHAKE機能の個別の実行の場合、メッセージの長さが0であるときに、命令は、埋め込みが実行されたかどうかを判定できる。埋め込みは、例えば、個々のメッセージに対して1回だけ発生する。命令は、第2のオペランドが最初に0であるときに、次のこと以外は同一の2つの条件を区別する。(a)埋め込みがまだ実行されていない最初の実行と、(b)埋め込みが実行されている、(例えば、条件コード3の後の)その後の実行。
【0047】
SHA−3標準をサポートするために、新しい機能コードおよび新しいハッシュ・アルゴリズムの説明が、例えばz/Architectureにおいて定義されているKIMD命令およびKLMD命令に追加される。さらに、1つの例では、KLMD SHAKE機能の場合、命令の追加の出力オペランドが定義される(第1のオペランドと呼ばれる)。第2のオペランドと同様に、第1のオペランドは、拡張出力機能(XOF:extended-output function)データのメモリ位置および長さを指定する。第2のオペランドと同様に、KLMD命令は、CPUによって決定された数のXOFのバイトを生成し、生成されたXOFのバイトの数に基づいて、第1のオペランドのレジスタを更新し、その後、条件コード(例えば、CC3)を設定することによって部分的完了を示してよい。プログラムは、その後、正常な完了(例えば、CC0)を示すまで、命令を再実行することができる。
【0048】
KIMD機能およびKLMD機能のいずれかの最初の第2のオペランドの長さは、空のメッセージに対して埋め込みが実行される、0であってよい。埋め込み動作は、実行されている機能に応じて異なる(SHA−1およびSHA−2の場合、埋め込みはメッセージの長さであり、SHA−3機能およびSHAKE機能の場合、埋め込みはビットの予測可能なシーケンスである)。XOF処理は、1つの例では、1回発生する埋め込み動作を含めて、第2のオペランド全体が処理されるまで、開始されない。
【0049】
したがって、第2のオペランドの長さが0であるときに、KLMD命令の実行を開始できる次の2つの方法がある。
【0050】
1.空の第2のオペランドのメッセージが指定されたが、埋め込みがまだ実行されていない。これは、次の2つの方法で発生することがある。
a.命令を発行しているプログラムが、0の最初のメッセージの長さを意図的に指定した。
b.プログラムがメッセージの複数のブロックを処理し、最後のブロックが、ブロック・サイズの正確な倍数を含んでおり、埋め込みが実行される前に、命令が、部分的に完了して終了した。
2.命令が、埋め込みをすでに実行しており、前の部分的完了(例えば、CC3)の後に、XOF生成を続行している。
【0051】
したがって、本発明の態様によれば、命令の実行の開始時に、これらの2つの条件を区別するための機能が提供される。埋め込み状態(PS:padding state)制御が、例えばKLMD SHAKE処理への入力になるように定義される。一実施形態では、PSは、例えば汎用レジスタ(この場合、命令の機能コードも含んでいる汎用レジスタ0)内の1ビットである。0の値は埋め込みが実行されていないことを示し、1の値は埋め込みが実行されていることを示す。プログラムが0の初期値を提供し、CPUが、メッセージに対して埋め込みを実行することに基づいて、このビットを1に設定する。
【0052】
埋め込み状態制御を使用するように構成された最後のメッセージ・ダイジェストの計算(KLMD)命令の一実施形態が、図5〜12を参照して説明される。図に示されているように、命令は複数のフィールドを含んでおり、フィールドには、下付きの数字が関連付けられていることがある。命令のフィールドに関連付けられた下付きの数字は、そのフィールドが適用されるオペランドを示す。例えば、汎用レジスタRに関連付けられた下付きの数字1は、Rが第1のオペランドに関連付けられていることを示す。
【0053】
1つの例では、図5を参照すると、最後のメッセージ・ダイジェストの計算(KLMD)命令300は、最後のメッセージ・ダイジェストの計算動作を示すためのオペレーション・コード(オペコード)を含んでいるオペコード・フィールド302(例えば、ビット0〜15)と、偶数と奇数のレジスタ対を指定するために使用される第1のレジスタ・フィールド304(例えば、ビット24〜27)であって、Rが、0を除く偶数番号が付けられたレジスタを指定することになっている、第1のレジスタ・フィールド304と、偶数と奇数のレジスタ対を指定するために使用される第2のレジスタ・フィールド306(例えば、ビット28〜31)であって、Rが、0を除く偶数番号が付けられたレジスタを指定することになっている、第2のレジスタ・フィールド306とを含んでいる。1つの例では、RフィールドおよびRフィールドによって指定された偶数と奇数のレジスタ対の内容は、第1および第2のオペランドのアドレスおよび長さをそれぞれ含む。各フィールド304〜306は、1つの例では、別々であり、オペコード・フィールドから独立している。さらに、一実施形態では、フィールド304〜308は、別々であり、互いに独立しているが、他の実施形態では、2つ以上のフィールドが結合されてよい。
【0054】
命令内でエンコードされるRおよびRに加えて、命令の1つの実装は、例えば汎用レジスタ0(GR0)および汎用レジスタ1(GR1)を含む、1つまたは複数のインプライド・レジスタを使用する。各レジスタが、図6〜11を参照して以下でさらに説明される。
【0055】
最初に図6を参照して、汎用レジスタ0(320)の書式の一実施形態が説明される。1つの例では、汎用レジスタ0は、埋め込み状態(PS:padding state)制御322(例えば、ビット55)、および機能コード(FC:function code)フィールド326(例えば、ビット57〜63)を含む。1つの例では、汎用レジスタ0のビット56は0に設定されることになっており、そうでない場合、1つの例では指定例外が認識される。この例では、汎用レジスタ0の他のすべてのビットは無視される。
【0056】
汎用レジスタ0の各フィールドが、以下でさらに説明される。
【0057】
埋め込み状態制御(PS)322:KLMD−SHAKE機能の場合、汎用レジスタ0のビット55は埋め込み状態であり、他の機能の場合、この例では、このレジスタのビット55は無視される。
【0058】
機能コード(FC)326:汎用レジスタ0のビット位置57〜63は、機能コードを含む。最後のメッセージ・ダイジェストの計算命令に割り当てられる機能コードの例としては、以下が挙げられる。
【0059】
【表1】

説明:
−− 適用されない
最後のブロックを除くすべてのデータ・ブロックの場合。最後のデータ・ブロックのサイズは、0から示された値未満までの範囲内である。
【0060】
他のすべての機能コードは、この例では割り当てられていない。
【0061】
図7に示されているように、汎用レジスタ1(330)は、ストレージ内のパラメータ・ブロックの左端のバイトの論理アドレス332を含み、これは以下でさらに説明される。24ビット・アドレス指定モードでは、汎用レジスタ1のビット位置40〜63の内容はアドレスを構成し、ビット位置0〜39の内容は無視される。31ビット・アドレス指定モードでは、汎用レジスタ1のビット位置33〜63の内容はアドレスを構成し、ビット位置0〜32の内容は無視される。64ビット・アドレス指定モードでは、汎用レジスタ1のビット位置0〜63の内容はアドレスを構成する。
【0062】
図8を参照すると、第1のオペランドの左端のバイトの位置342が、R汎用レジスタ304の内容によって指定されている。さらに、図9を参照すると、第1のオペランドの位置のバイト数(すなわち、長さ)352が、汎用レジスタR+1(350)内で指定されている。第1のオペランドは、この実施形態では、KLMD−SHAKE機能のみに適用することができ、他の機能の場合は無視される。
【0063】
図10を参照すると、第2のオペランドの左端のバイトの位置362が、R汎用レジスタ306の内容によって指定されている。さらに、図11を参照すると、第2のオペランドの位置のバイト数(すなわち、長さ)372が、汎用レジスタR+1(370)内で指定されている。
【0064】
KLMD命令の一実施形態の動作では、問い合わせ機能は、他の機能の利用可能性を示す手段を提供する。問い合わせ機能の場合、汎用レジスタR、R+1、R、およびR+1の内容は無視される。
【0065】
他の機能の場合、第2のオペランド(例えば、R内で指定されたアドレスを使用して指定された位置の値)が、パラメータ・ブロック内の初期チェイニング値を使用して、機能コードによって指定されたとおりに処理され(下で説明される)、その結果がチェイニング値を置き換える。SHA−1機能、SHA−256機能、およびSHA−512機能の場合、動作は、パラメータ・ブロック内のメッセージのビット長も使用する。動作は、第2のオペランドの位置の末尾に達するか、またはCPUによって決定されたバイト数が処理されるかのいずれかが最初に発生するまで、継続する。
【0066】
KLMD−SHAKE機能の場合、第2のオペランドの末尾に達した場合、拡張出力機能(XOF)のダイジェストが(例えば、R内で指定された)第1のオペランドの位置に格納される。その後、動作は、第1のオペランドの位置の末尾に達するか、またはCPUによって決定されたバイト数が格納されるかのいずれかが最初に発生するまで、継続する。
【0067】
結果は、条件コードで示される。
【0068】
動作の一部として、汎用レジスタR内のアドレスが、第2のオペランドから処理されたバイト数だけインクリメントされ、汎用レジスタR+1の長さが同じ数だけデクリメントされる。アドレスおよび長さの形成および更新は、アドレス指定モードによって決まる。
【0069】
例えば、24ビット・アドレス指定モードでは、汎用レジスタRのビット位置40〜63の内容が、第2のオペランドのアドレスを構成し、ビット位置0〜39の内容が無視され、更新されたアドレスのビット40〜63が、汎用レジスタR内の対応するビットを置き換え、更新されたアドレスのビット位置40からの繰り上げが無視され、汎用レジスタRのビット位置32〜39の内容が0に設定される。31ビット・アドレス指定モードでは、汎用レジスタRのビット位置33〜63の内容が、第2のオペランドのアドレスを構成し、ビット位置0〜32の内容が無視され、更新されたアドレスのビット33〜63が、汎用レジスタR内の対応するビットを置き換え、更新されたアドレスのビット位置33からの繰り上げが無視され、汎用レジスタRのビット位置32の内容が0に設定される。64ビット・アドレス指定モードでは、汎用レジスタRのビット位置0〜63の内容が、第2のオペランドのアドレスを構成し、更新されたアドレスのビット0〜63が、汎用レジスタRの内容を置き換え、ビット位置0からの繰り上げが無視される。
【0070】
24ビット・アドレス指定モードおよび31ビット・アドレス指定モードの両方では、汎用レジスタR+1のビット位置32〜63の内容が、第2のオペランド内のバイト数を指定する32ビット符号なし2進整数を形成し、更新された値が、汎用レジスタR+1のビット位置32〜63の内容を置き換える。64ビット・アドレス指定モードでは、汎用レジスタR+1のビット位置0〜63の内容が、第2のオペランド内のバイト数を指定する64ビット符号なし2進整数を形成し、更新された値が、汎用レジスタR+1の内容を置き換える。
【0071】
24ビット・アドレス指定モードまたは31ビット・アドレス指定モードでは、汎用レジスタRおよびR+1のビット位置0〜31の内容は変更されない。
【0072】
2つのKLMD−SHAKE機能(例えば、機能コード36、37)の場合、以下が適用される。
・汎用レジスタ0のビット55は、埋め込み状態(PS)制御である。例えば0の値は、第2のオペランドの埋め込みがまだ実行されていないことを示す。例えば1の値は、第2のオペランドの埋め込みが実行されたことを示す。
命令の開始時に、埋め込み状態が1であり、汎用レジスタR+1内の第2のオペランドの長さがゼロ以外である場合、指定例外が認識され、動作が抑制される。
残りの第2のオペランドの長さが0である場合、CPUが埋め込み状態を調査して、第2のオペランドの埋め込みが実行されることになっているかどうかを判定する。第2のオペランドの埋め込みが実行されている場合、埋め込み状態がCPUによって1に設定される。
・Rフィールドは、汎用レジスタの偶数と奇数の対を指定し、汎用レジスタ0以外およびレジスタR以外の偶数番号が付けられたレジスタを指定することになっており、そうでない場合、1つの例では、指定例外が認識される。
・第1のオペランドの左端のバイトの位置は、汎用レジスタRの内容によって指定される。第1のオペランドの位置のバイト数は、汎用レジスタR+1内で指定される。
・動作の一部として、汎用レジスタR内のアドレスが、第1のオペランドに格納されたバイト数だけインクリメントされ、汎用レジスタR+1の長さが同じ数だけデクリメントされる。アドレスおよび長さの形成および更新は、アドレス指定モードによって決まる。
・汎用レジスタRのアドレス指定モードの特徴、および汎用レジスタR+1の長さの特徴は、前述した汎用レジスタRおよびR+1の特徴とそれぞれ同じである。
【0073】
2つのKLMD−SHAKE機能以外の機能の場合、この実施形態では、汎用レジスタ0のビット55および命令のRフィールドは無視される。この場合、第1のオペランドは存在せず、汎用レジスタRおよびR+1は変更されない。
【0074】
アクセス・レジスタ・モードでは、アクセス・レジスタ1およびRが、パラメータ・ブロックおよび第2のオペランドを含んでいるアドレス空間をそれぞれ指定する。KLMD−SHAKE機能の場合、アクセス・レジスタRが、第1のオペランドを含んでいるアドレス空間を指定する。
【0075】
処理が第2のオペランドの左端から開始されて、1ブロックずつ右に進むかのように、結果が取得される。KLMD−SHAKE機能を除くすべての機能の場合、第2のオペランド内のすべてのソース・バイトが処理されたとき(正常完了と呼ばれる)、または第2のオペランドの長さ未満の、CPUによって決定されたブロック数が処理されたとき(部分的完了と呼ばれる)に、動作が終了する。CPUによって決定されたブロック数は、モデルに応じて変わり、命令が実行されるたびに異なる番号であってよい。CPUによって決定されたブロック数は、通常、ゼロ以外である。特定の異常な状況では、この数は0であってよく、進行しないで、条件コード(例えば、3)が設定されてよい。ただし、CPUは、この進行しないケースの無限の再発を防ぐ。
【0076】
(例えば、パラメータ・ブロック内の)チェイニング値フィールドが、第1のオペランドまたは第2のオペランドのいずれかの部分と重複する場合、チェイニング値フィールド内の結果は予測不可能である。
【0077】
KLMD−SHA−1機能、KLMD−SHA−256機能、およびKLMD−SHA−512機能の場合、汎用レジスタR+1内で指定された第2のオペランド内のすべてのバイトが処理された後に、埋め込み動作が実行され、埋め込まれたブロックに対して最後のハッシュ処理動作が実行され、その後、正常完了が発生する。KLMD−SHA3機能およびKLMD−SHAKE機能の場合、第2のオペランドのすべての完全なブロックが処理された後に、残りの部分的なブロックまたは空のブロックのいずれかに対して埋め込み動作が実行され、埋め込まれたブロックに対して最後のハッシュ処理動作が実行される。その後、KLMD−SHA3機能に関して、正常完了が発生する。
【0078】
KLMD−SHAKE機能の場合、本発明の態様によれば、埋め込みが実行された場合、埋め込み状態が汎用レジスタ0内で1に設定され、拡張出力機能(XOF)のメッセージ・ダイジェストが第1のオペランドの位置に格納される。第1のオペランド内のすべてが格納されたとき(正常完了と呼ばれる)、または第1のオペランドの長さ未満の、CPUによって決定されたブロック数が格納されたとき(部分的完了と呼ばれる)に、XOFのメッセージ・ダイジェスト生成が終了する。CPUによって決定されたブロック数は、モデルによって決まり、命令が実行されるたびに異なる数であってよい。CPUによって決定されたブロック数は、通常、ゼロ以外である。特定の異常な状況では、この数は0であってよく、進行しないで、条件コード(例えば、3)が設定されてよい。ただし、CPUは、この進行しないケースの無限の再発を防ぐ。
【0079】
正常完了によって動作が終了した場合、条件コード(例えば、0)が設定され、汎用レジスタR内の第2のオペランドのアドレスが更新され、汎用レジスタR+1内の第2のオペランドの長さが0になり、KLMD−SHAKE機能の場合、汎用レジスタR内の第1のオペランドのアドレスが更新され、汎用レジスタR+1内の第1のオペランドの長さが0になる。
【0080】
部分的完了によって動作が終了した場合、条件コード(例えば、3)が設定される。KLMD−SHAKE機能以外の機能の場合、汎用レジスタR+1内の結果として得られる値はゼロ以外である。KLMD−SHAKE機能の場合、第2のオペランドが完全に処理されなかった場合、汎用レジスタR+1内の結果として得られる値はゼロ以外であり、第1のオペランドが完全に処理されなかった場合、汎用レジスタR内の結果として得られる値はゼロ以外である。
【0081】
第2のオペランドの長さが最初に0であるときに、第2のオペランドはアクセスされず、汎用レジスタR内の第2のオペランドのアドレスおよび汎用レジスタR+1内の第2のオペランドの長さは変更されず、条件コード(例えば、0)が設定される。ただし、空のブロック(L=0)の場合の埋め込み動作が実行され、その結果がパラメータ・ブロックに格納される。
【0082】
KLMD−SHAKE機能の場合、第1のオペランドの長さが最初に0であるときに、第1のオペランドはアクセスされず、汎用レジスタR内の第1のオペランドのアドレスおよび汎用レジスタR+1内の第1のオペランドの長さは変更されない。ただし、第1のオペランドの長さが最初に0である場合でも、パラメータ・ブロックが更新される。
【0083】
格納されるパラメータ・ブロックの部分および第1のオペランドの位置(適用可能な場合)に関して、PERストレージ変更イベントが認識されることがある。第1のオペランドの位置(適用可能な場合)、第2のオペランドの位置、およびパラメータ・ブロックに関して、PERゼロ・アドレス検出イベントが認識されることがある。2つ以上の位置に関してPERイベントが検出された場合、PERアクセス識別(PAID:PER access identification)およびPER ASCE ID(AI)においてどの位置が識別されるかは、予測不可能である。
【0084】
このCPU、他のCPU、およびチャンネル・プログラムによって観察されるとき、パラメータ・ブロックおよびストレージ・オペランドへの参照は、多重アクセス参照であってよく、これらのストレージ位置へのアクセスは、必ずしもブロック・コンカレントではなく、これらのアクセスまたは参照のシーケンスは定義されない。
【0085】
命令の1回の実行において処理される大きさよりも大きい第1のオペランド(適用可能な場合)および第2のオペランドの部分に関して、アクセス例外が報告されることがあるが、第1のオペランドまたは第2のオペランドの長さを超える位置に関してアクセス例外は認識されず、処理されている現在の位置から4Kバイトよりも大きく超える位置に関しても、アクセス例外は認識されない。
【0086】
上で示したように、最後のメッセージ・ダイジェストの計算命令は、複数の機能を実行するように構成される。それらの機能のうちの2つ(KLMD−SHAKE−128機能およびKLMD−SHAKE−256機能)が、下で説明される。これらの機能の説明において、シンボルxp<n>は、SHAKE機能によって使用されるn個の埋め込みバイトを指す。埋め込みの左端のバイトのビット位置3〜7は2進数の1を含み、右端の埋め込みバイトのビット位置0は2進数の1を含む(これは、ビッグエンディアン形式の場合であり、例えばリトルエンディアンなどの他の形式の場合は、異なることがある)。1つの例では、他のすべてのビットは0である。例えば、埋め込み状態(PS、汎用レジスタ0のビット55)が0であり、残りの第2のオペランドの長さがデータ・ブロック・サイズ未満である場合、SHAKE機能の埋め込みが実行される。
【0087】
KLMD−SHAKE−128(KLMD機能コード36)
【0088】
この機能では、1つの例では、図12を参照すると、チェイニング値382を含んでいるパラメータ・ブロック380が使用される。最初に、チェイニング値382は、初期チェイニング値(ICV)を含む。初期チェイニング値は、例えば、SHA−3アルゴリズムおよびSHAKEアルゴリズムを実装するKeccak[c]機能によって使用される1600ビットの状態配列を表す。
【0089】
この機能の動作では、汎用レジスタR+1内の第2のオペランドの長さが168バイト以上である場合、パラメータ・ブロック380内の200バイトの初期チェイニング値と共にKeccak[c]アルゴリズムを使用して、オペランド2内の168バイトのメッセージ・ブロックに対して、200バイトの中間メッセージ・ダイジェストが生成される。生成された中間メッセージ・ダイジェスト(出力チェイニング値(OCV)とも呼ばれる)は、パラメータ・ブロックのチェイニング値382を置き換える。
【0090】
1つの例では、SHA3機能およびSHAKE機能の場合、Keccak[c]アルゴリズムは、パラメータ・ブロック内の1,600ビットの状態配列を使用する。この状態配列は、それぞれ64ビットを含んでいる25のレーンを含む。この状態配列の各ビットには、0〜1,599の番号が付けられ、各レーンの各ビットには、0〜63の番号が付けられる。
【0091】
パラメータ・ブロック内で、状態配列の各バイトは、左から右への昇順に現れるが、各バイト内では、各ビットは左から右への降順に現れる。すなわち、パラメータ・ブロックのバイト0が状態配列のビット7、6、5、4、3、2、1、および0を(左から右に)含み、バイト1が状態配列のビット15、14、13、12、11、10、9、および8を含む、などとなる。メモリ内で表されるとき、状態配列の個別のレーンのビット位置は、2のべき乗に対応する(他の実施形態では、順序付けが異なってよい)。
【0092】
前述したパラメータ・ブロックのビットの順序付けは、第2のオペランドのメッセージのバイトにも適用される。KLMD−SHAKE機能の場合、第1のオペランドに格納される結果は、各バイト内のビットの左から右への順序付けが7、6、5、4、3、2、1、および0であるパラメータ・ブロックの結果に類似している。
【0093】
さらに、動作において、残りの第2のオペランドの長さが完全なブロック(例えば、168バイト)より短い場合の処理は、下で説明されているとおりである。
【0094】
埋め込み状態(汎用レジスタ0のビット55)が0である場合(埋め込みがまだ実行されていないことを示す)、図13を参照して下で説明されているように、埋め込みが発生する。
・シンボル「xp<n>」に関して説明されているように、第2のオペランド400の右側の残りのバイト402で埋め込みが実行され、168バイトのメッセージ・ブロック404を形成する。埋め込みは、バイトが第2のオペランドに残っていない場合でも発生し、第2のオペランドの内容を変更しない。
・埋め込み状態制御が1に設定され、埋め込みが実行されたことを示す。
・汎用レジスタR内の第2のオペランドのアドレスが、処理されたメッセージのバイト数だけインクリメントされ、汎用レジスタR+1内の第2のオペランドの長さが0に設定される。
・168バイトの埋め込まれたメッセージ404と、(パラメータ・ブロック内のICVからの、または前のブロックの処理から得られたOCVからの)状態配列408の内容との排他的OR406が計算されて、拡張出力機能(XOF)の処理で使用される出力チェイニング値410を形成する。
【0095】
埋め込みが完了したときの処理された第2のオペランドのブロックの数に応じて、(a)出力チェイニング値がパラメータ・ブロックに格納され、条件コード(例えば、3(部分的完了))を設定することによって命令が完了するか、または(b)動作が、下で説明されているように、拡張出力機能(XOF)の処理を続行する。
【0096】
埋め込み状態が1である場合(命令の現在または前の実行によって、メッセージに対して埋め込みが実行されたことを示す)、図14を参照して下で説明されているように、拡張出力機能(XOF)の処理が実行される。
1. 汎用レジスタR+1内の第1のオペランドの長さが0である場合、出力チェイニング値がパラメータ・ブロック500に格納され、命令が条件コード(例えば、0)を伴って完了する。命令の開始時に第1のオペランドの長さが0である場合、ICVがパラメータ・ブロックからフェッチされて、変更されずにOCVとして再び格納されるかどうかは、モデルに依存する。
2. 前の出力チェイニング値(OCV)を入力として使用してKeccak[c]機能502が呼び出され、出力チェイニング値を置き換える。
3. 汎用レジスタRが、第1のオペランドの現在のアドレスを含み、汎用レジスタR+1が、第1のオペランドの残りの長さを含む。格納されるバイト数nは、残りの第1のオペランドの長さまたは168のいずれか小さい方である。
出力チェイニング値の最初のnバイトが、第1のオペランドの位置に格納される。
汎用レジスタR内の第1のオペランドのアドレスが、nだけインクリメントされ、汎用レジスタR+1内の第1のオペランドの長さが、nだけデクリメントされる。
【0097】
このプロセスのステップ1〜3は、第1のオペランドの長さが0になるまで(この場合、命令が、条件コード(例えば、0)を伴って完了する)、またはCPUによって決定されたバイト数が格納されるまで(この場合、命令が、条件コード(例えば、3)を伴って完了する)、繰り返される。出力チェイニング値510は、条件コード0または3のいずれが設定されるかに関わらず、パラメータ・ブロックのバイト0〜199に格納される。
【0098】
KLMD−SHAKE−256(KLMD機能コード37)
【0099】
この機能の場合、使用されるパラメータ・ブロックは、図12に示されているように、チェイニング値382も含む。
【0100】
この機能の動作では、汎用レジスタR+1内の第2のオペランドの長さが136バイト以上である場合、パラメータ・ブロック内の200バイトの初期チェイニング値と共にKeccak[c]アルゴリズムを使用して、オペランド2内の136バイトのメッセージ・ブロックに対して、200バイトの中間メッセージ・ダイジェストが生成される。生成された中間メッセージ・ダイジェスト(出力チェイニング値(OCV)とも呼ばれる)は、パラメータ・ブロックのチェイニング値を置き換える。状態配列内のビットの番号付けと比較したときの、パラメータ・ブロックおよび第2のオペランド内のビットの番号付けは、上で説明したとおりである。この動作は、第2のオペランドの長さが136バイト未満になるまで継続し、この長さが136バイト未満になった時点で、下で説明されているように、動作が続行する。
【0101】
埋め込み状態(汎用レジスタ0のビット55)が0である場合(埋め込みがまだ実行されていないことを示す)、図15を参照して下で説明されているように、埋め込みが発生する。
・シンボル「xp<n>」に関して説明されているように、第2のオペランド600の右側の残りのバイト602で埋め込みが実行され、136バイトのメッセージ・ブロック604を形成する。埋め込みは、バイトが第2のオペランドに残っていない場合でも発生し、第2のオペランドの内容を変更しない。
・埋め込み状態制御が1に設定され、埋め込みが実行されたことを示す。
・汎用レジスタR内の第2のオペランドのアドレスが、処理されたメッセージのバイト数だけインクリメントされ、汎用レジスタR+1内の第2のオペランドの長さが0に設定される。
・136バイトの埋め込まれたメッセージ604と、(パラメータ・ブロック内のICVからの、または前のブロックの処理から得られたOCVからの)状態配列608の内容との排他的OR606が計算されて、拡張出力機能(XOF)の処理で使用される出力チェイニング値610を形成する。
【0102】
埋め込みが完了したときの処理された第2のオペランドのブロックの数に応じて、(a)出力チェイニング値がパラメータ・ブロックに格納され、条件コード(例えば、3(部分的完了))を設定することによって命令が完了するか、または(b)動作が、下で説明されているように、拡張出力機能(XOF)の処理を続行する。
【0103】
埋め込み状態が1である場合(命令の現在または前の実行によって、メッセージに対して埋め込みが実行されたことを示す)、図16を参照して下で説明されているように、拡張出力機能(XOF)の処理が実行される。
1. 汎用レジスタR+1内の第1のオペランドの長さが0である場合、出力チェイニング値がパラメータ・ブロック700に格納され、命令が条件コード0を伴って完了する。命令の開始時に第1のオペランドの長さが0である場合、ICVがパラメータ・ブロックからフェッチされて、変更されずにOCVとして再び格納されるかどうかは、モデルに依存する。
2. 前の出力チェイニング値(OCV)を入力として使用してKeccak[c]機能702が呼び出され、出力チェイニング値を置き換える。
3. 汎用レジスタRが、第1のオペランドの現在のアドレスを含み、汎用レジスタR+1が、第1のオペランドの残りの長さを含む。格納されるバイト数nは、残りの第1のオペランドの長さまたは136のいずれか小さい方である。出力チェイニング値の最初のnバイトが、第1のオペランドの位置704に格納される。汎用レジスタR内の第1のオペランドのアドレスが、nだけインクリメントされ、汎用レジスタR+1内の第1のオペランドの長さが、nだけデクリメントされる。
【0104】
このプロセスのステップ1〜3は、第1のオペランドの長さが0になるまで(この場合、命令が、条件コード(例えば、0)を伴って完了する)、またはCPUによって決定されたバイト数が格納されるまで(この場合、命令が、条件コード(例えば、3)を伴って完了する)、繰り返される。出力チェイニング値710は、条件コード0または3のいずれが設定されるかに関わらず、パラメータ・ブロックのバイト0〜199に格納される。
【0105】
KLMD命令に関する特殊な条件:
【0106】
1つの例では、次のいずれかが発生した場合に、指定例外が認識され、他の動作は実行されない。
・汎用レジスタ0のビット56が0でない。
・汎用レジスタ0のビット57〜63が、割り当てられていないか、またはインストールされていない機能コードを指定する。
・Rフィールドが、奇数番号が付けられたレジスタまたは汎用レジスタ0を指定する。
・KLMD−SHAKE機能の場合に、次のいずれかが真である。
− Rフィールドが、奇数番号が付けられたレジスタ、汎用レジスタ0、またはレジスタRを指定する。
− 第2のオペランドの長さがゼロ以外であり、埋め込み状態が1である。
得られる条件コード:
0 正常完了
1 −−
2 −−
3 部分的完了
【0107】
一実施形態では、
* KLMD−SHAKE機能の場合、XOFの処理中に条件コード3が設定されたときに、汎用レジスタR内の第1のオペランドのアドレスおよび汎用レジスタR+1内の第1のオペランドの長さが、プログラムが命令に分岐して戻り、動作を続行できるように、更新される。
異常な状況の場合、CPUは、この進行しないケースの無限の再発を防ぐ。したがって、プログラムは、条件コード3が設定されているときに、無限ループに陥ることなく、常に安全に命令に分岐して戻ることができる。
* 最後のメッセージ・ダイジェストの計算命令は、第2のオペランドがデータ・ブロック・サイズの倍数になることを必要としない。最後のメッセージ・ダイジェストの計算命令は、まず完全なブロックを処理し、条件コード(例えば、3)を設定してから、すべてのブロックを処理することができる。最後のメッセージ・ダイジェストの計算命令は、すべての完全なブロックを処理した後に、第2のオペランドの残りの部分を含む、埋め込み動作を実行する。この実行では、指定されたブロック・ダイジェスト・アルゴリズムの1回または2回の反復を使用してよい。
* 最後のメッセージ・ダイジェストの計算命令は、8ビットの倍数の長さのメッセージに対するSHA埋め込みを実行する。SHA機能が8ビットの倍数ではないビット列に適用される場合、プログラムは、SHA埋め込みを実行し、中間メッセージ・ダイジェストの計算命令を使用する。
* KLMD−SHAKE機能の場合、1つの例では、以下が適用される。
a.メッセージに対するKLMDの最初の実行の前に、埋め込み状態(汎用レジスタ0のビット55)が0に設定され、埋め込み状態は、正常完了が発生するまで、同じメッセージに対するその後のKLMDの実行のために、プログラムによって変更されない。
b.第1のオペランドの長さが0であるときに、第2のオペランドの最後の(短いか、または空の)ブロックの埋め込みが実行された場合、埋め込まれたブロックと、状態配列の内容との排他的ORが計算され、その結果が出力チェイニング値としてパラメータ・ブロックに格納され、命令が条件コード0を伴って完了する。この場合、Keccak[c]機能は呼び出されない。
* 1つの態様では、最終的なNISTのSHA−3仕様に従って、KLMD SHA−3機能およびSHAKE機能が(例えば、指定されたビットのシーケンスを使用して)埋め込みを実行する。SHA−3仕様の以前のバージョンでは、異なる埋め込みのビット・シーケンスを使用していた。以前のSHA−3仕様に従って設計されたソフトウェアは、最後のメッセージ・ブロックの埋め込みを実行する場合、KIMD SHA−3機能およびSHAKE機能から引き続き恩恵を受けることができる。
【0108】
本明細書に記載されているように、最後のメッセージ・ダイジェストの計算命令の1つまたは複数の機能が、埋め込み動作を実行する。しかし、一実施形態では、この埋め込み動作は1回実行され、したがって、特定の処理が実行される。この処理に関するその他の詳細が、図17を参照して説明される。この処理は、少なくとも1つのプロセッサによって実行される。
【0109】
図17を参照すると、最初に入力メッセージの最後のブロックの処理に基づいて、第2のオペランドの長さが指定された値(例えば、0)に等しいかどうかに関する判定(照会800)が行われる。この長さが0に等しくない場合、最後の(短い)ブロックに対して埋め込みが実行され、埋め込まれたブロックが、Keccakアルゴリズムを使用してハッシュされ、レジスタR内の第2のオペランドのアドレスが、処理されたバイト数だけインクリメントされ、汎用レジスタR+1内の第2のオペランドの長さが0に設定される(ステップ806)。埋め込み状態制御が1に設定されて(ステップ808)から、拡張出力機能の処理が開始される(ステップ802)。この処理の例は、上で説明されている。
【0110】
照会800に戻り、第2のオペランドの長さが指定された値に等しい場合、埋め込み状態制御のチェックが実行される(照会804)。埋め込み状態制御が1に設定されている場合(このメッセージに対して埋め込みがすでに実行されていることを示す)、拡張出力機能の処理が開始されるか、または続行される(ステップ802)。しかし、照会804に戻ると、埋め込み状態制御が0に設定された場合(このメッセージに対して埋め込みが実行されていないことを示す)、本明細書に記載されているように埋め込みが実行され、埋め込まれたブロックが、Keccakアルゴリズムを使用してハッシュされ、レジスタR内の第2のオペランドのアドレスが、処理されたバイト数だけインクリメントされ、汎用レジスタR+1内の第2のオペランドの長さが0に設定される(ステップ806)。埋め込み状態制御が1に設定され(ステップ808)、拡張出力機能の処理が開始される(ステップ802)。これによって処理を完了する。
【0111】
本明細書に記載されているように、命令の実行の開始時に、空の第2のオペランドのメッセージが指定されたのか、それとも埋め込みがすでに実行されたのかを含む複数の状態を区別するための機能が提供される。この制御を提供することによって、データの認証およびその他の処理を含む、コンピューティング環境内の処理が容易になる。したがって、本発明の態様は、コンピューティング技術に密接に関係している。
【0112】
命令を実行することおよび埋め込み制御を使用することを含む、コンピューティング環境内の処理を容易にすることに関する詳細が、図18〜19を参照してさらに説明される。
【0113】
図18を参照すると、メッセージのメッセージ・ダイジェストを生成するために使用される命令が取得され(ステップ900)、少なくとも1つのプロセッサによって実行される(ステップ902)。この実行することは、例えば、命令の埋め込み状態制御をチェックして、メッセージに対して埋め込みが実行されたかどうかを判定することと(ステップ904)、チェックが埋め込みが実行されたことを示していることに基づいて、第1の動作を実行することと(ステップ906)、チェックが埋め込みが実行されていないことを示していることに基づいて、第1の動作とは異なる第2の動作を実行することと(ステップ908)を含む。
【0114】
一例として、第1の動作は、拡張出力機能の処理を実行して、メッセージ・ダイジェストに関連する処理をさらに実行することを含む(ステップ910)。拡張出力機能の処理を実行することは、例えば、メッセージ・ダイジェストの少なくとも一部を再ハッシュして、追加の出力を生成することを含む(ステップ912)。
【0115】
さらに、一例として、第2の動作は、メッセージの少なくとも一部の埋め込みを実行して、選択されたサイズのメッセージ・ブロックを形成することを含む(ステップ914)。埋め込みを実行することは、例えば、0のビットを、メッセージの少なくとも一部の選択された位置に埋め込むことを含む(ステップ916)。さらに、第2の動作は、メッセージに対して埋め込みが実行されたことを示すように埋め込み状態制御を設定することを含む(ステップ918)。
【0116】
例として図19を参照すると、埋め込み状態制御が、命令によって使用されるレジスタ内に配置されるか(920)、または埋め込み状態制御が、命令がアクセスできるメモリ内に配置される(922)。
【0117】
1つの例では、この命令は、メッセージの1つまたは複数の最後のブロックを処理して、メッセージの認証において使用されるメッセージ・ダイジェストを生成するために使用される、最後のメッセージ・ダイジェストの計算命令である(924)。
【0118】
メッセージは、例えば、メモリ内に格納され、命令が、メッセージの位置を特定するためのメモリ内のアドレスを提供する(926)。
【0119】
一実施形態では、この実行することは、埋め込み状態制御が埋め込みが実行されたことを示していることに基づいて、および命令が実行を開始していることに基づいて、メッセージの長さがゼロ以外であるかどうかを判定することと、長さがゼロ以外であることを示しているとの判定に基づいて例外を示すことであって、埋め込み状態制御が、埋め込みが実行されて命令が実行を開始していることを示している、こととをさらに含む(ステップ928)。
【0120】
本明細書ではさまざまな実施形態および例が示されたが、多くの変形が可能である。例えば、命令によって使用されるレジスタまたはフィールドあるいはその両方に含まれている値は、他の実施形態では、メモリ位置などの他の位置にあってよい。さらに、その他の追加の、またはより少ないフィールドまたはレジスタ、あるいはその他のサイズが使用されてよい。多くの変形が可能である。例えば、明示的に指定されるレジスタまたはフィールドの代わりに、暗黙的なレジスタが使用されてよい。さらに、本発明の1つまたは複数の態様が、他のハッシュ・アルゴリズム、またはその他の技術またはプロセス、あるいはその両方と共に使用されてよい。その他の変形も可能である。
【0121】
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読記憶媒体を含んでよい。
【0122】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスにすることができる。コンピュータ可読記憶媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-only memory)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasable programmable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD−ROM:compact disc read-only memory)、デジタル多用途ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含む。本明細書において使用されているコンピュータ可読記憶媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの一時的信号であると解釈されるべきではない。
【0123】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えてよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読記憶媒体に格納するために転送する。
【0124】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN:local area network)または広域ネットワーク(WAN:wide area network)を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA:field-programmable gate arrays)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic arrays)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行してよい。
【0125】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。
【0126】
これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読記憶媒体がフローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読記憶媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであってもよい。
【0127】
コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施するように、コンピュータ実装プロセスを生成すべく、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込まれ、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で一連の動作可能なステップを実行させるものであってもよい。
【0128】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生してよい。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行されてよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
【0129】
上に加えて、顧客の環境の管理を提供するサービス・プロバイダによって、1つまたは複数の態様が提供されること、デプロイされること、管理されること、サービス提供されることなどが行われてよい。例えば、サービス・プロバイダは、1人または複数人の顧客のために1つまたは複数の態様を実行するコンピュータ・コードまたはコンピュータ・インフラストラクチャあるいはその両方を作成すること、維持すること、サポートすることなどを行うことができる。その見返りとして、サービス・プロバイダは、例えばサブスクリプションまたは料金契約あるいはその両方の下で、顧客から支払いを受け取ってよい。追加または代替として、サービス・プロバイダは、1つまたは複数のサード・パーティへの広告コンテンツの販売から支払いを受け取ってよい。
【0130】
1つの態様では、1つまたは複数の実施形態を実行するために、アプリケーションがデプロイされてよい。1つの例として、アプリケーションのデプロイは、1つまたは複数の実施形態を実行するよう動作可能なコンピュータ・インフラストラクチャを提供することを含む。
【0131】
さらに別の態様として、コンピュータ可読コードをコンピューティング・システムに統合することを含むコンピューティング・インフラストラクチャがデプロイされてよく、このコンピューティング・システムでは、コンピューティング・システムと組み合わせたコードが、1つまたは複数の実施形態を実行できる。
【0132】
さらに別の態様として、コンピュータ可読コードをコンピュータ・システムに統合することを含んでいる、コンピューティング・インフラストラクチャを統合するためのプロセスが提供されてよい。コンピュータ・システムは、コンピュータ可読媒体を備え、このコンピュータ可読媒体では、コンピュータ媒体が1つまたは複数の実施形態を含む。コンピュータ・システムと組み合わせたコードは、1つまたは複数の実施形態を実行できる。
【0133】
上ではさまざまな実施形態が説明されたが、それらは単なる例である。例えば、1つまたは複数の実施形態を組み込んで使用するために、他のアーキテクチャのコンピューティング環境が使用され得る。さらに、異なる命令、命令形式、命令フィールド、または命令値、あるいはその組み合わせが使用されてよい。多くの変形が可能である。
【0134】
さらに、他の種類のコンピューティング環境が、恩恵を受けることができ、使用され得る。一例として、プログラム・コードの格納または実行あるいはその両方を行うのに適した、システム・バスを介して直接的または間接的にメモリ素子に結合された少なくとも2つのプロセッサを含んでいる、データ処理システムを使用できる。これらのメモリ素子は、例えば、プログラム・コードの実際の実行時に使用されるローカル・メモリ、バルク・ストレージ、および実行時にバルク・ストレージからコードが取得されなければならない回数を減らすために少なくとも一部のプログラム・コードを一時的に格納するキャッシュ・メモリを含む。
【0135】
入出力デバイスまたはI/Oデバイス(キーボード、ディスプレイ、ポインティング・デバイス、DASD、テープ、CD、DVD、サム・ドライブ、およびその他の記憶媒体などを含むが、これらに限定されない)は、直接的に、または介在するI/Oコントローラを通じて、システムに結合できる。ネットワーク・アダプタがシステムに結合され、介在するプライベート・ネットワークまたはパブリック・ネットワークを通じて、データ処理システムを、他のデータ処理システムまたはリモート・プリンタまたはストレージ・デバイスに結合できるようにしてもよい。モデム、ケーブル・モデム、およびイーサネット(R)・カードは、使用可能なネットワーク・アダプタのうちの、ごくわずかの種類にすぎない。
【0136】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、制限することを意図していない。本明細書において使用されるとき、単数形「a」、「an」、および「the」は、特に明示的に示されない限り、複数形も含むことが意図されている。「備える(comprise)」または「備えている(comprising)」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、動作、要素、またはコンポーネント、あるいはその組み合わせの存在を示すが、1つまたは複数のその他の機能、整数、ステップ、動作、要素、コンポーネント、またはこれらのグループ、あるいはその組み合わせの存在または追加を除外していないということが、さらに理解されるであろう。
【0137】
添付の特許請求の範囲内のすべてのミーンズまたはステップ・プラス・ファンクション要素の対応する構造、材料、動作、および均等なものは、もしあれば、具体的に請求されるとき、その他の請求される要素と組み合わせて、機能を実行するための任意の構造、材料、または動作を含むことが意図されている。1つまたは複数の実施形態の説明は、例示および説明の目的で提示されているが、網羅的であることは意図されておらず、開示された形態に限定されない。多くの変更および変形が、当業者にとって明らかであろう。さまざまな態様および実際的な適用を最も適切に説明するため、および他の当業者が、企図されている特定の用途に適しているようなさまざまな変更を伴う多様な実施形態を理解できるようにするために、実施形態が選択されて説明された。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
【国際調査報告】