目次

NIST SP 800-56C Rev. 2 日本語訳

英語タイトル : Recommendation for Key-Derivation Methods in Key-Establishment Schemes
日本語タイトル : 鍵確立方式における鍵導出方法
公開日 : 2020-08-18
原文URL : https://csrc.nist.gov/pubs/sp/800/56/c/r2/final
翻訳編集 : 自動生成(有志による非公式の日本語訳), 原文取得日 : 2026-09-30, 訳文 : 288 / 288 ブロック

[要約] SP 800-56C Rev. 2 は、SP 800-56AまたはSP 800-56Bの鍵確立方式で確立した共有シークレットから、鍵素材を導出する技法を規定します。ハッシュ関数を用いるワンステップ鍵導出、抽出と拡張を行うツーステップ鍵導出、アプリケーション固有の鍵導出方法、ハッシュ関数とMACアルゴリズムの選択を扱います。追加の考察として、切り詰めハッシュ関数の使用、salt値の選択、抽出および拡張に用いるMACアルゴリズム、機微データの破棄にも触れます。

NIST Special Publication 800-56C

NIST 特別刊行物 800-56C

Revision 2

改訂第2版

Recommendation for Key-Derivation Methods in Key-Establishment Schemes

鍵確立方式における鍵導出方法に関する推奨事項

Elaine Barker Lily Chen Richard Davis

Elaine Barker、Lily Chen、Richard Davis

This publication is available free of charge from: https://doi.org/10.6028/NIST.SP.800-56Cr2

本刊行物は次のURLから無料で入手できる: https://doi.org/10.6028/NIST.SP.800-56Cr2

C O M P U T E R S E C U R I T Y

コンピューターセキュリティ

NIST Special Publication 800-56C

NIST 特別刊行物 800-56C

Revision 2

改訂第2版

Recommendation for Key-Derivation Methods in Key-Establishment Schemes

鍵確立方式における鍵導出方法に関する推奨事項

Elaine Barker Lily Chen

Elaine Barker、Lily Chen

Computer Security Division Information Technology Laboratory

コンピューターセキュリティ部門 情報技術研究所

Richard Davis

Richard Davis

National Security Agency

国家安全保障局

This publication is available free of charge from: https://doi.org/10.6028/NIST.SP.800-56Cr2

本刊行物は次のURLから無料で入手できる: https://doi.org/10.6028/NIST.SP.800-56Cr2

August 2020

2020年8月

U.S. Department of Commerce Wilbur L. Ross, Jr., Secretary

米国商務省 Wilbur L. Ross, Jr. 長官

National Institute of Standards and Technology

国立標準技術研究所

Walter Copan, NIST Director and Under Secretary of Commerce for Standards and Technology

Walter Copan、NIST所長兼商務省標準技術担当次官

Authority

権限

This publication has been developed by NIST in accordance with its statutory responsibilities under the Federal Information Security Modernization Act (FISMA) of 2014, 44 U.S.C. § 3551 et seq., Public Law (P.L.) 113-283. NIST is responsible for developing information security standards and guidelines, including minimum requirements for federal information systems, but such standards and guidelines shall not apply to national security systems without the express approval of appropriate federal officials exercising policy authority over such systems. This guideline is consistent with the requirements of the Office of Management and Budget (OMB) Circular A-130.

本刊行物は、2014年連邦情報セキュリティ近代化法(FISMA)、44 U.S.C. § 3551 et seq.、公法(P.L.)113-283に基づく法定責務に従ってNISTが作成しました。NISTは、連邦情報システムの最低要件を含む情報セキュリティ標準およびガイドラインの策定を担います。ただし、適切な連邦当局者が当該システムに関する政策権限を行使し、明示的に承認しない限り、そのような標準およびガイドラインを国家安全保障システムに適用してはなりません。このガイドラインは、行政管理予算局(OMB)通達A-130の要件に整合します。

Nothing in this publication should be taken to contradict the standards and guidelines made mandatory and binding on federal agencies by the Secretary of Commerce under statutory authority. Nor should these guidelines be interpreted as altering or superseding the existing authorities of the Secretary of Commerce, Director of the OMB, or any other federal official. This publication may be used by nongovernmental organizations on a voluntary basis and is not subject to copyright in the United States. Attribution would, however, be appreciated by NIST.

本刊行物のいかなる内容も、法定権限に基づき商務長官が連邦機関に義務付け、拘束力を持たせた標準およびガイドラインに反すると解釈してはなりません。また、これらのガイドラインを、商務長官、OMB長官、その他の連邦当局者の既存の権限を変更または置き換えるものと解釈してはなりません。本刊行物は非政府組織が任意に利用でき、米国では著作権の対象ではありません。ただし、NISTへの帰属表示を歓迎します。

National Institute of Standards and Technology Special Publication 800-56C Revision 2 Natl. Inst. Stand. Technol. Spec. Publ. 800-56C Rev. 2, 41 pages (August 2020) CODEN: NSPUE2

国立標準技術研究所 特別刊行物800-56C 改訂第2版、Natl. Inst. Stand. Technol. Spec. Publ. 800-56C Rev. 2、41ページ(2020年8月)、CODEN: NSPUE2

This publication is available free of charge from: https://doi.org/10.6028/NIST.SP.800-56Cr2

本刊行物は次のURLから無料で入手できる: https://doi.org/10.6028/NIST.SP.800-56Cr2

Certain commercial entities, equipment, or materials may be identified in this document in order to describe an experimental procedure or concept adequately. Such identification is not intended to imply recommendation or endorsement by NIST, nor is it intended to imply that the entities, materials, or equipment are necessarily the best available for the purpose. There may be references in this publication to other publications currently under development by NIST in accordance with its assigned statutory responsibilities. The information in this publication, including concepts and methodologies, may be used by federal agencies even before the completion of such companion publications. Thus, until each publication is completed, current requirements, guidelines, and procedures, where they exist, remain operative. For planning and transition purposes, federal agencies may wish to closely follow the development of these new publications by NIST. Organizations are encouraged to review all draft publications during public comment periods and provide feedback to NIST. Many NIST cybersecurity publications, other than the ones noted above, are available at https://csrc.nist.gov/publications.
原本PDFの抜粋画像原本 PDF p.3 の画像抜粋
実験手順または概念を適切に説明するため、本書では特定の商業組織、機器または材料を挙げることがあります。その記載は、NISTによる推奨または承認を意味するものではなく、また当該組織、材料または機器が目的に対して必ずしも最良のものであることを意味するものでもありません。本刊行物には、法定責務に従いNISTが現在策定中の他の刊行物への参照が含まれる場合があります。これらの関連刊行物が完成する前であっても、連邦機関は本刊行物の情報(概念および方法論を含む)を利用できます。したがって、各刊行物が完成するまで、現行の要件、ガイドラインおよび手順は、存在する場合、引き続き有効です。計画および移行のため、連邦機関はNISTによる新たな刊行物の策定状況を注意深く確認することを望む場合があります。組織には、公開意見募集期間中にすべての草案を確認し、NISTに意見を提出することを推奨します。上記以外のNISTサイバーセキュリティ刊行物の多くは https://csrc.nist.gov/publications で入手できます。

Comments on this publication may be submitted to:

本刊行物への意見は、次に提出できる:

National Institute of Standards and Technology Attn: Computer Security Division, Information Technology Laboratory 100 Bureau Drive (Mail Stop 8930) Gaithersburg, MD 20899-8930 Email: 800-56C_Comments@nist.gov

国立標準技術研究所 宛先: Computer Security Division, Information Technology Laboratory 100 Bureau Drive (Mail Stop 8930) Gaithersburg, MD 20899-8930 電子メール: 800-56C_Comments@nist.gov

All comments are subject to release under the Freedom of Information Act (FOIA).

すべての意見は、情報公開法(FOIA)に基づく公開対象となります。

Reports on Computer Systems Technology

コンピュータシステム技術に関する報告書

The Information Technology Laboratory (ITL) at the National Institute of Standards and Technology (NIST) promotes the U.S. economy and public welfare by providing technical leadership for the Nation’s measurement and standards infrastructure. ITL develops tests, test methods, reference data, proof of concept implementations, and technical analyses to advance the development and productive use of information technology. ITL’s responsibilities include the development of management, administrative, technical, and physical standards and guidelines for the cost-effective security and privacy of other than national security-related information in federal information systems. The Special Publication 800-series reports on ITL’s research, guidelines, and outreach efforts in information system security, and its collaborative activities with industry, government, and academic organizations.

米国国立標準技術研究所(NIST)の情報技術研究所(ITL)は、計測と標準の基盤に技術的なリーダーシップを発揮し、米国の経済と公共の福祉を促進しています。ITLは、情報技術の発展と生産的な利用を推進するため、試験、試験方法、参照データ、概念実証の実装、および技術分析を開発します。ITLの責務には、連邦情報システムにおける国家安全保障関連以外の情報のセキュリティとプライバシーを費用対効果よく確保するため、管理面、事務面、技術面、物理面の標準およびガイドラインを策定することが含まれます。SP 800シリーズは、ITLの情報システムセキュリティに関する研究、ガイドライン、普及活動ならびに産業界、政府、学術機関との協力活動を報告します。

Abstract

概要

This Recommendation specifies techniques for the derivation of keying material from a shared secret established during a key-establishment scheme defined in NIST Special Publications 800-56A or 800-56B.

本推奨事項は、NIST特別刊行物800-56Aまたは800-56Bに定義される鍵確立方式において確立された共有シークレットから、鍵素材を導出する技法を規定します。

Keywords

キーワード

Expansion; extraction; extraction-then-expansion; hash function; key derivation; key establishment; message authentication code.

拡張、抽出、抽出後拡張、ハッシュ関数、鍵導出、鍵確立、メッセージ認証コード。

Acknowledgements

謝辞

The authors gratefully acknowledge the contributions on this and previous versions of this document by their NIST colleagues (Quynh Dang, Sharon Keller, John Kelsey, Allen Roginsky, Meltem Sonmez Turan, Apostol Vassilev, and Tim Polk) and by Miles Smid, formerly of Orion Security Solutions.

著者らは、本文書およびその過去の版に対する、NISTの同僚(Quynh Dang、Sharon Keller、John Kelsey、Allen Roginsky、Meltem Sonmez Turan、Apostol Vassilev、Tim Polk)、およびかつてOrion Security Solutionsに所属していたMiles Smidの貢献に深く感謝します。

The authors also gratefully appreciate the thoughtful and instructive comments received during the public comment periods, which helped to improve the quality of this publication.

著者らはまた、パブリックコメント期間中に寄せられた、思慮深く示唆に富むコメントにも深く感謝します。これらは本刊行物の品質向上に役立ちました。

Conformance Testing

適合性試験

Conformance testing for implementations of the functions that are specified in this publication will be conducted within the framework of the Cryptographic Algorithm Validation Program (CAVP) and the Cryptographic Module Validation Program (CMVP). The requirements on these implementations are indicated by the word “shall.” Some of these requirements may be out of scope for CAVP or CMVP validation testing and are therefore the responsibility of entities using, implementing, installing, or configuring applications that incorporate this Recommendation.

本刊行物に規定する機能の実装に対する適合性試験は、暗号アルゴリズム検証プログラム(CAVP)および暗号モジュール検証プログラム(CMVP)の枠組みで実施されます。これらの実装に適用される要件は「shall」という語で示されます。一部の要件はCAVPまたはCMVPの検証試験の対象範囲外となることがあり、その場合、本勧告を組み込んだアプリケーションを使用、実装、インストールまたは構成する主体が当該要件に対する責任を負います。

Patent Disclosure Notice

特許開示に関する通知

NOTICE: The Information Technology Laboratory (ITL) has requested that holders of patent claims whose use may be required for compliance with the guidance or requirements of this publication disclose such patent claims to ITL. However, holders of patents are not obligated to respond to ITL calls for patents and ITL has not undertaken a patent search in order to identify which, if any, patents may apply to this publication.

通知:情報技術研究所(ITL)は、本刊行物の指針または要件への適合に使用が必要となる可能性のある特許請求の範囲を保有する者に対し、当該特許請求の範囲をITLに開示するよう求めています。ただし、特許保有者にはITLの特許照会に応答する義務はなく、ITLも本刊行物に適用される可能性のある特許を特定するための特許調査を実施していません。

As of the date of publication and following call(s) for the identification of patent claims whose use may be required for compliance with the guidance or requirements of this publication, no such patent claims have been identified to ITL.

発行日時点で、かつ本刊行物のガイダンスまたは要件への準拠に使用が必要となる可能性のある特許請求の範囲の特定を求める呼びかけの後において、そのような特許請求の範囲はITLに対して特定されていません。

No representation is made or implied by ITL that licenses are not required to avoid patent infringement in the use of this publication.

本刊行物の使用において特許侵害を回避するためにライセンスが不要であるという表明は、ITLによって明示的にも黙示的にも行われていません。

Table of Contents

目次

List of Figures

図一覧

List of Tables

表一覧

Table 2: H(x) = HMAC-hash(salt, x) (Option 2)

表2:H(x) = HMAC-hash(salt, x)(オプション2)

Table 3: H(x) = KMAC#(salt, x, H_outputBits, “KDF”) (Option 3)

表3:H(x) = KMAC#(salt, x, H_outputBits, “KDF”)(オプション3)

Table 4: MAC( salt, Z, …) = HMAC-hash( salt, Z ) (For Randomness Extraction)

表4:MAC( salt, Z, …) = HMAC-hash( salt, Z )(乱数抽出用)

Table 5: MAC( salt, Z, …) = AES-N-CMAC( salt, Z ) (For Randomness Extraction)

表5:MAC( salt, Z, …) = AES-N-CMAC( salt, Z )(乱数抽出用)

1 Introduction

1 はじめに

During the execution of a public key-based key-establishment scheme specified in either of the National Institute of Standards and Technology (NIST) Special Publications [SP 800-56A]1 or [SP 800-56B],2 a key-derivation method may be required to obtain secret cryptographic keying material. This Recommendation specifies the key-derivation methods that can be used, as needed, in those key-establishment schemes. The keying material derived using these methods shall be computed in its entirety before outputting any portion of it and shall only be used as secret keying material, such as a symmetric key used for data encryption or message integrity, a secret initialization vector, or, perhaps, a key-derivation key that will be used to generate additional keying material (possibly using a different derivation process; see [SP 800-108]3). The derived keying material shall not be used as a key stream for a stream cipher.

国立標準技術研究所(NIST)の特別刊行物[SP 800-56A]1または[SP 800-56B]2に規定される公開鍵ベースの鍵確立方式の実行中に、秘密の暗号鍵素材を得るため鍵導出方法が必要となる場合があります。本推奨事項は、これらの鍵確立方式で必要に応じて使用できる鍵導出方法を規定します。これらの方法で導出する鍵素材は、その一部を出力する前に全体を計算しなければならず、データ暗号化またはメッセージ完全性のための共通鍵、秘密の初期化ベクトル、あるいは追加の鍵素材(別の導出処理を使用する場合もあります。 [SP 800-108]3参照)の生成に用いる鍵導出鍵など、シークレット鍵素材としてのみ使用しなければなりません。導出した鍵素材をストリーム暗号のキーストリームとして使用してはなりません。

1 SP 800-56A, Recommendation for Pair-Wise Key-Establishment Schemes Using Discrete Logarithm Cryptography
1 SP 800-56A「離散対数暗号を用いるペアワイズ鍵確立方式に関する推奨事項」
2 SP 800-56B, Recommendation for Pair-Wise Key-Establishment Schemes Using Integer Factorization Cryptography
2 SP 800-56B「整数因数分解暗号を用いるペアワイズ鍵確立方式に関する推奨事項」
3 SP 800-108, Recommendation for Key Derivation Using Pseudorandom Functions (Revised)
3 SP 800-108「疑似乱数関数を用いた鍵導出に関する推奨事項(改訂版)」

2 Scope and Purpose

2 適用範囲と目的

This Recommendation specifies two categories of key-derivation methods that can be employed, as required, to derive keying material from a shared secret \(Z\) generated during the execution of a key-establishment scheme specified in [SP 800-56A] or [SP 800-56B].

本推奨事項は、[SP 800-56A]または[SP 800-56B]に規定された鍵確立方式の実行中に生成される共有シークレット\(Z\)から、必要に応じて鍵素材を導出するために使用できる2種類の鍵導出方法を規定します。

In addition to the currently approved techniques for the generation of the shared secret \(Z\) as specified in SP 800-56A and SP 800-56B, this Recommendation permits the use of a “hybrid” shared secret of the form \(Z' = Z \parallel T\), a concatenation consisting of a “standard” shared secret \(Z\) that was generated during the execution of a key-establishment scheme (as currently specified in [SP 800-56A] or [SP 800-56B]) followed by an auxiliary shared secret \(T\) that has been generated using some other method. The content, format, length, and method used to generate \(T\) must be known and agreed upon by all parties that will rely upon the derived keying material, as well as by any agents trusted to act on their behalf. The key-derivation methods specified in this Recommendation will process a hybrid \(Z'\) in the same way they process a standard \(Z\). Therefore, for simplicity of notation and exposition, any shared secret denoted by the symbol \(Z\) in the remainder of this Recommendation can be of either the “standard” or “hybrid” variety.

SP 800-56AおよびSP 800-56Bに規定された共有シークレット\(Z\)の生成に関する現行の承認済み技法に加え、本推奨事項では、\(Z' = Z \parallel T\)という形式の「ハイブリッド」共有シークレットの使用を認めます。これは、鍵確立方式の実行中に生成された「標準」共有シークレット\(Z\)(現行の[SP 800-56A]または[SP 800-56B]の規定による)に、別の方法で生成された補助共有シークレット\(T\)を連結したものです。導出した鍵素材に依存するすべての当事者、およびその代理として行動することを信頼されたエージェントは、\(T\)の内容、形式、長さ、生成方法を認識し、合意していなければなりません。本推奨事項に規定する鍵導出方法は、ハイブリッドの\(Z'\)を標準の\(Z\)と同じ方法で処理します。したがって、記法と説明を簡潔にするため、本推奨事項の以降で記号\(Z\)により表記する共有シークレットは、「標準」型または「ハイブリッド」型のいずれでもよいです。

The first category of specified key-derivation methods consists of a family of one-step key-derivation functions that derive keying material of a desired length from a shared secret that was generated during the execution of a key-establishment scheme (and possibly other information as well).

規定する鍵導出方法の第1の種類は、鍵確立方式の実行中に生成された共有シークレット(および場合によってはその他の情報)から、所望の長さの鍵素材を導出する1段階鍵導出関数群です。

The second category consists of an extraction-then-expansion key-derivation procedure that involves two steps: 1) Randomness extraction, to obtain a single cryptographic key-derivation key from a shared secret generated during the execution of a key-establishment scheme. 2) Key expansion, to derive keying material of the desired length from that key-derivation key and other information. Since NIST’s [SP 800-108] specifies several families of key-derivation functions that are approved for deriving additional keying material from a given cryptographic key-derivation key, those functions are employed in the second (key-expansion) step of these two-step procedures.

第2の種類は、次の2段階からなる抽出後拡張型の鍵導出手順です。1) 乱数抽出: 鍵確立方式の実行中に生成された共有シークレットから、単一の暗号鍵導出鍵を得ます。2) 鍵拡張: その鍵導出鍵およびその他の情報から、所望の長さの鍵素材を導出します。NISTの[SP 800-108]は、与えられた暗号鍵導出鍵から追加の鍵素材を導出するために承認された複数の鍵導出関数群を規定しているため、これらの関数を2段階手順の第2段階(鍵拡張)で使用します。

In addition to the key-derivation methods whose specifications are provided in this document, [SP 800-135]4 describes several variants (of both the one-step and two-step methods) that are approved for specific applications.

本書に仕様を記載する鍵導出方法に加え、[SP 800-135]4は、特定用途向けに承認された1段階方式および2段階方式の複数の変形を記載します。

4 SP 800-135 Rev. 1, Recommendation for Existing Application-Specific Key Derivation Functions
4 SP 800-135 Rev. 1「既存のアプリケーション固有鍵導出関数に関する推奨事項」

3 Definitions, Symbols, and Abbreviations

