ステータス:
PROPOSED STANDARD
原文:
RFC 8152
その他の情報:
Datatracker|Info page
このRFCは廃止されました。後継はRFC9052, RFC9053です。

RFC 8152

CBOR Object Signing and Encryption (COSE)

RFC 8152

CBORオブジェクト署名および暗号化(COSE)

Abstract

概要

Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need for the ability to have basic security services defined for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.

Concise Binary Object Representation(CBOR)は、コードサイズやメッセージサイズが小さくなるように設計されたデータ形式です。このデータ形式に基本的なセキュリティーサービスを定義する必要があります。この文書では、CBORオブジェクト署名および暗号化(COSE)プロトコルを定義します。この仕様書では、CBORをシリアライズに使用して署名、メッセージ認証コード、および暗号化を作成および処理する方法について説明します。さらに、この仕様書では、CBORを使用して暗号鍵を表現する方法についても説明します。

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 http://www.rfc-editor.org/info/rfc8152.

このドキュメントの現在のステータス、誤り情報、およびフィードバックの提供方法に関する情報は、http://www.rfc-editor.org/info/rfc8152で入手できる場合があります。

Copyright (c) 2017 IETF Trust and the persons identified as the document authors. All rights reserved.

Copyright (c) 2017 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://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 Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

このドキュメントは、このドキュメントの公開日に有効なBCP 78およびIETF文書に関連するIETFトラストの法的規定(http://trustee.ietf.org/license-info)の対象です。このドキュメントに関連するあなたの権利と制限については、これらの文書を注意深く確認してください。このドキュメントから抽出されたコードコンポーネントは、Trust Legal Provisionsのセクション4.eで説明されているように、Simplified BSD Licenseのテキストを含める必要があり、Simplified BSD Licenseで説明されているように保証なしで提供されます。

There has been an increased focus on small, constrained devices that make up the Internet of Things (IoT). One of the standards that has come out of this process is "Concise Binary Object Representation (CBOR)" [RFC7049]. CBOR extended the data model of the JavaScript Object Notation (JSON) [RFC7159] by allowing for binary data, among other changes. CBOR is being adopted by several of the IETF working groups dealing with the IoT world as their encoding of data structures. CBOR was designed specifically to be both small in terms of messages transport and implementation size and be a schema-free decoder. A need exists to provide message security services for IoT, and using CBOR as the message-encoding format makes sense.

IoT(Internet of Things)を構成する小型の制約されたデバイスに対する注目が増しています。このプロセスから生まれた標準の一つが、「Concise Binary Object Representation(CBOR)」です[RFC7049]。CBORは、バイナリーデータを含むことを許容するなど、JavaScript Object Notation(JSON)のデータモデルを拡張しました[RFC7159]。CBORは、データ構造のエンコーディングとして、多くのIETFワーキンググループによって採用されています。CBORは、メッセージの輸送や実装サイズの面で小さく、スキーマフリーのデコーダーであるように特に設計されています。IoT向けのメッセージセキュリティーサービスの提供が必要であり、メッセージのエンコーディング形式としてCBORを使用することは合理的です。

The JOSE working group produced a set of documents [RFC7515] [RFC7516] [RFC7517] [RFC7518] using JSON that specified how to process encryption, signatures, and Message Authentication Code (MAC) operations and how to encode keys using JSON. This document defines the CBOR Object Signing and Encryption (COSE) standard, which does the same thing for the CBOR encoding format. While there is a strong attempt to keep the flavor of the original JSON Object Signing and Encryption (JOSE) documents, two considerations are taken into account:

JOSE ワーキンググループは、JSON を使用した暗号化、署名、およびメッセージ認証コード(MAC)操作の処理方法、および JSON を使用した鍵のエンコード方法を指定した一連のドキュメントを作成しました。このドキュメントでは、同じことを CBOR エンコーディング形式に対して行う CBOR オブジェクト署名および暗号化(COSE)規格を定義しています。元の JSON オブジェクト署名および暗号化(JOSE)ドキュメントの特性を保つための努力が行われる一方で、2つの考慮事項が考慮されています:

  • CBOR has capabilities that are not present in JSON and are appropriate to use. One example of this is the fact that CBOR has a method of encoding binary directly without first converting it into a base64-encoded string.
  • CBORは、JSONにはない機能を持ち、使用するのに適しています。その一例として、CBORはバイナリーを最初にBase64エンコードされた文字列に変換することなく、直接エンコードする方法を持っています。
  • COSE is not a direct copy of the JOSE specification. In the process of creating COSE, decisions that were made for JOSE were re-examined. In many cases, different results were decided on as the criteria were not always the same.
  • COSEはJOSE仕様の直接的なコピーではありません。COSEを作成する過程で、JOSEについての決定事項は再評価されました。多くの場合、基準が常に同じではなかったため、異なる結果が決定されました。
  • Define a single top message structure so that encrypted, signed, and MACed messages can easily be identified and still have a consistent view.
  • 暗号化された、署名された、およびMACを付与されたメッセージを簡単に識別し、一貫した表示を提供するために、単一のトップメッセージ構造を定義します。
  • Signed messages distinguish between the protected and unprotected parameters that relate to the content from those that relate to the signature.
  • 署名付きメッセージは、内容に関連する保護されたパラメーターとシグネチャに関連するパラメーターを区別します。
  • MACed messages are separated from signed messages.
  • MAC付きのメッセージは署名されたメッセージから分離されています。
  • MACed messages have the ability to use the same set of recipient algorithms as enveloped messages for obtaining the MAC authentication key.
  • MAC認証されたメッセージは、MAC認証キーを取得するために、封入されたメッセージと同じ受信者アルゴリズムのセットを使用する能力を持っています。
  • Use binary encodings for binary data rather than base64url encodings.
  • バイナリーデータには、base64urlエンコーディングではなく、バイナリーエンコーディングを使用してください。
  • Combine the authentication tag for encryption algorithms with the ciphertext.
  • 暗号化アルゴリズムの認証タグを暗号文と組み合わせます。
  • The set of cryptographic algorithms has been expanded in some directions and trimmed in others.
  • 暗号アルゴリズムのセットは、一部の方向で拡張され、他の方向で削減されました。

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

このドキュメントのキーワード "しなければなりません(MUST)"、"してはなりません(MUST NOT)"、"要求されています(REQUIRED)"、"することになります(SHALL)"、"することはありません(SHALL NOT)"、"すべきです(SHOULD)"、"すべきではありません(SHOULD NOT)"、"推奨されます(RECOMMENDED)"、"推奨されません(NOT RECOMMENDED)"、"してもよいです(MAY)"、および "選択できます(OPTIONAL)" は、全て大文字で表示される場合に限り、BCP 14 [RFC2119] [RFC8174]で説明されているように解釈されます。

When the words appear in lowercase, this interpretation does not apply.

小文字で表示される場合、この解釈は適用されません。

There is currently no standard CBOR grammar available for use by specifications. The CBOR structures are therefore described in prose.

現在、仕様で使用するための標準的なCBOR文法は存在しません。そのため、CBOR構造は文章で説明されています。

The document was developed by first working on the grammar and then developing the prose to go with it. An artifact of this is that the prose was written using the primitive type strings defined by CBOR Data Definition Language (CDDL) [CDDL]. In this specification, the following primitive types are used:

ドキュメントは、まず文法を作成し、それに続いてそれに対応する散文を開発することで作成されました。これによって、散文は、CBORデータ定義言語(CDDL)[CDDL]で定義されたプリミティブ型の文字列を使用して書かれました。この仕様では、以下のプリミティブ型が使用されます:

   any -- non-specific value that permits all CBOR values to be
   placed here.

   any -- どのCBOR値でもここに配置できる非特定の値。

   bool -- a boolean value (true: major type 7, value 21; false:
   major type 7, value 20).

   bool -- 真偽値(true: メジャータイプ7、値21; false: メジャータイプ7、値20)。

   bstr -- byte string (major type 2).

   bstr -- バイト文字列(メジャータイプ2).

   int -- an unsigned integer or a negative integer.

   int -- 符号なし整数または負の整数。

   nil -- a null value (major type 7, value 22).

   nil -- null値(メジャータイプ7、値22)。

   nint -- a negative integer (major type 1).

   nint -- 負の整数(メジャータイプ1)。

   tstr -- a UTF-8 text string (major type 3).

   tstr -- UTF-8テキスト文字列(メジャータイプ3)。

   uint -- an unsigned integer (major type 0).

   uint -- 符号なし整数(メジャータイプ0)。

Two syntaxes from CDDL appear in this document as shorthand. These are:

このドキュメントでは、CDDLからの2つの構文が省略形として表示されます。これらは次のようなものです:

   FOO / BAR -- indicates that either FOO or BAR can appear here.

   FOO / BAR -- ここには、FOOまたはBARのいずれかが現れることを示します。

   [+ FOO] -- indicates that the type FOO appears one or more times
   in an array.

   [+ FOO] -- 配列内にタイプFOOが1回以上出現することを示します。

As well as the prose description, a version of a CBOR grammar is presented in CDDL. Since CDDL has not been published in an RFC, this grammar may not work with the final version of CDDL. The CDDL grammar is informational; the prose description is normative.

プローズ説明に加えて、CBORのグラマーのバージョンがCDDLで示されています。CDDLはRFCで公開されていないため、このグラマーがCDDLの最終バージョンで動作しない可能性があります。CDDLグラマーは情報提供ですが、プローズ説明が規範です。

The collected CDDL can be extracted from the XML version of this document via the following XPath expression below. (Depending on the XPath evaluator one is using, it may be necessary to deal with > as an entity.)

このドキュメントのXMLバージョンから収集されたCDDLは、以下のXPath式を使用して抽出することができます。(使用しているXPath評価器によっては、">"をエンティティとして扱う必要がある場合があります。)

//artwork[@type='CDDL']/text()

//artwork[@type='CDDL']/text()

CDDL expects the initial non-terminal symbol to be the first symbol in the file. For this reason, the first fragment of CDDL is presented here.

CDDLは、最初の非終端記号がファイルの最初の記号であることを期待しています。そのため、最初のCDDLのフラグメントをここに示します。

start = COSE_Messages / COSE_Key / COSE_KeySet / Internal_Types

start = COSE_Messages / COSE_Key / COSE_KeySet / Internal_Types

; This is defined to make the tool quieter: Internal_Types = Sig_structure / Enc_structure / MAC_structure / COSE_KDF_Context

; これは、ツールを静かにするために定義されています:Internal_Types = Sig_structure / Enc_structure / MAC_structure / COSE_KDF_Context

The non-terminal Internal_Types is defined for dealing with the automated validation tools used during the writing of this document. It references those non-terminals that are used for security computations but are not emitted for transport.

非終端記号「Internal_Types」は、このドキュメントの作成中に使用される自動検証ツールの処理のために定義されています。それは、セキュリティー計算に使用されるが、輸送には出力されない非終端記号を参照しています。

In JSON, maps are called objects and only have one kind of map key: a string. In COSE, we use strings, negative integers, and unsigned integers as map keys. The integers are used for compactness of encoding and easy comparison. The inclusion of strings allows for an additional range of short encoded values to be used as well. Since the word "key" is mainly used in its other meaning, as a cryptographic key, we use the term "label" for this usage as a map key.

JSONでは、マップはオブジェクトと呼ばれ、マップキーには文字列のみがあります。COSEでは、マップキーとして文字列、負の整数、および非負の整数を使用します。整数はエンコードの効率化と簡単な比較のために使用されます。文字列の含まれることで、追加の範囲の短いエンコード値も使用できます。単語「キー」は、主に別の意味である暗号鍵として使用されるため、マップキーのこの使用法には「ラベル」という用語を使用します。

The presence of a label in a COSE map that is not a string or an integer is an error. Applications can either fail processing or process messages with incorrect labels; however, they MUST NOT create messages with incorrect labels.

COSEマップ内に文字列または整数でないラベルが存在する場合、それはエラーです。アプリケーションは処理を失敗させるか、または不正なラベルを持つメッセージを処理することができますが、ただし、不正なラベルを持つメッセージを作成してはなりません(MUST NOT)

A CDDL grammar fragment defines the non-terminal 'label', as in the previous paragraph, and 'values', which permits any value to be used.

CDDLの文法断片には、前の段落のように非終端記号「label」と「values」が定義されており、それは任意の値の使用を許可します。

label = int / tstr values = any

label = int / tstr values = any

In this document, we use the following terminology:

このドキュメントでは、以下の用語を使用します:

Byte is a synonym for octet.

バイトはオクテットの同義語です。

Constrained Application Protocol (CoAP) is a specialized web transfer protocol for use in constrained systems. It is defined in [RFC7252].

制約付きアプリケーションプロトコル(CoAP)は、制約のあるシステムで使用するための特殊なウェブ転送プロトコルです。それは、[RFC7252] で定義されています。

Authenticated Encryption (AE) [RFC5116] algorithms are those encryption algorithms that provide an authentication check of the contents algorithm with the encryption service.

認証付き暗号化(AE)[RFC5116]アルゴリズムは、暗号化サービスと共に内容アルゴリズムの認証チェックを提供する暗号化アルゴリズムです。

Authenticated Encryption with Authenticated Data (AEAD) [RFC5116] algorithms provide the same content authentication service as AE algorithms, but they additionally provide for authentication of non- encrypted data as well.

認証付き暗号化(AEAD)[RFC5116]アルゴリズムは、AEアルゴリズムと同じ内容認証サービスを提供しますが、さらに非暗号化データの認証も提供します。

The COSE object structure is designed so that there can be a large amount of common code when parsing and processing the different types of security messages. All of the message structures are built on the CBOR array type. The first three elements of the array always contain the same information:

COSEオブジェクトの構造は、異なる種類のセキュリティーメッセージを解析および処理する際に共通のコードが大量に存在できるように設計されています。すべてのメッセージ構造は、CBOR配列型をベースに構築されます。配列の最初の3つの要素には常に同じ情報が含まれています。

1. The set of protected header parameters wrapped in a bstr.

1. bstrに包まれた保護されたヘッダーパラメーターのセット。

2. The set of unprotected header parameters as a map.

2. マップとしての保護されていないヘッダーパラメーターのセット。

3. The content of the message. The content is either the plaintext or the ciphertext as appropriate. The content may be detached, but the location is still used. The content is wrapped in a bstr when present and is a nil value when detached.

3. メッセージの内容。内容は、適切な場合には平文または暗号文です。内容は切り離されることもありますが、その場所は依然として使用されます。内容が存在する場合は、bstrで包まれ、切り離されている場合はnil値です。

Elements after this point are dependent on the specific message type.

このポイント以降の要素は、具体的なメッセージタイプに依存します。

COSE messages are also built using the concept of layers to separate different types of cryptographic concepts. As an example of how this works, consider the COSE_Encrypt message (Section 5.1). This message type is broken into two layers: the content layer and the recipient layer. In the content layer, the plaintext is encrypted and information about the encrypted message is placed. In the recipient layer, the content encryption key (CEK) is encrypted and information about how it is encrypted for each recipient is placed. A single layer version of the encryption message COSE_Encrypt0 (Section 5.2) is provided for cases where the CEK is pre-shared.

COSEメッセージでは、さまざまな暗号概念の異なるタイプを分離するためにレイヤーの概念を使用して構築されます。これがどのように機能するかの例として、COSE_Encryptメッセージ(セクション5.1)を考えてみましょう。このメッセージタイプは2つのレイヤーに分割されます:コンテンツレイヤーと受信者レイヤーです。コンテンツレイヤーでは、平文が暗号化され、暗号化されたメッセージに関する情報が配置されます。受信者レイヤーでは、コンテンツ暗号化キー(CEK)が暗号化され、各受信者に対して暗号化方法に関する情報が配置されます。CEKが事前共有されている場合には、暗号化メッセージCOSE_Encrypt0(セクション5.2)の単一レイヤーバージョンが提供されます。

Identification of which type of message has been presented is done by the following methods:

以下の方法で、提示されたメッセージのタイプを識別します:

1. The specific message type is known from the context. This may be defined by a marker in the containing structure or by restrictions specified by the application protocol.

1. 特定のメッセージタイプはコンテキストから判明します。これは、含まれる構造内のマーカーまたはアプリケーションプロトコルで指定された制約によって定義される場合があります。

2. The message type is identified by a CBOR tag. Messages with a CBOR tag are known in this specification as tagged messages, while those without the CBOR tag are known as untagged messages. This document defines a CBOR tag for each of the message structures. These tags can be found in Table 1.

2. メッセージのタイプはCBORタグによって識別されます。CBORタグを持つメッセージは、この仕様ではタグ付きメッセージとして知られており、CBORタグを持たないメッセージは非タグ付きメッセージとして知られています。この文書では、各メッセージ構造に対してCBORタグが定義されています。これらのタグは表1に見つけることができます。

3. When a COSE object is carried in a media type of 'application/ cose', the optional parameter 'cose-type' can be used to identify the embedded object. The parameter is OPTIONAL if the tagged version of the structure is used. The parameter is REQUIRED if the untagged version of the structure is used. The value to use with the parameter for each of the structures can be found in Table 1.

3. COSEオブジェクトが'media type'として'application/cose'で送信される場合、埋め込まれたオブジェクトを識別するために、オプションパラメーター 'cose-type' を使用できます。このパラメーターは、構造体のタグバージョンが使用される場合は選択できます(OPTIONAL)。また、構造体のタグバージョンが使用されない場合は、このパラメーターは要求されています(REQUIRED)。各構造体に対してパラメーターと一緒に使用する値は、表1に記載されています。

4. When a COSE object is carried as a CoAP payload, the CoAP Content-Format Option can be used to identify the message content. The CoAP Content-Format values can be found in Table 26. The CBOR tag for the message structure is not required as each security message is uniquely identified.

4. COSEオブジェクトがCoAPペイロードとして運ばれる場合、CoAPコンテンツフォーマットオプションを使用してメッセージのコンテンツを識別することができます。CoAPコンテンツフォーマットの値は表26にあります。メッセージ構造のためのCBORタグは必要ありません。各セキュリティーメッセージは一意に識別されます。

CBOR Tag cose-type Data Item Semantics
98 cose-sign COSE_Sign COSE Signed Data Object
18 cose-sign1 COSE_Sign1 COSE Single Signer Data Object
96 cose-encrypt COSE_Encrypt COSE Encrypted Data Object
16 cose-encrypt0 COSE_Encrypt0 COSE Single Recipient Encrypted Data Object
97 cose-mac COSE_Mac COSE MACed Data Object
17 cose-mac0 COSE_Mac0 COSE Mac w/o Recipients Object

CBORタグ cose-type データ項目 意味
98 cose-sign COSE_Sign COSE署名データオブジェクト
18 cose-sign1 COSE_Sign1 COSE単一署名者データオブジェクト
96 cose-encrypt COSE_Encrypt COSE暗号化データオブジェクト
16 cose-encrypt0 COSE_Encrypt0 COSE単一受信者暗号化データオブジェクト
97 cose-mac COSE_Mac COSE MACデータオブジェクト
17 cose-mac0 COSE_Mac0 COSE受信者なしMACオブジェクト

                Table 1: COSE Message Identification

                テーブル1: COSEメッセージ識別

The following CDDL fragment identifies all of the top messages defined in this document. Separate non-terminals are defined for the tagged and the untagged versions of the messages.

以下のCDDLフラグメントは、このドキュメントで定義されているすべてのトップメッセージを識別します。タグ付きバージョンとタグなしバージョンのメッセージに対して、別々の非終端記号が定義されています。

COSE_Messages = COSE_Untagged_Message / COSE_Tagged_Message

COSE_Messages = COSE_Untagged_Message / COSE_Tagged_Message

COSE_Untagged_Message = COSE_Sign / COSE_Sign1 / COSE_Encrypt / COSE_Encrypt0 / COSE_Mac / COSE_Mac0

COSE_Untagged_Message = COSE_Sign / COSE_Sign1 / COSE_Encrypt / COSE_Encrypt0 / COSE_Mac / COSE_Mac0

COSE_Tagged_Message = COSE_Sign_Tagged / COSE_Sign1_Tagged / COSE_Encrypt_Tagged / COSE_Encrypt0_Tagged / COSE_Mac_Tagged / COSE_Mac0_Tagged

COSE_Tagged_Message = COSE_Sign_Tagged / COSE_Sign1_Tagged / COSE_Encrypt_Tagged / COSE_Encrypt0_Tagged / COSE_Mac_Tagged / COSE_Mac0_Tagged

The structure of COSE has been designed to have two buckets of information that are not considered to be part of the payload itself, but are used for holding information about content, algorithms, keys, or evaluation hints for the processing of the layer. These two buckets are available for use in all of the structures except for keys. While these buckets are present, they may not all be usable in all instances. For example, while the protected bucket is defined as part of the recipient structure, some of the algorithms used for recipient structures do not provide for authenticated data. If this is the case, the protected bucket is left empty.

COSEの構造は、ペイロード自体の一部ではない情報を保持するために使用される2つのバケットを持つように設計されています。これらのバケットはコンテンツ、アルゴリズム、キー、またはレイヤーの処理に関する評価ヒントに関する情報を保持するために使用されます。これらの2つのバケットは、キーを除くすべての構造で使用できます。これらのバケットは存在するものの、すべてのインスタンスで利用可能なわけではありません。たとえば、保護されたバケットは受信者の構造の一部として定義されていますが、受信者の構造に使用される一部のアルゴリズムは認証データを提供しません。この場合、保護されたバケットは空のままです。

Both buckets are implemented as CBOR maps. The map key is a 'label' (Section 1.4). The value portion is dependent on the definition for the label. Both maps use the same set of label/value pairs. The integer and string values for labels have been divided into several sections including a standard range, a private range, and a range that is dependent on the algorithm selected. The defined labels can be found in the "COSE Header Parameters" IANA registry (Section 16.2).

両方のバケットはCBORマップとして実装されています。マップのキーは「ラベル」(セクション1.4)です。値の部分は、ラベルの定義に依存します。両方のマップは、同じセットのラベル/値のペアを使用します。ラベルの整数値と文字列値は、標準範囲、プライベート範囲、および選択したアルゴリズムに依存する範囲に分割されています。定義済みのラベルは、「COSEヘッダーパラメーター」IANAレジストリ(セクション16.2)で見つけることができます。

Two buckets are provided for each layer:

各レイヤーには2つのバケットが用意されています。

protected: Contains parameters about the current layer that are to be cryptographically protected. This bucket MUST be empty if it is not going to be included in a cryptographic computation. This bucket is encoded in the message as a binary object. This value is obtained by CBOR encoding the protected map and wrapping it in a bstr object. Senders SHOULD encode a zero-length map as a zero- length string rather than as a zero-length map (encoded as h'a0'). The zero-length binary encoding is preferred because it is both shorter and the version used in the serialization structures for cryptographic computation. After encoding the map, the value is wrapped in the binary object. Recipients MUST accept both a zero- length binary value and a zero-length map encoded in the binary value. The wrapping allows for the encoding of the protected map to be transported with a greater chance that it will not be altered in transit. (Badly behaved intermediates could decode and re-encode, but this will result in a failure to verify unless the re-encoded byte string is identical to the decoded byte string.) This avoids the problem of all parties needing to be able to do a common canonical encoding.

protected: 現在のレイヤーに関する暗号化されるべきパラメーターが含まれています。 このバケットは、暗号化の計算に含まれない場合は空である必要があります(MUST)。 このバケットは、メッセージとしてバイナリーオブジェクトとしてエンコードされます。 この値は、保護されたマップをCBORエンコードし、それをbstrオブジェクトでラップすることで得られます。 送信者は、ゼロ長のマップをゼロ長の文字列としてエンコードすべきです(SHOULD)(h'a0'としてエンコードされるゼロ長のマップではなく)。 ゼロ長のバイナリーエンコーディングは、短く、暗号化計算のシリアライゼーション構造に使用されるバージョンでもあるため、好まれます。 マップをエンコードした後、値はバイナリーオブジェクトでラップされます。 受信者は、ゼロ長のバイナリー値とバイナリー値でエンコードされたゼロ長のマップ、両方を受け入れる必要があります(MUST)。 ラップにより、保護されたマップのエンコードを輸送することが、それが輸送中に変更される可能性が低くなるよりも大きな確率で可能になります(正しく動作しない中間ノードはデコードして再エンコードするかもしれませんが、デコードされたバイト文字列と再エンコードされたバイト文字列が同じでない限り、検証に失敗します)。 これにより、すべての当事者が共通の正準エンコーディングを行える必要があるという問題が回避されます。

unprotected: Contains parameters about the current layer that are not cryptographically protected.

unprotected:暗号的に保護されていない現在のレイヤーに関するパラメーターが含まれています。

Only parameters that deal with the current layer are to be placed at that layer. As an example of this, the parameter 'content type' describes the content of the message being carried in the message. As such, this parameter is placed only in the content layer and is not placed in the recipient or signature layers. In principle, one should be able to process any given layer without reference to any other layer. With the exception of the COSE_Sign structure, the only data that needs to cross layers is the cryptographic key.

現在のレイヤーに関連するパラメーターのみがそのレイヤーに配置されるべきです。これの例として、「コンテンツタイプ」というパラメーターは、メッセージに含まれるメッセージの内容を説明します。そのため、このパラメーターはコンテンツレイヤーのみに配置され、受信者または署名のレイヤーには配置されません。原則として、他のレイヤーを参照せずに、任意のレイヤーを処理することができるべきです。COSE_Sign構造体を除いて、レイヤー間で交換する必要があるデータは暗号鍵のみです。

The buckets are present in all of the security objects defined in this document. The fields in order are the 'protected' bucket (as a CBOR 'bstr' type) and then the 'unprotected' bucket (as a CBOR 'map' type). The presence of both buckets is required. The parameters that go into the buckets come from the IANA "COSE Header Parameters" registry (Section 16.2). Some common parameters are defined in the next section, but a number of parameters are defined throughout this document.

この文書で定義されているすべてのセキュリティーオブジェクトには、バケットが存在します。順番に並んでいるフィールドは、「保護された」バケット(CBORの「bstr」型)と「保護されていない」バケット(CBORの「map」型)です。両方のバケットの存在が必要です。バケットに含まれるパラメーターは、IANAの「COSEヘッダーパラメーター」レジストリ(セクション16.2)から取得されます。一部の一般的なパラメーターは次のセクションで定義されていますが、この文書全体で多くのパラメーターが定義されています。

Labels in each of the maps MUST be unique. When processing messages, if a label appears multiple times, the message MUST be rejected as malformed. Applications SHOULD verify that the same label does not occur in both the protected and unprotected headers. If the message is not rejected as malformed, attributes MUST be obtained from the protected bucket before they are obtained from the unprotected bucket.

各マップ内のラベルは一意である必要があります(MUST)。メッセージの処理中に、ラベルが複数回現れた場合、メッセージは不正な形式であるため、受け入れてはなりません(MUST NOT)。アプリケーションは、保護されたヘッダーと保護されていないヘッダーの両方に同じラベルが出現しないことを確認すべきです(SHOULD)。メッセージが不正として拒否されない場合、属性は保護されたバケットから取得する前に、保護されていないバケットから取得しなければなりません(MUST)

The following CDDL fragment represents the two header buckets. A group "Headers" is defined in CDDL that represents the two buckets in which attributes are placed. This group is used to provide these two fields consistently in all locations. A type is also defined that represents the map of common headers.

次のCDDLフラグメントは、ヘッダーバケット2つを表します。CDDLで定義された「Headers」というグループは、属性が配置される2つのバケットを表します。このグループは、すべての場所でこれら2つのフィールドを一貫して提供するために使用されます。共通ヘッダーマップを表すタイプも定義されています。

Headers = ( protected : empty_or_serialized_map, unprotected : header_map )

Headers = ( protected : empty_or_serialized_map, unprotected : header_map )

header_map = { Generic_Headers, * label => values }

header_map = { Generic_Headers, * label => values }

empty_or_serialized_map = bstr .cbor header_map / bstr .size 0

empty_or_serialized_map = bstr .cbor header_map / bstr .size 0

This section defines a set of common header parameters. A summary of these parameters can be found in Table 2. This table should be consulted to determine the value of label and the type of the value.

このセクションでは、一連の共通ヘッダーパラメーターが定義されます。これらのパラメーターの概要は、表2に記載されています。labelの値とその値のタイプを特定するために、この表を参照する必要があります。

The set of header parameters defined in this section are:

このセクションで定義されているヘッダーパラメーターのセットは以下の通りです:

alg: This parameter is used to indicate the algorithm used for the security processing. This parameter MUST be authenticated where the ability to do so exists. This support is provided by AEAD algorithms or construction (COSE_Sign, COSE_Sign0, COSE_Mac, and COSE_Mac0). This authentication can be done either by placing the header in the protected header bucket or as part of the externally supplied data. The value is taken from the "COSE Algorithms" registry (see Section 16.4).

alg: このパラメーターは、セキュリティー処理に使用されるアルゴリズムを示すために使用されます。このパラメーターは、その能力が存在する場合には認証される必要があります(MUST)。このサポートは、AEADアルゴリズムまたは構造(COSE_Sign、COSE_Sign0、COSE_Mac、およびCOSE_Mac0)によって提供されます。この認証は、保護されたヘッダーバケットにヘッダーを配置するか、外部から供給されたデータの一部として行うことができます。値は「COSE Algorithms」レジストリから取得されます(セクション16.4を参照)。

crit: The parameter is used to indicate which protected header labels an application that is processing a message is required to understand. Parameters defined in this document do not need to be included as they should be understood by all implementations. When present, this parameter MUST be placed in the protected header bucket. The array MUST have at least one value in it. Not all labels need to be included in the 'crit' parameter. The rules for deciding which header labels are placed in the array are:

crit: このパラメーターは、メッセージを処理しているアプリケーションが理解する必要がある保護ヘッダーラベルを示すために使用されます。このドキュメントで定義されたパラメーターは、すべての実装によって理解される必要があるため、含める必要はありません。存在する場合、このパラメーターは保護ヘッダーバケットに配置される必要があります(MUST)。配列には少なくとも1つの値が含まれている必要があります(MUST)。すべてのラベルを 'crit' パラメーターに含める必要はありません。配列に配置されるヘッダーラベルを決定するためのルールは次のとおりです:

   *  Integer labels in the range of 0 to 8 SHOULD be omitted.

   *  0から8の範囲の整数ラベルは省略すべきです(SHOULD)。

   *  Integer labels in the range -1 to -128 can be omitted as they
      are algorithm dependent.  If an application can correctly
      process an algorithm, it can be assumed that it will correctly
      process all of the common parameters associated with that
      algorithm.  Integer labels in the range -129 to -65536 SHOULD
      be included as these would be less common parameters that might
      not be generally supported.

   *  アルゴリズム依存性により、範囲が-1から-128の整数ラベルは省略することができます。
      アプリケーションがアルゴリズムを正しく処理できる場合、
      そのアルゴリズムに関連するすべての共通パラメーターを正しく処理できると仮定できます。
      範囲が-129から-65536の整数ラベルは、一般的にサポートされていない可能性がある
      一般的なパラメーターであるため、含めるべきです(SHOULD)。

   *  Labels for parameters required for an application MAY be
      omitted.  Applications should have a statement if the label can
      be omitted.

   * アプリケーションに必要なパラメーターのラベルは省略しても構いません。
     ラベルを省略できる場合、アプリケーションにはその旨の記述があるべきです。

   The header parameter values indicated by 'crit' can be processed
   by either the security library code or an application using a
   security library; the only requirement is that the parameter is
   processed.  If the 'crit' value list includes a value for which
   the parameter is not in the protected bucket, this is a fatal
   error in processing the message.

   'crit'によって示されるヘッダーパラメーターの値は、
   セキュリティーライブラリのコードまたはセキュリティーライブラリを使用するアプリケーションの
   いずれかで処理することができます。唯一の要件は、パラメーターが処理されることです。
   'crit'の値リストに、パラメーターが保護されたバケットに含まれていない値が含まれている場合、
   これはメッセージの処理における致命的なエラーです。

content type: This parameter is used to indicate the content type of the data in the payload or ciphertext fields. Integers are from the "CoAP Content-Formats" IANA registry table [COAP.Formats]. Text values following the syntax of "<type-name>/<subtype-name>" where <type-name> and <subtype-name> are defined in Section 4.2 of [RFC6838]. Leading and trailing whitespace is also omitted. Textual content values along with parameters and subparameters can be located using the IANA "Media Types" registry. Applications SHOULD provide this parameter if the content structure is potentially ambiguous.

content type: このパラメーターは、ペイロードまたは暗号文フィールド内のデータのコンテンツタイプを示すために使用されます。整数は「CoAP Content-Formats」IANAレジストリテーブル[COAP.Formats]から取得されます。<type-name>/<subtype-name>の構文に従うテキスト値は、<type-name>と<subtype-name>が[RFC6838]のSection 4.2で定義されています。先頭と末尾の空白も省略されます。テキストコンテンツ値とパラメーターおよびサブパラメーターを含む場合は、IANA「Media Types」レジストリを使用して検索できます。コンテンツ構造が曖昧である可能性がある場合、アプリケーションはこのパラメーターを提供すべきです(SHOULD)

kid: This parameter identifies one piece of data that can be used as input to find the needed cryptographic key. The value of this parameter can be matched against the 'kid' member in a COSE_Key structure. Other methods of key distribution can define an equivalent field to be matched. Applications MUST NOT assume that 'kid' values are unique. There may be more than one key with the same 'kid' value, so all of the keys associated with this 'kid' may need to be checked. The internal structure of 'kid' values is not defined and cannot be relied on by applications. Key identifier values are hints about which key to use. This is not a security-critical field. For this reason, it can be placed in the unprotected headers bucket.

kid: このパラメーターは、必要な暗号鍵を見つけるための入力データの一部を識別します。このパラメーターの値は、COSE_Key構造体の 'kid' メンバーと一致させることができます。他のキー配布方法では、一致させるための同等のフィールドを定義することができます。アプリケーションは 'kid' の値が一意であるとは想定してはしてはなりません(MUST NOT)。同じ 'kid' 値を持つ複数の鍵が存在する可能性があるため、この 'kid' に関連付けられたすべての鍵を確認する必要があるかもしれません。'kid' の内部構造は定義されておらず、アプリケーションはそれに頼ることはできません。鍵識別子の値は、どの鍵を使用するかのヒントです。これはセキュリティー的に重要なフィールドではありません。そのため、これは保護されていないヘッダーバケットに配置することができます。

IV: This parameter holds the Initialization Vector (IV) value. For some symmetric encryption algorithms, this may be referred to as a nonce. The IV can be placed in the unprotected header as modifying the IV will cause the decryption to yield plaintext that is readily detectable as garbled.

IV: このパラメーターは、初期化ベクトル (IV) の値を保持します。対称暗号化アルゴリズムにおいては、これはノンスと呼ばれる場合もあります。IVは、IVの修正によって復号化結果が乱れたテキストとして容易に検出できるため、保護されていないヘッダーに配置されることがあります。

Partial IV: This parameter holds a part of the IV value. When using the COSE_Encrypt0 structure, a portion of the IV can be part of the context associated with the key. This field is used to carry a value that causes the IV to be changed for each message. The IV can be placed in the unprotected header as modifying the IV will cause the decryption to yield plaintext that is readily detectable as garbled. The 'Initialization Vector' and 'Partial Initialization Vector' parameters MUST NOT both be present in the same security layer.

部分IV:このパラメーターは、IV値の一部を保持します。COSE_Encrypt0構造を使用する場合、IVの一部はキーに関連付けられたコンテキストの一部として使用することができます。このフィールドは、各メッセージごとにIVが変更されることを引き起こす値を運ぶために使用されます。IVは、IVを変更することによって、復号化が文字化けとして容易に検出可能な平文を生じさせるため、保護されていないヘッダーに配置することができません。'Initialization Vector'および'Partial Initialization Vector'パラメーターは、同じセキュリティーレイヤー内にしてはなりません(MUST NOT)

   The message IV is generated by the following steps:

   メッセージ IV は次の手順で生成されます:

   1.  Left-pad the Partial IV with zeros to the length of IV.

   1.  IVの長さにゼロを左詰めして、パーシャルIVを満たします。

   2.  XOR the padded Partial IV with the context IV.

   2.  パディングされた部分 IV をコンテキスト IV と排他的論理和(XOR)を取る。

counter signature: This parameter holds one or more counter signature values. Counter signatures provide a method of having a second party sign some data. The counter signature parameter can occur as an unprotected attribute in any of the following structures: COSE_Sign1, COSE_Signature, COSE_Encrypt, COSE_recipient, COSE_Encrypt0, COSE_Mac, and COSE_Mac0. These structures all have the same beginning elements, so that a consistent calculation of the counter signature can be computed. Details on computing counter signatures are found in Section 4.5.

カウンターシグネチャ:このパラメーターには1つ以上のカウンターシグネチャ値が格納されます。カウンターシグネチャは、第二の当事者がデータに署名する方法を提供します。カウンターシグネチャパラメーターは、次のいずれかの構造体に非保護属性として出現することができます:COSE_Sign1、COSE_Signature、COSE_Encrypt、COSE_recipient、COSE_Encrypt0、COSE_Mac、およびCOSE_Mac0。これらの構造体はすべて同じ開始要素を持っているため、カウンターシグネチャの一貫した計算が行われます。カウンターシグネチャの計算方法の詳細については、セクション4.5を参照してください。

Name Label Value Type Value Registry Description
alg 1 int / tstr COSE Algorithms registry Cryptographic algorithm to use
crit 2 [+ label] COSE Header Parameters registry Critical headers to be understood
content 3 tstr / uint CoAP Content type
type Content- Formats or Media Types registries of the payload
kid 4 bstr Key identifier
IV 5 bstr Full Initialization Vector
Partial 6 bstr Partial
IV Initialization Vector
counter 7 COSE_Signature CBOR-encoded
signature / [+ COSE_Signature ] signature structure

名前 ラベル 値のタイプ 値の登録 説明
alg 1 int / tstr COSE アルゴリズムの登録 使用する暗号技術アルゴリズム
crit 2 [+ label] COSE ヘッダーパラメーターの登録 理解される必要がある重要なヘッダー
content 3 tstr / uint CoAP コンテンツの種類
type メディアタイプの登録 ペイロードの形式
kid 4 bstr 鍵の識別子
IV 5 bstr 完全な初期化ベクトル
Partial 6 bstr 部分的な
IV 初期化ベクトル
counter 7 COSE_Signature CBORでエンコードされた
signature / [+ COSE_Signature ] 署名 構造体

                  Table 2: Common Header Parameters

                  テーブル2:一般的なヘッダーパラメーター

The CDDL fragment that represents the set of headers defined in this section is given below. Each of the headers is tagged as optional because they do not need to be in every map; headers required in specific maps are discussed above.

このセクションで定義されているヘッダーセットを表すためのCDDLフラグメントは以下の通りです。各ヘッダーはオプションとしてタグ付けされています。なぜなら、すべてのマップに必要ではないからです。特定のマップで必要なヘッダーについては、上記で説明されています。

Generic_Headers = ( ? 1 => int / tstr, ; algorithm identifier ? 2 => [+label], ; criticality ? 3 => tstr / int, ; content type ? 4 => bstr, ; key identifier ? 5 => bstr, ; IV ? 6 => bstr, ; Partial IV ? 7 => COSE_Signature / [+COSE_Signature] ; Counter signature )

Generic_Headers = ( ? 1 => int / tstr, ; algorithm identifier ? 2 => [+label], ; criticality ? 3 => tstr / int, ; content type ? 4 => bstr, ; key identifier ? 5 => bstr, ; IV ? 6 => bstr, ; Partial IV ? 7 => COSE_Signature / [+COSE_Signature] ; Counter signature )

COSE supports two different signature structures. COSE_Sign allows for one or more signatures to be applied to the same content. COSE_Sign1 is restricted to a single signer. The structures cannot be converted between each other; as the signature computation includes a parameter identifying which structure is being used, the converted structure will fail signature validation.

COSEは、2つの異なる署名構造をサポートしています。COSE_Signは、同じコンテンツに1つ以上の署名を適用することができます。COSE_Sign1は、1人の署名者に制限されています。これらの構造は互換性がなく、署名計算にはどの構造が使用されているかを識別するパラメーターが含まれているため、変換された構造は署名の検証に失敗します。

The COSE_Sign structure allows for one or more signatures to be applied to a message payload. Parameters relating to the content and parameters relating to the signature are carried along with the signature itself. These parameters may be authenticated by the signature, or just present. An example of a parameter about the content is the content type. Examples of parameters about the signature would be the algorithm and key used to create the signature and counter signatures.

COSE_Sign構造体には、メッセージペイロードに1つ以上の署名を適用することができます。コンテンツに関連するパラメーターと署名に関連するパラメーターは、署名自体とともに運ばれます。これらのパラメーターは、署名によって認証される場合もあれば、単に存在する場合もあります。コンテンツに関するパラメーターの例としては、コンテンツタイプがあります。署名に関するパラメーターの例としては、署名の作成に使用されるアルゴリズムとキー、カウンターサインがあります。

RFC 5652 indicates that:

RFC 5652は次のように示しています:

   When more than one signature is present, the successful validation
   of one signature associated with a given signer is usually treated
   as a successful signature by that signer.  However, there are some
   application environments where other rules are needed.  An
   application that employs a rule other than one valid signature for
   each signer must specify those rules.  Also, where simple matching
   of the signer identifier is not sufficient to determine whether
   the signatures were generated by the same signer, the application
   specification must describe how to determine which signatures were
   generated by the same signer.  Support for different communities
   of recipients is the primary reason that signers choose to include
   more than one signature.

複数の署名が存在する場合、特定の署名者に関連付けられた1つの署名の正常な検証は通常、
その署名者による成功した署名とみなされます。
ただし、他のルールが必要なアプリケーション環境もあります。
1つの有効な署名ではなく、各署名者に対して異なるルールを採用するアプリケーションは、
それらのルールを明示する必要があります。
また、署名者識別子の単純な一致だけでは、署名が同じ署名者によって生成されたかどうかを
判断するのに十分ではない場合、アプリケーション仕様は、どの署名が同じ署名者によって
生成されたかを判断する方法について記述する必要があります。
受信者の異なるコミュニティをサポートすることが、複数の署名を含める
署名者が選択する主な理由です。

For example, the COSE_Sign structure might include signatures generated with the Edwards-curve Digital Signature Algorithm (EdDSA) [RFC8032] and with the Elliptic Curve Digital Signature Algorithm (ECDSA) [DSS]. This allows recipients to verify the signature associated with one algorithm or the other. More-detailed information on multiple signature evaluations can be found in [RFC5752].

たとえば、COSE_Sign構造体には、Edwards-curve Digital Signature Algorithm(EdDSA)で生成された署名と、Elliptic Curve Digital Signature Algorithm(ECDSA)で生成された署名が含まれているかもしれません。これにより、受信者は、どちらかのアルゴリズムに関連する署名を検証することができます。複数の署名評価に関する詳細な情報については、[RFC5752]を参照してください。

The signature structure can be encoded as either tagged or untagged depending on the context it will be used in. A tagged COSE_Sign structure is identified by the CBOR tag 98. The CDDL fragment that represents this is:

署名構造は、使用される文脈に応じて、タグ付きまたはタグなしでエンコードすることができます。タグ付きのCOSE_Sign構造は、CBORタグ98によって識別されます。これを表すCDDLフラグメントは次のとおりです。

COSE_Sign_Tagged = #6.98(COSE_Sign)

COSE_Sign_Tagged = #6.98(COSE_Sign) COSE_Sign_Tagged = #6.98(COSE_Sign)

A COSE Signed Message is defined in two parts. The CBOR object that carries the body and information about the body is called the COSE_Sign structure. The CBOR object that carries the signature and information about the signature is called the COSE_Signature structure. Examples of COSE Signed Messages can be found in Appendix C.1.

COSE署名メッセージは2つの部分で定義されています。本文と本文に関する情報を持つCBORオブジェクトはCOSE_Sign構造と呼ばれます。署名と署名に関する情報を持つCBORオブジェクトはCOSE_Signature構造と呼ばれます。COSE署名メッセージの例は付録C.1にあります。

The COSE_Sign structure is a CBOR array. The fields of the array in order are:

COSE_Sign構造体はCBOR配列です。配列のフィールドは次の順序であります:

protected: This is as described in Section 3.

protected: これはセクション3で説明されているものです。

unprotected: This is as described in Section 3.

unprotected:これはセクション3に記載されているとおりです。

payload: This field contains the serialized content to be signed. If the payload is not present in the message, the application is required to supply the payload separately. The payload is wrapped in a bstr to ensure that it is transported without changes. If the payload is transported separately ("detached content"), then a nil CBOR object is placed in this location, and it is the responsibility of the application to ensure that it will be transported without changes.

payload: このフィールドには署名されるシリアライズされたコンテンツが含まれます。メッセージにペイロードが存在しない場合、アプリケーションは別途ペイロードを提供する必要があります。ペイロードは、変更されることなく輸送されるように、bstrで包まれます。ペイロードが別途輸送される場合(「切り離されたコンテンツ」と呼ばれます)、この位置にはnilのCBORオブジェクトが置かれ、アプリケーションは変更なく輸送されることを保証する責任があります。

   Note: When a signature with a message recovery algorithm is used
   (Section 8), the maximum number of bytes that can be recovered is
   the length of the payload.  The size of the payload is reduced by
   the number of bytes that will be recovered.  If all of the bytes
   of the payload are consumed, then the payload is encoded as a
   zero-length binary string rather than as being absent.

注:メッセージ回復アルゴリズムを使用した署名(セクション8)の場合、
回復できる最大バイト数はペイロードの長さです。ペイロードのサイズは、
回復されるバイト数を減算することによって減少します。
ペイロードのすべてのバイトが消費された場合、
ペイロードは欠落しているのではなく、長さ0のバイナリー文字列としてエンコードされます。

signatures: This field is an array of signatures. Each signature is represented as a COSE_Signature structure.

signature:このフィールドは署名の配列です。各署名はCOSE_Signature構造体として表されます。

The CDDL fragment that represents the above text for COSE_Sign follows.

上記のテキストに対応するCOSE_SignのCDDLフラグメントは次の通りです。

COSE_Sign = [ Headers, payload : bstr / nil, signatures : [+ COSE_Signature] ]

COSE_Sign = [ Headers, payload : bstr / nil, signatures : [+ COSE_Signature] ]

The COSE_Signature structure is a CBOR array. The fields of the array in order are:

COSE_Signature構造体はCBOR配列です。配列のフィールドは、次の順序であります:

protected: This is as described in Section 3.

protected:これはセクション3で説明されているとおりです。

unprotected: This is as described in Section 3.

unprotected:これはセクション3で説明されているようになります。

signature: This field contains the computed signature value. The type of the field is a bstr. Algorithms MUST specify padding if the signature value is not a multiple of 8 bits.

signature:このフィールドには計算された署名値が含まれます。フィールドのタイプはバイナリー文字列(bstr)です。署名値が8ビットの倍数でない場合、アルゴリズムはパディングを指定しなければなりません(MUST)

The CDDL fragment that represents the above text for COSE_Signature follows.

上記のテキストの COSE_Signature に対する CDDL フラグメントは次のようになります。

COSE_Signature = [ Headers, signature : bstr ]

COSE_Signature = [ Headers, signature : bstr ]

The COSE_Sign1 signature structure is used when only one signature is going to be placed on a message. The parameters dealing with the content and the signature are placed in the same pair of buckets rather than having the separation of COSE_Sign.

COSE_Sign1署名構造は、メッセージに1つの署名のみが配置される場合に使用されます。コンテンツと署名に関連するパラメーターは、COSE_Signとは異なり、同じ一組のバケットに配置されます。

The structure can be encoded as either tagged or untagged depending on the context it will be used in. A tagged COSE_Sign1 structure is identified by the CBOR tag 18. The CDDL fragment that represents this is:

構造は、使用されるコンテキストに応じてタグ付きまたはタグなしでエンコードすることができます。タグ付きのCOSE_Sign1構造は、CBORタグ18によって識別されます。これを表すCDDLフラグメントは次のようになります:

COSE_Sign1_Tagged = #6.18(COSE_Sign1)

COSE_Sign1_Tagged = #6.18(COSE_Sign1) 「COSE_Sign1_Tagged」は、#6.18(COSE_Sign1)です。

The CBOR object that carries the body, the signature, and the information about the body and signature is called the COSE_Sign1 structure. Examples of COSE_Sign1 messages can be found in Appendix C.2.

本文、署名、本文と署名に関する情報を運ぶCBORオブジェクトは「COSE_Sign1」構造体と呼ばれます。COSE_Sign1メッセージの例は、付録C.2にあります。

The COSE_Sign1 structure is a CBOR array. The fields of the array in order are:

COSE_Sign1構造体はCBOR配列です。配列の順番にフィールドがあります:

protected: This is as described in Section 3.

protected: これはセクション3で説明されている通りです。

unprotected: This is as described in Section 3.

unprotected:これはセクション3で説明されているものです。

payload: This is as described in Section 4.1.

payload:これはセクション4.1で説明されているようにです。

signature: This field contains the computed signature value. The type of the field is a bstr.

signature: このフィールドには、計算された署名値が含まれています。フィールドのタイプは bstr です。

The CDDL fragment that represents the above text for COSE_Sign1 follows.

上記のテキストを表すCOSE_Sign1のCDDLフラグメントは次のとおりです。

COSE_Sign1 = [ Headers, payload : bstr / nil, signature : bstr ]

COSE_Signature = [ Headers, signature : bstr ]

One of the features offered in the COSE document is the ability for applications to provide additional data to be authenticated, but that is not carried as part of the COSE object. The primary reason for supporting this can be seen by looking at the CoAP message structure [RFC7252], where the facility exists for options to be carried before the payload. Examples of data that can be placed in this location would be the CoAP code or CoAP options. If the data is in the header section, then it is available for proxies to help in performing its operations. For example, the Accept Option can be used by a proxy to determine if an appropriate value is in the proxy's cache. But the sender can prevent a proxy from changing the set of values that it will accept by including that value in the resulting authentication tag. However, it may also be desired to protect these values so that if they are modified in transit, it can be detected.

COSEドキュメントで提供される機能の1つは、アプリケーションがCOSEオブジェクトの一部として運ばれないが、認証される追加データを提供する能力です。これをサポートする主な理由は、CoAPメッセージ構造[RFC7252]を見ることで明確になります。この構造では、ペイロードの前にオプションを運ぶための仕組みが存在します。この場所に配置できるデータの例としては、CoAPコードやCoAPオプションがあります。データがヘッダーセクションにある場合、プロキシが操作を行う際に使用するために利用可能です。例えば、Acceptオプションはプロキシがキャッシュ内に適切な値があるかどうかを判断するために使用できます。しかし、送信者はその値を認証タグに含めることでプロキシが受け入れる値のセットを変更することを防ぐこともできます。ただし、これらの値を保護して、送信中に変更された場合に検出できるようにすることも望まれる場合があります。

This document describes the process for using a byte array of externally supplied authenticated data; however, the method of constructing the byte array is a function of the application. Applications that use this feature need to define how the externally supplied authenticated data is to be constructed. Such a construction needs to take into account the following issues:

この文書は、外部から供給された認証データのバイト配列を使用するプロセスについて説明していますが、バイト配列の構築方法はアプリケーションの機能です。この機能を使用するアプリケーションは、外部から供給された認証データの構築方法を定義する必要があります。このような構築方法は、以下の問題を考慮する必要があります:しなければなりません(MUST)

  • If multiple items are included, applications need to ensure that the same byte string is not produced if there are different inputs. This could occur by appending the strings 'AB' and 'CDE' or by appending the strings 'ABC' and 'DE'. This is usually addressed by making fields a fixed width and/or encoding the length of the field as part of the output. Using options from CoAP [RFC7252] as an example, these fields use a TLV structure so they can be concatenated without any problems.
  • 複数の項目が含まれている場合、異なる入力がある場合に同じバイト文字列が生成されないように、アプリケーションは確認する必要があります。これは、文字列 'AB' と 'CDE' を追加するか、文字列 'ABC' と 'DE' を追加することによって発生する可能性があります。通常、これはフィールドを固定幅にするか、フィールドの長さを出力の一部として符号化することによって対処されます。CoAP [RFC7252] のオプションを例に挙げると、これらのフィールドはTLV構造を使用しているため、問題なく連結することができます。
  • If multiple items are included, an order for the items needs to be defined. Using options from CoAP as an example, an application could state that the fields are to be ordered by the option number.
  • 複数のアイテムを含む場合、アイテムの順序を定義する必要があります。CoAPのオプションを例に挙げると、アプリケーションはフィールドをオプション番号で順序付ける必要があると述べることができます。
  • Applications need to ensure that the byte stream is going to be the same on both sides. Using options from CoAP might give a problem if the same relative numbering is kept. An intermediate node could insert or remove an option, changing how the relative number is done. An application would need to specify that the relative number must be re-encoded to be relative only to the options that are in the external data.
  • アプリケーションは、バイトストリームが両側で同じになることを確認する必要があります。CoAPのオプションを使用すると、同じ相対番号が保持される場合に問題が発生する可能性があります。中間ノードはオプションを挿入または削除することができ、相対番号の方法を変更することがあります。アプリケーションは、相対番号が外部データに存在するオプションにのみ相対的であるため、相対番号が再エンコードされる必要があることを指定する必要があります。

In order to create a signature, a well-defined byte stream is needed. The Sig_structure is used to create the canonical form. This signing and verification process takes in the body information (COSE_Sign or COSE_Sign1), the signer information (COSE_Signature), and the application data (external source). A Sig_structure is a CBOR array. The fields of the Sig_structure in order are:

署名を作成するためには、明確に定義されたバイトストリームが必要です。Sig_structureは正規形を作成するために使用されます。この署名と検証プロセスでは、本文情報(COSE_SignまたはCOSE_Sign1)、署名者情報(COSE_Signature)、およびアプリケーションデータ(外部ソース)が必要です。Sig_structureはCBOR配列です。Sig_structureのフィールドは順に次の通りです:

1. A text string identifying the context of the signature. The context string is:

1. 署名の文脈を識別するテキスト文字列。文脈文字列は次のとおりです:

       "Signature" for signatures using the COSE_Signature structure.

       COSE_Signature構造体を使用した署名のための「署名(Signature)」。

       "Signature1" for signatures using the COSE_Sign1 structure.

       COSE_Sign1構造を使用する署名の「Signature1」。

       "CounterSignature" for signatures used as counter signature
       attributes.

       "CounterSignature"は、カウンタ署名属性として使用される署名です。

2. The protected attributes from the body structure encoded in a bstr type. If there are no protected attributes, a bstr of length zero is used.

2. ボディ構造でエンコードされた保護された属性は、bstrタイプで表されます。保護された属性が存在しない場合は、長さゼロのbstrが使用されます。

3. The protected attributes from the signer structure encoded in a bstr type. If there are no protected attributes, a bstr of length zero is used. This field is omitted for the COSE_Sign1 signature structure.

3. プロテクトされた属性は、bstr型でエンコードされた署名者構造から取得されます。もしプロテクトされた属性が存在しない場合は、長さゼロのbstrが使用されます。このフィールドは、COSE_Sign1署名構造には含まれません。

4. The protected attributes from the application encoded in a bstr type. If this field is not supplied, it defaults to a zero- length binary string. (See Section 4.3 for application guidance on constructing this field.)

4. アプリケーションからエンコードされた保護属性が、bstr型で与えられます。このフィールドが提供されない場合、長さゼロのバイナリー文字列がデフォルトとなります。(このフィールドを構築するためのアプリケーション上のガイダンスについては、セクション4.3を参照してください。)

5. The payload to be signed encoded in a bstr type. The payload is placed here independent of how it is transported.

5. ペイロードは bstr タイプでエンコードされ、署名する必要があります。ペイロードは、輸送方法に関係なく、ここに配置されます。

The CDDL fragment that describes the above text is:

上記のテキストを記述するCDDLフラグメントは次のとおりです:

Sig_structure = [ context : "Signature" / "Signature1" / "CounterSignature", body_protected : empty_or_serialized_map, ? sign_protected : empty_or_serialized_map, external_aad : bstr, payload : bstr ]

Sig_structure = [ context : "シグネチャ" / "シグネチャ1" / "カウンターシグネチャ", body_protected : empty_or_serialized_map, ? sign_protected : empty_or_serialized_map, external_aad : bstr, payload : bstr ]

How to compute a signature:

署名の計算方法:

1. Create a Sig_structure and populate it with the appropriate fields.

1. 適切なフィールドでSig_structureを作成し、情報を入れます。

2. Create the value ToBeSigned by encoding the Sig_structure to a byte string, using the encoding described in Section 14.

2. セクション14で説明されているエンコーディングを使用して、Sig_structureをバイト文字列にエンコードすることにより、値ToBeSignedを作成します。

3. Call the signature creation algorithm passing in K (the key to sign with), alg (the algorithm to sign with), and ToBeSigned (the value to sign).

3. K (署名するためのキー)、alg(署名に使用するアルゴリズム)、ToBeSigned (署名する値)を渡して署名作成アルゴリズムを呼び出します。

4. Place the resulting signature value in the 'signature' field of the array.

4. 結果の署名値を配列の 'signature' フィールドに配置します。

The steps for verifying a signature are:

署名を検証する手順は次のとおりです:

1. Create a Sig_structure object and populate it with the appropriate fields.

1. Sig_structureオブジェクトを作成し、適切なフィールドで埋めます。

2. Create the value ToBeSigned by encoding the Sig_structure to a byte string, using the encoding described in Section 14.

2.セクション14で述べられているエンコード方法を使用して、Sig_structureをバイト文字列にエンコードして値ToBeSignedを作成します。

3. Call the signature verification algorithm passing in K (the key to verify with), alg (the algorithm used sign with), ToBeSigned (the value to sign), and sig (the signature to be verified).

3. K (検証に使用するキー)、alg (署名に使用されたアルゴリズム)、ToBeSigned (署名する値)、および sig (検証する署名) を渡して署名の検証アルゴリズムを呼び出します。

In addition to performing the signature verification, the application may also perform the appropriate checks to ensure that the key is correctly paired with the signing identity and that the signing identity is authorized before performing actions.

署名の検証を行うだけでなく、アプリケーションはキーが正しく署名される識別子とペアになっていること、および署名される識別子がアクションを実行する前に承認されていることを確認するための適切なチェックも実行する場合があります。

Counter signatures provide a method of associating a different signature generated by different signers with some piece of content. This is normally used to provide a signature on a signature allowing for a proof that a signature existed at a given time (i.e., a Timestamp). In this document, we allow for counter signatures to exist in a greater number of environments. As an example, it is possible to place a counter signature in the unprotected attributes of a COSE_Encrypt object. This would allow for an intermediary to either verify that the encrypted byte stream has not been modified, without being able to decrypt it, or assert that an encrypted byte stream either existed at a given time or passed through it in terms of routing (i.e., a proxy signature).

カウンタ署名は、異なるサイン作成者によって生成された別の署名と特定のコンテンツを関連付ける方法を提供します。通常、これは、ある時点で署名が存在したことを証明するために、署名上の署名を提供するために使用されます(タイムスタンプなど)。この文書では、カウンタ署名をさらに多くの環境で存在させることを許可しています。例えば、COSE_Encryptオブジェクトの保護されていない属性にカウンタ署名を配置することが可能です。これにより、中間者が暗号化されたバイトストリームが変更されていないことを検証することができるが、解読することはできない、または特定の時点で暗号化されたバイトストリームが存在したこと、または経由したことを示すことができます(プロキシ署名)。

An example of a counter signature on a signature can be found in Appendix C.1.3. An example of a counter signature in an encryption object can be found in Appendix C.3.3.

署名に対するカウンタ署名の例は、付録C.1.3に記載されています。暗号化オブジェクトにおけるカウンタ署名の例は、付録C.3.3に記載されています。

The creation and validation of counter signatures over the different items relies on the fact that the objects have the same structure. The elements are a set of protected attributes, a set of unprotected attributes, and a body, in that order. This means that the Sig_structure can be used in a uniform manner to get the byte stream for processing a signature. If the counter signature is going to be computed over a COSE_Encrypt structure, the body_protected and payload items can be mapped into the Sig_structure in the same manner as from the COSE_Sign structure.

異なるアイテムのカウンタ署名の作成と検証は、オブジェクトが同じ構造を持っていることに依存します。要素は、保護された属性のセット、保護されていない属性のセット、および本体の順になります。これは、Sig_structureが署名の処理のためのバイトストリームを一様な方法で取得するために使用できることを意味します。カウンタ署名がCOSE_Encrypt構造上で計算される場合、body_protectedおよびpayloadアイテムはCOSE_Sign構造からのものと同じ方法でSig_structureにマッピングできます。

It should be noted that only a signature algorithm with appendix (see Section 8) can be used for counter signatures. This is because the body should be able to be processed without having to evaluate the counter signature, and this is not possible for signature schemes with message recovery.

コンターサインには、追加情報を持つ署名アルゴリズム(セクション8を参照)のみ使用できることに注意する必要があります。これは、本文がコンターサインを評価せずに処理できるようにする必要があり、メッセージ回復を伴う署名スキームでは不可能です。

COSE supports two different encryption structures. COSE_Encrypt0 is used when a recipient structure is not needed because the key to be used is known implicitly. COSE_Encrypt is used the rest of the time. This includes cases where there are multiple recipients or a recipient algorithm other than direct is used.

COSEは2つの異なる暗号化構造をサポートしています。COSE_Encrypt0は、暗黙的に分かっている使用するキーのために受信者の構造が必要ない場合に使用されます。COSE_Encryptは、その他の場合に使用されます。これには、複数の受信者がある場合や直接以外の受信者アルゴリズムが使用される場合などが含まれます。

The enveloped structure allows for one or more recipients of a message. There are provisions for parameters about the content and parameters about the recipient information to be carried in the message. The protected parameters associated with the content are authenticated by the content encryption algorithm. The protected parameters associated with the recipient are authenticated by the recipient algorithm (when the algorithm supports it). Examples of parameters about the content are the type of the content and the content encryption algorithm. Examples of parameters about the recipient are the recipient's key identifier and the recipient's encryption algorithm.

この封筒構造では、メッセージの一人以上の受信者が可能です。メッセージには、コンテンツに関するパラメーターと受信者情報に関するパラメーターが含まれるように規定されています。コンテンツに関連する保護パラメーターは、コンテンツ暗号化アルゴリズムによって認証されます。受信者に関連する保護パラメーターは、受信者アルゴリズムによって認証されます(アルゴリズムがサポートしている場合)。コンテンツに関するパラメーターの例は、コンテンツの種類とコンテンツ暗号化アルゴリズムです。受信者に関するパラメーターの例は、受信者の鍵識別子と受信者の暗号化アルゴリズムです。

The same techniques and structures are used for encrypting both the plaintext and the keys. This is different from the approach used by both "Cryptographic Message Syntax (CMS)" [RFC5652] and "JSON Web Encryption (JWE)" [RFC7516] where different structures are used for the content layer and for the recipient layer. Two structures are defined: COSE_Encrypt to hold the encrypted content and COSE_recipient to hold the encrypted keys for recipients. Examples of encrypted messages can be found in Appendix C.3.

暗号化には、平文と鍵の両方に同じ技術と構造が使用されます。これは、"Cryptographic Message Syntax (CMS)" [RFC5652] および "JSON Web Encryption (JWE)" [RFC7516] で異なる構造がコンテンツ層と受信者層の両方に使用されるのとは異なります。2つの構造が定義されています。COSE_Encryptは暗号化されたコンテンツを保持し、COSE_recipientは受信者の暗号化された鍵を保持します。暗号化されたメッセージの例については、付録C.3を参照してください。

The COSE_Encrypt structure can be encoded as either tagged or untagged depending on the context it will be used in. A tagged COSE_Encrypt structure is identified by the CBOR tag 96. The CDDL fragment that represents this is:

COSE_Encrypt構造体は、使用される文脈に応じて、タグ付きまたはタグなしでエンコードされることがあります。タグ付きのCOSE_Encrypt構造体は、CBORタグ96によって識別されます。これを表すCDDLフラグメントは以下の通りです:

COSE_Encrypt_Tagged = #6.96(COSE_Encrypt)

COSE_Encrypt_Tagged = #6.96(COSE_Encrypt) COSE_Encrypt_Tagged = #6.96(COSE_Encrypt)

The COSE_Encrypt structure is a CBOR array. The fields of the array in order are:

COSE_Encrypt 構造体は CBOR 配列です。配列のフィールドは以下の順番です。

protected: This is as described in Section 3.

protected: これはセクション3で説明されているとおりです。

unprotected: This is as described in Section 3.

unprotected: これはセクション3で説明されているとおりです。

ciphertext: This field contains the ciphertext encoded as a bstr. If the ciphertext is to be transported independently of the control information about the encryption process (i.e., detached content), then the field is encoded as a nil value.

ciphertext: このフィールドには、bstrとしてエンコードされた暗号文が含まれています。もし暗号文が暗号化プロセスに関する制御情報と独立して転送される場合(すなわち、切り離されたコンテンツの場合)、このフィールドはnil値としてエンコードされます。

recipients: This field contains an array of recipient information structures. The type for the recipient information structure is a COSE_recipient.

recipients: このフィールドには、受信者情報構造の配列が含まれています。受信者情報構造のタイプは、COSE_recipientです。

The CDDL fragment that corresponds to the above text is:

上記のテキストに対応するCDDLのフラグメントは以下の通りです:

COSE_Encrypt = [ Headers, ciphertext : bstr / nil, recipients : [+COSE_recipient] ]

COSE_Encrypt = [ Headers, ciphertext : bstr / nil, recipients : [+COSE_recipient] ]

The COSE_recipient structure is a CBOR array. The fields of the array in order are:

COSE_recipient構造体はCBOR配列です。配列のフィールドは以下の順序であります:

protected: This is as described in Section 3.

protected: これはセクション3で説明されています。

unprotected: This is as described in Section 3.

unprotected: これはセクション3で説明されています。

ciphertext: This field contains the encrypted key encoded as a bstr. All encoded keys are symmetric keys; the binary value of the key is the content. If there is not an encrypted key, then this field is encoded as a nil value.

ciphertext: このフィールドには、bstrとしてエンコードされた暗号化されたキーが含まれています。すべてのエンコードされたキーは対称キーです。キーのバイナリー値が内容です。暗号化されたキーがない場合、このフィールドはnil値としてエンコードされます。

recipients: This field contains an array of recipient information structures. The type for the recipient information structure is a COSE_recipient (an example of this can be found in Appendix B). If there are no recipient information structures, this element is absent.

recipients: このフィールドには、受信者情報の構造体の配列が含まれています。受信者情報の構造体の型はCOSE_recipientです(この一例は付録Bにあります)。受信者情報の構造体が存在しない場合、この要素は存在しません。

The CDDL fragment that corresponds to the above text for COSE_recipient is:

上記のテキストに対応するCOSE_recipientのCDDLフラグメントは次の通りです:

COSE_recipient = [ Headers, ciphertext : bstr / nil, ? recipients : [+COSE_recipient] ]

COSE_recipient = [ Headers, ciphertext : bstr / nil, ? recipients : [+COSE_recipient] ]

An encrypted message consists of an encrypted content and an encrypted CEK for one or more recipients. The CEK is encrypted for each recipient, using a key specific to that recipient. The details of this encryption depend on which class the recipient algorithm falls into. Specific details on each of the classes can be found in Section 12. A short summary of the five content key distribution methods is:

暗号化されたメッセージは、1人以上の受信者のために暗号化された内容と暗号化されたCEKで構成されます。CEKは、その受信者に固有のキーを使用して各受信者ごとに暗号化されます。この暗号化の詳細は、受信者のアルゴリズムがどのクラスに属するかによって異なります。各クラスの詳細については、セクション12に記載されています。5つの内容鍵配布方法の簡単な概要は次のとおりです:

direct: The CEK is the same as the identified previously distributed symmetric key or is derived from a previously distributed secret. No CEK is transported in the message.

直接: CEKは、以前に配布された対称鍵と同じであるか、以前に配布された秘密から派生しています。メッセージにはCEKは輸送されません。

symmetric key-encryption keys (KEK): The CEK is encrypted using a previously distributed symmetric KEK. Also known as key wrap.

対称鍵暗号鍵(KEK):CEKは、以前に配布された対称型KEKを使用して暗号化されます。また、キーラップとも呼ばれています。

key agreement: The recipient's public key and a sender's private key are used to generate a pairwise secret, a Key Derivation Function (KDF) is applied to derive a key, and then the CEK is either the derived key or encrypted by the derived key.

鍵の合意: 受信者の公開鍵と送信者の秘密鍵を使用して、一対の秘密鍵を生成し、鍵導出関数(KDF)を適用して鍵を導出し、その後、CEKは導出された鍵自体または導出された鍵で暗号化されます。

key transport: The CEK is encrypted with the recipient's public key. No key transport algorithms are defined in this document.

キーの輸送: CEK は受信者の公開鍵で暗号化されます。このドキュメントではキー輸送アルゴリズムは定義されていません。

passwords: The CEK is encrypted in a KEK that is derived from a password. No password algorithms are defined in this document.

パスワード:CEKは、パスワードから派生したKEKで暗号化されます。このドキュメントではパスワードアルゴリズムは定義されていません。

The COSE_Encrypt0 encrypted structure does not have the ability to specify recipients of the message. The structure assumes that the recipient of the object will already know the identity of the key to be used in order to decrypt the message. If a key needs to be identified to the recipient, the enveloped structure ought to be used.

COSE_Encrypt0の暗号化された構造は、メッセージの受信者を特定する能力を持っていません。この構造は、オブジェクトの受信者がメッセージを復号化するために使用するキーの識別を既に知っていることを前提としています。もし受信者にキーを特定する必要がある場合は、被包含構造を使用するべきです。

Examples of encrypted messages can be found in Appendix C.3.

暗号化されたメッセージの例は、付録C.3にあります。

The COSE_Encrypt0 structure can be encoded as either tagged or untagged depending on the context it will be used in. A tagged COSE_Encrypt0 structure is identified by the CBOR tag 16. The CDDL fragment that represents this is:

COSE_Encrypt0構造体は、使用される文脈に応じて、タグ付きまたはタグなしでエンコードできます。タグ付きのCOSE_Encrypt0構造体は、CBORタグ16で識別されます。これを表すCDDLフラグメントは次の通りです:

COSE_Encrypt0_Tagged = #6.16(COSE_Encrypt0)

COSE_Encrypt0_Tagged = #6.16(COSE_Encrypt0)

The COSE_Encrypt0 structure is a CBOR array. The fields of the array in order are:

COSE_Encrypt0構造体は、CBOR配列です。配列のフィールドは以下の順になります:

protected: This is as described in Section 3.

保護されました: これはセクション3で説明されているとおりです。

unprotected: This is as described in Section 3.

未保護:これはセクション3で説明されているようになります。

ciphertext: This is as described in Section 5.1.

暗号文:これはセクション5.1で説明されているものです。

The CDDL fragment for COSE_Encrypt0 that corresponds to the above text is:

上記のテキストに対応するCOSE_Encrypt0のCDDLフラグメントは次のとおりです:

COSE_Encrypt0 = [ Headers, ciphertext : bstr / nil, ]

COSE_Encrypt0 = [ Headers, ciphertext : bstr / nil, ] COSE_Encrypt0 = [Headers、ciphertext : bstr / nil]

The encryption algorithm for AEAD algorithms is fairly simple. The first step is to create a consistent byte stream for the authenticated data structure. For this purpose, we use an Enc_structure. The Enc_structure is a CBOR array. The fields of the Enc_structure in order are:

AEADアルゴリズムの暗号化アルゴリズムは非常にシンプルです。最初のステップは、認証済みデータ構造のための一貫したバイトストリームを作成することです。この目的のために、Enc_structureを使用します。Enc_structureはCBOR配列です。Enc_structureのフィールドは以下の順序であります:

1. A text string identifying the context of the authenticated data structure. The context string is:

1. 認証されたデータ構造の文脈を識別するテキスト文字列です。文脈文字列は次の通りです:

       "Encrypt0" for the content encryption of a COSE_Encrypt0 data
       structure.

       COSE_Encrypt0データ構造のコンテンツ暗号化に使用する「Encrypt0」。

       "Encrypt" for the first layer of a COSE_Encrypt data structure
       (i.e., for content encryption).

       COSE_Encrypt データ構造の第1レイヤー(つまり、コンテンツの暗号化)のために「Encrypt」を使用します。

       "Enc_Recipient" for a recipient encoding to be placed in an
       COSE_Encrypt data structure.

       "Enc_Recipient"は、COSE_Encryptデータ構造に配置される受信者エンコーディングです。

       "Mac_Recipient" for a recipient encoding to be placed in a
       MACed message structure.

       MACつきメッセージ構造に配置するための受信者エンコーディング「Mac_Recipient」。

       "Rec_Recipient" for a recipient encoding to be placed in a
       recipient structure.

  「」は、受信者構造に配置される受信者エンコーディングを表します。

2. The protected attributes from the body structure encoded in a bstr type. If there are no protected attributes, a bstr of length zero is used.

2. The protected attributes from the body structure encoded in a bstr type. If there are no protected attributes, a bstr of length zero is used.

3. The protected attributes from the application encoded in a bstr type. If this field is not supplied, it defaults to a zero- length bstr. (See Section 4.3 for application guidance on constructing this field.)

3. アプリケーションからエンコードされた保護された属性は、bstr タイプで提供されます。このフィールドが提供されていない場合、長さゼロの bstr がデフォルトで使用されます(このフィールドの構築に関するアプリケーションのガイダンスについては、セクション4.3を参照してください)。

The CDDL fragment that describes the above text is:

上記のテキストを記述するCDDLの断片は以下の通りです:

Enc_structure = [ context : "Encrypt" / "Encrypt0" / "Enc_Recipient" / "Mac_Recipient" / "Rec_Recipient", protected : empty_or_serialized_map, external_aad : bstr ]

Enc_structure = [ context : 「暗号化」/「Encrypt0」/「受信者の暗号化」/「受信者のMAC」/「受信者の記録」, protected : empty_or_serialized_map, external_aad : bstr ]

How to encrypt a message:

メッセージを暗号化する方法:

1. Create an Enc_structure and populate it with the appropriate fields.

1. 適切なフィールドで Enc_structure を作成し、それに値を入れます。

2. Encode the Enc_structure to a byte stream (Additional Authenticated Data (AAD)), using the encoding described in Section 14.

2. Enc_structureをバイトストリーム(追加認証データ(AAD))にエンコードします。エンコード方法は、セクション14で説明されています。

3. Determine the encryption key (K). This step is dependent on the class of recipient algorithm being used. For:

3. 暗号化キー(K)を決定します。このステップは、使用されている受信者アルゴリズムのクラスに依存します。以下に該当する場合:

    No Recipients:  The key to be used is determined by the algorithm
       and key at the current layer.  Examples are key transport keys
       (Section 12.3), key wrap keys (Section 12.2.1), or pre-shared
       secrets.

    受信者なし:使用される鍵は、アルゴリズムと現在の層の鍵によって決定されます。例として、鍵伝送鍵(セクション12.3)、鍵包装鍵(セクション12.2.1)、または事前共有の秘密鍵があります。

    Direct Encryption and Direct Key Agreement:  The key is
       determined by the key and algorithm in the recipient
       structure.  The encryption algorithm and size of the key to be
       used are inputs into the KDF used for the recipient.  (For
       direct, the KDF can be thought of as the identity operation.)
       Examples of these algorithms are found in Sections 12.1.2 and
       12.4.1.

    直接暗号化および直接鍵合意:鍵は、受信者の構造内の鍵とアルゴリズムによって決定されます。使用する暗号化アルゴリズムと鍵のサイズは、受信者用のKDFの入力です。(直接の場合、KDFは同一演算と考えることができます。)これらのアルゴリズムの例は、セクション12.1.2と12.4.1にあります。

    Other:  The key is randomly or pseudorandomly generated.

    その他: キーはランダムにまたは擬似乱数的に生成されます。

4. Call the encryption algorithm with K (the encryption key), P (the plaintext), and AAD. Place the returned ciphertext into the 'ciphertext' field of the structure.

4. K(暗号化キー)、P(平文)、およびAADで暗号化アルゴリズムを呼び出します。返された暗号文を構造体の「ciphertext」フィールドに配置します。

5. For recipients of the message, recursively perform the encryption algorithm for that recipient, using K (the encryption key) as the plaintext.

5. メッセージの受信者に対して、K(暗号化キー)を平文として、その受信者のために再帰的に暗号化アルゴリズムを実行します。

How to decrypt a message:

メッセージを復号化する方法:

1. Create an Enc_structure and populate it with the appropriate fields.

1. 適切なフィールドで Enc_structure を作成し、それを埋める。

2. Encode the Enc_structure to a byte stream (AAD), using the encoding described in Section 14.

2. Enc_structure をバイトストリーム (AAD) にエンコードします。エンコードの詳細については、セクション14を参照してください。

3. Determine the decryption key. This step is dependent on the class of recipient algorithm being used. For:

3. 変換キーを決定します。このステップは、使用されている受信者のアルゴリズムのクラスに依存します。次の場合には:

    No Recipients:  The key to be used is determined by the algorithm
       and key at the current layer.  Examples are key transport keys
       (Section 12.3), key wrap keys (Section 12.2.1), or pre-shared
       secrets.

    使用される鍵は、アルゴリズムと現在のレイヤーでの鍵によって決定されます。例としては、鍵輸送鍵(セクション12.3)、鍵包装鍵(セクション12.2.1)または事前共有の秘密鍵があります。

    Direct Encryption and Direct Key Agreement:  The key is
       determined by the key and algorithm in the recipient
       structure.  The encryption algorithm and size of the key to be
       used are inputs into the KDF used for the recipient.  (For
       direct, the KDF can be thought of as the identity operation.)
       Examples of these algorithms are found in Sections 12.1.2 and
       12.4.1.

    直接暗号化および直接鍵合意:鍵は受信者構造内の鍵とアルゴリズムによって決定されます。使用する暗号化アルゴリズムと鍵のサイズは、受信者向けに使用されるKDFへの入力です。(直接の場合、KDFは同一演算と考えることができます。)これらのアルゴリズムの例については、セクション12.1.2および12.4.1に記載があります。

    Other:  The key is determined by decoding and decrypting one of
       the recipient structures.

  その他: 鍵は、受信者の一つの構造を解読・復号化することによって決定されます。

4. Call the decryption algorithm with K (the decryption key to use), C (the ciphertext), and AAD.

4. K (使用する復号鍵)、C (暗号文)、およびAADで復号化アルゴリズムを呼び出します。

How to encrypt a message:

メッセージを暗号化する方法:

1. Verify that the 'protected' field is empty.

1. 「'protected' フィールドが空であることを確認します。」

2. Verify that there was no external additional authenticated data supplied for this operation.

2. この操作に対して外部からの追加認証データが提供されていないことを確認します。

3. Determine the encryption key. This step is dependent on the class of recipient algorithm being used. For:

3. 暗号化キーを決定します。この手順は、使用されている受信者アルゴリズムのクラスに依存します。次の場合に使用します:

    No Recipients:  The key to be used is determined by the algorithm
       and key at the current layer.  Examples are key transport keys
       (Section 12.3), key wrap keys (Section 12.2.1), or pre-shared
       secrets.

    受信者なし:使用される鍵は、アルゴリズムと現在の階層での鍵によって決定されます。例としては、鍵輸送鍵(セクション12.3)、鍵包装鍵(セクション12.2.1)、または事前共有の秘密鍵があります。

    Direct Encryption and Direct Key Agreement:  The key is
       determined by the key and algorithm in the recipient
       structure.  The encryption algorithm and size of the key to be
       used are inputs into the KDF used for the recipient.  (For
       direct, the KDF can be thought of as the identity operation.)
       Examples of these algorithms are found in Sections 12.1.2 and
       12.4.1.

    、、、、、、、、、、そして:受取人の構造にあるキーとアルゴリズムによってキーが決定されます。使用される暗号化アルゴリズムとキーサイズは、受取人用のKDFの入力です。(ダイレクトの場合、KDFは同一操作と考えることができます。)これらのアルゴリズムの例は、セクション12.1.2および12.4.1にあります。

    Other:  The key is randomly generated.

    その他: 鍵はランダムに生成されます。

4. Call the encryption algorithm with K (the encryption key to use) and P (the plaintext). Place the returned ciphertext into the 'ciphertext' field of the structure.

4. K(使用する暗号化キー)およびP(平文)と共に、暗号化アルゴリズムを呼び出します。返された暗号文を、構造体の「ciphertext」フィールドに配置します。

5. For recipients of the message, recursively perform the encryption algorithm for that recipient, using K (the encryption key) as the plaintext.

5. メッセージの受信者に対して、暗号化アルゴリズムを再帰的に実行し、平文として暗号化鍵である K を使用します。

How to decrypt a message:

メッセージを復号化する方法:

1. Verify that the 'protected' field is empty.

1. 'protected' フィールドが空であることを確認します。

2. Verify that there was no external additional authenticated data supplied for this operation.

2. この操作に対して外部から追加の認証データが提供されていないことを確認してください。

3. Determine the decryption key. This step is dependent on the class of recipient algorithm being used. For:

3. 復号キーを決定します。このステップは、使用されている受信者アルゴリズムのクラスに依存します。次の場合には:

    No Recipients:  The key to be used is determined by the algorithm
       and key at the current layer.  Examples are key transport keys
       (Section 12.3), key wrap keys (Section 12.2.1), or pre-shared
       secrets.

    受信者なし: 使用されるキーは、現在のレイヤーのアルゴリズムとキーによって決定されます。例えば、鍵輸送鍵(セクション12.3)、鍵ラップ鍵(セクション12.2.1)、または事前共有の秘密です。

    Direct Encryption and Direct Key Agreement:  The key is
       determined by the key and algorithm in the recipient
       structure.  The encryption algorithm and size of the key to be
       used are inputs into the KDF used for the recipient.  (For
       direct, the KDF can be thought of as the identity operation.)
       Examples of these algorithms are found in Sections 12.1.2 and
       12.4.1.


    Other:  The key is determined by decoding and decrypting one of
       the recipient structures.

    その他: キーは、受信者の構造体の1つを復号化して解読することによって決定されます。

4. Call the decryption algorithm with K (the decryption key to use) and C (the ciphertext).

4. K(使用する復号鍵)とC(暗号文)で復号化アルゴリズムを呼び出します。

COSE supports two different MAC structures. COSE_MAC0 is used when a recipient structure is not needed because the key to be used is implicitly known. COSE_MAC is used for all other cases. These include a requirement for multiple recipients, the key being unknown, and a recipient algorithm of other than direct.

COSEは2つの異なるMAC構造をサポートしています。COSE_MAC0は、暗黙的にわかっている鍵を使用するため、受信者の構造が必要ない場合に使用されます。COSE_MACは他のすべての場合に使用されます。これには複数の受信者が必要な場合、鍵が不明な場合、および直接ではない受信者のアルゴリズムなどが含まれます。

In this section, we describe the structure and methods to be used when doing MAC authentication in COSE. This document allows for the use of all of the same classes of recipient algorithms as are allowed for encryption.

このセクションでは、COSEでMAC認証を行う際に使用される構造と方法について説明します。このドキュメントでは、暗号化に許可されている受信者アルゴリズムのすべてのクラスの使用が許可されています。

When using MAC operations, there are two modes in which they can be used. The first is just a check that the content has not been changed since the MAC was computed. Any class of recipient algorithm can be used for this purpose. The second mode is to both check that the content has not been changed since the MAC was computed and to use the recipient algorithm to verify who sent it. The classes of recipient algorithms that support this are those that use a pre- shared secret or do static-static (SS) key agreement (without the key wrap step). In both of these cases, the entity that created and sent the message MAC can be validated. (This knowledge of the sender assumes that there are only two parties involved and that you did not send the message to yourself.) The origination property can be obtained with both of the MAC message structures.

MAC操作を使用する場合、2つのモードで使用できます。最初のモードは、MACが計算されてからコンテンツが変更されていないことを確認するためのチェックです。この目的のためには、受信アルゴリズムのどのクラスでも使用できます。2番目のモードは、MACが計算されてからコンテンツが変更されていないことをチェックし、受信アルゴリズムを使用して誰が送信したのかを確認するために使用することです。この機能をサポートする受信アルゴリズムのクラスは、プリシェアドシークレットを使用するものや、静的静的(SS)鍵合意(キーラップの手順を省略)を行うものです。どちらの場合でも、メッセージのMACを作成して送信したエンティティを検証できます。(送信者の情報は、関与するパーティが2つしかいない前提で、メッセージを自分自身に送信しなかった場合に基づいています。)MACメッセージの構造のどちらでも、メッセージを作成および送信したエンティティの起源のプロパティを取得できます。

The multiple recipient MACed message uses two structures: the COSE_Mac structure defined in this section for carrying the body and the COSE_recipient structure (Section 5.1) to hold the key used for the MAC computation. Examples of MACed messages can be found in Appendix C.5.

多重受信者MACメッセージは、2つの構造を使用します。ボディを保持するためにこのセクションで定義されたCOSE_Mac構造体と、MAC計算に使用される鍵を保持するためのCOSE_recipient構造体(セクション5.1)です。MAC付きメッセージの例は、付録C.5にあります。

The MAC structure can be encoded as either tagged or untagged depending on the context it will be used in. A tagged COSE_Mac structure is identified by the CBOR tag 97. The CDDL fragment that represents this is:

MAC構造は、使用されるコンテキストに応じてタグ付きまたはタグなしでエンコードすることができます。タグ付きのCOSE_Mac構造は、CBORタグ97で識別されます。これを表すCDDLフラグメントは次のとおりです:

COSE_Mac_Tagged = #6.97(COSE_Mac)

COSE_Mac_Tagged = #6.97(COSE_Mac)

The COSE_Mac structure is a CBOR array. The fields of the array in order are:

COSE_Mac構造体はCBOR配列です。配列のフィールドは順番に以下のとおりです:

protected: This is as described in Section 3.

保護されています: これはセクション3で説明されている通りです。

unprotected: This is as described in Section 3.

未保護: これはセクション3で説明されているようにです。

payload: This field contains the serialized content to be MACed. If the payload is not present in the message, the application is required to supply the payload separately. The payload is wrapped in a bstr to ensure that it is transported without changes. If the payload is transported separately (i.e., detached content), then a nil CBOR value is placed in this location, and it is the responsibility of the application to ensure that it will be transported without changes.

ペイロード:このフィールドには、MAC化されるシリアライズされたコンテンツが含まれます。メッセージにペイロードが存在しない場合、アプリケーションは別途ペイロードを提供することが必要です。ペイロードは変更なしに輸送されるようにするために、bstrでラップされます。ペイロードが別々に輸送される場合(つまり、切り離されたコンテンツ)、この場所にはnilのCBOR値が配置され、アプリケーションは変更なしに輸送されることを保証する責任があります。

tag: This field contains the MAC value.

タグ:このフィールドにはMAC値が含まれています。

recipients: This is as described in Section 5.1.

受信者: これはセクション5.1で説明されているようにします。

The CDDL fragment that represents the above text for COSE_Mac follows.

上記のテキストを表すCOSE_MacのためのCDDLフラグメントは次のとおりです。

COSE_Mac = [ Headers, payload : bstr / nil, tag : bstr, recipients :[+COSE_recipient] ]

COSE_Mac = [ Headers, payload : bstr / nil, tag : bstr, recipients :[+COSE_recipient] ] COSE_Mac = [ ヘッダー, ペイロード : バイナリーストリング / 無し, タグ : バイナリーストリング, 受信者 :[+COSE_recipient] ]

In this section, we describe the structure and methods to be used when doing MAC authentication for those cases where the recipient is implicitly known.

このセクションでは、受信者が暗黙にわかっている場合にMAC認証を行う際に使用される構造と方法を説明します。

The MACed message uses the COSE_Mac0 structure defined in this section for carrying the body. Examples of MACed messages with an implicit key can be found in Appendix C.6.

MACされたメッセージは、このセクションで定義されているCOSE_Mac0構造体を使用して本文を運びます。暗黙のキーを持つMACされたメッセージの例は、付録C.6にあります。

The MAC structure can be encoded as either tagged or untagged depending on the context it will be used in. A tagged COSE_Mac0 structure is identified by the CBOR tag 17. The CDDL fragment that represents this is:

MAC構造体は、使用される文脈に応じて、タグ付きまたはタグなしでエンコードすることができます。タグ付きのCOSE_Mac0構造体は、CBORタグ17で識別されます。これを表すCDDLフラグメントは次のとおりです:

COSE_Mac0_Tagged = #6.17(COSE_Mac0)

COSE_Mac0_Tagged = #6.17(COSE_Mac0)

The COSE_Mac0 structure is a CBOR array. The fields of the array in order are:

COSE_Mac0構造体はCBOR配列です。配列のフィールドは順番に次の通りです:

protected: This is as described in Section 3.

保護されています:これはセクション3で説明されているものです。

unprotected: This is as described in Section 3.

未保護:これはセクション3で説明されているものです。

payload: This is as described in Section 6.1.

payload: これはセクション6.1に記載されているとおりです。

tag: This field contains the MAC value.

タグ:このフィールドにはMAC値が含まれています。

The CDDL fragment that corresponds to the above text is:

上記のテキストに対応するCDDLフラグメントは以下の通りです:

COSE_Mac0 = [ Headers, payload : bstr / nil, tag : bstr, ]

COSE_Mac0 = [ Headers, payload : bstr / nil, tag : bstr, ] COSE_Mac0 = [ ヘッダー, ペイロード : bstr / nil, タグ : bstr, ]

In order to get a consistent encoding of the data to be authenticated, the MAC_structure is used to have a canonical form. The MAC_structure is a CBOR array. The fields of the MAC_structure in order are:

認証するデータの一貫したエンコードを得るために、MAC_structureは正準形を持つように使用されます。MAC_structureはCBOR配列です。MAC_structureのフィールドは以下の順序であります。

1. A text string that identifies the structure that is being encoded. This string is "MAC" for the COSE_Mac structure. This string is "MAC0" for the COSE_Mac0 structure.

1. エンコードされている構造を識別するテキスト文字列です。COSE_Mac 構造体の場合、この文字列は「MAC」です。COSE_Mac0 構造体の場合、この文字列は「MAC0」です。

2. The protected attributes from the COSE_MAC structure. If there are no protected attributes, a zero-length bstr is used.

2. COSE_MAC構造から保護された属性です。保護された属性がない場合は、長さゼロのbstrが使用されます。

3. The protected attributes from the application encoded as a bstr type. If this field is not supplied, it defaults to a zero- length binary string. (See Section 4.3 for application guidance on constructing this field.)

3. アプリケーションから保護された属性を、bstr タイプとしてエンコードします。このフィールドが指定されていない場合、長さがゼロのバイナリー文字列にデフォルトで設定されます(このフィールドの構築に関するアプリケーションのガイダンスについては、セクション4.3を参照してください)。

4. The payload to be MACed encoded in a bstr type. The payload is placed here independent of how it is transported.

4. ここに運搬方法に関係なく配置される、bstr型でエンコードされたMACを持つペイロード。

The CDDL fragment that corresponds to the above text is:

上記のテキストに対応するCDDLフラグメントは次のとおりです:

MAC_structure = [ context : "MAC" / "MAC0", protected : empty_or_serialized_map, external_aad : bstr, payload : bstr ]

MAC_structure = [ context : 「MAC」または「MAC0」, protected : 空またはシリアライズされたマップ, external_aad : バイナリー文字列, payload : バイナリー文字列 ]

The steps to compute a MAC are:

MACを計算する手順は次のとおりです:

1. Create a MAC_structure and populate it with the appropriate fields.

1. 適切なフィールドでMAC_structureを作成し、それを埋める。

2. Create the value ToBeMaced by encoding the MAC_structure to a byte stream, using the encoding described in Section 14.

2. 値ToBeMacedを作成します。MAC_structureをバイトストリームにエンコードし、セクション14で説明されているエンコーディングを使用します。

3. Call the MAC creation algorithm passing in K (the key to use), alg (the algorithm to MAC with), and ToBeMaced (the value to compute the MAC on).

3. K(使用するキー)、alg(MACを作成するアルゴリズム)、および ToBeMaced(MACを計算する値)を渡してMAC作成アルゴリズムを呼び出します。

4. Place the resulting MAC in the 'tag' field of the COSE_Mac or COSE_Mac0 structure.

4. 生成されたMACをCOSE_MacまたはCOSE_Mac0構造体の'tag'フィールドに配置します。

5. Encrypt and encode the MAC key for each recipient of the message.

5. メッセージの各受信者のためにMACキーを暗号化して符号化します。

The steps to verify a MAC are:

MACを検証する手順は以下の通りです:

1. Create a MAC_structure object and populate it with the appropriate fields.

1. MAC_structureオブジェクトを作成し、適切なフィールドで埋める。

2. Create the value ToBeMaced by encoding the MAC_structure to a byte stream, using the encoding described in Section 14.

2. 値ToBeMacedを作成します。MAC_structureをバイトストリームにエンコードし、Section 14で説明されているエンコードを使用します。

3. Obtain the cryptographic key from one of the recipients of the message.

3. メッセー ジの受信者のうちの一人から暗号鍵を取得します。

4. Call the MAC creation algorithm passing in K (the key to use), alg (the algorithm to MAC with), and ToBeMaced (the value to compute the MAC on).

4. K(使用するキー)、alg(MACを生成するアルゴリズム)、ToBeMaced(MACを計算する値)を渡してMAC作成アルゴリズムを呼び出します。

5. Compare the MAC value to the 'tag' field of the COSE_Mac or COSE_Mac0 structure.

5. COSE_MacまたはCOSE_Mac0構造体の'tag'フィールドとMAC値を比較します。

A COSE Key structure is built on a CBOR map object. The set of common parameters that can appear in a COSE Key can be found in the IANA "COSE Key Common Parameters" registry (Section 16.5). Additional parameters defined for specific key types can be found in the IANA "COSE Key Type Parameters" registry (Section 16.6).

COSEキーコンテナは、CBORマップオブジェクト上に構築されます。COSEキーに現れることができる共通パラメーターのセットは、IANAの「COSEキーコモンパラメーター」レジストリ(セクション16.5)で見つけることができます。特定のキータイプに対して定義された追加のパラメーターは、IANAの「COSEキータイプパラメーター」レジストリ(セクション16.6)で見つけることができます。

A COSE Key Set uses a CBOR array object as its underlying type. The values of the array elements are COSE Keys. A COSE Key Set MUST have at least one element in the array. Examples of COSE Key Sets can be found in Appendix C.7.

COSEキーセットは、基礎となる型としてCBOR配列オブジェクトを使用します。配列要素の値はCOSEキーです。COSEキーセットは、配列内に少なくとも1つの要素をしなければなりません(MUST)。COSEキーセットの例は、付録C.7に示されています。

Each element in a COSE Key Set MUST be processed independently. If one element in a COSE Key Set is either malformed or uses a key that is not understood by an application, that key is ignored and the other keys are processed normally.

各要素は、COSE Key Set内のしなければなりません(MUST)個別に処理されます。COSE Key Set内の要素の1つが不正形式であるか、アプリケーションが理解できないキーを使用している場合、そのキーは無視され、他のキーは通常通りに処理されます。

The element "kty" is a required element in a COSE_Key map.

要素「kty」は、COSE_Key マップ内の必須要素です。

The CDDL grammar describing COSE_Key and COSE_KeySet is:

MUST 辞書記法で、COSE_Key および COSE_KeySet を記述します。

COSE_Key = { 1 => tstr / int, ; kty ? 2 => bstr, ; kid ? 3 => tstr / int, ; alg ? 4 => [+ (tstr / int) ], ; key_ops ? 5 => bstr, ; Base IV * label => values }

COSE_Key = { 1 => tstr / int, ; kty ? 2 => bstr, ; kid ? 3 => tstr / int, ; alg ? 4 => [+ (tstr / int)], ; key_ops ? 5 => bstr, ; Base IV * label => values } COSE_Key = { 1 => tstr / int, ;kty ? 2 => bstr, ;kid ? 3 => tstr / int, ;alg ? 4 => [+ (tstr / int)], ;key_ops ? 5 => bstr, ;Base IV * label => values }

COSE_KeySet = [+COSE_Key]

COSE_KeySet = [+COSE_Key]

This document defines a set of common parameters for a COSE Key object. Table 3 provides a summary of the parameters defined in this section. There are also parameters that are defined for specific key types. Key-type-specific parameters can be found in Section 13.

このドキュメントは、COSEキーオブジェクトの共通パラメーターセットを定義しています。テーブル3は、このセクションで定義されているパラメーターの概要を提供しています。また、特定のキータイプに対して定義されたパラメーターもあります。キータイプ固有のパラメーターは、セクション13に記載されています。

Name Label CBOR Type Value Registry Description
kty 1 tstr / int COSE Key Common Parameters Identification of the key type
kid 2 bstr Key identification value -- match to kid in message
alg 3 tstr / int COSE Algorithms Key usage restriction to this algorithm
key_ops 4 [+ (tstr/int)] Restrict set of permissible operations
Base IV 5 bstr Base IV to be xor-ed with Partial IVs

名前 ラベル CBORのタイプ 値の登録 説明
kty 1 tstr / int COSEキー共通パラメーター キーのタイプの識別
kid 2 bstr キーの識別値 - メッセージ中のkidに一致する値
alg 3 tstr / int COSEアルゴリズム このアルゴリズムに対するキーの使用制限
key_ops 4 [+ (tstr/int)] 許可される操作の制限セット
Base IV 5 bstr Partial IVsとXORされるBase IV

                       Table 3: Key Map Labels

                       テーブル3: キーマップのラベル

kty: This parameter is used to identify the family of keys for this structure and, thus, the set of key-type-specific parameters to be found. The set of values defined in this document can be found in Table 21. This parameter MUST be present in a key object. Implementations MUST verify that the key type is appropriate for the algorithm being processed. The key type MUST be included as part of the trust decision process.

kty:このパラメーターは、この構造体のキーファミリを識別し、したがって、見つかるべきキータイプ固有のパラメーターセットを特定するために使用されます。このドキュメントで定義されている値のセットは、表21にあります。このパラメーターはしなければなりません(MUST)キーオブジェクトに含まれている必要があります。実装は、処理中のアルゴリズムに適切なキータイプであることを確認するしなければなりません(MUST)。キータイプは信頼の決定プロセスの一部として含まれるしなければなりません(MUST)

alg: This parameter is used to restrict the algorithm that is used with the key. If this parameter is present in the key structure, the application MUST verify that this algorithm matches the algorithm for which the key is being used. If the algorithms do not match, then this key object MUST NOT be used to perform the cryptographic operation. Note that the same key can be in a different key structure with a different or no algorithm specified; however, this is considered to be a poor security practice.

alg:このパラメーターは、鍵と一緒に使用されるアルゴリズムを制限するために使用されます。もし鍵構造にこのパラメーターが存在する場合、アプリケーションはこのアルゴリズムが鍵が使用されるアルゴリズムと一致していることを確認しなければなりません(MUST)。もしアルゴリズムが一致しない場合、この鍵オブジェクトは暗号操作を実行するためにしてはなりません(MUST NOT)。同じ鍵は異なるアルゴリズムが指定されている別の鍵構造に存在するかもしれませんが、これはセキュリティーの観点からは望ましくない行為とされます。

kid: This parameter is used to give an identifier for a key. The identifier is not structured and can be anything from a user- provided string to a value computed on the public portion of the key. This field is intended for matching against a 'kid' parameter in a message in order to filter down the set of keys that need to be checked.

kid: このパラメーターは、キーに識別子を与えるために使用されます。識別子は構造化されておらず、ユーザーが提供した文字列からキーの公開部分で計算された値まで、何でも良いです。このフィールドは、確認する必要のあるキーのセットを絞り込むために、メッセージの中の 'kid' パラメーターと一致させるために意図されています。

key_ops: This parameter is defined to restrict the set of operations that a key is to be used for. The value of the field is an array of values from Table 4. Algorithms define the values of key ops that are permitted to appear and are required for specific operations. The set of values matches that in [RFC7517] and [W3C.WebCrypto].

key_ops(キーオプス):このパラメーターは、キーに使用する操作の集合を制限するために定義されています。フィールドの値は、テーブル4の値の配列です。アルゴリズムは、出現を許可されるキーの操作の値を定義し、特定の操作には必要です。値のセットは、[RFC7517]および[W3C.WebCrypto]と一致します。

Base IV: This parameter is defined to carry the base portion of an IV. It is designed to be used with the Partial IV header parameter defined in Section 3.1. This field provides the ability to associate a Partial IV with a key that is then modified on a per message basis with the Partial IV.

Base IV: このパラメーターは、IVのベース部分を運ぶために定義されています。これは、セクション3.1で定義されたPartial IVヘッダーパラメーターと共に使用するように設計されています。このフィールドは、Partial IVとキーを関連付け、メッセージごとにPartial IVで修正されるキーを提供します。

   Extreme care needs to be taken when using a Base IV in an
   application.  Many encryption algorithms lose security if the same
   IV is used twice.

    Base IVをアプリケーションで使用する際には、非常に細心の注意が必要です。同じIVが2回使用されると、多くの暗号化アルゴリズムの安全性が低下します。

   If different keys are derived for each sender, using the same Base
   IV with Partial IVs starting at zero is likely to ensure that the
   IV would not be used twice for a single key.  If different keys
   are derived for each sender, starting at the same Base IV is
   likely to satisfy this condition.  If the same key is used for
   multiple senders, then the application needs to provide for a
   method of dividing the IV space up between the senders.  This
   could be done by providing a different base point to start from or
   a different Partial IV to start with and restricting the number of
   messages to be sent before rekeying.

   異なる送信者ごとに派生キーが生成される場合、ゼロを始めとする部分初期化ベクトル(IV)を使用する場合は、同じ基準IVを使用することで、IVが単一のキーに対して2回使用されないようにできる可能性が高いです。 異なる送信者ごとに異なるキーが生成される場合は、同じ基準IVから始めることで、この条件を満たす可能性が高いです。 同じキーが複数の送信者で使用される場合は、アプリケーションは送信者間でIV空間を分割する手段を提供する必要があります。 これは、異なる基点を提供するか、異なる部分IVで開始し、再鍵化する前に送信するメッセージの数を制限することによって行うことができます。

Name Value Description
sign 1 The key is used to create signatures. Requires private key fields.
verify 2 The key is used for verification of signatures.
encrypt 3 The key is used for key transport encryption.
decrypt 4 The key is used for key transport decryption. Requires private key fields.
wrap 5 The key is used for key wrap encryption.
key
unwrap 6 The key is used for key wrap decryption.
key Requires private key fields.
derive 7 The key is used for deriving keys. Requires
key private key fields.
derive 8 The key is used for deriving bits not to be
bits used as a key. Requires private key fields.
MAC 9 The key is used for creating MACs.
create
MAC 10 The key is used for validating MACs.
verify

名前 説明
サイン 1 キーは署名の作成に使用されます。プライベートキーフィールドが必要です。
検証 2 キーは署名の検証に使用されます。
暗号化 3 キーは鍵転送の暗号化に使用されます。
復号化 4 キーは鍵転送の復号化に使用されます。プライベートキーフィールドが必要です。
包含 5 キーは鍵包装の暗号化に使用されます。
キー
非包含 6 キーは鍵包装の復号化に使用されます。
キー プライベートキーフィールドが必要です。
生成 7 キーは派生キーの生成に使用されます。
キー プライベートキーフィールドが必要です。
生成 8 キーはキーとして使用しないビットの派生に使用されます。 プライベートキーフィールドが必要です。
MAC 9 キーはMACの作成に使用されます。
作成
MAC 10 キーはMACの検証に使用されます。
検証

                    Table 4: Key Operation Values

                   Table 4: キー操作の値

There are two signature algorithm schemes. The first is signature with appendix. In this scheme, the message content is processed and a signature is produced; the signature is called the appendix. This is the scheme used by algorithms such as ECDSA and the RSA Probabilistic Signature Scheme (RSASSA-PSS). (In fact, the SSA in RSASSA-PSS stands for Signature Scheme with Appendix.)

署名アルゴリズムには2つのスキームがあります。1つ目は追加データ付き署名です。このスキームでは、メッセージの内容が処理され、署名が生成されます。この署名は追加データと呼ばれます。ECDSAやRSA確率的署名方式(RSASSA-PSS)などのアルゴリズムで使用されるスキームです。(実際、RSASSA-PSSのSSAは追加データ付き署名方式を表しています。)

The signature functions for this scheme are:

このスキームの署名関数は次のとおりです:

   signature = Sign(message content, key)

   シグネチャ = メッセージコンテンツをキーで署名する

   valid = Verification(message content, key, signature)

   valid = メッセージ内容、鍵、署名の検証

The second scheme is signature with message recovery (an example of such an algorithm is [PVSig]). In this scheme, the message content is processed, but part of it is included in the signature. Moving bytes of the message content into the signature allows for smaller signatures; the signature size is still potentially large, but the message content has shrunk. This has implications for systems implementing these algorithms and for applications that use them. The first is that the message content is not fully available until after a signature has been validated. Until that point, the part of the message contained inside of the signature is unrecoverable. The second is that the security analysis of the strength of the signature is very much based on the structure of the message content. Messages that are highly predictable require additional randomness to be supplied as part of the signature process. In the worst case, it becomes the same as doing a signature with appendix. Finally, in the event that multiple signatures are applied to a message, all of the signature algorithms are going to be required to consume the same number of bytes of message content. This means that the mixing of the different schemes in a single message is not supported, and if a recovery signature scheme is used, then the same amount of content needs to be consumed by all of the signatures.

第2のスキームは、メッセージリカバリと署名です(このアルゴリズムの例は、[PVSig])。このスキームでは、メッセージの内容が処理されますが、一部は署名に含まれます。メッセージの内容を署名に移動することで、より小さな署名が可能になります。署名のサイズは依然として大きい可能性がありますが、メッセージの内容は縮小されます。これには、これらのアルゴリズムを実装するシステムとそれらを使用するアプリケーションに対する影響があります。まず、メッセージの内容は署名が検証されるまで完全に利用できません。その時点までは、署名の内部に含まれるメッセージの一部は回復できません。次に、署名の強度のセキュリティー分析は、メッセージの内容の構造に非常に基づいています。予測可能性の高いメッセージでは、署名プロセスの一環として追加のランダム性が必要です。最悪の場合、付録付きの署名と同じになります。最後に、複数の署名がメッセージに適用される場合、すべての署名アルゴリズムが同じ数のバイトのメッセージ内容を消費する必要があります。つまり、異なるスキームを単一のメッセージに混在させることはサポートされておらず、リカバリ署名スキームが使用される場合、すべての署名に同じ量のコンテンツを消費する必要があります。

The signature functions for this scheme are:

このスキームの署名機能は以下のとおりです:

signature, message sent = Sign(message content, key)

署名、送信されたメッセージ = メッセージの内容を署名する(Sign)、キーを使用します。

valid, message content = Verification(message sent, key, signature)

有効な場合、メッセージの内容は「メッセージの送信、鍵、署名の検証」によって検証されます。

Signature algorithms are used with the COSE_Signature and COSE_Sign1 structures. At this time, only signatures with appendixes are defined for use with COSE; however, considerable interest has been expressed in using a signature with message recovery algorithm due to the effective size reduction that is possible. Implementations will need to keep this in mind for later possible integration.

署名アルゴリズムは、COSE_SignatureおよびCOSE_Sign1構造と共に使用されます。現時点では、COSEとの使用のために付録を持つ署名のみが定義されています。しかし、効果的なサイズ削減が可能であるという理由から、メッセージリカバリアルゴリズムを使用した署名の利用に関心が強く示されています。実装では、将来の統合のためにこれを考慮する必要があります。

ECDSA [DSS] defines a signature algorithm using ECC. Implementations SHOULD use a deterministic version of ECDSA such as the one defined in [RFC6979]. The use of a deterministic signature algorithm allows for systems to avoid relying on random number generators in order to avoid generating the same value of 'k' (the per-message random value). Biased generation of the value 'k' can be attacked, and collisions of this value leads to leaked keys. It additionally allows for doing deterministic tests for the signature algorithm. The use of deterministic ECDSA does not lessen the need to have good random number generation when creating the private key.

ECDSAはECCを使用した署名アルゴリズムを定義しています。実装はすべきです(SHOULD)決定論的ECDSAのバージョンを使用することをお勧めします。このバージョンは[RFC6979]で定義されています。決定論的署名アルゴリズムの使用により、システムはランダム数生成器に依存せずに、同じ値の 'k'(メッセージ毎のランダム値)を生成することを回避できます。値 'k' の偏りがある生成は攻撃され、この値の衝突は鍵の漏洩につながります。さらに、決定論的ECDSAは署名アルゴリズムの決定論的なテストを行うことも可能にします。決定論的ECDSAの使用は、プライベートキーを作成する際の良好なランダム数生成の必要性を減じるものではありません。

The ECDSA signature algorithm is parameterized with a hash function (h). In the event that the length of the hash function output is greater than the group of the key, the leftmost bytes of the hash output are used.

ECDSA署名アルゴリズムはハッシュ関数(h)でパラメーター化されます。ハッシュ関数の出力の長さが鍵のグループよりも大きい場合、ハッシュ出力の左端のバイトが使用されます。

The algorithms defined in this document can be found in Table 5.

このドキュメントで定義されたアルゴリズムは、表5に記載されています。

Name Value Hash Description
ES256 -7 SHA-256 ECDSA w/ SHA-256
ES384 -35 SHA-384 ECDSA w/ SHA-384
ES512 -36 SHA-512 ECDSA w/ SHA-512

名前 ハッシュ 説明
ES256 -7 SHA-256 ECDSA w/ SHA-256
ES384 -35 SHA-384 ECDSA w/ SHA-384
ES512 -36 SHA-512 ECDSA w/ SHA-512

                   Table 5: ECDSA Algorithm Values

                   テーブル5:ECDSAアルゴリズムの値

This document defines ECDSA to work only with the curves P-256, P-384, and P-521. This document requires that the curves be encoded using the 'EC2' (2 coordinate elliptic curve) key type. Implementations need to check that the key type and curve are correct when creating and verifying a signature. Other documents can define it to work with other curves and points in the future.

このドキュメントは、ECDSAが曲線P-256、P-384、およびP-521だけで動作するように定義しています。このドキュメントでは、曲線を 'EC2'(2座標楕円曲線)キータイプを使用してエンコードすることが要求されています。実装は、署名の作成と検証時にキータイプと曲線が正しいことを確認する必要があります。他のドキュメントでは、将来的に他の曲線や点との連携を定義することができます。

In order to promote interoperability, it is suggested that SHA-256 be used only with curve P-256, SHA-384 be used only with curve P-384, and SHA-512 be used with curve P-521. This is aligned with the recommendation in Section 4 of [RFC5480].

相互運用性を促進するために、SHA-256はカーブP-256とのみ使用されることが提案されており、SHA-384はカーブP-384とのみ使用され、SHA-512はカーブP-521と使用されることが推奨されています。これは、[RFC5480]のSection 4での推奨事項と一致しています。

The signature algorithm results in a pair of integers (R, S). These integers will be the same length as the length of the key used for the signature process. The signature is encoded by converting the integers into byte strings of the same length as the key size. The length is rounded up to the nearest byte and is left padded with zero bits to get to the correct length. The two integers are then concatenated together to form a byte string that is the resulting signature.

署名アルゴリズムは、整数のペア(R、S)を生成します。これらの整数の長さは、署名プロセスに使用される鍵の長さと同じです。署名は、整数を鍵の長さと同じ長さのバイト列に変換してエンコードされます。長さは最も近いバイトに切り上げられ、正しい長さに到達するためにゼロビットで左パディングされます。その後、2つの整数は連結され、結果の署名が形成されます。

Using the function defined in [RFC8017], the signature is: Signature = I2OSP(R, n) | I2OSP(S, n) where n = ceiling(key_length / 8)

[RFC8017]で定義された関数を使用して、署名は以下のようになります:署名 = I2OSP(R, n) | I2OSP(S, n)、ただし n = key_length / 8 の上限付き整数部分

When using a COSE key for this algorithm, the following checks are made:

このアルゴリズムでCOSEキーを使用する場合、次のチェックが行われます:します(MUST)

  • The 'kty' field MUST be present, and it MUST be 'EC2'.
  • 「'kty'フィールドは存在しなければなりません(MUST)、かつ『EC2』でなければなりません(MUST)」
  • If the 'alg' field is present, it MUST match the ECDSA signature algorithm being used.
  • もし「'alg'」フィールドが存在する場合、それは使用されているECDSA署名アルゴリズムと一致しなければなりません(MUST)。
  • If the 'key_ops' field is present, it MUST include 'sign' when creating an ECDSA signature.
  • もし 'key_ops' フィールドが存在する場合、ECDSA 署名を作成する際には、'key_ops' フィールドに 'sign' を含める必要があります。
  • If the 'key_ops' field is present, it MUST include 'verify' when verifying an ECDSA signature.
  • もし 'key_ops' フィールドが存在する場合、ECDSA 署名の検証時に 'verify' を含める必要があります。

The security strength of the signature is no greater than the minimum of the security strength associated with the bit length of the key and the security strength of the hash function.

署名のセキュリティー強度は、キーのビット長に関連付けられたセキュリティー強度とハッシュ関数のセキュリティー強度の最小値によって超えられない。

Note: Use of this technique is a good idea even when good random number generation exists. Doing so both reduces the possibility of having the same value of 'k' in two signature operations and allows for reproducible signature values, which helps testing.

注意:このテクニックの使用は、良好な乱数生成が存在する場合でも良い考えです。これにより、2つの署名操作で同じ値の「k」を持つ可能性が低くなり、再現可能な署名値を使用することができるため、テストに役立ちます。

There are two substitution attacks that can theoretically be mounted against the ECDSA signature algorithm.

ECDSA署名アルゴリズムに対して理論的に実行可能な2つの代替攻撃が存在します。

  • Changing the curve used to validate the signature: If one changes the curve used to validate the signature, then potentially one could have two messages with the same signature, each computed under a different curve. The only requirement on the new curve is that its order be the same as the old one and it be acceptable to the client. An example would be to change from using the curve secp256r1 (aka P-256) to using secp256k1. (Both are 256-bit curves.) We currently do not have any way to deal with this version of the attack except to restrict the overall set of curves that can be used.
  • 署名の検証に使用される曲線を変更する場合:署名の検証に使用される曲線を変更すると、異なる曲線で計算された同じ署名を持つ2つのメッセージが存在する可能性があります。新しい曲線に対する唯一の要件は、その位数が古い曲線と同じであり、クライアントに受け入れられることです。例えば、曲線secp256r1(またはP-256とも呼ばれます)からsecp256k1へ変更することが考えられます(どちらも256ビットの曲線です)。現時点では、この攻撃のバージョンに対処する方法は制限されること以外にありません。
  • Change the hash function used to validate the signature: If one either has two different hash functions of the same length or can truncate a hash function down, then one could potentially find collisions between the hash functions rather than within a single hash function (for example, truncating SHA-512 to 256 bits might collide with a SHA-256 bit hash value). As the hash algorithm is part of the signature algorithm identifier, this attack is mitigated by including a signature algorithm identifier in the protected header.
  • MUST include a signature algorithm identifier in the protected header in order to mitigate the attack mentioned above. The signature algorithm identifier can be used to change the hash function used for validating the signature. If there are two different hash functions of the same length or if truncation of a hash function is possible, collisions between the hash functions instead of within a single hash function could occur. Therefore, it is RECOMMENDED to use a signature algorithm identifier to address this issue and ensure the integrity of the signature.

[RFC8032] describes the elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). In that document, the signature algorithm is instantiated using parameters for edwards25519 and edwards448 curves. The document additionally describes two variants of the EdDSA algorithm: Pure EdDSA, where no hash function is applied to the content before signing, and HashEdDSA, where a hash function is applied to the content before signing and the result of that hash function is signed. For EdDSA, the content to be signed (either the message or the pre-hash value) is processed twice inside of the signature algorithm. For use with COSE, only the pure EdDSA version is used. This is because it is not expected that extremely large contents are going to be needed and, based on the arrangement of the message structure, the entire message is going to need to be held in memory in order to create or verify a signature. This means that there does not appear to be a need to be able to do block updates of the hash, followed by eliminating the message from memory. Applications can provide the same features by defining the content of the message as a hash value and transporting the COSE object (with the hash value) and the content as separate items.

[RFC8032]は、楕円曲線署名方式であるEdwards-curve Digital Signature Algorithm (EdDSA)について説明しています。この文書では、署名アルゴリズムはedwards25519とedwards448の曲線のパラメーターを使用してインスタンス化されます。さらに、EdDSAアルゴリズムの2つのバリアント(Pure EdDSAおよびHashEdDSA)についても説明しています。Pure EdDSAでは、署名前にコンテンツにハッシュ関数を適用しない場合、HashEdDSAでは署名前にコンテンツにハッシュ関数を適用し、そのハッシュ関数の結果を署名します。EdDSAでは、署名アルゴリズム内で署名対象となるコンテンツ(メッセージまたはプリハッシュ値)が2回処理されます。COSEとの使用においては、純粋なEdDSAバージョンのみが使用されます。これは、非常に大きなコンテンツが必要とされることは予想されておらず、メッセージ構造の配置に基づいて、署名を作成または検証するためにメモリにメッセージ全体を保持する必要があるためです。つまり、ハッシュのブロック更新を行い、その後メッセージをメモリから削除する必要性はないようです。アプリケーションは、メッセージの内容をハッシュ値として定義し、COSEオブジェクト(ハッシュ値と共に)とコンテンツを別々に転送することで同じ機能を提供することができます。

The algorithms defined in this document can be found in Table 6. A single signature algorithm is defined, which can be used for multiple curves.

このドキュメントで定義されたアルゴリズムは、表6に記載されています。複数の曲線で使用できる、単一の署名アルゴリズムが定義されています。

Name Value Description
EdDSA -8 EdDSA

名前 説明
EdDSA -8 EdDSA

                   Table 6: EdDSA Algorithm Values

                   テーブル6:EdDSAアルゴリズムの値

[RFC8032] describes the method of encoding the signature value.

[RFC8032]は、署名値のエンコード方法について説明しています。

When using a COSE key for this algorithm, the following checks are made:

このアルゴリズムでCOSEキーを使用する場合、以下のチェックが行われます:

  • The 'kty' field MUST be present, and it MUST be 'OKP' (Octet Key Pair).
  • 'kty'フィールドは存在しなければならず、'OKP'(オクテットキーペア)でなければなりません。
  • The 'crv' field MUST be present, and it MUST be a curve defined for this signature algorithm.
  • 「crv」フィールドは存在しなければならず、この署名アルゴリズムに定義された曲線である必要があります。
  • If the 'alg' field is present, it MUST match 'EdDSA'.
  • もし'alg'フィールドが存在する場合、それは'EdDSA'と一致しなければなりません(MUST)。
  • If the 'key_ops' field is present, it MUST include 'sign' when creating an EdDSA signature.
  • key_opsフィールドが存在する場合、EdDSA署名を作成する際にsignを含まなければなりません(MUST)。
  • If the 'key_ops' field is present, it MUST include 'verify' when verifying an EdDSA signature.
  • もし 'key_ops' フィールドが存在する場合、EdDSA 署名を検証する際に 'verify' を含む必要があります。

How public values are computed is not the same when looking at EdDSA and Elliptic Curve Diffie-Hellman (ECDH); for this reason, they should not be used with the other algorithm.

公開値の計算方法は、EdDSAと楕円曲線Diffie-Hellman(ECDH)で異なります。そのため、これらのアルゴリズムを互いに使用するべきではありません。

If batch signature verification is performed, a well-seeded cryptographic random number generator is REQUIRED. Signing and non- batch signature verification are deterministic operations and do not need random numbers of any kind.

バッチ署名の検証が行われる場合、十分にシード化された暗号論的乱数発生器が要求されています(REQUIRED)。署名と非バッチ署名の検証は決定論的な操作であり、どのような種類の乱数も必要ありません。

Message Authentication Codes (MACs) provide data authentication and integrity protection. They provide either no or very limited data origination. A MAC, for example, can be used to prove the identity of the sender to a third party.

メッセージ認証コード(MAC)はデータの認証と整合性保護を提供します。MACはデータの発信元をほとんどまたは全く提供しません。たとえば、MACは送信者のアイデンティティを第三者に証明するために使用されることがあります。

MACs use the same scheme as signature with appendix algorithms. The message content is processed and an authentication code is produced. The authentication code is frequently called a tag.

MACsは署名付きアルゴリズムと同じスキームを使用します。メッセージの内容が処理され、認証コードが生成されます。認証コードは頻繁にタグと呼ばれます。

The MAC functions are:

MAC関数は次のとおりです:

tag = MAC_Create(message content, key)

tag = MAC_Create(メッセージコンテンツ、キー)

valid = MAC_Verify(message content, key, tag)

valid = MAC_Verify(メッセージの内容、キー、タグ)

MAC algorithms can be based on either a block cipher algorithm (i.e., AES-MAC) or a hash algorithm (i.e., a Hash-based Message Authentication Code (HMAC)). This document defines a MAC algorithm using each of these constructions.

MACアルゴリズムは、ブロック暗号アルゴリズム(つまり、AES-MAC)またはハッシュアルゴリズム(つまり、ハッシュベースのメッセージ認証コード(HMAC))に基づいています。このドキュメントでは、これらの構築方法を使用したMACアルゴリズムを定義しています。

MAC algorithms are used in the COSE_Mac and COSE_Mac0 structures.

MACアルゴリズムは、COSE_MacおよびCOSE_Mac0の構造に使用されます。

HMAC [RFC2104] [RFC4231] was designed to deal with length extension attacks. The algorithm was also designed to allow for new hash algorithms to be directly plugged in without changes to the hash function. The HMAC design process has been shown as solid since, while the security of hash algorithms such as MD5 has decreased over time; the security of HMAC combined with MD5 has not yet been shown to be compromised [RFC6151].

HMAC [RFC2104] [RFC4231]は、長さ拡張攻撃に対処するために設計されています。このアルゴリズムはまた、新しいハッシュアルゴリズムをハッシュ関数を変更することなしに直接組み込むことを可能にするために設計されています。HMACの設計プロセスは、MD5などのハッシュアルゴリズムのセキュリティーが時間とともに低下している一方で、HMACとMD5を組み合わせたセキュリティーがまだ妥協されていないことが示されています[RFC6151]

The HMAC algorithm is parameterized by an inner and outer padding, a hash function (h), and an authentication tag value length. For this specification, the inner and outer padding are fixed to the values set in [RFC2104]. The length of the authentication tag corresponds to the difficulty of producing a forgery. For use in constrained environments, we define a set of HMAC algorithms that are truncated.

HMACアルゴリズムは、内部および外部のパディング、ハッシュ関数(h)、および認証タグ値の長さによってパラメーター化されます。この仕様では、内部および外部のパディングは、[RFC2104]で設定された値で固定されています。認証タグの長さは、偽造を生成する難度に対応します。制約のある環境での使用のために、切り詰められた一連のHMACアルゴリズムを定義します。

There are currently no known issues with truncation; however, the security strength of the message tag is correspondingly reduced in strength. When truncating, the leftmost tag length bits are kept and transmitted.

現在、切り捨てに関する既知の問題はありません。ただし、メッセージタグのセキュリティー強度はそれに応じて弱体化します。切り捨てる場合、左端のタグの長さビットが保持され、送信されます。

The algorithms defined in this document can be found in Table 7.

このドキュメントで定義されているアルゴリズムは、テーブル7にあります。

Name Value Hash Tag Length Description
HMAC 4 SHA-256 64 HMAC w/ SHA-256
256/64 truncated to 64 bits
HMAC 5 SHA-256 256 HMAC w/ SHA-256
256/256
HMAC 6 SHA-384 384 HMAC w/ SHA-384
384/384
HMAC 7 SHA-512 512 HMAC w/ SHA-512
512/512

名前 ハッシュ タグ長 説明
HMAC 4 SHA-256 64 HMAC w/ SHA-256
256/64 64ビットに切り詰める
HMAC 5 SHA-256 256 HMAC w/ SHA-256
256/256
HMAC 6 SHA-384 384 HMAC w/ SHA-384
384/384
HMAC 7 SHA-512 512 HMAC w/ SHA-512
512/512

                   Table 7: HMAC Algorithm Values

                   テーブル 7: HMAC アルゴリズム値

Some recipient algorithms carry the key while others derive a key from secret data. For those algorithms that carry the key (such as AES Key Wrap), the size of the HMAC key SHOULD be the same size as the underlying hash function. For those algorithms that derive the key (such as ECDH), the derived key MUST be the same size as the underlying hash function.

一部の受信者アルゴリズムは鍵を保持し、他のものは秘密データから鍵を導出します。鍵を保持するアルゴリズム(AES Key Wrapなど)においては、HMAC鍵のサイズは底層のハッシュ関数と同じサイズであるべきです(SHOULD)。鍵を導出するアルゴリズム(ECDHなど)においては、導出された鍵のサイズは底層のハッシュ関数と同じサイズでなければなりません(MUST)

When using a COSE key for this algorithm, the following checks are made:

このアルゴリズムにCOSEキーを使用する場合、以下のチェックが行われます:しなければなりません(MUST)

  • The 'kty' field MUST be present, and it MUST be 'Symmetric'.
  • 'kty'フィールドはしなければなりません(MUST)存在し、'Symmetric'でなければなりません(MUST)
  • If the 'alg' field is present, it MUST match the HMAC algorithm being used.
  • もし「alg」フィールドが存在する場合、それは使用中のHMACアルゴリズムと一致しなければなりません(MUST match)。
  • If the 'key_ops' field is present, it MUST include 'MAC create' when creating an HMAC authentication tag.
  • key_opsフィールドが存在する場合、HMAC認証タグを作成する際に、key_opsフィールドには必ず「MAC create」を含める必要があります。
  • If the 'key_ops' field is present, it MUST include 'MAC verify' when verifying an HMAC authentication tag.
  • もし「key_ops」のフィールドが存在する場合、HMAC認証タグを検証する際に、「MACの検証」を含めなければなりません。

Implementations creating and validating MAC values MUST validate that the key type, key length, and algorithm are correct and appropriate for the entities involved.

実装は、MAC値を作成および検証する場合、関係するエンティティに対してキーのタイプ、キーの長さ、およびアルゴリズムが正しいか適切であることを確認しなければなりません(MUST)

HMAC has proved to be resistant to attack even when used with weakened hash algorithms. The current best known attack is to brute force the key. This means that key size is going to be directly related to the security of an HMAC operation.

HMACは、弱体化されたハッシュアルゴリズムと使用しても攻撃に対して耐性を示すことが証明されています。現在、最もよく知られている攻撃方法は、鍵を総当たりで解読することです。これは、鍵のサイズがHMACの操作のセキュリティーに直接関連していることを意味します。

AES-CBC-MAC is defined in [MAC]. (Note that this is not the same algorithm as AES Cipher-Based Message Authentication Code (AES-CMAC) [RFC4493].)

AES-CBC-MACは、[MAC]で定義されています。(AES Cipher-Based Message Authentication Code(AES-CMAC)[RFC4493]とは異なるアルゴリズムであることに注意してください。)

AES-CBC-MAC is parameterized by the key length, the authentication tag length, and the IV used. For all of these algorithms, the IV is fixed to all zeros. We provide an array of algorithms for various key lengths and tag lengths. The algorithms defined in this document are found in Table 8.

AES-CBC-MACは、キーの長さ、認証タグの長さ、および使用されるIVによってパラメーター化されます。これらのすべてのアルゴリズムにおいて、IVはすべてゼロで固定されています。私たちは、さまざまなキーの長さとタグの長さに対して、アルゴリズムの配列を提供しています。このドキュメントで定義されているアルゴリズムは、表8にあります。

Name Value Key Length Tag Length Description
AES-MAC 14 128 64 AES-MAC 128-bit key,
128/64 64-bit tag
AES-MAC 15 256 64 AES-MAC 256-bit key,
256/64 64-bit tag
AES-MAC 25 128 128 AES-MAC 128-bit key,
128/128 128-bit tag
AES-MAC 26 256 128 AES-MAC 256-bit key,
256/128 128-bit tag

名前 キー長 タグ長 説明
AES-MAC 14 128 64 AES-MAC 128ビットのキー
128/64 64ビットのタグ
AES-MAC 15 256 64 AES-MAC 256ビットのキー
256/64 64ビットのタグ
AES-MAC 25 128 128 AES-MAC 128ビットのキー
128/128 128ビットのタグ
AES-MAC 26 256 128 AES-MAC 256ビットのキー
256/128 128ビットのタグ

                  Table 8: AES-MAC Algorithm Values


Keys may be obtained either from a key structure or from a recipient structure. Implementations creating and validating MAC values MUST validate that the key type, key length, and algorithm are correct and appropriate for the entities involved.

キーは、キー構造または受信者構造から取得することができます。MAC値を作成および検証する実装は、キーのタイプ、キーの長さ、アルゴリズムが正しいかつ関連するエンティティに適切であることを必ずしも確認しなければなりません(MUST)

When using a COSE key for this algorithm, the following checks are made:

このアルゴリズムでCOSEキーを使用する場合、次のチェックが行われます:

  • The 'kty' field MUST be present, and it MUST be 'Symmetric'.
  • 「kty」フィールドは存在しなければならず、その値は「Symmetric」でなければなりません。
  • If the 'alg' field is present, it MUST match the AES-MAC algorithm being used.
  • algフィールドが存在する場合、それは使用されているAES-MACアルゴリズムと一致しなければなりません(MUST)。
  • If the 'key_ops' field is present, it MUST include 'MAC create' when creating an AES-MAC authentication tag.
  • もし「key_ops」フィールドが存在するなら、AES-MAC認証タグを作成する際には「MAC作成」を含めなければなりません(MUST)。
  • If the 'key_ops' field is present, it MUST include 'MAC verify' when verifying an AES-MAC authentication tag.
  • もし 'key_ops' フィールドが存在する場合、AES-MAC 認証タグを検証する際に、'MAC verify' を含めなければなりません(MUST)。

A number of attacks exist against Cipher Block Chaining Message Authentication Code (CBC-MAC) that need to be considered.

Cipher Block Chaining Message Authentication Code(CBC-MAC)に対しては、考慮すべき攻撃手法が存在します。

  • A single key must only be used for messages of a fixed and known length. If this is not the case, an attacker will be able to generate a message with a valid tag given two message and tag pairs. This can be addressed by using different keys for messages of different lengths. The current structure mitigates this problem, as a specific encoding structure that includes lengths is built and signed. (CMAC also addresses this issue.)
  • 固定かつ既知の長さのメッセージに対しては、単一の鍵のみを使用する必要があります。「もしそのような場合でない場合、攻撃者は、2つのメッセージとタグのペアを使用して有効なタグを持つメッセージを生成することができます。これは、異なる長さのメッセージに対して異なる鍵を使用することで解決することができます。現在の構造は、特定の長さを含む符号化構造を構築して署名することで、この問題を軽減しています。(CMACもこの問題に対処しています。)」
  • Cipher Block Chaining (CBC) mode, if the same key is used for both encryption and authentication operations, an attacker can produce messages with a valid authentication code.
  • `Cipher Block Chaining (CBC)`モードでは、暗号化と認証の両方に同じキーが使用される場合、攻撃者は有効な認証コードを持つメッセージを生成することができます。
  • If the IV can be modified, then messages can be forged. This is addressed by fixing the IV to all zeros.
  • もしIVが変更可能である場合、メッセージは偽造される可能性があります。これはすべてのIVをゼロに固定することで解決されます。

Content encryption algorithms provide data confidentiality for potentially large blocks of data using a symmetric key. They provide integrity on the data that was encrypted; however, they provide either no or very limited data origination. (One cannot, for example, be used to prove the identity of the sender to a third party.) The ability to provide data origination is linked to how the CEK is obtained.

コンテンツ暗号化アルゴリズムは、対称鍵を使用して潜在的に大きなデータブロックのデータ機密性を提供します。暗号化されたデータの整合性を保証しますが、送信者の身元を第三者に証明するためには提供されないか非常に制限されます。(たとえば、使用されたものを第三者に証明することはできません。)データの発生元を提供する能力は、CEKの取得方法に関連しています。

COSE restricts the set of legal content encryption algorithms to those that support authentication both of the content and additional data. The encryption process will generate some type of authentication value, but that value may be either explicit or implicit in terms of the algorithm definition. For simplicity's sake, the authentication code will normally be defined as being appended to the ciphertext stream. The encryption functions are:

COSEは、コンテンツと追加データの両方の認証をサポートする暗号化アルゴリズムの集合を制限します。暗号化プロセスは、ある種の認証値を生成しますが、その値は明示的またはアルゴリズムの定義に応じて暗黙的である場合があります。簡単のため、認証コードは通常、暗号文のストリームに追加されると定義されます。暗号化機能は次のとおりです:

ciphertext = Encrypt(message content, key, additional data)

ciphertext = メッセージ内容を暗号化する(キー、追加データ)

valid, message content = Decrypt(cipher text, key, additional data) Most AEAD algorithms are logically defined as returning the message content only if the decryption is valid. Many but not all

有効な場合、メッセージコンテンツ=鍵、追加データで複合化(暗号文テキスト)が行われます。ほとんどのAEADアルゴリズムは、複合化が有効である場合にのみメッセージコンテンツを返すように論理的に定義されています。すべてではないが、多くの場合

implementations will follow this convention. The message content MUST NOT be used if the decryption does not validate.

実装はこの規約に従います。メッセージの内容は復号が検証されない場合には使用してはなりません。

These algorithms are used in COSE_Encrypt and COSE_Encrypt0.

これらのアルゴリズムは、COSE_EncryptとCOSE_Encrypt0で使用されます。

The Galois/Counter Mode (GCM) mode is a generic authenticated encryption block cipher mode defined in [AES-GCM]. The GCM mode is combined with the AES block encryption algorithm to define an AEAD cipher.

Galois/Counter Mode(GCM)モードは、[AES-GCM]で定義された一般的な認証付き暗号化ブロック暗号モードです。GCMモードは、AESブロック暗号アルゴリズムと組み合わせてAEAD暗号を定義します。

The GCM mode is parameterized by the size of the authentication tag and the size of the nonce. This document fixes the size of the nonce at 96 bits. The size of the authentication tag is limited to a small set of values. For this document however, the size of the authentication tag is fixed at 128 bits.

GCMモードは認証タグのサイズとノンスのサイズによってパラメーター化されます。このドキュメントでは、ノンスのサイズを96ビットに固定します。認証タグのサイズは、一部の値に制限されます。ただし、本ドキュメントでは認証タグのサイズが128ビットに固定されます。

The set of algorithms defined in this document are in Table 9.

このドキュメントで定義されているアルゴリズムのセットは、表9にあります。

Name Value Description
A128GCM 1 AES-GCM mode w/ 128-bit key, 128-bit tag
A192GCM 2 AES-GCM mode w/ 192-bit key, 128-bit tag
A256GCM 3 AES-GCM mode w/ 256-bit key, 128-bit tag

名前 説明
A128GCM 1 AES-GCMモード(128ビットキー、128ビットタグ)
A192GCM 2 AES-GCMモード(192ビットキー、128ビットタグ)
A256GCM 3 AES-GCMモード(256ビットキー、128ビットタグ)

                Table 9: Algorithm Value for AES-GCM

                Table 9: AES-GCMのためのアルゴリズム値

Keys may be obtained either from a key structure or from a recipient structure. Implementations encrypting and decrypting MUST validate that the key type, key length, and algorithm are correct and appropriate for the entities involved.

鍵は、鍵の構造または受信者の構造から取得できます。暗号化および復号化を行う実装は、鍵のタイプ、鍵の長さ、およびアルゴリズムが関係するエンティティに対して正しいか適切かを確認しなければなりません(MUST)。

When using a COSE key for this algorithm, the following checks are made:

When using a COSE key for this algorithm, the following checks are made:

  • The 'kty' field MUST be present, and it MUST be 'Symmetric'.
  • 「'kty'フィールドはしなければなりません(MUST)、そして「Symmetric」であるしなければなりません(MUST)。」
  • If the 'alg' field is present, it MUST match the AES-GCM algorithm being used.
  • もし「alg」フィールドが存在する場合、使用されているAES-GCMアルゴリズムと一致しなければなりません(MUST)。
  • If the 'key_ops' field is present, it MUST include 'encrypt' or 'wrap key' when encrypting.
  • もし 'key_ops' フィールドが存在する場合、暗号化する際に 'encrypt' または 'wrap key' を含めるべきです(MUST)。
  • If the 'key_ops' field is present, it MUST include 'decrypt' or 'unwrap key' when decrypting.
  • もし'key_ops'フィールドが存在する場合、復号化する際には'decrypt'または'unwrap key'を含まなければなりません。

When using AES-GCM, the following restrictions MUST be enforced:

AES-GCM を使用する場合、以下の制約が適用されます: 「しなければなりません(MUST)

  • The key and nonce pair MUST be unique for every message encrypted.
  • The key and nonce pair MUST be unique for every message encrypted.
  • The total amount of data encrypted for a single key MUST NOT exceed 2^39 - 256 bits. An explicit check is required only in environments where it is expected that it might be exceeded.
  • 単一のキーで暗号化されるデータの合計量は、2^39 - 256 ビットを超えてはなりません(MUST NOT)。これが超えられる可能性がある環境では、明示的なチェックが必要です(REQUIRED)。

Consideration was given to supporting smaller tag values; the constrained community would desire tag sizes in the 64-bit range. Doing so drastically changes both the maximum messages size (generally not an issue) and the number of times that a key can be used. Given that Counter with CBC-MAC (CCM) is the usual mode for constrained environments, restricted modes are not supported.

次のように考慮すべきである:タグの値を小さくすることをサポートすることは検討されました。制約のあるコミュニティでは、64ビットの範囲のタグサイズが望まれます。これにより、最大メッセージサイズ(一般的には問題ではありませんが)とキーの使用回数が大幅に変化します。制約のある環境では、Counter with CBC-MAC(CCM)が通常のモードであるため、制限付きモードはサポートされていません。

CCM is a generic authentication encryption block cipher mode defined in [RFC3610]. The CCM mode is combined with the AES block encryption algorithm to define a commonly used content encryption algorithm used in constrained devices.

CCMは、[RFC3610]で定義された一般的な認証暗号化ブロック暗号モードです。CCMモードはAESブロック暗号アルゴリズムと組み合わされ、制約されたデバイスでよく使用されるコンテンツ暗号化アルゴリズムを定義します。

The CCM mode has two parameter choices. The first choice is M, the size of the authentication field. The choice of the value for M involves a trade-off between message growth (from the tag) and the probability that an attacker can undetectably modify a message. The second choice is L, the size of the length field. This value requires a trade-off between the maximum message size and the size of the Nonce.

CCMモードには2つのパラメーターの選択があります。最初の選択肢は、認証フィールドのサイズであるMです。Mの値の選択は、メッセージの成長(タグからの成長)と、攻撃者がメッセージを検知されずに変更できる確率とのトレードオフを含みます。2番目の選択肢は、長さフィールドのサイズであるLです。この値は、最大メッセージサイズとNonceのサイズとの間でトレードオフを必要とします。

It is unfortunate that the specification for CCM specified L and M as a count of bytes rather than a count of bits. This leads to possible misunderstandings where AES-CCM-8 is frequently used to refer to a version of CCM mode where the size of the authentication is 64 bits and not 8 bits. These values have traditionally been specified as bit counts rather than byte counts. This document will follow the convention of using bit counts so that it is easier to compare the different algorithms presented in this document.

CCMの仕様では、LおよびMがバイト数ではなくビット数のカウントとして指定されるという点が残念です。これにより、AES-CCM-8がCCMモードの認証のサイズが8ビットではなく64ビットであるバージョンを指すことが頻繁にあるため、誤解が生じる可能性があります。これらの値は従来、バイト数ではなくビット数として指定されてきました。本書では、異なるアルゴリズムを比較しやすくするために、ビット数のカウントの慣習に従います。

We define a matrix of algorithms in this document over the values of L and M. Constrained devices are usually operating in situations where they use short messages and want to avoid doing recipient- specific cryptographic operations. This favors smaller values of both L and M. Less-constrained devices will want to be able to use larger messages and are more willing to generate new keys for every operation. This favors larger values of L and M.

このドキュメントでは、LとMの値にわたるアルゴリズムの行列を定義します。制約のあるデバイスは通常、短いメッセージを使用し、受信者固有の暗号操作を避けたいと考えています。これにより、LとMの両方の値が小さくなることが望まれます。制約の少ないデバイスでは、より大きなメッセージを使用したいと考え、各操作ごとに新しいキーを生成することにも積極的です。これにより、LとMの値が大きくなることが望まれます。

The following values are used for L:

Lには次の値が使用されます。

16 bits (2): This limits messages to 2^16 bytes (64 KiB) in length. This is sufficiently long for messages in the constrained world. The nonce length is 13 bytes allowing for 2^(13*8) possible values of the nonce without repeating.

16ビット(2):これにより、メッセージの長さは2^16バイト(64 KiB)に制限されます。これは制約のある世界のメッセージに十分な長さです。ノンスの長さは13バイトであり、繰り返すことなく2^(13*8)通りのノンスの値を許容します。

64 bits (8): This limits messages to 2^64 bytes in length. The nonce length is 7 bytes allowing for 2^56 possible values of the nonce without repeating.

64ビット(8):これにより、メッセージの長さは2^64バイトに制限されます。ノンスの長さは7バイトであり、繰り返しのないノンスの2^56通りの値が可能です。

The following values are used for M:

次の値は M に使用されます:

64 bits (8): This produces a 64-bit authentication tag. This implies that there is a 1 in 2^64 chance that a modified message will authenticate.

64ビット(8):これにより、64ビットの認証タグが生成されます。これは、変更されたメッセージが認証される確率が2^64の1の可能性があることを意味します。

128 bits (16): This produces a 128-bit authentication tag. This implies that there is a 1 in 2^128 chance that a modified message will authenticate.

128ビット(16):これにより、128ビットの認証タグが生成されます。これは、変更されたメッセージが認証される確率が2^128のうち1であることを意味します。

Name Value L M k Description
AES-CCM-16-64-128 10 16 64 128 AES-CCM mode 128-bit key, 64-bit tag, 13-byte nonce
AES-CCM-16-64-256 11 16 64 256 AES-CCM mode 256-bit key, 64-bit tag, 13-byte nonce
AES-CCM-64-64-128 12 64 64 128 AES-CCM mode 128-bit key, 64-bit tag, 7-byte nonce
AES-CCM-64-64-256 13 64 64 256 AES-CCM mode 256-bit key, 64-bit tag, 7-byte nonce
AES-CCM-16-128-128 30 16 128 128 AES-CCM mode 128-bit key, 128-bit tag, 13-byte nonce
AES-CCM-16-128-256 31 16 128 256 AES-CCM mode 256-bit key, 128-bit tag, 13-byte nonce
AES-CCM-64-128-128 32 64 128 128 AES-CCM mode 128-bit key, 128-bit tag, 7-byte nonce
AES-CCM-64-128-256 33 64 128 256 AES-CCM mode 256-bit key, 128-bit tag, 7-byte nonce

名前 L M k 説明
AES-CCM-16-64-128 10 16 64 128 AES-CCMモード 128ビットキー、64ビットタグ、13バイトのNonce
AES-CCM-16-64-256 11 16 64 256 AES-CCMモード 256ビットキー、64ビットタグ、13バイトのNonce
AES-CCM-64-64-128 12 64 64 128 AES-CCMモード 128ビットキー、64ビットタグ、7バイトのNonce
AES-CCM-64-64-256 13 64 64 256 AES-CCMモード 256ビットキー、64ビットタグ、7バイトのNonce
AES-CCM-16-128-128 30 16 128 128 AES-CCMモード 128ビットキー、 128ビットタグ、 13バイトのNonce
AES-CCM-16-128-256 31 16 128 256 AES-CCMモード 256ビットキー、 128ビットタグ、 13バイトのNonce
AES-CCM-64-128-128 32 64 128 128 AES-CCMモード 128ビットキー、 128ビットタグ、7バイトのNonce
AES-CCM-64-128-256 33 64 128 256 AES-CCMモード 256ビットキー、 128ビットタグ、7バイトのNonce

               Table 10: Algorithm Values for AES-CCM

               テーブル10: AES-CCMのアルゴリズム値

Keys may be obtained either from a key structure or from a recipient structure. Implementations encrypting and decrypting MUST validate that the key type, key length, and algorithm are correct and appropriate for the entities involved.

キーはキー構造または受信者構造から取得することができます。暗号化および復号化を行う実装は、キータイプ、キー長、およびアルゴリズムが関係するエンティティに対して正しいか適切であることを確認しなければなりません(MUST)

When using a COSE key for this algorithm, the following checks are made:

このアルゴリズムでCOSEキーを使用する場合、以下のチェックが行われます:MUST

  • The 'kty' field MUST be present, and it MUST be 'Symmetric'.
  • 'kty' フィールドは存在しなければならず、それは 'Symmetric' でなければなりません。
  • If the 'alg' field is present, it MUST match the AES-CCM algorithm being used.
  • 'alg' フィールドが存在する場合、使用されている AES-CCM アルゴリズムと一致しなければなりません(MUST)。
  • If the 'key_ops' field is present, it MUST include 'encrypt' or 'wrap key' when encrypting.
  • 'key_ops'フィールドが存在する場合、暗号化する際には、'encrypt'または'wrap key'を含める必要があります。
  • If the 'key_ops' field is present, it MUST include 'decrypt' or 'unwrap key' when decrypting.
  • もし"key_ops"フィールドが存在する場合、復号化する際には"decrypt"または"unwrap key"を含めなければなりません(MUST)。

When using AES-CCM, the following restrictions MUST be enforced:

AES-CCMを使用する場合、以下の制約は必ず適用される必要があります。「しなければなりません(MUST)」:

  • The key and nonce pair MUST be unique for every message encrypted. Note that the value of L influences the number of unique nonces.
  • キーとノンスのペアは、暗号化されるメッセージごとに一意でなければなりません(MUST)。Lの値が一意のノンスの数に影響を与えることに注意してください。
  • The total number of times the AES block cipher is used MUST NOT exceed 2^61 operations. This limitation is the sum of times the block cipher is used in computing the MAC value and in performing stream encryption operations. An explicit check is required only in environments where it is expected that it might be exceeded.
  • AESブロック暗号が使用される合計回数は2^61回の操作を超えてはなりません(MUST NOT)。この制限は、MAC値の計算やストリーム暗号化の操作でブロック暗号が使用される回数の合計です。この制限が超えられる可能性がある環境では、明示的なチェックが必要です。

[RFC3610] additionally calls out one other consideration of note. It is possible to do a pre-computation attack against the algorithm in cases where portions of the plaintext are highly predictable. This reduces the security of the key size by half. Ways to deal with this attack include adding a random portion to the nonce value and/or increasing the key size used. Using a portion of the nonce for a random value will decrease the number of messages that a single key can be used for. Increasing the key size may require more resources in the constrained device. See Sections 5 and 10 of [RFC3610] for more information.

[RFC3610]によれば、注目すべき他の考慮事項が存在します。平文の一部が非常に予測しやすい場合、事前計算攻撃を行う可能性があります。これにより、鍵サイズのセキュリティーは半分に減少します。この攻撃に対処する方法には、ノンス値にランダムな部分を追加するか、使用する鍵サイズを増やすことが含まれます。ノンスの一部をランダムな値に使用すると、単一の鍵が使用できるメッセージの数が減少します。鍵サイズを大きくすると、制約のあるデバイスでより多くのリソースが必要になる場合があります。詳細については、[RFC3610]のセクション5および10を参照してください。

ChaCha20 and Poly1305 combined together is an AEAD mode that is defined in [RFC7539]. This is an algorithm defined to be a cipher that is not AES and thus would not suffer from any future weaknesses found in AES. These cryptographic functions are designed to be fast in software-only implementations.

ChaCha20とPoly1305を組み合わせたものは、[RFC7539]で定義されているAEADモードです。これは、AESではない暗号方式であり、したがってAESで見つかった将来の脆弱性には影響を受けません。これらの暗号機能は、ソフトウェアのみで高速に動作するように設計されています。

The ChaCha20/Poly1305 AEAD construction defined in [RFC7539] has no parameterization. It takes a 256-bit key and a 96-bit nonce, as well as the plaintext and additional data as inputs and produces the ciphertext as an option. We define one algorithm identifier for this algorithm in Table 11.

ChaCha20/Poly1305 AEAD構造は、[RFC7539]で定義されており、パラメーター化されていません。これは256ビットのキーと96ビットのノンスを取り、またプレーンテキストと追加データを入力として、オプションとして暗号文を生成します。このアルゴリズムに対して、Table 11で1つのアルゴリズム識別子を定義します。

Name Value Description
ChaCha20/Poly1305 24 ChaCha20/Poly1305 w/ 256-bit key, 128-bit tag

名前 説明
ChaCha20/Poly1305 24 ChaCha20/Poly1305 w/ 256ビット鍵、 128ビットタグ

                Table 11: Algorithm Value for AES-GCM

                表11: AES-GCMのアルゴリズム値

Keys may be obtained either from a key structure or from a recipient structure. Implementations encrypting and decrypting MUST validate that the key type, key length, and algorithm are correct and appropriate for the entities involved.

キーはキー構造体または受信者構造体から取得することができます。 暗号化および復号化を実装する場合、キーの種類、キーの長さ、およびアルゴリズムが正しいかつ関連するエンティティに適切であることをしなければなりません(MUST)

When using a COSE key for this algorithm, the following checks are made:

このアルゴリズムに対してCOSEキーを使用する場合、以下のチェックが行われます:

  • The 'kty' field MUST be present, and it MUST be 'Symmetric'.
  • 「kty」フィールドは存在しなければなりません(MUST)し、それは「Symmetric」である必要があります。
  • If the 'alg' field is present, it MUST match the ChaCha20/Poly1305 algorithm being used.
  • もし 'alg' フィールドが存在する場合、それは使用されているChaCha20/Poly1305アルゴリズムと一致しなければなりません。
  • If the 'key_ops' field is present, it MUST include 'encrypt' or 'wrap key' when encrypting.
  • もし「key_ops」フィールドが存在する場合、暗号化時には必ず「encrypt」または「wrap key」を含む必要があります。
  • If the 'key_ops' field is present, it MUST include 'decrypt' or 'unwrap key' when decrypting.
  • もし 'key_ops' フィールドが存在する場合、復号化する際には 'decrypt' または 'wrap key' を含まなければなりません。

The key and nonce values MUST be a unique pair for every invocation of the algorithm. Nonce counters are considered to be an acceptable way of ensuring that they are unique.

キーとノンスの値は、アルゴリズムの各呼び出し毎に固有のペアであるしなければなりません(MUST)。ノンスのカウンタは、それらが固有であることを保証するための受け入れ可能な手段と見なされます。

KDFs are used to take some secret value and generate a different one. The secret value comes in three flavors:

KDF(Key Derivation Functions)は、ある秘密値を取り、別の値を生成するために使用されます。秘密値には3つのバリエーションがあります:

  • Secrets that are uniformly random: This is the type of secret that is created by a good random number generator.
  • 一様ランダムな秘密鍵:これは、適切な乱数生成器によって作成されるタイプの秘密鍵です。
  • Secrets that are not uniformly random: This is type of secret that is created by operations like key agreement.
  • 一様にランダムではない秘密:これは、鍵合意などの操作によって作成されるタイプの秘密です。
  • Secrets that are not random: This is the type of secret that people generate for things like passwords.
  • ランダムでない秘密情報:これは、パスワードなどのために人々が生成する秘密のタイプです。

General KDFs work well with the first type of secret, can do reasonably well with the second type of secret, and generally do poorly with the last type of secret. None of the KDFs in this section are designed to deal with the type of secrets that are used for passwords. Functions like PBES2 [RFC8018] need to be used for that type of secret.

一般的なKDF(鍵導出関数)は、最初のタイプの秘密と非常にうまく機能し、第二のタイプの秘密にはかなりうまく対応できますが、最後のタイプの秘密には一般的にうまく対応できません。 このセクションのいずれのKDFも、パスワードに使用されるような秘密のタイプに対応するように設計されていません。 PBES2のような機能は、そのような秘密のタイプに使用する必要があります。

The same KDF can be set up to deal with the first two types of secrets in a different way. The KDF defined in Section 11.1 is such a function. This is reflected in the set of algorithms defined for the HMAC-based Extract-and-Expand Key Derivation Function (HKDF).

同じKDFは、異なる方式で最初の2つのタイプの秘密を処理するために設定できます。セクション11.1で定義されたKDFはそのような関数です。これは、HMACベースの抽出拡張キー導出関数(HKDF)のために定義されたアルゴリズムのセットに反映されています。

When using KDFs, one component that is included is context information. Context information is used to allow for different keying information to be derived from the same secret. The use of context-based keying material is considered to be a good security practice.

KDF を使用する際、含まれるコンポーネントの1つはコンテキスト情報です。コンテキスト情報は、同じ秘密から異なる鍵情報を派生させるために使用されます。コンテキストに基づく鍵材料の使用は、良いセキュリティーの実践とされています。

This document defines a single context structure and a single KDF. These elements are used for all of the recipient algorithms defined in this document that require a KDF process. These algorithms are defined in Sections 12.1.2, 12.4.1, and 12.5.1.

このドキュメントは、単一のコンテキスト構造と単一のKDFを定義します。これらの要素は、KDFプロセスが必要なこのドキュメントで定義されたすべての受信者アルゴリズムに使用されます。これらのアルゴリズムは、セクション12.1.2、12.4.1、および12.5.1で定義されています。

The HKDF key derivation algorithm is defined in [RFC5869].

HKDFキー派生アルゴリズムは、[RFC5869]で定義されています。

The HKDF algorithm takes these inputs:

HKDFアルゴリズムは、次の入力を受け取ります:

   secret -- a shared value that is secret.  Secrets may be either
   previously shared or derived from operations like a Diffie-Hellman
   (DH) key agreement.

   secret -- 秘密の共有値です。秘密は事前に共有されるか、Diffie-Hellman(DH)鍵合意などの操作から派生することがあります。

   salt -- an optional value that is used to change the generation
   process.  The salt value can be either public or private.  If the
   salt is public and carried in the message, then the 'salt'
   algorithm header parameter defined in Table 13 is used.  While
   [RFC5869] suggests that the length of the salt be the same as the
   length of the underlying hash value, any amount of salt will
   improve the security as different key values will be generated.
   This parameter is protected by being included in the key
   computation and does not need to be separately authenticated.  The
   salt value does not need to be unique for every message sent.

   salt -- 生成プロセスを変更するために使用されるオプションの値です。ソルト値は公開されるか、非公開にすることができます。ソルトがメッセージに含まれる公開の場合、表13に定義されている"ソルト"アルゴリズムヘッダーパラメーターが使用されます。[RFC5869]は、ソルトの長さは基になるハッシュ値の長さと同じであることを示唆していますが、ソルトの量が増えると、異なるキー値が生成されるため、セキュリティーが向上します。このパラメーターは、キーの計算に含まれており、別途認証する必要はありません。ソルト値は、送信されるメッセージごとに一意である必要はありません。

   length -- the number of bytes of output that need to be generated.

   長さ -- 生成する必要のある出力のバイト数です。

   context information -- Information that describes the context in
   which the resulting value will be used.  Making this information
   specific to the context in which the material is going to be used
   ensures that the resulting material will always be tied to that
   usage.  The context structure defined in Section 11.2 is used by
   the KDFs in this document.

   context information -- 使用される値の文脈を説明する情報です。この情報を使用する材料の文脈に特化させることで、結果の材料が常にその使用に関連付けられます。この文書のKDF(鍵導出関数)で定義されている文脈の構造は、セクション11.2で使用します。

   PRF -- The underlying pseudorandom function to be used in the HKDF
   algorithm.  The PRF is encoded into the HKDF algorithm selection.

   PRF --
   PRF -- HKDFアルゴリズムで使用される基本の擬似乱数関数。

HKDF is defined to use HMAC as the underlying PRF. However, it is possible to use other functions in the same construct to provide a different KDF that is more appropriate in the constrained world. Specifically, one can use AES-CBC-MAC as the PRF for the expand step, but not for the extract step. When using a good random shared secret of the correct length, the extract step can be skipped. For the AES algorithm versions, the extract step is always skipped.

HKDFは、基のPRFとしてHMACを使用するように定義されています。ただし、制約のある世界により適した異なるKDFを提供するために、同じ構造で他の関数を使用することも可能です。具体的には、AES-CBC-MACをPRFとしてexpandステップに使用することができますが、extractステップには使用できません。適切な長さの良質なランダム共有秘密を使用する場合、extractステップはスキップできます。AESアルゴリズムのバージョンでは、必ずextractステップはスキップされます。

The extract step cannot be skipped if the secret is not uniformly random, for example, if it is the result of an ECDH key agreement step. This implies that the AES HKDF version cannot be used with ECDH. If the extract step is skipped, the 'salt' value is not used as part of the HKDF functionality.

抽出ステップは、秘密が均一なランダムでない場合にはスキップすることはできません。例えば、ECDH鍵合意ステップの結果である場合などです。これにより、AES HKDFバージョンはECDHとは使用できません。抽出ステップをスキップすると、「salt」値はHKDF機能の一部として使用されません。

The algorithms defined in this document are found in Table 12.

このドキュメントで定義されたアルゴリズムは、表12に記載されています。

Name PRF Description
HKDF SHA-256 HMAC with SHA-256 HKDF using HMAC SHA-256 as the PRF
HKDF SHA-512 HMAC with SHA-512 HKDF using HMAC SHA-512 as the PRF
HKDF AES- AES-CBC-MAC-128 HKDF using AES-MAC as the PRF
MAC-128 w/ 128-bit key
HKDF AES- AES-CBC-MAC-256 HKDF using AES-MAC as the PRF
MAC-256 w/ 256-bit key

名前 PRF 説明
HKDF SHA-256 SHA-256を用いるHMAC HKDFはPRFとしてHMAC SHA-256を使用します
HKDF SHA-512 SHA-512を用いるHMAC HKDFはPRFとしてHMAC SHA-512を使用します
HKDF AES- AES-CBC-MAC-128 HKDFはPRFとしてAES-MACを使用します
MAC-128 128ビットキー付き
HKDF AES- AES-CBC-MAC-256 HKDFはPRFとしてAES-MACを使用します
MAC-256 256ビットキー付き

                      Table 12: HKDF Algorithms

                      Table 12: HKDF アルゴリズム

Name Label Type Algorithm Description
salt -20 bstr direct+HKDF-SHA-256, direct +HKDF-SHA-512, direct+HKDF- AES-128, direct+HKDF-AES-256, ECDH-ES+HKDF-256, ECDH- ES+HKDF-512, ECDH- SS+HKDF-256, ECDH- SS+HKDF-512, ECDH-ES+A128KW, ECDH-ES+A192KW, ECDH- ES+A256KW, ECDH-SS+A128KW, ECDH-SS+A192KW, ECDH- SS+A256KW Random salt

名前 ラベル タイプ アルゴリズム 説明
salt -20 バイナリーストリング direct+HKDF-SHA-256, direct +HKDF-SHA-512, direct+HKDF- AES-128, direct+HKDF-AES-256, ECDH-ES+HKDF-256, ECDH- ES+HKDF-512, ECDH- SS+HKDF-256, ECDH- SS+HKDF-512, ECDH-ES+A128KW, ECDH-ES+A192KW, ECDH- ES+A256KW, ECDH-SS+A128KW, ECDH-SS+A192KW, ECDH- SS+A256KW ランダムなsalt

                 Table 13: HKDF Algorithm Parameters

              テーブル13:HKDFアルゴリズムパラメーター

The context information structure is used to ensure that the derived keying material is "bound" to the context of the transaction. The context information structure used here is based on that defined in [SP800-56A]. By using CBOR for the encoding of the context information structure, we automatically get the same type and length separation of fields that is obtained by the use of ASN.1. This means that there is no need to encode the lengths for the base elements, as it is done by the encoding used in JOSE (Section 4.6.2 of [RFC7518]).

コンテキスト情報構造は、派生キー素材がトランザクションのコンテキストに「バインド」されることを保証するために使用されます。ここで使用されるコンテキスト情報構造は、[SP800-56A]で定義されています。コンテキスト情報構造のエンコーディングにCBORを使用することで、ASN.1の使用によって得られるフィールドの型と長さの分離と同じものを自動的に得ることができます。これにより、基本要素の長さをエンコードする必要がなくなります。JOSEで使用されているエンコーディングと同様に、([RFC7518]のSection 4.6.2)。

The context information structure refers to PartyU and PartyV as the two parties that are doing the key derivation. Unless the application protocol defines differently, we assign PartyU to the entity that is creating the message and PartyV to the entity that is receiving the message. By doing this association, different keys will be derived for each direction as the context information is different in each direction.

コンテキスト情報構造は、キー導出を行っている2つのパーティであるPartyUとPartyVを参照しています。アプリケーションプロトコルが異なる定義を行っていない限り、メッセージを作成しているエンティティにPartyUを割り当て、メッセージを受信しているエンティティにPartyVを割り当てます。この関連付けを行うことで、コンテキスト情報が各方向で異なるため、異なるキーが各方向に導出されます。

The context structure is built from information that is known to both entities. This information can be obtained from a variety of sources:

コンテキスト構造は、両者に共通の情報に基づいて構築されます。この情報は、さまざまなソースから取得できます。

  • Fields can be defined by the application. This is commonly used to assign fixed names to parties, but it can be used for other items such as nonces.
  • アプリケーションによってフィールドを定義することができます。これは通常、当事者に固定の名前を割り当てるために使用されますが、ノンスなどの他のアイテムにも使用することができます。
  • Fields can be defined by usage of the output. Examples of this are the algorithm and key size that are being generated.
  • フィールドは出力の使用によって定義することができます。生成されているアルゴリズムや鍵のサイズの例がこれに該当します。
  • Fields can be defined by parameters from the message. We define a set of parameters in Table 14 that can be used to carry the values associated with the context structure. Examples of this are identities and nonce values. These parameters are designed to be placed in the unprotected bucket of the recipient structure; they do not need to be in the protected bucket since they already are included in the cryptographic computation by virtue of being included in the context structure.
  • メッセージからパラメーターによってフィールドを定義することができます。表14に、コンテキスト構造に関連する値を運ぶために使用できるパラメーターのセットを定義します。アイデンティティや nonce の値などがこれにあたります。これらのパラメーターは、受信者構造の保護されていないバケットに配置することが想定されています。これらは保護されたバケットに含める必要はありません。なぜなら、コンテキスト構造に含まれることから、すでに暗号計算に含まれているからです。

Name Label Type Algorithm Description
PartyU -21 bstr direct+HKDF-SHA-256, Party U
identity direct+HKDF-SHA-512, direct+HKDF-AES-128, direct+HKDF-AES-256, ECDH-ES+HKDF-256, ECDH- ES+HKDF-512, ECDH- SS+HKDF-256, ECDH- SS+HKDF-512, ECDH- ES+A128KW, ECDH- ES+A192KW, ECDH- ES+A256KW, ECDH- SS+A128KW, ECDH- SS+A192KW, ECDH-SS+A256KW identity information
PartyU -22 bstr direct+HKDF-SHA-256, Party U
nonce / int direct+HKDF-SHA-512, direct+HKDF-AES-128, direct+HKDF-AES-256, ECDH-ES+HKDF-256, ECDH- ES+HKDF-512, ECDH- SS+HKDF-256, ECDH- SS+HKDF-512, ECDH- ES+A128KW, ECDH- ES+A192KW, ECDH- ES+A256KW, ECDH- SS+A128KW, ECDH- SS+A192KW, ECDH-SS+A256KW provided nonce
PartyU -23 bstr direct+HKDF-SHA-256, Party U
other direct+HKDF-SHA-512, direct+HKDF-AES-128, direct+HKDF-AES-256, ECDH-ES+HKDF-256, ECDH- ES+HKDF-512, ECDH- SS+HKDF-256, ECDH- SS+HKDF-512, ECDH- ES+A128KW, ECDH- ES+A192KW, ECDH- ES+A256KW, ECDH- SS+A128KW, ECDH- SS+A192KW, ECDH-SS+A256KW other provided information
PartyV -24 bstr direct+HKDF-SHA-256, Party V
identity direct+HKDF-SHA-512, direct+HKDF-AES-128, direct+HKDF-AES-256, ECDH-ES+HKDF-256, ECDH- ES+HKDF-512, ECDH- SS+HKDF-256, ECDH- SS+HKDF-512, ECDH- ES+A128KW, ECDH- ES+A192KW, ECDH- ES+A256KW, ECDH- SS+A128KW, ECDH- SS+A192KW, ECDH-SS+A256KW identity information
PartyV -25 bstr direct+HKDF-SHA-256, Party V
nonce / int direct+HKDF-SHA-512, direct+HKDF-AES-128, direct+HKDF-AES-256, ECDH-ES+HKDF-256, ECDH- ES+HKDF-512, ECDH- SS+HKDF-256, ECDH- SS+HKDF-512, ECDH- ES+A128KW, ECDH- ES+A192KW, ECDH- ES+A256KW, ECDH- SS+A128KW, ECDH- SS+A192KW, ECDH-SS+A256KW provided nonce
PartyV -26 bstr direct+HKDF-SHA-256, Party V
other direct+HKDF-SHA-512, direct+HKDF-AES-128, direct+HKDF-AES-256, ECDH-ES+HKDF-256, ECDH- ES+HKDF-512, ECDH- SS+HKDF-256, ECDH- SS+HKDF-512, ECDH- ES+A128KW, ECDH- ES+A192KW, ECDH- ES+A256KW, ECDH- SS+A128KW, ECDH- SS+A192KW, ECDH-SS+A256KW other provided information

名前 ラベル タイプ アルゴリズム 説明
PartyU -21 bstr direct+HKDF-SHA-256, Party U
identity direct+HKDF-SHA-512, direct+HKDF-AES-128, direct+HKDF-AES-256, ECDH-ES+HKDF-256, ECDH-ES+HKDF-512, ECDH-SS+HKDF-256, ECDH-SS+HKDF-512, ECDH-ES+A128KW, ECDH-ES+A192KW, ECDH-ES+A256KW, ECDH-SS+A128KW, ECDH-SS+A192KW, ECDH-SS+A256KW identity情報
PartyU -22 bstr direct+HKDF-SHA-256, Party U
nonce / int direct+HKDF-SHA-512, direct+HKDF-AES-128, direct+HKDF-AES-256, ECDH-ES+HKDF-256, ECDH-ES+HKDF-512, ECDH-SS+HKDF-256, ECDH-SS+HKDF-512, ECDH-ES+A128KW, ECDH-ES+A192KW, ECDH-ES+A256KW, ECDH-SS+A128KW, ECDH-SS+A192KW, ECDH-SS+A256KW 提供されたnonce
PartyU -23 bstr direct+HKDF-SHA-256, Party U
other direct+HKDF-SHA-512, direct+HKDF-AES-128, direct+HKDF-AES-256, ECDH-ES+HKDF-256, ECDH-ES+HKDF-512, ECDH-SS+HKDF-256, ECDH-SS+HKDF-512, ECDH-ES+A128KW, ECDH-ES+A192KW, ECDH-ES+A256KW, ECDH-SS+A128KW, ECDH-SS+A192KW, ECDH-SS+A256KW 提供されたその他の情報
PartyV -24 bstr direct+HKDF-SHA-256, Party V
identity direct+HKDF-SHA-512, direct+HKDF-AES-128, direct+HKDF-AES-256, ECDH-ES+HKDF-256, ECDH-ES+HKDF-512, ECDH-SS+HKDF-256, ECDH-SS+HKDF-512, ECDH-ES+A128KW, ECDH-ES+A192KW, ECDH-ES+A256KW, ECDH-SS+A128KW, ECDH-SS+A192KW, ECDH-SS+A256KW identity情報
PartyV -25 bstr direct+HKDF-SHA-256, Party V
nonce / int direct+HKDF-SHA-512, direct+HKDF-AES-128, direct+HKDF-AES-256, ECDH-ES+HKDF-256, ECDH-ES+HKDF-512, ECDH-SS+HKDF-256, ECDH-SS+HKDF-512, ECDH-ES+A128KW, ECDH-ES+A192KW, ECDH-ES+A256KW, ECDH-SS+A128KW, ECDH-SS+A192KW, ECDH-SS+A256KW 提供されたnonce
PartyV -26 bstr direct+HKDF-SHA-256, Party V
other direct+HKDF-SHA-512, direct+HKDF-AES-128, direct+HKDF-AES-256, ECDH-ES+HKDF-256, ECDH-ES+HKDF-512, ECDH-SS+HKDF-256, ECDH-SS+HKDF-512, ECDH-ES+A128KW, ECDH-ES+A192KW, ECDH-ES+A256KW, ECDH-SS+A128KW, ECDH-SS+A192KW, ECDH-SS+A256KW 提供されたその他の情報

               Table 14: Context Algorithm Parameters

               テーブル14: コンテキストアルゴリズムのパラメーター

We define a CBOR object to hold the context information. This object is referred to as COSE_KDF_Context. The object is based on a CBOR array type. The fields in the array are:

私たちは、コンテキスト情報を保持するためのCBORオブジェクトを定義します。このオブジェクトはCOSE_KDF_Contextと呼ばれます。このオブジェクトはCBOR配列型を基にしています。配列内のフィールドは以下の通りです:

AlgorithmID: This field indicates the algorithm for which the key material will be used. This normally is either a key wrap algorithm identifier or a content encryption algorithm identifier. The values are from the "COSE Algorithms" registry. This field is required to be present. The field exists in the context information so that if the same environment is used for different algorithms, then completely different keys will be generated for each of those algorithms. This practice means if algorithm A is broken and thus is easier to find, the key derived for algorithm B will not be the same as the key derived for algorithm A.

AlgorithmID(アルゴリズムID):このフィールドは、キーマテリアルが使用されるアルゴリズムを示します。通常、これはキーラップアルゴリズム識別子またはコンテンツ暗号化アルゴリズム識別子のいずれかです。値は「COSE Algorithms(COSEアルゴリズム)」レジストリから取得されます。このフィールドは存在する必要があります。同じ環境で異なるアルゴリズムに使用される場合、各アルゴリズムごとに完全に異なるキーが生成されるため、このフィールドはコンテキスト情報に存在します。この実践により、アルゴリズムAが破損している場合、より容易に発見できるため、アルゴリズムBのために派生したキーはアルゴリズムAのために派生したキーとは異なります。

PartyUInfo: This field holds information about party U. The PartyUInfo is encoded as a CBOR array. The elements of PartyUInfo are encoded in the order presented. The elements of the PartyUInfo array are:

PartyUInfo:このフィールドには、パーティUに関する情報が格納されます。PartyUInfoはCBOR配列としてエンコードされます。PartyUInfoの要素は提示された順序でエンコードされます。PartyUInfo配列の要素は次の通りです:

   identity:  This contains the identity information for party U.
      The identities can be assigned in one of two manners.  First, a
      protocol can assign identities based on roles.  For example,
      the roles of "client" and "server" may be assigned to different
      entities in the protocol.  Each entity would then use the
      correct label for the data they send or receive.  The second
      way for a protocol to assign identities is to use a name based
      on a naming system (i.e., DNS, X.509 names).

   identity: パーティUの識別情報を含みます。
    識別情報は2つの方法のいずれかで割り当てることができます。
    第一に、プロトコルはロールに基づいて識別子を割り当てることができます。
    たとえば、"クライアント"と"サーバー"の役割は、プロトコルの異なるエンティティに割り当てることができます。
    それぞれのエンティティは、送信または受信するデータに適切なラベルを使用します。
    プロトコルが識別子を割り当てる第二の方法は、名前ベースのシステム(例:DNS、X.509名)を使用する方法です。

      We define an algorithm parameter 'PartyU identity' that can be
      used to carry identity information in the message.  However,
      identity information is often known as part of the protocol and
      can thus be inferred rather than made explicit.  If identity
      information is carried in the message, applications SHOULD have
      a way of validating the supplied identity information.  The
      identity information does not need to be specified and is set
      to nil in that case.

      私たちは、メッセージ内で身元情報を伝達するために使用される 'パーティUの身元'アルゴリズムパラメーターを定義します。しかし、身元情報はプロトコルの一部としてしばしば知られており、明示的にではなく推測されることがあります。メッセージ内で身元情報が伝えられる場合、アプリケーションは提供された身元情報を検証する方法を持つべきです。身元情報は指定する必要はなく、その場合にはnilに設定されます。

   nonce:  This contains a nonce value.  The nonce can either be
      implicit from the protocol or be carried as a value in the
      unprotected headers.

   nonce:  これにはノンス値が含まれています。ノンスは、プロトコルから暗黙的に取得されるか、未保護のヘッダー内の値として運ばれることがあります。

      We define an algorithm parameter 'PartyU nonce' that can be
      used to carry this value in the message; however, the nonce
      value could be determined by the application and the value
      determined from elsewhere.

      この値をメッセージで伝えるために使用できる「PartyUのnonce」というアルゴリズムパラメーターを定義しますが、nonceの値はアプリケーションまたは他の場所で決定される可能性があります。

      This option does not need to be specified and is set to nil in
      that case.

      このオプションは明示する必要はありません。その場合は「nil」に設定されます。

   other:  This contains other information that is defined by the
      protocol.  This option does not need to be specified and is set
      to nil in that case.

   other:  この項目には、プロトコルによって定義された他の情報が含まれています。このオプションは指定する必要はなく、その場合にはnilに設定されます。

PartyVInfo: This field holds information about party V. The content of the structure is the same as for the PartyUInfo but for party V.

PartyVInfo:このフィールドはパーティーVに関する情報を保持します。この構造体の内容は、PartyUInfoと同じですが、パーティーV用です。

SuppPubInfo: This field contains public information that is mutually known to both parties.

SuppPubInfo:このフィールドには、双方の当事者に共有されている公開情報が含まれています。

   keyDataLength:  This is set to the number of bits of the desired
      output value.  This practice means if algorithm A can use two
      different key lengths, the key derived for longer key size will
      not contain the key for shorter key size as a prefix.

   keyDataLength:  これは望ましい出力値のビット数に設定されます。この規則により、もしアルゴリズムAが2つの異なるキー長を使用できる場合、より長いキーサイズの派生キーは、短いキーサイズのキーを接頭辞として含んでいないことを意味します。

   protected:  This field contains the protected parameter field.  If
      there are no elements in the protected field, then use a zero-
      length bstr.

   :  もしprotectedフィールドに要素がない場合、ゼロ長のbstrを使用してください。

   other:  This field is for free form data defined by the
      application.  An example is that an application could define
      two different strings to be placed here to generate different
      keys for a data stream versus a control stream.  This field is
      optional and will only be present if the application defines a
      structure for this information.  Applications that define this
      SHOULD use CBOR to encode the data so that types and lengths
      are correctly included.

   other: このフィールドは、アプリケーションによって定義された自由形式のデータを表します。例として、アプリケーションはここに配置するために異なる2つの文字列を定義し、データストリームと制御ストリームで異なるキーを生成することができます。このフィールドはオプションであり、アプリケーションがこの情報のための構造を定義している場合にのみ存在します。このフィールドを定義するアプリケーションは、データのエンコードにCBORを使用して、型と長さが正しく含まれるようにすることを推奨します。

SuppPrivInfo: This field contains private information that is mutually known private information. An example of this information would be a preexisting shared secret. (This could, for example, be used in combination with an ECDH key agreement to provide a secondary proof of identity.) The field is optional and will only be present if the application defines a structure for this information. Applications that define this SHOULD use CBOR to encode the data so that types and lengths are correctly included.

SuppPrivInfo: This field contains private information that is mutually known private information. An example of this information would be a preexisting shared secret. (This could, for example, be used in combination with an ECDH key agreement to provide a secondary proof of identity.) The field is optional and will only be present if the application defines a structure for this information. Applications that define this SHOULD use CBOR to encode the data so that types and lengths are correctly included.

The following CDDL fragment corresponds to the text above.

次のCDDLフラグメントは、上記のテキストに対応します。

PartyInfo = ( identity : bstr / nil, nonce : bstr / int / nil, other : bstr / nil )

PartyInfo = ( identity : bstr / nil, nonce : bstr / int / nil, other : bstr / nil ) PartyInfo =(identity:bstr / nil、nonce:bstr / int / nil、other:bstr / nil)

COSE_KDF_Context = [ AlgorithmID : int / tstr, PartyUInfo : [ PartyInfo ], PartyVInfo : [ PartyInfo ], SuppPubInfo : [ keyDataLength : uint, protected : empty_or_serialized_map, ? other : bstr ], ? SuppPrivInfo : bstr ]

COSE_KDF_Context = [ AlgorithmID : int / tstr, PartyUInfo : [ PartyInfo ], PartyVInfo : [ PartyInfo ], SuppPubInfo : [ keyDataLength : uint, protected : empty_or_serialized_map, ? other : bstr ], ? SuppPrivInfo : bstr ] COSE_KDF_Context = [ AlgorithmID : int / tstr, PartyUInfo : [ PartyInfo ], PartyVInfo : [ PartyInfo ], SuppPubInfo : [ keyDataLength : uint, protected : empty_or_serialized_map, ? other : bstr ], ? SuppPrivInfo : bstr ] COSE_KDF_Context = [ AlgorithmID : int / tstr, PartyUInfo : [ PartyInfo ], PartyVInfo : [ PartyInfo ], SuppPubInfo : [ keyDataLength : uint, protected : empty_or_serialized_map, ? other : bstr ], ? SuppPrivInfo : bstr ]

Content key distribution methods (recipient algorithms) can be defined into a number of different classes. COSE has the ability to support many classes of recipient algorithms. In this section, a number of classes are listed, and then a set of algorithms are specified for each of the classes. The names of the recipient algorithm classes used here are the same as those defined in [RFC7516]. Other specifications use different terms for the recipient algorithm classes or do not support some of the recipient algorithm classes.

受信者アルゴリズムのクラス(内容キー配布方法)は、さまざまなクラスに定義することができます。COSEは、多くの受信者アルゴリズムのクラスをサポートする能力を持っています。このセクションでは、いくつかのクラスがリストされ、それぞれのクラスに対して一連のアルゴリズムが指定されます。ここで使用される受信者アルゴリズムクラスの名前は、[RFC7516]で定義されているものと同じです。他の仕様では、受信者アルゴリズムクラスに対して異なる用語を使用するか、一部の受信者アルゴリズムクラスをサポートしていない場合があります。

The direct encryption class algorithms share a secret between the sender and the recipient that is used either directly or after manipulation as the CEK. When direct encryption mode is used, it MUST be the only mode used on the message.

直接暗号化クラスのアルゴリズムは、送信者と受信者の間で共有される秘密を、CEKとして直接または変更後に使用します。直接暗号化モードが使用される場合、そのモードはメッセージでしなければなりません(MUST)

The COSE_Recipient structure for the recipient is organized as follows:

受信者に対するCOSE_Recipient構造は、以下のように構成されます:

  • The 'protected' field MUST be a zero-length item unless it is used in the computation of the content key.
  • ``「protected」 フィールドは、コンテンツキーの計算に使用されない限り、長さゼロのアイテムでなければなりません。
  • The 'alg' parameter MUST be present.
  • 'alg'パラメーターは必ず存在しなければなりません(MUST)。
  • A parameter identifying the shared secret SHOULD be present.
  • 共有秘密を識別するパラメーターが存在するべきです(SHOULD)。
  • The 'ciphertext' field MUST be a zero-length item.
  • 「'ciphertext'フィールドは長さゼロのアイテムでなければなりません(MUST)」
  • The 'recipients' field MUST be absent.
  • 「recipients(受信者)」フィールドは存在してはなりません。

This recipient algorithm is the simplest; the identified key is directly used as the key for the next layer down in the message. There are no algorithm parameters defined for this algorithm. The algorithm identifier value is assigned in Table 15.

この受信者アルゴリズムは最も簡単なものです。特定されたキーは、メッセージの下位レイヤーで直接使用されるキーとして使用されます。このアルゴリズムには定義されたアルゴリズムパラメーターはありません。アルゴリズム識別子の値は、テーブル15で割り当てられます。

When this algorithm is used, the protected field MUST be zero length. The key type MUST be 'Symmetric'.

このアルゴリズムを使用する場合、保護されたフィールドは長さゼロでしなければなりません(MUST)。キータイプはSymmetricなければなりません(MUST)

Name Value Description
direct -6 Direct use of CEK

                        Table 15: Direct Key

                        表15: 直接キー

This recipient algorithm has several potential problems that need to be considered:

この受信者アルゴリズムには、考慮すべきいくつかの潜在的な問題があります。

  • These keys need to have some method to be regularly updated over time. All of the content encryption algorithms specified in this document have limits on how many times a key can be used without significant loss of security.
  • これらのキーは、時間の経過とともに定期的に更新される方法を持っている必要があります。このドキュメントで指定されたすべてのコンテンツ暗号化アルゴリズムは、キーが使用される回数に制限があり、それを超えるとセキュリティーの大きな損失が発生します。
  • These keys need to be dedicated to a single algorithm. There have been a number of attacks developed over time when a single key is used for multiple different algorithms. One example of this is the use of a single key for both the CBC encryption mode and the CBC-MAC authentication mode.
  • これらのキーは、単一のアルゴリズムに割り当てる必要があります。単一のキーが複数の異なるアルゴリズムに使用される場合、時間の経過とともに数多くの攻撃が開発されてきました。これの一例としては、CBC暗号モードとCBC-MAC認証モードの両方に単一のキーを使用することが挙げられます。
  • Breaking one message means all messages are broken. If an adversary succeeds in determining the key for a single message, then the key for all messages is also determined.
  • Breaking one message means all messages are broken. If an adversary succeeds in determining the key for a single message, then the key for all messages is also determined. 1つのメッセージを破ると、すべてのメッセージが壊れます。もし敵が1つのメッセージの鍵を特定できれば、すべてのメッセージの鍵も特定されます。

These recipient algorithms take a common shared secret between the two parties and applies the HKDF function (Section 11.1), using the context structure defined in Section 11.2 to transform the shared secret into the CEK. The 'protected' field can be of non-zero length. Either the 'salt' parameter of HKDF or the 'PartyU nonce' parameter of the context structure MUST be present. The salt/nonce parameter can be generated either randomly or deterministically. The requirement is that it be a unique value for the shared secret in question.

These recipient algorithms take a common shared secret between the two parties and applies the HKDF function (Section 11.1), using the context structure defined in Section 11.2 to transform the shared secret into the CEK. The 'protected' field can be of non-zero length. Either the 'salt' parameter of HKDF or the 'PartyU nonce' parameter of the context structure MUST be present. The salt/nonce parameter can be generated either randomly or deterministically. The requirement is that it be a unique value for the shared secret in question.

If the salt/nonce value is generated randomly, then it is suggested that the length of the random value be the same length as the hash function underlying HKDF. While there is no way to guarantee that it will be unique, there is a high probability that it will be unique. If the salt/nonce value is generated deterministically, it can be guaranteed to be unique, and thus there is no length requirement.

もしソルト/ナンス値がランダムに生成される場合は、そのランダム値の長さがHKDFの基礎となるハッシュ関数と同じであることが推奨されます。ユニークであることを保証する方法はありませんが、高い確率でユニークであると考えられます。ソルト/ナンス値が決定論的に生成される場合は、ユニークであることが保証されるため、長さの要件はありません。

A new IV must be used for each message if the same key is used. The IV can be modified in a predictable manner, a random manner, or an unpredictable manner (i.e., encrypting a counter).

同じ鍵を使用する場合、各メッセージに新しい初期化ベクトル(IV)を使用する必要があります。 IVは予測可能な方法、ランダムな方法、または予測できない方法(すなわち、カウンタを暗号化する)で変更することができます。

The IV used for a key can also be generated from the same HKDF functionality as the key is generated. If HKDF is used for generating the IV, the algorithm identifier is set to "IV- GENERATION".

キーに使用されるIVは、キーが生成されるのと同じHKDF機能から生成することもできます。IVを生成するためにHKDFが使用される場合、アルゴリズム識別子は「IV-GENERATION」に設定されます。

When these algorithms are used, the key type MUST be 'symmetric'.

これらのアルゴリズムが使用される場合、キータイプは「対称」であるしなければなりません(MUST)

The set of algorithms defined in this document can be found in Table 16.

この文書で定義されているアルゴリズムのセットは、テーブル16に記載されています。

Name Value KDF Description
direct+HKDF-SHA-256 -10 HKDF SHA-256 Shared secret w/ HKDF and SHA-256
direct+HKDF-SHA-512 -11 HKDF SHA-512 Shared secret w/ HKDF and SHA-512
direct+HKDF-AES-128 -12 HKDF AES- MAC-128 Shared secret w/ AES- MAC 128-bit key
direct+HKDF-AES-256 -13 HKDF AES- MAC-256 Shared secret w/ AES- MAC 256-bit key

名前 KDF 説明
direct+HKDF-SHA-256 -10 HKDF SHA-256 HKDFとSHA-256で共有秘密情報を作成
direct+HKDF-SHA-512 -11 HKDF SHA-512 HKDFとSHA-512で共有秘密情報を作成
direct+HKDF-AES-128 -12 HKDF AES- MAC-128 AES- MAC 128ビット鍵を使用して共有秘密情報を作成
direct+HKDF-AES-256 -13 HKDF AES- MAC-256 AES- MAC 256ビット鍵を使用して共有秘密情報を作成

                    Table 16: Direct Key with KDF

                    テーブル16:KDFを使用した直接鍵

When using a COSE key for this algorithm, the following checks are made:

このアルゴリズムにCOSEキーを使用する場合、次のチェックが行われます:しなければなりません(MUST)

  • The 'kty' field MUST be present, and it MUST be 'Symmetric'.
  • 「kty」フィールドはしなければなりません(MUST)、また、「Symmetric」であること要求されています(REQUIRED)
  • If the 'alg' field is present, it MUST match the algorithm being used.
  • algフィールドが存在する場合、使用されているアルゴリズムと一致しなければなりません(MUST)。
  • If the 'key_ops' field is present, it MUST include 'deriveKey' or 'deriveBits'.
  • もし 'key_ops' フィールドが存在する場合、必ず 'deriveKey' または 'deriveBits' を含まなければなりません(MUST)。

The shared secret needs to have some method to be regularly updated over time. The shared secret forms the basis of trust. Although not used directly, it should still be subject to scheduled rotation.

共有秘密は、時間の経過とともに定期的に更新される手段を持つ必要があります。共有秘密は信頼の基盤となります。直接使用されない場合でも、定期的なローテーションの対象となるべきです。

While these methods do not provide for perfect forward secrecy, as the same shared secret is used for all of the keys generated, if the key for any single message is discovered, only the message (or series of messages) using that derived key are compromised. A new key derivation step will generate a new key that requires the same amount of work to get the key.

これらの方法は完全な前方秘匿性を提供しないが、全ての生成された鍵に同じ共有秘密が使用されているため、任意の単一のメッセージの鍵が発見された場合、その導出された鍵を使用しているメッセージ(または一連のメッセージ)のみが危険にさらされる。新しい鍵導出ステップが新しい鍵を生成し、鍵を取得するのに同じ作業量が必要となる。

In key wrap mode, the CEK is randomly generated and that key is then encrypted by a shared secret between the sender and the recipient. All of the currently defined key wrap algorithms for COSE are AE algorithms. Key wrap mode is considered to be superior to direct encryption if the system has any capability for doing random key generation. This is because the shared key is used to wrap random data rather than data that has some degree of organization and may in fact be repeating the same content. The use of key wrap loses the weak data origination that is provided by the direct encryption algorithms.

キーラップモードでは、CEKはランダムに生成され、そのキーは送信者と受信者の間で共有された秘密鍵によって暗号化されます。COSEで現在定義されているすべてのキーラップアルゴリズムはAEアルゴリズムです。キーラップモードは、システムがランダムキーの生成を行う能力を持っている場合には、直接暗号化よりも優れていると考えられています。これは、共有鍵がいくらかの組織化されたデータではなく、実際に同じ内容を繰り返す可能性があるデータではなく、ランダムデータをラップするために使用されるためです。キーラップの使用により、直接暗号化アルゴリズムによって提供される弱いデータの起源が失われます。

The COSE_Encrypt structure for the recipient is organized as follows:

受信者のためのCOSE_Encrypt構造は、以下のように構成されます:

  • The 'protected' field MUST be absent if the key wrap algorithm is an AE algorithm.
  • キーラップアルゴリズムがAEアルゴリズムの場合、'protected'フィールドは存在しない必要があります。
  • The 'recipients' field is normally absent, but can be used. Applications MUST deal with a recipient field being present, not being able to decrypt that recipient is an acceptable way of dealing with it. Failing to process the message is not an acceptable way of dealing with it.
  • 「受信者(recipients)」フィールドは通常存在しませんが、使用することができます。アプリケーションは、受信者フィールドが存在する場合に対応する必要があります。その受信者を復号化できないことは、それに対処する受け入れられる方法です。メッセージの処理に失敗することは、受け入れられる方法ではありません。
  • The plaintext to be encrypted is the key from next layer down (usually the content layer).
  • 平文を暗号化するのは、通常、下位のレイヤー(通常はコンテンツレイヤー)からのキーです。
  • At a minimum, the 'unprotected' field MUST contain the 'alg' parameter and SHOULD contain a parameter identifying the shared secret.
  • 少なくとも、「unprotected」フィールドには「alg」パラメーターを含む必要があり、共有シークレットを識別するパラメーターを含むべきです。

The AES Key Wrap algorithm is defined in [RFC3394]. This algorithm uses an AES key to wrap a value that is a multiple of 64 bits. As such, it can be used to wrap a key for any of the content encryption algorithms defined in this document. The algorithm requires a single fixed parameter, the initial value. This is fixed to the value specified in Section 2.2.3.1 of [RFC3394]. There are no public parameters that vary on a per-invocation basis. The protected header field MUST be empty.

AES Key Wrapアルゴリズムは、[RFC3394]で定義されています。このアルゴリズムは、64ビットの倍数である値をラップするためにAESキーを使用します。そのため、このドキュメントで定義されているコンテンツ暗号化アルゴリズムのキーをラップするために使用することができます。このアルゴリズムには、単一の固定パラメーターである初期値が必要です。これは、[RFC3394]のSection 2.2.3.1で指定された値に固定されています。呼び出しごとに異なる公開パラメーターはありません。保護されたヘッダーフィールドは空でなければなりません(MUST)

Keys may be obtained either from a key structure or from a recipient structure. Implementations encrypting and decrypting MUST validate that the key type, key length, and algorithm are correct and appropriate for the entities involved.

キーは、キー構造または受信者構造から取得することができます。暗号化および復号化を行う実装は、キーの種別、キーの長さ、およびアルゴリズムが関係するエンティティに対して正しいか適切であることを確認する必要があります(MUST)

When using a COSE key for this algorithm, the following checks are made:

このアルゴリズムでCOSEキーを使用する場合、以下のチェックが行われます:しなければなりません(MUST)

  • The 'kty' field MUST be present, and it MUST be 'Symmetric'.
  • 「'kty'フィールドはしなければなりません(MUST)、そして『Symmetric』である必要があります。」
  • If the 'alg' field is present, it MUST match the AES Key Wrap algorithm being used.
  • 「'alg'フィールドが存在する場合、使用されているAES Key Wrapアルゴリズムと一致しなければなりません」
  • If the 'key_ops' field is present, it MUST include 'encrypt' or 'wrap key' when encrypting.
  • もし 'key_ops' フィールドが存在する場合、暗号化する際には 'encrypt' または 'wrap key' のいずれかを含まなければなりません(MUST)。
  • If the 'key_ops' field is present, it MUST include 'decrypt' or 'unwrap key' when decrypting.
  • もし「key_ops」というフィールドが存在する場合、それが「decrypt」または「unwrap key」を含んでいなければなりません(MUST)。

Name Value Key Size Description
A128KW -3 128 AES Key Wrap w/ 128-bit key
A192KW -4 192 AES Key Wrap w/ 192-bit key
A256KW -5 256 AES Key Wrap w/ 256-bit key

名前 キーサイズ 説明
A128KW -3 128 128ビットキーを使用したAESキーラップ
A192KW -4 192 192ビットキーを使用したAESキーラップ
A256KW -5 256 256ビットキーを使用したAESキーラップ

               Table 17: AES Key Wrap Algorithm Values


The shared secret needs to have some method to be regularly updated over time. The shared secret is the basis of trust.

共有秘密は、時間の経過に伴って定期的に更新される方法が必要です。共有秘密は信頼の基盤です。

Key transport mode is also called key encryption mode in some standards. Key transport mode differs from key wrap mode in that it uses an asymmetric encryption algorithm rather than a symmetric encryption algorithm to protect the key. This document does not define any key transport mode algorithms.

鍵伝送モードは、一部の規格では鍵暗号化モードとも呼ばれています。鍵伝送モードは、鍵を保護するために対称暗号化アルゴリズムではなく、非対称暗号化アルゴリズムを使用する点で鍵包装モードと異なります。このドキュメントでは、鍵伝送モードのアルゴリズムを定義していません。

When using a key transport algorithm, the COSE_Encrypt structure for the recipient is organized as follows:

キー転送アルゴリズムを使用する場合、受信者のためのCOSE_Encrypt構造体は、次のように編成されます:

  • The 'protected' field MUST be absent.
  • 「'protected' フィールドは存在してはなりません(MUST NOT)」
  • The plaintext to be encrypted is the key from the next layer down (usually the content layer).
  • 平文を暗号化するための鍵は、通常、下位の次のレイヤー(通常はコンテンツ層)から取得されます。
  • At a minimum, the 'unprotected' field MUST contain the 'alg' parameter and SHOULD contain a parameter identifying the asymmetric key.
  • 少なくとも、「unprotected」フィールドには「alg」パラメーターが含まれている必要があり、非対称キーを識別するパラメーターが含まれるべきです。

The 'direct key agreement' class of recipient algorithms uses a key agreement method to create a shared secret. A KDF is then applied to the shared secret to derive a key to be used in protecting the data. This key is normally used as a CEK or MAC key, but could be used for other purposes if more than two layers are in use (see Appendix B).

受信者アルゴリズムの「直接鍵合意」クラスは、共有秘密鍵を作成するために鍵合意手法を使用します。その後、共有秘密鍵にKDFを適用して、データの保護に使用される鍵を派生させます。この鍵は通常、CEKまたはMAC鍵として使用されますが、複数のレイヤーが使用されている場合には他の目的にも使用できます(付録Bを参照)。

The most commonly used key agreement algorithm is Diffie-Hellman, but other variants exist. Since COSE is designed for a store and forward environment rather than an online environment, many of the DH variants cannot be used as the receiver of the message cannot provide any dynamic key material. One side effect of this is that perfect forward secrecy (see [RFC4949]) is not achievable. A static key will always be used for the receiver of the COSE object.

最も一般的に使用される鍵合意アルゴリズムはディフィー・ヘルマンですが、他のバリアントも存在します。COSEはオンライン環境ではなく、ストアアンドフォワード環境を対象として設計されているため、DHの多くのバリアントはメッセージの受信者が動的鍵素材を提供できないため使用することができません。これの副作用の1つは、完全な順次送信保証(詳細はRFC4949を参照してください)が実現できないということです。COSEオブジェクトの受信者には常に静的鍵が使用されます。

Two variants of DH that are supported are:

サポートされているDHの2つのバリアントは次のとおりです:

   Ephemeral-Static (ES) DH: where the sender of the message creates
   a one-time DH key and uses a static key for the recipient.  The
   use of the ephemeral sender key means that no additional random
   input is needed as this is randomly generated for each message.

    一時的静的(Ephemeral-Static, ES) DH: 送信者がメッセージのために一回だけDH鍵を生成し、受信者に対して静的鍵を使用します。一時的送信者鍵の使用により、追加のランダム入力は不要であり、各メッセージごとにランダムに生成されます。

   Static-Static DH: where a static key is used for both the sender
   and the recipient.  The use of static keys allows for the
   recipient to get a weak version of data origination for the
   message.  When static-static key agreement is used, then some
   piece of unique data for the KDF is required to ensure that a
   different key is created for each message.

   Static-Static DH: 送信者と受信者の両方で静的キーが使用される場合。静的キーの使用により、受信者はメッセージのデータの起源の弱いバージョンを取得できます。静的-静的鍵合意が使用される場合、メッセージごとに異なるキーが作成されることを保証するために、KDFの一部としてユニークなデータの一部が必要です。

When direct key agreement mode is used, there MUST be only one recipient in the message. This method creates the key directly, and that makes it difficult to mix with additional recipients. If multiple recipients are needed, then the version with key wrap needs to be used.

直接鍵合意モードを使用する場合、メッセージにはしなければなりません(MUST)、1つの受信者のみが存在する必要があります。この方法は鍵を直接生成するため、他の受信者との組み合わせが難しくなります。複数の受信者が必要な場合は、鍵包装を使用するバージョンを使う必要があります。

The COSE_Encrypt structure for the recipient is organized as follows:

受信者のためのCOSE_Encrypt構造は、以下のように構成されます:

  • At a minimum, headers MUST contain the 'alg' parameter and SHOULD contain a parameter identifying the recipient's asymmetric key.
  • 少なくとも、ヘッダーは 'alg' パラメーターを含み、受信者の非対称キーを識別するパラメーターを含むべきです。
  • The headers SHOULD identify the sender's key for the static-static versions and MUST contain the sender's ephemeral key for the ephemeral-static versions.
  • ヘッダーは、静的-静的バージョンでは送信者のキーを識別するべきです。また、一時的-静的バージョンでは送信者の一時的なキーを含む必要があります。

The mathematics for ECDH can be found in [RFC6090]. In this document, the algorithm is extended to be used with the two curves defined in [RFC7748].

ECDHの数学的な詳細は、[RFC6090]に記載されています。このドキュメントでは、そのアルゴリズムを[RFC7748]で定義された2つの曲線に拡張して使用することができます。

ECDH is parameterized by the following:

ECDHは以下によってパラメーター化されます:

  • Curve Type/Curve: The curve selected controls not only the size of the shared secret, but the mathematics for computing the shared secret. The curve selected also controls how a point in the curve is represented and what happens for the identity points on the curve. In this specification, we allow for a number of different curves to be used. A set of curves are defined in Table 22. The math used to obtain the computed secret is based on the curve selected and not on the ECDH algorithm. For this reason, a new algorithm does not need to be defined for each of the curves.
  • Curve Type/Curve:選択された曲線は、共有秘密のサイズだけでなく、共有秘密の計算に使用される数学も制御します。選択された曲線はまた、曲線上の恒等点に対して何が起こり、曲線上の点の表現方法も制御します。この仕様では、複数の異なる曲線の使用を許可しています。曲線のセットは、表22で定義されています。計算された秘密を取得するために使用される数学は、選択された曲線に基づいており、ECDHアルゴリズムに基づいていません。そのため、各曲線ごとに新しいアルゴリズムを定義する必要はありません。
  • Computed Secret to Shared Secret: Once the computed secret is known, the resulting value needs to be converted to a byte string to run the KDF. The x-coordinate is used for all of the curves defined in this document. For curves X25519 and X448, the resulting value is used directly as it is a byte string of a known length. For the P-256, P-384, and P-521 curves, the x-coordinate is run through the I2OSP function defined in [RFC8017], using the same computation for n as is defined in Section 8.1.
  • 計算された秘密を共有秘密に変換する:計算された秘密がわかっている場合、生成された値はKDFを実行するためにバイト文字列に変換する必要があります。このドキュメントで定義されているすべての曲線において、x座標が使用されます。X25519とX448の曲線については、結果の値が既知の長さのバイト文字列であるため、直接使用されます。P-256、P-384、およびP-521の曲線については、x座標は[I-D.ietf-curdle-pkix]で定義されているI2OSP関数によって実行され、セクション8.1で定義されているnと同じ計算が行われます。
  • Ephemeral-Static or Static-Static: The key agreement process may be done using either a static or an ephemeral key for the sender's side. When using ephemeral keys, the sender MUST generate a new ephemeral key for every key agreement operation. The ephemeral key is placed in the 'ephemeral key' parameter and MUST be present for all algorithm identifiers that use ephemeral keys. When using static keys, the sender MUST either generate a new random value or create a unique value. For the KDFs used, this means either the 'salt' parameter for HKDF (Table 13) or the 'PartyU nonce' parameter for the context structure (Table 14) MUST be present (both can be present if desired). The value in the parameter MUST be unique for the pair of keys being used. It is acceptable to use a global counter that is incremented for every static-static operation and use the resulting value. When using static keys, the static key should be identified to the recipient. The static key can be identified either by providing the key ('static key') or by providing a key identifier for the static key ('static key id'). Both of these parameters are defined in Table 19.
  • エフェメラル-スタティックまたはスタティック-スタティック: キー合意プロセスは、送信側の静的またはエフェメラルキーのいずれかを使用して行うことができます。エフェメラルキーを使用する場合、送信側はすべてのキー合意操作ごとに新しいエフェメラルキーを生成するしなければなりません(MUST)。エフェメラルキーは「エフェメラルキー」パラメーターに配置され、エフェメラルキーを使用するすべてのアルゴリズム識別子に対して存在する必要があります(MUST)。スタティックキーを使用する場合、送信側は新しいランダム値を生成するか、ユニークな値を作成するしなければなりません(MUST)。使用されるKDFでは、これはHKDFの場合「salt」パラメーター(Table 13)またはコンテキスト構造の「PartyU nonce」パラメーター(Table 14)のいずれかが存在しなければなりません(MUST)(両方が存在する場合も望ましい)。パラメーター内の値は使用されるキーペアごとにユニークでなければなりません(MUST)。静的キーを使用する場合、静的キーを受信者に識別させる必要があります。静的キーは、キー自体(「静的キー」)または静的キーのためのキー識別子(「静的キー ID」)を提供することによって識別できます。これらのパラメーターは、Table 19で定義されています。
  • Key Derivation Algorithm: The result of an ECDH key agreement process does not provide a uniformly random secret. As such, it needs to be run through a KDF in order to produce a usable key. Processing the secret through a KDF also allows for the introduction of context material: how the key is going to be used and one-time material for static-static key agreement. All of the algorithms defined in this document use one of the HKDF algorithms defined in Section 11.1 with the context structure defined in Section 11.2.
  • 鍵派生アルゴリズム:ECDH鍵合意プロセスの結果は一様なランダムな秘密を提供しません。したがって、使用可能な鍵を生成するために、KDFを実行する必要があります。秘密をKDFで処理することで、キーの使用方法や静的-静的鍵合意のためのワンタイム素材の導入も可能となります。このドキュメントで定義されているすべてのアルゴリズムは、セクション11.1で定義されているHKDFアルゴリズムのいずれかを使用し、セクション11.2で定義されているコンテキスト構造を利用します。
  • Key Wrap Algorithm: No key wrap algorithm is used. This is represented in Table 18 as 'none'. The key size for the context structure is the content layer encryption algorithm size.
  • キーラップアルゴリズム: キーラップアルゴリズムは使用されません。これはTable 18に「なし」として表されます。コンテキスト構造のキーサイズは、コンテンツレイヤーの暗号化アルゴリズムのサイズです。

The set of direct ECDH algorithms defined in this document are found in Table 18.

このドキュメントで定義されている直接ECDHアルゴリズムのセットは、テーブル18にあります。

Name Value KDF Ephemeral- Static Key Wrap Description
ECDH-ES + -25 HKDF - yes none ECDH ES w/
HKDF-256 SHA-256 HKDF - generate key directly
ECDH-ES + -26 HKDF - yes none ECDH ES w/
HKDF-512 SHA-512 HKDF - generate key directly
ECDH-SS + -27 HKDF - no none ECDH SS w/
HKDF-256 SHA-256 HKDF - generate key directly
ECDH-SS + -28 HKDF - no none ECDH SS w/
HKDF-512 SHA-512 HKDF - generate key directly

名前 KDF 暗号型 キーラップ 説明
ECDH-ES + -25 HKDF - はい なし ECDH ES との組み合わせ
HKDF-256 SHA-256 HKDF - 鍵を直接生成
ECDH-ES + -26 HKDF - はい なし ECDH ES との組み合わせ
HKDF-512 SHA-512 HKDF - 鍵を直接生成
ECDH-SS + -27 HKDF - いいえ なし ECDH SS との組み合わせ
HKDF-256 SHA-256 HKDF - 鍵を直接生成
ECDH-SS + -28 HKDF - いいえ なし ECDH SS との組み合わせ
HKDF-512 SHA-512 HKDF - 鍵を直接生成

                   Table 18: ECDH Algorithm Values

                   テーブル 18: ECDH アルゴリズム値

Name Label Type Algorithm Description
ephemeral -1 COSE_Key ECDH-ES+HKDF-256, Ephemeral
key ECDH-ES+HKDF-512, ECDH-ES+A128KW, ECDH-ES+A192KW, ECDH-ES+A256KW public key for the sender
static -2 COSE_Key ECDH-SS+HKDF-256, Static
key ECDH-SS+HKDF-512, ECDH-SS+A128KW, ECDH-SS+A192KW, ECDH-SS+A256KW public key for the sender
static -3 bstr ECDH-SS+HKDF-256, Static
key id ECDH-SS+HKDF-512, ECDH-SS+A128KW, ECDH-SS+A192KW, ECDH-SS+A256KW public key identifier for the sender

名前 ラベル タイプ アルゴリズム 説明
ephemeral -1 COSE_Key ECDH-ES+HKDF-256, 一時的
key ECDH-ES+HKDF-512, ECDH-ES+A128KW, ECDH-ES+A192KW, ECDH-ES+A256KW 送信者の公開鍵
static -2 COSE_Key ECDH-SS+HKDF-256, 静的
key ECDH-SS+HKDF-512, ECDH-SS+A128KW, ECDH-SS+A192KW, ECDH-SS+A256KW 送信者の公開鍵
static -3 bstr ECDH-SS+HKDF-256, 静的
key id ECDH-SS+HKDF-512, ECDH-SS+A128KW, ECDH-SS+A192KW, ECDH-SS+A256KW 送信者の公開鍵識別子

                 Table 19: ECDH Algorithm Parameters

                テーブル19:ECDHアルゴリズムのパラメーター

This document defines these algorithms to be used with the curves P-256, P-384, P-521, X25519, and X448. Implementations MUST verify that the key type and curve are correct. Different curves are restricted to different key types. Implementations MUST verify that the curve and algorithm are appropriate for the entities involved.

この文書は、曲線P-256、P-384、P-521、X25519、およびX448とともに使用するためにこれらのアルゴリズムを定義しています。実装は、キータイプと曲線が正しいことをしなければなりません(MUST)。異なる曲線には異なるキータイプが制限されています。実装は、曲線とアルゴリズムが関係するエンティティに適切であることをしなければなりません(MUST)

When using a COSE key for this algorithm, the following checks are made:

このアルゴリズムでCOSEキーを使用する場合、以下のチェックが行われます:しなければなりません(MUST)

  • The 'kty' field MUST be present, and it MUST be 'EC2' or 'OKP'.
  • 「'kty'フィールドは存在しなければならず、'EC2'または'OKP'でなければなりません。」
  • If the 'alg' field is present, it MUST match the key agreement algorithm being used.
  • もし「alg」フィールドが存在する場合、それは使用されている鍵合意アルゴリズムと一致しなければなりません(MUST match)。
  • If the 'key_ops' field is present, it MUST include 'derive key' or 'derive bits' for the private key.
  • もし「key_ops」フィールドが存在する場合、その中には必ず「秘密鍵の派生(derive key)」または「ビットの派生(derive bits)」が含まれなければなりません。
  • If the 'key_ops' field is present, it MUST be empty for the public key.
  • 「key_ops」フィールドが存在する場合、公開鍵の場合は空でなければなりません(MUST)。

There is a method of checking that points provided from external entities are valid. For the 'EC2' key format, this can be done by checking that the x and y values form a point on the curve. For the 'OKP' format, there is no simple way to do point validation.

外部エンティティから提供されるポイントが有効であるかを確認する方法があります。 'EC2' キー形式の場合、x 値と y 値が曲線上のポイントを形成しているかを確認することでこれを行うことができます。 'OKP' 形式の場合、ポイントの検証を行うための簡単な方法はありません。

Consideration was given to requiring that the public keys of both entities be provided as part of the key derivation process (as recommended in Section 6.1 of [RFC7748]). This was not done as COSE is used in a store and forward format rather than in online key exchange. In order for this to be a problem, either the receiver public key has to be chosen maliciously or the sender has to be malicious. In either case, all security evaporates anyway.

鍵派生プロセスの一部として、両エンティティの公開鍵が提供されることが求められることが検討されました([RFC7748]のSection 6.1で推奨されています)。しかし、COSEはオンライン鍵交換ではなく、ストア・アンド・フォワード形式で使用されているため、これは実施されませんでした。この問題が発生するには、受信者の公開鍵が悪意を持って選択されるか、送信者が悪意を持っている必要があります。いずれの場合でも、すべてのセキュリティーは消滅します。

A proof of possession of the private key associated with the public key is recommended when a key is moved from untrusted to trusted (either by the end user or by the entity that is responsible for making trust statements on keys).

公開鍵に関連付けられた秘密鍵の所有の証明は、鍵が信頼できない場所から信頼できる場所に移動する際(エンドユーザーまたは鍵の信頼ステートメントを行うエンティティによって)、推奨されます。

Key Agreement with Key Wrap uses a randomly generated CEK. The CEK is then encrypted using a key wrap algorithm and a key derived from the shared secret computed by the key agreement algorithm. The function for this would be:

キー交換とキーラップは、ランダムに生成されたCEKを使用します。そのCEKは、キーラップアルゴリズムと、キー交換アルゴリズムによって計算される共有秘密から派生したキーを使用して暗号化されます。このための関数は次のとおりです:

encryptedKey = KeyWrap(KDF(DH-Shared, context), CEK) The COSE_Encrypt structure for the recipient is organized as follows:

encryptedKey = KeyWrap(KDF(DH-Shared, context), CEK) 受信者向けのCOSE_Encrypt構造体は、次のように構成されます:

  • The 'protected' field is fed into the KDF context structure.
  • 「'protected' フィールドは、KDF コンテキスト構造に入力されます。」
  • The plaintext to be encrypted is the key from the next layer down (usually the content layer).
  • 平文を暗号化するのは、通常、下の階層からのキー(通常はコンテンツ層)です。
  • The 'alg' parameter MUST be present in the layer.
  • レイヤーには、'alg'パラメーターがしなければなりません(MUST)存在している必要があります。
  • A parameter identifying the recipient's key SHOULD be present. A parameter identifying the sender's key SHOULD be present.
  • 受信者のキーを識別するパラメーターは、存在するべきです(SHOULD)。送信者のキーを識別するパラメーターは、存在するべきです(SHOULD)。

These algorithms are defined in Table 20.

これらのアルゴリズムは、表20で定義されています。

ECDH with Key Agreement is parameterized by the same parameters as for ECDH; see Section 12.4.1, with the following modifications:

鍵合意を伴うECDHは、ECDHと同じパラメーターでパラメーター化されます。詳細はセクション12.4.1を参照してください。ただし、次の修正が行われます。

  • Key Wrap Algorithm: Any of the key wrap algorithms defined in Section 12.2.1 are supported. The size of the key used for the key wrap algorithm is fed into the KDF. The set of identifiers are found in Table 20.
  • キーラップアルゴリズム:セクション12.2.1で定義されているいずれかのキーラップアルゴリズムがサポートされています。キーラップアルゴリズムに使用されるキーのサイズはKDFにフィードされます。識別子のセットは表20にあります。

Name Value KDF Ephemeral- Static Key Wrap Description
ECDH-ES + -29 HKDF - yes A128KW ECDH ES w/
A128KW SHA-256 Concat KDF and AES Key Wrap w/ 128-bit key
ECDH-ES + -30 HKDF - yes A192KW ECDH ES w/
A192KW SHA-256 Concat KDF and AES Key Wrap w/ 192-bit key
ECDH-ES + -31 HKDF - yes A256KW ECDH ES w/
A256KW SHA-256 Concat KDF and AES Key Wrap w/ 256-bit key
ECDH-SS + -32 HKDF - no A128KW ECDH SS w/
A128KW SHA-256 Concat KDF and AES Key Wrap w/ 128-bit key
ECDH-SS + -33 HKDF - no A192KW ECDH SS w/
A192KW SHA-256 Concat KDF and AES Key Wrap w/ 192-bit key
ECDH-SS + -34 HKDF - no A256KW ECDH SS w/
A256KW SHA-256 Concat KDF and AES Key Wrap w/ 256-bit key

            Table 20: ECDH Algorithm Values with Key Wrap

            テーブル20: キー保護付きECDHアルゴリズム値

When using a COSE key for this algorithm, the following checks are made:

このアルゴリズムのためにCOSEキーを使用する場合、以下のチェックが行われます:しなければなりません(MUST)

  • The 'kty' field MUST be present, and it MUST be 'EC2' or 'OKP'.
  • 「kty」フィールドは存在しなければならず、そして「EC2」または「OKP」でなければなりません。
  • If the 'alg' field is present, it MUST match the key agreement algorithm being used.
  • 「alg」フィールドが存在する場合、使用されている鍵共有アルゴリズムと一致しなければなりません(MUST)。
  • If the 'key_ops' field is present, it MUST include 'derive key' or 'derive bits' for the private key.
  • もし、'key_ops'フィールドが存在する場合、それはプライベートキーに対して'鍵の派生'または'ビットの派生'を含める必要があります。
  • If the 'key_ops' field is present, it MUST be empty for the public key.
  • 「'key_ops'フィールドが存在する場合、パブリックキーには空でなければなりません(MUST)。」

The COSE_Key object defines a way to hold a single key object. It is still required that the members of individual key types be defined. This section of the document is where we define an initial set of members for specific key types.

COSE_Key オブジェクトは、単一のキーオブジェクトを保持する方法を定義します。ただし、個々のキータイプのメンバーが定義される必要があります。この文書のこのセクションでは、特定のキータイプの初期セットのメンバーを定義します。

For each of the key types, we define both public and private members. The public members are what is transmitted to others for their usage. Private members allow for the archival of keys by individuals. However, there are some circumstances in which private keys may be distributed to entities in a protocol. Examples include: entities that have poor random number generation, centralized key creation for multi-cast type operations, and protocols in which a shared secret is used as a bearer token for authorization purposes.

各キータイプについて、公開メンバーと非公開メンバーの両方を定義します。公開メンバーは他の人が使用するために送信されるものです。非公開メンバーは個人が鍵をアーカイブするために使用されます。ただし、プロトコルにおいては、いくつかの状況で非公開キーがエンティティに配布される場合があります。例としては、乱数生成が不十分なエンティティ、マルチキャスト型の操作のための集中鍵作成、および共有シークレットが認可目的でベアラトークンとして使用されるプロトコルがあります。

Key types are identified by the 'kty' member of the COSE_Key object. In this document, we define four values for the member:

キーの種類は、COSE_Keyオブジェクトの 'kty' メンバによって識別されます。このドキュメントでは、メンバに対して4つの値を定義します。

Name Value Description
OKP 1 Octet Key Pair
EC2 2 Elliptic Curve Keys w/ x- and y-coordinate pair
Symmetric 4 Symmetric Keys
Reserved 0 This value is reserved

名前 説明
OKP 1 オクテット鍵ペア
EC2 2 xおよびy座標の楕円曲線鍵のペア
対称鍵 4 対称鍵
予約済み 0 この値は予約されています

                      Table 21: Key Type Values

                      テーブル21:キータイプの値

Two different key structures are defined for elliptic curve keys. One version uses both an x-coordinate and a y-coordinate, potentially with point compression ('EC2'). This is the traditional EC point representation that is used in [RFC5480]. The other version uses only the x-coordinate as the y-coordinate is either to be recomputed or not needed for the key agreement operation ('OKP').

Applications MUST check that the curve and the key type are consistent and reject a key if they are not.

アプリケーションは、曲線と鍵の種類が一致しているかどうかを確認し、一致していない場合は鍵を拒否するしなければなりません(MUST)

Name Value Key Type Description
P-256 1 EC2 NIST P-256 also known as secp256r1
P-384 2 EC2 NIST P-384 also known as secp384r1
P-521 3 EC2 NIST P-521 also known as secp521r1
X25519 4 OKP X25519 for use w/ ECDH only
X448 5 OKP X448 for use w/ ECDH only
Ed25519 6 OKP Ed25519 for use w/ EdDSA only
Ed448 7 OKP Ed448 for use w/ EdDSA only

名前 キータイプ 説明
P-256 1 EC2 NIST P-256、またはsecp256r1とも呼ばれます
P-384 2 EC2 NIST P-384、またはsecp384r1とも呼ばれます
P-521 3 EC2 NIST P-521、またはsecp521r1とも呼ばれます
X25519 4 OKP ECDHでの使用に適したX25519
X448 5 OKP ECDHでの使用に適したX448
Ed25519 6 OKP EdDSAでの使用に適したEd25519
Ed448 7 OKP EdDSAでの使用に適したEd448

                      Table 22: Elliptic Curves

                      表22: 楕円曲線

The traditional way of sending ECs has been to send either both the x-coordinate and y-coordinate or the x-coordinate and a sign bit for the y-coordinate. The latter encoding has not been recommended in the IETF due to potential IPR issues. However, for operations in constrained environments, the ability to shrink a message by not sending the y-coordinate is potentially useful.

ECを送信する従来の方法は、x座標とy座標の両方またはx座標とy座標の符号ビットを送信することでした。後者の符号化は、IETFでは潜在的な知的財産権の問題のために推奨されていません。しかし、制約のある環境での操作において、y座標を送信しないことによってメッセージを縮小する能力は、潜在的に有用です。

For EC keys with both coordinates, the 'kty' member is set to 2 (EC2). The key parameters defined in this section are summarized in Table 23. The members that are defined for this key type are:

EC鍵の両方の座標を持つ場合、'kty'メンバは2(EC2)に設定されます。このセクションで定義された鍵パラメーターは、表23にまとめられています。この鍵タイプのために定義されたメンバは以下の通りです。

crv: This contains an identifier of the curve to be used with the key. The curves defined in this document for this key type can be found in Table 22. Other curves may be registered in the future, and private curves can be used as well.

crv:この項目は、鍵と一緒に使用する曲線の識別子を含んでいます。この鍵タイプのためにこのドキュメントで定義された曲線は、表22に見つけることができます。将来的に他の曲線が登録されることがあり、また、プライベートな曲線も使用することができます。

x: This contains the x-coordinate for the EC point. The integer is converted to an octet string as defined in [SEC1]. Leading zero octets MUST be preserved.

x: このフィールドには、楕円曲線上の点のx座標が含まれます。整数は、[SEC1] で定義されたようにオクテット文字列に変換されます。先頭のゼロのオクテットはしなければなりません(MUST)

y: This contains either the sign bit or the value of the y-coordinate for the EC point. When encoding the value y, the integer is converted to an octet string (as defined in [SEC1]) and encoded as a CBOR bstr. Leading zero octets MUST be preserved. The compressed point encoding is also supported. Compute the sign bit as laid out in the Elliptic-Curve-Point-to- Octet-String Conversion function of [SEC1]. If the sign bit is zero, then encode y as a CBOR false value; otherwise, encode y as a CBOR true value. The encoding of the infinity point is not supported.

y: This contains either the sign bit or the value of the y-coordinate for the EC point. When encoding the value y, the integer is converted to an octet string (as defined in [SEC1]) and encoded as a CBOR bstr. Leading zero octets MUST be preserved. The compressed point encoding is also supported. Compute the sign bit as laid out in the Elliptic-Curve-Point-to- Octet-String Conversion function of [SEC1]. If the sign bit is zero, then encode y as a CBOR false value; otherwise, encode y as a CBOR true value. The encoding of the infinity point is not supported.

d: This contains the private key.

d: これには秘密鍵が含まれています。

For public keys, it is REQUIRED that 'crv', 'x', and 'y' be present in the structure. For private keys, it is REQUIRED that 'crv' and 'd' be present in the structure. For private keys, it is RECOMMENDED that 'x' and 'y' also be present, but they can be recomputed from the required elements and omitting them saves on space.

公開鍵については、構造内に 'crv'、'x'、および 'y' が存在することが要求されています(REQUIRED)。秘密鍵については、構造内に 'crv' と 'd' が存在することが要求されています(REQUIRED)。秘密鍵については、'x' と 'y' も存在することが推奨されます(RECOMMENDED)が、必要な要素から再計算できるため、省略することでスペースを節約することができます。

Key Type Name Label CBOR Type Description
2 crv -1 int / tstr EC identifier - Taken from the "COSE Elliptic Curves" registry
2 x -2 bstr x-coordinate
2 y -3 bstr / bool y-coordinate
2 d -4 bstr Private key

キーのタイプ 名前 ラベル CBORのタイプ 説明
2 crv -1 int / tstr EC識別子-「COSE楕円曲線」レジストリから取得
2 x -2 bstr x座標
2 y -3 bstr / bool y座標
2 d -4 bstr プライベートキー

                     Table 23: EC Key Parameters

                     テーブル23:ECキーパラメーター

A new key type is defined for Octet Key Pairs (OKP). Do not assume that keys using this type are elliptic curves. This key type could be used for other curve types (for example, mathematics based on hyper-elliptic surfaces).

新しい鍵タイプがOctet Key Pairs (OKP)のために定義されています。このタイプの鍵が楕円曲線であるとは限りませんので、そのように想定しないでください。この鍵タイプは他の曲線タイプ(例えば、超楕円曲面に基づく数学)にも使用される可能性があります。

The key parameters defined in this section are summarized in Table 24. The members that are defined for this key type are:

このセクションで定義された主なパラメーターは、表24にまとめられています。このキータイプに定義されたメンバーは以下の通りです:

crv: This contains an identifier of the curve to be used with the key. The curves defined in this document for this key type can be found in Table 22. Other curves may be registered in the future and private curves can be used as well.

crv: キーと一緒に使用される曲線の識別子を含んでいます。このキータイプに対してこのドキュメントで定義された曲線は、テーブル22にあります。将来的に他の曲線が登録されることがあり、また、プライベートな曲線も使用できます。

x: This contains the x-coordinate for the EC point. The octet string represents a little-endian encoding of x.

x:このフィールドは、ECポイントのx座標を含みます。オクテット文字列は、xのリトルエンディアンエンコーディングを表します。

d: This contains the private key.

d: これにはプライベートキーが含まれています。

For public keys, it is REQUIRED that 'crv' and 'x' be present in the structure. For private keys, it is REQUIRED that 'crv' and 'd' be present in the structure. For private keys, it is RECOMMENDED that 'x' also be present, but it can be recomputed from the required elements and omitting it saves on space.

公開鍵については、構造内に「crv」と「x」が存在することが「要求されています(REQUIRED)」。秘密鍵については、構造内に「crv」と「d」が存在することが「要求されています(REQUIRED)」。秘密鍵については、「x」も存在することが「推奨されます(RECOMMENDED)」が、必要な要素から再計算することができるため、省略するとスペースを節約できます。

Name Key Type Label Type Description
crv 1 -1 int / tstr EC identifier - Taken from the "COSE Key Common Parameters" registry
x 1 -2 bstr x-coordinate
d 1 -4 bstr Private key

名前 キーの種類 ラベル タイプ 説明
crv 1 -1 int / tstr EC識別子 - 「COSE Key Common Parameters」のレジストリから取得
x 1 -2 bstr x座標
d 1 -4 bstr 秘密鍵

                 Table 24: Octet Key Pair Parameters

                 テーブル24:オクテット鍵ペアパラメーター

Occasionally it is required that a symmetric key be transported between entities. This key structure allows for that to happen.

時折、エンティティ間で対称キーを転送する必要があります。このキー構造はその要件を満たすことができます。

For symmetric keys, the 'kty' member is set to 4 ('Symmetric'). The member that is defined for this key type is:

対称キーの場合、'kty'メンバーは4('Symmetric')に設定されます。このキータイプには定義されているメンバーはありません。

k: This contains the value of the key.

k: これにはキーの値が含まれています。

This key structure does not have a form that contains only public members. As it is expected that this key structure is going to be transmitted, care must be taken that it is never transmitted accidentally or insecurely. For symmetric keys, it is REQUIRED that 'k' be present in the structure.

このキー構造には、公開メンバーのみを含む形式はありません。このキー構造が送信されることが予想されるため、誤ってまたは安全ではない状態で送信されないように注意する必要があります。対称キーの場合、構造内に 'k' が存在することが要求されています(REQUIRED)

Name Key Type Label Type Description
k 4 -1 bstr Key Value

名前 キータイプ ラベル タイプ 説明
k 4 -1 bstr キーの値

                 Table 25: Symmetric Key Parameters

                 テーブル25:対称鍵パラメーター

There has been an attempt to limit the number of places where the document needs to impose restrictions on how the CBOR Encoder needs to work. We have managed to narrow it down to the following restrictions:

CBOR Encoderの動作に制限を課す場所をできるだけ少なくする試みが行われてきました。次の制限に絞り込むことに成功しました:

  • The restriction applies to the encoding of the Sig_structure, the Enc_structure, and the MAC_structure.
  • 制限は、Sig_structure、Enc_structure、およびMAC_structureのエンコーディングに適用されます。
  • The rules for "Canonical CBOR" (Section 3.9 of RFC 7049) MUST be used in these locations. The main rule that needs to be enforced is that all lengths in these structures MUST be encoded such that they are using definite lengths, and the minimum length encoding is used.
  • 「Canonical CBOR」(RFC 7049のセクション3.9)のルールは、これらの場所で使用しなければなりません(MUST)。適用する必要がある主なルールは、これらの構造体内のすべての長さが、確定長を使用して符号化され、最小長の符号化が使用されていることです。
  • Applications MUST NOT generate messages with the same label used twice as a key in a single map. Applications MUST NOT parse and process messages with the same label used twice as a key in a single map. Applications can enforce the parse and process requirement by using parsers that will fail the parse step or by using parsers that will pass all keys to the application, and the application can perform the check for duplicate keys.
  • Applications MUST NOT generate messages with the same label used twice as a key in a single map. Applications MUST NOT parse and process messages with the same label used twice as a key in a single map. Applications can enforce the parse and process requirement by using parsers that will fail the parse step or by using parsers that will pass all keys to the application, and the application can perform the check for duplicate keys.

This document is designed to provide a set of security services, but not implementation requirements for specific usage. The interoperability requirements are provided for how each of the individual services are used and how the algorithms are to be used for interoperability. The requirements about which algorithms and which services are needed are deferred to each application.

この文書は、特定の使用法に対する実装要件ではなく、セキュリティーサービスの一連を提供するために設計されています。各個別のサービスの使用方法および相互運用性のためのアルゴリズムの使用方法に関する相互運用要件が示されています。必要なアルゴリズムとサービスについての要件は、各アプリケーションに委ねられています。

An example of a profile can be found in [OSCOAP] where two profiles are being developed. One is for carrying content by itself, and the other is for carrying content in combination with CoAP headers.

プロファイルの例は、2つのプロファイルが開発中である[OSCOAP]に見つけることができます。1つはコンテンツ自体を運ぶためのものであり、もう1つはCoAPヘッダーと組み合わせてコンテンツを運ぶためのものです。

It is intended that a profile of this document be created that defines the interoperability requirements for that specific application. This section provides a set of guidelines and topics that need to be considered when profiling this document.

このドキュメントのプロファイルが作成され、特定のアプリケーションの互換性要件が定義されることが意図されています。このセクションでは、このドキュメントのプロファイルを作成する際に考慮すべきガイドラインとトピックのセットを提供します。

  • Applications need to determine the set of messages defined in this document that they will be using. The set of messages corresponds fairly directly to the set of security services that are needed and to the security levels needed.
  • このドキュメントで定義されたメッセージのセットを使用する必要があるアプリケーションがあります。このメッセージのセットは、必要なセキュリティーサービスのセットと、必要なセキュリティーレベルにかなり直接対応しています。
  • Applications may define new header parameters for a specific purpose. Applications will often times select specific header parameters to use or not to use. For example, an application would normally state a preference for using either the IV or the Partial IV parameter. If the Partial IV parameter is specified, then the application would also need to define how the fixed portion of the IV would be determined.
  • 特定の目的のために、アプリケーションは新しいヘッダーパラメーターを定義することができます。アプリケーションはしばしば、使用するかどうかを選択するために特定のヘッダーパラメーターを選択することもあります。例えば、アプリケーションは通常、IVパラメーターまたはPartial IVパラメーターのどちらかを使用することを好むと述べるでしょう。Partial IVパラメーターが指定されている場合、アプリケーションはまた、IVの固定部分がどのように決定されるかを定義する必要があります。
  • When applications use externally defined authenticated data, they need to define how that data is encoded. This document assumes that the data will be provided as a byte stream. More information can be found in Section 4.3.
  • アプリケーションが外部で定義された認証データを使用する場合、そのデータのエンコード方法を定義する必要があります。このドキュメントでは、データがバイトストリームとして提供されることを前提としています。詳細はセクション4.3に記載されています。
  • Applications need to determine the set of security algorithms that are to be used. When selecting the algorithms to be used as the mandatory-to-implement set, consideration should be given to choosing different types of algorithms when two are chosen for a specific purpose. An example of this would be choosing HMAC- SHA512 and AES-CMAC as different MAC algorithms; the construction is vastly different between these two algorithms. This means that a weakening of one algorithm would be unlikely to lead to a weakening of the other algorithms. Of course, these algorithms do not provide the same level of security and thus may not be comparable for the desired security functionality.
  • 応用プログラムは使用するセキュリティーアルゴリズムのセットを特定する必要があります。必須の実装セットとして使用されるアルゴリズムを選択する際には、特定の目的に2つのアルゴリズムが選択される場合、異なるタイプのアルゴリズムを選ぶことが望ましいです。これにより、異なるMACアルゴリズムとしてHMAC- SHA512およびAES-CMACを選択する場合を例に挙げます。これら2つのアルゴリズムの構造は大きく異なります。これは、1つのアルゴリズムの弱体化が他のアルゴリズムの弱体化につながる可能性が低いことを意味します。もちろん、これらのアルゴリズムは同じレベルのセキュリティーを提供せず、したがって、望ましいセキュリティー機能のために比較できない場合があります。
  • Applications may need to provide some type of negotiation or discovery method if multiple algorithms or message structures are permitted. The method can be as simple as requiring preconfiguration of the set of algorithms to providing a discovery method built into the protocol. S/MIME provided a number of different ways to approach the problem that applications could follow:
  • アプリケーションは、複数のアルゴリズムやメッセージ構造が許可されている場合、一定の交渉や検出手法を提供する必要がある場合があります。この手法は、アルゴリズムのセットの事前設定を要求するだけのシンプルなものから、プロトコルに組み込まれた検出手法を提供するものまでさまざまです。S/MIMEは、アプリケーションが問題にアプローチするために追従できるさまざまな方法を提供しました。

   *  Advertising in the message (S/MIME capabilities) [RFC5751].

   *  メッセージに広告する(S/MIMEの機能)[RFC5751]。

   *  Advertising in the certificate (capabilities extension)
      [RFC4262].

   *  証明書内の広告(機能拡張)
      [RFC4262]。

   *  Minimum requirements for the S/MIME, which have been updated
      over time [RFC2633] [RFC5751] (note that [RFC2633] has been
      obsoleted by [RFC5751]).

   * S/MIMEの最小要件は、時間の経過とともに更新されています[RFC2633] [RFC5751]([RFC2633]は[RFC5751]によって廃止されていることに注意してください)。

IANA has assigned the following tags from the "CBOR Tags" registry. The tags for COSE_Sign1, COSE_Encrypt0, and COSE_Mac0 were assigned in the 1 to 23 value range (one byte long when encoded). The tags for COSE_Sign, COSE_Encrypt, and COSE_Mac were assigned in the 24 to 255 value range (two bytes long when encoded).

IANAは、「CBOR Tags」レジストリから以下のタグを割り当てました。COSE_Sign1、COSE_Encrypt0、およびCOSE_Mac0のタグは、値範囲1から23(符号化時は1バイト)に割り当てられました。COSE_Sign、COSE_Encrypt、およびCOSE_Macのタグは、値範囲24から255(符号化時は2バイト)に割り当てられました。

The tags assigned are in Table 1.

割り当てられたタグは表1に記載されています。

IANA has created a new registry titled "COSE Header Parameters". The registry has been created to use the "Expert Review Required" registration procedure [RFC8126]. Guidelines for the experts are provided in Section 16.11. It should be noted that, in addition to the expert review, some portions of the registry require a specification, potentially a Standards Track RFC, be supplied as well.

IANAは、「COSEヘッダーパラメーター」という新しいレジストリを作成しました。「エキスパートレビューが必要です」の登録手続きを利用するため、このレジストリは作成されました[RFC8126]。エキスパートへのガイドラインは、セクション16.11で提供されています。専門家のレビューに加えて、レジストリの一部には、仕様、おそらくは標準軌道のRFCが提供される必要があることに注意してください。

The columns of the registry are:

レジストリの列は次のとおりです:

Name: The name is present to make it easier to refer to and discuss the registration entry. The value is not used in the protocol. Names are to be unique in the table.

Label: This is the value used for the label. The label can be either an integer or a string. Registration in the table is based on the value of the label requested. Integer values between 1 and 255 and strings of length 1 are designated as "Standards Action". Integer values from 256 to 65535 and strings of length 2 are designated as "Specification Required". Integer values of greater than 65535 and strings of length greater than 2 are designated as "Expert Review". Integer values in the range -1 to -65536 are "delegated to the COSE Header Algorithm Parameters registry". Integer values less than -65536 are marked as private use.

ラベル:これはラベルに使用される値です。ラベルは整数または文字列です。テーブルへの登録は、要求されたラベルの値に基づいて行われます。1から255までの整数値および長さ1の文字列は、「標準処理」と指定されます。256から65535までの整数値および長さ2の文字列は、「仕様必須」と指定されます。65535より大きい整数値および長さ2より大きい文字列は、「専門家のレビュー」と指定されます。範囲が-1から-65536の整数値は、「COSEヘッダーアルゴリズムパラメーターレジストリに委任」と指定されます。-65536未満の整数値は、プライベート使用としてマークされます。

Value Type: This contains the CBOR type for the value portion of the label.

値の種類:これには、ラベルの値部分のCBORタイプが含まれています。

Value Registry: This contains a pointer to the registry used to contain values where the set is limited.

値レジストリ:これは、セットが制限されている場合に値が含まれるレジストリを指すポインターを含んでいます。

Description: This contains a brief description of the header field.

説明:ヘッダーフィールドの簡単な説明が含まれています。

Reference: This contains a pointer to the specification defining the header field (where public).

参考:これは、ヘッダーフィールドを定義する仕様へのポインタを含んでいます(公開されている場合)。

The initial contents of the registry can be found in Tables 2 and 27. All of the entries in the "References" column of this registry point to this document.

登録内容の初期データは、テーブル2と27にあります。この登録の「参照」欄のすべてのエントリは、この文書を指しています。

Additionally, the label of 0 is to be marked as 'Reserved'.

付加的に、ラベル0は「予約済み」としてマークする必要があります。

IANA has created a new registry titled "COSE Header Algorithm Parameters". The registry uses the "Expert Review Required" registration procedure. Expert review guidelines are provided in Section 16.11.

IANAは、「COSEヘッダーアルゴリズムパラメーター」という新しいレジストリを作成しました。このレジストリは、「エキスパートレビューが必要な」という登録手続きを使用します。エキスパートレビューのガイドラインは、セクション16.11に提供されています。

The columns of the registry are:

登録の列は以下の通りです:

Name: The name is present to make it easier to refer to and discuss the registration entry. The value is not used in the protocol.

名前:登録エントリを参照し、議論する際に便宜上使用されます。値はプロトコルで使用されません。

Algorithm: The algorithm(s) that this registry entry is used for. This value is taken from the "COSE Algorithms" registry. Multiple algorithms can be specified in this entry. For the table, the algorithm/label pair MUST be unique.

アルゴリズム:このレジストリエントリが使用されるアルゴリズム(複数可)です。この値は、「COSEアルゴリズム」レジストリから取得されます。表の場合、アルゴリズム/ラベルの組み合わせは一意である必要があります(MUST)

Label: This is the value used for the label. The label is an integer in the range of -1 to -65536.

ラベル:ラベルに使用される値です。ラベルは-1から-65536の範囲内の整数です。

Type: This contains the CBOR type for the value portion of the label.

タイプ:これには、ラベルの値部分のCBORタイプが含まれています。

Description: This contains a brief description of the header field.

説明:これにはヘッダーフィールドの簡単な説明が含まれています。

Reference: This contains a pointer to the specification defining the header field (where public).

参照:これには、ヘッダーフィールドを定義する仕様へのポインタが含まれています(公開時)。

The initial contents of the registry can be found in Tables 13, 14, and 19. All of the entries in the "References" column of this registry point to this document.

レジストリの初期内容は、表13、表14、および表19で見つけることができます。このレジストリの「参照」列のすべてのエントリは、このドキュメントを指しています。

IANA has created a new registry titled "COSE Algorithms". The registry has been created to use the "Expert Review Required" registration procedure. Guidelines for the experts are provided in Section 16.11. It should be noted that, in addition to the expert review, some portions of the registry require a specification, potentially a Standards Track RFC, be supplied as well.

IANAは、「COSEアルゴリズム」と題した新しいレジストリを作成しました。このレジストリは、「要求された専門家によるレビュー」登録手続きを使用するために作成されました。専門家へのガイドラインはセクション16.11に提供されています。なお、専門家によるレビューに加えて、レジストリの一部には、仕様書、潜在的にはスタンダードトラックRFCを提供する必要があることに注意してください。

The columns of the registry are:

レジストリの列は次のとおりです:

Name: A value that can be used to identify an algorithm in documents for easier comprehension. The name SHOULD be unique. However, the 'Value' field is what is used to identify the algorithm, not the 'name' field.

名前:理解を容易にするために文書内でアルゴリズムを識別するために使用可能な値です。名前はすべき (SHOULD)で一意であるべきです。ただし、アルゴリズムを識別するのに「名前」フィールドではなく、「値」フィールドが使用されます。

Value: The value to be used to identify this algorithm. Algorithm values MUST be unique. The value can be a positive integer, a negative integer, or a string. Integer values between -256 and 255 and strings of length 1 are designated as "Standards Action". Integer values from -65536 to 65535 and strings of length 2 are designated as "Specification Required". Integer values greater than 65535 and strings of length greater than 2 are designated as "Expert Review". Integer values less than -65536 are marked as private use.

値:このアルゴリズムを識別するために使用される値です。アルゴリズムの値はしなければなりません(MUST)独自である必要があります。値は正の整数、負の整数、または文字列にすることができます。-256から255の整数値と長さ1の文字列は「標準アクション」として指定されています。-65536から65535の整数値と長さ2の文字列は「仕様要求」として指定されています。65535より大きい整数値と長さ2より大きい文字列は「専門家によるレビュー」として指定されています。-65536未満の整数値はプライベート使用としてマークされています。

Description: A short description of the algorithm.

説明:アルゴリズムの短い説明。

Reference: A document where the algorithm is defined (if publicly available).

参考文献:アルゴリズムが定義されている文書(もし公開されている場合)。

Recommended: Does the IETF have a consensus recommendation to use the algorithm? The legal values are 'Yes', 'No', and 'Deprecated'.

推奨されます:IETFはアルゴリズムの使用について合意した推奨事項を持っていますか?適切な値は「はい」、「いいえ」、および「非推奨」です。

The initial contents of the registry can be found in Tables 5, 6, 7, 8, 9, 10, 11, 15, 16, 17, 18, and 20. All of the entries in the "References" column of this registry point to this document. All of the entries in the "Recommended" column are set to "Yes".

レジストリの最初の内容は、テーブル5、6、7、8、9、10、11、15、16、17、18、および20にあります。このレジストリの「参照」列のすべてのエントリは、この文書を指しています。また、このレジストリの「推奨」列のすべてのエントリは「はい」に設定されています。

Additionally, the label of 0 is to be marked as 'Reserved'.

さらに、ラベル0は「予約済み」としてマークされる必要があります。

NOTE: The assignment of algorithm identifiers in this document was done so that positive numbers were used for the first layer objects (COSE_Sign, COSE_Sign1, COSE_Encrypt, COSE_Encrypt0, COSE_Mac, and COSE_Mac0). Negative numbers were used for second layer objects (COSE_Signature and COSE_recipient). Expert reviewers should consider this practice, but are not expected to be restricted by this precedent.

注意:このドキュメントでのアルゴリズム識別子の割り当ては、第1層オブジェクト(COSE_Sign、COSE_Sign1、COSE_Encrypt、COSE_Encrypt0、COSE_Mac、COSE_Mac0)には正の数が使用されました。第2層オブジェクト(COSE_SignatureとCOSE_recipient)には負の数が使用されました。専門の審査者はこの慣行を考慮すべきですが、この前例に制約されることは期待されていません。

IANA has created a new registry titled "COSE Key Common Parameters". The registry has been created to use the "Expert Review Required" registration procedure. Guidelines for the experts are provided in Section 16.11. It should be noted that, in addition to the expert review, some portions of the registry require a specification, potentially a Standards Track RFC, be supplied as well.

IANAは、「COSE Key Common Parameters」という新しい登録表を作成しました。この登録表は、「Expert Review Required(専門家のレビューが必要)」の登録手続きを使用するために作成されました。専門家へのガイドラインはセクション16.11で提供されます。ただし、専門家のレビューに加えて、登録表の一部には仕様書(おそらくStandards Track RFC)が提供される必要があることに留意してください。

The columns of the registry are:

登録の列は次の通りです:

Name: This is a descriptive name that enables easier reference to the item. It is not used in the encoding.

Name: これはアイテムの簡単な参照を可能にする説明的な名前です。エンコーディングで使用されることはありません。

Label: The value to be used to identify this algorithm. Key map labels MUST be unique. The label can be a positive integer, a negative integer, or a string. Integer values between 0 and 255 and strings of length 1 are designated as "Standards Action". Integer values from 256 to 65535 and strings of length 2 are designated as "Specification Required". Integer values of greater than 65535 and strings of length greater than 2 are designated as "Expert Review". Integer values in the range -65536 to -1 are "used for key parameters specific to a single algorithm delegated to the COSE Key Type Parameters registry". Integer values less than -65536 are marked as private use.

ラベル:このアルゴリズムを識別するために使用される値。キーマップのラベルはしなければなりません(MUST)一意である必要があります。ラベルは正の整数、負の整数、または文字列であることができます。0から255までの整数値と長さ1の文字列は「標準アクション」とされます。256から65535までの整数値と長さ2の文字列は「仕様要求」とされます。65535より大きな整数値と長さ2より大きな文字列は「専門家によるレビュー」とされます。-65536から-1までの整数値は、「COSEキータイプパラメーターレジストリに委任された単一のアルゴリズムに固有のキーパラメーターに使用されます」。-65536未満の整数値は私的な使用としてマークされます。

CBOR Type: This field contains the CBOR type for the field.

CBOR タイプ:このフィールドには、そのフィールドの CBOR タイプが含まれています。

Value Registry: This field denotes the registry that values come from, if one exists.

値レジストリ: もし存在する場合、このフィールドは値の出所を示します。

Description: This field contains a brief description for the field.

解説:このフィールドには、フィールドの簡単な説明が含まれています。

Reference: This contains a pointer to the public specification for the field if one exists.

参考:これは、存在する場合はフィールドの公開仕様へのポインタを含んでいます。

This registry has been initially populated by the values in Table 3. All of the entries in the "References" column of this registry point to this document.

このレジストリは、初期状態ではTable 3の値で補完されています。このレジストリの「参照」列のすべてのエントリは、この文書を指しています。

IANA has created a new registry titled "COSE Key Type Parameters". The registry has been created to use the "Expert Review Required" registration procedure. Expert review guidelines are provided in Section 16.11.

IANAは、「COSEキータイプパラメーター」という新しい登録簿を作成しました。登録簿は「専門家によるレビューが必要(Expert Review Required)」な手続きを使用するために作成されました。専門家によるレビューのガイドラインは、セクション16.11に提供されています。

The columns of the table are:

テーブルの列は次のとおりです。

Key Type: This field contains a descriptive string of a key type. This should be a value that is in the "COSE Key Common Parameters" registry and is placed in the 'kty' field of a COSE Key structure.

キータイプ:このフィールドにはキータイプの説明的な文字列が含まれます。これは、「COSEキー共通パラメーター」レジストリ内の値であり、COSEキー構造体の「kty」フィールドに配置されるべきです。

Name: This is a descriptive name that enables easier reference to the item. It is not used in the encoding.

名前:これはアイテムへの参照を容易にするための説明的な名前です。エンコーディングでは使用されません。

Label: The label is to be unique for every value of key type. The range of values is from -65536 to -1. Labels are expected to be reused for different keys.

ラベル:ラベルは、キータイプの各値で一意である必要があります。値の範囲は、-65536から-1までです。ラベルは、異なるキーに再利用されることが期待されています。

CBOR Type: This field contains the CBOR type for the field.

CBOR タイプ:このフィールドには、フィールドの CBOR タイプが含まれています。

Description: This field contains a brief description for the field.

説明:このフィールドには、フィールドの簡単な説明が含まれています。

Reference: This contains a pointer to the public specification for the field if one exists.

Reference: This contains a pointer to the public specification for the field if one exists.

This registry has been initially populated by the values in Tables 23, 24, and 25. All of the entries in the "References" column of this registry point to this document.

この登録は最初にテーブル23、24、および25の値で補完されました。この登録の「参照」列のすべてのエントリは、この文書を指しています。

IANA has created a new registry titled "COSE Key Types". The registry has been created to use the "Expert Review Required" registration procedure. Expert review guidelines are provided in Section 16.11.

IANAは、新しい「COSEキータイプ」の登録機関を作成しました。この登録機関は、「専門家のレビューが必要」という登録手続きを使用するために作成されました。専門家のレビューのガイドラインは、セクション16.11に提供されています。

The columns of this table are:

この表の列は:

Name: This is a descriptive name that enables easier reference to the item. The name MUST be unique. It is not used in the encoding.

名前:これは項目への簡単な参照を可能にする説明的な名前です。名前は必ずユニークである必要があります。エンコーディングには使用されません。

Value: This is the value used to identify the curve. These values MUST be unique. The value can be a positive integer, a negative integer, or a string.

Value: This is the value used to identify the curve. These values MUST be unique. The value can be a positive integer, a negative integer, or a string.

Description: This field contains a brief description of the curve.

説明:このフィールドには、曲線の簡単な説明が含まれています。

References: This contains a pointer to the public specification for the curve if one exists.

参考文献: もしあれば、カーブの公開仕様へのポインタを含みます。

This registry has been initially populated by the values in Table 21. The specification column for all of these entries will be this document.

このレジストリは、最初にテーブル21の値で初期設定されました。これらのエントリの仕様の列は、この文書になります。

IANA has created a new registry titled "COSE Elliptic Curves". The registry has been created to use the "Expert Review Required" registration procedure. Guidelines for the experts are provided in Section 16.11. It should be noted that, in addition to the expert review, some portions of the registry require a specification, potentially a Standards Track RFC, be supplied as well.

IANA has created a new registry titled "COSE Elliptic Curves". The registry has been created to use the "Expert Review Required" registration procedure. Guidelines for the experts are provided in Section 16.11. It should be noted that, in addition to the expert review, some portions of the registry require a specification, potentially a Standards Track RFC, be supplied as well.

The columns of the table are:

テーブルの列は次のとおりです:

Name: This is a descriptive name that enables easier reference to the item. It is not used in the encoding.

Name: This is a descriptive name that enables easier reference to the item. It is not used in the encoding.

Value: This is the value used to identify the curve. These values MUST be unique. The integer values from -256 to 255 are designated as "Standards Action". The integer values from 256 to 65535 and -65536 to -257 are designated as "Specification Required". Integer values over 65535 are designated as "Expert Review". Integer values less than -65536 are marked as private use.

値:これは曲線を識別するために使用される値です。これらの値は「しなければなりません(MUST)」一意でなければなりません。整数値-256から255までは「標準アクション(Standards Action)」と指定されています。整数値256から65535および-65536から-257までは「仕様が必要(Specification Required)」と指定されています。65535を超える整数値は「専門家のレビュー(Expert Review)」と指定されています。-65536を下回る整数値は私用とマークされています。

Key Type: This designates the key type(s) that can be used with this curve.

主要なタイプ: この曲線で使用できるキータイプを指定します。

Description: This field contains a brief description of the curve.

説明:このフィールドには、曲線の簡単な説明が含まれています。

Reference: This contains a pointer to the public specification for the curve if one exists.

参照:これは、存在する場合には曲線に対するパブリックな仕様へのポインタを含んでいます。

Recommended: Does the IETF have a consensus recommendation to use the algorithm? The legal values are 'Yes', 'No', and 'Deprecated'.

以下の英語のテキストを日本語に翻訳します。 推奨されます(RECOMMENDED):IETFはアルゴリズムの使用についての合意された推奨事項を持っていますか?有効な値は「はい」、「いいえ」、および「非推奨」です。

This registry has been initially populated by the values in Table 22. All of the entries in the "References" column of this registry point to this document. All of the entries in the "Recommended" column are set to "Yes".

このレジストリは、最初にテーブル22の値で初期化されました。このレジストリの「参照」列のすべてのエントリは、この文書を指します。 「推奨」列のすべてのエントリは「はい」に設定されています。

This section registers the 'application/cose' media type in the "Media Types" registry. These media types are used to indicate that the content is a COSE message.

このセクションでは、「メディアタイプ(Media Types)」レジストリにおいて「application/cose」というメディアタイプを登録します。これらのメディアタイプは、コンテンツがCOSEメッセージであることを示すために使用されます。

   Type name: application

   タイプ名:アプリケーション

   Subtype name: cose

   サブタイプ名:cose

   Required parameters: N/A

   必須パラメーター:なし

   Optional parameters: cose-type

   オプションのパラメーター: cose-type

   Encoding considerations: binary

   エンコーディングの考慮事項:バイナリー

   Security considerations: See the Security Considerations section
   of RFC 8152.

   セキュリティーに関する考慮事項: RFC 8152 のセキュリティー考慮事項セクションを参照してください。

   Interoperability considerations: N/A

   相互運用性に関する考慮事項:不適用(N/A)

   Published specification: RFC 8152

   Published specification: RFC 8152

   Applications that use this media type: IoT applications sending
   security content over HTTP(S) transports.

   このメディアタイプを使用するアプリケーション: HTTP(S)トランスポート上でセキュリティーコンテンツを送信するIoTアプリケーション。

   Fragment identifier considerations: N/A

   フラグメント識別子に関する考慮事項:該当なし

   Additional information:

   追加情報:

   *  Deprecated alias names for this type: N/A

   *  このタイプに対する非推奨のエイリアス名: N/A

   *  Magic number(s): N/A

    * マジックナンバー: 不適用

   *  File extension(s): cbor

   *  ファイルの拡張子: cbor

   *  Macintosh file type code(s): N/A

   * Macintoshのファイルタイプコード:ありません

   Person & email address to contact for further information:
   iesg@ietf.org

    さらに情報が必要な場合に連絡するための個人とメールアドレス:
   iesg@ietf.org

   Intended usage: COMMON

   使用目的:共通

   Restrictions on usage: N/A

   使用制限:N/A

   Author: Jim Schaad, ietf@augustcellars.com
   Change Controller: IESG

   Author: Jim Schaad, ietf@augustcellars.com
   Change Controller: IESG
   著者:Jim Schaad, ietf@augustcellars.com
   変更管理者:IESG

   Provisional registration?  No

仮登録はありませんか?

This section registers the 'application/cose-key' and 'application/ cose-key-set' media types in the "Media Types" registry. These media types are used to indicate, respectively, that content is a COSE_Key or COSE_KeySet object.

このセクションでは、「Media Types」レジストリにおいて、'application/cose-key'および'application/cose-key-set'メディアタイプが登録されます。これらのメディアタイプは、それぞれ、コンテンツがCOSE_KeyまたはCOSE_KeySetオブジェクトであることを示すために使用されます。

The template for registering 'application/cose-key' is:

'application/cose-key'を登録するためのテンプレートは次の通りです:

   Type name: application

   タイプ名: application

   Subtype name: cose-key

   サブタイプ名:cose-key

   Required parameters: N/A

   必要なパラメーター:なし

   Optional parameters: N/A

   オプションのパラメーター: N/A

   Encoding considerations: binary

   エンコードに関する考慮事項:バイナリー

   Security considerations: See the Security Considerations section
   of RFC 8152.

   セキュリティーに関する考慮事項:RFC 8152のセキュリティーに関する考慮事項セクションを参照してください。

   Interoperability considerations: N/A

   互換性に関する考慮事項:なし

   Published specification: RFC 8152

   公開仕様書: RFC 8152

   Applications that use this media type: Distribution of COSE based
   keys for IoT applications.

    このメディアタイプを使用するアプリケーション:IoTアプリケーション向けのCOSEベースのキーの配布。

   Fragment identifier considerations: N/A

   URI フラグメント識別子に関する考慮事項: 不要

   Additional information:

   追加情報:

   *  Deprecated alias names for this type: N/A

   *  このタイプの非推奨のエイリアス名: なし

   *  Magic number(s): N/A

   * 魔法の数字:該当なし

   *  File extension(s): cbor

   *  ファイルの拡張子: cbor

   *  Macintosh file type code(s): N/A

   *  Macintoshのファイルタイプコード:該当なし

   Person & email address to contact for further information:
   iesg@ietf.org
   Intended usage: COMMON

   追加情報のための連絡先:
   iesg@ietf.org
   意図された使用方法: COMMON

   Restrictions on usage: N/A

   使用制限:該当なし

   Author: Jim Schaad, ietf@augustcellars.com

   作者:Jim Schaad, ietf@augustcellars.com

   Change Controller: IESG

   変更コントローラー:IESG

   Provisional registration?  No

   仮登録?  いいえ

The template for registering 'application/cose-key-set' is:

「application/cose-key-set」を登録するためのテンプレートは以下の通りです:

   Type name: application

   タイプ名: アプリケーション

   Subtype name: cose-key-set

   サブタイプ名:cose-key-set

   Required parameters: N/A

   必須のパラメーター:該当なし

   Optional parameters: N/A

   オプションのパラメーター:該当なし

   Encoding considerations: binary

   エンコーディングの考慮事項: バイナリー

   Security considerations: See the Security Considerations section
   of RFC 8152.

   セキュリティーに関する考慮事項:RFC 8152の「セキュリティーに関する考慮事項」セクションを参照してください。

   Interoperability considerations: N/A

   相互運用性に関する考慮事項:なし

   Published specification: RFC 8152

   公開された仕様書:RFC 8152

   Applications that use this media type: Distribution of COSE based
   keys for IoT applications.

   このメディアタイプを使用するアプリケーション:IoTアプリケーション向けのCOSEベースのキーの配布。

   Fragment identifier considerations: N/A

   フラグメント識別子に関する考慮事項:該当なし

   Additional information:

   付加情報:

   *  Deprecated alias names for this type: N/A

   *  このタイプに対する非推奨の別名: なし

   *  Magic number(s): N/A

   *  マジックナンバー:N/A

   *  File extension(s): cbor

   *  File extension(s): cbor
   * ファイル拡張子:cbor

   *  Macintosh file type code(s): N/A

   *  Macintoshファイルタイプコード:なし

   Person & email address to contact for further information:
   iesg@ietf.org

   さらなる情報に関しては、連絡するための担当者と電子メールアドレス:
   iesg@ietf.org

   Intended usage: COMMON
   Restrictions on usage: N/A

   予定された使用法: COMMON
   使用制限: N/A

   Author: Jim Schaad, ietf@augustcellars.com

   著者:Jim Schaad、ietf@augustcellars.com

   Change Controller: IESG

   変更コントローラー:IESG

   Provisional registration?  No

   仮登録?  いいえ

IANA has added the following entries to the "CoAP Content-Formats" registry.

IANAは「CoAP Content-Formats」レジストリに以下のエントリを追加しました。

Media Type Encoding ID Reference
application/cose; cose-type="cose- 98 [RFC8152]
sign"
application/cose; cose-type="cose- 18 [RFC8152]
sign1"
application/cose; cose-type="cose- 96 [RFC8152]
encrypt"
application/cose; cose-type="cose- 16 [RFC8152]
encrypt0"
application/cose; cose-type="cose- 97 [RFC8152]
mac"
application/cose; cose-type="cose- 17 [RFC8152]
mac0"
application/cose-key 101 [RFC8152]
application/cose-key-set 102 [RFC8152]

メディア型 エンコーディング ID 参照
application/cose; cose-type="cose- 98 [RFC8152]
sign"
application/cose; cose-type="cose- 18 [RFC8152]
sign1"
application/cose; cose-type="cose- 96 [RFC8152]
encrypt"
application/cose; cose-type="cose- 16 [RFC8152]
encrypt0"
application/cose; cose-type="cose- 97 [RFC8152]
mac"
application/cose; cose-type="cose- 17 [RFC8152]
mac0"
application/cose-key 101 [RFC8152]
application/cose-key-set 102 [RFC8152]

               Table 26: CoAP Content-Formats for COSE

               テーブル26: COSEのCoAPコンテンツフォーマット

All of the IANA registries established in this document are defined as expert review. This section gives some general guidelines for what the experts should be looking for, but they are being designated as experts for a reason, so they should be given substantial latitude.

このドキュメントで設定されたすべてのIANAレジストリは、専門家による審査によって定義されます。このセクションでは、専門家が何を探すべきかについて一般的なガイドラインが示されていますが、彼らは理由があって専門家として指定されているため、かなりの裁量を与えるべきです。

Expert reviewers should take into consideration the following points:

専門の査読者は、以下の点を考慮すべきです:

  • Point squatting should be discouraged. Reviewers are encouraged to get sufficient information for registration requests to ensure that the usage is not going to duplicate one that is already registered, and that the point is likely to be used in deployments. The zones tagged as private use are intended for testing purposes and closed environments; code points in other ranges should not be assigned for testing.
  • ポイントの使用がすでに登録されているものと重複しないこと、およびそのポイントが展開で使用される可能性があることを確認するため、登録要求のための十分な情報を入手するようにレビューアが推奨されます。ポイント乗っ取りは避けるべきです。プライベート利用としてタグ付けされたゾーンは、テスト目的や閉じた環境向けに予約されており、他の範囲のコードポイントはテスト用に割り当てるべきではありません。
  • Specifications are required for the standards track range of point assignment. Specifications should exist for specification required ranges, but early assignment before a specification is available is considered to be permissible. Specifications are needed for the first-come, first-serve range if they are expected to be used outside of closed environments in an interoperable way. When specifications are not provided, the description provided needs to have sufficient information to identify what the point is being used for.
  • 規格トラックのポイント割り当てには仕様が必要です。仕様が必要な範囲には仕様が存在すべきですが、仕様が利用可能でない場合は、早期割り当ては許容されるものとされています。ファーストカム・ファーストサーブの範囲で相互運用可能に使用されることが期待される場合には、仕様が必要です。仕様が提供されていない場合、提供される説明にはポイントの使用目的を特定するために十分な情報が必要です。
  • Experts should take into account the expected usage of fields when approving point assignment. The fact that there is a range for standards track documents does not mean that a standards track document cannot have points assigned outside of that range. The length of the encoded value should be weighed against how many code points of that length are left, the size of device it will be used on, and the number of code points left that encode to that size.
  • 専門家は、ポイントの割り当てを承認する際に、フィールドの予想使用法を考慮すべきです。標準トラックドキュメントの範囲があるという事実は、その範囲外のポイントが割り当てられないという意味ではありません。エンコードされた値の長さは、その長さのコードポイントが残っている数、使用するデバイスのサイズ、そのサイズにエンコードされる残りのコードポイント数と比較して考慮されるべきです。
  • When algorithms are registered, vanity registrations should be discouraged. One way to do this is to require registrations to provide additional documentation on security analysis of the algorithm. Another thing that should be considered is requesting an opinion on the algorithm from the Crypto Forum Research Group (CFRG). Algorithms that do not meet the security requirements of the community and the messages structures should not be registered.
  • アルゴリズムが登録される場合、自己満足のための登録は避けるべきです。これを実現する方法の一つは、アルゴリズムのセキュリティー解析に関する追加の文書提出を要求することです。また、Crypto Forum Research Group (CFRG)からのアルゴリズムに関する意見を求めることも検討されるべきですコミュニティとメッセージの構造のセキュリティー要件を満たさないアルゴリズムは登録されるべきではありません

There are a number of security considerations that need to be taken into account by implementers of this specification. The security considerations that are specific to an individual algorithm are placed next to the description of the algorithm. While some considerations have been highlighted here, additional considerations may be found in the documents listed in the references.

この仕様を実装する者は、考慮すべきセキュリティー上の検討事項がいくつか存在します。個別のアルゴリズムに特有のセキュリティー上の検討事項は、アルゴリズムの説明の隣に配置されます。ここで強調されている検討事項もありますが、追加の検討事項は参考文献にリストされている文書で見つけることができるでしょう。

Implementations need to protect the private key material for any individuals. There are some cases in this document that need to be highlighted on this issue.

実装は、個人の秘密鍵情報を保護する必要があります。このドキュメントには、この問題について強調される必要があるいくつかのケースがあります。

  • Using the same key for two different algorithms can leak information about the key. It is therefore recommended that keys be restricted to a single algorithm.
  • 同じ鍵を2つの異なるアルゴリズムで使用すると、鍵に関する情報が漏れる可能性があります。そのため、鍵は単一のアルゴリズムに制限することが推奨されています。
  • Use of 'direct' as a recipient algorithm combined with a second recipient algorithm exposes the direct key to the second recipient.
  • 2つ目の受信者アルゴリズムと組み合わせて「direct」を受信者アルゴリズムとして使用することにより、2つ目の受信者に直接鍵が露出します。
  • Several of the algorithms in this document have limits on the number of times that a key can be used without leaking information about the key.
  • このドキュメントのいくつかのアルゴリズムは、キーが情報を漏洩せずに使用できる回数に制限を設けています。

The use of ECDH and direct plus KDF (with no key wrap) will not directly lead to the private key being leaked; the one way function of the KDF will prevent that. There is, however, a different issue that needs to be addressed. Having two recipients requires that the CEK be shared between two recipients. The second recipient therefore has a CEK that was derived from material that can be used for the weak proof of origin. The second recipient could create a message using the same CEK and send it to the first recipient; the first recipient would, for either static-static ECDH or direct plus KDF, make an assumption that the CEK could be used for proof of origin even though it is from the wrong entity. If the key wrap step is added, then no proof of origin is implied and this is not an issue.

ECDHおよび直接プラスKDF(キーラップなし)の使用によって、秘密鍵が直接漏洩することはありません。KDFの単方向関数がそれを防止するからです。ただし、対応が必要な別の問題があります。2つの受信者がいる場合、CEKは2つの受信者間で共有される必要があります。したがって、2番目の受信者は、弱い証明のために使用できる素材から派生したCEKを持っています。2番目の受信者は、同じCEKを使用してメッセージを作成し、最初の受信者に送信することができます。最初の受信者は、静的-静的ECDHまたは直接プラスKDFのどちらの場合も、CEKが正しい実体からではないものであっても、証明のためにCEKを使用できるという前提を立てるでしょう。キーラップステップが追加された場合、証明の必要性は示されず、これは問題ではありません。

Although it has been mentioned before, the use of a single key for multiple algorithms has been demonstrated in some cases to leak information about a key, provide the opportunity for attackers to forge integrity tags, or gain information about encrypted content. Binding a key to a single algorithm prevents these problems. Key creators and key consumers are strongly encouraged not only to create new keys for each different algorithm, but to include that selection of algorithm in any distribution of key material and strictly enforce the matching of algorithms in the key structure to algorithms in the message structure. In addition to checking that algorithms are correct, the key form needs to be checked as well. Do not use an 'EC2' key where an 'OKP' key is expected.

以前にも言及されているが、複数のアルゴリズムに対して単一のキーを使用することは、キーに関する情報が漏洩する、攻撃者が整合性タグを偽造する、または暗号化された内容に関する情報を入手する機会を提供する場合があることが示されている。キーを単一のアルゴリズムにバインドすることで、これらの問題を防止することができる。キーの作成者とキーの利用者は、異なるアルゴリズムごとに新しいキーを作成するだけでなく、アルゴリズムの選択をキー素材の配布に含め、キーの構造とメッセージの構造の間でアルゴリズムの一致を厳密に強制することが強く推奨される。アルゴリズムが正しいことを確認するだけでなく、キーの形式もチェックする必要がある。'OKP' キーが期待される場所で 'EC2' キーを使用しないでください。

Before using a key for transmission, or before acting on information received, a trust decision on a key needs to be made. Is the data or action something that the entity associated with the key has a right to see or a right to request? A number of factors are associated with this trust decision. Some of the ones that are highlighted here are:

送信のためのキーを使用する前、または受信した情報に対して行動する前に、キーに関する信頼判断を行う必要があります。データやアクションは、キーに関連するエンティティが見る権限や要求する権限を持っているものでしょうか?この信頼判断には、いくつかの要素が関連しています。ここで強調されている要素のいくつかは、以下の通りです:

  • What are the permissions associated with the key owner?
  • キー所有者に関連する権限は何ですか?
  • Is the cryptographic algorithm acceptable in the current context?
  • 現在のコンテキストでの暗号アルゴリズムは受け入れ可能ですか?
  • Have the restrictions associated with the key, such as algorithm or freshness, been checked and are they correct?
  • キーに関連する制限(アルゴリズムや鮮度など)は確認され、正しいですか?
  • Is the request something that is reasonable, given the current state of the application?
  • 現在のアプリケーションの状態を考慮して、リクエストが合理的なものであるかどうかですか?
  • Have any security considerations that are part of the message been enforced (as specified by the application or 'crit' parameter)?
  • メッセージの一部であるセキュリティーに関する考慮事項が、アプリケーションや 'crit' パラメーターで指定されたとおりに適用されていますか?

There are a large number of algorithms presented in this document that use nonce values. For all of the nonces defined in this document, there is some type of restriction on the nonce being a unique value either for a key or for some other conditions. In all of these cases, there is no known requirement on the nonce being both unique and unpredictable; under these circumstances, it's reasonable to use a counter for creation of the nonce. In cases where one wants the pattern of the nonce to be unpredictable as well as unique, one can use a key created for that purpose and encrypt the counter to produce the nonce value.

このドキュメントでは、ノンス値を使用する大量のアルゴリズムが提案されています。このドキュメントで定義されているすべてのノンスには、ノンスがキーまたは他の条件のために一意の値である制約があります。これらのすべての場合において、ノンスが一意であり予測不可能である必要性は知られていません。そのような状況では、ノンスの作成にカウンタを使用することは合理的です。ノンスのパターンが予測不可能かつ一意であることを望む場合には、その目的のために作成されたキーを使用し、カウンタを暗号化してノンス値を生成することができます。

One area that has been starting to get exposure is doing traffic analysis of encrypted messages based on the length of the message. This specification does not provide for a uniform method of providing padding as part of the message structure. An observer can distinguish between two different strings (for example, 'YES' and 'NO') based on the length for all of the content encryption algorithms that are defined in this document. This means that it is up to the applications to document how content padding is to be done in order to prevent or discourage such analysis. (For example, the strings could be defined as 'YES' and 'NO '.)

暗号化メッセージのトラフィック解析に基づくメッセージの長さに関する露出が始まりつつある領域の1つは、メッセージ構造の一部としてパディングを提供するための統一された方法を提供しないことです。この仕様では、このドキュメントで定義されているすべてのコンテンツ暗号化アルゴリズムに対して、長さに基づいて2つの異なる文字列(例えば、「YES」と「NO」)を観察者が区別できます。これは、トラフィック解析を防ぐために、アプリケーションがどのようにコンテンツのパディングを行うかを文書化することがアプリケーションの責任であることを意味します(例えば、文字列を「YES」と「NO 」と定義することができます)。

References

Normative References

[AES-GCM]
"Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC", DOI None, , <https://csrc.nist.gov/publications/nistpubs/800- 38D/SP-800-38D.pdf>
[COAP.Formats]
"Constrained RESTful Environments (CoRE) Parameters", <http://www.iana.org/assignments/core-parameters/>
[DSS]
"Digital Signature Standard (DSS)", FIPS PUB None, DOI None, , <http://nvlpubs.nist.gov/nistpubs/FIPS/ NIST.FIPS.186-4.pdf>
[MAC]
"Computer Data Authentication", FIPS PUB None, , <http://csrc.nist.gov/publications/fips/fips113/ fips113.html>
[RFC2104]
"HMAC: Keyed- Hashing for Message Authentication", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc2104>
[RFC2119]
"Key words for use in RFCs to Indicate Requirement Levels", BCP None, RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc2119>
[RFC3394]
"Advanced Encryption Standard (AES) Key Wrap Algorithm", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc3394>
[RFC3610]
"Counter with CBC-MAC (CCM)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc3610>
[RFC5869]
"HMAC-based Extract-and-Expand Key Derivation Function (HKDF)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc5869>
[RFC6090]
"Fundamental Elliptic Curve Cryptography Algorithms", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc6090>
[RFC6979]
"Deterministic Usage of the Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc6979>
[RFC7049]
"Concise Binary Object Representation (CBOR)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7049>
[RFC7539]
"ChaCha20 and Poly1305 for IETF Protocols", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7539>
[RFC7748]
"Elliptic Curves for Security", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7748>
[RFC8032]
"Edwards-Curve Digital Signature Algorithm (EdDSA)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc8032>
[RFC8174]
"Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP None, RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc8174>
[SEC1]
"SEC 1: Elliptic Curve Cryptography", , <http://www.secg.org/sec1-v2.pdf>

Informative References

[CDDL]
"CBOR data definition language (CDDL): a notational convention to express CBOR data structures", ,
[OSCOAP]
"Object Security of CoAP (OSCOAP)", ,
[PVSig]
"Formal Security Proofs for a Signature Scheme with Partial Message Recovery", DOI None, ,
[RFC2633]
"S/MIME Version 3 Message Specification", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc2633>
[RFC4231]
"Identifiers and Test Vectors for HMAC-SHA- 224, HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc4231>
[RFC4262]
"X.509 Certificate Extension for Secure/ Multipurpose Internet Mail Extensions (S/MIME) Capabilities", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc4262>
[RFC4493]
"The AES-CMAC Algorithm", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc4493>
[RFC4949]
"Internet Security Glossary, Version 2", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc4949>
[RFC5116]
"An Interface and Algorithms for Authenticated Encryption", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc5116>
[RFC5480]
"Elliptic Curve Cryptography Subject Public Key Information", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc5480>
[RFC5652]
"Cryptographic Message Syntax (CMS)", STD None, RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc5652>
[RFC5751]
"Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 3.2 Message Specification", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc5751>
[RFC5752]
"Multiple Signatures in Cryptographic Message Syntax (CMS)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc5752>
[RFC5990]
"Use of the RSA-KEM Key Transport Algorithm in the Cryptographic Message Syntax (CMS)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc5990>
[RFC6151]
"Updated Security Considerations for the MD5 Message-Digest and the HMAC-MD5 Algorithms", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc6151>
[RFC6838]
"Media Type Specifications and Registration Procedures", BCP None, RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc6838>
[RFC7159]
"The JavaScript Object Notation (JSON) Data Interchange Format", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7159>
[RFC7252]
"The Constrained Application Protocol (CoAP)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7252>
[RFC7515]
"JSON Web Signature (JWS)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7515>
[RFC7516]
"JSON Web Encryption (JWE)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7516>
[RFC7517]
"JSON Web Key (JWK)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7517>
[RFC7518]
"JSON Web Algorithms (JWA)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7518>
[RFC8017]
"PKCS #1: RSA Cryptography Specifications Version 2.2", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc8017>
[RFC8018]
"PKCS #5: Password-Based Cryptography Specification Version 2.1", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc8018>
[RFC8126]
"Guidelines for Writing an IANA Considerations Section in RFCs", BCP None, RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc8126>
[SP800-56A]
"Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography", DOI None, , <http://nvlpubs.nist.gov/nistpubs/SpecialPublications/ NIST.SP.800-56Ar2.pdf>
[W3C.WebCrypto]
"Web Cryptography API", , <https://www.w3.org/TR/WebCryptoAPI/>

References

Normative References

[AES-GCM]
"Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC", DOI None, , <https://csrc.nist.gov/publications/nistpubs/800- 38D/SP-800-38D.pdf>
[COAP.Formats]
"Constrained RESTful Environments (CoRE) Parameters", <http://www.iana.org/assignments/core-parameters/>
[DSS]
"Digital Signature Standard (DSS)", FIPS PUB None, DOI None, , <http://nvlpubs.nist.gov/nistpubs/FIPS/ NIST.FIPS.186-4.pdf>
[MAC]
"Computer Data Authentication", FIPS PUB None, , <http://csrc.nist.gov/publications/fips/fips113/ fips113.html>
[RFC2104]
"HMAC: Keyed- Hashing for Message Authentication", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc2104>
[RFC2119]
"Key words for use in RFCs to Indicate Requirement Levels", BCP None, RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc2119>
[RFC3394]
"Advanced Encryption Standard (AES) Key Wrap Algorithm", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc3394>
[RFC3610]
"Counter with CBC-MAC (CCM)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc3610>
[RFC5869]
"HMAC-based Extract-and-Expand Key Derivation Function (HKDF)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc5869>
[RFC6090]
"Fundamental Elliptic Curve Cryptography Algorithms", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc6090>
[RFC6979]
"Deterministic Usage of the Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc6979>
[RFC7049]
"Concise Binary Object Representation (CBOR)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7049>
[RFC7539]
"ChaCha20 and Poly1305 for IETF Protocols", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7539>
[RFC7748]
"Elliptic Curves for Security", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7748>
[RFC8032]
"Edwards-Curve Digital Signature Algorithm (EdDSA)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc8032>
[RFC8174]
"Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP None, RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc8174>
[SEC1]
"SEC 1: Elliptic Curve Cryptography", , <http://www.secg.org/sec1-v2.pdf>

Informative References

[CDDL]
"CBOR data definition language (CDDL): a notational convention to express CBOR data structures", ,
[OSCOAP]
"Object Security of CoAP (OSCOAP)", ,
[PVSig]
"Formal Security Proofs for a Signature Scheme with Partial Message Recovery", DOI None, ,
[RFC2633]
"S/MIME Version 3 Message Specification", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc2633>
[RFC4231]
"Identifiers and Test Vectors for HMAC-SHA- 224, HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc4231>
[RFC4262]
"X.509 Certificate Extension for Secure/ Multipurpose Internet Mail Extensions (S/MIME) Capabilities", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc4262>
[RFC4493]
"The AES-CMAC Algorithm", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc4493>
[RFC4949]
"Internet Security Glossary, Version 2", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc4949>
[RFC5116]
"An Interface and Algorithms for Authenticated Encryption", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc5116>
[RFC5480]
"Elliptic Curve Cryptography Subject Public Key Information", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc5480>
[RFC5652]
"Cryptographic Message Syntax (CMS)", STD None, RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc5652>
[RFC5751]
"Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 3.2 Message Specification", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc5751>
[RFC5752]
"Multiple Signatures in Cryptographic Message Syntax (CMS)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc5752>
[RFC5990]
"Use of the RSA-KEM Key Transport Algorithm in the Cryptographic Message Syntax (CMS)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc5990>
[RFC6151]
"Updated Security Considerations for the MD5 Message-Digest and the HMAC-MD5 Algorithms", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc6151>
[RFC6838]
"Media Type Specifications and Registration Procedures", BCP None, RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc6838>
[RFC7159]
"The JavaScript Object Notation (JSON) Data Interchange Format", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7159>
[RFC7252]
"The Constrained Application Protocol (CoAP)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7252>
[RFC7515]
"JSON Web Signature (JWS)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7515>
[RFC7516]
"JSON Web Encryption (JWE)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7516>
[RFC7517]
"JSON Web Key (JWK)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7517>
[RFC7518]
"JSON Web Algorithms (JWA)", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc7518>
[RFC8017]
"PKCS #1: RSA Cryptography Specifications Version 2.2", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc8017>
[RFC8018]
"PKCS #5: Password-Based Cryptography Specification Version 2.1", RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc8018>
[RFC8126]
"Guidelines for Writing an IANA Considerations Section in RFCs", BCP None, RFC None, DOI None, , <http://www.rfc-editor.org/info/rfc8126>
[SP800-56A]
"Recommendation for Pair-Wise Key Establishment Schemes Using Discrete Logarithm Cryptography", DOI None, , <http://nvlpubs.nist.gov/nistpubs/SpecialPublications/ NIST.SP.800-56Ar2.pdf>
[W3C.WebCrypto]
"Web Cryptography API", , <https://www.w3.org/TR/WebCryptoAPI/>

A portion of the working group has expressed a strong desire to relax the rule that the algorithm identifier be required to appear in each level of a COSE object. There are two basic reasons that have been advanced to support this position. First, the resulting message will be smaller if the algorithm identifier is omitted from the most common messages in a CoAP environment. Second, there is a potential bug that will arise if full checking is not done correctly between the different places that an algorithm identifier could be placed (the message itself, an application statement, the key structure that the sender possesses, and the key structure the recipient possesses).

動作グループの一部は、COSEオブジェクトの各レベルにアルゴリズム識別子が必要であるというルールを緩和することを強く希望しています。この立場を支持するためには、2つの基本的な理由があります。まず、CoAP環境で最も一般的なメッセージからアルゴリズム識別子を省略すると、メッセージのサイズが小さくなります。さらに、アルゴリズム識別子が配置される異なる場所(メッセージ自体、アプリケーションの文、送信者が所有するキー構造、受信者が所有するキー構造)間で正確な完全なチェックが行われない場合に発生する潜在的なバグがあります。

This appendix lays out how such a change can be made and the details that an application needs to specify in order to use this option. Two different sets of details are specified: those needed to omit an algorithm identifier and those needed to use a variant on the counter signature attribute that contains no attributes about itself.

この付録では、このオプションを使用するためにアプリケーションが指定する必要がある変更の方法と詳細について説明します。2つの異なる詳細セットが指定されています:アルゴリズム識別子を省略するために必要な詳細と、自身に関する属性を含まないカウンタシグネチャ属性の変種を使用するために必要な詳細です。

In this section, three sets of recommendations are laid out. The first set of recommendations apply to having an implicit algorithm identified for a single layer of a COSE object. The second set of recommendations apply to having multiple implicit algorithms identified for multiple layers of a COSE object. The third set of recommendations apply to having implicit algorithms for multiple COSE object constructs.

このセクションでは、3つの推奨事項セットが示されています。最初の推奨事項セットは、COSEオブジェクトの単一のレイヤーに対して暗黙のアルゴリズムを特定する場合に適用されます。2番目の推奨事項セットは、COSEオブジェクトの複数のレイヤーに対して複数の暗黙のアルゴリズムを特定する場合に適用されます。3番目の推奨事項セットは、複数のCOSEオブジェクト構築に対して暗黙のアルゴリズムを特定する場合に適用されます。

The key words from RFC 2119 are deliberately not used here. This specification can provide recommendations, but it cannot enforce them.

RFC 2119のキーワードは故意に使用されていません。この仕様では推奨事項を提供することができますが、強制することはできません。

This set of recommendations applies to the case where an application is distributing a fixed algorithm along with the key information for use in a single COSE object. This normally applies to the smallest of the COSE objects, specifically COSE_Sign1, COSE_Mac0, and COSE_Encrypt0, but could apply to the other structures as well.

この一連の推奨事項は、アプリケーションが固定アルゴリズムをキー情報と一緒に配布し、単一のCOSEオブジェクトで使用する場合に適用されます。これは通常、COSEオブジェクトの中で最も小さいもの、具体的にはCOSE_Sign1、COSE_Mac0、COSE_Encrypt0に適用されますが、他の構造にも適用される可能性があります。

The following items should be taken into account:

以下の項目に留意する必要があります:

  • Applications need to list the set of COSE structures that implicit algorithms are to be used in. Applications need to require that the receipt of an explicit algorithm identifier in one of these structures will lead to the message being rejected. This requirement is stated so that there will never be a case where there is any ambiguity about the question of which algorithm should be used, the implicit or the explicit one. This applies even if the transported algorithm identifier is a protected attribute. This applies even if the transported algorithm is the same as the implicit algorithm.
  • アプリケーションは、暗黙のアルゴリズムが使用されるCOSE構造のセットをリスト化する必要があります。アプリケーションは、これらの構造のいずれかに明示的なアルゴリズム識別子が受信された場合に、メッセージの拒否が行われるよう要求する必要があります。この要件は、どのアルゴリズムが使用されるべきか、暗黙のアルゴリズムか明示的なアルゴリズムかに関して、いかなる曖昧さも生じないようにするために述べられています。これは、転送されるアルゴリズム識別子が保護された属性である場合でも適用されます。これは、転送されるアルゴリズムが暗黙のアルゴリズムと同じである場合でも適用されます。
  • Applications need to define the set of information that is to be considered to be part of a context when omitting algorithm identifiers. At a minimum, this would be the key identifier (if needed), the key, the algorithm, and the COSE structure it is used with. Applications should restrict the use of a single key to a single algorithm. As noted for some of the algorithms in this document, the use of the same key in different related algorithms can lead to leakage of information about the key, leakage about the data or the ability to perform forgeries.
  • アプリケーションは、アルゴリズム識別子を省略する際にコンテキストの一部と見なされる情報のセットを定義する必要があります。少なくとも、これにはキー識別子(必要な場合)、キー、アルゴリズム、およびそれが使用されるCOSE構造が含まれます。アプリケーションは、単一のキーを単一のアルゴリズムに制限する必要があります。このドキュメントの一部のアルゴリズムに関して指摘されているように、関連する異なるアルゴリズムで同じキーを使用することは、キーに関する情報の漏洩、データまたは偽造の可能性に関する情報の漏洩を引き起こす可能性があります。
  • In many cases, applications that make the algorithm identifier implicit will also want to make the context identifier implicit for the same reason. That is, omitting the context identifier will decrease the message size (potentially significantly depending on the length of the identifier). Applications that do this will need to describe the circumstances where the context identifier is to be omitted and how the context identifier is to be inferred in these cases. (An exhaustive search over all of the keys would normally not be considered to be acceptable.) An example of how this can be done is to tie the context to a transaction identifier. Both would be sent on the original message, but only the transaction identifier would need to be sent after that point as the context is tied into the transaction identifier. Another way would be to associate a context with a network address. All messages coming from a single network address can be assumed to be associated with a specific context. (In this case, the address would normally be distributed as part of the context.)
  • 多くの場合、アルゴリズム識別子を省略するアプリケーションでは、同じ理由でコンテキスト識別子も省略したいと考えることがあります。つまり、コンテキスト識別子を省略することでメッセージサイズが減少します(識別子の長さに応じて、大幅な削減になる可能性もあります)。これを行うアプリケーションでは、コンテキスト識別子が省略される状況や、これらの場合にコンテキスト識別子がどのように推論されるかを説明する必要があります(全てのキーを網羅的に検索することは通常許容されないとされます)。これを実現するための例として、コンテキストをトランザクション識別子に結び付ける方法が挙げられます。両者は元のメッセージで送信されますが、その後はトランザクション識別子のみが送信され、コンテキストはトランザクション識別子に結び付けられます。別の方法としては、ネットワークアドレスとコンテキストを関連付ける方法があります。単一のネットワークアドレスから送信されるすべてのメッセージは特定のコンテキストに関連付けられるものとみなされます(この場合、アドレスは通常、コンテキストの一部として配布されます)。
  • Applications cannot rely on key identifiers being unique unless they take significant efforts to ensure that they are computed in such a way as to create this guarantee. Even when an application does this, the uniqueness might be violated if the application is run in different contexts (i.e., with a different context provider) or if the system combines the security contexts from different applications together into a single store.
  • アプリケーションは、一意のキー識別子が作成されるように計算されることを保証するために、重要な努力をするまで、一意性に依存することはできません。アプリケーションがこれを行っても、異なるコンテキスト(つまり、異なるコンテキストプロバイダで実行する場合)でアプリケーションが実行される場合や、システムが異なるアプリケーションからのセキュリティーコンテキストを単一のストアに組み合わせる場合、一意性は侵害される可能性があります。
  • Applications should continue the practice of protecting the algorithm identifier. Since this is not done by placing it in the protected attributes field, applications should define an application-specific external data structure that includes this value. This external data field can be used as such for content encryption, MAC, and signature algorithms. It can be used in the SuppPrivInfo field for those algorithms that use a KDF to derive a key value. Applications may also want to protect other information that is part of the context structure as well. It should be noted that those fields, such as the key or a Base IV, are protected by virtue of being used in the cryptographic computation and do not need to be included in the external data field.
  • アプリケーションは、アルゴリズム識別子の保護の慣行を続ける必要があります。これは、保護属性フィールドに配置することによって行われないため、アプリケーションはこの値を含むアプリケーション固有の外部データ構造を定義する必要があります。この外部データフィールドは、コンテンツの暗号化、MAC、および署名アルゴリズムについて使用できます。キー値を導出するためにKDFを使用するアルゴリズムのSuppPrivInfoフィールドで使用することもできます。アプリケーションは、コンテキスト構造の一部である他の情報も保護したい場合があります。ただし、キーやベースIVなどのフィールドは、暗号計算に使用されるため保護されているため、外部データフィールドに含める必要はありません。

The second case is having multiple implicit algorithm identifiers specified for a multiple layer COSE object. An example of how this would work is the encryption context that an application specifies, which contains a content encryption algorithm, a key wrap algorithm, a key identifier, and a shared secret. The sender omits sending the algorithm identifier for both the content layer and the recipient layer leaving only the key identifier. The receiver then uses the key identifier to get the implicit algorithm identifiers.

第2のケースは、複数の階層COSEオブジェクトに対して複数の暗黙のアルゴリズム識別子が指定されている場合です。これがどのように機能するかの例は、アプリケーションが指定する暗号化コンテキストです。これには、コンテンツ暗号化アルゴリズム、キーラップアルゴリズム、キー識別子、および共有シークレットが含まれます。送信者はコンテンツ層と受信者層の両方のアルゴリズム識別子を省略し、キー識別子のみを残します。受信者はその後、キー識別子を使用して暗黙のアルゴリズム識別子を取得します。

The following additional items need to be taken into consideration:

以下の追加事項が考慮される必要があります:

  • Applications that want to support this will need to define a structure that allows for, and clearly identifies, both the COSE structure to be used with a given key and the structure and algorithm to be used for the secondary layer. The key for the secondary layer is computed as normal from the recipient layer.
  • この機能をサポートしたいアプリケーションは、与えられたキーで使用するためのCOSEの構造と、セカンダリレイヤーに使用する構造とアルゴリズムを明確に特定できる構造を定義する必要があります。セカンダリレイヤーのキーは、受信者レイヤーから通常通りに計算されます。

The third case is having multiple implicit algorithm identifiers, but targeted at potentially unrelated layers or different COSE objects. There are a number of different scenarios where this might be applicable. Some of these scenarios are:

3つ目のケースは、複数の暗黙のアルゴリズム識別子を持つことですが、これは関連性のないレイヤーまたは異なるCOSEオブジェクトを対象としています。 これが適用可能なさまざまなシナリオがあります。 これらのシナリオの一部は次のとおりです:

  • Two contexts are distributed as a pair. Each of the contexts is for use with a COSE_Encrypt message. Each context will consist of distinct secret keys and IVs and potentially even different algorithms. One context is for sending messages from party A to party B, and the second context is for sending messages from party B to party A. This means that there is no chance for a reflection attack to occur as each party uses different secret keys to send its messages; a message that is reflected back to it would fail to decrypt.
  • 2つのコンテキストはペアとして配布されます。各コンテキストはCOSE_Encryptメッセージの使用に適しています。各コンテキストには異なる秘密鍵と初期化ベクトル(IV)が含まれ、場合によっては異なるアルゴリズムも使用されます。1つ目のコンテキストはパーティAからパーティBへのメッセージの送信用であり、2つ目のコンテキストはパーティBからパーティAへのメッセージの送信用です。これにより、各パーティは異なる秘密鍵を使用してメッセージを送信するため、反射攻撃が発生する可能性はありません。メッセージが自身に反射された場合、それは復号化に失敗します。
  • Two contexts are distributed as a pair. The first context is used for encryption of the message, and the second context is used to place a counter signature on the message. The intention is that the second context can be distributed to other entities independently of the first context. This allows these entities to validate that the message came from an individual without being able to decrypt the message and see the content.
  • 二つのコンテキストはペアとして配布されます。最初のコンテキストはメッセージの暗号化に使用され、2番目のコンテキストはメッセージに対してカウンタ署名を行うために使用されます。意図は、2番目のコンテキストが最初のコンテキストとは独立して他の実体に配布できることです。これにより、これらの実体はメッセージが内容を解読せずに個人から送信されたものであることを検証することができます。
  • Two contexts are distributed as a pair. The first context contains a key for dealing with MACed messages, and the second context contains a key for dealing with encrypted messages. This allows for a unified distribution of keys to participants for different types of messages that have different keys, but where the keys may be used in a coordinated manner.
  • 2つのコンテキストが対として配布されます。最初のコンテキストには、MAC付きメッセージを処理するためのキーが含まれており、2番目のコンテキストには、暗号化されたメッセージを処理するためのキーが含まれています。これにより、異なる種類のメッセージに異なるキーがあるが、キーを調整して使用することができるように、参加者へのキーの一元的な配布が可能となります。

For these cases, the following additional items need to be considered:

これらの場合には、次の追加事項を考慮する必要があります:

  • Applications need to ensure that the multiple contexts stay associated. If one of the contexts is invalidated for any reason, all of the contexts associated with it should also be invalidated.
  • アプリケーションは、複数のコンテキストが関連付けられたままであることを保証する必要があります。もし1つのコンテキストが何らかの理由で無効になった場合、それに関連付けられているすべてのコンテキストも無効にされるべきです。

There is a group of people who want to have a counter signature parameter that is directly tied to the value being signed, and thus the authenticated and unauthenticated buckets can be removed from the message being sent. The focus on this is an even smaller size, as all of the information on the process of creating the counter signature is implicit rather than being explicitly carried in the message. This includes not only the algorithm identifier as presented above, but also items such as the key identification, which is always external to the signature structure. This means that the entities that are doing the validation of the counter signature are required to infer which key is to be used from context rather than being explicit. One way of doing this would be to presume that all data coming from a specific port (or to a specific URL) is to be validated by a specific key. (Note that this does not require that the key identifier be part of the value signed as it does not serve a cryptographic purpose. If the key validates the counter signature, then it should be presumed that the entity associated with that key produced the signature.)

直接署名に関連する対向署名パラメーターを持ちたい人々のグループが存在し、そのため、認証されたバケットと非認証されたバケットをメッセージから削除することができます。この場合、重点はさらに小さいサイズです。なぜなら、対向署名の作成プロセスのすべての情報がメッセージに明示的に含まれているのではなく、暗黙的に含まれているからです。これには、上記で示されているアルゴリズム識別子だけでなく、署名構造から常に外部にあるキー識別などの項目も含まれます。つまり、対向署名の検証を行うエンティティは、明示的ではなく、文脈から使用するキーを推測する必要があります。これを行う一つの方法は、特定のポートからのすべてのデータ(または特定のURLへのデータ)を特定のキーによって検証するものと推定することです。(なお、キー識別子が署名値の一部である必要はなく、それは暗号目的を果たしません。キーが対向署名を検証する場合、そのキーに関連するエンティティが署名を作成したと推定されるべきです。)

When computing the signature for the bare counter signature header, the same Sig_structure defined in Section 4.4 is used. The sign_protected field is omitted, as there is no protected header field in this counter signature header. The value of "CounterSignature0" is placed in the context field of the Sig_stucture.

「ベアカウンタ署名ヘッダーの署名を計算する場合、セクション4.4で定義されている同じSig_structureが使用されます。保護されたヘッダーフィールドはこのカウンタ署名ヘッダーには存在しないため、sign_protectedフィールドは省略されます。"CounterSignature0"の値はSig_structureのcontextフィールドに配置されます。」

Name Label Value Type Value Description
CounterSignature0 9 bstr Counter signature with implied signer and headers

名前 ラベル 値の種類 説明
カウンターサイン0 9 bstr 暗黙の署名者およびヘッダーとのカウンター署名

          Table 27: Header Parameter for CounterSignature0

          テーブル27:CounterSignature0のヘッダーパラメーター

All of the currently defined recipient algorithm classes only use two layers of the COSE_Encrypt structure. The first layer is the message content, and the second layer is the content key encryption. However, if one uses a recipient algorithm such as the RSA Key Encapsulation Mechanism (RSA-KEM) (see Appendix A of RSA-KEM [RFC5990]), then it makes sense to have three layers of the COSE_Encrypt structure.

現在定義されているすべての受信者アルゴリズムクラスは、COSE_Encrypt構造の2つのレイヤーのみを使用します。最初のレイヤーはメッセージの内容であり、2番目のレイヤーは内容キーの暗号化です。ただし、RSA Key Encapsulation Mechanism(RSA-KEM)(RFC5990の付録Aを参照)などの受信者アルゴリズムを使用する場合、COSE_Encrypt構造の3つのレイヤーを持つことは意味があります。

These layers would be:

これらのレイヤーは以下の通りです:

  • Layer 0: The content encryption layer. This layer contains the payload of the message.
  • レイヤー0:コンテンツ暗号化レイヤーです。このレイヤーにはメッセージのペイロードが含まれています。
  • Layer 1: The encryption of the CEK by a KEK.
  • レイヤー1:CEKのKEKによる暗号化。
  • Layer 2: The encryption of a long random secret using an RSA key and a key derivation function to convert that secret into the KEK.
  • レイヤー2:RSAキーとキー派生関数を使用して長いランダムな秘密の暗号化を行い、その秘密をKEKに変換します。

This is an example of what a triple layer message would look like. The message has the following layers:

これはトリプルレイヤーメッセージの例です。メッセージには以下のレイヤーがあります:

  • Layer 0: Has a content encrypted with AES-GCM using a 128-bit key.
  • レイヤー0:128ビットの鍵を使用してAES-GCMで暗号化されたコンテンツを持っています。
  • Layer 1: Uses the AES Key Wrap algorithm with a 128-bit key.
  • レイヤー1:AESキーラップアルゴリズムを128ビットのキーで使用します。
  • Layer 2: Uses ECDH Ephemeral-Static direct to generate the layer 1 key.
  • レイヤー2:ECDHエフェメラル-スタティックダイレクトを使用してレイヤー1キーを生成します。

In effect, this example is a decomposed version of using the ECDH-ES+A128KW algorithm.

実際に、この例は、ECDH-ES+A128KWアルゴリズムの使用の分解されたバージョンです。

Size of binary file is 183 bytes

バイナリーファイルのサイズは183バイトです。

96( [ / protected / h'a10101' / { \ alg \ 1:1 \ AES-GCM 128 \ } / , / unprotected / { / iv / 5:h'02d1f7e6f26c43d4868d87ce' }, / ciphertext / h'64f84d913ba60a76070a9a48f26e97e863e2852948658f0 811139868826e89218a75715b', / recipients / [ [ / protected / h'', / unprotected / { / alg / 1:-3 / A128KW / }, / ciphertext / h'dbd43c4e9d719c27c6275c67d628d493f090593db82 18f11', / recipients / [ [ / protected / h'a1013818' / { \ alg \ 1:-25 \ ECDH-ES + HKDF-256 \ } / , / unprotected / { / ephemeral / -1:{ / kty / 1:2, / crv / -1:1, / x / -2:h'b2add44368ea6d641f9ca9af308b4079aeb519f11 e9b8a55a600b21233e86e68', / y / -3:false }, / kid / 4:'meriadoc.brandybuck@buckland.example' }, / ciphertext / h'' ] ] ] ] ] )

96([/ protected / h'a10101' /{ \ alg \ 1:1 \ AES-GCM 128 \ } /、/ unprotected / {/ iv / 5:h'02d1f7e6f26c43d4868d87ce' }、/ ciphertext / h'64f84d913ba60a76070a9a48f26e97e863e2852948658f0811139868826e89218a75715b'、/ recipients / [ [/protected / h''、/unprotected / {/ alg / 1:-3 / A128KW / }、/ ciphertext / h'dbd43c4e9d719c27c6275c67d628d493f090593db8218f11'、/ recipients / [ [/protected / h'a1013818'/{\ alg \ 1:-25 \ ECDH-ES + HKDF-256 \ } /、/ unprotected / {/ ephemeral / -1:{/ kty / 1:2、/ crv / -1:1、/ x / -2:h'b2add44368ea6d641f9ca9af308b4079aeb519f11e9b8a55a600b21233e86e68'、/ y / -3:false }、/ kid / 4:'meriadoc.brandybuck@buckland.example' }、/ ciphertext / h'' ] ] ] ] ]

This appendix includes a set of examples that show the different features and message types that have been defined in this document. To make the examples easier to read, they are presented using the extended CBOR diagnostic notation (defined in [CDDL]) rather than as a binary dump.

この付録には、この文書で定義されたさまざまな機能やメッセージの種類を示す一連の例が含まれています。例を読みやすくするために、バイナリーダンプではなく、拡張CBOR診断表現([CDDL]で定義されています)を使用して表示されています。

A GitHub project has been created at <https://github.com/cose-wg/ Examples> that contains not only the examples presented in this document, but a more complete set of testing examples as well. Each example is found in a JSON file that contains the inputs used to create the example, some of the intermediate values that can be used in debugging the example and the output of the example presented in both a hex and a CBOR diagnostic notation format. Some of the examples at the site are designed failure testing cases; these are clearly marked as such in the JSON file. If errors in the examples in this document are found, the examples on GitHub will be updated, and a note to that effect will be placed in the JSON file.

A GitHub project has been created at <https://github.com/cose-wg/ Examples> that contains not only the examples presented in this document, but a more complete set of testing examples as well. Each example is found in a JSON file that contains the inputs used to create the example, some of the intermediate values that can be used in debugging the example and the output of the example presented in both a hex and a CBOR diagnostic notation format. Some of the examples at the site are designed failure testing cases; these are clearly marked as such in the JSON file. If errors in the examples in this document are found, the examples on GitHub will be updated, and a note to that effect will be placed in the JSON file.

As noted, the examples are presented using the CBOR's diagnostic notation. A Ruby-based tool exists that can convert between the diagnostic notation and binary. This tool can be installed with the command line:

As noted, the examples are presented using the CBOR's diagnostic notation. A Ruby-based tool exists that can convert between the diagnostic notation and binary. This tool can be installed with the command line:

gem install cbor-diag

gem install cbor-diag

The diagnostic notation can be converted into binary files using the following command line:

The diagnostic notation can be converted into binary files using the following command line:

diag2cbor.rb < inputfile > outputfile

diag2cbor.rb < inputfile > outputfile

The examples can be extracted from the XML version of this document via an XPath expression as all of the artwork is tagged with the attribute type='CBORdiag'. (Depending on the XPath evaluator one is using, it may be necessary to deal with &gt; as an entity.)

The examples can be extracted from the XML version of this document via an XPath expression as all of the artwork is tagged with the attribute type='CBORdiag'. (Depending on the XPath evaluator one is using, it may be necessary to deal with &gt; as an entity.)

//artwork[@type='CDDL']/text()

//artwork[@type='CDDL']/text()

This example uses the following:

This example uses the following:

  • Signature Algorithm: ECDSA w/ SHA-256, Curve P-256
  • Signature Algorithm: ECDSA w/ SHA-256, Curve P-256

Size of binary file is 103 bytes

Size of binary file is 103 bytes

98( [ / protected / h'', / unprotected / {}, / payload / 'This is the content.', / signatures / [ [ / protected / h'a10126' / { \ alg \ 1:-7 \ ECDSA 256 \ } / , / unprotected / { / kid / 4:'11' }, / signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb 5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b 98f53afd2fa0f30a' ] ] ] )

98( [ / protected / h'', / unprotected / {}, / payload / 'This is the content.', / signatures / [ [ / protected / h'a10126' / { \ alg \ 1:-7 \ ECDSA 256 \ } / , / unprotected / { / kid / 4:'11' }, / signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb 5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b 98f53afd2fa0f30a' ] ] ] )

This example uses the following:

This example uses the following:

  • Signature Algorithm: ECDSA w/ SHA-256, Curve P-256
  • Signature Algorithm: ECDSA w/ SHA-256, Curve P-256
  • Signature Algorithm: ECDSA w/ SHA-512, Curve P-521 Size of binary file is 277 bytes
  • Signature Algorithm: ECDSA w/ SHA-512, Curve P-521 Size of binary file is 277 bytes

98( [ / protected / h'', / unprotected / {}, / payload / 'This is the content.', / signatures / [ [ / protected / h'a10126' / { \ alg \ 1:-7 \ ECDSA 256 \ } / , / unprotected / { / kid / 4:'11' }, / signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb 5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b 98f53afd2fa0f30a' ], [ / protected / h'a1013823' / { \ alg \ 1:-36 } / , / unprotected / { / kid / 4:'bilbo.baggins@hobbiton.example' }, / signature / h'00a2d28a7c2bdb1587877420f65adf7d0b9a06635dd1 de64bb62974c863f0b160dd2163734034e6ac003b01e8705524c5c4ca479a952f024 7ee8cb0b4fb7397ba08d009e0c8bf482270cc5771aa143966e5a469a09f613488030 c5b07ec6d722e3835adb5b2d8c44e95ffb13877dd2582866883535de3bb03d01753f 83ab87bb4f7a0297' ] ] ] )

98( [ / protected / h'', / unprotected / {}, / payload / 'This is the content.', / signatures / [ [ / protected / h'a10126' / { \ alg \ 1:-7 \ ECDSA 256 \ } / , / unprotected / { / kid / 4:'11' }, / signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb 5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b 98f53afd2fa0f30a' ], [ / protected / h'a1013823' / { \ alg \ 1:-36 } / , / unprotected / { / kid / 4:'bilbo.baggins@hobbiton.example' }, / signature / h'00a2d28a7c2bdb1587877420f65adf7d0b9a06635dd1 de64bb62974c863f0b160dd2163734034e6ac003b01e8705524c5c4ca479a952f024 7ee8cb0b4fb7397ba08d009e0c8bf482270cc5771aa143966e5a469a09f613488030 c5b07ec6d722e3835adb5b2d8c44e95ffb13877dd2582866883535de3bb03d01753f 83ab87bb4f7a0297' ] ] ] )

This example uses the following:

This example uses the following:

  • Signature Algorithm: ECDSA w/ SHA-256, Curve P-256
  • Signature Algorithm: ECDSA w/ SHA-256, Curve P-256
  • The same parameters are used for both the signature and the counter signature.
  • The same parameters are used for both the signature and the counter signature.

Size of binary file is 180 bytes

Size of binary file is 180 bytes

98( [ / protected / h'', / unprotected / { / countersign / 7:[ / protected / h'a10126' / { \ alg \ 1:-7 \ ECDSA 256 \ } / , / unprotected / { / kid / 4:'11' }, / signature / h'5ac05e289d5d0e1b0a7f048a5d2b643813ded50bc9e4 9220f4f7278f85f19d4a77d655c9d3b51e805a74b099e1e085aacd97fc29d72f887e 8802bb6650cceb2c' ] }, / payload / 'This is the content.', / signatures / [ [ / protected / h'a10126' / { \ alg \ 1:-7 \ ECDSA 256 \ } / , / unprotected / { / kid / 4:'11' }, / signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb 5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b 98f53afd2fa0f30a' ] ] ] )

98( [ / protected / h'', / unprotected / { / countersign / 7:[ / protected / h'a10126' / { \ alg \ 1:-7 \ ECDSA 256 \ } / , / unprotected / { / kid / 4:'11' }, / signature / h'5ac05e289d5d0e1b0a7f048a5d2b643813ded50bc9e4 9220f4f7278f85f19d4a77d655c9d3b51e805a74b099e1e085aacd97fc29d72f887e 8802bb6650cceb2c' ] }, / payload / 'This is the content.', / signatures / [ [ / protected / h'a10126' / { \ alg \ 1:-7 \ ECDSA 256 \ } / , / unprotected / { / kid / 4:'11' }, / signature / h'e2aeafd40d69d19dfe6e52077c5d7ff4e408282cbefb 5d06cbf414af2e19d982ac45ac98b8544c908b4507de1e90b717c3d34816fe926a2b 98f53afd2fa0f30a' ] ] ] )

This example uses the following:

This example uses the following:

  • Signature Algorithm: ECDSA w/ SHA-256, Curve P-256
  • Signature Algorithm: ECDSA w/ SHA-256, Curve P-256
  • There is a criticality marker on the "reserved" header parameter Size of binary file is 125 bytes
  • There is a criticality marker on the "reserved" header parameter Size of binary file is 125 bytes

98( [ / protected / h'a2687265736572766564f40281687265736572766564' / { "reserved":false, \ crit \ 2:[ "reserved" ] } / , / unprotected / {}, / payload / 'This is the content.', / signatures / [ [ / protected / h'a10126' / { \ alg \ 1:-7 \ ECDSA 256 \ } / , / unprotected / { / kid / 4:'11' }, / signature / h'3fc54702aa56e1b2cb20284294c9106a63f91bac658d 69351210a031d8fc7c5ff3e4be39445b1a3e83e1510d1aca2f2e8a7c081c7645042b 18aba9d1fad1bd9c' ] ] ] )

98( [ / protected / h'a2687265736572766564f40281687265736572766564' / { "reserved":false, \ crit \ 2:[ "reserved" ] } / , / unprotected / {}, / payload / 'This is the content.', / signatures / [ [ / protected / h'a10126' / { \ alg \ 1:-7 \ ECDSA 256 \ } / , / unprotected / { / kid / 4:'11' }, / signature / h'3fc54702aa56e1b2cb20284294c9106a63f91bac658d 69351210a031d8fc7c5ff3e4be39445b1a3e83e1510d1aca2f2e8a7c081c7645042b 18aba9d1fad1bd9c' ] ] ] )

This example uses the following:

This example uses the following:

  • Signature Algorithm: ECDSA w/ SHA-256, Curve P-256 Size of binary file is 98 bytes
  • Signature Algorithm: ECDSA w/ SHA-256, Curve P-256 Size of binary file is 98 bytes

18( [ / protected / h'a10126' / { \ alg \ 1:-7 \ ECDSA 256 \ } / , / unprotected / { / kid / 4:'11' }, / payload / 'This is the content.', / signature / h'8eb33e4ca31d1c465ab05aac34cc6b23d58fef5c083106c4 d25a91aef0b0117e2af9a291aa32e14ab834dc56ed2a223444547e01f11d3b0916e5 a4c345cacb36' ] )

18( [ / protected / h'a10126' / { \ alg \ 1:-7 \ ECDSA 256 \ } / , / unprotected / { / kid / 4:'11' }, / payload / 'This is the content.', / signature / h'8eb33e4ca31d1c465ab05aac34cc6b23d58fef5c083106c4 d25a91aef0b0117e2af9a291aa32e14ab834dc56ed2a223444547e01f11d3b0916e5 a4c345cacb36' ] )

This example uses the following:

This example uses the following:

  • CEK: AES-GCM w/ 128-bit key
  • CEK: AES-GCM w/ 128-bit key
  • Recipient class: ECDH Ephemeral-Static, Curve P-256 Size of binary file is 151 bytes
  • Recipient class: ECDH Ephemeral-Static, Curve P-256 Size of binary file is 151 bytes

96( [ / protected / h'a10101' / { \ alg \ 1:1 \ AES-GCM 128 \ } / , / unprotected / { / iv / 5:h'c9cf4df2fe6c632bf7886413' }, / ciphertext / h'7adbe2709ca818fb415f1e5df66f4e1a51053ba6d65a1a0 c52a357da7a644b8070a151b0', / recipients / [ [ / protected / h'a1013818' / { \ alg \ 1:-25 \ ECDH-ES + HKDF-256 \ } / , / unprotected / { / ephemeral / -1:{ / kty / 1:2, / crv / -1:1, / x / -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbf bf054e1c7b4d91d6280', / y / -3:true }, / kid / 4:'meriadoc.brandybuck@buckland.example' }, / ciphertext / h'' ] ] ] )

96( [ / protected / h'a10101' / { \ alg \ 1:1 \ AES-GCM 128 \ } / , / unprotected / { / iv / 5:h'c9cf4df2fe6c632bf7886413' }, / ciphertext / h'7adbe2709ca818fb415f1e5df66f4e1a51053ba6d65a1a0 c52a357da7a644b8070a151b0', / recipients / [ [ / protected / h'a1013818' / { \ alg \ 1:-25 \ ECDH-ES + HKDF-256 \ } / , / unprotected / { / ephemeral / -1:{ / kty / 1:2, / crv / -1:1, / x / -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbf bf054e1c7b4d91d6280', / y / -3:true }, / kid / 4:'meriadoc.brandybuck@buckland.example' }, / ciphertext / h'' ] ] ] )

This example uses the following:

This example uses the following:

  • CEK: AES-CCM w/ 128-bit key, truncate the tag to 64 bits
  • CEK: AES-CCM w/ 128-bit key, truncate the tag to 64 bits
  • Recipient class: Use HKDF on a shared secret with the following implicit fields as part of the context.
  • Recipient class: Use HKDF on a shared secret with the following implicit fields as part of the context.

   *  salt: "aabbccddeeffgghh"

   *  salt: "aabbccddeeffgghh"

   *  PartyU identity: "lighting-client"

   *  PartyU identity: "lighting-client"

   *  PartyV identity: "lighting-server"
   *  Supplementary Public Other: "Encryption Example 02"

   *  PartyV identity: "lighting-server"
   *  Supplementary Public Other: "Encryption Example 02"

Size of binary file is 91 bytes

Size of binary file is 91 bytes

96( [ / protected / h'a1010a' / { \ alg \ 1:10 \ AES-CCM-16-64-128 \ } / , / unprotected / { / iv / 5:h'89f52f65a1c580933b5261a76c' }, / ciphertext / h'753548a19b1307084ca7b2056924ed95f2e3b17006dfe93 1b687b847', / recipients / [ [ / protected / h'a10129' / { \ alg \ 1:-10 } / , / unprotected / { / salt / -20:'aabbccddeeffgghh', / kid / 4:'our-secret' }, / ciphertext / h'' ] ] ] )

96( [ / protected / h'a1010a' / { \ alg \ 1:10 \ AES-CCM-16-64-128 \ } / , / unprotected / { / iv / 5:h'89f52f65a1c580933b5261a76c' }, / ciphertext / h'753548a19b1307084ca7b2056924ed95f2e3b17006dfe93 1b687b847', / recipients / [ [ / protected / h'a10129' / { \ alg \ 1:-10 } / , / unprotected / { / salt / -20:'aabbccddeeffgghh', / kid / 4:'our-secret' }, / ciphertext / h'' ] ] ] )

This example uses the following:

This example uses the following:

  • CEK: AES-GCM w/ 128-bit key
  • CEK: AES-GCM w/ 128-bit key
  • Recipient class: ECDH Ephemeral-Static, Curve P-256 Size of binary file is 326 bytes
  • Recipient class: ECDH Ephemeral-Static, Curve P-256 Size of binary file is 326 bytes

96( [ / protected / h'a10101' / { \ alg \ 1:1 \ AES-GCM 128 \ } / , / unprotected / { / iv / 5:h'c9cf4df2fe6c632bf7886413', / countersign / 7:[ / protected / h'a1013823' / { \ alg \ 1:-36 } / , / unprotected / { / kid / 4:'bilbo.baggins@hobbiton.example' }, / signature / h'00929663c8789bb28177ae28467e66377da12302d7f9 594d2999afa5dfa531294f8896f2b6cdf1740014f4c7f1a358e3a6cf57f4ed6fb02f cf8f7aa989f5dfd07f0700a3a7d8f3c604ba70fa9411bd10c2591b483e1d2c31de00 3183e434d8fba18f17a4c7e3dfa003ac1cf3d30d44d2533c4989d3ac38c38b71481c c3430c9d65e7ddff' ] }, / ciphertext / h'7adbe2709ca818fb415f1e5df66f4e1a51053ba6d65a1a0 c52a357da7a644b8070a151b0', / recipients / [ [ / protected / h'a1013818' / { \ alg \ 1:-25 \ ECDH-ES + HKDF-256 \ } / , / unprotected / { / ephemeral / -1:{ / kty / 1:2, / crv / -1:1, / x / -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbf bf054e1c7b4d91d6280', / y / -3:true }, / kid / 4:'meriadoc.brandybuck@buckland.example' }, / ciphertext / h'' ] ] ] )

96( [ / protected / h'a10101' / { \ alg \ 1:1 \ AES-GCM 128 \ } / , / unprotected / { / iv / 5:h'c9cf4df2fe6c632bf7886413', / countersign / 7:[ / protected / h'a1013823' / { \ alg \ 1:-36 } / , / unprotected / { / kid / 4:'bilbo.baggins@hobbiton.example' }, / signature / h'00929663c8789bb28177ae28467e66377da12302d7f9 594d2999afa5dfa531294f8896f2b6cdf1740014f4c7f1a358e3a6cf57f4ed6fb02f cf8f7aa989f5dfd07f0700a3a7d8f3c604ba70fa9411bd10c2591b483e1d2c31de00 3183e434d8fba18f17a4c7e3dfa003ac1cf3d30d44d2533c4989d3ac38c38b71481c c3430c9d65e7ddff' ] }, / ciphertext / h'7adbe2709ca818fb415f1e5df66f4e1a51053ba6d65a1a0 c52a357da7a644b8070a151b0', / recipients / [ [ / protected / h'a1013818' / { \ alg \ 1:-25 \ ECDH-ES + HKDF-256 \ } / , / unprotected / { / ephemeral / -1:{ / kty / 1:2, / crv / -1:1, / x / -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbf bf054e1c7b4d91d6280', / y / -3:true }, / kid / 4:'meriadoc.brandybuck@buckland.example' }, / ciphertext / h'' ] ] ] )

This example uses the following:

This example uses the following:

  • CEK: AES-GCM w/ 128-bit key
  • CEK: AES-GCM w/ 128-bit key
  • Recipient class: ECDH static-Static, Curve P-256 with AES Key Wrap
  • Recipient class: ECDH static-Static, Curve P-256 with AES Key Wrap
  • Externally Supplied AAD: h'0011bbcc22dd44ee55ff660077'
  • Externally Supplied AAD: h'0011bbcc22dd44ee55ff660077'

Size of binary file is 173 bytes

Size of binary file is 173 bytes

96( [ / protected / h'a10101' / { \ alg \ 1:1 \ AES-GCM 128 \ } / , / unprotected / { / iv / 5:h'02d1f7e6f26c43d4868d87ce' }, / ciphertext / h'64f84d913ba60a76070a9a48f26e97e863e28529d8f5335 e5f0165eee976b4a5f6c6f09d', / recipients / [ [ / protected / h'a101381f' / { \ alg \ 1:-32 \ ECHD-SS+A128KW \ } / , / unprotected / { / static kid / -3:'peregrin.took@tuckborough.example', / kid / 4:'meriadoc.brandybuck@buckland.example', / U nonce / -22:h'0101' }, / ciphertext / h'41e0d76f579dbd0d936a662d54d8582037de2e366fd e1c62' ] ] ] )

96( [ / protected / h'a10101' / { \ alg \ 1:1 \ AES-GCM 128 \ } / , / unprotected / { / iv / 5:h'02d1f7e6f26c43d4868d87ce' }, / ciphertext / h'64f84d913ba60a76070a9a48f26e97e863e28529d8f5335 e5f0165eee976b4a5f6c6f09d', / recipients / [ [ / protected / h'a101381f' / { \ alg \ 1:-32 \ ECHD-SS+A128KW \ } / , / unprotected / { / static kid / -3:'peregrin.took@tuckborough.example', / kid / 4:'meriadoc.brandybuck@buckland.example', / U nonce / -22:h'0101' }, / ciphertext / h'41e0d76f579dbd0d936a662d54d8582037de2e366fd e1c62' ] ] ] )

This example uses the following:

This example uses the following:

  • CEK: AES-CCM w/ 128-bit key and a 64-bit tag Size of binary file is 52 bytes
  • CEK: AES-CCM w/ 128-bit key and a 64-bit tag Size of binary file is 52 bytes

16( [ / protected / h'a1010a' / { \ alg \ 1:10 \ AES-CCM-16-64-128 \ } / , / unprotected / { / iv / 5:h'89f52f65a1c580933b5261a78c' }, / ciphertext / h'5974e1b99a3a4cc09a659aa2e9e7fff161d38ce71cb45ce 460ffb569' ] )

16( [ / protected / h'a1010a' / { \ alg \ 1:10 \ AES-CCM-16-64-128 \ } / , / unprotected / { / iv / 5:h'89f52f65a1c580933b5261a78c' }, / ciphertext / h'5974e1b99a3a4cc09a659aa2e9e7fff161d38ce71cb45ce 460ffb569' ] )

This example uses the following:

This example uses the following:

  • CEK: AES-CCM w/ 128-bit key and a 64-bit tag
  • CEK: AES-CCM w/ 128-bit key and a 64-bit tag
  • Prefix for IV is 89F52F65A1C580933B52
  • Prefix for IV is 89F52F65A1C580933B52

Size of binary file is 41 bytes

Size of binary file is 41 bytes

16( [ / protected / h'a1010a' / { \ alg \ 1:10 \ AES-CCM-16-64-128 \ } / , / unprotected / { / partial iv / 6:h'61a7' }, / ciphertext / h'252a8911d465c125b6764739700f0141ed09192de139e05 3bd09abca' ] )

16( [ / protected / h'a1010a' / { \ alg \ 1:10 \ AES-CCM-16-64-128 \ } / , / unprotected / { / partial iv / 6:h'61a7' }, / ciphertext / h'252a8911d465c125b6764739700f0141ed09192de139e05 3bd09abca' ] )

This example uses the following:

This example uses the following:

  • MAC: AES-CMAC, 256-bit key, truncated to 64 bits
  • MAC: AES-CMAC, 256-bit key, truncated to 64 bits
  • Recipient class: direct shared secret Size of binary file is 57 bytes
  • Recipient class: direct shared secret Size of binary file is 57 bytes

97( [ / protected / h'a1010f' / { \ alg \ 1:15 \ AES-CBC-MAC-256//64 \ } / , / unprotected / {}, / payload / 'This is the content.', / tag / h'9e1226ba1f81b848', / recipients / [ [ / protected / h'', / unprotected / { / alg / 1:-6 / direct /, / kid / 4:'our-secret' }, / ciphertext / h'' ] ] ] )

97( [ / protected / h'a1010f' / { \ alg \ 1:15 \ AES-CBC-MAC-256//64 \ } / , / unprotected / {}, / payload / 'This is the content.', / tag / h'9e1226ba1f81b848', / recipients / [ [ / protected / h'', / unprotected / { / alg / 1:-6 / direct /, / kid / 4:'our-secret' }, / ciphertext / h'' ] ] ] )

This example uses the following:

This example uses the following:

  • MAC: HMAC w/SHA-256, 256-bit key
  • MAC: HMAC w/SHA-256, 256-bit key
  • Recipient class: ECDH key agreement, two static keys, HKDF w/ context structure
  • Recipient class: ECDH key agreement, two static keys, HKDF w/ context structure

Size of binary file is 214 bytes

Size of binary file is 214 bytes

97( [ / protected / h'a10105' / { \ alg \ 1:5 \ HMAC 256//256 \ } / , / unprotected / {}, / payload / 'This is the content.', / tag / h'81a03448acd3d305376eaa11fb3fe416a955be2cbe7ec96f012c99 4bc3f16a41', / recipients / [ [ / protected / h'a101381a' / { \ alg \ 1:-27 \ ECDH-SS + HKDF-256 \ } / , / unprotected / { / static kid / -3:'peregrin.took@tuckborough.example', / kid / 4:'meriadoc.brandybuck@buckland.example', / U nonce / -22:h'4d8553e7e74f3c6a3a9dd3ef286a8195cbf8a23d 19558ccfec7d34b824f42d92bd06bd2c7f0271f0214e141fb779ae2856abf585a583 68b017e7f2a9e5ce4db5' }, / ciphertext / h'' ] ] ] )

97( [ / protected / h'a10105' / { \ alg \ 1:5 \ HMAC 256//256 \ } / , / unprotected / {}, / payload / 'This is the content.', / tag / h'81a03448acd3d305376eaa11fb3fe416a955be2cbe7ec96f012c99 4bc3f16a41', / recipients / [ [ / protected / h'a101381a' / { \ alg \ 1:-27 \ ECDH-SS + HKDF-256 \ } / , / unprotected / { / static kid / -3:'peregrin.took@tuckborough.example', / kid / 4:'meriadoc.brandybuck@buckland.example', / U nonce / -22:h'4d8553e7e74f3c6a3a9dd3ef286a8195cbf8a23d 19558ccfec7d34b824f42d92bd06bd2c7f0271f0214e141fb779ae2856abf585a583 68b017e7f2a9e5ce4db5' }, / ciphertext / h'' ] ] ] )

This example uses the following:

This example uses the following:

  • MAC: AES-MAC, 128-bit key, truncated to 64 bits
  • MAC: AES-MAC, 128-bit key, truncated to 64 bits
  • Recipient class: AES Key Wrap w/ a pre-shared 256-bit key Size of binary file is 109 bytes
  • Recipient class: AES Key Wrap w/ a pre-shared 256-bit key Size of binary file is 109 bytes

97( [ / protected / h'a1010e' / { \ alg \ 1:14 \ AES-CBC-MAC-128//64 \ } / , / unprotected / {}, / payload / 'This is the content.', / tag / h'36f5afaf0bab5d43', / recipients / [ [ / protected / h'', / unprotected / { / alg / 1:-5 / A256KW /, / kid / 4:'018c0ae5-4d9b-471b-bfd6-eef314bc7037' }, / ciphertext / h'711ab0dc2fc4585dce27effa6781c8093eba906f227 b6eb0' ] ] ] )

97( [ / protected / h'a1010e' / { \ alg \ 1:14 \ AES-CBC-MAC-128//64 \ } / , / unprotected / {}, / payload / 'This is the content.', / tag / h'36f5afaf0bab5d43', / recipients / [ [ / protected / h'', / unprotected / { / alg / 1:-5 / A256KW /, / kid / 4:'018c0ae5-4d9b-471b-bfd6-eef314bc7037' }, / ciphertext / h'711ab0dc2fc4585dce27effa6781c8093eba906f227 b6eb0' ] ] ] )

This example uses the following:

This example uses the following:

  • MAC: HMAC w/ SHA-256, 128-bit key
  • MAC: HMAC w/ SHA-256, 128-bit key
  • Recipient class: Uses three different methods
  • Recipient class: Uses three different methods

   1.  ECDH Ephemeral-Static, Curve P-521, AES Key Wrap w/ 128-bit
       key

   1.  ECDH Ephemeral-Static, Curve P-521, AES Key Wrap w/ 128-bit
       key

   2.  AES Key Wrap w/ 256-bit key

   2.  AES Key Wrap w/ 256-bit key

Size of binary file is 309 bytes

Size of binary file is 309 bytes

97( [ / protected / h'a10105' / { \ alg \ 1:5 \ HMAC 256//256 \ } / , / unprotected / {}, / payload / 'This is the content.', / tag / h'bf48235e809b5c42e995f2b7d5fa13620e7ed834e337f6aa43df16 1e49e9323e', / recipients / [ [ / protected / h'a101381c' / { \ alg \ 1:-29 \ ECHD-ES+A128KW \ } / , / unprotected / { / ephemeral / -1:{ / kty / 1:2, / crv / -1:3, / x / -2:h'0043b12669acac3fd27898ffba0bcd2e6c366d53bc4db 71f909a759304acfb5e18cdc7ba0b13ff8c7636271a6924b1ac63c02688075b55ef2 d613574e7dc242f79c3', / y / -3:true }, / kid / 4:'bilbo.baggins@hobbiton.example' }, / ciphertext / h'339bc4f79984cdc6b3e6ce5f315a4c7d2b0ac466fce a69e8c07dfbca5bb1f661bc5f8e0df9e3eff5' ], [ / protected / h'', / unprotected / { / alg / 1:-5 / A256KW /, / kid / 4:'018c0ae5-4d9b-471b-bfd6-eef314bc7037' }, / ciphertext / h'0b2c7cfce04e98276342d6476a7723c090dfdd15f9a 518e7736549e998370695e6d6a83b4ae507bb' ] ] ] )

97( [ / protected / h'a10105' / { \ alg \ 1:5 \ HMAC 256//256 \ } / , / unprotected / {}, / payload / 'This is the content.', / tag / h'bf48235e809b5c42e995f2b7d5fa13620e7ed834e337f6aa43df16 1e49e9323e', / recipients / [ [ / protected / h'a101381c' / { \ alg \ 1:-29 \ ECHD-ES+A128KW \ } / , / unprotected / { / ephemeral / -1:{ / kty / 1:2, / crv / -1:3, / x / -2:h'0043b12669acac3fd27898ffba0bcd2e6c366d53bc4db 71f909a759304acfb5e18cdc7ba0b13ff8c7636271a6924b1ac63c02688075b55ef2 d613574e7dc242f79c3', / y / -3:true }, / kid / 4:'bilbo.baggins@hobbiton.example' }, / ciphertext / h'339bc4f79984cdc6b3e6ce5f315a4c7d2b0ac466fce a69e8c07dfbca5bb1f661bc5f8e0df9e3eff5' ], [ / protected / h'', / unprotected / { / alg / 1:-5 / A256KW /, / kid / 4:'018c0ae5-4d9b-471b-bfd6-eef314bc7037' }, / ciphertext / h'0b2c7cfce04e98276342d6476a7723c090dfdd15f9a 518e7736549e998370695e6d6a83b4ae507bb' ] ] ] )

This example uses the following:

This example uses the following:

  • MAC: AES-CMAC, 256-bit key, truncated to 64 bits
  • MAC: AES-CMAC, 256-bit key, truncated to 64 bits
  • Recipient class: direct shared secret
  • Recipient class: direct shared secret

Size of binary file is 37 bytes

Size of binary file is 37 bytes

17( [ / protected / h'a1010f' / { \ alg \ 1:15 \ AES-CBC-MAC-256//64 \ } / , / unprotected / {}, / payload / 'This is the content.', / tag / h'726043745027214f' ] )

17( [ / protected / h'a1010f' / { \ alg \ 1:15 \ AES-CBC-MAC-256//64 \ } / , / unprotected / {}, / payload / 'This is the content.', / tag / h'726043745027214f' ] )

Note that this example uses the same inputs as Appendix C.5.1.

Note that this example uses the same inputs as Appendix C.5.1.

This is an example of a COSE Key Set. This example includes the public keys for all of the previous examples.

This is an example of a COSE Key Set. This example includes the public keys for all of the previous examples.

In order the keys are:

In order the keys are:

  • An EC key with a kid of "meriadoc.brandybuck@buckland.example"
  • An EC key with a kid of "meriadoc.brandybuck@buckland.example"
  • An EC key with a kid of "peregrin.took@tuckborough.example"
  • An EC key with a kid of "peregrin.took@tuckborough.example"
  • An EC key with a kid of "bilbo.baggins@hobbiton.example"
  • An EC key with a kid of "bilbo.baggins@hobbiton.example"
  • An EC key with a kid of "11" Size of binary file is 481 bytes
  • An EC key with a kid of "11" Size of binary file is 481 bytes

[ { -1:1, -2:h'65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de108de439c0 8551d', -3:h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e9eecd008 4d19c', 1:2, 2:'meriadoc.brandybuck@buckland.example' }, { -1:1, -2:h'bac5b11cad8f99f9c72b05cf4b9e26d244dc189f745228255a219a86d6a 09eff', -3:h'20138bf82dc1b6d562be0fa54ab7804a3a64b6d72ccfed6b6fb6ed28bbf c117e', 1:2, 2:'11' }, { -1:3, -2:h'0072992cb3ac08ecf3e5c63dedec0d51a8c1f79ef2f82f94f3c737bf5de 7986671eac625fe8257bbd0394644caaa3aaf8f27a4585fbbcad0f2457620085e5c8 f42ad', -3:h'01dca6947bce88bc5790485ac97427342bc35f887d86d65a089377e247e 60baa55e4e8501e2ada5724ac51d6909008033ebc10ac999b9d7f5cc2519f3fe1ea1 d9475', 1:2, 2:'bilbo.baggins@hobbiton.example' }, { -1:1, -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbfbf054e1c7b4d91 d6280', -3:h'f01400b089867804b8e9fc96c3932161f1934f4223069170d924b7e03bf 822bb', 1:2, 2:'peregrin.took@tuckborough.example' } ]

[ { -1:1, -2:h'65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de108de439c0 8551d', -3:h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e9eecd008 4d19c', 1:2, 2:'meriadoc.brandybuck@buckland.example' }, { -1:1, -2:h'bac5b11cad8f99f9c72b05cf4b9e26d244dc189f745228255a219a86d6a 09eff', -3:h'20138bf82dc1b6d562be0fa54ab7804a3a64b6d72ccfed6b6fb6ed28bbf c117e', 1:2, 2:'11' }, { -1:3, -2:h'0072992cb3ac08ecf3e5c63dedec0d51a8c1f79ef2f82f94f3c737bf5de 7986671eac625fe8257bbd0394644caaa3aaf8f27a4585fbbcad0f2457620085e5c8 f42ad', -3:h'01dca6947bce88bc5790485ac97427342bc35f887d86d65a089377e247e 60baa55e4e8501e2ada5724ac51d6909008033ebc10ac999b9d7f5cc2519f3fe1ea1 d9475', 1:2, 2:'bilbo.baggins@hobbiton.example' }, { -1:1, -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbfbf054e1c7b4d91 d6280', -3:h'f01400b089867804b8e9fc96c3932161f1934f4223069170d924b7e03bf 822bb', 1:2, 2:'peregrin.took@tuckborough.example' } ]

This is an example of a COSE Key Set. This example includes the private keys for all of the previous examples.

This is an example of a COSE Key Set. This example includes the private keys for all of the previous examples.

In order the keys are:

In order the keys are:

  • An EC key with a kid of "meriadoc.brandybuck@buckland.example"
  • An EC key with a kid of "meriadoc.brandybuck@buckland.example"
  • A shared-secret key with a kid of "our-secret"
  • A shared-secret key with a kid of "our-secret"
  • An EC key with a kid of "peregrin.took@tuckborough.example"
  • An EC key with a kid of "peregrin.took@tuckborough.example"
  • A shared-secret key with a kid of "018c0ae5-4d9b-471b- bfd6-eef314bc7037"
  • A shared-secret key with a kid of "018c0ae5-4d9b-471b- bfd6-eef314bc7037"
  • An EC key with a kid of "bilbo.baggins@hobbiton.example"
  • An EC key with a kid of "bilbo.baggins@hobbiton.example"
  • An EC key with a kid of "11"
  • An EC key with a kid of "11"

Size of binary file is 816 bytes

Size of binary file is 816 bytes

[ { 1:2, 2:'meriadoc.brandybuck@buckland.example', -1:1, -2:h'65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de108de439c0 8551d', -3:h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e9eecd008 4d19c', -4:h'aff907c99f9ad3aae6c4cdf21122bce2bd68b5283e6907154ad911840fa 208cf' }, { 1:2, 2:'11', -1:1, -2:h'bac5b11cad8f99f9c72b05cf4b9e26d244dc189f745228255a219a86d6a 09eff', -3:h'20138bf82dc1b6d562be0fa54ab7804a3a64b6d72ccfed6b6fb6ed28bbf c117e', -4:h'57c92077664146e876760c9520d054aa93c3afb04e306705db609030850 7b4d3' }, { 1:2, 2:'bilbo.baggins@hobbiton.example', -1:3, -2:h'0072992cb3ac08ecf3e5c63dedec0d51a8c1f79ef2f82f94f3c737bf5de 7986671eac625fe8257bbd0394644caaa3aaf8f27a4585fbbcad0f2457620085e5c8 f42ad', -3:h'01dca6947bce88bc5790485ac97427342bc35f887d86d65a089377e247e 60baa55e4e8501e2ada5724ac51d6909008033ebc10ac999b9d7f5cc2519f3fe1ea1 d9475', -4:h'00085138ddabf5ca975f5860f91a08e91d6d5f9a76ad4018766a476680b 55cd339e8ab6c72b5facdb2a2a50ac25bd086647dd3e2e6e99e84ca2c3609fdf177f eb26d' }, { 1:4, 2:'our-secret', -1:h'849b57219dae48de646d07dbb533566e976686457c1491be3a76dcea6c4 27188' }, { 1:2, -1:1, 2:'peregrin.took@tuckborough.example', -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbfbf054e1c7b4d91 d6280', -3:h'f01400b089867804b8e9fc96c3932161f1934f4223069170d924b7e03bf 822bb', -4:h'02d1f7e6f26c43d4868d87ceb2353161740aacf1f7163647984b522a848 df1c3' }, { 1:4, 2:'our-secret2', -1:h'849b5786457c1491be3a76dcea6c4271' }, { 1:4, 2:'018c0ae5-4d9b-471b-bfd6-eef314bc7037', -1:h'849b57219dae48de646d07dbb533566e976686457c1491be3a76dcea6c4 27188' } ] Acknowledgments

[ { 1:2, 2:'meriadoc.brandybuck@buckland.example', -1:1, -2:h'65eda5a12577c2bae829437fe338701a10aaa375e1bb5b5de108de439c0 8551d', -3:h'1e52ed75701163f7f9e40ddf9f341b3dc9ba860af7e0ca7ca7e9eecd008 4d19c', -4:h'aff907c99f9ad3aae6c4cdf21122bce2bd68b5283e6907154ad911840fa 208cf' }, { 1:2, 2:'11', -1:1, -2:h'bac5b11cad8f99f9c72b05cf4b9e26d244dc189f745228255a219a86d6a 09eff', -3:h'20138bf82dc1b6d562be0fa54ab7804a3a64b6d72ccfed6b6fb6ed28bbf c117e', -4:h'57c92077664146e876760c9520d054aa93c3afb04e306705db609030850 7b4d3' }, { 1:2, 2:'bilbo.baggins@hobbiton.example', -1:3, -2:h'0072992cb3ac08ecf3e5c63dedec0d51a8c1f79ef2f82f94f3c737bf5de 7986671eac625fe8257bbd0394644caaa3aaf8f27a4585fbbcad0f2457620085e5c8 f42ad', -3:h'01dca6947bce88bc5790485ac97427342bc35f887d86d65a089377e247e 60baa55e4e8501e2ada5724ac51d6909008033ebc10ac999b9d7f5cc2519f3fe1ea1 d9475', -4:h'00085138ddabf5ca975f5860f91a08e91d6d5f9a76ad4018766a476680b 55cd339e8ab6c72b5facdb2a2a50ac25bd086647dd3e2e6e99e84ca2c3609fdf177f eb26d' }, { 1:4, 2:'our-secret', -1:h'849b57219dae48de646d07dbb533566e976686457c1491be3a76dcea6c4 27188' }, { 1:2, -1:1, 2:'peregrin.took@tuckborough.example', -2:h'98f50a4ff6c05861c8860d13a638ea56c3f5ad7590bbfbf054e1c7b4d91 d6280', -3:h'f01400b089867804b8e9fc96c3932161f1934f4223069170d924b7e03bf 822bb', -4:h'02d1f7e6f26c43d4868d87ceb2353161740aacf1f7163647984b522a848 df1c3' }, { 1:4, 2:'our-secret2', -1:h'849b5786457c1491be3a76dcea6c4271' }, { 1:4, 2:'018c0ae5-4d9b-471b-bfd6-eef314bc7037', -1:h'849b57219dae48de646d07dbb533566e976686457c1491be3a76dcea6c4 27188' } ] Acknowledgments

This document is a product of the COSE working group of the IETF.

This document is a product of the COSE working group of the IETF.

The following individuals are to blame for getting me started on this project in the first place: Richard Barnes, Matt Miller, and Martin Thomson.

The following individuals are to blame for getting me started on this project in the first place: Richard Barnes, Matt Miller, and Martin Thomson.

The initial version of the specification was based to some degree on the outputs of the JOSE and S/MIME working groups.

The initial version of the specification was based to some degree on the outputs of the JOSE and S/MIME working groups.

The following individuals provided input into the final form of the document: Carsten Bormann, John Bradley, Brain Campbell, Michael B. Jones, Ilari Liusvaara, Francesca Palombini, Ludwig Seitz, and Goran Selander.

The following individuals provided input into the final form of the document: Carsten Bormann, John Bradley, Brain Campbell, Michael B. Jones, Ilari Liusvaara, Francesca Palombini, Ludwig Seitz, and Goran Selander.