<?xml version='1.0' encoding='utf-8'?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" category="info" docName="draft-hallambaker-jscontact-00" indexInclude="false" ipr="trust200902" scripts="Common,Latin" sortRefs="true" submissionType="independent" symRefs="true" tocDepth="3" tocInclude="true" version="3" xml:lang="en"><front>
<title abbrev="JSContact Extensions">JSContact Extensions</title>
<seriesInfo name="draft-hallambaker-jscontact-00" value="draft-hallambaker-jscontact" stream="independent"/>
<author fullname="Phillip Hallam-Baker" initials="P. M." surname="Hallam-Baker"><organization>ThresholdSecrets.com</organization>
<address>
<email>phill@hallambaker.com</email>
</address>
</author>
<date day="11" month="April" year="2025"/>
<area/>
<workgroup/>
<keyword>Identity</keyword>
<keyword>Cryptography</keyword>
<keyword>OAUTH</keyword>
<abstract>
<t>Extensions to the JSContact data model for contact card data are defined to provide improved support for describing cryptographic credentials to be used with applications and services and to provide support for authenticated updates to a contact card.</t>
</abstract>
</front>
<middle>
<section title="Introduction" anchor="n-introduction"><t>This document defines extensions to the JSContact data model for contact card data <xref target="RFC7553"></xref> to provide improved support for describing cryptographic credentials to be used with applications and services and to provide support for authenticated updates to a contact card.</t>
<t>The key design considerations for these extensions are as follows:</t>
<t>Maintain compatibility with the approach in the base specification. Avoiding unexpected behavior from legacy applications.</t>
<t>Allow cryptographic credentials to be specified as JSON Web Key Sets <xref target="RFC7517"></xref>.</t>
<t>Provide more descriptive information for use of cryptographic credentials, in particular specifying which key is to be used with which information service.</t>
<t>Allow specification of groups of related email addresses and information services.</t>
<t>In addition, specific guidance is provided on specifying credentials for use with S/MIME, OpenPGP, SSH and Code Signing.</t>
<section title="Enhanced specification of cryptographic credentials" anchor="n-enhanced-specification-of-cryptographic-credentials"><t>The JSContact cryptokeys property allows a card to specify cryptographic credentials as URIs but not their intended uses. A data URI containing an X.509v3 certificate might be intended for use with S/MIME, for code signing or some entirely unrelated purpose. Best design practice encourages the use of common cryptographic infrastructures to support a wide range of applications but best use practices encourage limiting the use of particular cryptographic keys to a single application.</t>
<t>The use of the JSON Web Key (JWK) format provides a much richer format for describing cryptographic keys and their properties than a URI and a media type. </t>
<t>For example, Bob is trying to send an encrypted email to Alice, her contact card lists two X.509v3 certificates but only one is an encryption certificate with the JWK <tt>use</tt> parameter:</t>
<t>The keys property which <bcp14>MAY</bcp14> be specified in either an EmailAddress object or an OnlineService object allows the key identifies of the keys related to the application to be specified.</t>
<t>For example, Alice has multiple OpenPGP keys in her contact card but she only uses one for signing her repository comits:</t>
</section>
<section title="Groups" anchor="n-groups"><t>It is often convenient to group related email addresses and online services used for a common purpose. For example, Alice might create separate sets of SSH, repository commit signing and code signing keys for her work and personal projects and assign these to separate groups:</t>
</section>
<section title="Authenticated Locators" anchor="n-authenticated-locators"><t>The features described in this document are designed to support but not require the exchange of JSContact data by means of an Encrypted Authenticated Resource Locator (EARL) <xref target="draft-hallambaker-earl"></xref>. An EARL is a URI form that contains a multi-purpose key that <bcp14>MAY</bcp14> be used to locate, decrypt and authenticate an associated ciphertext package.</t>
<t>For example, Alice's JSContact information might be retrievable from the EARL:</t>
<t>jscontact://example.com/eluv-woab-g7ih-onix-ybns-qdxk-rzqs </t>
<t>Alice might publish her EARL on her business card either as text or as a machine readable code such as a QR code. Alternatively, Alice might publish the information as a prefixed DNS TXT record in the domain she uses as her DNS handle:</t>
<t>_jscontact.alice.example.com TXT "jscontact=jscontact://example.com/eluv-woab-g7ih-onix-ybns-qdxk-rzqs" </t>
</section>
<section title="Authenticated Updates" anchor="n-authenticated-updates"><t>The authenticated locator mechanisms described above are intended to be used to establish a 'first contact' between the parties preserving the maximum possible degree of trust from the context.</t>
<t>Once the initial contact exchange has been achieved, the credentials exchanged in that first contact <bcp14>MAY</bcp14> be used to obtain and authenticate future updates.</t>
<t>The <tt>updates</tt> property provides an open framework for describing the update mechanisms supported. </t>
<t>For example, Alice publishes her current contact card by means of a DNS TXT record containing an EARL locating a ciphertext package whose plaintext payload and metadata are signed under the specified key:</t>
</section>
</section>
<section title="Definitions" anchor="n-definitions"><t>This section presents the related specifications and standards, the terms that are used as terms of art within the documents and the terms used as requirements language.</t>
<section title="Requirements Language" anchor="n-requirements-language"><t>This is an informational document and does not contain any normative language.</t>
</section>
<section title="Defined Terms" anchor="n-defined-terms"><t></t>
</section>
<section title="Related Specifications" anchor="n-related-specifications"><dl>
<dt>JSContact: A JSON Representation of Contact Data <xref target="RFC9553"></xref>.</dt>
<dd>
<t>Describes the format used for contact data interchange.</t>
</dd>
<dt>Encrypted Authenticated Resource Locator <xref target="draft-hallambaker-earl"></xref>.</dt>
<dd>
<t>Describes a URI form that provides means of retrieving, decrypting and authenticating an associated ciphertext.</t>
</dd>
</dl>
</section>
<section title="Implementation Status" anchor="n-implementation-status"><t>Reference code under the MIT Open Source license has been developed to demonstrate all the features described in this document.</t>
</section>
</section>
<section title="Card Extensions" anchor="n-card-extensions"><section title="Metadata Properties" anchor="n-metadata-properties"><section title="update" anchor="n-update"><t>updates: Id[Update] (optional).</t>
<t>The update mechanisms that <bcp14>MAY</bcp14> be used to provide Card updates.</t>
<t>An Update object has all properties of the Resource (Section 1.4.4) data type, with the following additional definitions:</t>
<t>The @type property value <bcp14>MUST</bcp14> be "Calendar", if set</t>
<t>keys: Id[Boolean] (optional).</t>
<t>The identifiers used within this contact card to identify keys to be used with this update mechanism.</t>
</section>
</section>
<section title="Contact Properties" anchor="n-contact-properties"><t>This section defines a means of grouping contact properties and extends the contact properties specified in <xref target="RFC9553"></xref>.</t>
<section title="groups" anchor="n-groups-0"><t>groups: Id[OnlineService] (optional).</t>
<t>The online services that are associated with the entity represented by the Card. This can be messaging services, social media profiles, and other</t>
<t>@type: String.</t>
<t>The JSContact type of the object. The value <bcp14>MUST</bcp14> be "Group", if set.</t>
<t>contexts: String[Boolean] (optional).</t>
<t>The contexts in which to use the service</t>
<t>Members Id[Boolean] (required)</t>
<t>The identifiers used within this contact card to identify email addresses or online services belonging to this group.</t>
<t>label: String (optional).</t>
<t>A custom label for the value.</t>
</section>
<section title="EmailAddress object" anchor="n-emailaddress-object"><t>The EmailAddress object is extended to add the following property:</t>
<t>keys: Id[Boolean] (optional).</t>
<t>The identifiers used within this contact card to identify keys to be used with this email address.</t>
</section>
<section title="OnlineService object" anchor="n-onlineservice-object"><t>The OnlineService object is extended to add the following property:</t>
<t>keys: Id[Boolean] (optional).</t>
<t>The identifiers used within this contact card to identify keys to be used with this email address.</t>
</section>
</section>
<section title="Resource Properties" anchor="n-resource-properties"><t>This section defines additional properties for digital resources associated with the entity represented by the Card.</t>
<section title="Jwks" anchor="n-jwks"><t>jwkss: Id[Jwks] (optional).</t>
<t>The cryptographic resources such as public keys and certificates associated with the entity represented by the Card.</t>
<t>A Jwks object has all properties of the Resource (Section 1.4.4) data type, with the following additional definitions:</t>
<t>The @type property value <bcp14>MUST</bcp14> be " Jwks ", if set.</t>
<t>data:JWK[]</t>
<t>Where JWK is a JSON Web Key as specified in <xref target="RFC7517"></xref>.</t>
</section>
</section>
</section>
<section title="Application Profiles" anchor="n-application-profiles"><t>This section provides guidance on how to encode cryptographic keys for specific applications.</t>
<section title="S/MIME" anchor="n-smime"><t>[TBS]</t>
<sourcecode>TBS</sourcecode>
</section>
<section title="OpenPGP" anchor="n-openpgp"><t>[TBS]</t>
<sourcecode>TBS</sourcecode>
</section>
<section title="SSH" anchor="n-ssh"><t>[TBS]</t>
<sourcecode>TBS</sourcecode>
</section>
<section title="Code Signing" anchor="n-code-signing"><t>[TBS]</t>
<sourcecode>TBS</sourcecode>
</section>
</section>
<section title="IANA Considerations" anchor="n-iana-considerations"><t>This document does not specify any actions for IANA yet but it will...[TBS]</t>
</section>
<section title="Acknowledgements" anchor="n-acknowledgements"></section>
</middle>
<back>
<references title="Normative References"><reference anchor="RFC7553"><front>
<title>The Uniform Resource Identifier (URI) DNS Resource Record</title>
<author fullname="P. Faltstrom" initials="P." surname="Faltstrom"><address>
</address>
</author>
<author fullname="O. Kolkman" initials="O." surname="Kolkman"><address>
</address>
</author>
<date month="June" year="2015"/>
</front>
<seriesInfo name="RFC" value="7553"/>
<seriesInfo name="DOI" value="10.17487/RFC7553"/>
</reference>
<reference anchor="RFC7517"><front>
<title>JSON Web Key (JWK)</title>
<author fullname="M. Jones" initials="M." surname="Jones"><address>
</address>
</author>
<date month="May" year="2015"/>
</front>
<seriesInfo name="RFC" value="7517"/>
<seriesInfo name="DOI" value="10.17487/RFC7517"/>
</reference>
<reference anchor="RFC9553"><front>
<title>JSContact: A JSON Representation of Contact Data</title>
<author fullname="R. Stepanek" initials="R." surname="Stepanek"><address>
</address>
</author>
<author fullname="M. Loffredo" initials="M." surname="Loffredo"><address>
</address>
</author>
<date month="May" year="2024"/>
</front>
<seriesInfo name="RFC" value="9553"/>
<seriesInfo name="DOI" value="10.17487/RFC9553"/>
</reference>
<reference anchor="draft-hallambaker-earl"><front>
<title>Encrypted Authenticated Resource Locator</title>
<author fullname="Phillip Hallam-Baker" initials="P." surname="Hallam-Baker"><organization>ThresholdSecrets.com</organization>
<address>
</address>
</author>
<date day="10" month="April" year="2025"/>
</front>
<seriesInfo name="Internet-Draft" value="draft-hallambaker-earl-00"/>
</reference>
</references>
</back>
</rfc>