3 定義、記号および略語

3.1 Definitions

3.1 定義

AlgorithmA clearly specified mathematical process for computation; a set of rules that, if followed, will give a prescribed result.
ApprovedAn algorithm or technique that is either 1) specified in a Federal Information Processing Standard (FIPS) or NIST Recommendation, 2) adopted in a FIPS or NIST Recommendation, or 3) specified in a list of NIST-approved security functions.
Big-endianThe property of a byte string having its bytes positioned in order of decreasing significance. In particular, the leftmost (first) byte is the most significant (containing the most significant eight bits of the corresponding bit string), and the rightmost (last) byte is the least significant (containing the least significant eight bits of the corresponding bit string). For the purposes of this Recommendation, it is assumed that the bits within each byte of a big-endian byte string are also positioned in order of decreasing significance (beginning with the most significant bit in the leftmost position and ending with the least significant bit in the rightmost position).
Bit lengthThe number of bits in a bit string (e.g., the bit length of the string 0110010101000011 is sixteen bits). The bit length of the empty (i.e., null) string is zero.
Bit stringAn ordered sequence of bits (represented as 0s and 1s). Unless otherwise stated in this document, bit strings are depicted as beginning with their most significant bit (shown in the leftmost position) and ending with their least significant bit (shown in the rightmost position). For example, the most significant (leftmost) bit of 0101 is 0, and its least significant (rightmost) bit is 1. If interpreted as the 4-bit binary representation of an unsigned integer, 0101 corresponds to the number five.
ByteA bit string consisting of eight bits.
Byte lengthThe number of consecutive (non-overlapping) bytes in a byte string. For example, 0110010101000011 \(=\) 01100101 \(\parallel\) 01000011 is two bytes long. The byte length of the empty string is zero.
Byte stringAn ordered sequence of bytes, beginning with the most significant (leftmost) byte and ending with the least significant (rightmost)
Algorithm アルゴリズム計算のために明確に規定された数学的処理。従えば所定の結果が得られる一連の規則。
Approved 承認済み次のいずれかに該当するアルゴリズムまたは技法。1) 連邦情報処理標準(FIPS)またはNIST推奨事項で規定される、2) FIPSまたはNIST推奨事項に採用される、3) NIST承認済みセキュリティ機能の一覧に規定されます。
Big-endian ビッグエンディアンバイト列のバイトが重要度の降順に配置される性質。具体的には、最左(先頭)バイトが最上位(対応するビット列の最上位8ビットを含む)であり、最右(末尾)バイトが最下位(対応するビット列の最下位8ビットを含む)です。本推奨事項では、ビッグエンディアンのバイト列内の各バイトのビットも重要度の降順に配置されるものとします(最上位ビットが左端、最下位ビットが右端)。
Bit length ビット長ビット列に含まれるビット数(例: 列0110010101000011のビット長は16ビット)。空(すなわちヌル)列のビット長は0です。
Bit string ビット列ビット(0および1で表される)の順序付き列。本書に別段の定めがない限り、ビット列は最上位ビット(左端)から始まり最下位ビット(右端)で終わる形で表記します。例えば0101の最上位(左端)ビットは0、最下位(右端)ビットは1です。符号なし整数の4ビット2進表現と解釈すると、0101は数値5に相当します。
Byte バイト8ビットからなるビット列。
Byte length バイト長バイト列に含まれる連続した(重複しない)バイトの数。例えば0110010101000011 \(=\) 01100101 \(\parallel\) 01000011は2バイト長です。空列のバイト長は0です。
Byte string バイト列最上位(左端)バイトから始まり、最下位(右端)
byte. Any bit string whose bit length is a multiple of eight can be viewed as the concatenation of an ordered sequence of bytes (i.e., a byte string). For example, the bit string 0110010101000011 can be viewed as a byte string since it is the concatenation of two bytes: 01100101 followed by 01000011.
ConcatenationAs used in this Recommendation, the concatenation X || Y of bit string X followed by bit string Y is the ordered sequence of bits formed by appending Y to X in such a way that the leftmost (i.e., initial) bit of Y follows the rightmost (i.e., final) bit of X.
Cryptographic key (Key)A parameter used with a cryptographic algorithm that determines its operation.
Estimated maximum security strengthAn estimate of the largest security strength that can be attained by a cryptographic mechanism given the explicit and implicit assumptions that are made regarding its implementation and supporting infrastructure (e.g., the algorithms employed, the selection of associated primitives and/or auxiliary functions, the choices for various parameters, the methods of generation and/or protection for any required keys, etc.). The estimated maximum security strengths of various approved cryptographic mechanisms are provided in [SP 800-57].
Hash functionA function that maps a bit string of arbitrary length to a fixed-length bit string. Depending upon the relying application, the security strength that can be supported by a hash function is typically measured by the extent to which it possesses one or more of the following properties: 1. (Collision resistance) It is computationally infeasible to find any two distinct inputs that map to the same output. 2. (Preimage resistance) Given a randomly chosen target output, it is computationally infeasible to find any input that maps to that output. (This property is called the one-way property.) 3. (Second preimage resistance) Given one input value, it is computationally infeasible to find a second (distinct) input value that maps to the same output as the first value. This Recommendation uses the strength of the preimage resistance of a hash function as a contributing factor when determining the security strength provided by a key-derivation method.
原本PDFの抜粋画像原本 PDF p.12 の画像抜粋
バイト。ビット長が8の倍数であるビット列は、順序付きバイト列(すなわちバイト列)の連結として扱えます。例えば、ビット列0110010101000011は、01100101に続いて01000011を連結したものなので、バイト列として扱えます。
Concatenation 連結本推奨事項におけるビット列Xの後にビット列Yを連結する操作X || Yは、Xの右端(末尾)ビットの直後にYの左端(先頭)ビットを続けることで得られる、ビットの順序付き列です。
Cryptographic key (Key) 暗号鍵(鍵)暗号アルゴリズムとともに用い、その動作を決定するパラメーター。
Estimated maximum security strength 推定最大セキュリティ強度実装およびそれを支えるインフラ(使用アルゴリズム、関連プリミティブや補助関数の選択、各種パラメーターの選択、必要な鍵の生成・保護方法など)に関する明示的および暗黙的な前提を踏まえ、暗号メカニズムが達成できる最大セキュリティ強度の推定値。各種の承認済み暗号メカニズムの推定最大セキュリティ強度は[SP 800-57]に示されます。
Hash function ハッシュ関数任意長のビット列を固定長のビット列に写像する関数。依存するアプリケーションに応じ、ハッシュ関数が支援できるセキュリティ強度は通常、次の性質の1つ以上をどの程度備えるかで測定されます。1.(衝突耐性)同じ出力に写像される異なる入力を2つ見つけることが計算量的に実行不可能です。2.(原像計算困難性)ランダムに選ばれた出力目標に写像される入力を見つけることが計算量的に実行不可能です(この性質を一方向性といいます)。3.(第二原像計算困難性)1つの入力値が与えられたとき、同じ出力に写像される別の入力値を見つけることが計算量的に実行不可能です。本推奨事項では、鍵導出方法が提供するセキュリティ強度を決定する際の要因として、ハッシュ関数の原像計算困難性の強度を用います。
Approved hash functions are specified in [FIPS 180]5 and [FIPS 202].6
Key-derivation functionAs used in this Recommendation, either a one-step key-derivation method or a key-derivation function based on a pseudorandom function as specified in [SP 800-108].
Key-derivation methodAs used in this Recommendation, a process that derives secret keying material from a shared secret. This Recommendation specifies both one-step and two-step key-derivation methods.
Key-derivation procedureAs used in this Recommendation, a two-step key-derivation method consisting of randomness extraction followed by key expansion.
Key-derivation keyAs used in this Recommendation, a key that is used during the key- expansion step of a key-derivation procedure to derive the secret output keying material. This key-derivation key is obtained from a shared secret during the randomness-extraction step.
Key establishmentA procedure that results in secret keying material that is shared among different parties.
Key expansionThe second step in the key-derivation procedure specified in this Recommendation in which a key-derivation key is used to derive secret keying material having the desired length.
Keying materialData that is represented as a binary string such that any non- overlapping segments of the string with the required lengths can be used as secret keys, secret initialization vectors, and other secret parameters.
Message Authentication Code (MAC) algorithmA family of cryptographic functions that is parameterized by a symmetric key. Each of the functions can act on input data (called a “message”) of variable length to produce an output value of a specified length. The output value is called the MAC of the input message. MAC(k, x, …) is used to denote the MAC of message x computed using the key k (and any additional algorithm-specific parameters). An approved MAC algorithm is expected to satisfy the following property (for each supported security strength):
原本PDFの抜粋画像原本 PDF p.13 の画像抜粋
承認済みハッシュ関数は[FIPS 180]5および[FIPS 202]6に規定されます。
Key-derivation function 鍵導出関数本推奨事項では、1段階鍵導出方法、または[SP 800-108]に規定される疑似乱数関数に基づく鍵導出関数をいいます。
Key-derivation method 鍵導出方法本推奨事項では、共有シークレットからシークレット鍵素材を導出する処理をいいます。本推奨事項は1段階および2段階の鍵導出方法を規定します。
Key-derivation procedure 鍵導出手順本推奨事項では、乱数抽出に続いて鍵拡張を行う2段階の鍵導出方法をいいます。
Key-derivation key 鍵導出鍵本推奨事項では、鍵導出手順の鍵拡張段階で秘密の出力鍵素材を導出するために使用する鍵をいいます。この鍵導出鍵は、乱数抽出段階で共有シークレットから得られます。
Key establishment 鍵確立複数の当事者間で共有されるシークレット鍵素材を生成する手順。
Key expansion 鍵拡張本推奨事項で規定する鍵導出手順の第2段階。所望の長さのシークレット鍵素材を導出するために鍵導出鍵を使用します。
Keying material 鍵素材必要な長さの重複しない部分列を、秘密鍵、秘密の初期化ベクトル、その他の秘密パラメーターとして使用できるよう、2進列で表されるデータ。
Message Authentication Code (MAC) algorithm メッセージ認証コード(MAC)アルゴリズム共通鍵をパラメーターとする暗号関数族。各関数は可変長の入力データ(「メッセージ」と呼ぶ)を処理し、指定された長さの出力値を生成します。この出力値を入力メッセージのMACと呼びます。MAC(k, x, …)は、鍵k(およびアルゴリズム固有の追加パラメーター)でメッセージxから計算したMACを表します。承認済みMACアルゴリズムは、支援する各セキュリティ強度について、次の性質を満たすことが期待されます。
5 FIPS 180, Secure Hash Standard (SHS)
5 FIPS 180「セキュアハッシュ標準(SHS)」
6 FIPS 202, SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions
6 FIPS 202「SHA-3標準: 置換ベースのハッシュ関数および拡張出力関数」
Without knowledge of the key k, it must be computationally infeasible to predict the (as-yet-unseen) value of MAC(k, x, …) with a probability of success that is a significant improvement over simply guessing either the MAC value or k, even if one has already seen the results of using that same key to compute MAC(k, x_j, …) for (a bounded number of) other messages x_j ≠ x A MAC algorithm can be employed to provide authentication of the origin of data and/or to provide data-integrity protection. In this Recommendation, approved MAC algorithms are used to determine families of pseudorandom functions (indexed by the choice of key) that may be employed during key derivation.
NonceA varying value that has, at most, a negligible chance of repeating; for example, a random value that is generated anew for each use, a timestamp, a sequence number, or some combination of these.
Pseudorandom function family (PRF)An indexed family of (efficiently computable) functions, each defined for the same particular pair of input and output spaces. (For the purposes of this Recommendation, one may assume that both the index set and the output space are finite.) The indexed functions are pseudorandom in the following sense: If a function from the family is selected by choosing an index value uniformly at random, and one’s knowledge of the selected function is limited to the output values corresponding to a feasible number of (adaptively) chosen input values, then the selected function is computationally indistinguishable from a function whose outputs were fixed uniformly at random.
Randomness extractionThe first step in the two-step key-derivation procedure specified in this Recommendation; during this step, a key-derivation key is produced from a shared secret.
SaltAs used in this Recommendation, a byte string (which may be secret or non-secret) that is used as a MAC key by either: 1) a MAC-based auxiliary function H employed in one-step key derivation or 2) a MAC employed in the randomness-extraction step during two-step key derivation.
Security strengthA number characterizing the amount of work that is expected to suffice to “defeat” an implemented cryptographic mechanism (e.g., by compromising its functionality and/or circumventing the protection that its use was intended to facilitate). In this Recommendation, security strength is measured in bits. If the security strength of a particular implementation of a cryptographic
原本PDFの抜粋画像原本 PDF p.14 の画像抜粋
鍵kを知らずに、MAC(k, x, …)の(まだ観測されていない)値を予測することは、MAC値またはkを単に推測する場合を大幅に上回る成功確率では、計算量的に実行不可能でなければなりません。これは、同じ鍵を用いて他の(有限個の)メッセージx_j ≠ xについてMAC(k, x_j, …)を計算した結果をすでに見ている場合も同様です。MACアルゴリズムは、データの出所認証および/またはデータ完全性保護に使用できます。本推奨事項では、承認済みMACアルゴリズムを用いて、鍵導出に使用できる疑似乱数関数族(鍵の選択で索引付けされる)を定めます。
Nonce ノンス繰り返される可能性が無視できる程度に低い変化値。例えば、使用ごとに新たに生成する乱数値、タイムスタンプ、シーケンス番号、またはそれらの組合せ。
Pseudorandom function family (PRF) 疑似乱数関数族(PRF)同じ特定の入力空間と出力空間の組に対してそれぞれ定義される、(効率的に計算可能な)関数の索引付き族(本推奨事項では、索引集合と出力空間は有限と仮定してもよいです)。索引付けられた関数は、次の意味で疑似乱数的です。索引値を一様ランダムに選んで族から関数を選択し、選択した関数に関する知識が、実行可能な個数の(適応的に選ばれた)入力値に対応する出力値に限られる場合、その関数は、出力が一様ランダムに固定された関数と計算量的に区別できません。
Randomness extraction 乱数抽出本推奨事項で規定する2段階鍵導出手順の第1段階。この段階で、共有シークレットから鍵導出鍵を生成します。
Salt ソルト本推奨事項では、次のいずれかのMAC鍵として用いる(秘密または非秘密の)バイト列をいいます。1) 1段階鍵導出で用いるMACベースの補助関数H、2) 2段階鍵導出の乱数抽出段階で用いるMAC。
Security strength セキュリティ強度実装された暗号メカニズムを「破る」(機能を侵害する、またはその使用が促進しようとした保護を回避するなど)のに十分と見込まれる作業量を特徴付ける数値。本推奨事項では、セキュリティ強度をビット単位で測ります。特定の暗号の実装のセキュリティ強度が
mechanism is s bits, it is expected that the equivalent of (roughly) 2^s basic operations of some sort will be sufficient to defeat it in some way.
Shared secretThe secret byte string that is computed/generated during the execution of an approved key-establishment scheme and used as input to a key-derivation method as part of that transaction.
ShallA requirement that needs to be fulfilled to claim conformance to this Recommendation. Note that shall may be coupled with not to become shall not.
Support (a security strength)A security strength of s bits is said to be supported by a particular choice of algorithm, primitive, auxiliary function, or parameters for use in the implementation of a cryptographic mechanism if that choice will not prevent the resulting implementation from attaining a security strength of at least s bits. In this Recommendation, it is assumed that implementation choices are intended to support a security strength of 112 bits or more (see [SP 800-57]7 and [SP 800-131A]8).
Symmetric keyA single cryptographic key that is used with a symmetric-key algorithm; also called a secret key. A symmetric-key algorithm is a cryptographic algorithm that uses the same secret key for an operation and its complement (e.g., encryption and decryption).
Targeted security strengthThe security strength that is intended to be supported by one or more implementation-related choices (such as algorithms, primitives, auxiliary functions, parameter sizes, and/or actual parameters) for the purpose of implementing a cryptographic mechanism.
原本PDFの抜粋画像原本 PDF p.15 の画像抜粋
メカニズムのセキュリティ強度がsビットである場合、何らかの基本操作をおよそ2^s回行うことが、それを何らかの方法で破るのに十分と予想されます。
Shared secret 共有シークレット承認済み鍵確立方式の実行中に計算または生成され、その処理の一部として鍵導出方法への入力に使用される秘密のバイト列。
Shall本推奨事項への適合を主張するために満たす必要がある要件。「shall」に「not」を伴って「shall not」となる場合があります。
Support (a security strength) (セキュリティ強度を)支援する暗号メカニズムの実装に用いるアルゴリズム、プリミティブ、補助関数またはパラメーターの選択が、結果の実装で少なくともsビットのセキュリティ強度を達成することを妨げない場合、その選択はsビットのセキュリティ強度を支援するとします。本推奨事項では、実装上の選択は112ビット以上のセキュリティ強度を支援するものとします([SP 800-57]7および[SP 800-131A]8参照)。
Symmetric key 共通鍵共通鍵アルゴリズムに使用する単一の暗号鍵。秘密鍵とも呼びます。共通鍵アルゴリズムとは、操作とその逆操作(例: 暗号化と復号)に同じ秘密鍵を使う暗号アルゴリズムです。
Targeted security strength 目標セキュリティ強度暗号メカニズムを実装する目的で、アルゴリズム、プリミティブ、補助関数、パラメーターサイズおよび/または実際のパラメーターなど、1つ以上の実装関連の選択によって支援することを意図したセキュリティ強度。
7 SP 800-57 Rev. 4, Recommendation for Key Management Part 1: General
7 SP 800-57 Rev. 4「鍵管理に関する推奨事項 第1部: 一般」
8 SP 800-131A, Transitions: Recommendation for Transitioning the Use of Cryptographic Algorithms and Key Lengths
8 SP 800-131A「暗号アルゴリズムおよび鍵長の使用移行に関する推奨事項」

3.2 Symbols and Abbreviations

3.2 記号および略語

