Internet Engineering Task Force (IETF) C. Bormann Request for Comments: 9682 Universität Bremen TZI Updates: 8610 November 2024 Category: Standards Track ISSN: 2070-1721
The Concise Data Definition Language (CDDL), as defined in RFCs 8610 and 9165, provides an easy and unambiguous way to express structures for protocol messages and data formats that are represented in Concise Binary Object Representation (CBOR) or JSON.
RFCS 8610および9165で定義されている簡潔なデータ定義言語(CDDL)は、簡潔なバイナリオブジェクト表現(CBOR)またはJSONで表されるプロトコルメッセージとデータ形式の構造を表現する簡単で明確な方法を提供します。
This document updates RFC 8610 by addressing related errata reports and making other small fixes for the ABNF grammar defined for CDDL.
このドキュメントは、関連するERRATAレポートに対処し、CDDLに定義されたABNF文法の他の小さな修正を行うことにより、RFC 8610を更新します。
This is an Internet Standards Track document.
これは、インターネット標準トラックドキュメントです。
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.
このドキュメントは、インターネットエンジニアリングタスクフォース(IETF)の製品です。IETFコミュニティのコンセンサスを表しています。公開レビューを受けており、インターネットエンジニアリングステアリンググループ(IESG)からの出版が承認されています。インターネット標準の詳細については、RFC 7841のセクション2で入手できます。
Information about the current status of this document, any errata, and how to provide feedback on it may be obtained at https://www.rfc-editor.org/info/rfc9682.
このドキュメントの現在のステータス、任意のERRATA、およびそのフィードバックを提供する方法に関する情報は、https://www.rfc-editor.org/info/rfc9682で取得できます。
Copyright (c) 2024 IETF Trust and the persons identified as the document authors. All rights reserved.
著作権(c)2024 IETF Trustおよび文書著者として特定された人。無断転載を禁じます。
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.
このドキュメントは、BCP 78およびIETFドキュメント(https://trustee.ietf.org/license-info)に関連するIETF Trustの法的規定の対象となります。この文書に関するあなたの権利と制限を説明するので、これらの文書を注意深く確認してください。このドキュメントから抽出されたコードコンポーネントには、セクション4.Eで説明されている法的規定のセクション4.Eで説明されており、改訂されたBSDライセンスで説明されている保証なしで提供されるように、改訂されたBSDライセンステキストを含める必要があります。
1. Introduction 1.1. Conventions and Definitions 2. Clarifications and Changes Based on Errata Reports 2.1. Updates to String Literal Grammar 2.1.1. Erratum ID 6527 (Text String Literals) 2.1.2. Erratum ID 6278 (Consistent String Literals) 2.1.3. Addressing Erratum ID 6526 and Erratum ID 6543 2.2. Examples Demonstrating the Updated String Syntaxes 3. Small Enabling Grammar Changes 3.1. Empty Data Models 3.2. Non-Literal Tag Numbers and Simple Values 4. Security Considerations 5. IANA Considerations 6. References 6.1. Normative References 6.2. Informative References Appendix A. Updated Collected ABNF for CDDL Appendix B. Details about Covering Erratum ID 6543 B.1. Change Proposed by Erratum ID 6543 B.2. No Further Change Needed after Updating String Literal Grammar Acknowledgments Author's Address
The Concise Data Definition Language (CDDL), as defined in [RFC8610] and [RFC9165], provides an easy and unambiguous way to express structures for protocol messages and data formats that are represented in CBOR or JSON.
[RFC8610]および[RFC9165]で定義されている簡潔なデータ定義言語(CDDL)は、CBORまたはJSONで表されるプロトコルメッセージとデータ形式の構造を表現する簡単で明確な方法を提供します。
This document updates [RFC8610] by addressing errata reports and making other small fixes for the ABNF grammar defined for CDDL. The body of this document explains and shows motivation for the updates; the updated collected ABNF syntax in Figure 11 in Appendix A replaces the collected ABNF syntax in Appendix B of [RFC8610].
このドキュメントは、ERRATAレポートに対処し、CDDLに定義されたABNF文法の他の小さな修正を行うことにより、[RFC8610]を更新します。このドキュメントの本文は、更新の動機を説明し、示しています。付録Aの図11の収集されたABNF構文は、[RFC8610]の付録Bの収集されたABNF構文を置き換えます。
The terminology from [RFC8610] applies. The grammar in [RFC8610] is based on ABNF, which is defined in [STD68] and [RFC7405].
[RFC8610]の用語が適用されます。[RFC8610]の文法は、[STD68]および[RFC7405]で定義されているABNFに基づいています。
A number of errata reports have been made regarding some details of text string and byte string literal syntax: for example, [Err6527] and [Err6543]. These are being addressed in this section, updating details of the ABNF for these literal syntaxes. Also, the changes described in [Err6526] need to be applied (backslashes have been lost during the RFC publication process of Appendix G.2 of [RFC8610], garbling the text explaining backslash escaping).
テキスト文字列とバイト文字列のリテラル構文の詳細については、多くのERRATAレポートが作成されています。たとえば、[ERR6527]および[ERR6543]。これらはこのセクションで扱われており、これらの文字通りの構文のABNFの詳細を更新します。また、[ERR6526]で説明されている変更を適用する必要があります([RFC8610]の付録G.2のRFC出版プロセス中にバックスラッシュが失われ、バックスラッシュの逃亡を説明するテキストを飾る)。
These changes are intended to mirror the way existing implementations have dealt with the errata reports. This document also uses the opportunity presented by the necessary cleanup of the grammar of string literals for a backward-compatible addition to the syntax for hexadecimal escapes. The latter change is not automatically forward compatible (i.e., CDDL specifications that make use of this syntax do not necessarily work with existing implementations until these are updated, which is recommended by this specification).
これらの変更は、既存の実装がERRATAレポートに対処した方法を反映することを目的としています。このドキュメントでは、16進エスケープの構文に後方互換性を追加するために、文字列リテラルの文法の必要なクリーンアップによって提示される機会も使用します。後者の変更は自動的に互換性があるとは限りません(つまり、この構文を使用するCDDL仕様は、これらが更新されるまで既存の実装で必ずしも動作するわけではありません。これは、この仕様で推奨されます)。
The ABNF used in [RFC8610] for the content of text string literals is rather permissive:
テキスト文字列リテラルの内容に[RFC8610]で使用されるABNFは、かなり許容されます。
; ABNF from RFC 8610: text = %x22 *SCHAR %x22 SCHAR = %x20-21 / %x23-5B / %x5D-7E / %x80-10FFFD / SESC SESC = "\" (%x20-7E / %x80-10FFFD)
Figure 1: Original ABNF from RFC 8610 for Strings with Permissive ABNF for SESC (Which Did Not Allow Hex Escapes)
図1:RFC 8610の元のABNFは、SESCの許容ABNFを備えた文字列(HEXエスケープを許可しませんでした)
This allows almost any non-C0 character to be escaped by a backslash, but critically misses out on the \uXXXX and \uHHHH\uLLLL forms that JSON allows to specify characters in hex (which should apply here according to item 6 of Section 3.1 of [RFC8610]). (Note that CDDL imports from JSON the unwieldy \uHHHH\uLLLL syntax, which represents Unicode code points beyond U+FFFF by making them look like UTF-16 surrogate pairs; CDDL text strings do not use UTF-16 or surrogates.)
これにより、ほぼすべての非C0文字をバックスラッシュによって逃げることができますが、\ uxxxxと\ uhhhhh \ ullllフォームでは、JSONがhexの文字を指定できるようにすることを大いに見逃しています(これは、ここではここに適用されるはずです。[RFC8610])。(cddlはjsonから扱いにくい\ uhhhh \ ullll構文をインポートします。これは、UTF-16サロゲートペアのように見えるようにすることでU+ffffを超えるユニコードコードポイントを表します。CDDLテキスト文字列はUTF-16またはサロゲートを使用しません。)
Both can be solved by updating the SESC rule. This document uses the opportunity to add a popular form of directly specifying characters in strings using hexadecimal escape sequences of the form \u{hex}, where hex is the hexadecimal representation of the Unicode scalar value. The result is the new set of rules defining SESC in Figure 2.
どちらもSESCルールを更新することで解決できます。このドキュメントでは、フォーム\ u {hex}の16進エスケープシーケンスを使用して、文字列に直接指定された文字を直接指定する人気のある形式を追加する機会を使用します。ここで、六角形はユニコードスカラー値の16進表現です。結果は、図2にSESCを定義する新しいルールセットです。
; new rules collectively defining SESC: SESC = "\" ( %x22 / "/" / "\" / ; \" \/ \\ %x62 / %x66 / %x6E / %x72 / %x74 / ; \b \f \n \r \t (%x75 hexchar) ) ; \uXXXX hexchar = "{" (1*"0" [ hexscalar ] / hexscalar) "}" / non-surrogate / (high-surrogate "\" %x75 low-surrogate) non-surrogate = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG) / ("D" %x30-37 2HEXDIG ) high-surrogate = "D" ("8"/"9"/"A"/"B") 2HEXDIG low-surrogate = "D" ("C"/"D"/"E"/"F") 2HEXDIG hexscalar = "10" 4HEXDIG / HEXDIG1 4HEXDIG / non-surrogate / 1*3HEXDIG HEXDIG1 = DIGIT1 / "A" / "B" / "C" / "D" / "E" / "F"
Figure 2: Update to String ABNF in Appendix B of [RFC8610]: Allow Hex Escapes
図2:[RFC8610]の付録Bの文字列ABNFの更新:ヘックスエスケープを許可する
Notes: In ABNF, strings such as "A", "B", etc., are case insensitive, as is intended here. The rules above could have also used %s"b", etc., instead of %x62, but didn't, in order to maximize compatibility with ABNF tools.
注:ABNFでは、「A」、「B」などの文字列は、ここで意図しているように、症例が鈍感です。上記のルールは、ABNFツールとの互換性を最大化するために、%x62ではなく%s "b"なども使用できた可能性があります。
Now that SESC is more restrictively formulated, an update to the BCHAR rule used in the ABNF syntax for byte string literals is also required:
SESCがより制限的に策定された今、バイト文字列リテラルのABNF構文で使用されるBCHARルールの更新も必要です。
; ABNF from RFC 8610: bytes = [bsqual] %x27 *BCHAR %x27 BCHAR = %x20-26 / %x28-5B / %x5D-10FFFD / SESC / CRLF bsqual = "h" / "b64"
Figure 3: ABNF from RFC 8610 for BCHAR
図3:BCHARのRFC 8610からのABNF
With the SESC updated as above, \' is no longer allowed in BCHAR and now needs to be explicitly included there; see Figure 4.
上記のようにSESCが更新された場合、\ 'はBCHARで許可されなくなり、そこに明示的に含まれる必要があります。図4を参照してください。
Updating BCHAR also provides an opportunity to address [Err6278], which points to an inconsistency in treating U+007F (DEL) between SCHAR and BCHAR. As U+007F is not printable, including it in a byte string literal is as confusing as for a text string literal; therefore, it should be excluded from BCHAR as it is from SCHAR. The same reasoning also applies to the C1 control characters, so the updated ABNF actually excludes the entire range from U+007F to U+009F. The same reasoning also applies to text in comments (PCHAR). For completeness, all these rules should also explicitly exclude the code points that have been set aside for UTF-16 surrogates.
BCHARの更新は、[ERR6278]に対処する機会も提供します。これは、ScharとBCharの間でU+007F(del)を治療する矛盾を示しています。u+007fは印刷できないため、リテキスト文字列の文字通りと同じくらい混乱するバイト文字列に含まれています。したがって、それはScharからのようにBcharから除外する必要があります。同じ推論がC1コントロール文字にも適用されるため、更新されたABNFは実際にはU+007FからU+009Fまでの全範囲を除外します。同じ理由は、コメント(PCHAR)のテキストにも当てはまります。完全性のために、これらのすべてのルールは、UTF-16のサロゲートのために確保されているコードポイントを明示的に除外する必要があります。
; new rules for SCHAR, BCHAR, and PCHAR: SCHAR = %x20-21 / %x23-5B / %x5D-7E / NONASCII / SESC BCHAR = %x20-26 / %x28-5B / %x5D-7E / NONASCII / SESC / "\'" / CRLF PCHAR = %x20-7E / NONASCII NONASCII = %xA0-D7FF / %xE000-10FFFD
Figure 4: Update to ABNF in Appendix B of [RFC8610]: BCHAR, SCHAR, and PCHAR
図4:[RFC8610]の付録BのABNFの更新:BCHAR、SCHAR、およびPCHAR
(Note that, apart from addressing the inconsistencies, there is no attempt to further exclude non-printable characters from the ABNF; doing this properly would draw in complexity from the ongoing evolution of the Unicode standard [UNICODE] that is not needed here.)
(矛盾に対処することとは別に、ABNFから印刷できない文字をさらに除外する試みはないことに注意してください。これを適切に行うと、ここでは必要ないUnicode標準[Unicode]の進行中の進化から複雑さが得られることに注意してください。)
The above changes also cover [Err6543] (a proposal to split off qualified byte string literals from UTF-8 byte string literals) and [Err6526] (lost backslashes); see Appendix B for details.
上記の変更は、[ERR6543](UTF-8バイト文字列リテラルから適格なバイト文字列リテラルを分割する提案)および[ERR6526](失われたバックスラッシュ)もカバーしています。詳細については、付録Bを参照してください。
The CDDL example in Figure 5 demonstrates various escaping techniques now available for (byte and text) strings in CDDL. Obviously, in the literals for a and x, there is no need to escape the second character, an o, as \u{6f}; this is just for demonstration. Similarly, as shown in c and z, there also is no need to escape the "🁳" (DOMINO TILE VERTICAL-02-02, U+1F073) or "⌘" (PLACE OF INTEREST SIGN, U+2318); however, escaping them may be convenient in order to limit the character repertoire of a CDDL file itself to ASCII [STD80].
図5のCDDLの例は、CDDLの(バイトとテキスト)文字列で現在利用可能なさまざまな脱出技術を示しています。明らかに、aとxのリテラルでは、2番目の文字、o、as \ u {6f}を逃れる必要はありません。これはデモンストレーションのためだけです。同様に、CとZに示すように、「🁳」(Domino Tile Vertical-02-02、U+1F073)または「⌘」(関心のある標識の場所、U+2318)から逃げる必要はありません。ただし、CDDLファイル自体の文字レパートリーをASCII [STD80]に制限するために、それらを逃がすことは便利です。
start = [a, b, c, x, y, z] ; "🁳", DOMINO TILE VERTICAL-02-02, and ; "⌘", PLACE OF INTEREST SIGN, in a text string: a = "D\u{6f}mino's \u{1F073} + \u{2318}" ; \u{}-escape 3 chars b = "Domino's \uD83C\uDC73 + \u2318" ; escape JSON-like c = "Domino's 🁳 + ⌘" ; unescaped ; in a byte string given as text, the ' needs to be escaped: x = 'D\u{6f}mino\u{27}s \u{1F073} + \u{2318}' ; \u{}-escape 4 chars y = 'Domino\'s \uD83C\uDC73 + \u2318' ; escape JSON-like z = 'Domino\'s 🁳 + ⌘' ; escape ' only
Figure 5: Example Text and Byte String Literals with Various Escaping Techniques
図5:さまざまな脱出技術を備えたテキストとバイトの文字列リテラルの例
In this example, the rules a to c and x to z all produce strings with byte-wise identical content: a to c are text strings and x to z are byte strings. Figure 6 illustrates this by showing the output generated from the start rule in Figure 5, using pretty-printed hexadecimal.
この例では、ルールaからx x zからzはすべて、バイトごとに同一のコンテンツを持つ文字列を生成します。図6は、これを図5の開始ルールから生成した出力を示し、かなり印刷された16進数を使用して示しています。
86 # array(6) 73 # text(19) 446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" 73 # text(19) 446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" 73 # text(19) 446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" 53 # bytes(19) 446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" 53 # bytes(19) 446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘" 53 # bytes(19) 446f6d696e6f277320f09f81b3202b20e28c98 # "Domino's 🁳 + ⌘"
Figure 6: Generated CBOR from CDDL Example (Pretty-Printed Hexadecimal)
図6:CDDLの例から生成されたCBOR(かなり印刷された16進数)
Each subsection that follows specifies a small change to the grammar that is intended to enable certain kinds of specifications. These changes are backward compatible (i.e., CDDL files that comply with [RFC8610] continue to match the updated grammar) but not necessarily forward compatible (i.e., CDDL specifications that make use of these changes cannot necessarily be processed by existing implementations of [RFC8610]).
次の各サブセクションは、特定の種類の仕様を有効にすることを目的とした文法の小さな変更を指定します。これらの変更は、後方互換性があります(つまり、[RFC8610]に準拠したCDDLファイルは更新された文法と一致し続けます)が、必ずしもフォワード互換性があるわけではありません(つまり、これらの変更を使用するCDDL仕様は、[RFC8610]の既存の実装によって必ずしも処理できません。)。
[RFC8610] requires a CDDL file to have at least one rule.
[RFC8610]は、少なくとも1つのルールを持つためにCDDLファイルを必要とします。
; ABNF from RFC 8610: cddl = S 1*(rule S)
Figure 7: ABNF from RFC 8610 for Top-Level Rule cddl
図7:トップレベルのルールCDDLのRFC8610からのABNF
This makes sense when the file has to stand alone, as a CDDL data model needs to have at least one rule to provide an entry point (i.e., a start rule).
CDDLデータモデルには、エントリポイント(つまり、開始ルール)を提供するために少なくとも1つのルールが必要であるため、ファイルが単独で立候補する必要がある場合に理にかなっています。
With CDDL modules [CDDL-MODULES], CDDL files can also include directives, and these might be the source of all the rules that ultimately make up the module created by the file. Any other rule content in the file has to be available for directive processing, making the requirement for at least one rule cumbersome.
CDDLモジュール[CDDL-modules]を使用すると、CDDLファイルにもディレクティブを含めることができ、これらはファイルによって作成されたモジュールを最終的に構成するすべてのルールのソースである可能性があります。ファイル内の他のルールコンテンツは、指令処理に利用できる必要があり、少なくとも1つのルールの要件を面倒にする必要があります。
Therefore, the present update extends the grammar as in Figure 8 and turns the existence of at least one rule into a semantic constraint, to be fulfilled after processing of all directives.
したがって、現在の更新は図8のように文法を拡張し、少なくとも1つのルールの存在を意味的な制約に変え、すべての指令を処理した後に満たされます。
; new top-level rule: cddl = S *(rule S)
Figure 8: Update to Top-Level ABNF in Appendices B and C of RFC 8610
図8:RFC 8610の付録BとCのトップレベルABNFの更新
The existing ABNF syntax for expressing tags in CDDL is as follows:
CDDLでタグを表現するための既存のABNF構文は次のとおりです。
; extracted from the ABNF in RFC 8610: type2 =/ "#" "6" ["." uint] "(" S type S ")"
Figure 9: Original ABNF from RFC 8610 for Tag Syntax
図9:タグ構文のためのRFC 8610からのオリジナルABNF
This means tag numbers can only be given as literal numbers (uints). Some specifications operate on ranges of tag numbers; for example, [RFC9277] has a range of tag numbers 1668546817 (0x63740101) to 1668612095 (0x6374FFFF) to tag specific content formats. This cannot currently be expressed in CDDL. Similar considerations apply to simple values (#7.xx).
つまり、タグ番号はリテラル番号(UINTS)としてのみ指定できることを意味します。一部の仕様は、タグ番号の範囲で動作します。たとえば、[RFC9277]には、特定のコンテンツ形式にタグを付けるために、1668612095(0x63740101)から1668612095(0x63740101)までの範囲のタグ番号1668546817(0x63740101)があります。これは現在CDDLで表現することはできません。同様の考慮事項は、単純な値(#7.xx)にも当てはまります。
This update extends the syntax to the following:
この更新により、構文は次のものに拡張されます。
; new rules collectively defining the tagged case: type2 =/ "#" "6" ["." head-number] "(" S type S ")" / "#" "7" ["." head-number] head-number = uint / ("<" type ">")
Figure 10: Update to Tag and Simple Value ABNF in Appendices B and C of RFC 8610
図10:RFC 8610の付録BとCのタグとシンプルな値ABNFの更新
For #6, the head-number stands for the tag number. For #7, the head-number stands for the simple value if it is in the ranges 0..23 or 32..255 (as per Section 3.3 of RFC 8949 [STD94], the simple values 24..31 are not used). For 24..31, the head-number stands for the "additional information", e.g., #7.25 or #7.<25> is a float16, etc. (All ranges mentioned here are inclusive.)
#6の場合、ヘッド番号はタグ番号を表します。#7の場合、ヘッドナンバーは範囲0..23または32..255にある場合、単純な値を表します(RFC 8949 [STD94]のセクション3.3に従って、単純な値24..31は使用されません)。24..31の場合、ヘッドナンバーは「追加情報」、例えば#7.25または#7。<25>はFloat16などです(ここに記載されているすべての範囲は包括的です。)
So the above range can be expressed in a CDDL fragment such as:
したがって、上記の範囲は、次のようなCDDLフラグメントで表現できます。
ct-tag<content> = #6.<ct-tag-number>(content) ct-tag-number = 1668546817..1668612095 ; or use 0x63740101..0x6374FFFF
Notes:
注:
1. This syntax reuses the angle bracket syntax for generics; this reuse is innocuous because a generic parameter or argument only ever occurs after a rule name (id), while it occurs after the "." (dot) character here. (Whether there is potential for human confusion can be debated; the above example deliberately uses generics as well.)
1. この構文は、ジェネリックの角度ブラケット構文を再利用します。一般的なパラメーターまたは引数は、ルール名(ID)の後にのみ発生するのに対し、「。」の後に発生するため、この再利用は無害です。(ドット)ここでのキャラクター。(人間の混乱の可能性があるかどうかについて議論することができます。上記の例では、ジェネリックも意図的に使用しています。)
2. The updated ABNF grammar makes it a bit more explicit that the number given after the optional dot is the value of the argument: for tags and simple values, it is not giving the CBOR "additional information”, as it is with other uses of # in CDDL. (Adding this observation to Section 2.2.3 of [RFC8610] is the subject of [Err6575]; it is correctly noted in Section 3.6 of [RFC8610].) In hindsight, maybe a different character than the dot should have been chosen for this special case; however, changing the grammar in the current document would have been too disruptive.
2. 更新されたABNF文法により、オプションのドットの後に与えられた数値が引数の値であることをもう少し明確にします。タグと単純な値については、#の他の用途と同様に、CBORに「追加情報」を与えていません。CDDLでは([RFC8610]のセクション2.2.3にこの観察結果を追加することは、[RFC8610]のセクション3.6で正しく指摘されています。)しかし、この特別なケースに選ばれました。
The grammar fixes and updates in this document are not believed to create additional security considerations. The security considerations in Section 5 of [RFC8610] apply. Specifically, the potential for confusion is increased in an environment that uses a combination of CDDL tools, some of which have been updated and some of which have not, in particular based on Section 2.
このドキュメントの文法の修正と更新は、追加のセキュリティ上の考慮事項を作成するとは考えられていません。[RFC8610]のセクション5のセキュリティ上の考慮事項が適用されます。具体的には、CDDLツールの組み合わせを使用する環境では混乱の可能性が増加しますが、その一部は更新されており、特にセクション2に基づいています。
Attackers may want to exploit such potential confusion by crafting CDDL models that are interpreted differently by different parts of a system. There will be a period of transition from the details that the grammar in [RFC8610] handled in a less well-defined way, to the updated grammar defined in the present document. This transition might offer one (but not the only) type of opportunity for the kind of attack that relies on differences between implementations. Implementations that make use of CDDL models operationally already need to ascertain the provenance (and thus authenticity and integrity) and applicability of models they employ. At the time of writing, it is expected that the models will generally be processed by a software developer, within a software development environment. Therefore, developers are advised to treat CDDL models with the same care as any other source code.
攻撃者は、システムのさまざまな部分によって異なって解釈されるCDDLモデルを作成することにより、このような潜在的な混乱を悪用したい場合があります。[RFC8610]の文法が、あまり明確に定義されていない方法で処理された詳細から、現在の文書で定義されている更新された文法への移行期間があります。この移行は、実装間の違いに依存する種類の攻撃のために、1つの(ただし唯一ではない)機会を提供する場合があります。CDDLモデルを操作的に使用する実装は、採用されているモデルの出所(したがって信頼性と整合性)と適用性を確認する必要があります。執筆時点では、モデルは通常、ソフトウェア開発環境内でソフトウェア開発者によって処理されることが予想されます。したがって、開発者は、他のソースコードと同じ注意でCDDLモデルを扱うことをお勧めします。
This document has no IANA actions.
このドキュメントにはIANAアクションがありません。
[RFC8610] Birkholz, H., Vigano, C., and C. Bormann, "Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures", RFC 8610, DOI 10.17487/RFC8610, June 2019, <https://www.rfc-editor.org/info/rfc8610>.
[STD68] Internet Standard 68, <https://www.rfc-editor.org/info/std68>. At the time of writing, this STD comprises the following: Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", STD 68, RFC 5234, DOI 10.17487/RFC5234, January 2008, <https://www.rfc-editor.org/info/rfc5234>.
[STD94] Internet Standard 94, <https://www.rfc-editor.org/info/std94>. At the time of writing, this STD comprises the following: Bormann, C. and P. Hoffman, "Concise Binary Object Representation (CBOR)", STD 94, RFC 8949, DOI 10.17487/RFC8949, December 2020, <https://www.rfc-editor.org/info/rfc8949>.
[CDDL-MODULES] Bormann, C. and B. Moran, "CDDL Module Structure", Work in Progress, Internet-Draft, draft-ietf-cbor-cddl-modules-03, 1 September 2024, <https://datatracker.ietf.org/doc/html/ draft-ietf-cbor-cddl-modules-03>.
[EDN-LITERALS] Bormann, C., "CBOR Extended Diagnostic Notation (EDN)", Work in Progress, Internet-Draft, draft-ietf-cbor-edn- literals-13, 3 November 2024, <https://datatracker.ietf.org/doc/html/draft-ietf-cbor- edn-literals-13>.
[Err6278] RFC Errata, Erratum ID 6278, RFC 8610, <https://www.rfc-editor.org/errata/eid6278>.
[Err6526] RFC Errata, Erratum ID 6526, RFC 8610, <https://www.rfc-editor.org/errata/eid6526>.
[Err6527] RFC Errata, Erratum ID 6527, RFC 8610, <https://www.rfc-editor.org/errata/eid6527>.
[Err6543] RFC Errata, Erratum ID 6543, RFC 8610, <https://www.rfc-editor.org/errata/eid6543>.
[Err6575] RFC Errata, Erratum ID 6575, RFC 8610, <https://www.rfc-editor.org/errata/eid6575>.
[RFC7405] Kyzivat, P., "Case-Sensitive String Support in ABNF", RFC 7405, DOI 10.17487/RFC7405, December 2014, <https://www.rfc-editor.org/info/rfc7405>.
[RFC9165] Bormann, C., "Additional Control Operators for the Concise Data Definition Language (CDDL)", RFC 9165, DOI 10.17487/RFC9165, December 2021, <https://www.rfc-editor.org/info/rfc9165>.
[RFC9277] Richardson, M. and C. Bormann, "On Stable Storage for Items in Concise Binary Object Representation (CBOR)", RFC 9277, DOI 10.17487/RFC9277, August 2022, <https://www.rfc-editor.org/info/rfc9277>.
[STD80] Internet Standard 80, <https://www.rfc-editor.org/info/std80>. At the time of writing, this STD comprises the following: Cerf, V., "ASCII format for network interchange", STD 80, RFC 20, DOI 10.17487/RFC0020, October 1969, <https://www.rfc-editor.org/info/rfc20>.
[UNICODE] The Unicode Consortium, "The Unicode Standard", <https://www.unicode.org/versions/latest/>.
This appendix is normative.
この付録は規範的です。
It provides the full ABNF from [RFC8610] as updated by the present document.
現在のドキュメントで更新されたように、[RFC8610]から完全なABNFを提供します。
cddl = S *(rule S) rule = typename [genericparm] S assignt S type / groupname [genericparm] S assigng S grpent typename = id groupname = id assignt = "=" / "/=" assigng = "=" / "//=" genericparm = "<" S id S *("," S id S ) ">" genericarg = "<" S type1 S *("," S type1 S ) ">" type = type1 *(S "/" S type1) type1 = type2 [S (rangeop / ctlop) S type2] ; space may be needed before the operator if type2 ends in a name type2 = value / typename [genericarg] / "(" S type S ")" / "{" S group S "}" / "[" S group S "]" / "~" S typename [genericarg] / "&" S "(" S group S ")" / "&" S groupname [genericarg] / "#" "6" ["." head-number] "(" S type S ")" / "#" "7" ["." head-number] / "#" DIGIT ["." uint] ; major/ai / "#" ; any head-number = uint / ("<" type ">") rangeop = "..." / ".." ctlop = "." id group = grpchoice *(S "//" S grpchoice) grpchoice = *(grpent optcom) grpent = [occur S] [memberkey S] type / [occur S] groupname [genericarg] ; preempted by above / [occur S] "(" S group S ")" memberkey = type1 S ["^" S] "=>" / bareword S ":" / value S ":" bareword = id optcom = S ["," S] occur = [uint] "*" [uint] / "+" / "?" uint = DIGIT1 *DIGIT / "0x" 1*HEXDIG / "0b" 1*BINDIG / "0" value = number / text / bytes int = ["-"] uint ; This is a float if it has fraction or exponent; int otherwise number = hexfloat / (int ["." fraction] ["e" exponent ]) hexfloat = ["-"] "0x" 1*HEXDIG ["." 1*HEXDIG] "p" exponent fraction = 1*DIGIT exponent = ["+"/"-"] 1*DIGIT text = %x22 *SCHAR %x22 SCHAR = %x20-21 / %x23-5B / %x5D-7E / NONASCII / SESC SESC = "\" ( %x22 / "/" / "\" / ; \" \/ \\ %x62 / %x66 / %x6E / %x72 / %x74 / ; \b \f \n \r \t (%x75 hexchar) ) ; \uXXXX hexchar = "{" (1*"0" [ hexscalar ] / hexscalar) "}" / non-surrogate / (high-surrogate "\" %x75 low-surrogate) non-surrogate = ((DIGIT / "A"/"B"/"C" / "E"/"F") 3HEXDIG) / ("D" %x30-37 2HEXDIG ) high-surrogate = "D" ("8"/"9"/"A"/"B") 2HEXDIG low-surrogate = "D" ("C"/"D"/"E"/"F") 2HEXDIG hexscalar = "10" 4HEXDIG / HEXDIG1 4HEXDIG / non-surrogate / 1*3HEXDIG bytes = [bsqual] %x27 *BCHAR %x27 BCHAR = %x20-26 / %x28-5B / %x5D-7E / NONASCII / SESC / "\'" / CRLF bsqual = "h" / "b64" id = EALPHA *(*("-" / ".") (EALPHA / DIGIT)) ALPHA = %x41-5A / %x61-7A EALPHA = ALPHA / "@" / "_" / "$" DIGIT = %x30-39 DIGIT1 = %x31-39 HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F" HEXDIG1 = DIGIT1 / "A" / "B" / "C" / "D" / "E" / "F" BINDIG = %x30-31 S = *WS WS = SP / NL SP = %x20 NL = COMMENT / CRLF COMMENT = ";" *PCHAR CRLF PCHAR = %x20-7E / NONASCII NONASCII = %xA0-D7FF / %xE000-10FFFD CRLF = %x0A / %x0D.0A
Figure 11: ABNF for CDDL as Updated
図11:更新されたCDDLのABNF
This appendix is informative.
この付録は有益です。
[Err6543] notes that the ABNF used in [RFC8610] for the content of byte string literals lumps together byte strings notated as text with byte strings notated in base16 (hex) or base64 (but see also updated BCHAR rule in Figure 4):
[ERR6543]は、バイト文字列リテラルのコンテンツに[RFC8610]で使用されているABNFが、Base16(hex)またはbase64で記載されたバイト文字列のテキストとして記述されたバイト文字列をまとめるために使用されることを指摘しています(ただし、図4の更新されたBCharルールも参照):
; ABNF from RFC 8610: bytes = [bsqual] %x27 *BCHAR %x27 BCHAR = %x20-26 / %x28-5B / %x5D-10FFFD / SESC / CRLF
Figure 12: Original ABNF from RFC 8610 for BCHAR
図12:BCHARのRFC 8610からの元のABNF
Erratum ID 6543 proposes handling the two cases in separate ABNF rules (where, with an updated SESC, BCHAR obviously needs to be updated as above):
Erratum ID 6543は、別のABNFルールで2つのケースを処理することを提案しています(更新されたSESCを使用すると、BCHARは明らかに上記のように更新する必要があります):
; Proposal from Erratum ID 6543: bytes = %x27 *BCHAR %x27 / bsqual %x27 *QCHAR %x27 BCHAR = %x20-26 / %x28-5B / %x5D-10FFFD / SESC / CRLF QCHAR = DIGIT / ALPHA / "+" / "/" / "-" / "_" / "=" / WS
Figure 13: Proposal from Erratum ID 6543 to Split the Byte String Rules
図13:Erratum ID 6543からバイト文字列ルールを分割する提案
This potentially causes a subtle change, which is hidden in the WS rule:
これは、WSルールに隠されている微妙な変化を引き起こす可能性があります。
; ABNF from RFC 8610: WS = SP / NL SP = %x20 NL = COMMENT / CRLF COMMENT = ";" *PCHAR CRLF PCHAR = %x20-7E / %x80-10FFFD CRLF = %x0A / %x0D.0A
Figure 14: ABNF Definition of WS from RFC 8610
図14:RFC 8610からのWSのABNF定義
This allows any non-C0 character in a comment, so this fragment becomes possible:
これにより、コメント内の非C0文字が可能になるため、このフラグメントが可能になります。
foo = h' 43424F52 ; 'CBOR' 0A ; LF, but don't use CR! '
The current text is not unambiguously saying whether the three apostrophes need to be escaped with a \ or not, as in:
現在のテキストは、次のように、3つのアポストロフィを\で逃げる必要があるかどうかを明確に言っていません。
foo = h' 43424F52 ; \'CBOR\' 0A ; LF, but don\'t use CR! '
... which would be supported by the existing ABNF in [RFC8610].
...これは[RFC8610]の既存のABNFによってサポートされます。
This document takes the simpler approach of leaving the processing of the content of the byte string literal to a semantic step after processing the syntax of the bytes and BCHAR rules, as updated by Figures 2 and 4 in Section 2.1 (updates prompted by the combination of [Err6527] and [Err6278]).
このドキュメントは、セクション2.1で図2および4で更新されたように、バイト文字列の構文とBCHARルールの構文を処理した後、バイト文字列のコンテンツの処理をセマンティックステップに残すというより簡単なアプローチを取ります(の組み合わせによってプロンプトが表示される更新[err6527]および[err6278])。
Therefore, the rules in Figure 14 (as updated by Figure 4) are applied to the result of this processing where bsqual is given as h or b64.
したがって、図14(図4で更新された)のルールは、BsqualがHまたはB64として与えられるこの処理の結果に適用されます。
Note that this approach also works well with the use of byte strings in Section 3 of [RFC9165]. It does require some care when copying-and-pasting into CDDL models from ABNF that contains single quotes (which may also hide as apostrophes in comments); these need to be escaped or possibly replaced by %x27.
このアプローチは、[RFC9165]のセクション3でバイト文字列の使用にも適していることに注意してください。単一の引用を含むABNFからCDDLモデルにコピーしてパスティングするときは、ある程度の注意が必要です(コメントでアポストロフィとしても隠される可能性があります)。これらを逃がすか、おそらく%x27に置き換える必要があります。
Finally, the approach taken lends support to extending bsqual in CDDL similar to the way this is done for CBOR diagnostic notation in [EDN-LITERALS]. (Note that, at the time of writing, the processing of string literals is quite similar for both CDDL and Extended Diagnostic Notation (EDN), except that CDDL has end-of-line comments that are ";" based and EDN has two comment syntaxes: one in-line "/" based and one end-of-line "#" based.)
最後に、採用されたアプローチは、[EDNリテラル]のCBOR診断表記のためにこれが行われる方法と同様に、CDDLのBSQUALを拡張することをサポートします。(執筆時点で、文字列リテラルの処理は、CDDLと拡張診断表記(EDN)の両方で非常に類似していることに注意してください。構文:1つのインライン "/"ベースと1つの終了 "#"ベース。)
Many thanks go to the submitters of the errata reports addressed in this document. In one of the ensuing discussions, Doug Ewell proposed defining an ABNF rule "NONASCII", of which we have included the essence. Special thanks to the reviewers Marco Tiloca, Christian Amsüss (Shepherd Review and further guidance), Orie Steele (AD Review and further guidance), and Éric Vyncke (detailed IESG review).
このドキュメントで宛てられたErrataレポートの提出者に感謝します。その後の議論の1つで、Doug EwellはABNFルール「Nonsascii」を定義することを提案しました。レビュアーのマルコ・ティロカ、クリスチャン・アムス(シェパード・レビューとさらなるガイダンス)、オリー・スティール(広告レビューとさらなるガイダンス)、エリック・ヴィンケ(詳細なIESGレビュー)に感謝します。
Carsten Bormann Universität Bremen TZI Postfach 330440 D-28359 Bremen Germany Phone: +49-421-218-63921 Email: cabo@tzi.org