NIST FIPS 204 日本語訳
英語タイトル : Module-Lattice-Based Digital Signature Standard日本語タイトル : モジュール格子ベースのデジタル署名標準
公開日 : 2024-08-13
原文URL : https://csrc.nist.gov/pubs/fips/204/final
翻訳編集 : 自動生成(有志による非公式の日本語訳), 原文取得日 : 2026-10-25, 訳文 : 672 / 722 ブロック
[要約] FIPS 204 は、デジタル署名の生成と検証に使用するアルゴリズム群である、モジュール格子ベースのデジタル署名方式 ML-DSA を規定する標準です。ML-DSA は Module Learning With Errors 問題に基づき、大規模な量子コンピュータを保有する攻撃者に対しても安全であると考えられています。鍵生成、署名生成、署名検証の数学的手順を定めており、署名が有効であるための身元や秘密鍵の保有の保証は、SP 800-89が規定しています。
FIPS 204
FIPS 204
Federal Information Processing Standards Publication
連邦情報処理標準出版物
Module-Lattice-Based Digital Signature Standard
モジュール格子ベースのデジタル署名標準
Category: Computer Security
分類:コンピュータセキュリティ
Subcategory: Cryptography
下位分類:暗号
Information Technology Laboratory National Institute of Standards and Technology Gaithersburg, MD 20899-8900
情報技術研究所 米国国立標準技術研究所 Gaithersburg, MD 20899-8900
This publication is available free of charge from: https://doi.org/10.6028/NIST.FIPS.204
本出版物は次から無料で入手できる:https://doi.org/10.6028/NIST.FIPS.204
Published August 13, 2024
2024年8月13日発行
U.S. Department of Commerce Gina M. Raimondo, Secretary
米国商務省 長官 Gina M. Raimondo
National Institute of Standards and Technology Laurie E. Locascio, NIST Director and Under Secretary of Commerce for Standards and Technology
米国国立標準技術研究所 NIST所長兼標準技術担当商務次官 Laurie E. Locascio
Foreword
まえがき
The Federal Information Processing Standards Publication Series of the National Institute of Standards and Technology is the official series of publications relating to standards and guidelines developed under 15 U.S.C. 278g-3, and issued by the Secretary of Commerce under 40 U.S.C. 11331.
米国国立標準技術研究所の連邦情報処理標準出版物シリーズは、15 U.S.C. 278g-3 に基づいて策定され、40 U.S.C. 11331 に基づいて商務長官が発行する標準およびガイドラインに関する公式の出版物シリーズです。
Comments concerning this Federal Information Processing Standard publication are welcomed and should be submitted using the contact information in the “Inquiries and comments” clause of the announcement section.
本連邦情報処理標準出版物に関するコメントを歓迎します。コメントは、告示部分の「問い合わせおよびコメント」の項に記載された連絡先を用いて提出することが望まれます。
Kevin M. Stine, Director Information Technology Laboratory
情報技術研究所 所長 Kevin M. Stine
Abstract
要旨
Digital signatures are used to detect unauthorized modifications to data and to authenticate the identity of the signatory. In addition, the recipient of signed data can use a digital signature as evidence in demonstrating to a third party that the signature was, in fact, generated by the claimed signatory. This is known as non-repudiation since the signatory cannot easily repudiate the signature at a later time. This standard specifies ML-DSA, a set of algorithms that can be used to generate and verify digital signatures. ML-DSA is believed to be secure, even against adversaries in possession of a large-scale quantum computer.
デジタル署名は、データの無許可の改変を検出し、署名者の身元を認証するために用いられます。さらに、署名付きデータの受信者は、その署名が実際に主張どおりの署名者によって生成されたことを第三者に示す証拠として、デジタル署名を用いることができます。署名者が後になって署名を容易には否認できないことから、これは否認防止と呼ばれます。本標準は、デジタル署名の生成と検証に使用できるアルゴリズム群である ML-DSA を規定します。ML-DSA は、大規模な量子コンピュータを保有する攻撃者に対しても安全であると考えられています。
Keywords: cryptography; digital signatures; Federal Information Processing Standards; lattice; post-quantum; public-key cryptography.
キーワード:暗号;デジタル署名;連邦情報処理標準;格子;耐量子;公開鍵暗号。
Federal Information Processing Standards Publication 204
連邦情報処理標準出版物 204
Published: August 13, 2024 Effective: August 13, 2024
発行:2024年8月13日 発効:2024年8月13日
Announcing the Module-Lattice-Based Digital Signature Standard
モジュール格子ベースのデジタル署名標準の告示
Federal Information Processing Standards (FIPS) publications are developed by the National Institute of Standards and Technology (NIST) under 15 U.S.C. 278g-3 and issued by the Secretary of Commerce under 40 U.S.C. 11331.
連邦情報処理標準(FIPS)出版物は、15 U.S.C. 278g-3 に基づいて米国国立標準技術研究所(NIST)が策定し、40 U.S.C. 11331 に基づいて商務長官が発行します。
1.Name of Standard. Module-Lattice-Based Digital Signature Standard (FIPS 204).
1.標準の名称。モジュール格子ベースのデジタル署名標準(FIPS 204)。
2.Category of Standard. Computer Security. Subcategory. Cryptography.
2.標準の分類。コンピュータセキュリティ。下位分類。暗号。
3.Explanation. This standard specifies ML-DSA, a lattice-based digital signature algorithm for applications that require a digital signature rather than a written signature. Additional digital signature schemes are specified and approved in other NIST Special Publications and FIPS publications (e.g., FIPS 186-5 [1]). A digital signature is represented in a computer as a string of bits and computed using a set of rules and parameters that allow the identity of the signatory and the integrity of the data to be verified. Digital signatures may be generated on both stored and transmitted data.
3.説明。本標準は、手書きの署名ではなくデジタル署名を必要とするアプリケーションのための、格子ベースのデジタル署名アルゴリズムである ML-DSA を規定します。その他のデジタル署名方式は、他の NIST Special Publication および FIPS 出版物(例:FIPS 186-5 [1])で規定され、承認されています。デジタル署名は、コンピュータ内ではビット列として表現され、署名者の身元とデータの完全性を検証できるようにする一連の規則とパラメータを用いて計算されます。デジタル署名は、保存データと送信データのいずれに対しても生成できます。
Signature generation uses a private key to generate a digital signature. Signature verification uses a public key that corresponds to but is not the same as the private key. Each signatory possesses a key-pair composed of a private key and a corresponding public key. Public keys may be known by the public, but private keys must be kept secret. Anyone can verify the signature by employing the signatory’s public key. Only the user who possesses the private key can generate a signature that can be verified by the corresponding public key.
署名生成では、秘密鍵を用いてデジタル署名を生成します。署名検証では、秘密鍵に対応するが秘密鍵とは異なる公開鍵を用います。各署名者は、秘密鍵とそれに対応する公開鍵からなる鍵ペアを保有します。公開鍵は公衆に知られてもよいですが、秘密鍵は秘密に保たなければなりません。署名者の公開鍵を用いれば、誰でも署名を検証できます。対応する公開鍵で検証できる署名を生成できるのは、秘密鍵を保有する利用者だけです。
The digital signature is provided to the intended verifier along with the signed data. The verifying entity verifies the signature by using the claimed signatory’s public key. Similar procedures may be used to generate and verify signatures for both stored and transmitted data.
デジタル署名は、署名付きデータとともに意図された検証者に提供されます。検証を行う主体は、主張された署名者の公開鍵を用いて署名を検証します。保存データと送信データのいずれについても、同様の手順で署名を生成し検証できます。
This standard specifies several parameter sets for ML-DSA that are approved for use. Additional parameter sets may be specified and approved in future NIST Special Publications.
本標準は、使用が承認された ML-DSA のパラメータセットを複数規定します。追加のパラメータセットが、今後の NIST Special Publication で規定され、承認される可能性があります。
4.Approving Authority. Secretary of Commerce.
4.承認機関。商務長官。
5.Maintenance Agency. Department of Commerce, National Institute of Standards and Technology, Information Technology Laboratory (ITL).
5.維持管理機関。商務省、米国国立標準技術研究所、情報技術研究所(ITL)。
6.Applicability. This standard is applicable to all federal departments and agencies for the protection of sensitive unclassified information that is not subject to section 2315 of Title 10, United States Code, or section 3502 (2) of Title 44, United States Code. Either this standard, FIPS 205, FIPS 186-5, or NIST Special Publication 800-208 shall be used in designing and implementing public-key-based signature systems that federal departments and agencies operate or that are operated for them under contract. In the future, additional digital signature schemes may be specified and approved in FIPS or NIST Special Publications.
6.適用範囲。本標準は、合衆国法典第10編第2315条または合衆国法典第44編第3502条(2)の対象とならない機微な非機密情報を保護するために、すべての連邦省庁に適用されます。連邦省庁が運用する、または契約に基づいて連邦省庁のために運用される公開鍵ベースの署名システムを設計・実装する際には、本標準、FIPS 205、FIPS 186-5、または NIST Special Publication 800-208 のいずれかを使用しなければなりません。将来、追加のデジタル署名方式が FIPS または NIST Special Publication で規定され、承認される可能性があります。
The adoption and use of this standard are available to private and commercial organizations.
民間および商業組織も本標準を採用し使用することができます。
7.Applications. A digital signature algorithm allows an entity to authenticate the integrity of signed data and the identity of the signatory. The recipient of a signed message can use a digital signature as evidence in demonstrating to a third party that the signature was, in fact, generated by the claimed signatory. This is known as non-repudiation since the signatory cannot easily repudiate the signature at a later time. A digital signature algorithm is intended for use in electronic mail, electronic funds transfer, electronic data interchange, software distribution, data storage, and other applications that require data integrity assurance and data origin authentication.
7.用途。デジタル署名アルゴリズムにより、主体は署名付きデータの完全性と署名者の身元を認証できます。署名付きメッセージの受信者は、その署名が実際に主張どおりの署名者によって生成されたことを第三者に示す証拠として、デジタル署名を用いることができます。署名者が後になって署名を容易には否認できないことから、これは否認防止と呼ばれます。デジタル署名アルゴリズムは、電子メール、電子資金移動、電子データ交換、ソフトウェア配布、データ保存など、データ完全性の保証とデータ発信元の認証を必要とするアプリケーションでの使用を想定しています。
8.Implementations. A digital signature algorithm may be implemented in software, firmware, hardware, or any combination thereof. NIST will develop a validation program to test implementations for conformance to the algorithm in this standard. For every computational procedure that is specified in this standard, a conforming implementation may replace the given set of steps with any mathematically equivalent set of steps. In other words, different procedures that produce the correct output for every input are permitted.
8.実装。デジタル署名アルゴリズムは、ソフトウェア、ファームウェア、ハードウェア、またはそれらの任意の組み合わせで実装してもよいです。NIST は、本標準のアルゴリズムへの適合性について実装を試験する検証プログラムを策定します。本標準で規定される各計算手順について、適合する実装は、所定の手順を数学的に等価な任意の手順に置き換えてもよいです。言い換えれば、すべての入力に対して正しい出力を生成する限り、異なる手順も許容されます。
Information about validation programs is available at https://csrc.nist.gov/projects/cmvp. Examples for digital signature algorithms are available at https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/example-values.
検証プログラムに関する情報は https://csrc.nist.gov/projects/cmvp で入手できます。デジタル署名アルゴリズムの例は https://csrc.nist.gov/projects/cryptographic-standards-and-guidelines/example-values で入手できます。
Agencies are advised that digital signature key pairs shall not be used for other purposes.
各機関は、デジタル署名の鍵ペアを他の目的に使用してはならないことに留意すること。
9.Other Approved Security Functions. Digital signature implementations that comply with this standard shall employ cryptographic algorithms that have been approved for protecting Federal Government-sensitive information. Approved cryptographic algorithms and techniques include those that are either:
9.その他の承認されたセキュリティ機能。本標準に準拠するデジタル署名の実装は、連邦政府の機微な情報の保護について承認された暗号アルゴリズムを使用しなければなりません。承認された暗号アルゴリズムおよび技法には、次のいずれかに該当するものが含まれます。
a.Specified in a Federal Information Processing Standards (FIPS) publication,
a.連邦情報処理標準(FIPS)出版物で規定されているもの
b.Adopted in a FIPS or NIST recommendation, or
b.FIPS または NIST の推奨事項で採用されているもの
c.Specified in the list of approved security functions in SP 800-140C.
c.SP 800-140C の承認されたセキュリティ機能の一覧に規定されているもの
10.Export Control. Certain cryptographic devices and technical data regarding them are subject to federal export controls. Exports of cryptographic modules that implement this standard and technical data regarding them must comply with these federal regulations and be licensed by the Bureau of Industry and Security of the U.S. Department of Commerce. Information about export regulations is available at https://www.bis.doc.gov.
10.輸出管理。一部の暗号装置およびそれに関する技術データは、連邦の輸出管理の対象となります。本標準を実装する暗号モジュールおよびそれに関する技術データの輸出は、これらの連邦規則に従わなければならず、米国商務省産業安全保障局(Bureau of Industry and Security)の許可を受けなければなりません。輸出規則に関する情報は https://www.bis.doc.gov で入手できます。
11.Patents. The algorithm in this standard may be covered by U.S. or foreign patents.
11.特許。本標準のアルゴリズムは、米国または外国の特許の対象となっている可能性があります。
12.Implementation Schedule. This standard becomes effective immediately upon final publication.
12.実施スケジュール。本標準は最終版の発行と同時に発効します。
13.Specifications. Federal Information Processing Standards (FIPS) 204, Module-Lattice-Based Digital Signature Standard (affixed).
13.仕様。連邦情報処理標準(FIPS)204、モジュール格子ベースのデジタル署名標準(添付)。
14.Qualifications. The security of a digital signature system depends on maintaining the secrecy of the signatory’s private keys. Signatories shall, therefore, guard against the disclosure of their private keys. While it is the intent of this standard to specify general security requirements for generating digital signatures, conformance to this standard does not ensure that a particular implementation is secure. It is the responsibility of an implementer to ensure that any module that implements a digital signature capability is designed and built in a secure manner.
14.留意事項。デジタル署名システムのセキュリティは、署名者の秘密鍵の秘匿性を維持できるかどうかに依存します。したがって、署名者は自らの秘密鍵の漏えいを防がなければなりません。本標準はデジタル署名生成の一般的なセキュリティ要件を規定することを意図していますが、本標準への適合は特定の実装が安全であることを保証するものではありません。デジタル署名機能を実装するモジュールが安全な方法で設計・構築されることを確実にするのは、実装者の責任です。
Similarly, the use of a product containing an implementation that conforms to this standard does not guarantee the security of the overall system in which the product is used. The responsible authority in each agency or department shall ensure that an overall implementation provides an acceptable level of security.
同様に、本標準に適合する実装を含む製品を使用しても、その製品を使用するシステム全体のセキュリティは保証されません。各機関または省庁の責任当局は、実装全体が許容可能なセキュリティレベルを提供することを確実にしなければなりません。
Since a standard of this nature must be flexible enough to adapt to advancements and innovations in science and technology, this standard will be reviewed every five years in order to assess its adequacy.
この種の標準は、科学技術の進歩と革新に適応できる柔軟性を備えていなければならないため、本標準はその妥当性を評価するために5年ごとに見直されます。
15.Waiver Procedure. The Federal Information Security Management Act (FISMA) does not allow for waivers to Federal Information Processing Standards (FIPS) that are made mandatory by the Secretary of Commerce.
15.適用除外手続き。連邦情報セキュリティマネジメント法(FISMA)は、商務長官が義務化した連邦情報処理標準(FIPS)について適用除外を認めていません。
16.Where to Obtain Copies of the Standard. This publication is available by accessing https://csrc.nist. gov/publications. Other computer security publications are available at the same website.
16.本標準の入手先。本出版物は https://csrc.nist. gov/publications にアクセスして入手できます。その他のコンピュータセキュリティ出版物も同じウェブサイトで入手できます。
17.How to Cite This Publication. NIST has assigned NIST FIPS 204 as the publication identifier for this FIPS, per the NIST Technical Series Publication Identifier Syntax. NIST recommends that it be cited as follows:
17.本出版物の引用方法。NIST は、NIST Technical Series Publication Identifier Syntax に従い、本 FIPS の出版物識別子として NIST FIPS 204 を割り当てました。NIST は、次のように引用することを推奨します。
National Institute of Standards and Technology (2024) Module-Lattice-Based Digital Signature Standard. (Department of Commerce, Washington, D.C.), Federal Information Processing Standards Publication (FIPS) NIST FIPS 204. https://doi.org/10.6028/NIST.FIPS.204
National Institute of Standards and Technology (2024) Module-Lattice-Based Digital Signature Standard. (Department of Commerce, Washington, D.C.), Federal Information Processing Standards Publication (FIPS) NIST FIPS 204. https://doi.org/10.6028/NIST.FIPS.204
18.Inquiries and Comments. Inquiries and comments about this FIPS may be submitted to fips-204-comments@nist.gov.
18.問い合わせおよびコメント。本 FIPS に関する問い合わせおよびコメントは fips-204-comments@nist.gov に提出できます。
Table of Contents
目次
Federal Information Processing Standards Publication 204
連邦情報処理標準出版物 204
Specification for the Module-Lattice-Based Digital Signature Standard
モジュール格子ベースのデジタル署名標準の仕様
List of Tables
表一覧
List of Algorithms
アルゴリズム一覧
Algorithm 43 — \(\mathrm{BitRev}_8(m)\)
アルゴリズム 43 — \(\mathrm{BitRev}_8(m)\)
1. Introduction
1. はじめに
1.1 Purpose and Scope
1.1 目的と範囲
This standard defines a digital signature scheme, which includes a method for digital signature generation that can be used for the protection of binary data (commonly called a “message”) and a method for the verification and validation of those digital signatures. NIST Special Publication (SP) 800-175B [2], Guideline for Using Cryptographic Standards in the Federal Government: Cryptographic Mechanisms, includes a general discussion of digital signatures.
本標準はデジタル署名方式を定義します。この方式には、バイナリデータ(一般に「メッセージ」と呼ばれる)の保護に使用できるデジタル署名生成の方法と、そのデジタル署名を検証・妥当性確認する方法が含まれます。NIST Special Publication (SP) 800-175B [2]、Guideline for Using Cryptographic Standards in the Federal Government: Cryptographic Mechanisms には、デジタル署名に関する一般的な議論が含まれています。
This standard specifies the mathematical steps that need to be performed for key generation, signature generation, and signature verification. In order for digital signatures to be valid, additional assurances are required, such as assurance of identity and of private key possession. SP 800-89, Recommendation for Obtaining Assurances for Digital Signature Applications [3], specifies the required assurances and the methods for obtaining them.
本標準は、鍵生成、署名生成、署名検証のために実行する必要のある数学的手順を規定します。デジタル署名が有効であるためには、身元の保証や秘密鍵の保有の保証など、追加の保証が必要です。SP 800-89, Recommendation for Obtaining Assurances for Digital Signature Applications [3] は、必要な保証とそれを得るための方法を規定しています。
The digital signature scheme approved in this standard is the Module-Lattice-Based Digital Signature Algorithm (ML-DSA), which is based on the Module Learning With Errors problem [4]. ML-DSA is believed to be secure, even against adversaries in possession of a large-scale fault-tolerant quantum computer. In particular, ML-DSA is believed to be strongly unforgeable, which implies that the scheme can be used to detect unauthorized modifications to data and to authenticate the identity of the signatory (one bound to the possession of the private-key). In addition, a signature generated by this scheme can be used as evidence in demonstrating to a third party that the signature was, in fact, generated by the claimed signatory. The latter property is known as non-repudiation since the signatory cannot easily repudiate the signature at a later time.
この標準で承認されたデジタル署名方式は、Module Learning With Errors 問題 [4] に基づくモジュール格子ベースのデジタル署名アルゴリズム(ML-DSA)です。ML-DSA は、大規模な誤り耐性量子コンピュータを保有する攻撃者に対しても安全であると考えられています。特に、ML-DSA は強偽造不可能(strongly unforgeable)であると考えられており、このことは、この方式を用いてデータの不正な改変を検出し、署名者(秘密鍵の保有に結び付けられた者)の身元を認証できることを意味します。さらに、この方式で生成された署名は、その署名が実際に主張された署名者によって生成されたことを第三者に示す証拠として使用できます。後者の性質は、署名者が後になって署名を容易に否認できないことから、否認防止と呼ばれます。
This standard gives algorithms for ML-DSA key generation, signature generation, and signature verification (Section 5), and for supporting algorithms used by them (Section 7). ML-DSA is standardized with three possible parameter sets, each of which corresponds to a different security strength. Section 4 describes the global parameters used by these algorithms and enumerates the parameter sets for ML-DSA that are approved by this standard. ML-DSA can be used in place of other digital signature schemes specified in NIST FIPS and Special Publications (e.g., FIPS 186-5, Digital Signature Standard (DSS) [1]).
この標準は、ML-DSA の鍵生成、署名生成、および署名検証のアルゴリズム(セクション5)と、それらが使用する補助アルゴリズム(セクション7)を規定します。ML-DSA は3つのパラメータセットで標準化されており、それぞれが異なるセキュリティ強度に対応します。セクション4では、これらのアルゴリズムで使用される大域パラメータを説明し、この標準で承認された ML-DSA のパラメータセットを列挙します。ML-DSA は、NIST の FIPS および Special Publications で規定されている他のデジタル署名方式(例えば、FIPS 186-5, Digital Signature Standard (DSS) [1])の代わりに使用できます。
1.2 Context
1.2 背景
Over the past several years, there has been steady progress toward building quantum computers. The security of many commonly used public-key cryptosystems will be at risk if large-scale quantum computers are ever realized. This would include key-establishment schemes and digital signatures that are based on integer factorization and discrete logarithms (both over finite fields and elliptic curves). As a result, in 2016, NIST initiated a public Post-Quantum Cryptography (PQC) Standardization process to select quantum-resistant public-key cryptographic algorithms for standardization. A total of 82 candidate algorithms were submitted to NIST for consideration.
ここ数年、量子コンピュータの構築に向けた着実な進展が見られます。大規模な量子コンピュータが実現すれば、広く使われている多くの公開鍵暗号システムの安全性が危険にさらされます。これには、整数因数分解および離散対数(有限体上と楕円曲線上の両方)に基づく鍵確立方式とデジタル署名が含まれます。その結果、NIST は2016年に、標準化のための耐量子公開鍵暗号アルゴリズムを選定する公開の耐量子暗号(PQC)標準化プロセスを開始しました。合計82件の候補アルゴリズムが検討のために NIST に提出されました。
After three rounds of evaluation and analysis, NIST selected the first four algorithms for standardization. ML-DSA is derived from one of the selected schemes, CRYSTALS-DILITHIUM [5, 6], and is intended to protect sensitive U.S. Government information well into the foreseeable future, including after the advent of cryptographically relevant quantum computers. For the differences between ML-DSA and CRYSTALS-DILITHIUM, see Appendix D.
3ラウンドにわたる評価と分析を経て、NIST は標準化のための最初の4つのアルゴリズムを選定しました。ML-DSA は選定された方式の1つである CRYSTALS-DILITHIUM [5, 6] から派生したものであり、暗号解読に関係する量子コンピュータの登場後も含め、予見可能な将来にわたって米国政府の機微な情報を保護することを目的としています。ML-DSA と CRYSTALS-DILITHIUM の相違点については、付録 D を参照のこと。
2. Glossary of Terms, Acronyms, and Symbols
2. 用語、略語、および記号の一覧
2.1 Terms and Definitions
2.1 用語と定義
approved — FIPS-approved and/or NIST-recommended. An algorithm or technique that is either 1) specified in a FIPS or NIST recommendation, 2) adopted in a FIPS or NIST recommendation, or 3) specified in a list of NIST-approved security functions.
approved — FIPS で承認された、および/または NIST が推奨します。1) FIPS または NIST の推奨文書で規定されている、2) FIPS または NIST の推奨文書で採用されている、または 3) NIST が承認したセキュリティ機能のリストで規定されている、のいずれかに該当するアルゴリズムまたは技法。
assurance of possession — Confidence that an entity possesses a private key and any associated keying material.
assurance of possession — エンティティが秘密鍵および関連する鍵材料を保有していることに対する確信。
asymmetric cryptography — Cryptography that uses two separate keys to exchange data — one to encrypt or digitally sign the data and one to decrypt the data or verify the digital signature. Also known as public-key cryptography.
asymmetric cryptography — データを交換するために2つの別々の鍵を使用する暗号。一方の鍵はデータの暗号化またはデジタル署名に、もう一方の鍵はデータの復号またはデジタル署名の検証に使用されます。公開鍵暗号とも呼ばれます。
bit string — An ordered sequence of zeros and ones.
bit string — 0と1の順序付き列。
byte — An integer from the set {0, 1, 2, …, 255}.
byte — 集合 {0, 1, 2, …, 255} に属する整数。
byte string — An ordered sequence of bytes.
byte string — バイトの順序付き列。
certificate — A set of data that uniquely identifies a public key that has a corresponding private key and an owner that is authorized to use the key pair. The certificate contains the owner’s public key and possibly other information and is digitally signed by a certification authority (i.e., a trusted party), thereby binding the public key to the owner.
certificate — 対応する秘密鍵を持つ公開鍵と、その鍵ペアの使用を認可された所有者とを一意に識別するデータの集合。証明書には所有者の公開鍵と場合によっては他の情報が含まれ、認証局(すなわち、信頼できる当事者)によってデジタル署名されることで、公開鍵が所有者に結び付けられます。
certification authority (CA) — The entity in a public-key infrastructure (PKI) that is responsible for issuing certificates and exacting compliance with a PKI policy.
certification authority (CA) — 公開鍵基盤(PKI)において、証明書の発行と PKI ポリシーへの準拠の強制に責任を負うエンティティ。
claimed signatory — From the verifier’s perspective, the claimed signatory is the entity that purportedly generated a digital signature.
claimed signatory — 検証者の観点から、デジタル署名を生成したとされるエンティティ。
destroy — An action applied to a key or a piece of secret data. After a key or a piece of secret data is destroyed, no information about its value can be recovered.
destroy — 鍵または秘密データに対して適用される操作。鍵または秘密データが破棄された後は、その値に関するいかなる情報も復元できません。
digital signature — The result of a cryptographic transformation of data that, when properly implemented, provides a mechanism to verify origin authenticity and data integrity and to enforce signatory non-repudiation.
digital signature — データの暗号学的変換の結果であり、適切に実装された場合、データの出所の真正性とデータの完全性を検証し、署名者の否認防止を実現するメカニズムを提供します。
entity — An individual person, organization, device, or process. Used interchangeably with party.
entity — 個人、組織、デバイス、またはプロセス。party と同じ意味で用いられます。
equivalent process — Two processes are equivalent if the same output is produced when the same values are input to each process (either as input parameters, as values made available during the process, or both).
equivalent process — 2つのプロセスは、それぞれに同じ値を入力したとき(入力パラメータとして、プロセス中に利用可能となる値として、またはその両方として)同じ出力が得られる場合に等価です。
eXtendable-Output Function (XOF) — A function on bit strings in which the output can be extended to any desired length. Approved XOFs (e.g., those specified in FIPS 202 [7]) are designed to satisfy the following properties as long as the specified output length is sufficiently long to prevent trivial attacks:
eXtendable-Output Function (XOF) — 出力を任意の所望の長さに拡張できる、ビット列上の関数。承認された XOF(例えば、FIPS 202 [7] で規定されているもの)は、指定された出力長が自明な攻撃を防ぐのに十分な長さである限り、次の性質を満たすように設計されています。
1.(One-way) It is computationally infeasible to find any input that maps to any new pre-specified output.
1.(一方向性)任意の新たな事前指定された出力に写像される入力を見つけることが計算量的に実行不可能です。
2.(Collision-resistant) It is computationally infeasible to find any two distinct inputs that map to the same output.
2.(衝突耐性)同じ出力に写像される2つの異なる入力を見つけることが計算量的に実行不可能です。
fresh random value — A previously unused output of a random bit generator.
fresh random value — 乱数ビット生成器のこれまでに使用されていない出力。
hash function — A function on bit strings in which the length of the output is fixed. Approved hash functions (such as those specified in FIPS 180 [8] and FIPS 202 [7]) are designed to satisfy the following properties:
hash function — 出力の長さが固定されている、ビット列上の関数。承認されたハッシュ関数(FIPS 180 [8] や FIPS 202 [7] で規定されているものなど)は、次の性質を満たすように設計されています。
1.(One-way) It is computationally infeasible to find any input that maps to any new pre-specified output.
1.(一方向性)任意の新たな事前指定された出力に写像される入力を見つけることが計算量的に実行不可能です。
2.(Collision-resistant) It is computationally infeasible to find any two distinct inputs that map to the same output.
2.(衝突耐性)同じ出力に写像される2つの異なる入力を見つけることが計算量的に実行不可能です。
hash value — See message digest.
hash value — message digest を参照してください。
key — A parameter used in conjunction with a cryptographic algorithm that determines its operation. Examples of cryptographic algorithms applicable to this standard include:
key — 暗号アルゴリズムと組み合わせて使用され、その動作を決定するパラメータ。この標準に該当する暗号アルゴリズムの例には次のものがあります。
1.The computation of a digital signature from data
1.データからのデジタル署名の計算
2.The verification of a digital signature
2.デジタル署名の検証
key pair — A public key and its corresponding private key.
key pair — 公開鍵とそれに対応する秘密鍵。
little-endian — The property of a byte string having its bytes positioned in order of increasing significance. In particular, the leftmost (first) byte is the least significant, and the rightmost (last) byte is the most significant. The term “little-endian” may also be applied in the same manner to bit strings (e.g., the 8-bit string 11010001 corresponds to the byte \(2^0 + 2^1 + 2^3 + 2^7 = 139\)).
little-endian — バイト列のバイトが重要度の低い順に並んでいるという性質。特に、左端(最初)のバイトが最下位であり、右端(最後)のバイトが最上位です。「little-endian」という用語は、同様にビット列にも適用されることがあります(例えば、8ビット列 11010001 はバイト \(2^0 + 2^1 + 2^3 + 2^7 = 139\) に対応します)。
message — The data that is signed. Also known as signed data during the signature verification and validation process.
message — 署名されるデータ。署名の検証および妥当性確認のプロセスでは signed data とも呼ばれます。
message digest — The result of applying a hash function to a message. Also known as a hash value.
message digest — メッセージにハッシュ関数を適用した結果。hash value とも呼ばれます。
non-repudiation — A service that is used to provide assurance of the integrity and origin of data in such a way that the integrity and origin can be verified and validated by a third party as having originated from a specific entity in possession of the private key (i.e., the signatory).
non-repudiation — データの完全性と出所を保証するために使用されるサービスであり、その完全性と出所が、秘密鍵を保有する特定のエンティティ(すなわち、署名者)から生じたものであることを第三者が検証および妥当性確認できるようにします。
owner — A key pair owner is the entity authorized to use the private key of a key pair.
owner — 鍵ペアの所有者とは、鍵ペアの秘密鍵の使用を認可されたエンティティです。
party — An individual person, organization, device, or process. Used interchangeably with entity.
party — 個人、組織、デバイス、またはプロセス。entity と同じ意味で用いられます。
public-key infrastructure (PKI) — A framework that is established to issue, maintain, and revoke public key certificates.
public-key infrastructure (PKI) — 公開鍵証明書を発行、維持、および失効させるために確立された枠組み。
private key — A cryptographic key that is used with an asymmetric (public-key) cryptographic algorithm. The private key is uniquely associated with the owner and is not made public. The private key is used to compute a digital signature that may be verified using the corresponding public key.
private key — 非対称(公開鍵)暗号アルゴリズムで使用される暗号鍵。秘密鍵は所有者に一意に関連付けられ、公開されません。秘密鍵は、対応する公開鍵を用いて検証できるデジタル署名を計算するために使用されます。
pseudorandom — A process or data produced by a process is said to be pseudorandom when the outcome is deterministic yet also effectively random as long as the internal action of the process is hidden from observation. For cryptographic purposes, “effectively random” means “computationally indistinguishable from random within the limits of the intended security strength.”
pseudorandom — プロセスの内部動作が観測から隠されている限り、結果が決定的でありながら実質的にランダムであるとき、そのプロセスまたはプロセスが生成したデータは擬似ランダムであるといいます。暗号の目的においては、「実質的にランダム」とは「意図したセキュリティ強度の範囲内で、ランダムなものと計算量的に区別できない」ことを意味します。
public key — A cryptographic key that is used with an asymmetric (public-key) cryptographic algorithm and is associated with a private key. The public key is associated with an owner and may be made public. In the case of digital signatures, the public key is used to verify a digital signature that was generated using the corresponding private key.
public key — 非対称(公開鍵)暗号アルゴリズムで使用され、秘密鍵に関連付けられた暗号鍵。公開鍵は所有者に関連付けられ、公開してもよいです。デジタル署名の場合、公開鍵は、対応する秘密鍵を用いて生成されたデジタル署名を検証するために使用されます。
security category — A number associated with the security strength of a post-quantum cryptographic algorithm, as specified by NIST (see [9, Sect. 5.6]).
security category — NIST が規定する、耐量子暗号アルゴリズムのセキュリティ強度に関連付けられた数([9, Sect. 5.6] を参照してください)。
security strength — A number associated with the amount of work (i.e., the number of operations) that is required to break a cryptographic algorithm or system.
security strength — 暗号アルゴリズムまたはシステムを破るのに必要な作業量(すなわち、演算回数)に関連付けられた数。
seed — A bit string used as input to a pseudorandom process.
seed — 擬似ランダムなプロセスへの入力として使用されるビット列。
shall — Used to indicate a requirement of this standard.
shall — この標準の要件を示すために使用されます。
should — Used to indicate a strong recommendation but not a requirement of this standard. Ignoring the recommendation could lead to undesirable results.
should — この標準の要件ではありませんが、強い推奨を示すために使用されます。この推奨を無視すると、望ましくない結果を招くおそれがあります。
signatory — The entity that generates a digital signature on data using a private key.
signatory — 秘密鍵を用いてデータに対するデジタル署名を生成するエンティティ。
signature generation — The process of using a digital signature algorithm and a private key to generate a digital signature on data.
signature generation — デジタル署名アルゴリズムと秘密鍵を用いて、データに対するデジタル署名を生成するプロセス。
signature validation — The mathematical verification of the digital signature along with obtaining the appropriate assurances (e.g., public-key validity, private-key possession, etc.).
signature validation — デジタル署名の数学的な検証に加えて、適切な保証(例えば、公開鍵の有効性、秘密鍵の保有など)を得ること。
signature verification — The process of using a digital signature algorithm and a public key to verify a digital signature on data.
signature verification — デジタル署名アルゴリズムと公開鍵を用いて、データに対するデジタル署名を検証するプロセス。
signed data — The data or message upon which a digital signature has been computed. Also see message.
signed data — デジタル署名の計算対象となったデータまたはメッセージ。message も参照。
trusted third party (TTP) — An entity other than the key pair owner and the verifier that is trusted by the owner, the verifier, or both. Sometimes shortened to “trusted party.”
trusted third party (TTP) — 鍵ペアの所有者および検証者以外のエンティティであって、所有者、検証者、またはその両方から信頼されているもの。「trusted party」と略されることもあります。
verifier — The entity that verifies the authenticity of a digital signature using the public key of the signatory.
verifier — 署名者の公開鍵を用いてデジタル署名の真正性を検証するエンティティ。
2.2 Acronyms
2.2 略語
AES — Advanced Encryption Standard
AES — Advanced Encryption Standard
API — Application Programming Interface
API — Application Programming Interface
DER — Distinguished Encoding Rules
DER — Distinguished Encoding Rules
FIPS — Federal Information Processing Standard
FIPS — Federal Information Processing Standard
ML-DSA — Module-Lattice-Based Digital Signature Algorithm
ML-DSA — Module-Lattice-Based Digital Signature Algorithm
MLWE — Module Learning With Errors
MLWE — Module Learning With Errors
NIST — National Institute of Standards and Technology
NIST — National Institute of Standards and Technology
NIST IR — NIST Interagency or Internal Report
NIST IR — NIST Interagency or Internal Report
NTT — Number Theoretic Transform
NTT — Number Theoretic Transform
OID — Object Identifier
OID — Object Identifier
PQC — Post-Quantum Cryptography
PQC — Post-Quantum Cryptography
RBG — Random Bit Generator
RBG — Random Bit Generator
SHA — Secure Hash Algorithm
SHA — Secure Hash Algorithm
SHAKE — Secure Hash Algorithm KECCAK
SHAKE — Secure Hash Algorithm KECCAK
SP — Special Publication
SP — Special Publication
SUF-CMA Strongly existentially UnForgeable under Chosen Message Attack
SUF-CMA Strongly existentially UnForgeable under Chosen Message Attack
XOF — eXtendable-Output Function
XOF — eXtendable-Output Function
2.3 Mathematical Symbols
2.3 数学記号
The following symbols and mathematical expressions are used in this standard.
この標準では、次の記号および数式を使用します。
\(q\) — The prime number \(q = 2^{23} - 2^{13} + 1 = 8380417\).
\(q\) — 素数 \(q = 2^{23} - 2^{13} + 1 = 8380417\)。
\(\mathbb{B}\) — The set \(\{0, 1, \ldots, 255\}\) of integers represented by a byte.
\(\mathbb{B}\) — 1バイトで表される整数の集合 \(\{0, 1, \ldots, 255\}\)。
\(\mathbb{N}\) — The set of natural numbers \(\{1, 2, 3, \ldots\}\).
\(\mathbb{N}\) — 自然数の集合 \(\{1, 2, 3, \ldots\}\)。
\(\mathbb{Z}\) — The ring of integers.
\(\mathbb{Z}\) — 整数環。
\(\mathbb{Z}_m\) — The ring of integers modulo \(m\) whose set of elements is \(\{0, 1, \ldots, m - 1\}\).
\(\mathbb{Z}_m\) — \(m\) を法とする整数環で、その元の集合は \(\{0, 1, \ldots, m - 1\}\) です。
\(\mathbb{Z}_m^n\) — The set of \(n\)-tuples over \(\mathbb{Z}_m\) equipped with the \(\mathbb{Z}\)-module structure.
\(\mathbb{Z}_m^n\) — \(\mathbb{Z}\)-加群の構造を備えた、\(\mathbb{Z}_m\) 上の \(n\) 組の集合。
\(R\) — The ring of single-variable polynomials over \(\mathbb{Z}\) modulo \(X^{256} + 1\), also denoted by \(\mathbb{Z}[X]/(X^{256} + 1)\).
\(R\) — \(X^{256} + 1\) を法とする \(\mathbb{Z}\) 上の1変数多項式環。\(\mathbb{Z}[X]/(X^{256} + 1)\) とも表記します。
\(R_m\) — The ring of single-variable polynomials over \(\mathbb{Z}_m\) modulo \(X^{256} + 1\), also denoted by \(\mathbb{Z}_m[X]/(X^{256} + 1)\).
\(R_m\) — \(X^{256} + 1\) を法とする \(\mathbb{Z}_m\) 上の1変数多項式環。\(\mathbb{Z}_m[X]/(X^{256} + 1)\) とも表記します。
\(B_\tau\) — The set of all polynomials \(p = \sum_{i=0}^{255} p_i X^i\) in \(R_q\) that are such that exactly \(\tau\) of the coefficients of \(p_i\) are from the set \(\{-1, 1\}\), and all other coefficients are zero. (See Section 7.3.)
\(B_\tau\) — \(R_q\) に属する多項式 \(p = \sum_{i=0}^{255} p_i X^i\) のうち、係数 \(p_i\) のちょうど \(\tau\) 個が集合 \(\{-1, 1\}\) に属し、他のすべての係数が0であるものすべての集合(セクション7.3を参照してください)。
\(\Pi\) — Used to denote a direct product of two or more rings, where addition and multiplication are performed componentwise.
\(\Pi\) — 2つ以上の環の直積を表すために使用します。加法と乗法は成分ごとに行われます。
\(T_q\) — The ring \(\Pi_{j=0}^{255} \mathbb{Z}_q\).
\(T_q\) — 環 \(\Pi_{j=0}^{255} \mathbb{Z}_q\)。
\(A \times B\) — Cartesian product of two sets \(A, B\).
\(A \times B\) — 2つの集合 \(A, B\) の直積(デカルト積)。
\([a, b]\) — For two integers \(a \le b\), \([a, b]\) denotes the set of integers \(\{a, a + 1, \ldots, b\}\).
\([a, b]\) — 2つの整数 \(a \le b\) に対し、\([a, b]\) は整数の集合 \(\{a, a + 1, \ldots, b\}\) を表します。
\(\mathsf{bitlen}\, a\) — The bit length of a positive integer \(a\). The bit length of \(a\) is the number of digits that would appear in a base-\(2\) representation of \(a\), where the most significant digit in the representation is assumed to be a \(1\) (e.g., \(\mathsf{bitlen}\, 32 = 6\) and \(\mathsf{bitlen}\, 31 = 5\)).1
\(\mathsf{bitlen}\, a\) — 正の整数 \(a\) のビット長。\(a\) のビット長とは、最上位の桁が \(1\) であるとした場合の、\(a\) の基数 \(2\) 表現に現れる桁数です(例えば、\(\mathsf{bitlen}\, 32 = 6\)、\(\mathsf{bitlen}\, 31 = 5\))。1
\(\mathsf{BitRev}_8(r)\) — Bit reversal of an 8-bit integer \(r\). If \(r = r_0 + 2r_1 + 4r_2 + \ldots + 128r_7\) with \(r_i \in \{0, 1\}\), then \(\mathsf{BitRev}_8(r) = r_7 + 2r_6 + 4r_5 + \ldots + 128r_0\).
\(\mathsf{BitRev}_8(r)\) — 8ビット整数 \(r\) のビット反転。\(r_i \in \{0, 1\}\) として \(r = r_0 + 2r_1 + 4r_2 + \ldots + 128r_7\) であるとき、\(\mathsf{BitRev}_8(r) = r_7 + 2r_6 + 4r_5 + \ldots + 128r_0\) です。
0x — Prefix to an integer written in hexadecimal representation.
0x — 16進表記で書かれた整数に付ける接頭辞。
\(\log_2 x\) — The base 2 logarithm of \(x\). For example, \(\log_2(16) = 4\).
\(\log_2 x\) — \(x\) の2を底とする対数。例えば、\(\log_2(16) = 4\) です。
mod — If \(\alpha\) is a positive integer and \(m \in \mathbb{Z}\) or \(m \in \mathbb{Z}_\alpha\), then \(m \bmod \alpha\) denotes the unique element \(m' \in \mathbb{Z}\) in the range \(0 \le m' < \alpha\) such that \(m\) and \(m'\) are congruent modulo \(\alpha\).
mod — \(\alpha\) が正の整数であり、\(m \in \mathbb{Z}\) または \(m \in \mathbb{Z}_\alpha\) であるとき、\(m \bmod \alpha\) は、\(m\) と \(m'\) が \(\alpha\) を法として合同となるような、範囲 \(0 \le m' < \alpha\) にある一意の元 \(m' \in \mathbb{Z}\) を表します。
\(\mathrm{mod}^{\pm}\) — If \(\alpha\) is a positive integer and \(m \in \mathbb{Z}\) or \(m \in \mathbb{Z}_\alpha\), then \(m \bmod^{\pm} \alpha\) denotes the unique element \(m' \in \mathbb{Z}\) in the range \(-\lceil \alpha/2 \rceil < m' \le \lfloor \alpha/2 \rfloor\) such that \(m\) and \(m'\) are congruent modulo \(\alpha\).
\(\mathrm{mod}^{\pm}\) — \(\alpha\) が正の整数であり、\(m \in \mathbb{Z}\) または \(m \in \mathbb{Z}_\alpha\) であるとき、\(m \bmod^{\pm} \alpha\) は、\(m\) と \(m'\) が \(\alpha\) を法として合同となるような、範囲 \(-\lceil \alpha/2 \rceil < m' \le \lfloor \alpha/2 \rfloor\) にある一意の元 \(m' \in \mathbb{Z}\) を表します。
\(\lfloor x \rfloor\) — The largest integer less than or equal to the real number \(x\), called the floor of \(x\). For example, \(\lfloor 2.1 \rfloor = 2\), and \(\lfloor 4 \rfloor = 4\).
\(\lfloor x \rfloor\) — 実数 \(x\) 以下の最大の整数で、\(x\) の床関数(floor)と呼ばれます。例えば、\(\lfloor 2.1 \rfloor = 2\)、\(\lfloor 4 \rfloor = 4\) です。
\(\lceil x \rceil\) — The least integer greater than or equal to the real number \(x\), called the ceiling of \(x\). For example, \(\lceil 5 \rceil = 5\) and \(\lceil 5.3 \rceil = 6\).
\(\lceil x \rceil\) — 実数 \(x\) 以上の最小の整数で、\(x\) の天井関数(ceiling)と呼ばれます。例えば、\(\lceil 5 \rceil = 5\)、\(\lceil 5.3 \rceil = 6\) です。
\(\|\cdot\|_\infty\) — The infinity norm. For an element \(w \in \mathbb{Z}\), \(\|w\|_\infty = |w|\), the absolute value of \(w\). For an element \(w \in \mathbb{Z}_q\), \(\|w\|_\infty = \left| w \bmod^{\pm} q \right|\). For an element \(w\) of \(R\) or \(R_q\), \(\|w\|_\infty = \max_{0 \le i < 256} \|w_i\|_\infty\). For a length-\(m\) vector \(\mathbf{w}\) with entries from \(R\) or \(R_q\), \(\|\mathbf{w}\|_\infty = \max_{0 \le i < m} \|w[i]\|_\infty\).
\(\|\cdot\|_\infty\) — 無限大ノルム。元 \(w \in \mathbb{Z}\) に対しては、\(\|w\|_\infty = |w|\)、すなわち \(w\) の絶対値です。元 \(w \in \mathbb{Z}_q\) に対しては、\(\|w\|_\infty = \left| w \bmod^{\pm} q \right|\) です。\(R\) または \(R_q\) の元 \(w\) に対しては、\(\|w\|_\infty = \max_{0 \le i < 256} \|w_i\|_\infty\) です。\(R\) または \(R_q\) の元を成分とする長さ \(m\) のベクトル \(\mathbf{w}\) に対しては、\(\|\mathbf{w}\|_\infty = \max_{0 \le i < m} \|w[i]\|_\infty\) です。
\(a!\) — The factorial quantity \(1 \cdot 2 \cdot 3 \cdot \ldots \cdot a\). The value \(0!\) is defined as 1.
\(a!\) — 階乗 \(1 \cdot 2 \cdot 3 \cdot \ldots \cdot a\)。\(0!\) の値は1と定義します。
\(\binom{a}{b}\) — For \(a \ge b\), the quantity \(a!/(b!(a - b)!)\).
\(\binom{a}{b}\) — \(a \ge b\) に対する量 \(a!/(b!(a - b)!)\)。
\(s \leftarrow x\) — In pseudocode, this notation means that the variable \(s\) is assigned the value of the expression \(x\).
\(s \leftarrow x\) — 擬似コードにおいて、この表記は変数 \(s\) に式 \(x\) の値を代入することを意味します。
\(s \leftarrow \mathbb{B}^\ell\) — In pseudocode, this notation means that the variable \(s\) is assigned the value of an array of \(\ell\) random bytes. The bytes must be generated using randomness from an approved RBG. See Section 3.6.1.
\(s \leftarrow \mathbb{B}^\ell\) — 擬似コードにおいて、この表記は変数 \(s\) に \(\ell\) 個のランダムなバイトからなる配列の値を代入することを意味します。これらのバイトは、承認された RBG からの乱数(randomness)を用いて生成しなければなりません。セクション3.6.1を参照してください。
\(x \in S \leftarrow y\) — Type casting. The variable \(x\) is assigned a value in a set \(S\) that is constructed from the value of an expression \(y\) in a possibly different set \(T\). The set \(T\) and the mapping from \(T\) to \(S\) are not explicitly specified, but they should be obvious from the context in which this statement appears.
\(x \in S \leftarrow y\) — 型変換。変数 \(x\) には、場合によっては異なる集合 \(T\) に属する式 \(y\) の値から構成された、集合 \(S\) の値が代入されます。集合 \(T\) および \(T\) から \(S\) への写像は明示的に規定されませんが、この文が現れる文脈から明らかであるはずです。
\([[a < b]]\) — A Boolean predicate. A comparison operator inside double square brackets \([[a < b]]\) denotes that the expression should be evaluated as a Boolean. Booleans can also be interpreted as elements of \(\mathbb{Z}_2\) with 1 denoting true and 0 denoting false.
\([[a < b]]\) — ブール述語。二重角括弧の中の比較演算子 \([[a < b]]\) は、その式をブール値として評価することを表します。ブール値は、1を真、0を偽とする \(\mathbb{Z}_2\) の元として解釈することもできます。
\(\langle\langle f(x)\rangle\rangle\) — A temporary variable that stores the output of a computation \(f(x)\) so that it can be used many times without needing to be recomputed. This is equivalent to defining a temporary variable \(y \leftarrow f(x)\). Naming the variable \(\langle\langle f(x)\rangle\rangle\) makes the pseudocode less cluttered.
\(\langle\langle f(x)\rangle\rangle\) — 計算 \(f(x)\) の出力を格納し、再計算することなく何度も使用できるようにする一時変数。これは、一時変数 \(y \leftarrow f(x)\) を定義することと等価です。変数に \(\langle\langle f(x)\rangle\rangle\) という名前を付けることで、擬似コードが簡潔になります。
\(a||b\) — Concatenation of two bit or byte strings \(a\) and \(b\).
\(a||b\) — 2つのビット列またはバイト列 \(a\) と \(b\) の連結。
\(a \circ b\) — Multiplication of \(a\) and \(b\) in the ring \(T_q\).
\(a \circ b\) — 環 \(T_q\) における \(a\) と \(b\) の乗算。
\(a \cdot b\) or \(ab\) — Multiplication in any of the rings \(\mathbb{Z}, \mathbb{Z}_m, R\), or \(R_m\).
\(a \cdot b\) または \(ab\) — 環 \(\mathbb{Z}, \mathbb{Z}_m, R\)、または \(R_m\) のいずれかにおける乗算。
\(a + b\) — Addition of \(a\) and \(b\).
\(a + b\) — \(a\) と \(b\) の加算。
\(a/b\) — Division of integers. When this notation is used, \(a\) and \(b\) are always integers. If \(b\) cannot be assumed to divide \(a\), then either \(\lfloor a/b \rfloor\) or \(\lceil a/b \rceil\) is used.
\(a/b\) — 整数の除算。この表記が使用される場合、\(a\) と \(b\) は常に整数です。\(b\) が \(a\) を割り切ると仮定できない場合は、\(\lfloor a/b \rfloor\) または \(\lceil a/b \rceil\) のいずれかが使用されます。
\(\bot\) — Blank symbol that indicates failure or the lack of an output from an algorithm.
\(\bot\) — 失敗またはアルゴリズムの出力がないことを示す空記号。
2.4 Notation
2.4 表記法
2.4.1 Rings
2.4.1 環
Elements of the rings \(\mathbb{Z}\), \(\mathbb{Z}_q\), \(\mathbb{Z}_2\), \(R\), and \(R_q\) are denoted by italicized lowercase letters (e.g., \(w\)). Elements of the ring \(T_q\) are length-\(256\) arrays of elements of \(\mathbb{Z}_q\), and they are denoted by italicized letters with a hat symbol (e.g., \(\hat{w}\)). The addition and multiplication of elements of \(T_q\) are performed entry-wise. Thus, the \(i\)th entry of the product of two elements \(\hat{u}\) and \(\hat{v}\) of \(T_q\) is \(\hat{u}[i] \cdot \hat{v}[i] \in \mathbb{Z}_q\). The multiplication operation in \(T_q\) is denoted by the symbol \(\circ\) (see Section 2.3).
環 \(\mathbb{Z}\)、\(\mathbb{Z}_q\)、\(\mathbb{Z}_2\)、\(R\)、および \(R_q\) の元は、イタリック体の小文字(例えば、\(w\))で表します。環 \(T_q\) の元は \(\mathbb{Z}_q\) の元からなる長さ \(256\) の配列であり、ハット記号付きのイタリック体の文字(例えば、\(\hat{w}\))で表します。\(T_q\) の元の加法と乗法は成分ごとに行われます。したがって、\(T_q\) の2つの元 \(\hat{u}\) と \(\hat{v}\) の積の第 \(i\) 成分は \(\hat{u}[i] \cdot \hat{v}[i] \in \mathbb{Z}_q\) です。\(T_q\) における乗算演算は記号 \(\circ\) で表します(セクション2.3を参照してください)。
When a product \(a \cdot b\) or a sum \(a + b\) is written and either \(a\) or \(b\) is a congruence class modulo \(m\) (i.e., if either \(a\) or \(b\) is an element of \(\mathbb{Z}_m\) or \(R_m\)), then the product or sum is also understood to be a congruence class modulo \(m\) (i.e., an element of \(\mathbb{Z}_m\) or \(R_m\)). Likewise, an element of \(R\) or \(\mathbb{Z}\) may be “typecast” to an element of \(R_m\) or \(\mathbb{Z}_m\), respectively, and may be used as the input of a function specified to act on an element of \(R_m\) or \(\mathbb{Z}_m\), respectively. In both cases, the element itself or its coefficients are mapped from \(\mathbb{Z}\) to \(\mathbb{Z}_m\) by taking the unique congruence class modulo \(m\) that contains the integer.
積 \(a \cdot b\) または和 \(a + b\) が書かれ、\(a\) または \(b\) のいずれかが \(m\) を法とする合同類である場合(すなわち、\(a\) または \(b\) のいずれかが \(\mathbb{Z}_m\) または \(R_m\) の元である場合)、その積または和も \(m\) を法とする合同類(すなわち、\(\mathbb{Z}_m\) または \(R_m\) の元)であると解釈します。同様に、\(R\) または \(\mathbb{Z}\) の元は、それぞれ \(R_m\) または \(\mathbb{Z}_m\) の元に「型変換」してよく、それぞれ \(R_m\) または \(\mathbb{Z}_m\) の元に作用すると規定された関数の入力として使用してもよいです。いずれの場合も、元そのものまたはその係数は、その整数を含む \(m\) を法とする一意の合同類をとることによって、\(\mathbb{Z}\) から \(\mathbb{Z}_m\) へ写像されます。
The coefficients of an element \(w\) of \(R\) or \(R_m\) are denoted by \(w_i\) so that \(w = w_0 + w_1 X + \ldots + w_{255} X^{255}\). If \(w\) is in \(R\) (respectively, \(R_m\)) and \(t\) is in \(\mathbb{Z}\) (respectively, \(\mathbb{Z}_d\)), then \(w(t)\) denotes the polynomial \(w = w_0 + w_1 X + \ldots + w_{255} X^{255}\) evaluated at \(X = t\).
\(R\) または \(R_m\) の元 \(w\) の係数を \(w_i\) で表し、\(w = w_0 + w_1 X + \ldots + w_{255} X^{255}\) とします。\(w\) が \(R\)(または \(R_m\))に属し、\(t\) が \(\mathbb{Z}\)(または \(\mathbb{Z}_d\))に属するとき、\(w(t)\) は多項式 \(w = w_0 + w_1 X + \ldots + w_{255} X^{255}\) を \(X = t\) で評価した値を表します。
2.4.2 Vectors and Matrices
2.4.2 ベクトルと行列
Vectors with elements in \(R\) or \(R_m\) are denoted by bold lowercase letters (e.g., \(\mathbf{v}\)). Matrices with elements in \(R\) or \(R_m\) are denoted by bold uppercase letters (e.g., \(\mathbf{A}\)).
\(R\) または \(R_m\) の元を要素とするベクトルは、太字の小文字で表します(例:\(\mathbf{v}\))。\(R\) または \(R_m\) の元を要素とする行列は、太字の大文字で表します(例:\(\mathbf{A}\))。
If \(S\) is a ring and \(\mathbf{v}\) is a length-\(L\) vector over \(S\), then the entries in the vector \(\mathbf{v}\) are expressed as
\(S\) が環であり、\(\mathbf{v}\) が \(S\) 上の長さ \(L\) のベクトルであるとき、ベクトル \(\mathbf{v}\) の成分は次のように表します。
The entries of a \(K \times L\) matrix \(\mathbf{A}\) over \(S\) are denoted as \(\mathbf{A}[i,j]\), where \(0 \le i < K\) and \(0 \le j < L\).
\(S\) 上の \(K \times L\) 行列 \(\mathbf{A}\) の成分は \(\mathbf{A}[i,j]\) で表します。ここで \(0 \le i < K\) かつ \(0 \le j < L\) です。
The set of all length-\(L\) vectors over \(S\) is denoted by \(S^L\). The set of all \(K \times L\) matrices over \(S\) is denoted by \(S^{K \times L}\). A length-\(L\) vector can also be treated as an \(L \times 1\) matrix.
\(S\) 上の長さ \(L\) のベクトル全体の集合を \(S^L\) で表します。\(S\) 上の \(K \times L\) 行列全体の集合を \(S^{K \times L}\) で表します。長さ \(L\) のベクトルは \(L \times 1\) 行列として扱うこともできます。
2.5 NTT Representation
2.5 NTT表現
The Number Theoretic Transform (NTT) is a specific isomorphism between the rings \(R_q\) and \(T_q\). Let \(\zeta = 1753 \in \mathbb{Z}_q\), which is a \(512^{\text{th}}\) root of unity. If \(w \in R_q\), then
数論変換(NTT)は、環 \(R_q\) と \(T_q\) の間の特定の同型写像です。\(\zeta = 1753 \in \mathbb{Z}_q\) とします。これは1の \(512^{\text{th}}\) 乗根です。\(w \in R_q\) のとき、
where \(\zeta_i = w(\zeta^{2\mathsf{BitRev}_8(i)+1}) \bmod q\). See Section 7.5 for an implementation discussion for NTT and \(\mathsf{NTT}^{-1}\).
ここで \(\zeta_i = w(\zeta^{2\mathsf{BitRev}_8(i)+1}) \bmod q\) です。NTT および \(\mathsf{NTT}^{-1}\) の実装に関する議論は7.5節を参照のこと。
The motivation for using NTT is that multiplication is considerably faster in the ring \(T_q\). Since NTT is an isomorphism, for any \(a, b \in R_q\),
NTTを用いる動機は、環 \(T_q\) では乗算がかなり高速になることにあります。NTTは同型写像であるため、任意の \(a, b \in R_q\) について次が成り立ちます。
If \(\mathbf{A}\) is a matrix with entries from \(R_q\), then \(\mathsf{NTT}(\mathbf{A})\) denotes the matrix computed via the entry-wise application of NTT to \(\mathbf{A}\). The symbol \(\circ\) is also used to denote the matrix multiplication of matrices with entries in \(T_q\). Thus, \(\mathsf{NTT}(\mathbf{AB}) = \mathsf{NTT}(\mathbf{A}) \circ \mathsf{NTT}(\mathbf{B})\). Explicit algorithms for linear algebra over \(T_q\) are given in Section 7.6.
\(\mathbf{A}\) が \(R_q\) の元を成分とする行列であるとき、\(\mathsf{NTT}(\mathbf{A})\) は \(\mathbf{A}\) の各成分にNTTを適用して得られる行列を表します。記号 \(\circ\) は、\(T_q\) の元を成分とする行列どうしの行列乗算を表すためにも用います。したがって、\(\mathsf{NTT}(\mathbf{AB}) = \mathsf{NTT}(\mathbf{A}) \circ \mathsf{NTT}(\mathbf{B})\) です。\(T_q\) 上の線形代数の具体的なアルゴリズムは7.6節に示します。
3. Overview of the ML-DSA Signature Scheme
3. ML-DSA署名方式の概要
ML-DSA is a digital signature scheme based on CRYSTALS-DILITHIUM [6]. It consists of three main algorithms: ML-DSA.KeyGen (Algorithm 1), ML-DSA.Sign (Algorithm 2), and ML-DSA.Verify (Algorithm 3). The ML-DSA scheme uses the Fiat-Shamir With Aborts construction [10, 11] and bears the most resemblance to the schemes proposed in [12, 13].
ML-DSAは、CRYSTALS-DILITHIUM [6] に基づくデジタル署名方式です。ML-DSA.KeyGen(アルゴリズム1)、ML-DSA.Sign(アルゴリズム2)、ML-DSA.Verify(アルゴリズム3)の三つの主要アルゴリズムから成ります。ML-DSA方式はFiat-Shamir With Aborts構成 [10, 11] を用いており、[12, 13] で提案された方式に最もよく似ています。
This document also defines a closely related but domain-separated signature scheme, HashML-DSA, which differs from ML-DSA in that it includes an additional pre-hashing step before signing. It consists of three main algorithms: ML-DSA.KeyGen (Algorithm 1), which is the same key generation algorithm used for ML-DSA; HashML-DSA.Sign (Algorithm 4); and HashML-DSA.Verify (Algorithm 5).
本文書では、ML-DSAと密接に関連するがドメイン分離された署名方式であるHashML-DSAも定義します。HashML-DSAは、署名の前に追加の事前ハッシュ処理を含む点でML-DSAと異なります。HashML-DSAは三つの主要アルゴリズムから成ります。すなわち、ML-DSAと同じ鍵生成アルゴリズムであるML-DSA.KeyGen(アルゴリズム1)、HashML-DSA.Sign(アルゴリズム4)、HashML-DSA.Verify(アルゴリズム5)です。
3.1 Security Properties
3.1 セキュリティ特性
ML-DSA is designed to be strongly existentially unforgeable under chosen message attack (SUF-CMA). That is, it is expected that even if an adversary can get the honest party to sign arbitrary messages, the adversary cannot create any additional valid signatures based on the signer’s public key, including on messages for which the signer has already provided a signature.
ML-DSAは、選択メッセージ攻撃のもとで強存在的偽造不可能(SUF-CMA)であるように設計されています。すなわち、敵対者が正直な当事者に任意のメッセージへ署名させることができたとしても、署名者の公開鍵に対する有効な署名を新たに作成することはできないと期待されます。これには、署名者がすでに署名を提供したメッセージに対する署名も含まれます。
Beyond unforgeability, ML-DSA is designed to satisfy additional security properties described in [14].
偽造不可能性に加えて、ML-DSAは [14] に記述された追加のセキュリティ特性を満たすように設計されています。
3.2 Computational Assumptions
3.2 計算量的仮定
Security for lattice-based digital signature schemes is typically related to the Learning With Errors (LWE) problem and the short integer solution (SIS) problem. The LWE problem [15] is to recover a vector \(\mathbf{s} \in \mathbb{Z}_q^n\) given a set of random “noisy” linear equations2 satisfied by \(\mathbf{s}\). The SIS problem is to find a non-zero solution \(\mathbf{t} \in \mathbb{Z}_q^n\) for a given linear system over \(\mathbb{Z}_q\) of the form \(\mathbf{A}\mathbf{t} = \mathbf{0}\) such that \(\|\mathbf{t}\|_\infty\) is small. For appropriate choices of parameters, these problems are intractable for the best known techniques, including Gaussian elimination.
格子に基づくデジタル署名方式の安全性は、一般にLearning With Errors(LWE)問題とshort integer solution(SIS)問題に関連付けられます。LWE問題 [15] とは、\(\mathbf{s}\) が満たすランダムな「ノイズ付き」線形方程式2の集合が与えられたとき、ベクトル \(\mathbf{s} \in \mathbb{Z}_q^n\) を復元する問題です。SIS問題とは、\(\mathbb{Z}_q\) 上の \(\mathbf{A}\mathbf{t} = \mathbf{0}\) という形の線形方程式系が与えられたとき、\(\|\mathbf{t}\|_\infty\) が小さい非零解 \(\mathbf{t} \in \mathbb{Z}_q^n\) を求める問題です。パラメータを適切に選べば、これらの問題は、ガウスの消去法を含む既知の最良の手法をもってしても解くことが困難です。
When the module \(\mathbb{Z}_q^n\) in LWE and SIS is replaced by a module over a ring larger than \(\mathbb{Z}_q\) (e.g., \(R_q\)), the resulting problems are called Module Learning With Errors (MLWE) [4] and Module Short Integer Solution (MSIS). The security of ML-DSA is based on the MLWE problem over \(R_q\) and a nonstandard variant of MSIS called SelfTargetMSIS [16].
LWEおよびSISにおける加群 \(\mathbb{Z}_q^n\) を、\(\mathbb{Z}_q\) より大きな環(例:\(R_q\))上の加群に置き換えた問題を、それぞれModule Learning With Errors(MLWE)[4] およびModule Short Integer Solution(MSIS)と呼びます。ML-DSAの安全性は、\(R_q\) 上のMLWE問題と、SelfTargetMSIS [16] と呼ばれるMSISの非標準的な変種に基づいています。
3.3 ML-DSA Construction
3.3 ML-DSAの構成
ML-DSA is a Schnorr-like signature with several optimizations. The Schnorr signature scheme applies the Fiat-Shamir heuristic to an interactive protocol between a verifier who knows \(g\) (the generator of a group in which discrete logs are believed to be difficult) and the value \(y = g^x\) and a prover who knows \(g\) and \(x\). The interactive protocol, where the prover demonstrates knowledge of \(x\) to the verifier, consists of three steps:
ML-DSAは、いくつかの最適化を施したSchnorr型の署名です。Schnorr署名方式は、\(g\)(離散対数の計算が困難と考えられる群の生成元)と値 \(y = g^x\) を知る検証者と、\(g\) と \(x\) を知る証明者との間の対話型プロトコルに、Fiat-Shamirヒューリスティックを適用したものです。証明者が検証者に対して \(x\) の知識を示すこの対話型プロトコルは、次の三つのステップから成ります。
1.Commitment: The prover generates a random positive integer \(r\) that is less than the order of \(g\) and commits to its value by sending \(g^r\) to the verifier.
1.コミットメント:証明者は、\(g\) の位数より小さいランダムな正の整数 \(r\) を生成し、\(g^r\) を検証者に送ることでその値にコミットします。
2.Challenge: The verifier sends a random positive integer 𝑐 that is less than the order of 𝑔 to the prover.
2.チャレンジ:検証者は、𝑔 の位数より小さいランダムな正の整数 𝑐 を証明者に送ります。
3.Response: The prover returns \(s = r - cx\) reduced modulo the order of \(g\), and the verifier checks whether \(g^s \cdot y^c = g^r\).
3.レスポンス:証明者は \(g\) の位数を法として還元した \(s = r - cx\) を返し、検証者は \(g^s \cdot y^c = g^r\) が成り立つかどうかを検査します。
This protocol is made noninteractive and turned into a signature scheme by replacing the verifier’s random choice of \(c\) in step 2 with a deterministic process that pseudorandomly derives \(c\) from a hash of the commitment \(g^r\) concatenated with the message to be signed. For this signature scheme, \(y\) is the public key, and \(x\) is the private key.
このプロトコルは、ステップ2における検証者による \(c\) のランダムな選択を、コミットメント \(g^r\) と署名対象のメッセージを連結したもののハッシュから \(c\) を擬似ランダムに導出する決定的な処理に置き換えることで、非対話型となり、署名方式に変換されます。この署名方式では、\(y\) が公開鍵であり、\(x\) が秘密鍵です。
The basic idea of ML-DSA and similar lattice signature schemes is to build a signature scheme from an analogous interactive protocol, where a prover who knows matrices \(\mathbf{A} \in \mathbb{Z}_q^{K \times L}\), \(\mathbf{S}_1 \in \mathbb{Z}_q^{L \times n}\), and \(\mathbf{S}_2 \in \mathbb{Z}_q^{K \times n}\) with small coefficients (for \(\mathbf{S}_1\) and \(\mathbf{S}_2\)) demonstrates knowledge of these matrices to a verifier who knows \(\mathbf{A}\) and \(\mathbf{T} \in \mathbb{Z}_q^{K \times n} = \mathbf{A}\mathbf{S}_1 + \mathbf{S}_2\). Such an interactive protocol would proceed as follows:
ML-DSAおよび類似の格子署名方式の基本的な考え方は、類似の対話型プロトコルから署名方式を構築することです。このプロトコルでは、行列 \(\mathbf{A} \in \mathbb{Z}_q^{K \times L}\)、\(\mathbf{S}_1 \in \mathbb{Z}_q^{L \times n}\)、\(\mathbf{S}_2 \in \mathbb{Z}_q^{K \times n}\)(\(\mathbf{S}_1\) と \(\mathbf{S}_2\) は係数が小さい)を知る証明者が、\(\mathbf{A}\) と \(\mathbf{T} \in \mathbb{Z}_q^{K \times n} = \mathbf{A}\mathbf{S}_1 + \mathbf{S}_2\) を知る検証者に対して、これらの行列の知識を示します。このような対話型プロトコルは次のように進みます。
1.Commitment: The prover generates \(\mathbf{y} \in \mathbb{Z}_q^L\) with small coefficients and commits to its value by sending \(\mathbf{w}_{\text{Approx}} = \mathbf{A}\mathbf{y} + \mathbf{y}_2\) to the verifier, where \(\mathbf{y}_2 \in \mathbb{Z}_q^K\) is a vector with small coefficients.
1.コミットメント:証明者は係数の小さい \(\mathbf{y} \in \mathbb{Z}_q^L\) を生成し、\(\mathbf{w}_{\text{Approx}} = \mathbf{A}\mathbf{y} + \mathbf{y}_2\) を検証者に送ることでその値にコミットします。ここで \(\mathbf{y}_2 \in \mathbb{Z}_q^K\) は係数の小さいベクトルです。
2.Challenge: The verifier sends a vector \(\mathbf{c} \in \mathbb{Z}_q^n\) with small coefficients to the prover.
2.チャレンジ:検証者は係数の小さいベクトル \(\mathbf{c} \in \mathbb{Z}_q^n\) を証明者に送ります。
3.Response: The prover returns \(\mathbf{z} = \mathbf{y} + \mathbf{S}_1\mathbf{c}\), and the verifier checks that \(\mathbf{z}\) has small coefficients and that \(\mathbf{A}\mathbf{z} - \mathbf{T}\mathbf{c} \approx \mathbf{w}_{\text{Approx}}\).
3.レスポンス:証明者は \(\mathbf{z} = \mathbf{y} + \mathbf{S}_1\mathbf{c}\) を返し、検証者は \(\mathbf{z}\) の係数が小さいこと、および \(\mathbf{A}\mathbf{z} - \mathbf{T}\mathbf{c} \approx \mathbf{w}_{\text{Approx}}\) であることを検査します。
As written, the above protocol has a security flaw: the response \(\mathbf{z}\) will be biased in a direction related to the private value \(\mathbf{S}_1\). Likewise \(\mathbf{r} = \mathbf{w}_{\text{Approx}} - \mathbf{A}\mathbf{z} + \mathbf{T}\mathbf{c} = \mathbf{y}_2 + \mathbf{S}_2\mathbf{c}\) is biased in a direction related to the private value \(\mathbf{S}_2\). However, this flaw can be corrected when converting the interactive protocol into a signature scheme. As with Schnorr signatures, the signer derives the challenge by a pseudorandom process from a hash of the commitment concatenated with the message. To correct the bias, the signer applies rejection sampling to \(\mathbf{z}\); if coefficients of \(\mathbf{z}\) fall outside of a specified range, the signing process is aborted, and the signer starts over from a new value of \(\mathbf{y}\). Likewise, similar rejection sampling must also be applied to \(\mathbf{r}\). These checks are analogous to those done at Line 23 of Algorithm 7. In the simplified Fiat-Shamir With Aborts signature, the public key is \((\mathbf{A}, \mathbf{T})\), and the private key is \((\mathbf{S}_1, \mathbf{S}_2)\).
上記のプロトコルには、このままではセキュリティ上の欠陥があります。レスポンス \(\mathbf{z}\) は、秘密の値 \(\mathbf{S}_1\) に関連する方向に偏ります。同様に、\(\mathbf{r} = \mathbf{w}_{\text{Approx}} - \mathbf{A}\mathbf{z} + \mathbf{T}\mathbf{c} = \mathbf{y}_2 + \mathbf{S}_2\mathbf{c}\) は秘密の値 \(\mathbf{S}_2\) に関連する方向に偏ります。しかし、この欠陥は対話型プロトコルを署名方式に変換する際に修正できます。Schnorr署名と同様に、署名者は、コミットメントとメッセージを連結したもののハッシュから、擬似ランダムな処理によってチャレンジを導出します。偏りを修正するため、署名者は \(\mathbf{z}\) に棄却サンプリングを適用します。\(\mathbf{z}\) の係数が指定された範囲外にある場合、署名処理は中断され、署名者は新しい \(\mathbf{y}\) の値からやり直します。同様に、\(\mathbf{r}\) にも同様の棄却サンプリングを適用しなければなりません。これらの検査は、アルゴリズム7の23行目で行う検査に相当します。簡略化したFiat-Shamir With Aborts署名では、公開鍵は \((\mathbf{A}, \mathbf{T})\)、秘密鍵は \((\mathbf{S}_1, \mathbf{S}_2)\) です。
In the ML-DSA standard, a number of tweaks and modifications are added to this basic framework for security or efficiency reasons:
ML-DSA標準では、セキュリティまたは効率上の理由から、この基本的な枠組みにいくつかの調整と変更を加えています。
•To reduce key and signature size and to use fast NTT-based polynomial multiplication, ML-DSA uses module-structured matrices. Relative to the basic scheme described above, it replaces dimension-\(n \times n\) blocks of matrices and dimension-\(n\) blocks of vectors with polynomials in the ring \(R_q\). Thus, instead of \(\mathbf{A} \in \mathbb{Z}_q^{K \times L}\), \(\mathbf{T} \in \mathbb{Z}_q^{K \times n}\), \(\mathbf{S}_1 \in \mathbb{Z}_q^{L \times n}\), \(\mathbf{S}_{\mathbf{2}} \in \mathbb{Z}_q^{K \times n}\), \(\mathbf{y} \in \mathbb{Z}_q^L\), \(\mathbf{c} \in \mathbb{Z}_q^n\), ML-DSA has \(\mathbf{A} \in R_q^{k \times \ell}\), \(\mathbf{t} \in R_q^k\), \(\mathbf{s}_1 \in R_q^\ell\), \(\mathbf{s}_2 \in R_q^k\), \(\mathbf{y} \in R_q^\ell\), \(c \in R_q\), where \(\ell = L/n\) and \(k = K/n\).
•鍵と署名のサイズを削減し、NTTに基づく高速な多項式乗算を用いるために、ML-DSAはモジュール構造をもつ行列を用います。上述の基本方式と比べると、行列の \(n \times n\) 次元のブロックとベクトルの \(n\) 次元のブロックを、環 \(R_q\) の多項式に置き換えます。したがって、ML-DSAでは、\(\mathbf{A} \in \mathbb{Z}_q^{K \times L}\)、\(\mathbf{T} \in \mathbb{Z}_q^{K \times n}\)、\(\mathbf{S}_1 \in \mathbb{Z}_q^{L \times n}\)、\(\mathbf{S}_{\mathbf{2}} \in \mathbb{Z}_q^{K \times n}\)、\(\mathbf{y} \in \mathbb{Z}_q^L\)、\(\mathbf{c} \in \mathbb{Z}_q^n\) の代わりに、\(\mathbf{A} \in R_q^{k \times \ell}\)、\(\mathbf{t} \in R_q^k\)、\(\mathbf{s}_1 \in R_q^\ell\)、\(\mathbf{s}_2 \in R_q^k\)、\(\mathbf{y} \in R_q^\ell\)、\(c \in R_q\) を用います。ここで \(\ell = L/n\)、\(k = K/n\) です。
•To further reduce the size of the public key, the matrix \(\mathbf{A}\) is pseudorandomly derived from a 256-bit public seed \(\rho\), which is included in the ML-DSA public key in place of \(\mathbf{A}\).
•公開鍵のサイズをさらに削減するため、行列 \(\mathbf{A}\) は 256 ビットの公開シード \(\rho\) から擬似ランダムに導出されます。ML-DSA の公開鍵には \(\mathbf{A}\) の代わりにこのシードが含まれます。
•For a still further reduction in public key size, the ML-DSA public key substitutes a compressed value \(\mathbf{t}_1\) for \(\mathbf{t}\), which drops the \(d\) low-order bits of each coefficient.
•公開鍵のサイズをなお一層削減するため、ML-DSAの公開鍵では \(\mathbf{t}\) の代わりに、各係数の下位 \(d\) ビットを落とした圧縮値 \(\mathbf{t}_1\) を用います。
•To obtain beyond unforgeability (BUFF) properties noted in [14], ML-DSA does not directly sign the message \(M\) but rather signs a message representative \(\mu\) that is obtained by hashing the concatenation of a hash of the public key and \(M\).
•[14] で述べられている偽造不可能性を超える特性(BUFF特性)を得るため、ML-DSAはメッセージ \(M\) に直接署名するのではなく、公開鍵のハッシュと \(M\) を連結したものをハッシュして得られるメッセージ代表値 \(\mu\) に署名します。
•To reduce signature size, rather than including the commitment \(\mathbf{w}_{\text{Approx}} = \mathbf{A}\mathbf{y} + \mathbf{y}_2\) in the signature, the ML-DSA signature uses a rounded version of \(\mathbf{w} = \mathbf{A}\mathbf{y}\) as a commitment \(\mathbf{w}_1\) and includes only the hash \(\tilde{c}\) of \(\mathbf{w}_1 \| \mu\).
•署名サイズを削減するため、ML-DSA署名ではコミットメント \(\mathbf{w}_{\text{Approx}} = \mathbf{A}\mathbf{y} + \mathbf{y}_2\) を署名に含めるのではなく、\(\mathbf{w} = \mathbf{A}\mathbf{y}\) を丸めたものをコミットメント \(\mathbf{w}_1\) として用い、\(\mathbf{w}_1 \| \mu\) のハッシュ \(\tilde{c}\) のみを署名に含めます。
•To ensure that \(\mathbf{w}_1\) can be reconstructed by the verifier from \(\mathbf{z}\) and the compressed value \(\mathbf{t}_1\), the signature must also include a hint \(\mathbf{h} \in R_2^k\) computed by the signer using the signer’s private key.
•検証者が \(\mathbf{z}\) と圧縮値 \(\mathbf{t}_1\) から \(\mathbf{w}_1\) を再構成できるようにするため、署名には、署名者が自身の秘密鍵を用いて計算したヒント \(\mathbf{h} \in R_2^k\) も含めなければなりません。
•Additionally, to ensure correctness, a second stage of rejection sampling must be included (Line 28 of Algorithm 7)
•さらに、正当性を確保するため、2段階目の棄却サンプリングを含めなければならない(アルゴリズム7の28行目)
In this document, the abbreviations ML-DSA-44, ML-DSA-65, and ML-DSA-87 are used to refer to ML-DSA with the parameter choices given in Table 1. In these abbreviations, the numerical suffix refers to the dimension of the matrix \(\mathbf{A}\). For example, in ML-DSA-65, the matrix \(\mathbf{A}\) is a \(6 \times 5\) matrix over \(R_q\).
本文書では、表1に示すパラメータの選択を用いたML-DSAを指すために、ML-DSA-44、ML-DSA-65、ML-DSA-87という略称を用います。これらの略称の数字の接尾辞は、行列 \(\mathbf{A}\) の次元を表します。例えば、ML-DSA-65では、行列 \(\mathbf{A}\) は \(R_q\) 上の \(6 \times 5\) 行列です。
3.4 Hedged and Deterministic Signing
3.4 ヘッジ付き署名と決定的署名
For ML-DSA to be secure, the signer’s commitment value \(\mathbf{y}\) must not be used to sign more than one message, and it must not be easily guessed by an attacker. This requires randomness. In principle, the randomness leading to \(\mathbf{y}\) can be produced either with the use of fresh randomness at signing time or pseudorandomly from the message being signed and a precomputed random value included in the signer’s private key.
ML-DSAが安全であるためには、署名者のコミットメント値 \(\mathbf{y}\) を複数のメッセージの署名に用いてはならず、また攻撃者に容易に推測されてはなりません。このためには乱数(randomness)が必要です。原理的には、\(\mathbf{y}\) のもとになる乱数は、署名時に新たな乱数を用いて生成することも、署名対象のメッセージと署名者の秘密鍵に含まれる事前計算されたランダム値から擬似ランダムに生成することもできます。
By default, this standard specifies the signing algorithm to use both types of randomness. This is referred to as the “hedged” variant of the signing procedure. The use of fresh randomness during signing helps mitigate side-channel attacks, while the use of precomputed randomness protects against the possibility that there may be flaws in the random number generator used by the signer at signing time.
本標準では、デフォルトとして、署名アルゴリズムが両方の種類の乱数を用いるよう規定しています。これを署名手順の「ヘッジ付き」変種と呼びます。署名時に新たな乱数を用いることはサイドチャネル攻撃の緩和に役立ち、事前計算された乱数を用いることは、署名時に署名者が用いる乱数生成器に欠陥がある可能性に対する防御となります。
This document also permits a fully deterministic variant of the signing procedure in case the signer has no access to a fresh source of randomness at signing time. However, the lack of randomness in the deterministic variant makes the risk of side-channel attacks (particularly fault attacks) more difficult to mitigate. Therefore, this variant should not be used on platforms where side-channel attacks are a concern and where they cannot be otherwise mitigated.
本文書では、署名者が署名時に新たな乱数源を利用できない場合に備えて、署名手順の完全に決定的な変種も認めています。ただし、決定的変種では乱数を用いないため、サイドチャネル攻撃(特にフォールト攻撃)のリスクを緩和することがより困難になります。したがって、この変種は、サイドチャネル攻撃が懸念され、かつ他の方法でそれを緩和できないプラットフォームでは使用しないことが望まれます。
Only implementing the hedged variant (i.e., without the deterministic variant) is sufficient to guarantee interoperability. The same verification algorithm will work to verify signatures produced by either variant, so implementing the deterministic variant in addition to the hedged variant does not enhance interoperability. The hedged and deterministic signing procedure differ only at line 5 of Algorithm 2 and line 5 of Algorithm 4.
相互運用性を保証するには、ヘッジ付き変種のみを実装すれば(すなわち決定的変種を実装しなくても)十分です。どちらの変種で生成された署名も同じ検証アルゴリズムで検証できるため、ヘッジ付き変種に加えて決定的変種を実装しても相互運用性は向上しません。ヘッジ付き署名手順と決定的署名手順の違いは、アルゴリズム2の5行目とアルゴリズム4の5行目のみです。
3.5 Use of Digital Signatures
3.5 デジタル署名の使用
Secure key management is an essential requirement for the use of digital signatures. This is context-dependent and involves more than the key generation, signing, and signature verification algorithms in this document. Guidance for key management is provided in the SP 800-57 series [9, 17, 18].
安全な鍵管理は、デジタル署名を使用するうえで不可欠な要件です。鍵管理は状況に依存し、本文書の鍵生成、署名、署名検証の各アルゴリズムだけでは済まない事項を含みます。鍵管理に関するガイダンスはSP 800-57シリーズ [9, 17, 18] に示されています。
Digital signatures are most useful when bound to an identity. Binding a public key to an identity requires proof of possession of the private key. In the PKI context, issuing certificates involves assurances of identity and proof of possession. When a public-key certificate is not available, users of digital signatures should determine whether a public key needs to be bound to an identity. Methods for obtaining assurances of identity and proof of possession are provided in [3].
デジタル署名は、アイデンティティに結び付けられたときに最も有用となります。公開鍵をアイデンティティに結び付けるには、秘密鍵の所有証明が必要です。PKIの文脈では、証明書の発行にアイデンティティの保証と所有証明が伴います。公開鍵証明書が利用できない場合、デジタル署名の利用者は、公開鍵をアイデンティティに結び付ける必要があるかどうかを判断することが望まれます。アイデンティティの保証と所有証明を得る方法は [3] に示されています。
3.6 Additional Requirements
3.6 追加要件
This section describes several required assurances when implementing ML-DSA. These are in addition to the considerations in Section 3.5.
本節では、ML-DSAを実装する際に求められるいくつかの保証について述べます。これらは3.5節の考慮事項に追加されるものです。
3.6.1 Randomness Generation
3.6.1 乱数生成
Algorithm 1, implementing key generation for ML-DSA, uses an RBG to generate the 256-bit random seed 𝜉. The seed 𝜉 shall be a fresh (i.e., not previously used) random value generated using an approved RBG, as prescribed in SP 800-90A, SP 800-90B, and SP 800-90C [19, 20, 21]. Moreover, the RBG used shall have a security strength of at least 192 bits for ML-DSA-65 and 256 bits for ML-DSA-87. For ML-DSA-44, the RBG should have a security strength of at least 192 bits and shall have a security strength of at least 128 bits. If an approved RBG with at least 128 bits of security but less than 192 bits of security is used, then the claimed security strength of ML-DSA-44 is reduced from category 2 to category 1.
ML-DSAの鍵生成を実装するアルゴリズム1は、RBGを用いて256ビットのランダムなシード 𝜉 を生成します。シード 𝜉 は、SP 800-90A、SP 800-90B、SP 800-90C [19, 20, 21] の規定に従い、承認されたRBGを用いて生成された新しい(すなわち以前に使用されていない)ランダム値でなければなりません。さらに、使用するRBGは、ML-DSA-65では少なくとも192ビット、ML-DSA-87では少なくとも256ビットのセキュリティ強度をもたなければなりません。ML-DSA-44では、RBGは少なくとも192ビットのセキュリティ強度をもつことが望ましく、少なくとも128ビットのセキュリティ強度をもたなければなりません。128ビット以上192ビット未満のセキュリティをもつ承認されたRBGを使用する場合、ML-DSA-44の主張されるセキュリティ強度はカテゴリ2からカテゴリ1に引き下げられます。
Additionally, the value \(rnd\) is generated using an RBG in the default “hedged” variants of Algorithms 2 and 4 for ML-DSA and HashML-DSA signing, respectively. While this value should ideally be generated by an approved RBG, other methods for generating fresh random values may be used. The primary purpose of \(rnd\) is to facilitate countermeasures to side-channel attacks and fault attacks on deterministic signatures, such as [22, 23, 24].3 For this purpose, even a weak RBG may be preferable to the fully deterministic variants of Algorithms 2 and 4.
さらに、ML-DSAとHashML-DSAの署名それぞれに対するアルゴリズム2と4のデフォルトの「ヘッジ付き」変種では、値 \(rnd\) がRBGを用いて生成されます。この値は理想的には承認されたRBGで生成することが望ましいですが、新しいランダム値を生成する他の方法を用いてもよいです。\(rnd\) の主な目的は、決定的署名に対するサイドチャネル攻撃やフォールト攻撃([22, 23, 24] など)への対策を容易にすることです。3この目的のためには、弱いRBGであっても、アルゴリズム2と4の完全に決定的な変種より望ましい場合があります。
3.6.2 Public-Key and Signature Length Checks
3.6.2 公開鍵と署名の長さの検査
Algorithm 3, implementing verification for ML-DSA, and Algorithm 5, implementing verification for HashML-DSA, specify the length of the signature \(\sigma\) and the public key \(pk\) in terms of the parameters described in Table 1. If an implementation of ML-DSA can accept inputs for \(\sigma\) or \(pk\) of any other length, it shall return false whenever the lengths of either of these inputs differ from their lengths specified in this standard. Failing to check the length of \(pk\) or \(\sigma\) may interfere with the security properties that ML-DSA is designed to have, like strong unforgeability.
ML-DSAの検証を実装するアルゴリズム3と、HashML-DSAの検証を実装するアルゴリズム5は、署名 \(\sigma\) と公開鍵 \(pk\) の長さを表1に示すパラメータによって規定しています。ML-DSAの実装が \(\sigma\) または \(pk\) について他の長さの入力を受け付け得る場合、これらの入力のいずれかの長さが本標準で規定された長さと異なるときには、常にfalseを返さなければなりません。\(pk\) または \(\sigma\) の長さを検査しないと、強偽造不可能性など、ML-DSAが備えるよう設計されたセキュリティ特性が損なわれるおそれがあります。
3.6.3 Intermediate Values
3.6.3 中間値
The data used internally by the key generation and signing algorithms in intermediate computation steps could be used by an adversary to gain information about the private key and thereby compromise security. The data used internally by verification algorithms is similarly sensitive for some applications, including the verification of signatures that are used as bearer tokens (i.e., authentication secrets) or the verification of signatures on plaintext messages that are intended to be confidential. Intermediate values of the verification algorithm may reveal information about its inputs (i.e., the message, signature, and public key), and in some applications, security or privacy requires one or more of these inputs to be confidential. Therefore, implementations of ML-DSA shall ensure that any potentially sensitive intermediate data is destroyed as soon as it is no longer needed.
鍵生成アルゴリズムと署名アルゴリズムが中間計算ステップで内部的に用いるデータは、敵対者が秘密鍵に関する情報を得てセキュリティを侵害するために利用し得ます。検証アルゴリズムが内部的に用いるデータも、用途によっては同様に機微です。そうした用途には、ベアラートークン(すなわち認証用の秘密情報)として用いられる署名の検証や、機密とすべき平文メッセージに対する署名の検証が含まれます。検証アルゴリズムの中間値は、その入力(すなわちメッセージ、署名、公開鍵)に関する情報を明らかにする可能性があり、用途によっては、セキュリティまたはプライバシーのためにこれらの入力の一つ以上を機密にする必要があります。したがって、ML-DSAの実装は、機微である可能性のある中間データを、不要になった時点で直ちに破棄することを保証しなければなりません。
Two particular cases in which implementations may refrain from destroying intermediate data are:
実装が中間データの破棄を控えてよい特別な場合として、次の二つがあります。
1.The seed 𝜉 generated in step 1 of ML-DSA.KeyGen can be stored for the purpose of later expansion
1.ML-DSA.KeyGenのステップ1で生成されたシード 𝜉 は、後で展開する目的で保存してよい
2.The matrix \(\hat{\mathbf{A}}\) generated in step 3 of ML-DSA.KeyGen_internal can be stored so that it need not be recomputed in later operations. Likewise, the matrix \(\hat{\mathbf{A}}\) generated in step 5 of the verification algorithm ML-DSA.Verify_internal can also be stored. In either case, the matrix \(\hat{\mathbf{A}}\) is data that is easily computed from the public key and does not require any special protections.
2.ML-DSA.KeyGen_internalのステップ3で生成された行列 \(\hat{\mathbf{A}}\) は、後の処理で再計算せずに済むように保存してもよいです。同様に、検証アルゴリズムML-DSA.Verify_internalのステップ5で生成された行列 \(\hat{\mathbf{A}}\) も保存してもよいです。いずれの場合も、行列 \(\hat{\mathbf{A}}\) は公開鍵から容易に計算できるデータであり、特別な保護を必要としません。
In certain situations (e.g., deterministic signing and the verification of confidential messages and signatures), additional care must be taken to protect implementations against side-channel attacks or fault attacks. A cryptographic device may leak critical information through side channels, which allows internal data or keying material to be extracted without breaking the cryptographic primitives.
特定の状況(例:決定的署名や、機密のメッセージおよび署名の検証)では、サイドチャネル攻撃や故障攻撃から実装を保護するために追加の注意を払わなければなりません。暗号デバイスはサイドチャネルを通じて重要な情報を漏洩する可能性があり、それにより暗号プリミティブを破ることなく内部データや鍵情報が抽出されうます。
3.6.4 No Floating-Point Arithmetic
3.6.4 浮動小数点演算の不使用
Implementations of ML-DSA shall not use floating-point arithmetic, as rounding errors in floating point operations may lead to incorrect results in some cases. Either \(\lfloor x/y \rfloor\) or \(\lceil x/y \rceil\) is used in all pseudocode in this standard in which division is performed (e.g., \(x/y\)), and \(y\) may not divide \(x\). Both of these can be computed without floating-point arithmetic, as ordinary integer division \(x/y\) computes \(\lfloor x/y \rfloor\), and \(\lceil x/y \rceil = \lfloor (x+y-1)/y \rfloor\) for non-negative integers \(x\) and positive integers \(y\). If \(y\) is a power of two, it may be more efficient to use bit shift operations than integer division.
ML-DSA の実装は浮動小数点演算を使用してはなりません。浮動小数点演算における丸め誤差により、場合によっては誤った結果が生じうるためです。本標準の擬似コードで除算(例:\(x/y\))を行い、かつ \(y\) が \(x\) を割り切らないことがあるすべての箇所では、\(\lfloor x/y \rfloor\) または \(\lceil x/y \rceil\) のいずれかを用います。非負整数 \(x\) と正整数 \(y\) について、通常の整数除算 \(x/y\) は \(\lfloor x/y \rfloor\) を計算し、また \(\lceil x/y \rceil = \lfloor (x+y-1)/y \rfloor\) であるから、いずれも浮動小数点演算を用いずに計算できます。\(y\) が 2 のべき乗であれば、整数除算よりもビットシフト演算を用いるほうが効率的な場合があります。
3.7 Use of Symmetric Cryptography
3.7 対称暗号の使用
This standard makes use of the functions SHAKE256 and SHAKE128, as defined in FIPS 202 [7]. While FIPS 202 specifies these functions as inputting and outputting bit strings, most implementations treat inputs and outputs as byte strings.
本標準は、FIPS 202 [7] で定義される関数 SHAKE256 および SHAKE128 を利用します。FIPS 202 はこれらの関数の入出力をビット列として規定していますが、ほとんどの実装は入出力をバイト列として扱います。
This standard will always call these functions with an output length of a multiple of eight bits and treat the output of these functions as a byte string, which will be the same byte string that would result from taking the bit string expected from a literal reading of FIPS 202 and processing it with BitsToBytes. However, to allow the signing of messages that are not a whole number of bytes, this document will overload SHAKE256 so that its input may be a bit string but will usually be a byte string. The following equivalence will hold for any byte string str and integer \(\ell \ge 1\):
本標準では、これらの関数を常に 8 ビットの倍数の出力長で呼び出し、その出力をバイト列として扱います。このバイト列は、FIPS 202 を字義どおりに読んで得られるビット列を BitsToBytes で処理した結果と同じバイト列になります。ただし、バイト数が整数にならないメッセージの署名を可能にするため、本文書では SHAKE256 をオーバーロードし、その入力をビット列としてもよいものとします(通常はバイト列です)。任意のバイト列 str と整数 \(\ell \ge 1\) について、次の等価性が成り立ちます。
In addition to using a mostly byte-oriented variant of the API defined in FIPS 202 for SHAKE256 and SHAKE128, this standard sometimes makes use of the incremental API defined in SP 800-185 [25]. This API consists of three functions for each variant of SHAKE. These functions can be used to absorb a sequence of arbitrary-length strings and squeeze a sequence of arbitrary-length strings. These functions perform buffering to handle any incomplete data blocks while absorbing or squeezing. For example, for SHAKE256:
本標準は、SHAKE256 および SHAKE128 について FIPS 202 で定義される API の主にバイト指向の変種を用いることに加え、SP 800-185 [25] で定義されるインクリメンタル API を用いることがあります。この API は、SHAKE の各変種につき 3 つの関数からなります。これらの関数を用いると、任意長の文字列の列を吸収し、任意長の文字列の列を搾り出すことができます。これらの関数は、吸収または搾り出しの際に不完全なデータブロックを扱うためにバッファリングを行います。たとえば SHAKE256 の場合は次のとおりです。
•\(\mathsf{ctx} \leftarrow \mathsf{SHAKE256.Init}()\) Initializes a hash function context.
•\(\mathsf{ctx} \leftarrow \mathsf{SHAKE256.Init}()\) ハッシュ関数のコンテキストを初期化します。
•\(\mathsf{ctx} \leftarrow \mathsf{SHAKE256.Absorb}(\mathsf{ctx}, \mathsf{str})\) Injects data to be used in the absorbing phase of SHAKE256 and updates context ctx.
•\(\mathsf{ctx} \leftarrow \mathsf{SHAKE256.Absorb}(\mathsf{ctx}, \mathsf{str})\) SHAKE256 の吸収フェーズで使用するデータを投入し、コンテキスト ctx を更新します。
•\((\mathsf{ctx}, \mathsf{out}) \leftarrow \mathsf{SHAKE256.Squeeze}(\mathsf{ctx}, 8\ell)\) Extracts \(\ell\) output bytes produced during the squeezing phase of SHAKE256 and updates context ctx.
•\((\mathsf{ctx}, \mathsf{out}) \leftarrow \mathsf{SHAKE256.Squeeze}(\mathsf{ctx}, 8\ell)\) SHAKE256 の搾り出しフェーズで生成される \(\ell\) バイトの出力を取り出し、コンテキスト ctx を更新します。
While the above functions are specified in terms of the Keccak-\(f\) permutation rather than the eXtendable-Output Function (XOF), SHAKE256, they are defined so that any series of commands of the following form:
上記の関数は、拡張可能出力関数(XOF)である SHAKE256 ではなく Keccak-\(f\) 置換に基づいて規定されているが、次の形式の任意の一連のコマンドが
1.\(\mathsf{ctx} \leftarrow \mathsf{SHAKE256.Init}()\)
1.\(\mathsf{ctx} \leftarrow \mathsf{SHAKE256.Init}()\)
2.For \(i = 1\) to \(m\): \(\mathsf{ctx} \leftarrow \mathsf{SHAKE256.Absorb}(\mathsf{ctx}, \mathsf{str}_i)\)
2.\(i = 1\) から \(m\) まで:\(\mathsf{ctx} \leftarrow \mathsf{SHAKE256.Absorb}(\mathsf{ctx}, \mathsf{str}_i)\)
3.For \(j = 1\) to \(k\): \((\mathsf{ctx}, \mathsf{out}_j) \leftarrow \mathsf{SHAKE256.Squeeze}(\mathsf{ctx}, 8b_j)\)
3.\(j = 1\) から \(k\) まで:\((\mathsf{ctx}, \mathsf{out}_j) \leftarrow \mathsf{SHAKE256.Squeeze}(\mathsf{ctx}, 8b_j)\)
4.\(\mathsf{output} \leftarrow \mathsf{out}_1 \| \ldots \| \mathsf{out}_k\)
4.\(\mathsf{output} \leftarrow \mathsf{out}_1 \| \ldots \| \mathsf{out}_k\)
will yield the same output as a single SHAKE256 call:
単一の SHAKE256 呼び出しと同じ出力を生じるように定義されています。
This equivalence holds whether or not \(|\mathsf{str}_i|\) and \(b_j\) are multiples of the SHAKE256 block length.
この等価性は、\(|\mathsf{str}_i|\) および \(b_j\) が SHAKE256 のブロック長の倍数であるか否かにかかわらず成り立ちます。
Since all outputs of SHAKE128 and SHAKE256 in this document give a whole number of bytes, the wrapper functions H and G are defined as follows:
本文書における SHAKE128 および SHAKE256 の出力はすべて整数バイトとなるため、ラッパー関数 H および G を次のように定義します。
1.\(\mathsf{H}(\mathsf{str}, \ell) = \mathsf{SHAKE256}(\mathsf{str}, 8\ell)\)
1.\(\mathsf{H}(\mathsf{str}, \ell) = \mathsf{SHAKE256}(\mathsf{str}, 8\ell)\)
2.\(\mathsf{G}(\mathsf{str}, \ell) = \mathsf{SHAKE128}(\mathsf{str}, 8\ell)\)
2.\(\mathsf{G}(\mathsf{str}, \ell) = \mathsf{SHAKE128}(\mathsf{str}, 8\ell)\)
3.\(\mathsf{H.Init}() = \mathsf{SHAKE256.Init}()\)
3.\(\mathsf{H.Init}() = \mathsf{SHAKE256.Init}()\)
4.\(\mathsf{G.Init}() = \mathsf{SHAKE128.Init}()\)
4.\(\mathsf{G.Init}() = \mathsf{SHAKE128.Init}()\)
5.\(\mathsf{H.Absorb}(\mathsf{ctx}, \mathsf{str}) = \mathsf{SHAKE256.Absorb}(\mathsf{ctx}, \mathsf{str})\)
5.\(\mathsf{H.Absorb}(\mathsf{ctx}, \mathsf{str}) = \mathsf{SHAKE256.Absorb}(\mathsf{ctx}, \mathsf{str})\)
6.\(\mathsf{G.Absorb}(\mathsf{ctx}, \mathsf{str}) = \mathsf{SHAKE128.Absorb}(\mathsf{ctx}, \mathsf{str})\)
6.\(\mathsf{G.Absorb}(\mathsf{ctx}, \mathsf{str}) = \mathsf{SHAKE128.Absorb}(\mathsf{ctx}, \mathsf{str})\)
7.\(\mathsf{H.Squeeze}(\mathsf{ctx}, \ell) = \mathsf{SHAKE256.Squeeze}(\mathsf{ctx}, 8\ell)\)
7.\(\mathsf{H.Squeeze}(\mathsf{ctx}, \ell) = \mathsf{SHAKE256.Squeeze}(\mathsf{ctx}, 8\ell)\)
8.\(\mathsf{G.Squeeze}(\mathsf{ctx}, \ell) = \mathsf{SHAKE128.Squeeze}(\mathsf{ctx}, 8\ell)\)
8.\(\mathsf{G.Squeeze}(\mathsf{ctx}, \ell) = \mathsf{SHAKE128.Squeeze}(\mathsf{ctx}, 8\ell)\)
In addition to SHAKE128 and SHAKE256, HashML-DSA.Sign and HashML-DSA.Verify may call other approved hash functions for pre-hashing. The pseudocode in this standard also treats these functions as returning a byte string as output while supporting either a bit string or a byte string as input. Here, it should be noted that the hash functions defined in [8] use different rules (i.e., big-endian ordering) to relate bits, bytes, and words.
SHAKE128 および SHAKE256 に加え、HashML-DSA.Sign および HashML-DSA.Verify は事前ハッシュのために他の承認されたハッシュ関数を呼び出すことがあります。本標準の擬似コードでは、これらの関数についても、入力としてビット列とバイト列のいずれも受け付け、出力としてバイト列を返すものとして扱います。ここで、[8] で定義されるハッシュ関数は、ビット、バイト、ワードの対応付けに異なる規則(すなわちビッグエンディアン順序)を用いることに留意すべきです。
4. Parameter Sets
4. パラメータセット
Table 1. ML-DSA parameter sets
表 1. ML-DSA のパラメータセット
| Parameters | Values assigned by each parameter set | ||
|---|---|---|---|
| (see Sections 6.1 and 6.2 of this document) | ML-DSA-44 | ML-DSA-65 | ML-DSA-87 |
| \(q\) - modulus [see §6.1] | 8380417 | 8380417 | 8380417 |
| \(\zeta\) - a \(512\)th root of unity in \(\mathbb{Z}_q\) [see §7.5] | 1753 | 1753 | 1753 |
| \(d\) - \(\#\) of dropped bits from \(\mathbf{t}\) [see §6.1] | 13 | 13 | 13 |
| \(\tau\) - \(\#\) of \(\pm 1\)’s in polynomial \(c\) [see §6.2] | 39 | 49 | 60 |
| \(\lambda\) - collision strength of \(\tilde{c}\) [see §6.2] | 128 | 192 | 256 |
| \(\gamma_1\) - coefficient range of \(\mathbf{y}\) [see §6.2] | \(2^{17}\) | \(2^{19}\) | \(2^{19}\) |
| \(\gamma_2\) - low-order rounding range [see §6.2] | \((q-1)/88\) | \((q-1)/32\) | \((q-1)/32\) |
| \((k,\ell)\) - dimensions of \(\mathbf{A}\) [see §6.1] | (4,4) | (6,5) | (8,7) |
| \(\eta\) - private key range [see §6.1] | 2 | 4 | 2 |
| \(\beta = \tau \cdot \eta\) [see §6.2] | 78 | 196 | 120 |
| \(\omega\) - max \(\#\) of 1’s in the hint \(\mathbf{h}\) [see §6.2] | 80 | 55 | 75 |
| Challenge entropy \(\log_2 \binom{256}{\tau} + \tau\) [see §6.2] | 192 | 225 | 257 |
| Repetitions (see explanation below) | 4.25 | 5.1 | 3.85 |
| Claimed security strength | Category 2 | Category 3 | Category 5 |
| パラメータ | 各パラメータセットが割り当てる値 | ||
|---|---|---|---|
| (本文書の 6.1 節および 6.2 節を参照) | ML-DSA-44 | ML-DSA-65 | ML-DSA-87 |
| \(q\) - 法 [§6.1 参照] | 8380417 | 8380417 | 8380417 |
| \(\zeta\) - \(\mathbb{Z}_q\) における 1 の \(512\) 乗根 [§7.5 参照] | 1753 | 1753 | 1753 |
| \(d\) - \(\mathbf{t}\) から落とすビットの \(\#\)(数) [§6.1 参照] | 13 | 13 | 13 |
| \(\tau\) - 多項式 \(c\) における \(\pm 1\) の \(\#\)(数) [§6.2 参照] | 39 | 49 | 60 |
| \(\lambda\) - \(\tilde{c}\) の衝突強度 [§6.2 参照] | 128 | 192 | 256 |
| \(\gamma_1\) - \(\mathbf{y}\) の係数範囲 [§6.2 参照] | \(2^{17}\) | \(2^{19}\) | \(2^{19}\) |
| \(\gamma_2\) - 下位丸め範囲 [§6.2 参照] | \((q-1)/88\) | \((q-1)/32\) | \((q-1)/32\) |
| \((k,\ell)\) - \(\mathbf{A}\) の次元 [§6.1 参照] | (4,4) | (6,5) | (8,7) |
| \(\eta\) - 秘密鍵の範囲 [§6.1 参照] | 2 | 4 | 2 |
| \(\beta = \tau \cdot \eta\) [§6.2 参照] | 78 | 196 | 120 |
| \(\omega\) - ヒント \(\mathbf{h}\) における 1 の最大 \(\#\)(数) [§6.2 参照] | 80 | 55 | 75 |
| チャレンジのエントロピー \(\log_2 \binom{256}{\tau} + \tau\) [§6.2 参照] | 192 | 225 | 257 |
| 繰り返し回数(下記の説明を参照) | 4.25 | 5.1 | 3.85 |
| 主張されるセキュリティ強度 | カテゴリ 2 | カテゴリ 3 | カテゴリ 5 |
Three ML-DSA parameter sets are included in Table 1. Each parameter set assigns values for all of the parameters used in the ML-DSA algorithms for key generation, signing, and verification. For informational purposes, some parameters used in the analysis of these algorithms are also included in the table. In particular, “repetitions” refers to the expected number of repetitions of the main loop in the signing algorithm from eq. 5 in [5]. The names of the parameter sets are of the form “ML-DSA-\(k\ell\),” where \((k, \ell)\) are the dimensions of the matrix \(\mathbf{A}\).
表 1 には 3 つの ML-DSA パラメータセットを示します。各パラメータセットは、鍵生成、署名、検証のための ML-DSA アルゴリズムで使用されるすべてのパラメータに値を割り当てます。参考情報として、これらのアルゴリズムの解析で用いられるいくつかのパラメータも表に含めています。特に「繰り返し回数」は、[5] の式 5 による、署名アルゴリズムのメインループの繰り返し回数の期待値を指します。パラメータセットの名前は「ML-DSA-\(k\ell\)」という形式であり、\((k, \ell)\) は行列 \(\mathbf{A}\) の次元です。
These parameter sets were designed to meet certain security strength categories defined by NIST in its original Call for Proposals [26]. These security strength categories are explained further in SP 800-57, Part 1 [9].
これらのパラメータセットは、NIST が当初の提案募集(Call for Proposals)[26] で定義した特定のセキュリティ強度カテゴリを満たすよう設計されました。これらのセキュリティ強度カテゴリについては、SP 800-57, Part 1 [9] でさらに説明されています。
Using this approach, security strength is not described by a single number, such as “128 bits of security.” Instead, each ML-DSA parameter set is claimed to be at least as secure as a generic block cipher with a prescribed key size or a generic hash function with a prescribed output length. More precisely, it is claimed that the computational resources needed to break ML-DSA are greater than or equal to the computational resources needed to break the block cipher or hash function when these computational resources are estimated using any realistic model of computation. Different models of computation can be more or less realistic and, accordingly, lead to more or less accurate estimates of security strength. Some commonly studied models are discussed in [27].
このアプローチでは、セキュリティ強度を「128 ビットのセキュリティ」のような単一の数値では表しません。その代わりに、各 ML-DSA パラメータセットは、所定の鍵長を持つ汎用ブロック暗号、または所定の出力長を持つ汎用ハッシュ関数と少なくとも同等に安全であると主張されます。より正確には、現実的な任意の計算モデルを用いて計算資源を見積もったとき、ML-DSA を破るのに必要な計算資源は、そのブロック暗号またはハッシュ関数を破るのに必要な計算資源以上であると主張されます。計算モデルによって現実性の程度は異なり、それに応じてセキュリティ強度の見積もりの正確さも異なります。よく研究されているモデルのいくつかは [27] で論じられています。
Concretely, the parameter set ML-DSA-44 is claimed to be in security strength category 2, ML-DSA-65 is claimed to be in category 3, and ML-DSA-87 is claimed to be in category 5 [6]. For additional discussion of the security strength of MLWE-based cryptosystems, see [28].
具体的には、パラメータセット ML-DSA-44 はセキュリティ強度カテゴリ 2、ML-DSA-65 はカテゴリ 3、ML-DSA-87 はカテゴリ 5 に属すると主張されます [6]。MLWE に基づく暗号システムのセキュリティ強度に関するさらなる議論については [28] を参照のこと。
The sizes of keys and signatures that correspond to each parameter set are given in Table 2. Certain optimizations are possible when storing ML-DSA public and private keys. If additional space is available, one can precompute and store \(\hat{\mathbf{A}}\) to speed up signing and verifying. Alternatively, if one wants to reduce the space needed for the private key, one can store only the 32-byte seed \(\xi\), which is sufficient to generate the other parts of the private key. For additional details, see Section 3.1 in [6].
各パラメータセットに対応する鍵と署名のサイズを 表2 に示します。ML-DSA の公開鍵と秘密鍵を保存する際には、いくつかの最適化が可能です。追加の記憶領域がある場合は、\(\hat{\mathbf{A}}\) を事前に計算して保存しておくことで、署名と検証を高速化できます。逆に、秘密鍵に必要な領域を削減したい場合は、32 バイトのシード \(\xi\) だけを保存してもよいです。このシードがあれば秘密鍵の他の部分を生成するのに十分です。詳細は [6] の Section 3.1 を参照されました。
Table 2. Sizes (in bytes) of keys and signatures of ML-DSA
表 2. ML-DSA の鍵および署名のサイズ(バイト単位)
| Private Key | Public Key | Signature Size | |
|---|---|---|---|
| ML-DSA-44 | 2560 | 1312 | 2420 |
| ML-DSA-65 | 4032 | 1952 | 3309 |
| ML-DSA-87 | 4896 | 2592 | 4627 |
| 秘密鍵 | 公開鍵 | 署名サイズ | |
|---|---|---|---|
| ML-DSA-44 | 2560 | 1312 | 2420 |
| ML-DSA-65 | 4032 | 1952 | 3309 |
| ML-DSA-87 | 4896 | 2592 | 4627 |
5. External Functions
5. 外部関数
The signing, verifying, and key generation functions can be split into “external” and “internal” components to simplify APIs and Cryptographic Algorithm Validation Program (CAVP) testing. The external components generate randomness and perform various checks before calling their internal counterparts. The internal components are deterministic and can assume that the external components did not encounter error conditions.
署名、検証、鍵生成の各関数は、API と暗号アルゴリズム検証プログラム(CAVP)による試験を簡素化するために、「外部」コンポーネントと「内部」コンポーネントに分割できます。外部コンポーネントは、乱数(randomness)を生成し、各種のチェックを行ったうえで、対応する内部コンポーネントを呼び出します。内部コンポーネントは決定的であり、外部コンポーネントでエラー条件が発生しなかったことを前提とできます。
The distinction between external and internal functions also simplifies the presentation of algorithms for signing and verification by grouping the operations that are shared between ML-DSA.Sign and HashML-DSA.Sign in ML-DSA.Sign_internal and grouping the operations that are shared between ML-DSA.Verify and HashML-DSA.Verify in ML-DSA.Verify_internal.
外部関数と内部関数の区別は、署名および検証のアルゴリズムの提示も簡素化します。ML-DSA.Sign と HashML-DSA.Sign に共通する操作を ML-DSA.Sign_internal にまとめ、ML-DSA.Verify と HashML-DSA.Verify に共通する操作を ML-DSA.Verify_internal にまとめるためです。
5.1 ML-DSA Key Generation
5.1 ML-DSA の鍵生成
The key generation algorithm ML-DSA.KeyGen takes no input and outputs a public key and a private key, which are both encoded as byte strings.
鍵生成アルゴリズム ML-DSA.KeyGen は、入力を取らず、公開鍵と秘密鍵を出力します。いずれもバイト列として符号化されます。
The algorithm uses an approved RBG to generate a 256-bit (32-byte) random seed 𝜉 that is given as input to ML-DSA.KeyGen_internal (Algorithm 6), which produces the public and private keys.
このアルゴリズムは、承認された RBG を用いて 256 ビット(32 バイト)のランダムなシード 𝜉 を生成し、それを ML-DSA.KeyGen_internal(アルゴリズム 6)に入力として与えます。ML-DSA.KeyGen_internal が公開鍵と秘密鍵を生成します。
Algorithm 1 ML-DSA.KeyGen()
Algorithm 1 ML-DSA.KeyGen()
Generates a public-private key pair.
公開鍵と秘密鍵の鍵ペアを生成します。
5.2 ML-DSA Signing
5.2 ML-DSA の署名
The signing algorithm ML-DSA.Sign (Algorithm 2) takes a private key, a message, and a context string as input\(^{4}\). It outputs a signature that is encoded as a byte string.
署名アルゴリズム ML-DSA.Sign(Algorithm 2)は、秘密鍵、メッセージ、およびコンテキスト文字列を入力として受け取る\(^{4}\)。出力はバイト列として符号化された署名です。
For the default “hedged” version of ML-DSA signing, the algorithm (at line 5) uses an approved RBG to generate a 256-bit (32-byte) random seed \(rnd\). If the deterministic variant is desired, then \(rnd\) is set to the fixed zero string \(\{0\}^{32}\). The value \(rnd\), the private key, and the encoded message are input to ML-DSA.Sign_internal (Algorithm 7), which produces the signature.
ML-DSA の署名のデフォルトである「ヘッジ付き」版では、アルゴリズムは(5 行目で)承認された RBG を用いて 256 ビット(32 バイト)のランダムシード \(rnd\) を生成します。決定的な変種を用いる場合は、\(rnd\) を固定のゼロ列 \(\{0\}^{32}\) とします。値 \(rnd\)、秘密鍵、および符号化されたメッセージを ML-DSA.Sign_internal(Algorithm 7)に入力し、署名を生成します。
Algorithm 2 ML-DSA.Sign\((sk, M, ctx)\)
アルゴリズム 2 ML-DSA.Sign\((sk, M, ctx)\)
Generates an ML-DSA signature.
ML-DSA 署名を生成します。
5.3 ML-DSA Verifying
5.3 ML-DSA の検証
The verification algorithm ML-DSA.Verify (Algorithm 3) takes a public key, a message, a signature, and a context string as input. The public key, signature, and context string are all encoded as byte strings, while the message is a bit string. ML-DSA.Verify outputs a Boolean value that is true if the signature is valid with respect to the message and the public key and false if the signature is invalid. The verification is accomplished by calling ML-DSA.Verify_internal (Algorithm 8) with the public key, the encoded message, and the signature.
検証アルゴリズム ML-DSA.Verify(アルゴリズム 3)は、公開鍵、メッセージ、署名、コンテキスト文字列を入力として取ります。公開鍵、署名、コンテキスト文字列はいずれもバイト列として符号化され、メッセージはビット列です。ML-DSA.Verify はブール値を出力し、その値は、署名がメッセージと公開鍵に関して有効であれば true、署名が無効であれば false です。検証は、公開鍵、符号化されたメッセージ、署名を引数として ML-DSA.Verify_internal(アルゴリズム 8)を呼び出すことによって行われます。
Algorithm 3 ML-DSA.Verify\((pk, M, \sigma, ctx)\)
アルゴリズム 3 ML-DSA.Verify\((pk, M, \sigma, ctx)\)
Verifies a signature \(\sigma\) for a message \(M\).
メッセージ \(M\) に対する署名 \(\sigma\) を検証します。
5.4 Pre-Hash ML-DSA
5.4 事前ハッシュ ML-DSA
For some cryptographic modules that generate ML-DSA signatures, hashing the message in step 6 of ML-DSA.Sign_internal may result in unacceptable performance if the message 𝑀 is large. For example, the platform may require hardware support for hashing to achieve acceptable performance but lack hardware support for SHAKE256 specifically. For some use cases, this may be addressed by signing a digest of the message along with some domain separation information rather than signing the message directly. This version of ML-DSA is known as “pre-hash” ML-DSA or HashML-DSA . In general, the “pure” ML-DSA version is preferred.
ML-DSA 署名を生成する暗号モジュールによっては、メッセージ 𝑀 が大きい場合、ML-DSA.Sign_internal のステップ 6 でメッセージをハッシュすると性能が許容できないものになることがあります。たとえば、そのプラットフォームでは許容できる性能を達成するためにハッシュ計算のハードウェアサポートが必要ですが、SHAKE256 に限ってはハードウェアサポートがない、という場合があります。ユースケースによっては、メッセージを直接署名する代わりに、メッセージのダイジェストを何らかのドメイン分離情報とともに署名することで、これに対処できます。この版の ML-DSA は「事前ハッシュ(pre-hash)」ML-DSA、すなわち HashML-DSA と呼ばれます。一般には、「純粋な(pure)」ML-DSA 版が推奨されます。
While key generation for HashML-DSA is the same as for ML-DSA, it is not the same for the signing algorithm HashML-DSA.Sign or the verification algorithm HashML-DSA.Verify. Like ML-DSA, the signing algorithm of HashML-DSA takes the content to be signed, the private key, and a context as input, as well as a hash function or XOF that is to be used to pre-hash the content to be signed. The context string has a maximum length of 255 bytes. By default, the context is the empty string, though applications may specify the use of a non-empty context string.
HashML-DSA の鍵生成は ML-DSA と同じですが、署名アルゴリズム HashML-DSA.Sign および検証アルゴリズム HashML-DSA.Verify は同じではありません。ML-DSA と同様に、HashML-DSA の署名アルゴリズムは、署名対象のコンテンツ、秘密鍵、コンテキストを入力として取り、さらに署名対象のコンテンツの事前ハッシュに用いるハッシュ関数または XOF も入力として取ります。コンテキスト文字列の最大長は 255 バイトです。デフォルトではコンテキストは空文字列ですが、アプリケーションが空でないコンテキスト文字列の使用を指定してもよいです。
The identifier for a signature (e.g., the object identifier [OID]) should indicate whether the signature is a ML-DSA signature or a pre-hash HashML-DSA signature. In the case of pre-hash signatures, the identifier should also indicate the hash function or XOF used to compute the pre-hash. 5 While a single key pair may be used for both ML-DSA and HashML-DSA signatures, it is recommended that each key pair only be used for one version or the other. If a non-empty context string is to be used, this should either be indicated by the signature’s identifier or by the application with which the signature is being used.
署名の識別子(例:オブジェクト識別子[OID])は、その署名が ML-DSA 署名であるか事前ハッシュ HashML-DSA 署名であるかを示すことが望まれます。事前ハッシュ署名の場合、識別子は事前ハッシュの計算に用いたハッシュ関数または XOF も示すことが望まれます。5 単一の鍵ペアを ML-DSA 署名と HashML-DSA 署名の両方に用いてもよいですが、各鍵ペアはいずれか一方の版にのみ用いることが推奨されます。空でないコンテキスト文字列を使用する場合は、そのことを署名の識別子によって、または署名が用いられるアプリケーションによって示すことが望まれます。
If the default “hedged” variant of is used, the 32-byte random value \(rnd\) shall be generated by the cryptographic module that generates the signature (i.e., that runs ML-DSA.Sign_internal). However, all other steps of signing may be performed outside of the cryptographic module that generates the signature. In the case of pre-hashing, the hash or XOF of the content to be signed must be computed within a FIPS 140-validated cryptographic module, but it may be a different cryptographic module than the one that generates the signature.
デフォルトの「ヘッジ付き」変種を使用する場合、32 バイトの乱数値 \(rnd\) は、署名を生成する暗号モジュール(すなわち ML-DSA.Sign_internal を実行する暗号モジュール)によって生成されなければなりません。ただし、署名のその他のステップはすべて、署名を生成する暗号モジュールの外部で実行してもよいです。事前ハッシュの場合、署名対象のコンテンツのハッシュまたは XOF は FIPS 140 で検証された暗号モジュール内で計算されなければなりませんが、その暗号モジュールは署名を生成するものとは別の暗号モジュールでもよいです。
If the content to be signed is large, hashing of the content is often performed at the application level. For example, in the Cryptographic Message Syntax [29], a digest of the content may be computed, and that digest is signed along with other attributes. If the content is not hashed at the application level, the pre-hash version of ML-DSA signing may be used.
署名対象のコンテンツが大きい場合、コンテンツのハッシュはしばしばアプリケーションレベルで行われます。たとえば Cryptographic Message Syntax [29] では、コンテンツのダイジェストを計算し、そのダイジェストを他の属性とともに署名することがあります。コンテンツがアプリケーションレベルでハッシュされない場合は、事前ハッシュ版の ML-DSA 署名を用いてもよいです。
In order to maintain the same level of security strength when the content is hashed at the application level or using HashML-DSA, the digest that is signed needs to be generated using an approved hash function or XOF (e.g., from FIPS 180 [8] or FIPS 202 [7]) that provides at least \(\lambda\) bits of classical security strength against both collision and second preimage attacks [7, Table 4].6 The verification of a signature that is created in this way will require the verify function to generate a digest from the message in the same way to be used as input for the verification function.
コンテンツをアプリケーションレベルで、または HashML-DSA を用いてハッシュする場合に同じセキュリティ強度を維持するには、署名されるダイジェストを、衝突攻撃と第二原像攻撃の両方に対して少なくとも \(\lambda\) ビットの古典的セキュリティ強度を提供する承認されたハッシュ関数または XOF(例:FIPS 180 [8] または FIPS 202 [7] のもの)を用いて生成する必要があります [7, 表4]。6このようにして作成された署名を検証するには、検証関数が同じ方法でメッセージからダイジェストを生成し、それを検証関数の入力として用いる必要があります。
5.4.1 HashML-DSA Signing and Verifying
5.4.1 HashML-DSA の署名と検証
In the HashML-DSA version, the message input to ML-DSA.Sign_internal is the result of applying either a hash function or a XOF to the content to be signed. The output of the hash function or XOF is prepended by a one-byte domain separator, one byte that indicates the length of the context string, the context string, and the distinguished encoding rules (DER) encoding of the hash function or XOF’s OID. The domain separator has a value of one for “pre-hash” signing. The DER encoding of the OID includes the tag and length.
HashML-DSA 版では、ML-DSA.Sign_internal へのメッセージ入力は、署名対象のコンテンツにハッシュ関数または XOF を適用した結果です。ハッシュ関数または XOF の出力の前には、1 バイトのドメイン分離子、コンテキスト文字列の長さを示す 1 バイト、コンテキスト文字列、およびハッシュ関数または XOF の OID の識別符号化規則(DER)による符号化が付加されます。ドメイン分離子の値は、「事前ハッシュ」署名では 1 です。OID の DER 符号化にはタグと長さが含まれます。
Algorithm 4 shows the DER encodings of the OIDs for SHA-256, SHA-512, and SHAKE128. However, it may be used with other hash functions or XOFs.
アルゴリズム 4 には、SHA-256、SHA-512、SHAKE128 の OID の DER 符号化を示します。ただし、このアルゴリズムは他のハッシュ関数や XOF とともに用いてもよいです。
Algorithm 4 HashML-DSA.Sign\((sk, M, ctx, \mathsf{PH})\)
アルゴリズム 4 HashML-DSA.Sign\((sk, M, ctx, \mathsf{PH})\)
Generate a “pre-hash” ML-DSA signature.
「事前ハッシュ」ML-DSA 署名を生成します。
Algorithm 5 presents the signature verification for HashML-DSA. This function constructs \(M'\) in the same way as Algorithm 4 and passes the resulting \(M'\) to Algorithm ML-DSA.Verify_internal for verification. As with the pre-hash signature generation, \(M'\) may be constructed outside of the cryptographic module that performs ML-DSA.Verify_internal. However, in the case of HashML-DSA, the hash or XOF of the content must be computed within a FIPS 140-validated cryptographic module, which may be a different cryptographic module than the one that performs ML-DSA.Verify_internal.
アルゴリズム 5 は、HashML-DSA の署名検証を示します。この関数は、アルゴリズム 4 と同じ方法で \(M'\) を構成し、得られた \(M'\) を検証のためにアルゴリズム ML-DSA.Verify_internal に渡します。事前ハッシュ署名の生成と同様に、\(M'\) は ML-DSA.Verify_internal を実行する暗号モジュールの外部で構成してもよいです。ただし HashML-DSA の場合、コンテンツのハッシュまたは XOF は FIPS 140 で検証された暗号モジュール内で計算されなければなりません。その暗号モジュールは、ML-DSA.Verify_internal を実行するものとは別の暗号モジュールでもよいです。
As noted in Section 5.4, the identifier associated with the signature should indicate whether ML-DSA or the pre-hash version HashML-DSA of signature verification should be used, as well as the hash function or XOF to be used to compute the pre-hash. A non-empty context string should be used in verification if one is specified either in the signature’s identifier or by the application with which the signature is being used.
5.4 節で述べたとおり、署名に関連付けられた識別子は、署名検証に ML-DSA と事前ハッシュ版 HashML-DSA のどちらを用いるべきか、および事前ハッシュの計算に用いるハッシュ関数または XOF を示すことが望まれます。署名の識別子において、または署名が用いられるアプリケーションによって空でないコンテキスト文字列が指定されている場合は、検証にそのコンテキスト文字列を用いることが望まれます。
Algorithm 5 HashML-DSA.Verify\((pk, M, \sigma, ctx, \mathsf{PH})\)
アルゴリズム 5 HashML-DSA.Verify\((pk, M, \sigma, ctx, \mathsf{PH})\)
Verifies a pre-hash HashML-DSA signature.
事前ハッシュ HashML-DSA 署名を検証します。
6. Internal Functions
6. 内部関数
This section describes the functions for ML-DSA key generation, signature generation, and signature verification. Where randomness is required, the random values are provided as inputs to the functions. The interfaces specified in this section will be used when testing of ML-DSA implementations is performed through the CAVP.
本節では、ML-DSA の鍵生成、署名生成、署名検証のための関数について述べます。乱数(randomness)が必要な場合、乱数値は関数への入力として与えられます。本節で規定するインタフェースは、CAVP を通じて ML-DSA 実装の試験を行う際に用いられます。
Other than for testing purposes, the interfaces for key generation and signature generation specified in this section should not be made available to applications, as any random values required for key generation and signature generation shall be generated by the cryptographic module. Section 5 provides guidance on the interfaces to be made available to applications.7
試験目的を除き、本節で規定する鍵生成および署名生成のインタフェースはアプリケーションから利用可能にしないことが望まれます。鍵生成および署名生成に必要な乱数値は、暗号モジュールによって生成されなければならないからです。アプリケーションから利用可能にするインタフェースについては 5 節で指針を示します。7
6.1 ML-DSA Key Generation (Internal)
6.1 ML-DSA の鍵生成(内部)
The internal key generation algorithm ML-DSA.KeyGen_internal takes a 32-byte random seed as input and outputs a public key and a private key that are both encoded as byte strings.
内部鍵生成アルゴリズム ML-DSA.KeyGen_internal は、32 バイトのランダムなシードを入力として取り、公開鍵と秘密鍵を出力します。いずれもバイト列として符号化されます。
The seed \(\xi\) is expanded as needed using an XOF (i.e., a byte-variant of SHAKE256) denoted by H to produce other random values.8 In particular:
シード \(\xi\) は、H で表される XOF(すなわち SHAKE256 のバイト版)を用いて必要に応じて拡張され、他の乱数値が生成されます。8具体的には次のとおりです。
•A \(32\)-byte public random seed \(\rho\). Using this seed, a polynomial matrix \(\mathbf{A} \in R_q^{k\times\ell}\) is pseudorandomly sampled9 from \(R_q^{k\times\ell}\).
•\(32\) バイトの公開ランダムシード \(\rho\)。このシードを用いて、多項式行列 \(\mathbf{A} \in R_q^{k\times\ell}\) が \(R_q^{k\times\ell}\) から擬似ランダムにサンプリングされます。9
•A \(64\)-byte private random seed \(\rho'\). Using this seed, the polynomial vectors \(\mathbf{s}_1 \in R_q^{\ell}\) and \(\mathbf{s}_2 \in R_q^{k}\) are pseudorandomly sampled from the subset of polynomial vectors whose coordinate polynomials have short coefficients (i.e., in the range \([-\eta, \eta]\)).
•\(64\) バイトの秘密ランダムシード \(\rho'\)。このシードを用いて、多項式ベクトル \(\mathbf{s}_1 \in R_q^{\ell}\) および \(\mathbf{s}_2 \in R_q^{k}\) が、座標多項式の係数が小さい(すなわち \([-\eta, \eta]\) の範囲にある)多項式ベクトルの部分集合から擬似ランダムにサンプリングされます。
•A 32-byte private random seed 𝐾 for use during signing.
•署名時に使用する 32 バイトの秘密ランダムシード 𝐾。
The core cryptographic operation computes the public value
中核となる暗号演算は、次の公開値を計算します。
The vector \(\mathbf{t}\) together with the matrix \(\mathbf{A}\) may be considered an expanded form of the public key. The vector \(\mathbf{t}\) is compressed in the actual public key by dropping the \(d\) least significant bits from each coefficient, thus producing the polynomial vector \(\mathbf{t}_1\). This compression is an optimization for performance, not security. The low-order bits of \(\mathbf{t}\) can be reconstructed from a small number of signatures and, therefore, need not be regarded as secret.
ベクトル \(\mathbf{t}\) は、行列 \(\mathbf{A}\) と合わせて、公開鍵の展開形とみなすことができます。実際の公開鍵では、各係数から最下位の \(d\) ビットを切り捨てることでベクトル \(\mathbf{t}\) を圧縮し、多項式ベクトル \(\mathbf{t}_1\) を得ます。この圧縮は性能のための最適化であり、セキュリティのためのものではありません。\(\mathbf{t}\) の下位ビットは少数の署名から復元できるため、秘密として扱う必要はありません。
The ML-DSA public key \(pk\) is a byte encoding of the public random seed \(\rho\) and the compressed polynomial vector \(\mathbf{t}_1\).
ML-DSA の公開鍵 \(pk\) は、公開のランダムシード \(\rho\) と圧縮された多項式ベクトル \(\mathbf{t}_1\) をバイト符号化したものです。
The ML-DSA private key 𝑠𝑘 is a byte encoding of the public random seed 𝜌, a private random seed 𝐾 for use during signing, a 64-byte hash 𝑡𝑟 of the public key for use during signing, the secret polynomial
ML-DSA の秘密鍵 𝑠𝑘 は、公開のランダムシード 𝜌、署名時に使用する秘密のランダムシード 𝐾、署名時に使用する公開鍵の 64 バイトのハッシュ値 𝑡𝑟、秘密の多項式
vectors \(\mathbf{s}_1\) and \(\mathbf{s}_2\), and a polynomial vector \(\mathbf{t}_0\) encoding the \(d\) least significant bits of each coefficient of the uncompressed public-key polynomial \(\mathbf{t}\).
ベクトル \(\mathbf{s}_1\) と \(\mathbf{s}_2\)、および圧縮前の公開鍵多項式 \(\mathbf{t}\) の各係数の下位 \(d\) ビットを符号化した多項式ベクトル \(\mathbf{t}_0\)。
Algorithm 6 ML-DSA.KeyGen_internal(\(\xi\))
Algorithm 6 ML-DSA.KeyGen_internal(\(\xi\))
6.2 ML-DSA Signing (Internal)
6.2 ML-DSA の署名(内部)
ML-DSA.Sign_internal (Algorithm 7) outputs a signature encoded as a byte string. It takes a private key \(sk\) encoded as a byte string, a formatted message \(M'\) encoded as a bit string, and a 32-byte string \(rnd\) as input. There are two ways that a signing algorithm can use ML-DSA.Sign_internal: “hedged” and “deterministic.” The default “hedged” variants of ML-DSA.Sign and HashML-DSA.Sign use a fresh random value for \(rnd\), while the optional deterministic variants use the constant byte string \(\{0\}^{32}\) (see Section 3).
ML-DSA.Sign_internal(Algorithm 7)は、バイト列として符号化された署名を出力します。入力として、バイト列として符号化された秘密鍵 \(sk\)、ビット列として符号化された整形済みメッセージ \(M'\)、および 32 バイトの文字列 \(rnd\) を受け取ります。署名アルゴリズムが ML-DSA.Sign_internal を用いる方法には「ヘッジ付き」と「決定的」の 2 通りがあります。ML-DSA.Sign と HashML-DSA.Sign のデフォルトである「ヘッジ付き」変種は \(rnd\) に新たな乱数値を用い、オプションの決定的変種は定数バイト列 \(\{0\}^{32}\) を用います(Section 3 を参照してください)。
In both variants, the signer first extracts the following from the private key: the public random seed \(\rho\), the \(32\)-byte private random seed \(K\), the \(64\)-byte hash of the public key \(tr\), the secret polynomial vectors \(\mathbf{s}_1\) and \(\mathbf{s}_2\), and the polynomial vector \(\mathbf{t}_0\) encoding the \(d\) least significant bits of each coefficient of the uncompressed public-key polynomial \(\mathbf{t}\). \(\rho\) is then expanded to the same matrix \(\mathbf{A}\) as in key generation.
どちらの変種でも、署名者はまず秘密鍵から次のものを取り出す:公開ランダムシード \(\rho\)、\(32\) バイトの秘密ランダムシード \(K\)、公開鍵の \(64\) バイトのハッシュ値 \(tr\)、秘密多項式ベクトル \(\mathbf{s}_1\) と \(\mathbf{s}_2\)、および圧縮前の公開鍵多項式 \(\mathbf{t}\) の各係数の下位 \(d\) ビットを符号化した多項式ベクトル \(\mathbf{t}_0\)。次に、\(\rho\) を鍵生成時と同じ行列 \(\mathbf{A}\) に展開します。
Before the message \(M\) is signed, it is concatenated with the public-key hash \(tr\) and hashed down to a \(64\)-byte message representative \(\mu\) using H.
メッセージ \(M\) は、署名される前に公開鍵のハッシュ値 \(tr\) と連結され、H を用いて \(64\) バイトのメッセージ代表値 \(\mu\) にハッシュされます。
The signer produces an additional \(64\)-byte seed \(\rho''\) for private randomness during each signing operation. \(\rho''\) is computed as \(\rho'' \leftarrow \mathsf{H}(K \| rnd \| \mu, 64)\). In the default hedged variant, \(rnd\) is the output of an RBG, while in the deterministic variant, \(rnd\) is a \(32\)-byte string that consists entirely of zeros. This is the only difference between the deterministic and hedged variant of ML-DSA.Sign.
署名者は、各署名操作において秘密の乱数性のために追加の \(64\) バイトのシード \(\rho''\) を生成します。\(\rho''\) は \(\rho'' \leftarrow \mathsf{H}(K \| rnd \| \mu, 64)\) として計算されます。デフォルトのヘッジ付き変種では \(rnd\) は RBG の出力であり、決定的変種では \(rnd\) はすべてゼロからなる \(32\) バイトの文字列です。これが ML-DSA.Sign の決定的変種とヘッジ付き変種の唯一の違いです。
The main part of the signing algorithm consists of a rejection sampling loop in which each iteration of the loop either produces a valid signature or an invalid signature whose release would leak information about the private key. The loop is repeated until a valid signature is produced, which can then be encoded as a byte string and output.10 The rejection sampling loop follows the Fiat-Shamir With Aborts paradigm [10] and (aside from the rejection step) is similar in structure to Schnorr signatures [30] (e.g., EdDSA [31]). The signer first produces a “commitment” \(\mathbf{w}_1\) and then pseudorandomly derives a “challenge” \(c\) from \(\mathbf{w}_1\) and the message representative \(\mu\). Finally, the signer computes a response \(\mathbf{z}\).
署名アルゴリズムの主要部は棄却サンプリングのループからなります。ループの各反復は、有効な署名か、公開すると秘密鍵に関する情報が漏洩する無効な署名のいずれかを生成します。ループは有効な署名が生成されるまで繰り返され、生成された署名はバイト列として符号化して出力できます。10この棄却サンプリングのループは Fiat-Shamir With Aborts パラダイム [10] に従っており、(棄却ステップを除けば)構造は Schnorr 署名 [30](例:EdDSA [31])に似ています。署名者はまず「コミットメント」\(\mathbf{w}_1\) を生成し、次に \(\mathbf{w}_1\) とメッセージ代表値 \(\mu\) から「チャレンジ」\(c\) を擬似ランダムに導出します。最後に、署名者は応答 \(\mathbf{z}\) を計算します。
In more detail, the main computations involved in the rejection sampling loop are as follows:
より詳しく述べると、棄却サンプリングのループに含まれる主な計算は次のとおりです。
•Using the ExpandMask function (Algorithm 34), the seed \(\rho''\), and a counter \(\kappa\), a polynomial vector \(\mathbf{y} \in R_q^\ell\) is pseudorandomly sampled from the subset of polynomial vectors whose coefficients are moderately short (i.e., in the range \([-\gamma_1 + 1, \gamma_1]\)).
•ExpandMask 関数(Algorithm 34)、シード \(\rho''\)、およびカウンタ \(\kappa\) を用いて、係数が適度に短い(すなわち範囲 \([-\gamma_1 + 1, \gamma_1]\) にある)多項式ベクトルの部分集合から、多項式ベクトル \(\mathbf{y} \in R_q^\ell\) を擬似ランダムにサンプリングします。
•From \(\mathbf{y}\), the signer computes the commitment \(\mathbf{w}_1\) by computing \(\mathbf{w} = \mathbf{A}\mathbf{y}\) and then rounding to a nearby multiple of \(2\gamma_2\) using HighBits (Algorithm 37).
•署名者は \(\mathbf{y}\) から、\(\mathbf{w} = \mathbf{A}\mathbf{y}\) を計算し、HighBits(Algorithm 37)を用いてそれを \(2\gamma_2\) の近傍の倍数に丸めることで、コミットメント \(\mathbf{w}_1\) を計算します。
•\(\mathbf{w}_1\) and \(\mu\) are concatenated and hashed to produce the commitment hash \(\tilde{c}\). This uses the function w1Encode (Algorithm 28). The byte string \(\tilde{c}\) is used to pseudorandomly sample a polynomial \(c \in R_q\) that has coefficients in \(\{-1, 0, 1\}\) and Hamming weight \(\tau\). The sampling is done with the function SampleInBall (Algorithm 29).11
•\(\mathbf{w}_1\) と \(\mu\) を連結してハッシュし、コミットメントハッシュ \(\tilde{c}\) を生成します。これには関数 w1Encode(Algorithm 28)を用います。バイト列 \(\tilde{c}\) を用いて、係数が \(\{-1, 0, 1\}\) に属しハミング重みが \(\tau\) である多項式 \(c \in R_q\) を擬似ランダムにサンプリングします。サンプリングは関数 SampleInBall(Algorithm 29)で行います。11
•The signer computes the response \(\mathbf{z} = \mathbf{y} + c\mathbf{s}_1\) and performs various validity checks. If any of the checks fails, the signer will continue the rejection sampling loop.
•署名者は応答 \(\mathbf{z} = \mathbf{y} + c\mathbf{s}_1\) を計算し、各種の妥当性検査を行います。いずれかの検査に失敗した場合、署名者は棄却サンプリングのループを継続します。
•If the checks pass, the signer can compute a hint polynomial \(\mathbf{h}\), which will allow the verifier to reconstruct \(\mathbf{w}_1\) using the compressed public key along with the other components of the signature. This uses the function MakeHint (Algorithm 39). The signer will then output the final signature, which is a byte encoding of the commitment hash \(\tilde{c}\), the response \(\mathbf{z}\), and the hint \(\mathbf{h}\).
•検査に合格した場合、署名者はヒント多項式 \(\mathbf{h}\) を計算できます。これにより、検証者は圧縮された公開鍵と署名の他の構成要素を用いて \(\mathbf{w}_1\) を再構成できます。これには関数 MakeHint(Algorithm 39)を用います。その後、署名者は最終的な署名を出力します。これはコミットメントハッシュ \(\tilde{c}\)、応答 \(\mathbf{z}\)、およびヒント \(\mathbf{h}\) のバイト符号化です。
In addition, there is an alternative way of implementing the validity checks on 𝐳 and the computation of 𝐡, which is described in Section 5.1 of [6]. This method may also be used in implementations of ML-DSA.
さらに、𝐳 の妥当性チェックと 𝐡 の計算には別の実装方法があり、[6] の Section 5.1 で説明されています。この方法を ML-DSA の実装で使用してもよいです。
In Algorithm 7, variables are sometimes used to store products to avoid recomputing them later in the signing algorithm. These precomputed products are denoted in the pseudocode by a pair of double angle brackets enclosing the variables being multiplied (e.g., \(\langle\langle c\mathbf{s}_1 \rangle\rangle\)).
Algorithm 7 では、署名アルゴリズムの後の段階で積を再計算しないように、変数に積を保存しておくことがあります。こうした事前計算された積は、擬似コードでは乗算する変数を二重山括弧で囲んで表します(例:\(\langle\langle c\mathbf{s}_1 \rangle\rangle\))。
Algorithm 7 ML-DSA.Sign_internal\((sk, M', rnd)\)
Algorithm 7 ML-DSA.Sign_internal\((sk, M', rnd)\)
Deterministic algorithm to generate a signature for a formatted message \(M'\).
整形済みメッセージ \(M'\) に対する署名を生成する決定的アルゴリズム。
6.3 ML-DSA Verifying (Internal)
6.3 ML-DSA の検証(内部)
The algorithm ML-DSA.Verify_internal (Algorithm 8) takes a public key \(pk\) encoded as a byte string, a message \(M\) encoded as a bit string, and a signature \(\sigma\) encoded as a byte string as input. No randomness is required for ML-DSA.Verify_internal. It produces a Boolean value (i.e., a value that is true if the signature is valid with respect to the message and public key and false if the signature is invalid) as output. Algorithm 8 specifies the lengths of the signature 𝜎 and the public key 𝑝𝑘 in terms of the parameters described in Table 1. If an implementation of ML-DSA.Verify_internal can accept inputs for 𝜎 or 𝑝𝑘 of any other length, it shall return false whenever the length of either of these inputs differs from its specified length.
アルゴリズム ML-DSA.Verify_internal(Algorithm 8)は、バイト列として符号化された公開鍵 \(pk\)、ビット列として符号化されたメッセージ \(M\)、およびバイト列として符号化された署名 \(\sigma\) を入力として受け取ります。ML-DSA.Verify_internal に乱数は不要です。出力はブール値(すなわち、署名がメッセージと公開鍵に対して有効であれば true、無効であれば false となる値)です。Algorithm 8 は、署名 𝜎 と公開鍵 𝑝𝑘 の長さを 表1 に示すパラメータを用いて規定しています。ML-DSA.Verify_internal の実装がこれ以外の長さの 𝜎 または 𝑝𝑘 を入力として受け付けうる場合、その実装は、これらの入力のいずれかの長さが規定の長さと異なるときは常に false を返さなければなりません。
The verifier first extracts the public random seed \(\rho\) and the compressed polynomial vector \(\mathbf{t}_1\) from the public key \(pk\) and then extracts the signer’s commitment hash \(\tilde{c}\), response \(\mathbf{z}\), and hint \(\mathbf{h}\) from the signature \(\sigma\). The verifier may find that the hint was not properly byte-encoded, denoted by the symbol “\(\bot\),” in which case the verification algorithm will immediately return false to indicate that the signature is invalid.
検証者はまず、公開鍵 \(pk\) から公開ランダムシード \(\rho\) と圧縮された多項式ベクトル \(\mathbf{t}_1\) を取り出し、次に署名 \(\sigma\) から署名者のコミットメントハッシュ \(\tilde{c}\)、応答 \(\mathbf{z}\)、およびヒント \(\mathbf{h}\) を取り出します。検証者は、ヒントが正しくバイト符号化されていないこと(記号「\(\bot\)」で表す)を見いだす場合があります。その場合、検証アルゴリズムは直ちに false を返し、署名が無効であることを示します。
Assuming that the signature is successfully extracted from its byte encoding, the verifier pseudorandomly derives \(\mathbf{A}\) from \(\rho\), as is done in key generation and signing, and creates a message representative \(\mu\) by hashing the concatenation of \(tr\) (i.e., the hash of the public key \(pk\)) and the message \(M\). The verifier then attempts to reconstruct the signer’s commitment (i.e., the polynomial vector \(\mathbf{w}_1\)) from the public key \(pk\) and the signature \(\sigma\). In ML-DSA.Sign_internal, \(\mathbf{w}_1\) is computed by rounding \(\mathbf{w} = \mathbf{A}\mathbf{y}\). In ML-DSA.Verify_internal, the reconstructed value of \(\mathbf{w}_1\) is called \(\mathbf{w}'_1\) since it may have been computed in a different way if the signature is invalid. This \(\mathbf{w}'_1\) is computed through the following process:
署名がそのバイト符号化から正しく取り出せたとすると、検証者は、鍵生成および署名と同様に \(\rho\) から \(\mathbf{A}\) を擬似ランダムに導出し、\(tr\)(すなわち公開鍵 \(pk\) のハッシュ)とメッセージ \(M\) を連結したもののハッシュをとってメッセージ代表値 \(\mu\) を作成します。次に検証者は、公開鍵 \(pk\) と署名 \(\sigma\) から署名者のコミットメント(すなわち多項式ベクトル \(\mathbf{w}_1\))の再構成を試みます。ML-DSA.Sign_internal では、\(\mathbf{w}_1\) は \(\mathbf{w} = \mathbf{A}\mathbf{y}\) を丸めることによって計算されます。ML-DSA.Verify_internal では、\(\mathbf{w}_1\) の再構成値を \(\mathbf{w}'_1\) と呼びます。署名が無効である場合には、異なる方法で計算されている可能性があるからです。この \(\mathbf{w}'_1\) は次の手順で計算されます。
•Derive the challenge polynomial \(c\) from the signer’s commitment hash \(\tilde{c}\), just as similarly is done in ML-DSA.Sign_internal.
•ML-DSA.Sign_internal で行うのと同様に、署名者のコミットメントハッシュ \(\tilde{c}\) からチャレンジ多項式 \(c\) を導出します。
•Use the signer’s response \(\mathbf{z}\) to compute
•署名者の応答 \(\mathbf{z}\) を用いて次を計算します。
Assuming the signature was computed correctly, as in ML-DSA.Sign_internal, it follows that
署名が ML-DSA.Sign_internal のとおり正しく計算されていれば、次が成り立ちます。
because \(c\) and \(\mathbf{s}_2\) have small coefficients, and \(\mathbf{t}_1 \cdot 2^d \approx \mathbf{t}\).
これは、\(c\) と \(\mathbf{s}_2\) の係数が小さく、かつ \(\mathbf{t}_1 \cdot 2^d \approx \mathbf{t}\) であるためです。
•Use the signer’s hint \(\mathbf{h}\) to obtain \(\mathbf{w}'_1\) from \(\mathbf{w}'_{\text{Approx}}\).
•署名者のヒント \(\mathbf{h}\) を用いて、\(\mathbf{w}'_{\text{Approx}}\) から \(\mathbf{w}'_1\) を得ます。
Finally, the verifier checks that the signer’s response \(\mathbf{z}\) and the signer’s hint \(\mathbf{h}\) are valid and that the reconstructed \(\mathbf{w}'_1\) is consistent with the signer’s commitment hash \(\tilde{c}\). More precisely, the verifier checks that all of the coefficients of \(\mathbf{z}\) are sufficiently small (i.e., in the range \((-(\gamma_1 - \beta), \gamma_1 - \beta)\)), \(\mathbf{h}\) contains no more than \(\omega\) nonzero coefficients, and \(\tilde{c}\) matches the hash \(\tilde{c}'\) of the message representative \(\mu\) concatenated with \(\mathbf{w}'_1\) (represented as a byte string). If all of these checks succeed, then ML-DSA.Verify_internal returns true. Otherwise, it returns false.
最後に検証者は、署名者の応答 \(\mathbf{z}\) と署名者のヒント \(\mathbf{h}\) が有効であること、および再構成した \(\mathbf{w}'_1\) が署名者のコミットメントハッシュ \(\tilde{c}\) と整合することを確認します。より正確には、検証者は、\(\mathbf{z}\) のすべての係数が十分に小さい(すなわち範囲 \((-(\gamma_1 - \beta), \gamma_1 - \beta)\) 内にある)こと、\(\mathbf{h}\) の非ゼロ係数が \(\omega\) 個以下であること、および \(\tilde{c}\) が、メッセージ代表値 \(\mu\) と(バイト列として表した)\(\mathbf{w}'_1\) を連結したもののハッシュ \(\tilde{c}'\) と一致することを確認します。これらの確認がすべて成功すれば、ML-DSA.Verify_internal は true を返します。そうでなければ false を返します。
Algorithm 8 \(\mathsf{ML\text{-}DSA.Verify\_internal}(pk, M', \sigma)\)
Algorithm 8 \(\mathsf{ML\text{-}DSA.Verify\_internal}(pk, M', \sigma)\)
7. Auxiliary Functions
7. 補助関数
This section provides pseudocode for subroutines utilized by ML-DSA, including functions for data-type conversions, arithmetic, and sampling.
本節では、ML-DSA が利用するサブルーチンの擬似コードを示します。これには、データ型の変換、算術演算、サンプリングのための関数が含まれます。
7.1 Conversion Between Data Types
7.1 データ型間の変換
While the primary data type in ML-DSA is a byte string, other data types are used as well. The goal in this section is to construct procedures for translating between the various algebraic objects defined in Section 2.3. Algorithms 9–13 are intermediate procedures for converting between bit strings, byte strings, and integers.
ML-DSA の主要なデータ型はバイト列ですが、他のデータ型も使用します。本節の目的は、Section 2.3 で定義した各種の代数的対象の間で変換する手続きを構成することです。Algorithms 9–13 は、ビット列、バイト列、整数の間で変換するための中間的な手続きです。
Algorithm 9 \(\mathsf{IntegerToBits}(x, \alpha)\)
Algorithm 9 \(\mathsf{IntegerToBits}(x, \alpha)\)
Algorithm 10 \(\mathsf{BitsToInteger}(y, \alpha)\)
Algorithm 10 \(\mathsf{BitsToInteger}(y, \alpha)\)
Algorithm 11 \(\mathsf{IntegerToBytes}(x, \alpha)\)
Algorithm 11 \(\mathsf{IntegerToBytes}(x, \alpha)\)
Algorithm 12 \(\mathsf{BitsToBytes}(y)\)
Algorithm 12 \(\mathsf{BitsToBytes}(y)\)
Converts a bit string into a byte string using little-endian order.
リトルエンディアン順でビット列をバイト列に変換します。
Algorithm 13 \(\mathsf{BytesToBits}(z)\)
Algorithm 13 \(\mathsf{BytesToBits}(z)\)
Converts a byte string into a bit string using little-endian order.
リトルエンディアン順でバイト列をビット列に変換します。
Algorithms 14 and 15 translate byte strings into coefficients of polynomials in \(R\). CoeffFromThreeBytes uses a 3-byte string to either generate an element of \(\{0, 1, \dots, q - 1\}\) or return the blank symbol \(\bot\). CoeffFromHalfByte uses an element of \(\{0, 1, \dots, 15\}\) to either generate an element of \(\{-\eta, -\eta+1, \dots, \eta\}\) or return \(\bot\). These two procedures will be used in the uniform sampling algorithms RejNTTPoly and RejBoundedPoly, which are discussed in Section 7.3.
Algorithms 14 と 15 は、バイト列を \(R\) の多項式の係数に変換します。CoeffFromThreeBytes は、3 バイトの列を用いて \(\{0, 1, \dots, q - 1\}\) の元を生成するか、空記号 \(\bot\) を返します。CoeffFromHalfByte は、\(\{0, 1, \dots, 15\}\) の元を用いて \(\{-\eta, -\eta+1, \dots, \eta\}\) の元を生成するか、\(\bot\) を返します。これら二つの手続きは、Section 7.3 で述べる一様サンプリングアルゴリズム RejNTTPoly および RejBoundedPoly で使用します。
Algorithm 14 \(\mathsf{CoeffFromThreeBytes}(b_0, b_1, b_2)\)
Algorithm 14 \(\mathsf{CoeffFromThreeBytes}(b_0, b_1, b_2)\)
Generates an element of \(\{0, 1, 2, \dots, q - 1\} \cup \{\bot\}\).
\(\{0, 1, 2, \dots, q - 1\} \cup \{\bot\}\) の元を生成します。
Algorithm 15 \(\mathsf{CoeffFromHalfByte}(b)\)
Algorithm 15 \(\mathsf{CoeffFromHalfByte}(b)\)
Let \(\eta \in \{2, 4\}\). Generates an element of \(\{-\eta, -\eta + 1, \dots, \eta\} \cup \{\bot\}\).
\(\eta \in \{2, 4\}\) とします。\(\{-\eta, -\eta + 1, \dots, \eta\} \cup \{\bot\}\) の元を生成します。
Algorithms 16–19 efficiently translate an element \(w \in R\) into a byte string and vice versa under the assumption that the coefficients of \(w\) are in a restricted range. SimpleBitPack assumes that \(w_i \in [0, b]\) for some positive integer \(b\) and packs \(w\) into a byte string of length \(32 \cdot \mathsf{bitlen}\, b\). BitPack allows for the more general restriction \(w_i \in [-a, b]\). The BitPack algorithm works by merely subtracting \(w\) from the polynomial \(\sum_{i=0}^{255} bX^i\).
Algorithms 16–19 は、元 \(w \in R\) の係数が制限された範囲にあるという仮定の下で、\(w\) をバイト列に、またその逆に効率よく変換します。SimpleBitPack は、ある正の整数 \(b\) について \(w_i \in [0, b]\) であると仮定し、\(w\) を長さ \(32 \cdot \mathsf{bitlen}\, b\) のバイト列にパックします。BitPack は、より一般的な制限 \(w_i \in [-a, b]\) を許容します。BitPack アルゴリズムは、多項式 \(\sum_{i=0}^{255} bX^i\) から \(w\) を減じるだけで動作します。
Algorithm 16 \(\mathsf{SimpleBitPack}(w, b)\)
Algorithm 16 \(\mathsf{SimpleBitPack}(w, b)\)
Encodes a polynomial \(w\) into a byte string.
多項式 \(w\) をバイト列に符号化します。
Algorithm 17 \(\mathsf{BitPack}(w, a, b)\)
Algorithm 17 \(\mathsf{BitPack}(w, a, b)\)
Encodes a polynomial \(w\) into a byte string.
多項式 \(w\) をバイト列に符号化します。
SimpleBitUnpack and BitUnpack are used to decode the byte strings produced by the above functions. For some choices of \(a\) and \(b\), there exist malformed byte strings that will cause SimpleBitUnpack and BitUnpack to output polynomials whose coefficients are not in the ranges \([0, b]\) and \([-a, b]\), respectively. This can be a concern when running SimpleBitUnpack and BitUnpack on inputs that may come from an untrusted source.
SimpleBitUnpack と BitUnpack は、上記の関数が生成したバイト列の復号に使用します。\(a\) と \(b\) の選び方によっては、SimpleBitUnpack と BitUnpack に、係数がそれぞれ範囲 \([0, b]\) と \([-a, b]\) にない多項式を出力させる不正な形式のバイト列が存在します。このことは、信頼できない入手元から来る可能性のある入力に対して SimpleBitUnpack と BitUnpack を実行する場合に懸念となりうます。
Algorithm 18 \(\mathsf{SimpleBitUnpack}(v, b)\)
Algorithm 18 \(\mathsf{SimpleBitUnpack}(v, b)\)
Reverses the procedure \(\mathsf{SimpleBitPack}\).
手続き \(\mathsf{SimpleBitPack}\) の逆を行います。
Algorithm 19 \(\mathsf{BitUnpack}(v, a, b)\)
Algorithm 19 \(\mathsf{BitUnpack}(v, a, b)\)
Reverses the procedure \(\mathsf{BitPack}\).
手続き \(\mathsf{BitPack}\) の逆を行います。
Algorithms 20 and 21 carry out byte-string-to-polynomial conversions for polynomials with sparse binary coefficients. In particular, the signing and verification algorithms (Sections 6.2 and 6.3) make use of a “hint,” which is a vector of polynomials \(\mathbf{h} \in R_2^k\) such that the total number of coefficients in \(\mathbf{h}[0], \mathbf{h}[1], \ldots, \mathbf{h}[k-1]\) that are equal to \(1\) is no more than \(\omega\). This constraint enables encoding and decoding procedures that are more efficient (although more complex) than \(\mathsf{BitPack}\) and \(\mathsf{BitUnpack}\).
Algorithms 20 と 21 は、係数が疎な 2 値である多項式について、バイト列と多項式の間の変換を行います。特に、署名アルゴリズムと検証アルゴリズム(Sections 6.2 および 6.3)は「ヒント」を利用します。ヒントは多項式のベクトル \(\mathbf{h} \in R_2^k\) であり、\(\mathbf{h}[0], \mathbf{h}[1], \ldots, \mathbf{h}[k-1]\) の係数のうち \(1\) に等しいものの総数は \(\omega\) 以下です。この制約により、\(\mathsf{BitPack}\) や \(\mathsf{BitUnpack}\) より効率的な(ただしより複雑な)符号化・復号の手続きが可能になります。
\(\mathsf{HintBitPack}\) \((\mathbf{h})\) outputs a byte string \(y\) of length \(\omega + k\). The last \(k\) bytes of \(y\) contain information about how many nonzero coefficients are present in each of the polynomials \(\mathbf{h}[0], \mathbf{h}[1], \ldots, \mathbf{h}[k - 1]\), and the first \(\omega\) bytes of \(y\) contain information about exactly where those nonzero terms occur. \(\mathsf{HintBitUnpack}\) reverses the procedure performed by \(\mathsf{HintBitPack}\) and recovers the vector \(\mathbf{h}\).
\(\mathsf{HintBitPack}\) \((\mathbf{h})\) は、長さ \(\omega + k\) のバイト列 \(y\) を出力します。\(y\) の最後の \(k\) バイトには、多項式 \(\mathbf{h}[0], \mathbf{h}[1], \ldots, \mathbf{h}[k - 1]\) のそれぞれに非ゼロ係数がいくつあるかという情報が含まれ、\(y\) の最初の \(\omega\) バイトには、それらの非ゼロ項が正確にどこにあるかという情報が含まれます。\(\mathsf{HintBitUnpack}\) は \(\mathsf{HintBitPack}\) が行う手続きの逆を行い、ベクトル \(\mathbf{h}\) を復元します。
Algorithm 20 \(\mathsf{HintBitPack}(\mathbf{h})\)
Algorithm 20 \(\mathsf{HintBitPack}(\mathbf{h})\)
Encodes a polynomial vector \(\mathbf{h}\) with binary coefficients into a byte string.
2値の係数をもつ多項式ベクトル \(\mathbf{h}\) をバイト列に符号化します。
Algorithm 21 \(\mathsf{HintBitUnpack}(y)\)
Algorithm 21 \(\mathsf{HintBitUnpack}(y)\)
Reverses the procedure \(\mathsf{HintBitPack}\).
手続き \(\mathsf{HintBitPack}\) の逆を行います。
7.2 Encodings of ML-DSA Keys and Signatures
7.2 ML-DSA の鍵と署名の符号化
Algorithms 22–27 translate keys and signatures for ML-DSA into byte strings. These procedures take certain sequences of algebraic objects, encode them consecutively into byte strings, and perform the respective decoding procedures.
Algorithms 22–27 は、ML-DSA の鍵と署名をバイト列に変換します。これらの手続きは、代数的対象の特定の列を受け取り、それらを連続してバイト列に符号化し、またそれぞれに対応する復号の手続きを行います。
First, pkEncode and pkDecode translate ML-DSA public keys into byte strings and vice versa. When verifying a signature, pkDecode might be run on an input that comes from an untrusted source. Thus, care is required when using SimpleBitUnpack. As used here, SimpleBitUnpack always returns values in the correct range.
まず、pkEncode と pkDecode は、ML-DSA の公開鍵をバイト列に、またその逆に変換します。署名の検証時には、信頼できない入手元から来た入力に対して pkDecode を実行する可能性があります。したがって、SimpleBitUnpack の使用には注意が必要です。ここでの使い方では、SimpleBitUnpack は常に正しい範囲の値を返します。
Algorithm 22 pkEncode\((\rho, \mathbf{t}_1)\)
Algorithm 22 pkEncode\((\rho, \mathbf{t}_1)\)
Encodes a public key for ML-DSA into a byte string.
ML-DSA の公開鍵をバイト列に符号化します。
Algorithm 23 pkDecode\((pk)\)
Algorithm 23 pkDecode\((pk)\)
Reverses the procedure pkEncode.
手続き pkEncode の逆を行います。
Next, skEncode and skDecode translate ML-DSA secret keys into byte strings and vice versa. Note that there exist malformed inputs that can cause skDecode to return values that are not in the correct range. Hence, skDecode should only be run on inputs that come from trusted sources.
次に、skEncode と skDecode は、ML-DSA の秘密鍵をバイト列に、またその逆に変換します。skDecode に正しい範囲にない値を返させる不正な形式の入力が存在することに注意します。そのため、skDecode は信頼できる入手元から来た入力に対してのみ実行することが望まれます。
Algorithm 24 skEncode\((\rho, K, tr, \mathbf{s}_1, \mathbf{s}_2, \mathbf{t}_0)\)
Algorithm 24 skEncode\((\rho, K, tr, \mathbf{s}_1, \mathbf{s}_2, \mathbf{t}_0)\)
Encodes a secret key for ML-DSA into a byte string.
ML-DSA の秘密鍵をバイト列に符号化します。
Algorithm 25 skDecode\((sk)\)
Algorithm 25 skDecode\((sk)\)
Reverses the procedure skEncode.
手続き skEncode の逆を行います。
Algorithm 26 \(\mathsf{sigEncode}(\tilde{c}, \mathbf{z}, \mathbf{h})\)
Algorithm 26 \(\mathsf{sigEncode}(\tilde{c}, \mathbf{z}, \mathbf{h})\)
Algorithm 27 \(\mathsf{sigDecode}(\sigma)\)
Algorithm 27 \(\mathsf{sigDecode}(\sigma)\)
w1Encode is a specific subroutine used in ML-DSA.Sign. The procedure w1Encode encodes a polynomial vector \(\mathbf{w}_1\) into a string of bytes so that it can be processed by the function H.
w1Encode は ML-DSA.Sign で用いる特定のサブルーチンです。手続き w1Encode は、多項式ベクトル \(\mathbf{w}_1\) を関数 H で処理できるようにバイト列に符号化します。
Algorithm 28 \(\mathsf{w1Encode}(\mathbf{w}_1)\)
Algorithm 28 \(\mathsf{w1Encode}(\mathbf{w}_1)\)
7.3 Pseudorandom Sampling
7.3 疑似ランダムサンプリング
This section specifies various algorithms for generating algebraic objects pseudorandomly from a seed \(\rho\), where \(\rho\) is a byte string whose length varies depending on the algorithm. The first procedure to be defined is SampleInBall. As in Section 2.3, \(B_\tau\) denotes the set of all polynomials \(c \in R\) such that
本節では、シード \(\rho\) から代数的対象を疑似ランダムに生成するための各種アルゴリズムを規定します。ここで \(\rho\) はバイト列であり、その長さはアルゴリズムによって異なります。最初に定義する手続きは SampleInBall です。Section 2.3 と同様に、\(B_\tau\) は次の条件を満たすすべての多項式 \(c \in R\) の集合を表します。
•Each coefficient of \(c\) is either \(-1\), \(0\), or \(1\), and
•\(c\) の各係数が \(-1\)、\(0\)、\(1\) のいずれかであり、かつ
•Exactly \(\tau\) of the coefficients of \(c\) are nonzero.
•\(c\) の係数のうちちょうど \(\tau\) 個が非ゼロです。
SampleInBall pseudorandomly generates an element of \(B_\tau\) using the XOF of a seed \(\rho\). The procedure is based on the Fisher-Yates shuffle. H is applied to \(\rho\), and the first \(8\) bytes of the output are used to choose the signs of the nonzero entries of \(c\).12 Subsequent bytes are used to choose the positions of those nonzero entries.
SampleInBall は、シード \(\rho\) の XOF を用いて \(B_\tau\) の元を疑似ランダムに生成します。この手続きは Fisher-Yates シャッフルに基づきます。\(\rho\) に H を適用し、出力の最初の \(8\) バイトを用いて \(c\) の非ゼロ成分の符号を選びます。12 後続のバイトを用いて、それらの非ゼロ成分の位置を選びます。
Algorithm 29 \(\mathsf{SampleInBall}(\rho)\)
Algorithm 29 \(\mathsf{SampleInBall}(\rho)\)
Algorithms 30–34 are the pseudorandom procedures RejNTTPoly, RejBoundedPoly, ExpandA, ExpandS, and ExpandMask. Each generates elements of \(R\) or \(T_q\) under different input and output conditions. RejNTTPoly and ExpandA make use of the more efficient XOF G, whereas the other three procedures use the XOF H.
Algorithms 30–34 は、疑似ランダムな手続き RejNTTPoly、RejBoundedPoly、ExpandA、ExpandS、ExpandMask です。いずれも、異なる入力条件と出力条件の下で \(R\) または \(T_q\) の元を生成します。RejNTTPoly と ExpandA はより効率的な XOF G を利用し、他の三つの手続きは XOF H を使用します。
The procedure ExpandMask (Algorithm 34) generates a polynomial vector \(\mathbf{y}\) in \(R^k\) that disguises the secret key in the ML-DSA.Sign_internal procedure (Algorithm 7). In addition to the seed \(\rho\), ExpandMask also accepts an integer input \(\mu\) that is incorporated into the pseudorandom procedure that generates \(\mathbf{s}\).
手続き ExpandMask(Algorithm 34)は、ML-DSA.Sign_internal の手続き(Algorithm 7)において秘密鍵を隠す、\(R^k\) の多項式ベクトル \(\mathbf{y}\) を生成します。ExpandMask は、シード \(\rho\) に加えて整数の入力 \(\mu\) も受け取り、これを \(\mathbf{s}\) を生成する疑似ランダムな手続きに組み込みます。
Algorithm 30 \(\mathsf{RejNTTPoly}(\rho)\)
Algorithm 30 \(\mathsf{RejNTTPoly}(\rho)\)
Samples a polynomial \(\in T_q\).
多項式 \(\in T_q\) をサンプリングします。
Algorithm 31 \(\mathsf{RejBoundedPoly}(\rho)\)
Algorithm 31 \(\mathsf{RejBoundedPoly}(\rho)\)
Samples an element \(a \in R\) with coefficients in \([-\eta, \eta]\) computed via rejection sampling from \(\rho\).
\(\rho\) からの棄却サンプリングによって計算される、係数が \([-\eta, \eta]\) にある元 \(a \in R\) をサンプリングします。
Algorithm 32 \(\mathsf{ExpandA}(\rho)\)
Algorithm 32 \(\mathsf{ExpandA}(\rho)\)
Samples a \(k \times \ell\) matrix \(\hat{\mathbf{A}}\) of elements of \(T_q\).
\(T_q\) の元からなる \(k \times \ell\) 行列 \(\hat{\mathbf{A}}\) をサンプリングします。
Algorithm 33 \(\mathsf{ExpandS}(\rho)\)
Algorithm 33 \(\mathsf{ExpandS}(\rho)\)
Samples vectors \(\mathbf{s}_1 \in R^\ell\) and \(\mathbf{s}_2 \in R^k\), each with polynomial coordinates whose coefficients are in the interval \([-\eta, \eta]\).
ベクトル \(\mathbf{s}_1 \in R^\ell\) と \(\mathbf{s}_2 \in R^k\) をサンプリングします。いずれも、各座標の多項式の係数は区間 \([-\eta, \eta]\) にあります。
Algorithm 34 \(\mathsf{ExpandMask}(\rho, \mu)\)
Algorithm 34 \(\mathsf{ExpandMask}(\rho, \mu)\)
Samples a vector \(\mathbf{y} \in R^\ell\) such that each polynomial \(\mathbf{y}[r]\) has coefficients between \(-\gamma_1 + 1\) and \(\gamma_1\).
各多項式 \(\mathbf{y}[r]\) の係数が \(-\gamma_1 + 1\) から \(\gamma_1\) までの間にあるようなベクトル \(\mathbf{y} \in R^\ell\) をサンプリングします。
7.4 High-Order and Low-Order Bits and Hints
7.4 上位ビット・下位ビットとヒント
This specification uses the auxiliary functions Power2Round, Decompose, HighBits, LowBits, MakeHint, and UseHint and explicitly defines these functions, where \(r \in \mathbb{Z}_q\), \(r_1, r_0 \in \mathbb{Z}\), and \(h\) is a Boolean (or equivalently an element of \(\mathbb{Z}_2\)). However, this specification also uses these functions where \(\mathbf{r}, \mathbf{z} \in R_q^k\), \(\mathbf{r}_1, \mathbf{r}_0 \in R^k\), and \(\mathbf{h} \in R_2^k\). In this case, the functions are applied coefficientwise to the polynomials in the vectors. In particular:
本仕様は補助関数 Power2Round、Decompose、HighBits、LowBits、MakeHint、UseHint を使用し、これらの関数を \(r \in \mathbb{Z}_q\)、\(r_1, r_0 \in \mathbb{Z}\)、\(h\) がブール値(または同等に \(\mathbb{Z}_2\) の元)である場合について明示的に定義します。しかし本仕様は、\(\mathbf{r}, \mathbf{z} \in R_q^k\)、\(\mathbf{r}_1, \mathbf{r}_0 \in R^k\)、\(\mathbf{h} \in R_2^k\) である場合にもこれらの関数を使用します。この場合、関数はベクトル内の多項式に係数ごとに適用されます。具体的には次のとおりです。
•For \(\mathbf{r} \in R_q^k\), define \((\mathbf{r}_1, \mathbf{r}_0) \in (R^k)^2 = \mathsf{Power2Round}(\mathbf{r})\) so that:
•\(\mathbf{r} \in R_q^k\) に対して、\((\mathbf{r}_1, \mathbf{r}_0) \in (R^k)^2 = \mathsf{Power2Round}(\mathbf{r})\) を次のように定義します。
•For \(\mathbf{r} \in R_q^k\), define \((\mathbf{r}_1, \mathbf{r}_0) \in (R^k)^2 = \mathsf{Decompose}(\mathbf{r})\) so that:
•\(\mathbf{r} \in R_q^k\) に対して、\((\mathbf{r}_1, \mathbf{r}_0) \in (R^k)^2 = \mathsf{Decompose}(\mathbf{r})\) を次のように定義します。
•For \(\mathbf{r} \in R_q^k\), define \(\mathbf{r}_1\) = \(\mathsf{HighBits}(\mathbf{r})\) so that:
•\(\mathbf{r} \in R_q^k\) に対して、\(\mathbf{r}_1\) = \(\mathsf{HighBits}(\mathbf{r})\) を次のように定義します。
•For \(\mathbf{r} \in R_q^k\), define \(\mathbf{r}_0\) = \(\mathsf{LowBits}(\mathbf{r})\) so that:
•\(\mathbf{r} \in R_q^k\) に対して、\(\mathbf{r}_0\) = \(\mathsf{LowBits}(\mathbf{r})\) を次のように定義します。
•For \(\mathbf{z}, \mathbf{r} \in R_q^k\), define \(\mathbf{h} \in R_2^k = \mathsf{MakeHint}(\mathbf{z}, \mathbf{r})\) so that:
•\(\mathbf{z}, \mathbf{r} \in R_q^k\) に対して、\(\mathbf{h} \in R_2^k = \mathsf{MakeHint}(\mathbf{z}, \mathbf{r})\) を次のように定義します。
•For \(\mathbf{h} \in R_2^k\) and \(\mathbf{r} \in R_q^k\), define \(\mathbf{r}_1 \in R^k = \mathsf{UseHint}(\mathbf{h}, \mathbf{r})\) so that:
•\(\mathbf{h} \in R_2^k\) および \(\mathbf{r} \in R_q^k\) に対して、\(\mathbf{r}_1 \in R^k = \mathsf{UseHint}(\mathbf{h}, \mathbf{r})\) を次のように定義します。
These algorithms are used to support the key compression optimization of ML-DSA. They involve dropping the \(d\) low-order bits of each coefficient of the polynomial vector \(\mathbf{t}\) from the public key using the function Power2Round. However, in order to make this optimization work, additional information called a “hint” needs to be provided in the signature to allow the verifier to reconstruct enough of the information in the dropped public-key bits to verify the signature. Hints are created during signing and used during verification by the functions MakeHint and UseHint, respectively. In the verification of a valid signature, the hint allows the verifier to recover \(\mathbf{w}_1 \in R^k\), which represents \(\mathbf{w} \in R_q^k\) rounded to a nearby multiple of \(\alpha = 2\gamma_2\). The signer directly obtains \(\mathbf{w}_1\) using the function HighBits, and the part rounded off (i.e., \(\mathbf{r}_0\)) is obtained by LowBits. \(\mathbf{r}_0\) is used by the signer in the rejection sampling procedure.
これらのアルゴリズムは、ML-DSA の鍵圧縮の最適化を支えるために使用します。この最適化では、関数 Power2Round を用いて、公開鍵から多項式ベクトル \(\mathbf{t}\) の各係数の下位 \(d\) ビットを切り捨てます。しかし、この最適化を機能させるには、「ヒント」と呼ぶ追加情報を署名に含め、切り捨てた公開鍵ビットの情報のうち署名の検証に足るだけの部分を検証者が再構成できるようにする必要があります。ヒントは、署名時に関数 MakeHint によって作成され、検証時に関数 UseHint によって使用されます。有効な署名の検証において、ヒントにより検証者は \(\mathbf{w}_1 \in R^k\) を復元できます。これは \(\mathbf{w} \in R_q^k\) を \(\alpha = 2\gamma_2\) の近くの倍数に丸めたものを表します。署名者は関数 HighBits を用いて \(\mathbf{w}_1\) を直接得て、丸めで切り捨てた部分(すなわち \(\mathbf{r}_0\))を LowBits によって得ます。\(\mathbf{r}_0\) は署名者が棄却サンプリングの手続きで使用します。
Power2Round decomposes an input \(r \in \mathbb{Z}_q\) into integers that represent the high- and low-order bits of \(r \bmod q\) in the straightforward bitwise way, \(r \bmod q = r_1 \cdot 2^d + r_0\), where \(r_0 = (r \bmod q) \bmod^{\pm} 2^d\) and \(r_1 = (r \bmod q - r_0)/2^d\).
Power2Round は、入力 \(r \in \mathbb{Z}_q\) を、\(r \bmod q\) の上位ビットと下位ビットを素直なビット単位の方法で表す整数に分解します。すなわち \(r \bmod q = r_1 \cdot 2^d + r_0\) であり、ここで \(r_0 = (r \bmod q) \bmod^{\pm} 2^d\)、\(r_1 = (r \bmod q - r_0)/2^d\) です。
However, for the purpose of computations related to hints, this method of decomposing \(r\) has the undesirable property that when \(r\) is close to \(q-1\) or 0, a small rounding error in \(r\) can cause \(r_1\) to change by more than 1, even accounting for wrap-around. In contrast to other unequal pairs of values of \(r_1 \cdot 2^d\) and \(r_1' \cdot 2^d\), the distance (mod\(q\)) between \(\lfloor q/2^d \rfloor \cdot 2^d\) and 0 may be very small.
しかし、ヒントに関する計算の目的では、この \(r\) の分解方法には望ましくない性質があります。すなわち、\(r\) が \(q-1\) または 0 に近いとき、\(r\) の小さな丸め誤差によって、ラップアラウンドを考慮しても \(r_1\) が 1 より大きく変化することがあります。\(r_1 \cdot 2^d\) と \(r_1' \cdot 2^d\) の他の等しくない値の組とは異なり、\(\lfloor q/2^d \rfloor \cdot 2^d\) と 0 の間の距離(mod\(q\))は非常に小さくなりうます。
To avoid this problem, this specification defines Decompose, which is similar to Power2Round except:
この問題を避けるため、本仕様は Decompose を定義します。Decompose は Power2Round と似ていますが、次の点が異なります。
•\(r\) is generally decomposed as \(r \bmod q = r_1 \cdot \alpha + r_0\), where \(\alpha = 2\gamma_2\) is a divisor of \(q-1\).
•\(r\) は一般に \(r \bmod q = r_1 \cdot \alpha + r_0\) と分解されます。ここで \(\alpha = 2\gamma_2\) は \(q-1\) の約数です。
•If the straightforward rounding procedure would return \((r_1 = (q-1)/\alpha, r_0 \in [-(\alpha/2)+1, \alpha/2])\), Decompose instead returns \((r_1 = 0, r_0 - 1)\).
•素直な丸めの手続きが \((r_1 = (q-1)/\alpha, r_0 \in [-(\alpha/2)+1, \alpha/2])\) を返す場合、Decompose は代わりに \((r_1 = 0, r_0 - 1)\) を返します。
The functions HighBits and LowBits — which only return \(r_1\) and \(r_0\), respectively — and MakeHint and UseHint use Decompose. For additional discussion of the mathematical properties of these functions that are relevant to the correctness and security of ML-DSA, see Section 2.4 in [6].
関数 HighBits と LowBits(それぞれ \(r_1\) と \(r_0\) のみを返す)、および MakeHint と UseHint は Decompose を使用します。ML-DSA の正しさとセキュリティに関係するこれらの関数の数学的性質についての詳しい議論は、[6] の Section 2.4 を参照のこと。
Algorithm 35 \(\mathsf{Power2Round}(r)\)
Algorithm 35 \(\mathsf{Power2Round}(r)\)
Algorithm 36 \(\mathsf{Decompose}(r)\)
Algorithm 36 \(\mathsf{Decompose}(r)\)
Algorithm 37 \(\mathsf{HighBits}(r)\)
Algorithm 37 \(\mathsf{HighBits}(r)\)
Algorithm 38 \(\mathsf{LowBits}(r)\)
Algorithm 38 \(\mathsf{LowBits}(r)\)
Returns \(r_0\) from the output of \(\mathsf{Decompose}(r)\).
\(\mathsf{Decompose}(r)\) の出力から \(r_0\) を返します。
Algorithm 39 \(\mathsf{MakeHint}(z, r)\)
Algorithm 39 \(\mathsf{MakeHint}(z, r)\)
Computes hint bit indicating whether adding \(z\) to \(r\) alters the high bits of \(r\).
\(r\) に \(z\) を加えると \(r\) の上位ビットが変わるかどうかを示すヒントビットを計算します。
Algorithm 40 \(\mathsf{UseHint}(h, r)\)
Algorithm 40 \(\mathsf{UseHint}(h, r)\)
Returns the high bits of \(r\) adjusted according to hint \(h\).
ヒント \(h\) に従って調整した \(r\) の上位ビットを返します。
7.5 NTT and \(\mathsf{NTT}^{-1}\)
7.5 NTT と \(\mathsf{NTT}^{-1}\)
The following algorithms implement the NTT and its inverse (\(\mathsf{NTT}^{-1}\)), which is important for efficiency. There are other optimizations that are not included in this standard. In particular, \(\bmod q\) and \(\bmod^{\pm} q\) are expensive operations whose use can be minimized by using Montgomery Multiplication (see Appendix A).
以下のアルゴリズムは、NTT とその逆変換(\(\mathsf{NTT}^{-1}\))を実装します。これは効率のために重要です。本標準に含めていない最適化は他にもあります。特に、\(\bmod q\) と \(\bmod^{\pm} q\) はコストの高い演算であり、Montgomery 乗算(Appendix A を参照)を用いることでその使用を最小限に抑えることができます。
An element of \(R_q\) is a polynomial in \(\mathbb{Z}_q[X]/(X^{256}+1)\), and an element of \(T_q\) is a tuple in \(\Pi_{j=0}^{255}\mathbb{Z}_q\). The \(\mathsf{NTT}\) algorithm takes a polynomial \(w \in R_q\) as input and returns \(\hat{w} \in T_q\). \(\mathsf{NTT}^{-1}\) takes \(\hat{w} \in T_q\) as input and returns \(w\) such that \(\hat{w} = \mathsf{NTT}(w)\).
\(R_q\) の元は \(\mathbb{Z}_q[X]/(X^{256}+1)\) の多項式であり、\(T_q\) の元は \(\Pi_{j=0}^{255}\mathbb{Z}_q\) の組です。\(\mathsf{NTT}\) アルゴリズムは多項式 \(w \in R_q\) を入力として受け取り、\(\hat{w} \in T_q\) を返します。\(\mathsf{NTT}^{-1}\) は \(\hat{w} \in T_q\) を入力として受け取り、\(\hat{w} = \mathsf{NTT}(w)\) となる \(w\) を返します。
This document always distinguishes between elements of \(R_q\) and elements of \(T_q\). However, the natural data structure for both of these sets is as an integer array of size \(256\). This would allow the \(\mathsf{NTT}\) and \(\mathsf{NTT}^{-1}\) algorithms to perform computation in place on an integer array passed by reference. That optimization is not included in this document.
本文書では、\(R_q\) の元と \(T_q\) の元を常に区別します。しかし、これら両方の集合にとって自然なデータ構造は、サイズ \(256\) の整数配列です。これにより、\(\mathsf{NTT}\) および \(\mathsf{NTT}^{-1}\) アルゴリズムは、参照渡しされた整数配列上でインプレースに計算を行うことができます。この最適化は本文書には含めていません。
In Section 2.5, \(\zeta = 1753 \in \mathbb{Z}_q\), which is a \(512\)th root of unity modulo \(q\). On input \(w \in R_q\), the algorithm outputs
Section 2.5 では \(\zeta = 1753 \in \mathbb{Z}_q\) であり、これは \(q\) を法とする 1 の \(512\) 乗根です。入力 \(w \in R_q\) に対して、このアルゴリズムは次を出力します。
where \(\zeta_i = w(\zeta^{2\mathsf{BitRev}_8(i)+1}) \bmod q\).
ここで \(\zeta_i = w(\zeta^{2\mathsf{BitRev}_8(i)+1}) \bmod q\) です。
The values \(\zeta^{\mathsf{BitRev}_8(k)} \bmod q\) for \(k = 1, \ldots, 255\) used in line 10 of Algorithms 41 and 42 are pre-computed into an array \(\mathsf{zetas}[1..255]\). The table of zetas is given in Appendix B. If Montgomery Multiplication is used (see Appendix A), then the zetas array would typically be stored in Montgomery form.
Algorithms 41 と 42 の 10 行目で使用する値 \(\zeta^{\mathsf{BitRev}_8(k)} \bmod q\)(\(k = 1, \ldots, 255\))は、あらかじめ計算して配列 \(\mathsf{zetas}[1..255]\) に格納しておきます。zetas の表は Appendix B に示します。Montgomery 乗算を使用する場合(Appendix A を参照)、zetas 配列は通常 Montgomery 形式で格納されます。
\(\mathsf{NTT}\) and \(\mathsf{NTT}^{-1}\) use \(\mathsf{BitRev}_8\), which reverses the order of bits in an 8-bit integer.
\(\mathsf{NTT}\) と \(\mathsf{NTT}^{-1}\) は、8 ビット整数のビット順序を逆転する \(\mathsf{BitRev}_8\) を使用します。
Algorithm 41 \(\mathsf{NTT}(w)\)
Algorithm 41 \(\mathsf{NTT}(w)\)
Computes the NTT.
NTT を計算します。
Algorithm 42 \(\mathsf{NTT}^{-1}(\hat{w})\)
Algorithm 42 \(\mathsf{NTT}^{-1}(\hat{w})\)
Computes the inverse of the NTT.
NTT の逆変換を計算します。
Algorithm 43 \(\mathsf{BitRev}_8(m)\)
Algorithm 43 \(\mathsf{BitRev}_8(m)\)
Transforms a byte by reversing the order of bits in its 8-bit binary expansion.
1 バイトの 8 ビット 2 進展開におけるビット順序を逆転して変換します。
7.6 Arithmetic Under NTT
7.6 NTT 下での算術演算
The \(\mathsf{NTT}\) converts elements of the ring \(R_q\) (where addition and multiplication are denoted by \(+\) and \(\cdot\), respectively) into elements of the ring \(T_q\) (where addition and multiplication are denoted by \(+\) and \(\circ\), respectively). This section gives explicit algorithms for linear algebra over the ring \(T_q\).
\(\mathsf{NTT}\) は、環 \(R_q\)(加算と乗算をそれぞれ \(+\) と \(\cdot\) で表す)の元を、環 \(T_q\)(加算と乗算をそれぞれ \(+\) と \(\circ\) で表す)の元に変換します。本節では、環 \(T_q\) 上の線形代数のための明示的なアルゴリズムを示します。
The ring \(T_q\) is defined to be the direct product ring \(\Pi_{i=0}^{255}\mathbb{Z}_q\). Thus, an element \(\hat{a} \in T_q\) is an array of length \(256\), and its elements are denoted by \(\hat{a}[0], \hat{a}[1], \ldots, \hat{a}[255] \in \mathbb{Z}_q\).
環 \(T_q\) は直積環 \(\Pi_{i=0}^{255}\mathbb{Z}_q\) として定義されます。したがって、元 \(\hat{a} \in T_q\) は長さ \(256\) の配列であり、その要素を \(\hat{a}[0], \hat{a}[1], \ldots, \hat{a}[255] \in \mathbb{Z}_q\) と表します。
Algorithm 44 \(\mathsf{AddNTT}(\hat{a}, \hat{b})\)
Algorithm 44 \(\mathsf{AddNTT}(\hat{a}, \hat{b})\)
Computes the sum \(\hat{a} + \hat{b}\) of two elements \(\hat{a}, \hat{b} \in T_q\).
二つの元 \(\hat{a}, \hat{b} \in T_q\) の和 \(\hat{a} + \hat{b}\) を計算します。
Algorithm 45 \(\mathsf{MultiplyNTT}(\hat{a}, \hat{b})\)
Algorithm 45 \(\mathsf{MultiplyNTT}(\hat{a}, \hat{b})\)
Computes the product \(\hat{a} \circ \hat{b}\) of two elements \(\hat{a}, \hat{b} \in T_q\).
二つの元 \(\hat{a}, \hat{b} \in T_q\) の積 \(\hat{a} \circ \hat{b}\) を計算します。
Algorithm 46 \(\mathsf{AddVectorNTT}(\hat{\mathbf{v}}, \hat{\mathbf{w}})\)
Algorithm 46 \(\mathsf{AddVectorNTT}(\hat{\mathbf{v}}, \hat{\mathbf{w}})\)
Computes the sum \(\hat{\mathbf{v}} + \hat{\mathbf{w}}\) of two vectors \(\hat{\mathbf{v}}, \hat{\mathbf{w}}\) over \(T_q\).
\(T_q\) 上の二つのベクトル \(\hat{\mathbf{v}}, \hat{\mathbf{w}}\) の和 \(\hat{\mathbf{v}} + \hat{\mathbf{w}}\) を計算します。
Algorithm 47 \(\mathsf{ScalarVectorNTT}(\hat{c}, \hat{\mathbf{v}})\)
Algorithm 47 \(\mathsf{ScalarVectorNTT}(\hat{c}, \hat{\mathbf{v}})\)
Computes the product \(\hat{c} \circ \hat{\mathbf{v}}\) of a scalar \(\hat{c}\) and a vector \(\hat{\mathbf{v}}\) over \(T_q\).
\(T_q\) 上のスカラー \(\hat{c}\) とベクトル \(\hat{\mathbf{v}}\) の積 \(\hat{c} \circ \hat{\mathbf{v}}\) を計算します。
Algorithm 48 \(\mathsf{MatrixVectorNTT}(\hat{\mathbf{M}}, \hat{\mathbf{v}})\)
Algorithm 48 \(\mathsf{MatrixVectorNTT}(\hat{\mathbf{M}}, \hat{\mathbf{v}})\)
Computes the product \(\hat{\mathbf{M}} \circ \hat{\mathbf{v}}\) of a matrix \(\hat{\mathbf{M}}\) and a vector \(\hat{\mathbf{v}}\) over \(T_q\).
\(T_q\) 上の行列 \(\hat{\mathbf{M}}\) とベクトル \(\hat{\mathbf{v}}\) の積 \(\hat{\mathbf{M}} \circ \hat{\mathbf{v}}\) を計算します。
References
参考文献
[1] National Institute of Standards and Technology (2023) Digital signature standard (DSS), (U.S. Department of Commerce, Washington, DC), Federal Information Processing Standards Publication (FIPS) 186-5. https://doi.org/10.6028/NIST.FIPS.186-5.
[1] National Institute of Standards and Technology (2023) Digital signature standard (DSS), (U.S. Department of Commerce, Washington, DC), Federal Information Processing Standards Publication (FIPS) 186-5. https://doi.org/10.6028/NIST.FIPS.186-5.
[2] Barker E (2020) Guideline for using cryptographic standards in the federal government: Cryptographic mechanisms, (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-175B, Rev. 1 [or as amended]. https://doi.org/10.6028/NIST.SP.800-175Br1.
[2] Barker E (2020) Guideline for using cryptographic standards in the federal government: Cryptographic mechanisms, (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-175B, Rev. 1 [または改訂版]. https://doi.org/10.6028/NIST.SP.800-175Br1.
[3] Barker E (2006) Recommendation for obtaining assurances for digital signature applications, National Institute of Standards and Technology, Gaithersburg, MD. NIST Special Publication (SP) 800-89 [or as amended]. https://doi.org/10.6028/NIST.SP.800-89.
[3] Barker E (2006) Recommendation for obtaining assurances for digital signature applications, National Institute of Standards and Technology, Gaithersburg, MD. NIST Special Publication (SP) 800-89 [または改訂版]. https://doi.org/10.6028/NIST.SP.800-89.
[4] Langlois A, Stehlé D (2015) Worst-case to average-case reductions for module lattices. Designs, Codes and Cryptography 75(3):565–599. https://doi.org/10.1007/s10623-014-9938-4.
[4] Langlois A, Stehlé D (2015) Worst-case to average-case reductions for module lattices. Designs, Codes and Cryptography 75(3):565–599. https://doi.org/10.1007/s10623-014-9938-4.
[5] Bai S, Ducas L, Kiltz E, Lepoint T, Lyubashevsky V, Schwabe P, Seiler G, Stehlé D (2020) CRYSTALS-Dilithium: Algorithm specifications and supporting documentation, Submission to the NIST’s post-quantum cryptography standardization process. Available at https://csrc.nist.gov/Projects/post-quantum-cryptography/post-quantum-cryptography-standardization/round-3-submissions.
[5] Bai S, Ducas L, Kiltz E, Lepoint T, Lyubashevsky V, Schwabe P, Seiler G, Stehlé D (2020) CRYSTALS-Dilithium: Algorithm specifications and supporting documentation, Submission to the NIST’s post-quantum cryptography standardization process. 入手先:https://csrc.nist.gov/Projects/post-quantum-cryptography/post-quantum-cryptography-standardization/round-3-submissions.
[6] Bai S, Ducas L, Kiltz E, Lepoint T, Lyubashevsky V, Schwabe P, Seiler G, Stehlé D (2021) CRYSTALS-Dilithium: Algorithm specifications and supporting documentation (Version 3.1). Available at https://pq-crystals.org/dilithium/data/dilithium-specification-round3-20210208.pdf.
[6] Bai S, Ducas L, Kiltz E, Lepoint T, Lyubashevsky V, Schwabe P, Seiler G, Stehlé D (2021) CRYSTALS-Dilithium: Algorithm specifications and supporting documentation (Version 3.1). 入手先:https://pq-crystals.org/dilithium/data/dilithium-specification-round3-20210208.pdf.
[7] 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.
[7] 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.
[8] 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.
[8] 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.
[9] Barker E (2020) Recommendation for key management: Part 1 - general, (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-57 Part 1, Rev. 5 [or as amended]. https://doi.org/10.6028/NIST.SP.800-57pt1r5.
[9] Barker E (2020) Recommendation for key management: Part 1 - general, (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-57 Part 1, Rev. 5 [または改訂版]. https://doi.org/10.6028/NIST.SP.800-57pt1r5.
[10] Lyubashevsky V (2009) Fiat-Shamir with aborts: Applications to lattice and factoring-based signatures. Advances in Cryptology – ASIACRYPT 2009, ed Matsui M (Springer Berlin Heidelberg, Berlin, Heidelberg), pp 598–616. https://doi.org/10.1007/978-3-642-10366-7_35.
[10] Lyubashevsky V (2009) Fiat-Shamir with aborts: Applications to lattice and factoring-based signatures. Advances in Cryptology – ASIACRYPT 2009, ed Matsui M (Springer Berlin Heidelberg, Berlin, Heidelberg), pp 598–616. https://doi.org/10.1007/978-3-642-10366-7_35.
[11] Lyubashevsky V (2012) Lattice signatures without trapdoors. EUROCRYPT (Springer), Lecture Notes in Computer Science, Vol. 7237, pp 738–755. https://doi.org/10.1007/978-3-642-29011-4_43.
[11] Lyubashevsky V (2012) Lattice signatures without trapdoors. EUROCRYPT (Springer), Lecture Notes in Computer Science, Vol. 7237, pp 738–755. https://doi.org/10.1007/978-3-642-29011-4_43.
[12] Güneysu T, Lyubashevsky V, Pöppelmann T (2012) Practical lattice-based cryptography: A signature scheme for embedded systems. CHES (Springer), Vol. 7428, pp 530–547. https://doi.org/10.1007/97 8-3-642-33027-8_31.
[12] Güneysu T, Lyubashevsky V, Pöppelmann T (2012) Practical lattice-based cryptography: A signature scheme for embedded systems. CHES (Springer), Vol. 7428, pp 530–547. https://doi.org/10.1007/97 8-3-642-33027-8_31.
[13] Bai S, Galbraith SD (2014) An improved compression technique for signatures based on learning with errors. Topics in Cryptology – CT-RSA 2014, ed Benaloh J (Springer International Publishing, Cham), pp 28–47. https://doi.org/10.1007/978-3-319-04852-9_2.
[13] Bai S, Galbraith SD (2014) An improved compression technique for signatures based on learning with errors. Topics in Cryptology – CT-RSA 2014, ed Benaloh J (Springer International Publishing, Cham), pp 28–47. https://doi.org/10.1007/978-3-319-04852-9_2.
[14] Cremers C, Düzlü S, Fiedler R, Janson C, Fischlin M (2021) BUFFing signature schemes beyond unforgeability and the case of post-quantum signatures. 2021 IEEE Symposium on Security and Privacy (SP) (IEEE Computer Society, Los Alamitos, CA, USA), pp 1696–1714. https://doi.org/10.110 9/SP40001.2021.00093.
[14] Cremers C, Düzlü S, Fiedler R, Janson C, Fischlin M (2021) BUFFing signature schemes beyond unforgeability and the case of post-quantum signatures. 2021 IEEE Symposium on Security and Privacy (SP) (IEEE Computer Society, Los Alamitos, CA, USA), pp 1696–1714. https://doi.org/10.110 9/SP40001.2021.00093.
[15] Regev O (2005) On lattices, learning with errors, random linear codes, and cryptography. Proceedings of the Thirty-Seventh Annual ACM Symposium on Theory of Computing STOC ’05 (Association for Computing Machinery, New York, NY, USA), p 84–93. https://doi.org/10.1145/1060590.1060603.
[15] Regev O (2005) On lattices, learning with errors, random linear codes, and cryptography. Proceedings of the Thirty-Seventh Annual ACM Symposium on Theory of Computing STOC ’05 (Association for Computing Machinery, New York, NY, USA), p 84–93. https://doi.org/10.1145/1060590.1060603.
[16] Kiltz E, Lyubashevsky V, Schaffner C (2018) A concrete treatment of Fiat-Shamir signatures in the quantum random-oracle model. Advances in Cryptology – EUROCRYPT 2018, eds Nielsen JB, Rijmen V (Springer International Publishing, Cham), pp 552–586. https://doi.org/10.1007/978-3-319-78372 -7_18.
[16] Kiltz E, Lyubashevsky V, Schaffner C (2018) A concrete treatment of Fiat-Shamir signatures in the quantum random-oracle model. Advances in Cryptology – EUROCRYPT 2018, eds Nielsen JB, Rijmen V (Springer International Publishing, Cham), pp 552–586. https://doi.org/10.1007/978-3-319-78372 -7_18.
[17] Barker E, Barker W (2019) Recommendation for key management: Part 2 - best practices for key management organizations, National Institute of Standards and Technology, Gaithersburg, MD. NIST Special Publication (SP) 800-57 Part 2, Rev. 1. https://doi.org/10.6028/NIST.SP.800-57pt2r1.
[17] Barker E, Barker W (2019) Recommendation for key management: Part 2 - best practices for key management organizations, National Institute of Standards and Technology, Gaithersburg, MD. NIST Special Publication (SP) 800-57 Part 2, Rev. 1. https://doi.org/10.6028/NIST.SP.800-57pt2r1.
[18] Barker E, Dang Q (2019) Recommendation for key management: Part 3 - application-specific key management guidance, National Institute of Standards and Technology, Gaithersburg, MD. NIST Special Publication (SP) 800-57 Part 3, Rev. 1. http://doi.org/10.6028/NIST.SP.800-57pt3r1.
[18] Barker E, Dang Q (2019) Recommendation for key management: Part 3 - application-specific key management guidance, National Institute of Standards and Technology, Gaithersburg, MD. NIST Special Publication (SP) 800-57 Part 3, Rev. 1. http://doi.org/10.6028/NIST.SP.800-57pt3r1.
[19] Barker E, Kelsey J (2015) Recommendation for random number generation using deterministic random bit generators, (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-90A, Rev. 1. https://doi.org/10.6028/NIST.SP.800-90Ar1.
[19] Barker E, Kelsey J (2015) Recommendation for random number generation using deterministic random bit generators, (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-90A, Rev. 1. https://doi.org/10.6028/NIST.SP.800-90Ar1.
[20] Sönmez Turan M, Barker E, Kelsey J, McKay K, Baish M, Boyle M (2018) Recommendation for the entropy sources used for random bit generation, (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-90B. https://doi.org/10.6028/NIST.SP.800-90B.
[20] Sönmez Turan M, Barker E, Kelsey J, McKay K, Baish M, Boyle M (2018) Recommendation for the entropy sources used for random bit generation, (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-90B. https://doi.org/10.6028/NIST.SP.800-90B.
[21] Barker E, Kelsey J, McKay K, Roginsky A, Turan MS (2024) Recommendation for random bit generator (RBG) constructions, (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-90C 4pd. https://doi.org/10.6028/NIST.SP.800-90C.4pd.
[21] Barker E, Kelsey J, McKay K, Roginsky A, Turan MS (2024) Recommendation for random bit generator (RBG) constructions, (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-90C 4pd. https://doi.org/10.6028/NIST.SP.800-90C.4pd.
[22] Bruinderink LG, Pessl P (2018) Differential fault attacks on deterministic lattice signatures. IACR Transactions on Cryptographic Hardware and Embedded Systems (3):21–43. https://doi.org/10.131 54/tches.v2018.i3.21-43.
[22] Bruinderink LG, Pessl P (2018) Differential fault attacks on deterministic lattice signatures. IACR Transactions on Cryptographic Hardware and Embedded Systems (3):21–43. https://doi.org/10.131 54/tches.v2018.i3.21-43.
[23] Poddebniak D, Somorovsky J, Schinzel S, Lochter M, Rösler P (2018) Attacking deterministic signature schemes using fault attacks. 2018 IEEE European Symposium on Security and Privacy (EuroS&P) (IEEE), pp 338–352. https://doi.org/10.1109/EuroSP.2018.00031.
[23] Poddebniak D, Somorovsky J, Schinzel S, Lochter M, Rösler P (2018) Attacking deterministic signature schemes using fault attacks. 2018 IEEE European Symposium on Security and Privacy (EuroS&P) (IEEE), pp 338–352. https://doi.org/10.1109/EuroSP.2018.00031.
[24] Samwel N, Batina L, Bertoni G, Daemen J, Susella R (2018) Breaking ed25519 in wolfssl. Topics in Cryptology–CT-RSA 2018: The Cryptographers’ Track at the RSA Conference 2018, San Francisco, CA, USA, April 16-20, 2018, Proceedings (Springer), pp 1–20. https://doi.org/10.1007/978-3-319-76953 -0_1.
[24] Samwel N, Batina L, Bertoni G, Daemen J, Susella R (2018) Breaking ed25519 in wolfssl. Topics in Cryptology–CT-RSA 2018: The Cryptographers’ Track at the RSA Conference 2018, San Francisco, CA, USA, April 16-20, 2018, Proceedings (Springer), pp 1–20. https://doi.org/10.1007/978-3-319-76953 -0_1.
[25] Kelsey J, Chang S, Perlner R (2016) SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash and ParallelHash, (National Institute of Standards and Technology, Gaithersburg, MD), NIST Special Publication (SP) 800-185 [or as amended]. https://doi.org/10.6028/NIST.SP.800-185.
[25] Kelsey J, Chang S, Perlner R (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.
[26] National Institute of Standards and Technology (2016) Submission requirements and evaluation criteria for the post-quantum cryptography standardization process. Available at https://csrc.nist.go v/CSRC/media/Projects/Post-Quantum-Cryptography/documents/call-for-proposals-final-dec-201 6.pdf.
[26] National Institute of Standards and Technology (2016) Submission requirements and evaluation criteria for the post-quantum cryptography standardization process. 入手先:https://csrc.nist.go v/CSRC/media/Projects/Post-Quantum-Cryptography/documents/call-for-proposals-final-dec-201 6.pdf.
[27] Alagic G, Apon D, Cooper D, Dang Q, Dang T, Kelsey J, Lichtinger J, Liu YK, Miller C, Moody D, Peralta R, Perlner R, Robinson A, Smith-Tone D (2022) Status report on the third round of the NIST post-quantum cryptography standardization process (National Institute of Standards and Technology, Gaithersburg, MD), NIST Interagency or Internal Report (IR) 8413. https://doi.org/10.6028/NIST.IR.8413-upd1.
[27] Alagic G, Apon D, Cooper D, Dang Q, Dang T, Kelsey J, Lichtinger J, Liu YK, Miller C, Moody D, Peralta R, Perlner R, Robinson A, Smith-Tone D (2022) Status report on the third round of the NIST post-quantum cryptography standardization process (National Institute of Standards and Technology, Gaithersburg, MD), NIST Interagency or Internal Report (IR) 8413. https://doi.org/10.6028/NIST.IR.8413-upd1.
[28] Avanzi R, Bos J, Ducas L, Kiltz E, Lepoint T, Lyubashevsky V, Schanck JM, Schwabe P, Seiler G, Stehlé D (2020) CRYSTALS-Kyber algorithm specifications and supporting documentation, 3rd Round submission to the NIST’s post-quantum cryptography standardization process. Available at https://csrc.nist.gov/Projects/post-quantum-cryptography/post-quantum-cryptography-standar dization/round-3-submissions.
[28] Avanzi R, Bos J, Ducas L, Kiltz E, Lepoint T, Lyubashevsky V, Schanck JM, Schwabe P, Seiler G, Stehlé D (2020) CRYSTALS-Kyber algorithm specifications and supporting documentation, 3rd Round submission to the NIST’s post-quantum cryptography standardization process. 入手先:https://csrc.nist.gov/Projects/post-quantum-cryptography/post-quantum-cryptography-standar dization/round-3-submissions.
[29] Housley R (2009) Cryptographic Message Syntax (CMS), Internet Engineering Task Force (IETF) request for comments (RFC) 5652, https://doi.org/10.17487/RFC5652.
[29] Housley R (2009) Cryptographic Message Syntax (CMS), Internet Engineering Task Force (IETF) request for comments (RFC) 5652, https://doi.org/10.17487/RFC5652.
[30] Schnorr C (1990) Efficient identification and signatures for smart cards. Advances in Cryptology — CRYPTO’ 89 Proceedings, ed Brassard G (Springer New York, New York, NY), pp 239–252. https: //doi.org/10.1007/0-387-34805-0_22.
[30] Schnorr C (1990) Efficient identification and signatures for smart cards. Advances in Cryptology — CRYPTO’ 89 Proceedings, ed Brassard G (Springer New York, New York, NY), pp 239–252. https: //doi.org/10.1007/0-387-34805-0_22.
[31] Josefsson S, Liusvaara I (2017) Edwards-Curve Digital Signature Algorithm (EdDSA), RFC 8032. https: //doi.org/10.17487/RFC8032.
[31] Josefsson S, Liusvaara I (2017) Edwards-Curve Digital Signature Algorithm (EdDSA), RFC 8032. https: //doi.org/10.17487/RFC8032.
[32] Lyubashevsky V (2021) Round 3 Official Comment: CRYSTALS-DILITHIUM. Available at https://groups .google.com/a/list.nist.gov/g/pqc-forum/c/BjfjRMIdnhM/m/W7kkVOFDBAAJ.
[32] Lyubashevsky V (2021) Round 3 Official Comment: CRYSTALS-DILITHIUM. 入手先:https://groups .google.com/a/list.nist.gov/g/pqc-forum/c/BjfjRMIdnhM/m/W7kkVOFDBAAJ.
[33] Hamburg M (2024) Dilithium hint unpacking. Available at https://groups.google.com/a/list.nist.gov/ g/pqc-forum/c/TQo-qFbBO1A/m/YcYKjMblAAAJ.
[33] Hamburg M (2024) Dilithium hint unpacking. 入手先:https://groups.google.com/a/list.nist.gov/ g/pqc-forum/c/TQo-qFbBO1A/m/YcYKjMblAAAJ.
[34] Mattsson (on behalf of Sönke Jendral) JP (2024) Dilithium hint unpacking. Available at https://grou ps.google.com/a/list.nist.gov/g/pqc-forum/c/TQo-qFbBO1A/m/sLjseYlSAwAJ.
[34] Mattsson (on behalf of Sönke Jendral) JP (2024) Dilithium hint unpacking. 入手先:https://grou ps.google.com/a/list.nist.gov/g/pqc-forum/c/TQo-qFbBO1A/m/sLjseYlSAwAJ.
[35] Lee S (2024) Updates for FIPS 203. Available at https://groups.google.com/a/list.nist.gov/g/pqc-for um/c/Rb0nFvfFTEQ/m/lw-k7tVdBQAJ.
[35] Lee S (2024) Updates for FIPS 203. 入手先:https://groups.google.com/a/list.nist.gov/g/pqc-for um/c/Rb0nFvfFTEQ/m/lw-k7tVdBQAJ.
Appendix A — Montgomery Multiplication
付録A — モンゴメリ乗算
This document uses modular multiplications of the form \(a \cdot b\) modulo \(q\). This is an expensive operation that is often sped up in practice through the use of Montgomery Multiplication.
本文書では、\(q\) を法とする \(a \cdot b\) の形のモジュラ乗算を用います。これはコストの高い演算であり、実際にはモンゴメリ乗算(Montgomery Multiplication)を用いて高速化されることが多くあります。
If \(a\) is an integer modulo \(q\), then its Montgomery form with multiplier \(2^{32}\) is \(r \equiv a \cdot 2^{32} \bmod q\).
\(a\) が \(q\) を法とする整数であるとき、乗数 \(2^{32}\) に関するそのモンゴメリ形式は \(r \equiv a \cdot 2^{32} \bmod q\) です。
Suppose that two integers \(u\) and \(v\) modulo \(q\) are in Montgomery form. Their product modulo \(q\) is \(c = u \cdot v \cdot 2^{-32}\), which is also in Montgomery form. If the integer product of \(u\) and \(v\) does not overflow a 64-bit signed integer, then one can compute \(c\) by first performing the integer multiplication \(u \cdot v\) and then “reducing” the product by multiplying by \(2^{-32}\) modulo \(q\). This last operation can be done efficiently as follows.
\(q\) を法とする2つの整数 \(u\) と \(v\) がモンゴメリ形式であるとします。\(q\) を法とするそれらの積は \(c = u \cdot v \cdot 2^{-32}\) であり、これもモンゴメリ形式です。\(u\) と \(v\) の整数としての積が64ビット符号付き整数をオーバーフローしなければ、まず整数乗算 \(u \cdot v\) を行い、次にその積に \(q\) を法として \(2^{-32}\) を乗じて「縮約」することで \(c\) を計算できます。この最後の演算は、以下のように効率的に行えます。
The MontgomeryReduce function takes an integer \(a\) with absolute value at most \(2^{31}q\) as input. It returns an integer \(r\) such that \(r = a \cdot 2^{-32} \bmod q\). The output is in Montgomery form with multiplier \(2^{32} \bmod q\). An implementation would typically input a 64-bit input and return a 32-bit output. The “modulo \(2^{32}\)” operation simply extracts the 32 least significant bits of a 64-bit value. The value \((a - t \cdot q)\) on line 3 is an integer divisible by \(2^{32}\). Therefore, the division consists of simply taking the most significant 32 bits of a 64-bit value. Extracting the four low- or high-order bytes is often done using typecasting.
MontgomeryReduce関数は、絶対値が高々 \(2^{31}q\) である整数 \(a\) を入力として受け取ります。この関数は、\(r = a \cdot 2^{-32} \bmod q\) となる整数 \(r\) を返します。出力は乗数 \(2^{32} \bmod q\) に関するモンゴメリ形式です。実装では通常、64ビットの入力を受け取り32ビットの出力を返します。「\(2^{32}\) を法とする」演算は、64ビット値の下位32ビットを取り出すだけです。3行目の値 \((a - t \cdot q)\) は \(2^{32}\) で割り切れる整数です。したがって、除算は64ビット値の上位32ビットを取り出すだけで済みます。下位または上位の4バイトの取り出しは、型キャストによって行われることが多くあります。
Algorithm 49 \(\mathsf{MontgomeryReduce}(a)\)
Algorithm 49 \(\mathsf{MontgomeryReduce}(a)\)
With this algorithm, the modular product of \(a\) and \(b\) is \(c = \mathsf{MontgomeryReduce}(a \cdot b)\), where \(a, b,\) and \(c\) are in Montgomery form. The return value of the algorithm is not necessarily less than \(q\) in absolute value, but it is less than \(2q\) in absolute value. This is not a concern in practice since the objective of Montgomery Multiplication is to efficiently work with modular values that fit in a 32-bit register. If necessary, the result can be normalized to an integer in \((-q, q)\) using a comparison and an integer addition.
このアルゴリズムを用いると、\(a\) と \(b\) のモジュラ積は \(c = \mathsf{MontgomeryReduce}(a \cdot b)\) となります。ここで \(a, b,\) および \(c\) はモンゴメリ形式です。このアルゴリズムの戻り値は絶対値が \(q\) 未満であるとは限りませんが、絶対値は \(2q\) 未満です。モンゴメリ乗算の目的は32ビットレジスタに収まるモジュラ値を効率的に扱うことであるため、実際にはこれは問題になりません。必要であれば、比較1回と整数加算1回によって、結果を \((-q, q)\) 内の整数に正規化できます。
Converting an integer modulo \(q\) to Montgomery form by multiplying by \(2^{32}\) modulo \(q\) is an expensive operation. When a sequence of modular operations is to be performed, the operands are converted once to Montgomery form. The operations are then performed, and the factor \(2^{32}\) is extracted from the final result.
\(q\) を法とする整数を、\(2^{32}\) を掛けて \(q\) を法として簡約することで Montgomery 形式に変換する処理は、計算コストの高い演算です。一連の剰余演算を行う場合には、オペランドを一度だけ Montgomery 形式に変換します。その後に演算を行い、最終結果から因子 \(2^{32}\) を取り除きます。
Appendix B — Zetas Array
付録B — zetas配列
The values \(\zeta^{\mathsf{BitRev}_8(k)} \bmod q\) for \(k = 1, \ldots, 255\) used in the NTT Algorithms 41 and 42 may be pre-computed and stored in an array zetas\([1..255]\). This table of zetas is given below.
NTTのアルゴリズム41および42で用いる \(k = 1, \ldots, 255\) に対する値 \(\zeta^{\mathsf{BitRev}_8(k)} \bmod q\) は、事前に計算して配列 zetas\([1..255]\) に格納してもよいです。このzetasの表を以下に示します。
zetas[0..255] = {
zetas[0..255] = {
0, 4808194, 3765607, 3761513, 5178923, 5496691, 5234739, 5178987,
7778734, 3542485, 2682288, 2129892, 3764867, 7375178, 557458, 7159240,
5010068, 4317364, 2663378, 6705802, 4855975, 7946292, 676590, 7044481,
5152541, 1714295, 2453983, 1460718, 7737789, 4795319, 2815639, 2283733,
3602218, 3182878, 2740543, 4793971, 5269599, 2101410, 3704823, 1159875,
394148, 928749, 1095468, 4874037, 2071829, 4361428, 3241972, 2156050,
3415069, 1759347, 7562881, 4805951, 3756790, 6444618, 6663429, 4430364,
5483103, 3192354, 556856, 3870317, 2917338, 1853806, 3345963, 1858416,
3073009, 1277625, 5744944, 3852015, 4183372, 5157610, 5258977, 8106357,
2508980, 2028118, 1937570, 4564692, 2811291, 5396636, 7270901, 4158088,
1528066, 482649, 1148858, 5418153, 7814814, 169688, 2462444, 5046034,
4213992, 4892034, 1987814, 5183169, 1736313, 235407, 5130263, 3258457,
5801164, 1787943, 5989328, 6125690, 3482206, 4197502, 7080401, 6018354,
7062739, 2461387, 3035980, 621164, 3901472, 7153756, 2925816, 3374250,
1356448, 5604662, 2683270, 5601629, 4912752, 2312838, 7727142, 7921254,
348812, 8052569, 1011223, 6026202, 4561790, 6458164, 6143691, 1744507,
1753, 6444997, 5720892, 6924527, 2660408, 6600190, 8321269, 2772600,
1182243, 87208, 636927, 4415111, 4423672, 6084020, 5095502, 4663471,
8352605, 822541, 1009365, 5926272, 6400920, 1596822, 4423473, 4620952,
6695264, 4969849, 2678278, 4611469, 4829411, 635956, 8129971, 5925040,
4234153, 6607829, 2192938, 6653329, 2387513, 4768667, 8111961, 5199961,
3747250, 2296099, 1239911, 4541938, 3195676, 2642980, 1254190, 8368000,
2998219, 141835, 8291116, 2513018, 7025525, 613238, 7070156, 6161950,
7921677, 6458423, 4040196, 4908348, 2039144, 6500539, 7561656, 6201452,
6757063, 2105286, 6006015, 6346610, 586241, 7200804, 527981, 5637006,
6903432, 1994046, 2491325, 6987258, 507927, 7192532, 7655613, 6545891,
5346675, 8041997, 2647994, 3009748, 5767564, 4148469, 749577, 4357667,
3980599, 2569011, 6764887, 1723229, 1665318, 2028038, 1163598, 5011144,
3994671, 8368538, 7009900, 3020393, 3363542, 214880, 545376, 7609976,
3105558, 7277073, 508145, 7826699, 860144, 3430436, 140244, 6866265,
6195333, 3123762, 2358373, 6187330, 5365997, 6663603, 2926054, 7987710,
8077412, 3531229, 4405932, 4606686, 1900052, 7598542, 1054478, 7648983 }
Appendix C — Loop Bounds
付録C — ループの上限
There are four algorithms in this standard with loops that iterate an indeterminate number of times, though the expected number of iterations is a small constant in each case. Three of the four algorithms involve sampling from the output of an XOF, where the amount of output required from the XOF is proportional to the number of iterations that are performed.
本標準には、反復回数が不定のループを含むアルゴリズムが4つあります。ただし、いずれの場合も期待反復回数は小さな定数です。4つのうち3つのアルゴリズムはXOFの出力からのサンプリングを伴い、XOFから必要となる出力量は実行される反復回数に比例します。
Implementations should not bound the number of iterations in these loops or the amount of output that is extracted from the XOFs when executing these functions.14 If an implementation bounds the number of iterations or the number of bytes that may be extracted from the XOF, it shall not use a limit lower than those presented in Table 3. The limits yield a probability of approximately \(2^{-256}\) (or less) of being reached in a correct implementation of this standard. The probability is calculated under standard assumptions about the output distributions of XOFs and hash functions.
実装は、これらの関数の実行時に、これらのループの反復回数やXOFから取り出す出力量に上限を設けないことが望まれます。14実装が反復回数またはXOFから取り出してよいバイト数に上限を設ける場合、表3に示す値より低い上限を用いてはなりません。これらの上限に本標準の正しい実装で到達する確率は、約 \(2^{-256}\)(またはそれ以下)です。この確率は、XOFおよびハッシュ関数の出力分布に関する標準的な仮定の下で計算したものです。
Table 3. While loop and XOF output limits for a \(2^{-256}\) or less probability of failure
表3. 失敗確率を \(2^{-256}\) 以下とするためのwhileループおよびXOF出力の上限
| Algorithm | Minimum allowable limit (Loop iterations) | Minimum allowable limit (XOF output bytes) |
|---|---|---|
| ML-DSA.Sign_internal | 814 | N/A |
| RejBoundedPoly | 481 | 481 |
| RejNTTPoly | 298 | 894 |
| SampleInBall | 121 | 221 |
| アルゴリズム | 許容される最小上限(ループ反復回数) | 許容される最小上限(XOF出力バイト数) |
|---|---|---|
| ML-DSA.Sign_internal | 814 | N/A |
| RejBoundedPoly | 481 | 481 |
| RejNTTPoly | 298 | 894 |
| SampleInBall | 121 | 221 |
Implementations may limit the number of iterations of a while loop or the number of bytes drawn from the XOF to not exceed the maximum values in Table 3. If this option is used and the maximum number of iterations or XOF output bytes is exceeded, the algorithm shall destroy all intermediate results. If a return value or exception is produced, it shall be the same for any execution in which the maximum number of iterations or output bytes is exceeded.
実装は、whileループの反復回数またはXOFから取り出すバイト数を、表3の最大値を超えないように制限してもよいです。この選択肢を用い、反復回数またはXOF出力バイト数の最大値を超えた場合、アルゴリズムはすべての中間結果を破棄しなければなりません。戻り値または例外を生成する場合、それは反復回数または出力バイト数の最大値を超えたすべての実行で同一でなければなりません。
There is essentially no performance penalty for using a larger than necessary limit, as the limit will only be reached on a faulty execution of the loop. Because of this, limits were chosen that lower-bound the probability of reaching them to \(2^{-256}\).
上限は誤った実行の場合にしか到達しないため、必要以上に大きな上限を用いても性能上の不利益は実質的にありません。このため、到達確率の下限が \(2^{-256}\) となる上限を選びました。
ML-DSA.Sign_internal
ML-DSA.Sign_internal
Table 1 contains the expected repetitions in the rejection sampling loop of ML-DSA.Sign_internal. These are 4.25, 5.1, and 3.85 for Categories 2, 3, and 5, respectively. Therefore, the probability that the number of repetitions exceeds \(n\) is less than or equal to \(\left(\frac{5.1-1}{5.1}\right)^n\) for all categories. Solving \(\left(\frac{5.1-1}{5.1}\right)^n \le 2^{-256}\) yields \(n = 814\).
表1には、ML-DSA.Sign_internalの棄却サンプリングループの期待反復回数を示しています。これはカテゴリ2、3、5でそれぞれ4.25、5.1、3.85です。したがって、反復回数が \(n\) を超える確率は、すべてのカテゴリについて \(\left(\frac{5.1-1}{5.1}\right)^n\) 以下です。\(\left(\frac{5.1-1}{5.1}\right)^n \le 2^{-256}\) を解くと \(n = 814\) が得られます。
RejBoundedPoly
RejBoundedPoly
Let \(X\) be the number of coefficients generated in \(n\) iterations of the while loop of RejBoundedPoly15. Then \(X\) is \(\mathit{Binomial}(2n, \theta)\), where \(\theta\) is either \(\frac{9}{16}\) or \(\frac{15}{16}\), depending on the parameter \(\eta\). For \(\theta = \frac{9}{16}\), the probability that fewer than \(256\) coefficients are generated in 481 iterations of the main loop in RejBoundedPoly is less than \(2^{-256}\). Each iteration consumes one byte of output from H.
RejBoundedPolyのwhileループの \(n\) 回の反復で生成される係数の数を \(X\) とする15。このとき \(X\) は \(\mathit{Binomial}(2n, \theta)\) に従います。ここで \(\theta\) は、パラメータ \(\eta\) に応じて \(\frac{9}{16}\) または \(\frac{15}{16}\) のいずれかです。\(\theta = \frac{9}{16}\) の場合、RejBoundedPolyのメインループの481回の反復で生成される係数が \(256\) 個未満となる確率は \(2^{-256}\) 未満です。各反復はHの出力を1バイト消費します。
RejNTTPoly
RejNTTPoly
The number of valid coefficients generated in \(n\) calls to G.Squeeze in RejNTTPoly is \(\mathit{Binomial}(n, 2^{-23}q)\). It follows that after \(298\) calls, the probability of failure is less than \(2^{-256}\). Each iteration consumes three bytes of output from G.
RejNTTPolyにおけるG.Squeezeの \(n\) 回の呼出しで生成される有効な係数の数は \(\mathit{Binomial}(n, 2^{-23}q)\) に従います。このことから、\(298\) 回の呼出しの後の失敗確率は \(2^{-256}\) 未満となります。各反復はGの出力を3バイト消費します。
SampleInBall
SampleInBall
Step 9 in SampleInBall is executed every time a pseudorandom byte is greater than a value \(i\) in the range \([256-\tau, 255]\). The parameter \(\tau\) is 39, 49, and 60 for categories 2, 3, and 5, respectively. Therefore, the probability that this step is executed more than \(n\) times in a single iteration of the for loop is less than or equal to \((\frac{59}{256})^n \le (\frac{\tau}{256})^n\). Solving \((\frac{59}{256})^n \le 2^{-256}\) yields a bound of \(n = 121\) for the while loop on step 8 of SampleInBall. Each iteration consumes one byte of output from H.
SampleInBallのステップ9は、擬似乱数バイトが範囲 \([256-\tau, 255]\) 内の値 \(i\) より大きいたびに実行されます。パラメータ \(\tau\) はカテゴリ2、3、5でそれぞれ39、49、60です。したがって、forループの1回の反復の中でこのステップが \(n\) 回を超えて実行される確率は \((\frac{59}{256})^n \le (\frac{\tau}{256})^n\) 以下です。\((\frac{59}{256})^n \le 2^{-256}\) を解くと、SampleInBallのステップ8のwhileループについて上限 \(n = 121\) が得られます。各反復はHの出力を1バイト消費します。
Each call to SampleInBall extracts eight bytes from H and then performs \(\tau\) iterations of the for loop, each of which extracts an indeterminate amount of data from H. The probability that more than \(n\) bytes of output will be required from H during an execution of SampleInBall for a given value of \(\tau\) is
SampleInBallの各呼出しは、Hから8バイトを取り出した後、forループを \(\tau\) 回反復し、その各反復でHから不定量のデータを取り出します。ある \(\tau\) の値に対してSampleInBallの1回の実行中にHから \(n\) バイトを超える出力が必要となる確率は、次のとおりです。
\(P(n, 60)\) is less than \(2^{-256}\) when \(n\) is 221 or greater. Implementations may limit the number of bytes extracted from H to \(n \ge 221\). Such implementations must stop the execution of SampleInBall, return a constant that represents an error and no other output, and destroy all intermediate results after \(n\) bytes of output have been consumed.
\(P(n, 60)\) は、\(n\) が221以上のとき \(2^{-256}\) 未満です。実装は、Hから取り出すバイト数を \(n \ge 221\) に制限してもよいです。そのような実装は、\(n\) バイトの出力を消費した後、SampleInBallの実行を停止し、エラーを表す定数のみを返して他の出力は返さず、すべての中間結果を破棄しなければなりません。
Appendix D — Differences from the CRYSTALS-DILITHIUM Submission
付録D — CRYSTALS-DILITHIUM提案との相違点
ML-DSA is derived from Version 3.1 of CRYSTALS-DILITHIUM [6]. Version 3.1 differs slightly from the most recent version that appears on the NIST website (i.e., Version 3 CRYSTALS-DILITHIUM [5]). Appendices D.1, D.2, and D.3 document the differences between Versions 3 and 3.1, the differences between Version 3.1 and the initial public draft of the ML-DSA, and the differences between the initial public draft and the ML-DSA standard as published in this document, respectively.
ML-DSA は CRYSTALS-DILITHIUM の Version 3.1 [6] から派生したものです。Version 3.1 は、NIST のウェブサイトに掲載されている最新版(すなわち Version 3 CRYSTALS-DILITHIUM [5])とわずかに異なります。付録 D.1、D.2、D.3 はそれぞれ、Version 3 と Version 3.1 の相違点、Version 3.1 と ML-DSA の初期公開草案の相違点、および初期公開草案と本文書で公表する ML-DSA 標準の相違点を記述します。
D.1 Differences Between Version 3.1 and the Round 3 Version of CRYSTALS-DILITHIUM
D.1 CRYSTALS-DILITHIUM の Version 3.1 と第 3 ラウンド版の相違点
The lengths of the variables \(\rho'\) (private random seed) and \(\mu\) (message representative) in the signing algorithm were increased from 384 to 512 bits. The increase in the length of \(\mu\) corrects a security flaw that appeared in the third-round submission, where a collision attack against SHAKE256 with a 384-bit output would make it so that parameters targeting NIST security strength category 5 could only meet category 4 [32].
署名アルゴリズムにおける変数 \(\rho'\)(秘密のランダムシード)および \(\mu\)(メッセージ代表値)の長さを 384 ビットから 512 ビットに増やしました。\(\mu\) の長さの増加は、第 3 ラウンドの提出版に存在したセキュリティ上の欠陥を修正するものです。この欠陥では、384 ビット出力の SHAKE256 に対する衝突攻撃により、NIST セキュリティ強度カテゴリ 5 を目標とするパラメータがカテゴリ 4 しか満たせなくなっていました [32]。
Additionally, the length of the variable \(tr\) (the hash of the public key) was reduced from 384 to 256 bits. In key generation, the variable \(\varsigma\) was relabeled as \(\rho'\) and increased in size from 256 bits to 512 bits.
さらに、変数 \(tr\)(公開鍵のハッシュ)の長さを 384 ビットから 256 ビットに減らしました。鍵生成では、変数 \(\varsigma\) を \(\rho'\) に改名し、そのサイズを 256 ビットから 512 ビットに増やしました。
D.2 Differences Between Version 3.1 of CRYSTALS-DILITHIUM and FIPS 204 Initial Public Draft
D.2 CRYSTALS-DILITHIUM の Version 3.1 と FIPS 204 初期公開草案の相違点
In order to ensure the properties noted in [14], ML-DSA increases the length of 𝑡𝑟 to 512 bits and increases the length of 𝑐 ̃to 384 and 512 bits for the parameter sets ML-DSA-65 and ML-DSA-87, respectively. In draft ML-DSA, only the first 256 bits of 𝑐 ̃are used in the generation of 𝑐.
[14] に記載された性質を確保するため、ML-DSA では 𝑡𝑟 の長さを 512 ビットに増やし、𝑐 ̃の長さをパラメータセット ML-DSA-65 では 384 ビットに、ML-DSA-87 では 512 ビットに増やしています。草案の ML-DSA では、𝑐 の生成に 𝑐 ̃の先頭 256 ビットのみを使用します。
In Version 3.1 of the CRYSTALS-DILITHIUM submission, the default version of the signing algorithm is deterministic with \(\rho'\) being generated pseudorandomly from the signer’s private key and the message, and an optional version of the signing algorithm has \(\rho'\) sampled instead as a 512-bit random string. In ML-DSA, \(\rho'\) is generated by a “hedged” procedure in which \(\rho'\) is pseudorandomly derived from the signer’s private key, the message, and a 256-bit string \(rnd\), which should be generated by an Approved RBG by default. The ML-DSA standard also allows for an optional deterministic version in which \(rnd\) is a 256-bit constant string.
CRYSTALS-DILITHIUM の Version 3.1 の提出版では、署名アルゴリズムのデフォルト版は決定的であり、\(\rho'\) は署名者の秘密鍵とメッセージから擬似ランダムに生成されます。また、署名アルゴリズムのオプション版では、\(\rho'\) を代わりに 512 ビットのランダム文字列としてサンプリングします。ML-DSA では、\(\rho'\) は「ヘッジ付き」手順によって生成され、この手順では \(\rho'\) は署名者の秘密鍵、メッセージ、および 256 ビットの文字列 \(rnd\) から擬似ランダムに導出されます。この文字列は、デフォルトでは承認された RBG によって生成することが望まれます。ML-DSA 標準は、\(rnd\) を 256 ビットの定数文字列とするオプションの決定的版も認めています。
The draft ML-DSA standard also included pseudocode that unintentionally omitted a check for malformed input while unpacking the hint [33]. Failure to perform this check results in a signature scheme that is not strongly existentially unforgeable [34].
ML-DSA の草案標準には、ヒントのアンパック時に不正な形式の入力に対する検査を意図せず省略した擬似コードも含まれていました [33]。この検査を実施しないと、強存在的偽造不可能(strongly existentially unforgeable)でない署名方式となります [34]。
D.3 Changes From FIPS 204 Initial Public Draft
D.3 FIPS 204 初期公開草案からの変更点
In the final version of the ML-DSA standard, the omitted malformed input check was restored to the hint unpacking algorithm (Algorithm 21). Additionally, in the final version of ML-DSA, all of the bits of 𝑐 ̃are used in the generation of 𝑐 (Algorithm 29), and ExpandMask (Algorithm 34) is modified to take output bits from the beginning of the output of H.
ML-DSA 標準の最終版では、省略されていた不正な形式の入力の検査をヒントのアンパックアルゴリズム(Algorithm 21)に復元しました。さらに、ML-DSA の最終版では、𝑐 の生成に 𝑐 ̃のすべてのビットを使用し(Algorithm 29)、ExpandMask(Algorithm 34)は H の出力の先頭から出力ビットを取るように変更しました。
Based on comments that were submitted on the draft version, more details were provided for the pre-hash version HashML-DSA in Section 5.4. These modifications include domain separation for the cases in which the message is signed directly and cases in which a digest of the message is signed. The changes were made by explicitly defining external functions for both versions of the signing and verification functions that call an internal function corresponding to the signing or verification functions from the draft FIPS. Domain separation is included in the input to the internal function (see Algorithms 2, 3, 4, 5, 7, and 8). To simplify APIs and for testing purposes, this document also introduced a similar external/internal split for key generation (see Algorithms 1 and 6), but this is a purely editorial change, as the external key generation algorithm is functionally equivalent to the key-generation algorithm from the draft FIPS.
草案に対して提出されたコメントに基づき、Section 5.4 においてプレハッシュ版 HashML-DSA の詳細を追加しました。この変更には、メッセージを直接署名する場合とメッセージのダイジェストを署名する場合のドメイン分離が含まれます。変更は、署名関数と検証関数の両方の版について外部関数を明示的に定義し、それらが草案 FIPS の署名関数または検証関数に相当する内部関数を呼び出す形で行いました。ドメイン分離は内部関数への入力に含まれます(Algorithms 2、3、4、5、7、8 を参照してください)。API を単純化し、またテストの目的のため、本文書では鍵生成についても同様の外部/内部の分割を導入しました(Algorithms 1 および 6 を参照してください)。ただし、外部の鍵生成アルゴリズムは草案 FIPS の鍵生成アルゴリズムと機能的に等価であるため、これは純粋に編集上の変更です。
Finally, to offer misuse resistance against the possibility that keys for different parameter sets might be expanded from the same seed [35], domain separation was added to line 1 of Algorithm 6.
最後に、異なるパラメータセットの鍵が同じシードから展開される可能性 [35] に対する誤用耐性を提供するため、Algorithm 6 の 1 行目にドメイン分離を追加しました。