0xA marker used to indicate that the following symbols are to be interpreted as a bit string written in hexadecimal notation (using the symbols 0, 1, …, 9 and A, B, …, F to denote 4-bit binary representations of the integers zero through nine and 10 through 15, respectively). A byte can be represented by a hexadecimal string of length two; the leftmost hexadecimal symbol corresponds to the most significant four bits of the byte, and the rightmost hexadecimal symbol corresponds to the least significant four bits of the byte. For example, 0x9D represents the bit string 10011101 (assuming that the bits are positioned in order of decreasing significance).
AESAdvanced Encryption Standard (the block cipher specified in [FIPS 197]9).
AES-N (N = 128, 192, or 256)The variant of the AES block cipher that requires an N-bit encryption/decryption key; the three variants specified in [FIPS 197] are AES-128, AES-192, and AES-256.
AES-CMACThe Cipher-based Message Authentication Code (CMAC) mode of operation for the AES block cipher, as specified in [SP 800- 38B]10.
AES-N-CMAC(k, x) (N = 128, 192, or 256)An implementation of AES-CMAC based on the AES-N variant of the AES block cipher (for N = 128, 192, or 256); its output is a 128-bit MAC computed over the “message” x using the key k.
counterAn unsigned integer, represented as a big-endian four-byte string, that is employed by the one-step key-derivation method specified in Section 4.1.
ContextA bit string of context-specific data; a subcomponent of the FixedInfo that is included as part of the input to the two-step key- derivation method specified in Section 5.1.
default_saltA default value assigned to salt (if necessary) to implement an auxiliary function H selected according to Option 2 or 3 in the one- step key-derivation method specified in Section 4.1.
原本PDFの抜粋画像原本 PDF p.16 の画像抜粋
0x後続の記号を16進表記のビット列として解釈することを示す標識(整数0~9および10~15の4ビット2進表現を、それぞれ0~9およびA~Fで表します)。1バイトは長さ2の16進文字列で表せます。左端の16進記号はバイトの最上位4ビット、右端は最下位4ビットに対応します。例えば、0x9Dはビット列10011101を表します(ビットが重要度の降順に配置されているとします)。
AESAdvanced Encryption Standard([FIPS 197]9に規定されるブロック暗号)。
AES-N (N = 128, 192, or 256)Nビットの暗号化/復号鍵を必要とするAESブロック暗号の変種。[FIPS 197]が規定する3種類はAES-128、AES-192、AES-256。
AES-CMAC[SP 800-38B]10に規定される、AESブロック暗号の暗号ベースメッセージ認証コード(CMAC)運用モード。
AES-N-CMAC(k, x) (N = 128, 192, or 256)AESブロック暗号のAES-N変種(N = 128、192または256)に基づくAES-CMACの実装。鍵kを用いて「メッセージ」xを処理し、128ビットMACを出力します。
counter4バイトのビッグエンディアン文字列で表す符号なし整数。4.1節に規定する1段階鍵導出方法で使用します。
Contextコンテキスト固有データのビット列。5.1節に規定する2段階鍵導出方法への入力に含まれるFixedInfoの構成要素。
default_salt4.1節の1段階鍵導出方法でオプション2または3に従って選択した補助関数Hの実装に必要に応じてsaltへ割り当てる既定値。
9 FIPS 197, Advanced Encryption Standard
9 FIPS 197「Advanced Encryption Standard」
10 SP 800-38B, Recommendation for Block Cipher Modes of Operation: the CMAC Mode for Authentication
10 SP 800-38B「ブロック暗号モード運用に関する推奨事項: 認証用CMACモード」
\(\mathit{DerivedKeyingMaterial}\)Keying material that is derived from a shared secret \(Z\) (and other data) through the use of a key-derivation method.
ECCElliptic curve cryptography.
FFCFinite field cryptography.
\(\mathit{FixedInfo}\)A bit string of context-specific data whose value does not change during the execution of a key-derivation method specified in this Recommendation.
\(\mathrm{H}\)The auxiliary function used to produce blocks of keying material during the execution of the one-step key-derivation method specified in Section 4.1.
\(\mathit{hash}\)A hash function. Approved choices for \(\mathit{hash}\) are specified in [FIPS 180] and [FIPS 202].
HMACKeyed-hash Message Authentication Code, as specified in [FIPS 198].11
\(\mathrm{HMAC}\text{-}\mathit{hash}(k, x)\)An implementation of HMAC using the hash function, \(\mathit{hash}\); its output is a MAC computed over “message” \(x\) using the key \(k\).
\(\mathit{H\_outputBits}\)A positive integer that indicates the length (in bits) of the output of either: 1) the auxiliary function \(\mathrm{H}\) used in the one-step key-derivation method specified in Section 4.1 or 2) an auxiliary HMAC algorithm used in the two-step key-derivation method specified in Section 5.1.
IFCInteger factorization cryptography.
\(\mathit{IV}\)Initialization vector; as used in this Recommendation, it is a bit string used as an initial value during the execution of an approved PRF-based KDF operating in Feedback Mode, as specified in [SP 800-108].
KDFKey-derivation function.
\(K_{\mathit{DK}}\)The key-derivation key resulting from the randomness-extraction step, which is then used in the key-expansion step during the execution of the key-derivation procedure specified in Section 5.1.
\(\mathit{DerivedKeyingMaterial}\)導出鍵素材。共有シークレット\(Z\)(および他のデータ)から鍵導出方法を用いて導出される鍵素材。
ECC楕円曲線暗号。
FFC有限体暗号。
\(\mathit{FixedInfo}\)本推奨事項で規定する鍵導出方法の実行中に値が変化しない、コンテキスト固有データのビット列。
\(\mathrm{H}\)4.1節に規定する1段階鍵導出方法の実行中に鍵素材のブロックを生成するために用いる補助関数。
\(\mathit{hash}\)ハッシュ関数。\(\mathit{hash}\)の承認された選択肢は、[FIPS 180]および[FIPS 202]に規定されています。
HMAC鍵付きハッシュメッセージ認証コード。[FIPS 198]に規定されます。11
\(\mathrm{HMAC}\text{-}\mathit{hash}(k, x)\)ハッシュ関数\(\mathit{hash}\)を用いたHMACの実装。その出力は、「メッセージ」\(x\)に対して鍵\(k\)を用いて計算したMACです。
\(\mathit{H\_outputBits}\)次のいずれかの出力の長さ(ビット単位)を示す正の整数。1) 4.1節に規定する1段階鍵導出方法で使用する補助関数\(\mathrm{H}\)、または2) 5.1節に規定する2段階鍵導出方法で使用する補助HMACアルゴリズム。
IFC整数因数分解暗号。
\(\mathit{IV}\)初期化ベクトル。本推奨事項では、[SP 800-108]に規定されるフィードバックモードで動作する承認されたPRFベースKDFの実行中に初期値として用いるビット列をいいます。
KDF鍵導出関数。
\(K_{\mathit{DK}}\)乱数抽出段階で得られる鍵導出鍵。5.1節に規定する鍵導出手順の実行中、鍵拡張段階で使用されます。
11 FIPS 198, The Keyed-Hash Message Authentication Code (HMAC)
11 FIPS 198「鍵付きハッシュメッセージ認証コード(HMAC)」
\(\mathit{KDM}\)Key-derivation method.
KMACKeccak Message Authentication Code, as specified in [SP 800-185].12
\(\mathrm{KMAC\#}(k, x, l, S)\)A variant of KMAC (either KMAC128 or KMAC256, as specified in [SP 800-185]); its output is an \(l\)-bit MAC computed over the “message” \(x\) using the key \(k\) and “customization string” \(S\).
\(L\)A positive integer specifying the desired length (in bits) of the derived keying material.
\([L]_2\)An agreed-upon encoding of the integer \(L\) as a bit string.
MACMessage Authentication Code.
\(\mathrm{MAC}(k, x, \ldots)\)An instance of a MAC algorithm computed over the “message” \(x\) using the key \(k\) (and any additional algorithm-specific parameters).
\(\mathit{max\_H\_inputBits}\)The maximum length (in bits) for strings used as input to the auxiliary function \(\mathrm{H}\) employed by the one-step key-derivation method specified in Section 4.1.
\(\mathit{OtherInput}\)A collective term for any and all additional data (other than the shared secret itself) that is used as input to a key-derivation method specified in this Recommendation.
PRFPseudorandom function (family).
\(s\)Security strength (in bits).
SHASecure Hash Algorithm, as specified in [FIPS 180] (i.e., SHA-1, SHA-224, SHA-512/224, SHA-256, SHA-512/256, SHA-384, or SHA-512) or [FIPS 202] (i.e., SHA3-224, SHA3-256, SHA3-384, or SHA3-512).
\(Z\)The shared secret (determined as described in Section 2 of this Recommendation).
\(\mathit{KDM}\)鍵導出方法。
KMACKeccakメッセージ認証コード。[SP 800-185]に規定されます。12
\(\mathrm{KMAC\#}(k, x, l, S)\)KMACの変種([SP 800-185]に規定されるKMAC128またはKMAC256のいずれか)。その出力は\(l\)ビットのMACであり、「メッセージ」\(x\)に対して鍵\(k\)および「カスタマイズ文字列」\(S\)を用いて計算されます。
\(L\)導出する鍵素材の所望の長さ(ビット単位)を指定する正の整数。
\([L]_2\)整数\(L\)をビット列として表す、合意済みの符号化。
MACメッセージ認証コード。
\(\mathrm{MAC}(k, x, \ldots)\)「メッセージ」\(x\)に対して鍵\(k\)(およびアルゴリズム固有の追加パラメーター)を用いて計算した、MACアルゴリズムのインスタンス。
\(\mathit{max\_H\_inputBits}\)4.1節に規定する1段階鍵導出方法で用いる補助関数\(\mathrm{H}\)への入力として使用する文字列の最大長(ビット単位)。
\(\mathit{OtherInput}\)本推奨事項で規定する鍵導出方法への入力として使用する、(共有シークレットそのもの以外の)すべての追加データの総称。
PRF疑似乱数関数(族)。
\(s\)セキュリティ強度(ビット単位)。
SHAセキュアハッシュアルゴリズム。[FIPS 180]に規定されるもの(すなわちSHA-1、SHA-224、SHA-512/224、SHA-256、SHA-512/256、SHA-384またはSHA-512)、または[FIPS 202]に規定されるもの(すなわちSHA3-224、SHA3-256、SHA3-384またはSHA3-512)。
\(Z\)共有シークレット(本推奨事項の2節に記載のとおり決定される)。
12 SP 800-185, SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, and ParallelHash
12 SP 800-185「SHA-3派生関数: cSHAKE、KMAC、TupleHashおよびParallelHash」

4 One-Step Key Derivation

4 1段階鍵導出

This section specifies a family of approved key-derivation functions (KDFs) that are executed in a single step; a two-step procedure is specified in Section 5. The input to each specified KDF includes the shared secret \(Z\), an indication of the desired bit length of the keying material to be output, and, perhaps, other information (as determined by the particular implementation of the key-establishment scheme and/or key-derivation function).

本節では、1段階で実行する承認済み鍵導出関数(KDF)の族を規定します。2段階の手順は5節に規定します。規定する各KDFへの入力には、共有シークレット\(Z\)、出力する鍵素材の所望のビット長の指定、および場合によってはその他の情報(鍵確立方式および/または鍵導出関数の特定の実装によって決まる)が含まれます。

Implementations of these one-step KDFs depend upon the choice of an auxiliary function \(\mathrm{H}\), which can be either: 1) an approved hash function, denoted as \(\mathit{hash}\), as defined in [FIPS 180] or [FIPS 202]; 2) HMAC with an approved hash function, \(\mathit{hash}\), denoted as \(\mathrm{HMAC}\text{-}\mathit{hash}\) and defined in [FIPS 198]; or 3) a KMAC variant, as defined in [SP 800-185]. Tables 1, 2, and 3 in Section 4.2 describe the possibilities for \(\mathrm{H}\) and also include any restrictions on the associated implementation-dependent parameters. \(\mathrm{H}\) shall be chosen in accordance with the selection requirements specified in Section 7.

これらの1段階KDFの実装は、補助関数\(\mathrm{H}\)の選択に依存します。これは次のいずれかとすることができます。1) [FIPS 180]または[FIPS 202]に定義され、\(\mathit{hash}\)と表記する承認済みハッシュ関数、2) 承認済みハッシュ関数\(\mathit{hash}\)を用いたHMAC(\(\mathrm{HMAC}\text{-}\mathit{hash}\)と表記し、[FIPS 198]に定義される)、3) [SP 800-185]に定義されるKMAC変種。4.2節の表1、表2および表3は、\(\mathrm{H}\)の選択肢を示し、関連する実装依存パラメーターに対する制限も含みます。\(\mathrm{H}\)は、7節に規定する選択要件に従って選ばなければなりません。

When an approved MAC algorithm (HMAC or KMAC) is used to define the auxiliary function \(\mathrm{H}\), it is permitted to use a known \(\mathit{salt}\) value as the MAC key. In such cases, it is assumed that the MAC algorithm will satisfy the following property (for each of its supported security strengths):

承認済みMACアルゴリズム(HMACまたはKMAC)を補助関数\(\mathrm{H}\)の定義に用いる場合、既知の\(\mathit{salt}\)値をMAC鍵として使用することが許されます。この場合、MACアルゴリズムは(それが支援する各セキュリティ強度について)次の性質を満たすと仮定します。

Given knowledge of the key \(k\), and (perhaps) partial knowledge of a message \(x\) that includes an unknown substring \(y\), it must be computationally infeasible to predict the (as-yet-unseen) value of \(\mathrm{MAC}(k, x, \ldots)\) with a probability of success that is a significant improvement over simply guessing either the MAC value or the value of \(y\), even if one has already seen the values of \(\mathrm{MAC}(k_j, x_j, \ldots)\) for a feasible number of other \((k_j, x_j)\) pairs where each key \(k_j\) is known and each (partially known) message \(x_j\) includes the same unknown substring \(y\), provided that none of the \((k_j, x_j)\) pairs is identical to \((k, x)\).

鍵\(k\)が既知で、メッセージ\(x\)(未知の部分文字列\(y\)を含む)の部分的な知識を(おそらく)持っている場合、\(\mathrm{MAC}(k, x, \ldots)\)の(未観測の)値を、MAC値または\(y\)の値を単に推測する場合を大幅に上回る成功確率で予測することは、計算量的に実行不可能でなければなりません。これは、\(\mathrm{MAC}(k_j, x_j, \ldots)\)の値を、実行可能な個数の他の\((k_j, x_j)\)の組についてすでに見ている場合も同様です。ただし、各鍵\(k_j\)は既知で、各(部分的に既知の)メッセージ\(x_j\)は同じ未知の部分文字列\(y\)を含み、いずれの\((k_j, x_j)\)の組も\((k, x)\)と同一ではないものとします。

This property is consistent with the use of the MAC algorithm as the specification of a family of pseudorandom functions defined on the appropriate message space and indexed by the choice of MAC key. Under Option 2 and Option 3 of the KDF specification below, the auxiliary function \(\mathrm{H}\) is a particular selection from such a family. The (partially known) messages will have the form \(\mathit{counter} \parallel Z \parallel \mathit{FixedInfo}\), containing the shared secret \(Z\) as an unknown substring.

この性質は、MACアルゴリズムを、適切なメッセージ空間上で定義され、MAC鍵の選択によって索引付けされる疑似乱数関数族の仕様として用いることと整合します。以下のKDF仕様のオプション2およびオプション3では、補助関数\(\mathrm{H}\)は、そのような族から選択された特定の関数です。(部分的に既知の)メッセージは\(\mathit{counter} \parallel Z \parallel \mathit{FixedInfo}\)の形式となり、共有シークレット\(Z\)を未知の部分文字列として含みます。

4.1 Specification of Key-Derivation Functions

4.1 鍵導出関数の仕様

A family of one-step key-derivation functions is specified as follows:

1段階鍵導出関数族を次のように規定します。

Function call: \(\mathrm{KDM}(Z, \mathit{OtherInput})\).

関数呼び出し: \(\mathrm{KDM}(Z, \mathit{OtherInput})\)。

Options for the Auxiliary Function \(\mathrm{H}\):
Option 1: \(\mathrm{H}(x) = \mathit{hash}(x)\), where \(\mathit{hash}\) is an approved hash function meeting the selection requirements specified in Section 7, and the input, \(x\), is a bit string.
Option 2: \(\mathrm{H}(x) = \mathrm{HMAC}\text{-}\mathit{hash}(\mathit{salt}, x)\), where \(\mathrm{HMAC}\text{-}\mathit{hash}\) is an implementation of the HMAC

補助関数\(\mathrm{H}\)のオプション:
オプション1: \(\mathrm{H}(x) = \mathit{hash}(x)\)。ここで、\(\mathit{hash}\)は7節に規定する選択要件を満たす承認済みハッシュ関数であり、入力\(x\)はビット列です。
オプション2: \(\mathrm{H}(x) = \mathrm{HMAC}\text{-}\mathit{hash}(\mathit{salt}, x)\)。ここで、\(\mathrm{HMAC}\text{-}\mathit{hash}\)は、HMAC

algorithm (as defined in [FIPS 198]) employing an approved hash function, \(\mathit{hash}\), that meets the selection requirements specified in Section 7. An implementation-dependent byte string, \(\mathit{salt}\), whose (non-null) value may be optionally provided in \(\mathit{OtherInput}\), serves as the HMAC key, and \(x\) (the input to \(\mathrm{H}\)) is a bit string that serves as the HMAC “message” as specified in [FIPS 198].

アルゴリズム([FIPS 198]に定義)の実装であり、7節に規定する選択要件を満たす承認されたハッシュ関数\(\mathit{hash}\)を用います。実装依存のバイト列\(\mathit{salt}\)は、その(非ヌルの)値を任意で\(\mathit{OtherInput}\)に与えてよく、HMAC鍵として機能します。また、\(x\)(\(\mathrm{H}\)への入力)は、[FIPS 198]に規定されるHMACの「メッセージ」として機能するビット列です。

