Internet DRAFT - draft-prorock-cose-sd-cwt
draft-prorock-cose-sd-cwt
None M. Prorock
Internet-Draft mesur.io
Intended status: Standards Track O. Steele
Expires: 4 September 2024 Transmute
3 March 2024
Selective Disclosure CWTs (SD-CWT)
draft-prorock-cose-sd-cwt-02
Abstract
This document describes how to perform selective disclosure of claims
withing a CBOR Web Token (CWT) [RFC8392] as well as how to create and
verify those tokens.
This document does not define any new cryptography.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 4 September 2024.
Copyright Notice
Copyright (c) 2024 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 (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Prorock & Steele Expires 4 September 2024 [Page 1]
Internet-Draft sd-cwt March 2024
Table of Contents
1. Notational Conventions . . . . . . . . . . . . . . . . . . . 2
2. Terminology . . . . . . . . . . . . . . . . . . . . . . . . . 2
3. Selective disclosure of claims within a CWT . . . . . . . . . 2
3.1. Overview . . . . . . . . . . . . . . . . . . . . . . . . 2
3.2. Flow Diagram . . . . . . . . . . . . . . . . . . . . . . 3
3.3. Creating an SD-CWT . . . . . . . . . . . . . . . . . . . 4
3.4. Verifying an SD-CWT . . . . . . . . . . . . . . . . . . . 5
3.5. Holder Binding and other common scenarios . . . . . . . . 5
3.5.1. Holder Binding . . . . . . . . . . . . . . . . . . . 6
3.5.2. Counter Signatures . . . . . . . . . . . . . . . . . 6
3.6. Data Structures . . . . . . . . . . . . . . . . . . . . . 7
3.7. Examples . . . . . . . . . . . . . . . . . . . . . . . . 7
4. Security Considerations . . . . . . . . . . . . . . . . . . . 7
5. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7
5.1. Media Type Registration . . . . . . . . . . . . . . . . . 7
6. Acknowledgements . . . . . . . . . . . . . . . . . . . . . . 8
7. Normative References . . . . . . . . . . . . . . . . . . . . 8
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 9
1. Notational Conventions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119].
2. Terminology
The following terminology is used throughout this document:
signature The digital signature output.
Claim Name The human-readable name used to identify a claim.
Claim Key The CBOR map key used to identify a claim.
Claim Value The CBOR map value representing the value of the claim.
CWT Claims Set The CBOR map that contains the claims conveyed by the
CWT.
3. Selective disclosure of claims within a CWT
3.1. Overview
CBOR claims are cpommonly signed using COSE Sign1 (https://www.rfc-
editor.org/rfc/rfc9052#section-4.2) where only one signature is
placed on a particular message. There are many cases where a signer
may wish to ensure that the authenticity of a message has not been
compromised via a digital signature, but where they only wish to
reveal some values of the original signed message. This document
Prorock & Steele Expires 4 September 2024 [Page 2]
Internet-Draft sd-cwt March 2024
outlines a precise method for formulating and transmitting these
messages, encompassing elements such as claims, claim keys, and
necessary data structures. This kind of signed information exchange
proves particularly beneficial in scenarios where a CBOR Web Token
(CWT) might transit via an intermediary before undergoing third-party
verification. Frequently, such a third party might necessitate, or
be permitted to access only a subset of the information encapsulated
in the CWT. This proposed model facilitates selective data
disclosure, while still preserving the ability to validate the
original signature.
This representation relies on claims registered in the IANA CBOR Web
Token (CWT) Claims Registry (https://www.iana.org/assignments/cwt/
cwt.xhtml) whenever possible.
3.2. Flow Diagram
Figure 1: SD-CWT Issuance and Presentation Flow
+------------+
| |
| Issuer |
| |
+------------+
|
Issues
SD-CWT
|
v
+------------+
| |
| Holder |
| |
+------------+
|
Presents
SD-CWT
|
v
+-------------+
| |+
| Verifiers ||+
| |||
+-------------+||
+-------------+|
+-------------+
Prorock & Steele Expires 4 September 2024 [Page 3]
Internet-Draft sd-cwt March 2024
3.3. Creating an SD-CWT
An SD-CWT is a CWT containing the hash digests of the claim values
combined with unique random salts and additional metadata for
disclosed values. The SD-CWT MUST be digitally signed using the
issuer's private key.
SD-CWT-CLAIMS = (METADATA, CWT-CLAIMS)
SD-CWT = SD-CWT-CLAIMS | SIG(SD-CWT-CLAIMS, ISSUER-PRIV-KEY)
CWT-CLAIMS is an object where claim names are mapped to hash digests
of the claim values combined with unique random salts:
CWT-CLAIMS = (
CLAIM-NAME: HASH(SALT | CLAIM-VALUE)
)*
In a case where an SD-CWT is sent with all information disclosed, the
SD-CWT is sent together with the mapping of the plain-text claim
values, the salt values, and potentially some other information. In
this case, the the payload contains the CWT-CLAIMS, and the
"disclosures" field in the unprotected header contains the mapping,
the salt values, and any additional metadata that might be present in
the unprotected header.
Disclosure in the unprotected header is important so that the content
type of the payload may be set appropriately, and is distinct from
any disclosed information.
In a case where an SD-CWT is sent with only selected information
disclosed, only the disclosed claims, mappings, and salts are added
to the disclosure.
Disclosures are structured as a "claim-pair" with a 32 bit salt, and
the byte string of the disclosed value.
claim-pair = {
1 => uint .size 4, ; 32-bit salt
2 => bstr ; disclosed value
}
The CDDL fragment that represents the above text for COSE_Sign1 is
provided below:
Prorock & Steele Expires 4 September 2024 [Page 4]
Internet-Draft sd-cwt March 2024
SD-CWT = [
protected,
unprotected: {
? disclosures: [* claim-pair] / nil
},
payload : bstr / nil,
signature : bstr,
]
The issuer SHOULD take appropriate percautions to verify that the
salts are unique random values to prevent vulnerability to rainbow
table attacks against the hashes.
3.4. Verifying an SD-CWT
To verify an SD-CWT, the recipient extracts the protected CWT claims
from the payload. These CWT claims contain hash digests of the
original claim values combined with unique random salts.
The recipient MUST validate that the protected header values such as
issuer, audience, and expiration match the expected values for this
SD-CWT per the guidelines set forward in [RFC8392]. If any items do
not match the expected or allowed values per [RFC8392] the SD-CWT
MUST be rejected.
The payload and other protected claims MUST then be validated
according to the section "Validating a CWT" in [RFC8392]. If the CWT
is not a COSE_Sign or COSE_Sign1 the CWT MUST be rejected. If any
validations according [RFC9052] instructions for validating a
COSE_Sign/COSE_Sign1 object fail, the CWT MUST be rejected.
The recipient that checks for any disclosures in the unprotected
header. If they are present, the the claim values and salts MUST be
extracted from the unprotected header.
For each disclosed claim, the hash digest MUST be recomputed from the
value and salt in the unprotected header. If the hash digest does
not equal the corresponding digest in the payload the SD-CWT MUST be
rejected.
By performing these steps, the recipient can cryptographically verify
the integrity of the protected claims and verify they have not been
tampered with or substituted after issuance by the trusted issuer.
The disclosures provide the plaintext claim values for utilization by
the recipient.
3.5. Holder Binding and other common scenarios
Prorock & Steele Expires 4 September 2024 [Page 5]
Internet-Draft sd-cwt March 2024
3.5.1. Holder Binding
Holder binding links an SD-CWT to its intended recipient. It
prevents misuse if the token is intercepted or stolen. Binding
mechanisms include cryptographic key confirmation, biometric data
inclusion, or embedding holder-specific claims. The description of
exact mechanisms for holder binding are outside the scope of this
document at the present time.
While optional, holder binding enhances SD-CWT security. It enables
accountability by auditing actions to specific entities. For
sensitive data, it augments trust by proving the claimant owns the
token.
Issuers should assess their use case when considering holder binding.
Where accountability and non-repudiation are critical, binding
provides assurance the token reaches the intended holder. With
thoughtful implementation, binding can customize SD-CWT without
compromising user privacy. Proportional use of holder binding
balances security, privacy and flexibility for SD-CWT applications.
3.5.2. Counter Signatures
Counter signatures allow an SD-CWT to be endorsed by additional
entities beyond the original issuer. The counter signature is
applied in the unprotected header, attesting to the validity of the
primary SD-CWT signature over the protected claims.
Counter signatures provide multiple benefits for SD-CWT:
* Verification by multiple entities, preventing repudiation by any
one party.
* Added integrity protection in case the original signing key is
compromised.
* Allows separate signers for protected claims versus unprotected
disclosures.
To utilize a counter signature, the primary SD-CWT is constructed and
signed as normal. Then an additional signer computes the counter
signature over the entire SD-CWT, including the original signature.
This counter signature is placed in the unprotected header when
transmitting the SD-CWT.
Recipients validate the counter signature after verifying the primary
signature, ensuring endorsements by all involved entities. Care
should be taken to ensure robust trust in both signature authorities
when relying on counter signatures.
Prorock & Steele Expires 4 September 2024 [Page 6]
Internet-Draft sd-cwt March 2024
The CDDL fragment that represents an SD-CWT with an abbreviated
counter signature is below:
SD-CWT = [
protected,
unprotected: {
? disclosures: [* claim-pair] / nil
COSE_Countersignature0: bstr
},
payload : bstr / nil,
signature : bstr,
]
3.6. Data Structures
TBD - Describe common data structures in CDDL
3.7. Examples
TBD - Provide examples
4. Security Considerations
All security considerations from COSE [RFC9052] and CWT [RFC8392]
SHOULD be followed.
To maintain the integrity of the issued claims, the Selective
Disclosure-CBOR Web Token (SD-CWT) MUST be signed by the issuer.
Absence of this signature leaves the SD-CWT vulnerable to attackers,
who can alter or append claims (for instance, modifying the "email"
attribute to hijack the victim's account or inserting a fabricated
academic qualification).
The verifier is required to verify the signature on the SD-CWT to
guarantee its authenticity and that no tampering has occurred post
issuance. If the signature on the SD-CWT fails the verification
process, the SD-CWT MUST be unequivocally rejected.
5. IANA Considerations
5.1. Media Type Registration
This section will register the "application/sd-cwt" media type
[RFC2046] in the "Media Types" registry [IANA.MediaTypes] in the
manner described in RFC 6838 [RFC6838], which can be used to indicate
that the content is a CWT.
* Type name: application
Prorock & Steele Expires 4 September 2024 [Page 7]
Internet-Draft sd-cwt March 2024
* Subtype name: sd-cwt
* Required parameters: n/a
* Optional parameters: n/a
* Encoding considerations: binary
* Security considerations: See the Security Considerations section
of [RFC8392]
* Interoperability considerations: n/a
* Published specification: This Specification
* Applications that use this media type: mesur.io, transmute
* Fragment identifier considerations: n/a
* Additional information: Magic number(s): n/a File extension(s): n/
a Macintosh file type code(s): n/a
* Person & email address to contact for further information: Michael
Prorock, mprorock@mesur.io
* Intended usage: COMMON
* Restrictions on usage: none
* Author: Michael Prorock, mprorock@mesur.io
* Change controller: IESG
* Provisional registration? Yes
6. Acknowledgements
The authors would like to thank those that have worked on similar
items for providing selective disclosure mechanisms in JSON,
especially: Brent Zundel, Roy Williams, Tobias Looker, Kristina
Yasuda, Daniel Fett, Oliver Terbu, and Michael Jones.
7. Normative References
[RFC2046] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions (MIME) Part Two: Media Types", RFC 2046,
DOI 10.17487/RFC2046, November 1996,
<https://www.rfc-editor.org/info/rfc2046>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/info/rfc2119>.
[RFC6838] Freed, N., Klensin, J., and T. Hansen, "Media Type
Specifications and Registration Procedures", BCP 13,
RFC 6838, DOI 10.17487/RFC6838, January 2013,
<https://www.rfc-editor.org/info/rfc6838>.
[RFC8392] Jones, M., Wahlstroem, E., Erdtman, S., and H. Tschofenig,
"CBOR Web Token (CWT)", RFC 8392, DOI 10.17487/RFC8392,
May 2018, <https://www.rfc-editor.org/info/rfc8392>.
Prorock & Steele Expires 4 September 2024 [Page 8]
Internet-Draft sd-cwt March 2024
[RFC9052] Schaad, J., "CBOR Object Signing and Encryption (COSE):
Structures and Process", STD 96, RFC 9052,
DOI 10.17487/RFC9052, August 2022,
<https://www.rfc-editor.org/info/rfc9052>.
Authors' Addresses
Michael Prorock
mesur.io
Email: mprorock@mesur.io
Orie Steele
Transmute
Email: orie@transmute.industries
Prorock & Steele Expires 4 September 2024 [Page 9]