Skip to main content

JSContact Cryptographic Key Extensions
draft-ietf-calext-jscontact-cryptographic-key-01

Document Type Active Internet-Draft (calext WG)
Author Phillip Hallam-Baker
Last updated 2026-07-03
RFC stream Internet Engineering Task Force (IETF)
Intended RFC status (None)
Formats
Additional resources Mailing list discussion
Stream WG state WG Document
Document shepherd (None)
IESG IESG state I-D Exists
Consensus boilerplate Unknown
Telechat date (None)
Responsible AD (None)
Send notices to (None)
draft-ietf-calext-jscontact-cryptographic-key-01
Network Working Group                                 P. M. Hallam-Baker
Internet-Draft                                            MPlace2.social
Intended status: Standards Track                             3 July 2026
Expires: 4 January 2027

                 JSContact Cryptographic Key Extensions
            draft-ietf-calext-jscontact-cryptographic-key-01

Abstract

   Extensions to the JSContact data model for contact card data are
   defined to improve support for describing cryptographic credentials
   to be used with applications and services by specifying which
   credential is used for which online service.  This allows a contact
   application to identify the specific credential to be used with an
   application without the need for the contact application to
   understand the syntax or semantics of the credential used.

   An additional extension allows a contact to specify one of more
   mechanisms for obtaining updates to itself with optional verification
   under specified signature keys.  The mechanisms used are outside the
   scope of this document.  These features in combination provide a
   basis for establishing and maintaining peer-to-peer trust.

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 January 2027.

Copyright Notice

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

Hallam-Baker             Expires 4 January 2027                 [Page 1]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

   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.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   3
     1.1.  Link Keys to Services . . . . . . . . . . . . . . . . . .   3
     1.2.  Enhanced specification of cryptographic credentials . . .   4
     1.3.  Groups  . . . . . . . . . . . . . . . . . . . . . . . . .   5
     1.4.  Authentication  . . . . . . . . . . . . . . . . . . . . .   8
     1.5.  Authenticated Updates . . . . . . . . . . . . . . . . . .   8
   2.  Definitions . . . . . . . . . . . . . . . . . . . . . . . . .  10
     2.1.  Requirements Language . . . . . . . . . . . . . . . . . .  10
     2.2.  Defined Terms . . . . . . . . . . . . . . . . . . . . . .  10
     2.3.  Related Specifications  . . . . . . . . . . . . . . . . .  10
     2.4.  Implementation Status . . . . . . . . . . . . . . . . . .  10
   3.  Card Extensions . . . . . . . . . . . . . . . . . . . . . . .  10
     3.1.  Additional Card Properties  . . . . . . . . . . . . . . .  10
       3.1.1.  updates . . . . . . . . . . . . . . . . . . . . . . .  11
       3.1.2.  serviceGroups . . . . . . . . . . . . . . . . . . . .  11
     3.2.  Extension to the EmailAddress Object  . . . . . . . . . .  11
       3.2.1.  cryptoKeyIds  . . . . . . . . . . . . . . . . . . . .  12
     3.3.  Extension to the OnlineService Object . . . . . . . . . .  12
       3.3.1.  cryptoKeyIds  . . . . . . . . . . . . . . . . . . . .  12
     3.4.  New Object JsonWebKeySet  . . . . . . . . . . . . . . . .  12
       3.4.1.  jsonWebKeys . . . . . . . . . . . . . . . . . . . . .  12
   4.  Application Profiles  . . . . . . . . . . . . . . . . . . . .  12
     4.1.  S/MIME  . . . . . . . . . . . . . . . . . . . . . . . . .  12
     4.2.  OpenPGP . . . . . . . . . . . . . . . . . . . . . . . . .  13
     4.3.  SSH . . . . . . . . . . . . . . . . . . . . . . . . . . .  14
     4.4.  Code Signing  . . . . . . . . . . . . . . . . . . . . . .  17
     4.5.  Commit Signing  . . . . . . . . . . . . . . . . . . . . .  18
   5.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .  19
   6.  Acknowledgements  . . . . . . . . . . . . . . . . . . . . . .  19
   7.  Appendix A: Collected Example<include=..\Examples\
           JSContactComplete.md> . . . . . . . . . . . . . . . . . .  19
   8.  Normative References  . . . . . . . . . . . . . . . . . . . .  19
   9.  Informative References  . . . . . . . . . . . . . . . . . . .  20
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .  20

Hallam-Baker             Expires 4 January 2027                 [Page 2]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