Option 3: \(\mathrm{H}(x) = \mathrm{KMAC\#}(\mathit{salt}, x, \mathit{H\_outputBits}, S)\), where \(\mathrm{KMAC\#}\) is a particular implementation of either KMAC128 or KMAC256 (as defined in [SP 800-185]) that meets the selection requirements specified in Section 7. An implementation-dependent byte string, \(\mathit{salt}\), whose (non-null) value may be optionally provided in \(\mathit{OtherInput}\), serves as the \(\mathrm{KMAC\#}\) key, and \(x\) (the input to \(\mathrm{H}\)) is a bit string that serves as the \(\mathrm{KMAC\#}\) “message” as specified in [SP 800-185]. The parameter \(\mathit{H\_outputBits}\) determines the bit length chosen for the output of the KMAC variant employed. The “customization string” \(S\) shall be the byte string 01001011 \(\parallel\) 01000100 \(\parallel\) 01000110, which represents the sequence of characters “K”, “D,” and “F” in 8-bit ASCII. (This three-byte string is denoted by “KDF” in this document.)

オプション3: \(\mathrm{H}(x) = \mathrm{KMAC\#}(\mathit{salt}, x, \mathit{H\_outputBits}, S)\)。ここで、\(\mathrm{KMAC\#}\)は、KMAC128またはKMAC256([SP 800-185]に定義)のいずれかの特定の実装であり、7節に規定する選択要件を満たします。実装依存のバイト列\(\mathit{salt}\)は、その(非ヌルの)値を\(\mathit{OtherInput}\)で任意に与えてよく、\(\mathrm{KMAC\#}\)鍵として機能します。また、\(x\)(\(\mathrm{H}\)への入力)は、[SP 800-185]に規定される\(\mathrm{KMAC\#}\)の「メッセージ」として機能するビット列です。パラメーター\(\mathit{H\_outputBits}\)は、使用するKMAC変種の出力に選ぶビット長を決定します。「カスタマイズ文字列」\(S\)は、バイト列01001011 \(\parallel\) 01000100 \(\parallel\) 01000110でなければならず、これは8ビットASCIIの文字「K」、「D」、「F」の並びを表します。(本書では、この3バイトの文字列を「KDF」と表記します。)

Implementation-Dependent Parameters:

実装依存パラメーター:

1. \(\mathit{H\_outputBits}\) – A positive integer that indicates the length (in bits) of the output of the auxiliary function \(\mathrm{H}\) that is used to derive blocks of secret keying material. If Option 1 or Option 2 is chosen, then \(\mathit{H\_outputBits}\) corresponds to the bit-length of the output block of the particular hash function used in the implementation of \(\mathrm{H}\); therefore, \(\mathit{H\_outputBits}\) is in the set \(\{160, 224, 256, 384, 512\}\) with the precise value determined by the choice for the hash function, \(\mathit{hash}\) (see Section 4.2 for details). If Option 3 is chosen, then \(\mathit{H\_outputBits}\) shall either be set equal to the length (in bits) of the secret keying material to be derived (see input \(L\) below) or selected from the set \(\{160, 224, 256, 384, 512\}\).

1. \(\mathit{H\_outputBits}\) – シークレット鍵素材のブロックを導出するために使用する補助関数\(\mathrm{H}\)の出力の長さ(ビット単位)を示す正の整数。オプション1またはオプション2を選んだ場合、\(\mathit{H\_outputBits}\)は、\(\mathrm{H}\)の実装に用いる特定のハッシュ関数の出力ブロックのビット長に対応します。したがって、\(\mathit{H\_outputBits}\)は集合\(\{160, 224, 256, 384, 512\}\)に属し、正確な値はハッシュ関数\(\mathit{hash}\)の選択によって決まります(詳細は4.2節を参照)。オプション3を選んだ場合、\(\mathit{H\_outputBits}\)は、導出するシークレット鍵素材の長さ(ビット単位)と等しく設定するか(後述の入力\(L\)を参照)、集合\(\{160, 224, 256, 384, 512\}\)から選ばなければなりません。

2. \(\mathit{max\_H\_inputBits}\) – A positive integer that indicates the maximum permitted length (in bits) of the bit string \(x\) that is used as input to the auxiliary function \(\mathrm{H}\). If Option 1 or Option 2 is chosen for the implementation of \(\mathrm{H}\), then the upper bound on \(\mathit{max\_H\_inputBits}\) shall not exceed the message limit imposed by the hash function, \(\mathit{hash}\) (see Section 4.2 for details); \(\mathit{max\_H\_inputBits}\) values smaller than a specification-imposed upper bound may be dictated by the particular use case. If the hash function, \(\mathit{hash}\), is specified in [FIPS 202], or if Option 3 is chosen for the implementation of \(\mathrm{H}\), then there is no specification-imposed upper bound on \(\mathit{max\_H\_inputBits}\); the value assigned to \(\mathit{max\_H\_inputBits}\) may be determined by the needs of the relying applications/parties.

2. \(\mathit{max\_H\_inputBits}\) – ビット列\(x\)(補助関数\(\mathrm{H}\)への入力として使用する)に許される最大長(ビット単位)を示す正の整数。\(\mathrm{H}\)の実装にオプション1またはオプション2を選んだ場合、\(\mathit{max\_H\_inputBits}\)の上限は、ハッシュ関数\(\mathit{hash}\)が課すメッセージ長の制限を超えてはなりません(詳細は4.2節を参照)。仕様が課す上限より小さい\(\mathit{max\_H\_inputBits}\)の値が、特定の使用事例によって求められる場合があります。ハッシュ関数\(\mathit{hash}\)が[FIPS 202]に規定されている場合、または\(\mathrm{H}\)の実装にオプション3を選んだ場合、\(\mathit{max\_H\_inputBits}\)に対して仕様が課す上限はありません。\(\mathit{max\_H\_inputBits}\)に割り当てる値は、依存するアプリケーション/当事者の必要に応じて決めてよい。

3. \(\mathit{default\_salt}\) – A non-null (secret or non-secret) byte string that is needed only if either Option 2 (\(\mathrm{HMAC}\text{-}\mathit{hash}\)) or Option 3 (\(\mathrm{KMAC\#}\)) is chosen for the implementation of the auxiliary function \(\mathrm{H}\). This byte string is used as the value of \(\mathit{salt}\) if a (non-null) value is not included in \(\mathit{OtherInput}\) (see below).
If \(\mathrm{H}(x) = \mathrm{HMAC}\text{-}\mathit{hash}(\mathit{salt}, x)\), then – in the absence of an agreed-upon alternative – the \(\mathit{default\_salt}\) shall be an all-zero byte string whose bit length equals that specified as the bit length of an input block for the hash function, \(\mathit{hash}\). (Input-block lengths for the approved hash functions that can be employed to implement \(\mathrm{HMAC}\text{-}\mathit{hash}\) are listed in Table 1 of Section 4.2.)
If \(\mathrm{H}(x) = \mathrm{KMAC128}(\mathit{salt}, x, \mathit{H\_outputBits}, \text{“KDF”})\), then – in the absence of an agreed-upon alternative – the \(\mathit{default\_salt}\) shall be an all-zero string of 164 bytes (i.e., an all-zero string of 1312 bits).

3. \(\mathit{default\_salt}\) – 非ヌルの(秘密または非秘密の)バイト列。オプション2(\(\mathrm{HMAC}\text{-}\mathit{hash}\))またはオプション3(\(\mathrm{KMAC\#}\))を補助関数\(\mathrm{H}\)の実装に選んだ場合にのみ必要となります。このバイト列は\(\mathit{salt}\)の値として用います。ただし、(非ヌルの)値が\(\mathit{OtherInput}\)に含まれない場合に限ります(後述)。
\(\mathrm{H}(x) = \mathrm{HMAC}\text{-}\mathit{hash}(\mathit{salt}, x)\)の場合、合意された代替がない限り、\(\mathit{default\_salt}\)は、ハッシュ関数\(\mathit{hash}\)の入力ブロックのビット長として規定されたビット長に等しい、全ゼロのバイト列でなければなりません。(\(\mathrm{HMAC}\text{-}\mathit{hash}\)の実装に使用できる承認済みハッシュ関数の入力ブロック長は、4.2節の表1に示します。)
\(\mathrm{H}(x) = \mathrm{KMAC128}(\mathit{salt}, x, \mathit{H\_outputBits}, \text{“KDF”})\)の場合、合意された代替がない限り、\(\mathit{default\_salt}\)は164バイトの全ゼロ列(すなわち1312ビットの全ゼロ列)でなければなりません。

If \(\mathrm{H}(x) = \mathrm{KMAC256}(\mathit{salt}, x, \mathit{H\_outputBits}, \text{“KDF”})\), then – in the absence of an agreed-upon alternative – the \(\mathit{default\_salt}\) shall be an all-zero string of 132 bytes (i.e., an all-zero string of 1056 bits).

\(\mathrm{H}(x) = \mathrm{KMAC256}(\mathit{salt}, x, \mathit{H\_outputBits}, \text{“KDF”})\)の場合、合意された代替がない限り、\(\mathit{default\_salt}\)は132バイトの全ゼロ列(すなわち1056ビットの全ゼロ列)でなければなりません。

入力:

1. \(Z\) – a byte string that represents the shared secret.

1. \(Z\) – 共有シークレットを表すバイト列。

2. \(\mathit{OtherInput}\), which includes:
a. \(\{\mathit{salt}\}\) – A non-null (secret or non-secret) byte string that can be (optionally) provided if either Option 2 (\(\mathrm{HMAC}\text{-}\mathit{hash}\)) or Option 3 (\(\mathrm{KMAC\#}\)) is chosen for the implementation of the auxiliary function \(\mathrm{H}\) since those options require a \(\mathit{salt}\) value that is used as a MAC key.
The \(\mathit{salt}\) included in \(\mathit{OtherInput}\) could be, for example, a value computed from nonces exchanged as part of a key-establishment protocol that employs one or more of the key-agreement schemes specified in [SP 800-56A] or [SP 800-56B], a value already shared by the protocol participants, or a value that is pre-determined by the protocol. The possibilities for the length of \(\mathit{salt}\) are determined as follows:
(1) The \(\mathrm{HMAC}\text{-}\mathit{hash}\) algorithm, as defined in [FIPS 198], can accommodate MAC keys of any bit length permitted for input to the hash function, \(\mathit{hash}\). Therefore, when Option 2 is chosen, the length of the byte string \(\mathit{salt}\) can be as large as allowed for any string used as input to \(\mathit{hash}\). However, if the bit length of \(\mathit{salt}\) is greater than the bit length specified for a single input block for the hash function, \(\mathit{hash}\), then the value of \(\mathit{salt}\) is replaced by \(\mathit{hash}(\mathit{salt})\) as part of the HMAC computation. See Table 2 for details.
(2) The KMAC128 and KMAC256 algorithms specified in [SP 800-185] can accommodate MAC keys of any length up to \((2^{2040} - 1)\) bits. Therefore, when Option 3 is chosen, \(\mathit{salt}\) can be a byte string of any agreed-upon length that does not exceed (\(2^{2037} - 1\) bytes) (i.e., \(2^{2040} - 8\) bits). The input \(\mathit{salt}\) value will be (re)formatted (using a byte-padding function) during the execution of the KMAC algorithm to obtain a string whose length is a multiple of either 168 bytes (for KMAC128) or 136 bytes (for KMAC256). See Table 3 for details.
If a \(\mathit{salt}\) value required by \(\mathrm{H}\) is omitted from \(\mathit{OtherInput}\) (or if a required \(\mathit{salt}\) value included in \(\mathit{OtherInput}\) is the null string), then the value of \(\mathit{default\_salt}\) shall be used as the value of \(\mathit{salt}\) when \(\mathrm{H}\) is executed.
b. \(L\) – A positive integer that indicates the length (in bits) of the secret keying material to be derived; \(L\) shall not exceed \(\mathit{H\_outputBits} \times (2^{32} - 1)\).
(\(L = \mathit{keydatalen}\) in the notation of previous versions of [SP 800-56A], while \(L = \mathit{KBits}\) in the notation of previous versions of [SP 800-56B]; current versions of those documents have been updated to be consistent with SP 800-56C.)

2. \(\mathit{OtherInput}\)。以下を含みます。
a. \(\{\mathit{salt}\}\) – 非ヌルの(秘密または非秘密の)バイト列。オプション2(\(\mathrm{HMAC}\text{-}\mathit{hash}\))またはオプション3(\(\mathrm{KMAC\#}\))を補助関数\(\mathrm{H}\)の実装に選んだ場合に(任意で)与えることができます。これらのオプションは、MAC鍵として使用する\(\mathit{salt}\)値を必要とするためです。
\(\mathit{salt}\)(\(\mathit{OtherInput}\)に含めるもの)は、例えば、[SP 800-56A]または[SP 800-56B]に規定される鍵合意方式を1つ以上用いる鍵確立プロトコルの一部として交換されたノンスから計算した値、プロトコル参加者がすでに共有している値、またはプロトコルで事前に定められた値でよい。\(\mathit{salt}\)の長さの選択肢は次のとおり決まります。
(1) [FIPS 198]に定義される\(\mathrm{HMAC}\text{-}\mathit{hash}\)アルゴリズムは、ハッシュ関数\(\mathit{hash}\)への入力として許される任意のビット長のMAC鍵を扱えます。したがって、オプション2を選んだ場合、バイト列\(\mathit{salt}\)の長さは、\(\mathit{hash}\)への入力として使用する文字列に許される最大長まで可能です。ただし、\(\mathit{salt}\)のビット長がハッシュ関数\(\mathit{hash}\)の単一入力ブロックに規定されたビット長を超える場合、HMAC計算の一部として\(\mathit{salt}\)の値は\(\mathit{hash}(\mathit{salt})\)に置き換えられます。詳細は表2を参照してください。
(2) [SP 800-185]に規定されるKMAC128およびKMAC256アルゴリズムは、\((2^{2040} - 1)\)ビットまでの任意の長さのMAC鍵を扱えます。したがって、オプション3を選んだ場合、\(\mathit{salt}\)は、(\(2^{2037} - 1\)バイト)(すなわち\(2^{2040} - 8\)ビット)を超えない、合意された任意の長さのバイト列でよい。入力\(\mathit{salt}\)値は、KMACアルゴリズムの実行中に(バイトパディング関数を用いて)(再)整形され、長さが168バイト(KMAC128の場合)または136バイト(KMAC256の場合)の倍数となる文字列が得られます。詳細は表3を参照してください。
\(\mathit{salt}\)値(\(\mathrm{H}\)が必要とするもの)が\(\mathit{OtherInput}\)から省略されている場合(または、必要な\(\mathit{salt}\)値として\(\mathit{OtherInput}\)に含まれるものがヌル列である場合)、\(\mathit{default\_salt}\)の値を、\(\mathit{salt}\)の値として\(\mathrm{H}\)の実行時に使用しなければなりません。
b. \(L\) – 導出するシークレット鍵素材の長さ(ビット単位)を示す正の整数。\(L\)は\(\mathit{H\_outputBits} \times (2^{32} - 1)\)を超えてはなりません。
([SP 800-56A]の旧版の表記では\(L = \mathit{keydatalen}\)であり、[SP 800-56B]の旧版の表記では\(L = \mathit{KBits}\)です。これらの文書の現行版は、SP 800-56Cと整合するよう更新されています。)

c. FixedInfo – A bit string of context-specific data that is appropriate for the relying key-establishment scheme. As its name suggests, the value of FixedInfo does not change during the execution of the process described below. FixedInfo may, for example, include appropriately formatted representations of the values of salt and/or L. The inclusion of additional copies of the values of salt and L in FixedInfo would ensure that each block of derived keying material is affected by all of the information conveyed in OtherInput. See [SP 800-56A] and [SP 800-56B] for more detailed recommendations concerning the format and content of FixedInfo (also known as OtherInfo in earlier versions of those documents).

c. FixedInfo – 依存する鍵確立方式に適した、コンテキスト固有データのビット列。その名のとおり、FixedInfoの値は以下の処理の実行中に変化しません。例えば、saltおよび/またはLの値を適切に形式化して含めてもよいです。saltおよびLの値の複製をFixedInfoに追加して含めると、導出鍵素材の各ブロックがOtherInputで伝達されるすべての情報の影響を受けることが保証されます。FixedInfo(旧版ではOtherInfoとも呼ばれる)の形式と内容に関する詳細な推奨事項は[SP 800-56A]および[SP 800-56B]を参照してください。

Process:

処理:

1. If \(L > 0\), then set \(\mathit{reps} = \lceil L / \mathit{H\_outputBits} \rceil\); otherwise, output an error indicator and exit this process without performing the remaining actions (i.e., omit steps 2 through 8).

1. \(L > 0\)の場合、\(\mathit{reps} = \lceil L / \mathit{H\_outputBits} \rceil\)と設定します。それ以外の場合は、エラー表示を出力し、残りの処理を実行せずにこの処理を終了します(すなわち、手順2~8を省略する)。

2. If \(\mathit{reps} > (2^{32} - 1)\), then output an error indicator and exit this process without performing the remaining actions (i.e., omit steps 3 through 8).

2. \(\mathit{reps} > (2^{32} - 1)\)の場合、エラー表示を出力し、残りの処理を実行せずにこの処理を終了します(すなわち、手順3~8を省略する)。

3. Initialize a big-endian 4-byte unsigned integer \(\mathit{counter}\) as 0x00000000, corresponding to a 32-bit binary representation of the number zero.

3. ビッグエンディアンの4バイト符号なし整数\(\mathit{counter}\)を0x00000000として初期化します。これは数値ゼロの32ビット2進表現に相当します。

4. If \(\mathit{counter} \parallel Z \parallel \mathit{FixedInfo}\) is more than \(\mathit{max\_H\_inputBits}\) bits long, then output an error indicator and exit this process without performing any of the remaining actions (i.e., omit steps 5 through 8).

4. \(\mathit{counter} \parallel Z \parallel \mathit{FixedInfo}\)の長さが\(\mathit{max\_H\_inputBits}\)ビットを超える場合、エラー表示を出力し、残りの処理を一切実行せずにこの処理を終了します(すなわち、手順5~8を省略する)。

5. Initialize \(\mathit{Result}(0)\) as an empty bit string (i.e., the null string).

5. \(\mathit{Result}(0)\)を空のビット列(すなわちヌル列)として初期化します。

6. For \(i = 1\) to \(\mathit{reps}\), do the following:

6. \(i = 1\)から\(\mathit{reps}\)まで、次を実行します。

6.1 Increment \(\mathit{counter}\) by 1.

6.1 \(\mathit{counter}\)を1増加させる。

6.2 Compute \(K(i) = \mathrm{H}(\mathit{counter} \parallel Z \parallel \mathit{FixedInfo})\).

6.2 \(K(i) = \mathrm{H}(\mathit{counter} \parallel Z \parallel \mathit{FixedInfo})\)を計算します。

6.3 Set \(\mathit{Result}(i) = \mathit{Result}(i - 1) \parallel K(i)\).

6.3 \(\mathit{Result}(i) = \mathit{Result}(i - 1) \parallel K(i)\)と設定します。

7. Set \(\mathit{DerivedKeyingMaterial}\) equal to the leftmost \(L\) bits of \(\mathit{Result}(\mathit{reps})\).

7. \(\mathit{DerivedKeyingMaterial}\)に、左端の\(L\)ビットを\(\mathit{Result}(\mathit{reps})\)から取り出して設定します。

8. Output \(\mathit{DerivedKeyingMaterial}\).

8. \(\mathit{DerivedKeyingMaterial}\)を出力します。

出力:

The bit string \(\mathit{DerivedKeyingMaterial}\) of length \(L\) bits (or an error indicator).

ビット列\(\mathit{DerivedKeyingMaterial}\)(長さ\(L\)ビット)、またはエラー表示。

Notes: In step 6.2 above, if \(\mathrm{H}(x) = \mathit{hash}(x)\) or \(\mathrm{H}(x) = \mathrm{HMAC}\text{-}\mathit{hash}(\mathit{salt}, x)\), the entire output block of the hash function, \(\mathit{hash}\), shall be used when computing the output of \(\mathrm{H}\). Some approved choices for \(\mathit{hash}\) (e.g., SHA-512/224, SHA-512/256, and SHA-384, as specified in [FIPS 180]) include an internal truncation operation. In such a case, the “entire output” of \(\mathit{hash}\) is the output block as defined in its specification. (For example, in the case of \(\mathit{hash} = \text{SHA-384}\), the entire output is defined as a 384-bit block resulting from the internal truncation of a certain 512-bit value). If \(\mathrm{H}(x) = \mathrm{KMAC\#}(\mathit{salt}, x, \mathit{H\_outputBits}, S)\), then choosing \(\mathit{H\_outputBits} = L\) will likely be the most efficient way to produce the desired \(L\) bits of keying material. The derived keying material \(\mathit{DerivedKeyingMaterial}\) shall be computed in its entirety before outputting any portion of it.

注: 上記の手順6.2で\(\mathrm{H}(x) = \mathit{hash}(x)\)または\(\mathrm{H}(x) = \mathrm{HMAC}\text{-}\mathit{hash}(\mathit{salt}, x)\)の場合、ハッシュ関数\(\mathit{hash}\)の出力ブロック全体を、\(\mathrm{H}\)の出力を計算する際に使用しなければなりません。承認済みの\(\mathit{hash}\)の選択肢の一部(例: [FIPS 180]に規定されるSHA-512/224、SHA-512/256、SHA-384)には内部の切り詰め処理が含まれます。その場合、\(\mathit{hash}\)の「出力全体」とは、その仕様で定義される出力ブロックを指します。(例えば\(\mathit{hash} = \text{SHA-384}\)の場合、出力全体は、ある512ビット値を内部で切り詰めて得られる384ビットのブロックと定義されます。)\(\mathrm{H}(x) = \mathrm{KMAC\#}(\mathit{salt}, x, \mathit{H\_outputBits}, S)\)の場合、\(\mathit{H\_outputBits} = L\)を選ぶと、所望の\(L\)ビットの鍵素材を最も効率的に生成できる可能性が高い。導出鍵素材\(\mathit{DerivedKeyingMaterial}\)は、その一部を出力する前に全体を計算しなければなりません。

4.2 The Auxiliary Function \(\mathrm{H}(x)\) and Related Parameters

4.2 補助関数\(\mathrm{H}(x)\)および関連パラメーター

Tables 1, 2, and 3 enumerate the possibilities for the auxiliary function \(\mathrm{H}\) and provide additional information concerning the values of related parameters, such as \(\mathit{H\_outputBits}\) and \(\mathit{max\_H\_inputBits}\). The tables also indicate the range of security strengths that can be supported by each choice for \(\mathrm{H}\) (see Section 4.1) when used in a key derivation function for a key-establishment scheme specified in SP 800-56A or SP 800-56B.

表1、2、3は、補助関数\(\mathrm{H}\)の選択肢を列挙し、\(\mathit{H\_outputBits}\)や\(\mathit{max\_H\_inputBits}\)などの関連パラメーターの値に関する追加情報を示します。また、これらの表は、\(\mathrm{H}\)の各選択肢(4.1節参照)を、SP 800-56AまたはSP 800-56Bに規定される鍵確立方式の鍵導出関数で使用した場合に支援できるセキュリティ強度の範囲も示します。

Table 1: \(\mathrm{H}(x) = \mathit{hash}(x)\) (Option 1)

表1: \(\mathrm{H}(x) = \mathit{hash}(x)\)(オプション1)

Hash Function (hash)Byte / Bit Length of Input BlocksH_outputBits (in bits)max_H_inputBits (in bits)Security
Strength s
supported
(in bits)
SHA-164 / 512160≤ 2^64 − 1112 ≤ s ≤ 160
SHA-22464 / 512224112 ≤ s ≤ 224
SHA-25664 / 512256112 ≤ s ≤ 256
SHA-512/224128 / 1024224≤ 2^128 − 1112 ≤ s ≤ 224
SHA-512/256128 / 1024256112 ≤ s ≤ 256
SHA-384128 / 1024384112 ≤ s ≤ 384
SHA-512128 / 1024512112 ≤ s ≤ 512
SHA3-224144 / 1152224Arbitrarily long inputs can be accommodated.112 ≤ s ≤ 224
SHA3-256136 / 1088256112 ≤ s ≤ 256
SHA3-384104 / 832384112 ≤ s ≤ 384
SHA3-51272 / 576512112 ≤ s ≤ 512
原本PDFの抜粋画像原本 PDF p.23 の画像抜粋
ハッシュ関数(hash)入力ブロックのバイト長/ビット長H_outputBits(ビット単位)max_H_inputBits(ビット単位)支援されるセキュリティ強度s(ビット単位)
SHA-164 / 512160≤ 2^64 − 1112 ≤ s ≤ 160
SHA-22464 / 512224112 ≤ s ≤ 224
SHA-25664 / 512256112 ≤ s ≤ 256
SHA-512/224128 / 1024224≤ 2^128 − 1112 ≤ s ≤ 224
SHA-512/256128 / 1024256112 ≤ s ≤ 256
SHA-384128 / 1024384112 ≤ s ≤ 384
SHA-512128 / 1024512112 ≤ s ≤ 512
SHA3-224144 / 1152224任意長の入力を扱えます。112 ≤ s ≤ 224
SHA3-256136 / 1088256112 ≤ s ≤ 256
SHA3-384104 / 832384112 ≤ s ≤ 384
SHA3-51272 / 576512112 ≤ s ≤ 512

Table 2: \(\mathrm{H}(x) = \mathrm{HMAC}\text{-}\mathit{hash}(\mathit{salt}, x)\) (Option 2)

表2: \(\mathrm{H}(x) = \mathrm{HMAC}\text{-}\mathit{hash}(\mathit{salt}, x)\)(オプション2)

Hash Function (hash)Effective Byte / Bit Length* of saltH_outputBits (in bits)max_H_inputBits (in bits)Security Strength s supported (in bits)
SHA-164 / 512160≤ 2^64 − 513112 ≤ s ≤ 160
SHA-22464 / 512224112 ≤ s ≤ 224
SHA-25664 / 512256112 ≤ s ≤ 256
SHA-512/224128 / 1024224≤ 2^128 − 1025112 ≤ s ≤ 224
SHA-512/256128 / 1024256112 ≤ s ≤ 256
SHA-384128 / 1024384112 ≤ s ≤ 384
SHA-512128 / 1024512112 ≤ s ≤ 512
SHA3-224144 / 1152224Arbitrarily long112 ≤ s ≤ 224
原本PDFの抜粋画像原本 PDF p.23 の画像抜粋
ハッシュ関数(hash)saltの有効バイト長/ビット長*H_outputBits(ビット単位)max_H_inputBits(ビット単位)支援されるセキュリティ強度s(ビット単位)
SHA-164 / 512160≤ 2^64 − 513112 ≤ s ≤ 160
SHA-22464 / 512224112 ≤ s ≤ 224
SHA-25664 / 512256112 ≤ s ≤ 256
SHA-512/224128 / 1024224≤ 2^128 − 1025112 ≤ s ≤ 224
SHA-512/256128 / 1024256112 ≤ s ≤ 256
SHA-384128 / 1024384112 ≤ s ≤ 384
SHA-512128 / 1024512112 ≤ s ≤ 512
SHA3-224144 / 1152224任意長112 ≤ s ≤ 224
SHA3-256136 / 1088256inputs can be accommodated.\(112 \le s \le 256\)
SHA3-384104 / 832384\(112 \le s \le 384\)
SHA3-51272 / 576512\(112 \le s \le 512\)
SHA3-256136 / 1088256入力を扱えます。\(112 \le s \le 256\)
SHA3-384104 / 832384\(112 \le s \le 384\)
SHA3-51272 / 576512\(112 \le s \le 512\)

* This Recommendation places no restriction on the length of a chosen \(\mathit{salt}\) other than the requirement that its byte length be greater than zero but no greater than the length of a single input block to the hash function, \(\mathit{hash}\), used to implement \(\mathrm{HMAC}\text{-}\mathit{hash}\). That freedom of choice is somewhat illusory, however, since the HMAC algorithm will convert an input \(\mathit{salt}\) value (as needed) into a string of the indicated \(\mathit{hash}\)-dependent length. A shorter \(\mathit{salt}\) (used by \(\mathrm{H}\) as an HMAC key) will be padded by appending an all-zero bit string to obtain a string of the indicated length (the length of a single input block for the hash function, \(\mathit{hash}\)); a longer \(\mathit{salt}\) will be hashed to produce a shorter string (of bit length \(\mathit{H\_outputBits}\)), which will then be padded (by appending an all-zero bit string) to obtain a string of the indicated length (see [FIPS 198] for additional information). Table 3: \(\mathrm{H}(x) = \mathrm{KMAC\#}(\mathit{salt}, x, \mathit{H\_outputBits}, \text{“KDF”})\) (Option 3)

* 本推奨事項は、選択する\(\mathit{salt}\)の長さについて、そのバイト長が0より大きく、かつハッシュ関数\(\mathit{hash}\)(\(\mathrm{HMAC}\text{-}\mathit{hash}\)の実装に用いるもの)の単一入力ブロックの長さ以下であるという要件以外に制限を設けません。ただし、この選択の自由はいくぶん見かけ上のものです。HMACアルゴリズムが、入力\(\mathit{salt}\)値を(必要に応じて)\(\mathit{hash}\)に依存する指定の長さの列に変換するためです。短い\(\mathit{salt}\)(\(\mathrm{H}\)がHMAC鍵として使用する)は、全ゼロのビット列を後ろに付加してパディングされ、指定の長さ(ハッシュ関数\(\mathit{hash}\)の単一入力ブロックの長さ)の列になります。長い\(\mathit{salt}\)はハッシュされて短い列(ビット長\(\mathit{H\_outputBits}\))になり、その後(全ゼロのビット列を後ろに付加して)パディングされ、指定の長さの列になります(追加情報は[FIPS 198]参照)。表3: \(\mathrm{H}(x) = \mathrm{KMAC\#}(\mathit{salt}, x, \mathit{H\_outputBits}, \text{“KDF”})\)(オプション3)

KMAC VariantLengthSuggestedH_outputBits (in bits)max_H_inputBits (in bits)Security Strength s supported (in bits)
of theMaximum
encodedByte Length
salt valueof salt
KMAC128Multiple of 168 bytes168 – 4 = 164 **Choice of 160, 224, 256, 384, 512, or L.Arbitrarily long inputs can be accommodated.112 ≤ s ≤ 128
KMAC256Multiple of 136 bytes136 – 4 = 132 ***112 ≤ s ≤ 256
原本PDFの抜粋画像原本 PDF p.24 の画像抜粋
KMAC変種salt値の符号化長saltの推奨最大バイト長H_outputBits(ビット単位)max_H_inputBits(ビット単位)支援されるセキュリティ強度s(ビット単位)
KMAC128168バイトの倍数168 – 4 = 164 **160、224、256、384、512またはLから選択。任意長の入力を扱えます。112 ≤ s ≤ 128
KMAC256136バイトの倍数136 – 4 = 132 ***112 ≤ s ≤ 256

** KMAC# prepends a length encoding for the first input data field. For KMAC128, using 164 bytes (or less) of salt leaves room for 4 bytes of prepended length encoding and limits the length of the encoded salt to no more than the length of a single block of input to KMAC128.

** KMAC#は第1入力データフィールドに長さ符号化を前置します。KMAC128でsaltを164バイト以下にすると、前置する長さ符号化の4バイト分を確保でき、符号化後のsalt長をKMAC128の単一入力ブロック長以下に制限できます。

*** KMAC# prepends a length encoding for the first input data field. For KMAC256, using 132 bytes (or less) of salt leaves room for 4 bytes of prepended length encoding and limits the length of the encoded salt to no more than the length of a single block of input to KMAC256.

*** KMAC#は第1入力データフィールドに長さ符号化を前置します。KMAC256でsaltを132バイト以下にすると、前置する長さ符号化の4バイト分を確保でき、符号化後のsalt長をKMAC256の単一入力ブロック長以下に制限できます。

5 Two-Step Key Derivation

5 2段階鍵導出

This section specifies an approved (two-step) extraction-then-expansion key-derivation procedure. Like the one-step key-derivation functions described in Section 4, the input to this two-step procedure includes the shared secret \(Z\); \(L\), a positive integer indicating the desired length (in bits) of the output keying material; and other information (as determined by the particular implementation of the key-establishment scheme and/or key-derivation method). In contrast to the one-step methods, a \(\mathit{salt}\) value is required to be included as part of the input.

本節では、承認済みの(2段階)抽出後拡張型鍵導出手順を規定します。4節で説明した1段階鍵導出関数と同様、この2段階手順への入力には、共有シークレット\(Z\)、出力鍵素材の所望の長さ(ビット単位)を示す正の整数\(L\)、およびその他の情報(鍵確立方式および/または鍵導出方法の特定の実装により決まる)が含まれます。1段階方式と異なり、入力の一部として\(\mathit{salt}\)値を含める必要があります。

The extraction-then-expansion key-derivation procedure is pictured in Figure 1.

抽出後拡張型鍵導出手順を図1に示します。

図表

図1:抽出後拡張型鍵導出手順

The first (randomness-extraction) step uses either HMAC (as defined in [FIPS 198]) or AES-CMAC (as defined in [SP 800-38B]). In either case, there are two inputs: salt, which serves as a MAC key and the shared secret, Z, which serves as the “message.” The resulting MAC output is used as a key-derivation key, K_DK. The use of the K_DK shall be restricted to the execution of the key-expansion step of the (two step) key-derivation procedure in which the K_DK is extracted from Z. In particular, its value shall not be an output of the extraction-then-expansion key-derivation procedure.

第1段階(乱数抽出)では、[FIPS 198]に定義されるHMACまたは[SP 800-38B]に定義されるAES-CMACを使用します。いずれの場合も入力は2つです。MAC鍵として機能するsaltと、「メッセージ」として機能する共有シークレットZです。生成されたMAC出力を鍵導出鍵K_DKとして用います。K_DKの使用は、ZからK_DKを抽出する2段階鍵導出手順の鍵拡張段階に限定しなければなりません。特に、その値を抽出後拡張型鍵導出手順の出力としてはなりません。

The second (key-expansion) step uses the key-derivation key, K_DK, along with the integer L and other appropriate data as the input to a PRF-based key-derivation function specified in [SP 800-108]. The output returned by that key-derivation function is either secret keying material (in the form of DerivedKeyingMaterial, a bit string of length L) or an error indicator.

第2段階(鍵拡張)では、鍵導出鍵K_DK、整数Lおよびその他の適切なデータを、[SP 800-108]に規定されたPRFベースの鍵導出関数の入力として用います。その関数の出力は、シークレット鍵素材(長さLのビット列DerivedKeyingMaterial)またはエラー表示のいずれかです。

5.1 Specification of Key-Derivation Procedure

5.1 鍵導出手順の仕様

The extraction-then-expansion key-derivation procedure is specified as follows: Function call: \(\mathrm{KDM}(Z, \mathit{OtherInput})\).

抽出後拡張型鍵導出手順を次のように規定します。関数呼び出し: \(\mathrm{KDM}(Z, \mathit{OtherInput})\)。

Options for the Auxiliary MAC Algorithm: The MAC algorithm employed for randomness extraction shall be either an implementation of HMAC as defined in [FIPS 198], based on an approved hash function, hash (i.e., HMAC-hash), or an implementation of AES-CMAC as defined in [SP 800-38B] (i.e., AES-N-CMAC for N = 128, 192, or 256). In either case, the (untruncated) output of the MAC algorithm is used as the key-derivation key for subsequent key expansion. Tables 4 and 5 in Section 5.2 describe the possibilities for the auxiliary MAC algorithm, which shall be chosen in accordance with the selection requirements specified in Section 7.

補助MACアルゴリズムのオプション: 乱数抽出に用いるMACアルゴリズムは、承認済みハッシュ関数hashに基づく[FIPS 198]定義のHMAC実装(HMAC-hash)、または[SP 800-38B]定義のAES-CMAC実装(N = 128、192または256のAES-N-CMAC)のいずれかでなければなりません。いずれの場合も、そのMACアルゴリズムの(切り詰めていない)出力を後続の鍵拡張用の鍵導出鍵として用います。5.2節の表4および表5に補助MACアルゴリズムの選択肢を示します。アルゴリズムは7節の選択要件に従って選ばなければなりません。

Implementation-Dependent Auxiliary PRF-based KDF: One of the general-purpose, PRF-based key-derivation functions defined in [SP 800-108] shall be used for key expansion. These key-derivation functions employ an approved MAC algorithm as the PRF. In this Recommendation, the PRF used by the KDF in key expansion is determined by the MAC algorithm that is used for randomness extraction. Specifically:

実装依存の補助PRFベースKDF: 鍵拡張には、[SP 800-108]で定義される汎用PRFベース鍵導出関数のいずれかを使用しなければなりません。これらの鍵導出関数は、承認済みMACアルゴリズムをPRFとして用います。本推奨事項では、鍵拡張でKDFが用いるPRFは乱数抽出に用いるMACアルゴリズムによって決まります。具体的には:

a. If \(\mathrm{HMAC}\text{-}\mathit{hash}\) is used in the randomness-extraction step, then the same \(\mathrm{HMAC}\text{-}\mathit{hash}\) (i.e., using the same hash function, \(\mathit{hash}\)) shall be used as the PRF in the key-expansion step; and

a. 乱数抽出段階で\(\mathrm{HMAC}\text{-}\mathit{hash}\)を使用する場合、同じ\(\mathrm{HMAC}\text{-}\mathit{hash}\)(すなわち、同じハッシュ関数\(\mathit{hash}\)を使用するもの)を鍵拡張段階のPRFとして使用しなければなりません。かつ、

b. If AES-128-CMAC, AES-192-CMAC, or AES-256-CMAC is used in the randomness-extraction step, then only AES-128-CMAC (i.e., the CMAC mode of AES-128) shall be used as the PRF in the key-expansion step.

b. 乱数抽出段階でAES-128-CMAC、AES-192-CMACまたはAES-256-CMACを使用する場合、鍵拡張段階のPRFにはAES-128-CMAC(AES-128のCMACモード)のみを使用しなければなりません。

The rationale for these rules is discussed in Section 8.3.

これらの規則の根拠は8.3節で説明します。

入力:

1. \(Z\) – A byte string that represents the shared secret. It is used as the “message” during the execution of the MAC algorithm employed in the randomness-extraction step.

1. \(Z\) – 共有シークレットを表すバイト列。乱数抽出段階で用いるMACアルゴリズムの実行時に「メッセージ」として使用します。

2. \(\mathit{OtherInput}\), which includes:

2. \(\mathit{OtherInput}\)。次を含む:

a. \(\mathit{salt}\) – A non-null (secret or non-secret) byte string used as the MAC key during the execution of the randomness-extraction step (i.e., step 1 in the process shown below). This \(\mathit{salt}\) could be, for example, a value computed from nonces exchanged as part of a key-establishment protocol that employs one or more of the key-agreement schemes specified in [SP 800-56A] or [SP 800-56B], a value already shared by the protocol participants, or a value that is pre-determined by the protocol. The possibilities for the length of \(\mathit{salt}\) are determined by the auxiliary MAC algorithm that is used for randomness extraction:

a. \(\mathit{salt}\) – 乱数抽出段階(すなわち、以下に示す処理のステップ1)の実行時にMAC鍵として使用する、非ヌルの(秘密または非秘密の)バイト列。この\(\mathit{salt}\)は、例えば、[SP 800-56A]または[SP 800-56B]に規定される鍵合意方式を1つ以上用いる鍵確立プロトコルの一部として交換したノンスから計算した値、プロトコル参加者がすでに共有している値、またはプロトコルで事前に決められた値であってよい。\(\mathit{salt}\)の長さの選択肢は、乱数抽出に用いる補助MACアルゴリズムによって決まる:

(1) The \(\mathrm{HMAC}\text{-}\mathit{hash}\) algorithm as defined in [FIPS 198] can accommodate keys of any length up to the maximum bit length permitted for input to the hash function, \(\mathit{hash}\). Therefore, the length of the byte string \(\mathit{salt}\) can be as large as allowed for any string used as input to \(\mathit{hash}\). However, if the bit length of \(\mathit{salt}\) is greater than the bit length specified for a single input block for \(\mathit{hash}\), then the value of \(\mathit{salt}\) is replaced by \(\mathit{hash}(\mathit{salt})\) as part of the HMAC computation. (Input-block lengths for the approved hash functions that can be employed to implement \(\mathrm{HMAC}\text{-}\mathit{hash}\) are included in column 4 of Table 1 in Section 4.2; also see Table 4 of Section 5.2.) In the absence of an agreed-upon alternative, the input \(\mathit{salt}\) value shall be an all-zero byte string whose length is equal to that of a single input block for the hash function, \(\mathit{hash}\).

(1) [FIPS 198]に定義される\(\mathrm{HMAC}\text{-}\mathit{hash}\)アルゴリズムは、ハッシュ関数\(\mathit{hash}\)への入力として許される最大ビット長までの任意の長さの鍵を扱えます。したがって、バイト列\(\mathit{salt}\)の長さは、\(\mathit{hash}\)への入力として用いる任意の列に許される長さまで大きくできます。ただし、\(\mathit{salt}\)のビット長が、\(\mathit{hash}\)の単一入力ブロックに規定されたビット長より大きい場合、\(\mathit{salt}\)の値はHMAC計算の一部として\(\mathit{hash}(\mathit{salt})\)に置き換えられます。(\(\mathrm{HMAC}\text{-}\mathit{hash}\)の実装に使用できる承認済みハッシュ関数の入力ブロック長は、4.2節の表1の列4に記載されています。5.2節の表4も参照。)別途合意された方法がない場合、入力\(\mathit{salt}\)値は、ハッシュ関数\(\mathit{hash}\)の単一入力ブロックと同じ長さの全ゼロのバイト列でなければなりません。

(2) AES-N-CMAC requires keys that are N bits long (for N = 128, 192, or 256), depending upon the AES variant that is used in the implementation. The bit length of salt shall be the bit length required of a key for that AES variant (128 bits for AES-128, 192 bits for AES-192, or 256 bits for AES-256). In the absence of an agreed-upon alternative, the input salt value shall be an all-zero string of the required bit length.

(2) AES-N-CMACでは、実装に用いるAES変種に応じてNビット(N = 128、192または256)の鍵が必要です。saltのビット長は、そのAES変種に必要な鍵長でなければなりません(AES-128では128ビット、AES-192では192ビット、AES-256では256ビット)。別途合意された方法がない限り、入力salt値は必要なビット長の全ゼロ列でなければなりません。

b. \(L\) – A positive integer that indicates the length (in bits) of the secret keying material to be derived using the auxiliary PRF-based KDF during the execution of the key-expansion step (i.e., step 2 in the process shown below). The maximum value allowed for \(L\) is determined by the mode (i.e., Counter Mode, Feedback Mode, or Double-Pipeline Iteration Mode) and implementation details of the chosen KDF (as specified in [SP 800-108]). An error event will occur during the execution of the KDF if \(L\) is too large.13 (Note that \(L = \mathit{keydatalen}\) in the notation of previous versions of [SP 800-56A], while \(L = \mathit{KBits}\) in the notation of previous versions of [SP 800-56B]; current versions of those documents have been updated to be consistent with SP 800-56C.)

b. \(L\) – 鍵拡張段階(すなわち、以下に示す処理のステップ2)の実行時に、補助PRFベースKDFを用いて導出するシークレット鍵素材の長さ(ビット単位)を示す正の整数。\(L\)に許される最大値は、選択したKDFのモード(すなわち、カウンターモード、フィードバックモード、または二重パイプライン反復モード)および実装の詳細によって決まります([SP 800-108]の規定による)。\(L\)が大きすぎる場合、KDFの実行中にエラー事象が発生します。13([SP 800-56A]の旧版の表記では\(L = \mathit{keydatalen}\)、[SP 800-56B]の旧版の表記では\(L = \mathit{KBits}\)であったことに注意。これらの文書の現行版は、SP 800-56Cと整合するよう更新されています。)

c. \(\{\mathit{IV}\}\) – A bit string included (if required) for use as an initial value during an execution of the auxiliary PRF-based KDF; an \(\mathit{IV}\) shall be included in \(\mathit{OtherInput}\) if and only if the chosen PRF-based KDF is operating in Feedback Mode. It can either be secret or non-secret. It may be an empty string. If the PRF-based KDF is operating in either Counter Mode or Double-Pipeline Iteration Mode, an \(\mathit{IV}\) shall not be included in \(\mathit{OtherInput}\). (See [SP 800-108] for details.)

c. \(\{\mathit{IV}\}\) – 補助PRFベースKDFの実行時に初期値として使用するために(必要な場合に)含めるビット列。選択したPRFベースKDFがフィードバックモードで動作する場合、かつその場合に限り、\(\mathit{IV}\)を\(\mathit{OtherInput}\)に含めなければなりません。これは秘密でも非秘密でもよいです。空列であってもよいです。PRFベースKDFがカウンターモードまたは二重パイプライン反復モードで動作する場合、\(\mathit{IV}\)を\(\mathit{OtherInput}\)に含めてはなりません。(詳細は[SP 800-108]参照。)

d. \(\mathit{FixedInfo}\), including:

d. \(\mathit{FixedInfo}\)。次を含む:

(1) \(\mathit{Label}\) – A bit string that identifies the purpose for the derived keying material. For example, it can be the ASCII encoding of a character string describing the relying application(s) and/or the intended use(s) of the keying material. The value and encoding method used for the \(\mathit{Label}\) are defined in a larger context, for example, in the protocol that uses this key-derivation procedure. As an alternative to including this string as a separate component of \(\mathit{FixedInfo}\), \(\mathit{Label}\) could be incorporated in \(\mathit{Context}\) (see below).

(1) \(\mathit{Label}\) – 導出鍵素材の目的を識別するビット列。例えば、依存するアプリケーションおよび/または鍵素材の意図した用途を記述する文字列のASCII符号化を使用できます。\(\mathit{Label}\)に用いる値と符号化方法は、より大きな文脈、例えばこの鍵導出手順を使用するプロトコルで定義されます。この列を\(\mathit{FixedInfo}\)の別個の構成要素として含める代わりに、\(\mathit{Label}\)を\(\mathit{Context}\)(下記参照)に組み込んでもよいです。

(2) \(\mathit{Context}\) – A bit string of context-specific data appropriate for the relying key-establishment scheme/protocol and the chosen PRF-based KDF. For recommendations concerning the format and context-specific content of \(\mathit{Context}\), see the specifications of \(\mathit{FixedInfo}\) and/or \(\mathit{OtherInfo}\) in [SP 800-56A] and/or [SP 800-56B], respectively.

(2) \(\mathit{Context}\) – 依存する鍵確立方式/プロトコルおよび選択したPRFベースKDFに適した、コンテキスト固有データのビット列。\(\mathit{Context}\)の形式およびコンテキスト固有の内容に関する推奨事項については、\(\mathit{FixedInfo}\)および/または\(\mathit{OtherInfo}\)の仕様を、それぞれ[SP 800-56A]および/または[SP 800-56B]で参照。

(3) \([L]_2\) – An agreed-upon encoding of \(L\) as a bit string that is appropriate for use by the chosen PRF-based KDF (see [SP 800-108] for details). As an alternative to including this string as a separate component of \(\mathit{FixedInfo}\), \([L]_2\) could be incorporated in \(\mathit{Context}\) (see above).

(3) \([L]_2\) – 選択したPRFベースKDFでの使用に適した、\(L\)のビット列としての合意済みの符号化(詳細は[SP 800-108]参照)。この列を\(\mathit{FixedInfo}\)の別個の構成要素として含める代わりに、\([L]_2\)を\(\mathit{Context}\)(上記参照)に組み込んでもよいです。

13 The restrictions on the size of \(L\) that are given in [SP 800-108] are stated in terms of \(n = \lceil L/h \rceil\), where \(h\) denotes the bit length of an output block of the PRF used to implement the auxiliary KDF. In the case of Counter Mode, the restriction is \(n \le 2^{r} - 1\), where \(r \le 32\) is the (implementation-dependent) bit length allocated for the KDF’s counter variable. For the other KDF modes, the restriction is simply \(n \le 2^{32} - 1\).

13 [SP 800-108]に示される\(L\)のサイズに関する制限は、\(n = \lceil L/h \rceil\)を用いて述べられています。ここで\(h\)は、補助KDFの実装に用いるPRFの出力ブロックのビット長を表します。カウンターモードの場合、制限は\(n \le 2^{r} - 1\)であり、\(r \le 32\)はKDFのカウンター変数に割り当てる(実装依存の)ビット長です。他のKDFモードでは、制限は単に\(n \le 2^{32} - 1\)です。

Process:

処理:

[Randomness Extraction]

[乱数抽出]

1. Call \(\mathrm{MAC}(\mathit{salt}, Z, \ldots)\) to obtain \(K_{\mathit{DK}}\) or an error indicator. If an error occurs, output an error indicator, and exit from this process without performing step 2.

1. \(\mathrm{MAC}(\mathit{salt}, Z, \ldots)\)を呼び出して、\(K_{\mathit{DK}}\)またはエラー表示を得ます。エラーが発生した場合は、エラー表示を出力し、ステップ2を実行せずにこの処理を終了します。

[Key Expansion]

[鍵拡張]

2. Call \(\mathrm{KDF}(K_{\mathit{DK}}, L, \{\mathit{IV},\}\ \mathit{FixedInfo})\) to obtain \(\mathit{DerivedKeyingMaterial}\) or an error indicator (see [SP 800-108] for details). If an error occurs, output an error indicator; otherwise output \(\mathit{DerivedKeyingMaterial}\).

2. \(\mathrm{KDF}(K_{\mathit{DK}}, L, \{\mathit{IV},\}\ \mathit{FixedInfo})\)を呼び出して、\(\mathit{DerivedKeyingMaterial}\)またはエラー表示を得ます(詳細は[SP 800-108]参照)。エラーが発生した場合はエラー表示を出力し、そうでなければ\(\mathit{DerivedKeyingMaterial}\)を出力します。

出力:

The bit string \(\mathit{DerivedKeyingMaterial}\) of length \(L\) bits (or an error indicator).

ビット列\(\mathit{DerivedKeyingMaterial}\)(長さ\(L\)ビット)、またはエラー表示。

Notes: When HMAC-hash is used as the auxiliary MAC algorithm, the length of K_DK is the length of an untruncated output block from the hash function, hash. When AES-CMAC is used, then (regardless of the AES variant employed) K_DK is a 128-bit binary string. K_DK is used (locally) as a key-derivation key by the auxiliary KDF during the key-expansion step and shall be destroyed (along with all other sensitive, locally stored data) after its use. Its value shall not be an output of the key-derivation procedure.

注: HMAC-hashを補助MACアルゴリズムとして使用する場合、K_DKの長さはハッシュ関数hashの切り詰めていない出力ブロックの長さです。AES-CMACを使用する場合、用いるAES変種にかかわらず、K_DKは128ビットの2進文字列です。K_DKは鍵拡張段階で補助KDFの鍵導出鍵として(ローカルで)使用し、使用後は(ローカルに保存された他のすべての機密データとともに)破棄しなければなりません。その値を鍵導出手順の出力としてはなりません。

[RFC 5869] specifies a version of the above extraction-then-expansion key-derivation procedure using HMAC for both the extraction and expansion steps. For an extensive discussion concerning the rationale for the extract-and-expand mechanisms specified in this Recommendation, see [LNCS 6223].

[RFC 5869]は、抽出段階と拡張段階の両方でHMACを用いる、上記の抽出後拡張型鍵導出手順の一方式を規定します。本推奨事項で規定する抽出・拡張メカニズムの根拠に関する詳しい議論は[LNCS 6223]を参照してください。

5.2 The Auxiliary MAC Algorithm and Related Parameters

5.2 補助MACアルゴリズムおよび関連パラメーター

Tables 4 and 5 enumerate the possibilities for the auxiliary MAC algorithm used for randomness extraction and provide additional information concerning the lengths of the MAC key (i.e., the salt value) and the extracted key-derivation key (i.e., K_DK). The tables also indicate the range of security strengths that can be supported by each choice for MAC (see Section 5.1) when used for two-step key derivation in a key-establishment scheme specified in SP 800-56A and SP 800-56B.

表4および表5は、乱数抽出に用いる補助MACアルゴリズムの選択肢を列挙し、MAC鍵(すなわちsalt値)および抽出された鍵導出鍵K_DKの長さに関する情報を示します。また、[SP 800-56A]または[SP 800-56B]に規定される鍵確立方式で2段階鍵導出を行う際に、MACの各選択肢(5.1節参照)が支援できるセキュリティ強度の範囲も示します。

Table 4: \(\mathrm{MAC}(\mathit{salt}, Z, \ldots) = \mathrm{HMAC}\text{-}\mathit{hash}(\mathit{salt}, Z)\) (For Randomness Extraction)

表4: \(\mathrm{MAC}(\mathit{salt}, Z, \ldots) = \mathrm{HMAC}\text{-}\mathit{hash}(\mathit{salt}, Z)\)(乱数抽出用)

Hash Function (hash)Effective Byte / Bit Length* of saltBit Length of Extracted K DKSecurity Strength s supported (in bits)
SHA-164 / 512160112 ≤ s ≤ 160
SHA-22464 / 512224112 ≤ s ≤ 224
SHA-25664 / 512256112 ≤ s ≤ 256
原本PDFの抜粋画像原本 PDF p.28 の画像抜粋
ハッシュ関数(hash)saltの有効バイト長/ビット長*抽出されたK_DKのビット長支援されるセキュリティ強度s(ビット単位)
SHA-164 / 512160112 ≤ s ≤ 160
SHA-22464 / 512224112 ≤ s ≤ 224
SHA-25664 / 512256112 ≤ s ≤ 256
SHA-512/224128 / 1024224\(112 \le s \le 224\)
SHA-512/256128 / 1024256\(112 \le s \le 256\)
SHA-384128 / 1024384\(112 \le s \le 384\)
SHA-512128 / 1024512\(112 \le s \le 512\)
SHA3-224144 / 1152224\(112 \le s \le 224\)
SHA3-256136 / 1088256\(112 \le s \le 256\)
SHA3-384104 / 832384\(112 \le s \le 384\)
SHA3-51272 / 576512\(112 \le s \le 512\)
SHA-512/224128 / 1024224\(112 \le s \le 224\)
SHA-512/256128 / 1024256\(112 \le s \le 256\)
SHA-384128 / 1024384\(112 \le s \le 384\)
SHA-512128 / 1024512\(112 \le s \le 512\)
SHA3-224144 / 1152224\(112 \le s \le 224\)
SHA3-256136 / 1088256\(112 \le s \le 256\)
SHA3-384104 / 832384\(112 \le s \le 384\)
SHA3-51272 / 576512\(112 \le s \le 512\)

* This Recommendation places no restriction on the length of a chosen \(\mathit{salt}\) other than the requirement that its byte length be greater than zero but no greater than the length of a single input block to the hash function, \(\mathit{hash}\), used to implement \(\mathrm{HMAC}\text{-}\mathit{hash}\). That freedom of choice is somewhat illusory, however, since the HMAC algorithm will convert an input \(\mathit{salt}\) value (as needed) into a string of the indicated \(\mathit{hash}\)-dependent length. A shorter \(\mathit{salt}\) (which is used as an HMAC key) will be padded (by appending an all-zero bit string) to obtain a string of the indicated length (the length of a single input block for the hash function, \(\mathit{hash}\)); a longer \(\mathit{salt}\) will be hashed to produce a shorter string, which will then be padded (by appending an all-zero bit string) to obtain a string of the indicated length. (See [FIPS 198] for additional information.)

* 本推奨事項は、選択する \(\mathit{salt}\) の長さについて、バイト長が0より大きく、ハッシュ関数 \(\mathit{hash}\)(\(\mathrm{HMAC}\text{-}\mathit{hash}\) の実装に用いる)の単一入力ブロック長以下であること以外に制限を設けません。ただし、この選択の自由は見かけ上のものでもあります。HMACアルゴリズムは必要に応じて入力 \(\mathit{salt}\) 値を、\(\mathit{hash}\) に依存する指定長の文字列に変換するためです。短い \(\mathit{salt}\)(HMAC鍵として用いる)は、指定長(ハッシュ関数 \(\mathit{hash}\) の単一入力ブロック長)になるよう全ゼロのビット列を後ろに付加してパディングされます。長い \(\mathit{salt}\) はハッシュされて短い文字列になり、その後、指定長になるよう全ゼロのビット列を後ろに付加してパディングされます。(詳細は[FIPS 198]参照。)

Note: The hash function, \(\mathit{hash}\), used by the HMAC algorithm employed during randomness extraction shall be used again in the subsequent key-expansion step to implement the HMAC algorithm that is employed as a PRF by the auxiliary PRF-based KDF.

注: 乱数抽出で用いるHMACアルゴリズムのハッシュ関数 \(\mathit{hash}\) は、後続の鍵拡張段階で補助PRFベースKDFがPRFとして用いるHMACアルゴリズムの実装にも再度使用しなければなりません。

Table 5: \(\mathrm{MAC}(\mathit{salt}, Z, \ldots) = \mathrm{AES}\text{-}N\text{-}\mathrm{CMAC}(\mathit{salt}, Z)\) (For Randomness Extraction)

表5: \(\mathrm{MAC}(\mathit{salt}, Z, \ldots) = \mathrm{AES}\text{-}N\text{-}\mathrm{CMAC}(\mathit{salt}, Z)\)(乱数抽出用)

AES Variant used by AES-CMACBit Length of salt for AES-CMACBit Length of Extracted K DKSecurity Strength s supported (in bits)
AES-128128128112 ≤ s ≤ 128
AES-192192
AES-256256
原本PDFの抜粋画像原本 PDF p.29 の画像抜粋
AES-CMACで使用するAES変種AES-CMAC用saltのビット長抽出されたK_DKのビット長支援されるセキュリティ強度s(ビット単位)
AES-128128128112 ≤ s ≤ 128
AES-192192
AES-256256

Note: Regardless of which AES variant is used by the AES-CMAC algorithm during randomness-extraction, the 128-bit AES block size determines the bit length of the resulting K_DK and the maximum security strength that can be supported by the use of the derived keying material (i.e., no more than 128 bits). To accommodate the use of this 128-bit K_DK as a key-derivation key, the CMAC mode of AES-128 shall be the PRF employed by the auxiliary PRF-based KDF in the subsequent key-expansion step.

注: 乱数抽出でAES-CMACアルゴリズムがどのAES変種を使うかにかかわらず、AESの128ビットブロック長により、生成されるK_DKのビット長と、導出鍵素材の使用で支援できる最大セキュリティ強度(128ビット以下)が決まります。この128ビットのK_DKを鍵導出鍵として使用できるよう、後続の鍵拡張段階では補助PRFベースKDFのPRFとしてAES-128のCMACモードを用いなければなりません。

5.3 Randomness Extraction followed by Multiple Key Expansions

5.3 乱数抽出とそれに続く複数の鍵拡張

The two-step key-derivation procedure specified in Section 5.1 can be generalized to incorporate a single instance of randomness extraction followed by m instances of key expansion for some (implementation-dependent) integer m ≥ 2.

5.1節で規定する2段階鍵導出手順は、1回の乱数抽出に続いてm回の鍵拡張を行うよう一般化できます。mは実装依存の整数で、m ≥ 2です。

図表

図2:乱数抽出後に複数回の鍵拡張を行う手順

For conformance with this Recommendation, the following restrictions apply:

本推奨事項への適合のため、次の制限を適用します。

• The auxiliary MAC algorithm employed for randomness extraction shall be either an implementation of HMAC as defined in [FIPS 198], based on an approved hash function, \(\mathit{hash}\) (i.e., \(\mathrm{HMAC}\text{-}\mathit{hash}\)), or an implementation of AES-CMAC as defined in [SP 800-38B] (i.e., \(\mathrm{AES}\text{-}N\text{-}\mathrm{CMAC}\) for \(N = 128\), 192, or 256). In either case, the (untruncated) output of the MAC algorithm shall be used as the key-derivation key for subsequent key expansion. Tables 4 and 5 in Section 5.2 describe the possibilities for the auxiliary MAC algorithm, which shall be chosen in accordance with the selection requirements specified in Section 7.

• 乱数抽出に用いる補助MACアルゴリズムは、承認済みハッシュ関数 \(\mathit{hash}\) に基づく[FIPS 198]定義のHMAC実装(すなわち \(\mathrm{HMAC}\text{-}\mathit{hash}\))、または[SP 800-38B]定義のAES-CMAC実装(すなわち \(\mathrm{AES}\text{-}N\text{-}\mathrm{CMAC}\)、\(N = 128\)、192または256)のいずれかでなければなりません。いずれの場合も、後続の鍵拡張用の鍵導出鍵としてMACアルゴリズムの(切り詰めていない)出力を使用しなければなりません。5.2節の表4および表5に補助MACアルゴリズムの選択肢を示します。アルゴリズムは7節で規定する選択要件に従って選ばなければなりません。

• One of the general-purpose, PRF-based key-derivation functions defined in [SP 800-108] shall be used for key expansion. The same KDF shall be used to implement all \(m\) expansion operations. In particular, the same key-derivation mode (counter mode, feedback mode, or double-pipeline iteration mode) and the same PRF shall be employed by the KDF in each of the \(m\) key-expansion operations.

• 鍵拡張には、[SP 800-108]で定義される汎用PRFベース鍵導出関数のいずれかを使用しなければなりません。\(m\) 回すべての拡張操作に同じKDFを使用しなければなりません。具体的には、\(m\) 回の鍵拡張操作のそれぞれで、KDFに同じ鍵導出モード(カウンターモード、フィードバックモード、または二重パイプライン反復モード)および同じPRFを使用しなければなりません。

•The PRF used by the KDF in key expansion is determined by the MAC algorithm that is used for randomness extraction. Specifically:

•鍵拡張でKDFが用いるPRFは、乱数抽出に用いるMACアルゴリズムによって決まります。具体的には:

a. If HMAC-hash is used for randomness extraction, then the same HMAC-hash (i.e., using the same hash function, hash) shall be the PRF used by the KDF in key expansion. and b. If either AES-128-CMAC, AES-192-CMAC, or AES-256-CMAC is used for randomness extraction, then the PRF used by the KDF in key-expansion shall be AES-128-CMAC (i.e., the CMAC mode of AES-128).

a. 乱数抽出にHMAC-hashを使用する場合、同じHMAC-hash(同じハッシュ関数hashを用いるもの)を鍵拡張でKDFが用いるPRFとしなければなりません。b. 乱数抽出にAES-128-CMAC、AES-192-CMACまたはAES-256-CMACを使用する場合、鍵拡張でKDFが用いるPRFはAES-128-CMAC(AES-128のCMACモード)でなければなりません。

• The \(\mathit{OtherInput}\) provided during the key-derivation request shall provide the \(\mathit{salt}\) for the randomness-extraction step (see Section 5.1 for additional details), and the requisite inputs (other than the key-derivation key) for \(m\) calls to the PRF-based KDF used for key expansion. In particular, for \(i = 1, .., m\), \(\mathit{OtherInput}\) shall include (subject to the stated conditions):

• 鍵導出要求で提供する \(\mathit{OtherInput}\) は、乱数抽出段階用の \(\mathit{salt}\)(詳細は5.1節参照)と、鍵拡張に用いるPRFベースKDFの \(m\) 回の呼び出しに必要な入力(鍵導出鍵を除く)を提供しなければなりません。特に \(i = 1, .., m\) について、\(\mathit{OtherInput}\) は(記載条件に従って)次を含めなければなりません。

a. \(L_i\) – A positive integer that indicates the length (in bits) of the secret keying material to be derived during the \(i\)-th call to the PRF-based KDF. (See the description of \(L\) in Section 5.1 for additional details.)

a. \(L_i\) – PRFベースKDFの \(i\) 回目の呼び出しで導出するシークレット鍵素材の長さ(ビット単位)を示す正の整数。(詳細は5.1節の \(L\) の説明を参照してください。)

b. \(\{\mathit{IV}_i\}\) – A bit string included (if required) for use as an initial value for the \(i\)-th call to the PRF-based KDF; the \(\mathit{IV}_i\) values shall be included in \(\mathit{OtherInput}\) if and only if the chosen PRF-based KDF is operating in Feedback Mode. (See the description of \(\mathit{IV}\) in Section 5.1 for additional details.)

b. \(\{\mathit{IV}_i\}\) – PRFベースKDFの\(i\)回目の呼び出しで初期値として用いるため(必要な場合に)含めるビット列。\(\mathit{IV}_i\)値は、選択したPRFベースKDFがフィードバックモードで動作する場合、かつその場合に限り、\(\mathit{OtherInput}\)に含めなければなりません(詳細は5.1節の\(\mathit{IV}\)の説明を参照)。

c. FixedInfo_i – The FixedInfo data to be employed during the i-th call to the PRF-based KDF. (See the description of FixedInfo in Section 5.1 for details.)

c. FixedInfo_i – PRFベースKDFのi回目の呼び出しで用いるFixedInfoデータ(詳細は5.1節のFixedInfoの説明を参照してください)。

• The values of \(\mathit{FixedInfo}_1\), \(\mathit{FixedInfo}_2\), … , and \(\mathit{FixedInfo}_m\) shall be (pairwise) distinct. (See Section 7.5, item 2 in [SP 800-108].)

• \(\mathit{FixedInfo}_1\)、\(\mathit{FixedInfo}_2\)、…、\(\mathit{FixedInfo}_m\) の値は、(どの2つも)互いに異ならなければなりません。([SP 800-108]の7.5節、項目2参照。)

• The derived keying material, \(\mathit{DerivedKeyingMaterial}_1\), \(\mathit{DerivedKeyingMaterial}_2\), … , and \(\mathit{DerivedKeyingMaterial}_m\) shall not be output until all \(m\) of the bit strings have been successfully computed. If an error occurs during randomness extraction or key expansion, then this key-derivation method shall not output any derived keying material.

• 導出鍵素材 \(\mathit{DerivedKeyingMaterial}_1\)、\(\mathit{DerivedKeyingMaterial}_2\)、…、\(\mathit{DerivedKeyingMaterial}_m\) は、\(m\) 個すべてのビット列の計算が成功するまで出力してはなりません。乱数抽出または鍵拡張中にエラーが発生した場合、この鍵導出方法はいかなる導出鍵素材も出力してはなりません。

To incorporate \(m\) key-expansion operations into an extract-then-expand key-derivation procedure, the process and output specified in Section 5.1 are modified as follows:

\(m\) 回の鍵拡張操作を抽出後拡張型鍵導出手順に組み込むには、5.1節で規定した処理と出力を次のように変更します。

Process: [Randomness Extraction]

処理: [乱数抽出]

1. Call \(\mathrm{MAC}(\mathit{salt}, Z, \ldots)\) to obtain \(K_{\mathit{DK}}\) or an error indicator; if an error occurs, output an error indicator and exit from this process without performing steps 2 and 3.

1. \(\mathrm{MAC}(\mathit{salt}, Z, \ldots)\) を呼び出して \(K_{\mathit{DK}}\) またはエラー表示を得ます。エラーが発生した場合はエラー表示を出力し、ステップ2および3を実行せずにこの処理を終了します。

[Key Expansion]

[鍵拡張]

2. For \(i = 1\) to \(m\), do the following:

2. \(i = 1\) から \(m\) まで、次を実行します。

2.1 Call \(\mathrm{KDF}(K_{\mathit{DK}}, L_i, \{\mathit{IV}_i,\}\ \mathit{FixedInfo}_i)\) to obtain \(\mathit{DerivedKeyingMaterial}_i\) or an error indicator (see [SP 800-108] for details). If an error occurs, output an error indicator and exit this process without performing any of the remaining actions (in particular, omit step 3).

2.1 \(\mathrm{KDF}(K_{\mathit{DK}}, L_i, \{\mathit{IV}_i,\}\ \mathit{FixedInfo}_i)\)を呼び出し、\(\mathit{DerivedKeyingMaterial}_i\)またはエラー指示子を得ます(詳細は[SP 800-108]参照)。エラーが発生した場合はエラー指示子を出力してこの処理を終了し、残りの操作(特にステップ3)を実行しません。

3. For \(i = 1\) to \(m\), do the following:

3. \(i = 1\) から \(m\) まで、次を実行します。

3.1 Output DerivedKeyingMaterial_i.

3.1 DerivedKeyingMaterial_iを出力します。

出力:

The bit strings \(\mathit{DerivedKeyingMaterial}_1\), \(\mathit{DerivedKeyingMaterial}_2\), … , and \(\mathit{DerivedKeyingMaterial}_m\) of lengths \(L_1\) bits, \(L_2\) bits, … , and \(L_m\) bits, respectively (or an error indicator).

ビット列\(\mathit{DerivedKeyingMaterial}_1\)、\(\mathit{DerivedKeyingMaterial}_2\)、…、\(\mathit{DerivedKeyingMaterial}_m\)。長さはそれぞれ\(L_1\)ビット、\(L_2\)ビット、…、\(L_m\)ビットです(またはエラー指示子)。

Notes: As specified in Section 5.1: When HMAC-hash is used as the auxiliary MAC algorithm, the length of K_DK is the length of an untruncated output block from the hash function, hash. When AES-CMAC is used, then (regardless of the AES variant employed) K_DK is a 128-bit binary string. The extracted K_DK is used (locally) as a key-derivation key by the auxiliary KDF during key expansion (step 2 above) and shall be destroyed (along with all other sensitive, locally stored data) after its use. Its value shall not be an output of the key-derivation procedure.

注: 5.1節の規定のとおり、HMAC-hashを補助MACアルゴリズムとして使用する場合、K_DKの長さはハッシュ関数hashの切り詰めていない出力ブロック長です。AES-CMACを使用する場合、AES変種にかかわらずK_DKは128ビットの2進文字列です。抽出したK_DKは、鍵拡張(上記ステップ2)中に補助KDFの鍵導出鍵として(ローカルで)使用し、使用後は(ローカルに保存された他のすべての機密データとともに)破棄しなければなりません。その値を鍵導出手順の出力としてはなりません。

6 Application-Specific Key-Derivation Methods

6 アプリケーション固有の鍵導出方法

Additional approved, application-specific key-derivation methods are enumerated in [SP 800-135]. Unless an explicit exception is made in [SP 800-135], any hash function or MAC algorithm employed by the key-derivation methods enumerated in [SP 800-135] shall be approved and shall also meet the selection requirements specified in this Recommendation (i.e., SP 800-56C).

追加の承認済みアプリケーション固有鍵導出方法を[SP 800-135]に列挙します。[SP 800-135]で明示的な例外が定められていない限り、同規格に列挙される鍵導出方法が用いるハッシュ関数またはMACアルゴリズムは承認済みであり、かつ本推奨事項(すなわちSP 800-56C)の選択要件を満たさなければなりません。

7 Selecting Hash Functions and MAC Algorithms

7 ハッシュ関数およびMACアルゴリズムの選択

The key-derivation methods specified in this Recommendation, as well as those enumerated in [SP 800-135], use hash functions and/or message authentication code (MAC) algorithms as auxiliary functions. In particular:

本推奨事項で規定する鍵導出方法および[SP 800-135]に列挙する鍵導出方法は、補助関数としてハッシュ関数および/またはメッセージ認証コード(MAC)アルゴリズムを使用します。特に:

• The one-step key-derivation functions that are specified in Section 4.1 of this Recommendation employ an appropriate choice of hash function (\(\mathit{hash}\)), an HMAC algorithm based on an appropriate choice of hash function (\(\mathrm{HMAC}\text{-}\mathit{hash}\)), or one of two KMAC variants (KMAC128 or KMAC256) to implement the auxiliary function \(\mathrm{H}\).

• 本推奨事項の4.1節で規定する1段階鍵導出関数は、適切に選択したハッシュ関数(\(\mathit{hash}\))、適切に選択したハッシュ関数に基づくHMACアルゴリズム(\(\mathrm{HMAC}\text{-}\mathit{hash}\))、または2種類のKMAC変種(KMAC128またはKMAC256)のいずれかを用いて、補助関数 \(\mathrm{H}\) を実装します。

• The extraction-then-expansion key-derivation procedure specified in Section 5.1 employs either an HMAC algorithm based on an appropriate choice of hash function (\(\mathrm{HMAC}\text{-}\mathit{hash}\)) for both randomness extraction and key expansion or an appropriate variant of the AES-CMAC algorithm (i.e., \(\mathrm{AES}\text{-}N\text{-}\mathrm{CMAC}\) for \(N = 128\), 192, or 256) for randomness extraction together with AES-128-CMAC for key expansion.

• 5.1節で規定する抽出後拡張型鍵導出手順は、乱数抽出と鍵拡張の両方に、適切に選択したハッシュ関数に基づくHMACアルゴリズム(\(\mathrm{HMAC}\text{-}\mathit{hash}\))を使用するか、乱数抽出にAES-CMACアルゴリズムの適切な変種(すなわち \(\mathrm{AES}\text{-}N\text{-}\mathrm{CMAC}\)、\(N = 128\)、192または256)を、鍵拡張にAES-128-CMACを併用します。

Unless explicitly stated to the contrary (e.g., in [SP 800-135]), the following requirements apply to the hash functions and MAC algorithms employed for key derivation:

[SP 800-135]などで明示的に反対の規定がない限り、鍵導出に用いるハッシュ関数およびMACアルゴリズムには次の要件を適用します。

•Whenever a hash function is employed (including as the primitive used by HMAC), an approved hash function shall be used. [FIPS 180] and [FIPS 202] specify approved hash functions.

•ハッシュ関数を用いる場合(HMACが使用するプリミティブとして用いる場合を含む)、承認済みハッシュ関数を使用しなければなりません。[FIPS 180]および[FIPS 202]は承認済みハッシュ関数を規定します。

•Whenever an HMAC algorithm is employed, the HMAC implementation shall conform to the specifications found in [FIPS 198].

•HMACアルゴリズムを用いる場合、その実装は[FIPS 198]の仕様に適合しなければなりません。

•Whenever a KMAC variant (KMAC128 or KMAC256) is employed, the KMAC implementation shall conform to the specifications found in [SP 800-185].

•KMAC変種(KMAC128またはKMAC256)を用いる場合、その実装は[SP 800-185]の仕様に適合しなければなりません。

•Whenever an AES-CMAC algorithm is employed, the implementation of AES shall conform to [FIPS 197], and the AES-CMAC implementation shall conform to [SP 800-38B].

•AES-CMACアルゴリズムを用いる場合、AES実装は[FIPS 197]に適合し、AES-CMAC実装は[SP 800-38B]に適合しなければなりません。

As specified in [SP 800-56A] and [SP 800-56B], an approved key-establishment scheme can be implemented with parameters of various types and sizes that will impact the estimated maximum security strength that can be supported by the resulting scheme. When a key-establishment scheme employs a choice of parameters that are associated with a targeted security strength of \(s\) bits, the selection of a hash function, HMAC, KMAC, or AES-CMAC employed during the implementation of its key-derivation method shall conform to the following restrictions:

[SP 800-56A]および[SP 800-56B]に規定するとおり、承認済み鍵確立方式は、方式が支援できる推定最大セキュリティ強度に影響する、さまざまな型およびサイズのパラメーターを用いて実装できます。鍵確立方式が \(s\) ビットの目標セキュリティ強度に関連付けられたパラメーターを用いる場合、その鍵導出方法の実装に用いるハッシュ関数、HMAC、KMACまたはAES-CMACの選択は、次の制限に適合しなければなりません。

• An approved hash function shall be employed (whether alone or as the primitive used by HMAC) in the implementation of a one-step or two-step key-derivation method only if its output block length (in bits) is greater than or equal to \(s\).

• 承認済みハッシュ関数は、(単独で用いる場合もHMACのプリミティブとして用いる場合も)その出力ブロック長(ビット単位)が \(s\) 以上の場合に限り、1段階または2段階鍵導出方法の実装に使用しなければなりません。

• For the purposes of implementing one-step key derivation only: KMAC128 shall be employed only in instances where \(s\) is 128 bits or less. KMAC256 shall be employed only in instances where \(s\) is 256 bits or less. (However, see the note below.)

• 1段階鍵導出の実装に限り: KMAC128は \(s\) が128ビット以下の場合にのみ使用しなければなりません。KMAC256は \(s\) が256ビット以下の場合にのみ使用しなければなりません。(ただし、以下の注を参照してください。)

• For the purposes of implementing two-step key derivation only: AES-CMAC shall be employed only in instances where \(s\) is 128 bits or less. (See the note following Table 5.)

• 2段階鍵導出の実装に限り: AES-CMACは \(s\) が128ビット以下の場合にのみ使用しなければなりません。(表5に続く注を参照してください。)

Tables 1 through 5 (in Sections 4.1 and 5.1) can be consulted to determine which hash functions and/or MAC algorithms are approved for use when a key-derivation method specified in this Recommendation is used by an approved key-establishment scheme to support a targeted security strength of \(s\) bits.

本推奨事項で規定する鍵導出方法を承認済み鍵確立方式で使用して \(s\) ビットの目標セキュリティ強度を支援する場合に、使用が承認されるハッシュ関数および/またはMACアルゴリズムを判断するには、表1~5(4.1節および5.1節)を参照できます。

Note: At the time of publication of this Recommendation, a key-establishment scheme implemented in accordance with either [SP 800-56A] or [SP 800-56B] can have a targeted security strength of 256 bits at most.

注: 本推奨事項の刊行時点では、[SP 800-56A]または[SP 800-56B]に従って実装する鍵確立方式の目標セキュリティ強度は最大256ビットです。

8 Further Discussion

8 追加の考察

In this section, the following issues are discussed:

本節では、次の課題について考察します。

8.1 Using a Truncated Hash Function

8.1 切り詰めハッシュ関数の使用

SHA-224, SHA-512/224, SHA-512/256, and SHA-384 are among the approved hash functions specified in [FIPS 180]. SHA-224 is a truncated version of SHA-256, while SHA-512/224, SHA-512/256, and SHA-384 are truncated versions of SHA-512. (Each of these truncated versions uses a specific initial chaining value, which is different from the initial chaining value used by the untruncated version.) In applications that require a relatively long bit string of derived keying material, implementing the key-derivation methods specified in this Recommendation with a truncated version of a hash function may be less efficient than using the corresponding untruncated version (i.e., SHA-256 or SHA-512).

[FIPS 180]に規定される承認済みハッシュ関数には、SHA-224、SHA-512/224、SHA-512/256およびSHA-384が含まれます。SHA-224はSHA-256を切り詰めたものであり、SHA-512/224、SHA-512/256およびSHA-384はSHA-512を切り詰めたものです(それぞれの切り詰め版は、切り詰めていない版とは異なる特定の初期連鎖値を用います)。比較的長いビット列の導出鍵素材を必要とするアプリケーションでは、本推奨事項の鍵導出方法の実装にハッシュ関数の切り詰め版を用いると、対応する非切り詰め版(SHA-256またはSHA-512)を用いる場合より効率が低くなることがあります。

8.2 The Choice of a Salt Value

8.2 salt値の選択

In this Recommendation, the MAC algorithms employed either in a one-step key-derivation method or in the randomness-extraction step of a two-step key-derivation method use a salt value as a MAC key (see Sections 4 and 5). This Recommendation does not require the use of a randomly selected salt value. In particular, if there are no means to select a salt value and share it with all of the participants during a key-establishment transaction, then this Recommendation specifies that a predetermined default (e.g., all-zero) byte string be used as the salt value. The benefits of using “random” salt values when possible are discussed (briefly) in Section 3.1 (“To salt or not to salt”) of [RFC 5869] and in greater detail in [LNCS 6223].

本推奨事項では、1段階鍵導出方法または2段階鍵導出方法の乱数抽出段階で用いるMACアルゴリズムは、MAC鍵としてsalt値を用います(4節および5節参照)。本推奨事項はランダムに選択したsalt値の使用を要求しません。特に、鍵確立処理中にsalt値を選択して全参加者と共有する手段がない場合、本推奨事項は事前に定めた既定値(例: 全ゼロ)のバイト列をsalt値として使用するよう規定します。可能な場合に「ランダム」なsalt値を用いる利点については、[RFC 5869]の3.1節(「ソルトを使うか否か」)で簡潔に、[LNCS 6223]で詳しく論じられています。

8.3 MAC Algorithms used for Extraction and Expansion

8.3 抽出および拡張に用いるMACアルゴリズム

Provided that the targeted security strength can be supported (see Tables 4 and 5 in Section 5.2), this Recommendation permits either \(\mathrm{HMAC}\text{-}\mathit{hash}\) (i.e., HMAC implemented with an appropriately chosen approved hash function, \(\mathit{hash}\)) or AES-CMAC (i.e., the CMAC mode of AES-128, AES-192, or AES-256) to be selected as the MAC algorithm used in the randomness-extraction step of the key-derivation procedure specified in Section 5.1.

目標セキュリティ強度を支援できることを条件に(5.2節の表4および5参照)、本推奨事項は5.1節で規定する鍵導出手順の乱数抽出段階に用いるMACアルゴリズムとして、\(\mathrm{HMAC}\text{-}\mathit{hash}\)(すなわち、適切に選択した承認済みハッシュ関数 \(\mathit{hash}\) で実装したHMAC)またはAES-CMAC(すなわち、AES-128、AES-192またはAES-256のCMACモード)のいずれかを選択することを認めます。

The PRF-based KDF used in the key-expansion step of the procedure also requires an appropriate MAC (to serve as the PRF). While it may be technically feasible (in some cases) to employ completely different MAC algorithms in the two steps of the specified key-derivation procedure, this Recommendation does not permit such flexibility. Instead, the following restrictions have been placed on MAC selection (see Sections 5 and 7):

手順の鍵拡張段階で用いるPRFベースKDFにも、PRFとして機能する適切なMACが必要です。規定された鍵導出手順の2段階で完全に異なるMACアルゴリズムを使用することが技術的に可能な場合もありますが、本推奨事項はその柔軟性を認めません。代わりに、MACの選択に次の制限を設けます(5節および7節参照)。

• When \(\mathrm{HMAC}\text{-}\mathit{hash}\) is chosen for use in the randomness-extraction step, the same MAC algorithm (i.e., \(\mathrm{HMAC}\text{-}\mathit{hash}\) with the same approved hash function, \(\mathit{hash}\)) shall be employed to implement the PRF-based KDF used in the key-expansion step.

• 乱数抽出段階で \(\mathrm{HMAC}\text{-}\mathit{hash}\) を選択した場合、鍵拡張段階で用いるPRFベースKDFの実装には、同じMACアルゴリズム(すなわち \(\mathrm{HMAC}\text{-}\mathit{hash}\) で、承認済みハッシュ関数 \(\mathit{hash}\) も同じもの)を使用しなければなりません。

•When AES-128-CMAC, AES-192-CMAC, or AES-256-CMAC is chosen for use in the randomness-extraction step, the MAC algorithm employed by the PRF-based KDF used in the key-expansion step shall be AES-128-CMAC, the CMAC mode of AES-128. (AES-128 is the only AES variant that can employ the 128-bit K_DK produced by AES-N-CMAC during the randomness-extraction step.)

•乱数抽出段階でAES-128-CMAC、AES-192-CMACまたはAES-256-CMACを選んだ場合、鍵拡張段階で用いるPRFベースKDFのMACアルゴリズムはAES-128-CMAC(AES-128のCMACモード)でなければなりません。乱数抽出段階でAES-N-CMACが生成する128ビットのK_DKを使用できるAES変種はAES-128だけです。

•The MAC algorithm selected for the implementation of a two-step key-derivation method shall be capable of supporting the targeted security strength as determined by consulting Tables 4 and 5 in Section 5.2. (This limits the use of AES-CMAC to cases where the targeted security strength is no more than 128 bits.)

•2段階鍵導出方法の実装に選択するMACアルゴリズムは、5.2節の表4および表5を参照して決定される目標セキュリティ強度を支援できなければなりません。(これにより、AES-CMACの使用は目標セキュリティ強度が128ビット以下の場合に限られます。)

The imposed restrictions are intended to reduce the overall complexity of the resulting implementations, promote interoperability, and simplify the negotiation of the parameters and auxiliary functions affecting the security strength supported by the key-derivation procedure.

課される制限は、結果として得られる実装の全体的な複雑さを低減し、相互運用性を促進し、鍵導出手順が支援するセキュリティ強度に影響するパラメーターおよび補助関数の折衝を簡素化することを意図しています。

Note: At this time, KMAC has not been specified for use in the implementation of a two-step key-derivation procedure. This restriction may be reconsidered once a KMAC-based KDF has been approved for use as a PRF-based KDF in a revision of [SP 800-108].

注: 現時点では、KMACは2段階鍵導出手順の実装での使用が規定されていません。この制限は、[SP 800-108]の改訂版でKMACベースKDFがPRFベースKDFとしての使用を承認された時点で、再検討される可能性があります。

8.4 Destruction of Sensitive Locally Stored Data

8.4 局所的に保存された機微データの破棄

Good security practice dictates that implementations of key-derivation methods include steps that destroy potentially sensitive locally stored data that is created (and/or copied for use) during the execution of a particular process; there is no need to retain such data after the process has been completed. Examples of potentially sensitive locally stored data include local copies of shared secrets that are employed during the execution of a particular process, intermediate results produced during computations, and locally stored duplicates of values that are ultimately output by the process. The destruction of such locally stored data ideally occurs prior to or during any exit from the process. This is intended to limit opportunities for unauthorized access to sensitive information that might compromise a key-establishment transaction.

優れたセキュリティ実践では、鍵導出方法の実装に、特定の処理の実行中に作成された(または使用のためにコピーされた)、機微である可能性のある局所保存データを破棄する手順を含めるべきとされます。処理の完了後にそのようなデータを保持する必要はありません。機微である可能性のある局所保存データの例には、特定の処理の実行中に用いる共有シークレットの局所コピー、計算中に生成される中間結果、および処理が最終的に出力する値の局所保存された複製が含まれます。そのような局所保存データの破棄は、処理からのいかなる終了よりも前、または終了時に行われることが理想的です。これは、鍵確立トランザクションを危殆化させかねない機微情報への不正アクセスの機会を制限することを意図しています。

It is not possible to anticipate the forms of all possible implementations of the key-derivation methods specified in this Recommendation, making it equally impossible to enumerate all potentially sensitive data that might be locally stored by a process employed in a particular implementation. Nevertheless, the destruction of any potentially sensitive locally stored data is an obligation of all implementations.

本推奨事項に規定する鍵導出方法の実装形態をすべて予測することはできず、したがって、特定の実装で用いる処理が局所保存する可能性のある機微データをすべて列挙することも同様に不可能です。それでも、機微である可能性のある局所保存データの破棄は、すべての実装の義務です。

References

参考文献

[FIPS 180] National Institute of Standards and Technology (2015) Secure Hash Standard (SHS). (U.S. Department of Commerce, Washington, DC), Federal Information Processing Standards Publication (FIPS) 180-4. https://doi.org/10.6028/NIST.FIPS.180-4

[FIPS 180] 国立標準技術研究所(2015)「セキュアハッシュ標準(SHS)」。(米国商務省、ワシントンDC)、連邦情報処理標準刊行物(FIPS)180-4。https://doi.org/10.6028/NIST.FIPS.180-4

[FIPS 197] National Institute of Standards and Technology (2001) Advanced Encryption Standard (AES). (U.S. Department of Commerce, Washington, DC), Federal Information Processing Standards Publication (FIPS) 197. https://doi.org/10.6028/NIST.FIPS.197

[FIPS 197] 国立標準技術研究所(2001)「高度暗号化標準(AES)」。(米国商務省、ワシントンDC)、連邦情報処理標準刊行物(FIPS)197。https://doi.org/10.6028/NIST.FIPS.197

[FIPS 198] National Institute of Standards and Technology (2008) The Keyed-Hash Message Authentication Code (HMAC). (U.S. Department of Commerce, Washington, DC), Federal Information Processing Standards Publication (FIPS) 198-1. https://doi.org/10.6028/NIST.FIPS.198-1

[FIPS 198] 国立標準技術研究所(2008)「鍵付きハッシュメッセージ認証コード(HMAC)」。(米国商務省、ワシントンDC)、連邦情報処理標準刊行物(FIPS)198-1。https://doi.org/10.6028/NIST.FIPS.198-1

[FIPS 202] National Institute of Standards and Technology (2015) SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions. (U.S. Department of Commerce, Washington, DC), Federal Information Processing Standards Publication (FIPS) 202. https://doi.org/10.6028/NIST.FIPS.202

[FIPS 202] 国立標準技術研究所(2015)「SHA-3標準: 置換ベースのハッシュ関数および拡張出力関数」。(米国商務省、ワシントンDC)、連邦情報処理標準刊行物(FIPS)202。https://doi.org/10.6028/NIST.FIPS.202

[LNCS 6223] Krawczyk H (2010) Cryptographic Extraction and Key Derivation: The HKDF Scheme. Advances in Cryptology – Crypto’2010, ed. Rabin T (Springer, Berlin, Germany), Lecture Notes in Computer Science vol. 6223, pp 631-648. https://doi.org/10.1007/978-3-642-14623-7_34

[LNCS 6223] Krawczyk H(2010)Cryptographic Extraction and Key Derivation: The HKDF Scheme. Advances in Cryptology – Crypto’2010, ed. Rabin T(Springer, Berlin, Germany), Lecture Notes in Computer Science vol. 6223, pp 631-648. https://doi.org/10.1007/978-3-642-14623-7_34

[RFC 5869] Krawczyk H, Eronen P (2010) HMAC-based Extract-and-Expand Key Derivation Function (HKDF). (Internet Engineering Task Force (IETF)), IETF Request for Comments (RFC) 5869. https://doi.org/10.17487/RFC5869

[RFC 5869] Krawczyk H、Eronen P(2010)「HMACベースの抽出・拡張鍵導出関数(HKDF)」。(インターネット技術タスクフォース(IETF))、IETF Request for Comments(RFC)5869。https://doi.org/10.17487/RFC5869

[SP 800-38B] Dworkin MJ (2005) Recommendation for Block Cipher Modes of Operation: the CMAC Mode for Authentication. (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-38B, Includes updates as of October 6, 2016. https://doi.org/10.6028/NIST.SP.800-38B

[SP 800-38B] Dworkin MJ(2005)「ブロック暗号の動作モードに関する推奨事項: 認証のためのCMACモード」。国立標準技術研究所(米国メリーランド州ゲイサーズバーグ)、NIST特別刊行物(SP)800-38B、2016年10月6日時点の更新を含みます。https://doi.org/10.6028/NIST.SP.800-38B

[SP 800-56A] Barker EB, Chen L, Roginsky A, Davis R (2018) Recommendation for Pair- Wise Key-Establishment Schemes Using Discrete Logarithm Cryptography. ((National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-56A, Rev. 3. https://doi.org/10.6028/NIST.SP.800-56Ar3

[SP 800-56A] Barker EB、Chen L、Roginsky A、Davis R(2018)「離散対数暗号を用いるペアワイズ鍵確立方式に関する推奨事項」。国立標準技術研究所(米国メリーランド州ゲイサーズバーグ)、NIST特別刊行物(SP)800-56A、改訂第3版。https://doi.org/10.6028/NIST.SP.800-56Ar3

[SP 800-56B] Barker EB, Chen L, Roginsky A, Vassilev A, Davis R, Simon S (2019) Recommendation for Pair-Wise Key-Establishment Using Integer Factorization Cryptography. (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-56B, Rev. 2. https://doi.org/10.6028/NIST.SP.800-56Br2

[SP 800-56B] Barker EB、Chen L、Roginsky A、Vassilev A、Davis R、Simon S(2019)「整数因数分解暗号を用いるペアワイズ鍵確立に関する推奨事項」。国立標準技術研究所(米国メリーランド州ゲイサーズバーグ)、NIST特別刊行物(SP)800-56B、改訂第2版。https://doi.org/10.6028/NIST.SP.800-56Br2

[SP 800-57] Barker EB (2020) Recommendation for Key Management, Part 1: General. (National Institute of Standards and Technology, Gaithersburg, MD), Draft NIST Special Publication (SP) 800-57 Part 1, Rev. 5. https://doi.org/10.6028/NIST.SP.800-57pt1r5

[SP 800-57] Barker EB(2020)「鍵管理に関する推奨事項、第1部: 一般」。国立標準技術研究所(米国メリーランド州ゲイサーズバーグ)、NIST特別刊行物(SP)800-57第1部、改訂第5版草案。https://doi.org/10.6028/NIST.SP.800-57pt1r5

[SP 800-108] Chen L (2009) Recommendation for Key Derivation Using Pseudorandom Functions (Revised). (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-108, Revised. https://doi.org/10.6028/NIST.SP.800-108

[SP 800-108] Chen L(2009)「擬似乱数関数を用いた鍵導出に関する推奨事項(改訂版)」。国立標準技術研究所(米国メリーランド州ゲイサーズバーグ)、NIST特別刊行物(SP)800-108、改訂版。https://doi.org/10.6028/NIST.SP.800-108

[SP 800-131A] Barker EB, Roginsky A (2019) Transitioning the Use of Cryptographic Algorithms and Key Lengths. (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-131A, Rev. 2. https://doi.org/10.6028/NIST.SP.800-131Ar2

[SP 800-131A] Barker EB、Roginsky A(2019)「暗号アルゴリズムおよび鍵長の使用移行」。国立標準技術研究所(米国メリーランド州ゲイサーズバーグ)、NIST特別刊行物(SP)800-131A、改訂第2版。https://doi.org/10.6028/NIST.SP.800-131Ar2

[SP 800-135] Dang QH (2011) Recommendation for Existing Application-Specific Key Derivation Functions. (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-135, Rev. 1. https://doi.org/10.6028/NIST.SP.800-135r1

[SP 800-135] Dang QH(2011)「既存のアプリケーション固有鍵導出関数に関する推奨事項」。国立標準技術研究所(米国メリーランド州ゲイサーズバーグ)、NIST特別刊行物(SP)800-135、改訂第1版。https://doi.org/10.6028/NIST.SP.800-135r1

[SP 800-185] Kelsey JM, Chang S-jH, Perlner RA (2016) SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, and ParallelHash. (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-185. https://doi.org/10.6028/NIST.SP.800-185

[SP 800-185] Kelsey JM、Chang S-jH、Perlner RA(2016)「SHA-3派生関数: cSHAKE、KMAC、TupleHashおよびParallelHash」。国立標準技術研究所(米国メリーランド州ゲイサーズバーグ)、NIST特別刊行物(SP)800-185。https://doi.org/10.6028/NIST.SP.800-185

Appendix A: Revisions (Informative)

付録A: 改訂履歴(参考情報)

A.1 The Original Version of SP 800-56C

A.1 SP 800-56C初版

The original SP 800-56C (published in November 2011) focused entirely on the specification of a two-step extraction-then-expansion key-derivation procedure to be used in conjunction with a key-establishment scheme from either [SP 800-56A] or [SP 800-56B]. It provided an alternative to the one-step key-derivation functions that were already included in those companion publications.

2011年11月に刊行されたSP 800-56C初版は、[SP 800-56A]または[SP 800-56B]の鍵確立方式と併用する、2段階抽出後拡張型鍵導出手順の仕様のみを扱っていました。両関連刊行物にすでに含まれていた1段階鍵導出関数に代わる方法を提供しました。

A.2 Revision 1

A.2 改訂第1版

The 2018 revision of SP 800-56C reorganized the original content (it still included the specification of an extraction-then-expansion key-derivation procedure) to also include the specification of a family of one-step key-derivation functions, expanding on material that was previously found only in SP 800-56A and SP 800-56B. This change was made in support of the removal of detailed descriptions of key-derivation methods from SP 800-56A and a future revision of SP 800-56B. The consolidation of specifications in SP 800-56C, Revision 1 promoted consistency between the key-derivation options available for use with an approved key-establishment scheme chosen from either of those companion NIST publications. (A number of application-specific key-derivation methods specified in [SP 800-135] continued to be supported.)

2018年のSP 800-56C改訂では、初版の内容を再構成し(抽出後拡張型鍵導出手順の仕様は引き続き含む)、SP 800-56AおよびSP 800-56Bのみに記載されていた内容を拡張して、1段階鍵導出関数族の仕様も追加しました。この変更は、SP 800-56Aおよび将来のSP 800-56B改訂版から詳細な鍵導出方法の記述を削除することを支援するために行われました。SP 800-56C改訂第1版に仕様を集約したことで、これら関連NIST刊行物のいずれかから選択した承認済み鍵確立方式で使用できる鍵導出方式間の一貫性が促進されました。([SP 800-135]に規定される複数のアプリケーション固有鍵導出方法は引き続き支援されました。)

Specifically named key-establishment “parameter sets” (FA – FC for finite-field cryptography (FFC); EA – EE for elliptic-curve cryptography (ECC); and IA – IB for integer-factorization cryptography (IFC)) were no longer used as guides for choosing the auxiliary functions employed by a key-derivation method. Instead, SP 800-56C, Revision 1 indicated the security strengths that could be supported by the various possibilities for the auxiliary functions. Implementers were expected to let the targeted security strength of the key-establishment scheme guide their choices. Of course, each of the named parameter sets was associated with a targeted security strength, so this was more a change of perspective rather than of substance. The change was, however, consistent with the revision of [SP 800-56A], which de-emphasized (in the FFC case) or eliminated (in the ECC case) the use of named parameter (size) sets.

有限体暗号(FFC)のFA~FC、楕円曲線暗号(ECC)のEA~EE、整数因数分解暗号(IFC)のIA~IBといった、明示的に名称を付した鍵確立「パラメーターセット」は、鍵導出方法で用いる補助関数の選択指針としては使われなくなりました。代わりにSP 800-56C改訂第1版は、補助関数の各選択肢が支援できるセキュリティ強度を示しました。実装者は鍵確立方式の目標セキュリティ強度を選択の指針とすることが期待されました。もちろん、各名称付きパラメーターセットには目標セキュリティ強度が関連付けられていたため、これは実質的変更というより視点の変更でした。ただし、この変更は[SP 800-56A]の改訂(FFCでは名称付きパラメーターセットの使用を重視しなくなり、ECCでは廃止)とも整合していました。

There was one substantial change to the specification of key-derivation methods that is worth noting: a KMAC-based option for implementing the auxiliary function \(\mathrm{H}\) was added to the specification of one-step key-derivation functions (see Section 4.1). At that time, however, KMAC had not been specified for use as an auxiliary MAC algorithm in the two-step extraction-then-expansion key-derivation procedure (see Section 8.3).

鍵導出方法の仕様には、注目すべき大きな変更が1つありました。1段階鍵導出関数の仕様に、補助関数 \(\mathrm{H}\) を実装するKMACベースのオプションが追加されました(4.1節参照)。ただし当時、2段階の抽出後拡張型鍵導出手順で補助MACアルゴリズムとしてKMACを使うことは規定されていませんでした(8.3節参照)。

Given the extent to which SP 800-56C had been revised, it is impractical to list all of the changes that were made to the original text. It is recommended that SP 800-56C, Revision 1 be read in its entirety in order to gain familiarity with the details of the current specifications for both the one-step and two-step key-derivation methods used in approved key-establishment schemes.

SP 800-56Cの改訂範囲は広いため、初版からのすべての変更を列挙するのは現実的でありません。1段階および2段階の鍵導出方法について、承認済み鍵確立方式で用いる現行仕様の詳細を把握するには、SP 800-56C改訂第1版を全体にわたって読むことを推奨します。

A.3 Revision 2

A.3 改訂第2版

The 2020 revision of SP 800-56C involves just a few changes to the 2018 version of the document.

2020年のSP 800-56C改訂では、2018年版に対する変更はわずかです。

In Section 2, the applicability of the various key-derivation methods specified in this Recommendation is expanded to permit the use of “hybrid” shared secrets of the form \(Z' = Z \parallel T\), which is a concatenation consisting of a “standard” shared secret \(Z\) that was generated during the execution of a key-establishment scheme as currently specified in [SP 800-56A] or [SP 800-56B], followed by an auxiliary shared secret \(T\) that has been generated using some other method.

2節では、本推奨事項が規定する各種鍵導出方法の適用範囲を拡大し、\(Z' = Z \parallel T\) 形式の「ハイブリッド」共有シークレットを使用できるようにしました。これは、現行の[SP 800-56A]または[SP 800-56B]に規定される鍵確立方式の実行中に生成された「標準」共有シークレット \(Z\) の後に、別の方法で生成した補助共有シークレット \(T\) を続けた連結です。

This is not a substantive change in the case of one-step key-derivation methods, which derive blocks of keying material from input of the form \(\mathit{counter} \parallel Z \parallel \mathit{FixedInfo}\). Implementations of approved key-establishment schemes have considerable latitude concerning the content and format of the context-specific data included in \(\mathit{FixedInfo}\). Replacing \(Z\) with \(Z' = Z \parallel T\) is equivalent to replacing \(\mathit{FixedInfo}\) with \(\mathit{FixedInfo}' = T \parallel \mathit{FixedInfo}\), which was already permitted. As in previous versions of this document, \(T\) could instead be used as a salt value by the auxiliary function \(\mathrm{H}\) (see Option 2 and Option 3) and/or included in some (other) subfield of \(\mathit{FixedInfo}\). (See Section 4.1 and Section 4.2 for details.)

1段階鍵導出方法は \(\mathit{counter} \parallel Z \parallel \mathit{FixedInfo}\) 形式の入力から鍵素材ブロックを導出するため、この変更は実質的なものではありません。承認済み鍵確立方式の実装には、\(\mathit{FixedInfo}\) に含めるコンテキスト固有データの内容と形式について大きな裁量があります。\(Z\) を \(Z' = Z \parallel T\) に置き換えることは、\(\mathit{FixedInfo}\) を \(\mathit{FixedInfo}' = T \parallel \mathit{FixedInfo}\) に置き換えることと等価であり、これはすでに認められていました。本書の以前の版と同様に、\(T\) を補助関数 \(\mathrm{H}\) のsalt値として使用する(オプション2およびオプション3参照)、および/または \(\mathit{FixedInfo}\) の(別の)サブフィールドに含めることもできます。(詳細は4.1節および4.2節参照。)

In the case of the two-step key-derivation methods, the extraction of a key-derivation key from a shared secret of the form \(Z \parallel T\) is a bona fide extension of the previously specified technique but is still consistent with the principles of randomness extraction and key expansion as presented in [LNCS 6223]. Prior to this revision, \(T\) could only have been included either as a salt value (in an HMAC-based extraction step) or as part of the \(\mathit{FixedInfo}\) used in the key-expansion step. (See Section 5.1 and Section 5.2 for details.)

2段階鍵導出方法では、\(Z \parallel T\) 形式の共有シークレットから鍵導出鍵を抽出することは、従来規定されていた技法の正真正銘の拡張ですが、[LNCS 6223]に示される乱数抽出と鍵拡張の原則には引き続き整合しています。この改訂以前は、\(T\) は(HMACベースの抽出段階の)salt値として、または鍵拡張段階で用いる \(\mathit{FixedInfo}\) の一部としてのみ含めることができました。(詳細は5.1節および5.2節参照。)

The other change made in the 2020 revision affects the key-expansion step of the approved two-step key-derivation methods. The newly added Section 5.3 specifies the conditions under which multiple instances of key expansion can be performed using a single key-derivation key obtained via randomness extraction.

2020年改訂のもう1つの変更は、承認済み2段階鍵導出方法の鍵拡張段階に関するものです。新たに追加された5.3節は、乱数抽出で得られた単一の鍵導出鍵を用いて複数回の鍵拡張を行う条件を規定します。

A specific change: In Section 3.1, the definition for hash function was modified to include all three properties often required of a cryptographic hash function and to state that the pre-image resistance of a hash function is a contributing factor when determining the security strength provided by a key-derivation method.

特定の変更: 3.1節ではハッシュ関数の定義を改め、暗号学的ハッシュ関数にしばしば求められる3つの性質すべてを含めるとともに、鍵導出方法が提供するセキュリティ強度の決定においてハッシュ関数の原像計算困難性が寄与要因であることを明記しました。