1.  Introduction

   This document defines extensions to the JSContact data model for
   contact card data [RFC9553] 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.

   The key design considerations for these extensions are as follows:

   *  Maintain compatibility with the approach in the base
      specification.

   *  Allow cryptographic credentials to be specified as JSON Web Key
      Sets [RFC7517].

   *  Provide more descriptive information for use of cryptographic
      credentials, in particular specifying which key is to be used with
      which information service.

   *  Allow specification of groups of related email addresses and
      information services.

   *  Enable automated updates to the contact card data with
      cryptographic authentication.

   In addition, specific guidance is provided on specifying credentials
   for use with S/MIME, OpenPGP, SSH and Code Signing.

1.1.  Link Keys to Services

   [RFC9553] allows a card to specify online services and cryptographic
   keys but does not provide a means of specifying which key is to be
   used for which purpose.  This results in ambiguity with key formats
   used to support a wide range of applications, a key presented in
   OpenPGP encoding may be used to sign email, sign a repository commit,
   encrypt a file system or used for many other purposes.  For example,
   a user can specify the separate OpenPGP keys they use for email and
   signing commits to their source code repository but does not allow
   the user to specify which key is to be used for which.

Hallam-Baker             Expires 4 January 2027                 [Page 3]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

   Best practices for use of cryptographic applications encourage the
   use of different keys for different cryptographic functions
   (encryption, signing, authentication), different application
   protocols and different uses.  Without the ability to specify which
   key is to be used for which purpose, an attacker that has compromised
   a weakly protected key intended for low consequence purposes (e.g.
   signing development builds) for a high consequence purpose (e.g.
   signing production builds and authorizing financial transactions.)

   The EmailAddress object and OnlineService object are extended to add
   a keys property which MAY be used to specify the key identifiers of
   the related keys.

   For example, Alice has many OpenPGP keys but only one that she uses
   with her email address alice@example.com:

   {
     "@type":"Card",
     ...
       ...
     "emails" : {
       "email1" : {
           "@type": "EmailAddress",
           "address": "alice@example.com",
           "cryptoKeyIds": {
             "emailKey1": "bundle",
             "emailKey3": "sign",
             "emailKey4": "encrypt"}}
       },
     "cryptoKeys" : {
       "emailKey1" : {
           "@type": "CryptoKey",
           "uri": "data:application/pgp-keys;base64,9jhpthtFpOVS0FWXsg
   5rF3W2-vE.."}
       ...
       }
     }

1.2.  Enhanced specification of cryptographic credentials

   The Card object's cryptoKeysSP 800-57 Part 1 Revision 5
   (http://whatever) 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 (see e.g.  section 5.2) encourages the use of common
   cryptographic infrastructures to support a wide range of applications
   but best use practices encourage limiting the use of particular

Hallam-Baker             Expires 4 January 2027                 [Page 4]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

   cryptographic keys to a single application.

   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.

   For example, Alice uses SSH to securely access resources in her
   network.  In accordance with best security practices, she create a
   separate SSH keypair for each of the devices she uses as a client
   terminal.  Accordingly, her contact has an onlineService entry that
   describes this use of the SSH protocol that specifies the keys to be
   used with SSH and a separate JsonWebKeySet entry for each key
   specifying the key parameters:

   {
     "@type":"Card",
     ...
       ...
     "onlineServices" : {
       ...
       "ssh1" : {
           "@type": "OnlineService",
           "service": "ssh",
           "cryptoKeyIds": {
             "sshKey1": "sign",
             "sshKey2": "sign",
             "sshKey3": "sign"}}
       ...
       },
     "cryptoKeys" : {
       ...
       "sshKey1" : {
           "@type": "JsonWebKeySet",
           "jsonWebKeys": [{
               "kty": "OKP",
               "kid": "MBWQ-TY2X-SFBR-DWYL-LURE-GHD4-CCP3",
               "crv": "Ed25519",
               "x": "5tKZn7_cQYNz7SU65Vqm4JplTToA4kIIwyX_vWT76ZY"}
             ]}
       ...
       }
     }

1.3.  Groups

   It is often convenient to organize related email addresses and online
   services used for a common purpose into groups.

Hallam-Baker             Expires 4 January 2027                 [Page 5]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

   For example, Alice might create a ServiceGroup bundling the set of
   cryptographic keys she uses for code development.  This would allow
   her to create separate sets of keys for different clients she works
   with and to distinguish the set of keys used for development purposes
   from those she uses for production use.

Hallam-Baker             Expires 4 January 2027                 [Page 6]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

   {
     "@type":"Card",
     ...
     "updates" : {
       "group1" : {
           "@type": "ServiceGroup",
           "members": {
             "email1": true,
             "git1": true,
             "ssh1": true}}
       },
     "serviceGroups" : {
       "group1" : {
           "@type": "ServiceGroup",
           "members": {
             "email1": true,
             "git1": true,
             "ssh1": true}}
       }
     "emails" : {
       "email1" : {
           "@type": "EmailAddress",
           "address": "alice@example.com",
           "cryptoKeyIds": {
             "emailKey1": "bundle",
             "emailKey3": "sign",
             "emailKey4": "encrypt"}}
       },
     "onlineServices" : {
       "git1" : {
           "@type": "OnlineService",
           "service": "commit",
           "user": "alice.example.com",
           "cryptoKeyIds": {
             "gitKey1": "sign"}}
       "ssh1" : {
           "@type": "OnlineService",
           "service": "ssh",
           "cryptoKeyIds": {
             "sshKey1": "sign",
             "sshKey2": "sign",
             "sshKey3": "sign"}}
       ...
       },
       ...
     }

Hallam-Baker             Expires 4 January 2027                 [Page 7]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

1.4.  Authentication

   The use of an authenticated exchange mechanism such as [RFC7515] or
   [draft-hallambaker-earl] allows a JSContact card to be used as an
   aggregate credential whose contents are used to automatically
   configure cryptographic applications that use the credentials
   contained therein.

   Instead of having to configure every server that Alice might want to
   access using her SSH keys, Alice can add her keys to her JSContact
   card and run a script to create the necessary access control entries
   on each server.

   The power of this approach is further increased if an authenticated
   contact update mechanism is used.  In this case, updates can be
   propagated to the target devices automatically by either polling or
   through a push update mechanism.

1.5.  Authenticated Updates

   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.

   Once the initial contact exchange has been achieved, the credentials
   exchanged in that first contact SHOULD be used to obtain and
   authenticate future updates.

   Contact cards that support updates MUST include a uid property.
   Updates to contact cards MUST specify the same uid value.

   The updates property provides an open framework for describing the
   update mechanisms supported.  The mechanisms provided to update the
   contact MAY be different from the mechanism originally used to
   distribute it.

   For example, Alice publishes her current contact card by means of a
   DNS TXT record containing an EARL [draft-hallambaker-earl] and a QR
   code encoding the same EARL on the business card she presents when
   meeting people in person.  Applications MAY update the card by
   polling the URI specified in the updates entry and verifying the
   signature on the plaintext enveloped data returned.

Hallam-Baker             Expires 4 January 2027                 [Page 8]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

   {
     "@type":"Card",
     ...
       ...
     "cryptoKeys" : {
       ...
       "updateKey1" : {
           "@type": "JsonWebKeySet",
           "jsonWebKeys": [{
               "kty": "OKP",
               "kid": "MDMY-XH52-PLPK-H7DZ-WAXW-LDNS-5I7R",
               "crv": "Ed448",
               "x": "QKvMwR_qwWUJoWEeFMb6SlVxnA8MUa8p_diWxgORiVxjPwSqF
   vgKvoCZBpRqMx5-u8u5d6g6auIA"}
             ]}
       }
     }

   Since it is easier to update information on a Web site than in DNS or
   on a business card, it is likely that some users will prefer to use
   these mechanisms to distribute pro-forma contact information
   consisting of basic contact information and update information alone.
   Therefore, contact applications SHOULD attempt to update contact
   cards providing update information on receipt.

   Retrieving a plaintext signed contact assertion via HTTPS provides a
   simple but limited update mechanism providing end-to-end integrity
   but not confidentiality.  While the contact information is delivered
   over an encrypted transport, the contact card is stored unencrypted
   on the server which may not be acceptable in certain applications.
   Another limitation is that the relying party is required to poll the
   contact service for updates.  A more sophisticated updates protocol
   might provide update notifications.  Such considerations are outside
   the scope of this document and left for future work.

   [Remark: Addition of a JOSE based encryption scheme would be
   straightforward.  This would require extension of the envelope
   specification and to pass a decryption key to the parties the contact
   is passed to.]

   A contact card MAY specify multiple update mechanisms providing a
   degree of resilience in the case that a publication service stops
   providing service.

Hallam-Baker             Expires 4 January 2027                 [Page 9]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

   For example, Alice might choose three independent contact directory
   services publishing her contact information on all three ensuring
   that the people she has shared her contact information with can
   remain in contact years or even decades after the initial contact
   exchange.

2.  Definitions

   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.

2.1.  Requirements Language

   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 RFC 2119 [RFC2119].

2.2.  Defined Terms

   TBS

2.3.  Related Specifications

   JSContact: A JSON Representation of Contact Data [RFC9553].  Describes
      the format used for contact data interchange.

   JSON Web Key (JWK) [RFC7517].  Describes publishing public keys in
      JSON format.

   Encrypted Authenticated Resource Locator [draft-hallambaker-earl].  Describes
      a URI form that provides means of retrieving, decrypting and
      authenticating an associated ciphertext.

2.4.  Implementation Status

   Reference code under the MIT Open-Source license has been developed
   to demonstrate all the features described in this document.

3.  Card Extensions

   The JSContact objects specified in [RFC9553] is extended as described
   in the following sections.

3.1.  Additional Card Properties

   The following properties are added to the Card object specified in
   [RFC9553].

Hallam-Baker             Expires 4 January 2027                [Page 10]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

3.1.1.  updates

   "updates": String[Update] (optional) Specifies mechanisms for
   obtaining updates to the card.

   An Update object has all the properties of the Resource data type,
   with the following additional definitions:

   "protocol": String (optional) The IANA update protocol identifier

   "cryptoKeyIds": String[String] (optional) The identifiers of the set
   of cryptographic keys to be used to authenticate the updated contact
   information and their use.

   "updates": {
     "update1": {
       "@type": "Update",
       "uri": "https://contacts.example.com/",
       "cryptoKeyIds": {
         "updateKey1": "sign"}}}

3.1.2.  serviceGroups

   "serviceGroups": String[ServiceGroup] (optional) Specifies groups of
   related email addresses and online services.

   A ServiceGroup object has all the properties of the Resource data
   type, with the following additional definition:

   "members": String[Boolean] (optional) The identifiers of the service
   group members.  The boolean value corresponding to each MUST be true.

   "serviceGroups": {
     "group1": {
       "@type": "ServiceGroup",
       "members": {
         "email1": true,
         "git1": true,
         "ssh1": true}}}

3.2.  Extension to the EmailAddress Object

   The EmailAddress object specified in [RFC9553] is extended to add the
   specified property.

Hallam-Baker             Expires 4 January 2027                [Page 11]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

3.2.1.  cryptoKeyIds

   "cryptoKeyIds": String[String] (optional) The identifiers of the set
   of cryptographic keys to be used to authenticate the updated contact
   information and their use.

   "cryptoKeyIds": {
     "emailKey1": "bundle",
     "emailKey3": "sign",
     "emailKey4": "encrypt"}

3.3.  Extension to the OnlineService Object

   The OnlineService object specified in [RFC9553] is extended to add
   the specified property.

3.3.1.  cryptoKeyIds

   "cryptoKeyIds": String[String] (optional) The identifiers of the set
   of cryptographic keys to be used to authenticate the updated contact
   information and their use.

3.4.  New Object JsonWebKeySet

   The JsonWebKeySet object is added to the Card object with the
   following properties:

3.4.1.  jsonWebKeys

   "jsonWebKeys": JWK[] (optional) A Json Web Key Set.

   The JWK object is defined in [TBS].

4.  Application Profiles

   This section _will_ provide guidance on how to encode cryptographic
   keys for specific applications.  It is currently a placeholder so the
   relevant expert groups have an opportunity to advise the precise
   means by which the relevant information is presented.

4.1.  S/MIME

   S/MIME (Secure/Multipurpose Internet Mail Extensions) provides a
   consistent way to send and receive secure MIME data over SMTP and
   other messaging transports.

Hallam-Baker             Expires 4 January 2027                [Page 12]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

   Certificates issued for use with S/MIME are commonly used for other
   purposes, for example TLS client authentication.  For the purposes of
   this discussion, our focus is strictly limited to the use of the
   certificate for messaging.

   If the messaging protocol is SMTP, the service is specified as an
   EmailAddress, otherwise the OnlineService structure is used with the
   appropriate service specifier.

   Strawman proposal:

   *  Use a single JWK entry with an x5c to specify the encryption key
      cert, signature key cert and cert path.

   *  Specify the JWK in the keys section of the corresponding
      EmailAddress or OnlineService with the key identifier of the
      corresponding JWK and the 'smime' use.

   {
     "@type":"Card",
     ...
       ...
     "cryptoKeys" : {
       ...
       "emailKey3" : {
           "@type": "CryptoKey",
           "uri": "data:application/pkix-cert;base64,VQSUcf253buwsfIgF
   UyqNeQ1Ky4.."}
       "emailKey4" : {
           "@type": "CryptoKey",
           "uri": "data:application/pkix-cert;base64,du0OqLzpeCHLXXJD-
   HUpt1nN36o.."}
       ...
       }
     }

4.2.  OpenPGP

   OpenPGP provides encryption with public key or symmetric
   cryptographic algorithms, digital signatures, compression, and key
   management.

   OpenPGP key management is commonly used for many purposes including
   signing repository commits.  For the purposes of this section, our
   focus is strictly limited to the use of keys for messaging.

Hallam-Baker             Expires 4 January 2027                [Page 13]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

   If the messaging protocol is SMTP, the service is specified as an
   EmailAddress, otherwise the OnlineService structure is used with the
   appropriate service specifier.

   Strawman proposal:

   *  User specifies their OpenPGP primary key as an OnlineService with
      service type 'openpgp'.  This is also the place any key server
      information would be placed.

   *  The first key in the keys entry of the service is the key
      identifier of the primary key

   *  The sub keys are the following keys

   *  The corresponding key entries are of type JsonWebKey

   *  The key data is specified as a binary data property

   *  Other services specify the subkeys that they use.

   {
     "@type":"Card",
     ...
       ...
     "cryptoKeys" : {
       "emailKey1" : {
           "@type": "CryptoKey",
           "uri": "data:application/pgp-keys;base64,9jhpthtFpOVS0FWXsg
   5rF3W2-vE.."}
       ...
       }
     }

4.3.  SSH

   The SSH protocol used for remote shell and file system access
   supports authentication by means of either passwords or public keys.
   The set of public keys authorized to allow access to a device is
   specified by means of:

   *  A raw public key

   *  An SSH user certificate as specified in [draft-ietf-sshm-cert].

   *  A PKIX certificate as specified in [RFC6187].

Hallam-Baker             Expires 4 January 2027                [Page 14]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

   While use of certificates offers clear management advantages and SSH
   certificates are widely supported in applications and libraries, most
   users only use raw keys.  The JsonWebKey object provides the most
   convenient means of encoding a raw key.

   For example, Alice defines separate raw public keys for each of her
   two user devices and has separately created an SSH user certificate
   for one of the keys:

Hallam-Baker             Expires 4 January 2027                [Page 15]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

   {
     "@type":"Card",
     ...
       ...
     "onlineServices" : {
       ...
       "ssh1" : {
           "@type": "OnlineService",
           "service": "ssh",
           "cryptoKeyIds": {
             "sshKey1": "sign",
             "sshKey2": "sign",
             "sshKey3": "sign"}}
       ...
       },
     "cryptoKeys" : {
       ...
       "sshKey1" : {
           "@type": "JsonWebKeySet",
           "jsonWebKeys": [{
               "kty": "OKP",
               "kid": "MBWQ-TY2X-SFBR-DWYL-LURE-GHD4-CCP3",
               "crv": "Ed25519",
               "x": "5tKZn7_cQYNz7SU65Vqm4JplTToA4kIIwyX_vWT76ZY"}
             ]}
       "sshKey2" : {
           "@type": "JsonWebKeySet",
           "jsonWebKeys": [{
               "kty": "OKP",
               "kid": "MAAF-677S-5LR7-LZC5-QSZV-EDTW-LYVV",
               "crv": "Ed25519",
               "x": "uWTosF21Jr2cC_JBdM9woCvUHUBFyOA9kZ-ealN2b4Q"}
             ]}
       "sshKey3" : {
           "@type": "CryptoKey",
           "uri": "data:application/ssh-TBS;base64,G1gwyQEpuvag5WQysXs
   WjY4qD64.."}
       ...
       }
     }

   [Remark: The SSH certificate draft is nearing completion, comments
   have been submitted on how to bind SSH certificates in JOSE JWK and
   suggesting creation of a media type.]

Hallam-Baker             Expires 4 January 2027                [Page 16]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

4.4.  Code Signing

   Code signing is an important security control both in development and
   production environments.  Most modern executable code formats and
   many scripting languages support one or more code signing mechanisms.
   While most signature mechanisms support use of PKIX certificate
   credentials, OpenPGP keys and even raw keys are used and sometimes
   required.

   It is highly desirable for code signing keys used to sign published
   releases of code be kept separate from those used to sign development
   builds.  In addition, many software distribution channels require the
   use of credentials issued by the channel operator.  Consequently, the
   number of code signing keys used by a developer may be very large.

   This use is specified by means of an OnlineService with the service
   type 'code' with key entries for the set of authorized signing keys.

   Alice has a single code signing key with a PKIX credential specified
   in her JsContact card:

Hallam-Baker             Expires 4 January 2027                [Page 17]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

   {
     "@type":"Card",
     ...
       ...
     "onlineServices" : {
       ...
       "code1" : {
           "@type": "OnlineService",
           "service": "code",
           "cryptoKeyIds": {
             "codeSign1": "sign"}}
       "code2" : {
           "@type": "OnlineService",
           "service": "code",
           "cryptoKeyIds": {
             "codeSign1": "sign"}}
       },
     "cryptoKeys" : {
       ...
       "codeSign1" : {
           "@type": "CryptoKey",
           "uri": "data:application/pkix-cert;base64,GvDh6w1P9K3aRa_tH
   TxEoF5ya3I.."}
       "codeSign2" : {
           "@type": "CryptoKey",
           "uri": "data:application/pkix-cert;base64,mMT2044jV8LOoWy4u
   plhZkQvG1I.."}
       ...
       }
     }

4.5.  Commit Signing

   Most modern source code repository systems support application of
   signatures to commit operations.  While OpenPGP key management is
   commonly used for this purpose, the popular git source code
   repository also supports use of raw keys.

   This use is specified by means of an OnlineService with the service
   type 'commit' with key entries for the set of authorized signing
   keys.

Hallam-Baker             Expires 4 January 2027                [Page 18]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

   {
     "@type":"Card",
     ...
       ...
     "onlineServices" : {
       "git1" : {
           "@type": "OnlineService",
           "service": "commit",
           "user": "alice.example.com",
           "cryptoKeyIds": {
             "gitKey1": "sign"}}
       ...
       },
     "cryptoKeys" : {
       ...
       "gitKey1" : {
           "@type": "CryptoKey",
           "uri": "data:application/pgp-keys;base64,EBIHlPDVEY2rshD2rO
   _JQNamX0s.."}
       ...
       }
     }

5.  IANA Considerations

   This document does not specify any actions for IANA yet but it
   will...[TBS]

6.  Acknowledgements

   Many thanks to Robert Stepanek who helped refine the approach to
   extending the schema.

7.  Appendix A: Collected Example<include=..\Examples\
    JSContactComplete.md>

8.  Normative References

   [draft-hallambaker-earl]
              Hallam-Baker, P., "Encrypted Authenticated Resource
              Locator", Work in Progress, Internet-Draft, draft-
              hallambaker-earl-01, 6 October 2025,
              <https://datatracker.ietf.org/doc/html/draft-hallambaker-
              earl-01>.

Hallam-Baker             Expires 4 January 2027                [Page 19]
Internet-Draft   JSContact Cryptographic Key Extensions        July 2026

   [draft-ietf-sshm-cert]
              Miller, D., "SSH Certificate Format", Work in Progress,
              Internet-Draft, draft-ietf-sshm-cert-01, 14 June 2026,
              <https://datatracker.ietf.org/doc/html/draft-ietf-sshm-
              cert-01>.

   [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/rfc/rfc2119>.

   [RFC6187]  Igoe, K. and D. Stebila, "X.509v3 Certificates for Secure
              Shell Authentication", RFC 6187, DOI 10.17487/RFC6187,
              March 2011, <https://www.rfc-editor.org/rfc/rfc6187>.

   [RFC7517]  Jones, M., "JSON Web Key (JWK)", RFC 7517,
              DOI 10.17487/RFC7517, May 2015,
              <https://www.rfc-editor.org/rfc/rfc7517>.

   [RFC9553]  Stepanek, R. and M. Loffredo, "JSContact: A JSON
              Representation of Contact Data", RFC 9553,
              DOI 10.17487/RFC9553, May 2024,
              <https://www.rfc-editor.org/rfc/rfc9553>.

9.  Informative References

   [RFC7515]  Jones, M., Bradley, J., and N. Sakimura, "JSON Web
              Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May
              2015, <https://www.rfc-editor.org/rfc/rfc7515>.

Author's Address

   Phillip Hallam-Baker
   MPlace2.social
   Email: phill@hallambaker.com

Hallam-Baker             Expires 4 January 2027                [Page 20]