<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.14 (Ruby 3.1.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-dkg-openpgp-external-secrets-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title>OpenPGP External Secret Keys</title>

    <author initials="D. K." surname="Gillmor" fullname="Daniel Kahn Gillmor">
      <organization abbrev="ACLU">American Civil Liberties Union</organization>
      <address>
        <postal>
          <street>125 Broad St.</street>
          <city>New York, NY</city>
          <code>10004</code>
          <country>USA</country>
        </postal>
        <email>dkg@fifthhorseman.net</email>
      </address>
    </author>

    <date year="2024" month="August" day="02"/>

    <area>int</area>
    <workgroup>openpgp</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 68?>

<t>This document defines a standard wire format for indicating that the secret component of an OpenPGP asymmetric key is stored externally, for example on a hardware device or other comparable subsystem.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://dkg.gitlab.io/openpgp-external-secrets/"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-dkg-openpgp-external-secrets/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        OpenPGP Working Group mailing list (<eref target="mailto:openpgp@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/openpgp/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/openpgp/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://gitlab.com/dkg/openpgp-external-secrets/"/>.</t>
    </note>


  </front>

  <middle>


<?line 72?>

<section anchor="introduction"><name>Introduction</name>

<t>Some OpenPGP secret key material is held by hardware devices that permit the user to operate the secret key without divulging it explicitly.
For example, the <xref target="OPENPGP-SMARTCARD"/> specification is intended specifically for this use.
It may also possible for OpenPGP implementations to use external secret key material via standard platform library interfaces like <xref target="TPM"/>.</t>

<t>An OpenPGP Secret Key Packet (see <xref section="5.5.3" sectionFormat="of" target="RFC9580"/>) is typically used as part of a Transferable Secret Key (<xref section="10.2" sectionFormat="of" target="RFC9580"/>) for interoperability between OpenPGP implementations.
An implementation that uses an external secret key needs a standardized way to indicate to another implementation specific secret key material has been delegated to some external mechanism, like a hardware device.</t>

<t>This document defines a simple mechanism for indicating that a secret key has been delegated to an external mechanism by allocating a codepoint in the "Secret Key Encryption (S2K Usage Octet)" registry (see <xref section="3.7.2.1" sectionFormat="of" target="RFC9580"/>).</t>

<t>It also establishes a registry of hints about how to locate the external device, and defines a minimalist "best effort" method for locating external secret keys that is implementation-specific.</t>

<t>This document makes no attempt to specify how an OpenPGP implementation discovers, enumerates, or operates external secret keys, other than to recommend that the hardware or comparable external subsystem should be identifiable by the secret key's corresponding public key material.</t>

<section anchor="requirements-language"><name>Requirements Language</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

<t>The key words "PRIVATE USE" and "SPECIFICATION <bcp14>REQUIRED</bcp14>" that appear in this document when used to describe namespace allocation are to be interpreted as described in <xref target="RFC8126"/>.</t>

</section>
<section anchor="terminology"><name>Terminology</name>

<t>"Secret key" refers to a single cryptographic object, for example the "56 octets of the native secret key" of X448, as described in <xref section="5.5.5.8" sectionFormat="of" target="RFC9580"/>.</t>

<t>"Public key" likewise refers to a single cryptographic object, for example the "56 octets of the native public key" of X448, as above.</t>

<t>"OpenPGP certificate" or just "certificate" refers to an OpenPGP Transferable Public Key (see <xref section="10.1" sectionFormat="of" target="RFC9580"/>).</t>

<t>"External" refers to any cryptographic device or subsystem capable of performing an asymmetric secret key operation using an embedded secret key without divulging the secret to the user.
For discoverability, the external mechanism is also expected to be able to produce the public key corresponding to the embedded secret key.</t>

<t>While this document talks about "external" in the abstract as referring to a cryptographic device embedding a single secret key, most actual hardware devices or other cryptographic subsystems will embed and enable the use of multiple secret keys (see <xref target="multiple-key-hardware"/>).</t>

<t>This document uses the term "authorization" to mean any step, such as providing a PIN, password, proof of biometric identity, button-pushing, etc, that the external subsystem may require for an action.</t>

</section>
</section>
<section anchor="spec"><name>Externally-backed Secret Key Material</name>

<t>An OpenPGP Secret Key packet (<xref section="5.5.3" sectionFormat="of" target="RFC9580"/>) indicates that the secret key material is stored in an cryptographic subsystem that is identifiable by public key parameters in the following way.</t>

<t>The S2K usage octet is set to TBD (252?), known in shorthand as <spanx style="verb">External</spanx>.</t>

<t>The remainder of the Secret Key packet contains a hint about how the implementation might be able to identify the external subsystem.
This hint sequence is entirely advisory.</t>

<t>If the hint is empty (that is, if there are no bytes in the Secret Key packet following the <spanx style="verb">External</spanx> S2K usage octet, then the hint sequence is known as "best effort" (see <xref target="best-effort"/>).</t>

<t>If the hint is not empty, then the first octet of the hint describes the structure of the remainder of the hint, according to the "OpenPGP External Secret Key Locator Hints" registry established by this document.
That registry is initially empty, with octet values 249-255 (inclusive) reserved for PRIVATE USE.
Adding a new entry into that registry in the range 0-248 (inclusive)  uses IANA policy SPECIFICATION <bcp14>REQUIRED</bcp14>.</t>

<t>Regardless of what the locator hint says, a consuming implementation <bcp14>MAY</bcp14> use the "best effort" approach to identify an external subsystem that can provide access to the secret key.</t>

<t>A producing implementation that does not know how to provide a meaningful locator hint <bcp14>SHOULD NOT</bcp14> include any trailing data in the rest of such a Secret Key packet.</t>

<t>A consuming implementation that does not understand any particular locator hint <bcp14>SHOULD</bcp14> ignore any trailing data in such a Secret Key packet.</t>

<t>The purpose of the hinting mechanism is to enable optimized access.
For example, if an OpenPGP implementation has access to several dozen hardware tokens, and if querying each attached hardware token is expensive, a hint can be used to preferentially access a likely token, without probing each token.</t>

<t>This document does not describe any particular hinting scheme.</t>

<section anchor="best-effort"><name>Best Effort Access to External Secret Keys</name>

<t>When no external locator hint is available, or when a consuming implementation does not understand a given locator hint, a consuming implementation uses a "best effort" strategy to identify the external subsystem that provides access to a a secret key that matches the corresponding public key material.</t>

<t>Each OpenPGP implementation might support different external subsystems.
And, in some installations, the same external subsystem might be identified in different ways (for example, a USB smartcard might be connected to hub 2 at low speed, and in another, the same USB smartcard might be connected to hub 1 at high speed.</t>

<t>In some cases, no external subsystem can be identified that supports access to secret key material that corresponds to the associated public key.
Or, the external subsystem might be available, but for whatever reason attempting to use it could fail (for example, the hardware might advertise the availability of the key, but deny access when the implementation tries to use it).
In either case, an OpenPGP implementation that tries to use such an external secret key will fail.
The implementation should fail in a similar way to how it might fail if it tried to use a typical software-backed secret key locked with a password, but the password is unavailable to the implementation.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>External or hardware-backed secret keys promise several distinct security advantages to the user:</t>

<t><list style="symbols">
  <t>Often, the secret key cannot be extracted from the external device, so "kleptography" (the stealing of secret key material) is harder to perform.</t>
  <t>Some hardware can be moved between machines, enabling secret key portability without expanding the kleptographic attack surface.</t>
  <t>Some hardware devices offer auditability controls in the form of rate-limiting, user-visible authorization steps (e.g., button-presses or biometric sensors), or tamper-resistant usage counters.
Malicious use of a secret key on such a device should be harder, or at least more evident.</t>
  <t>Some hardware security devices can attest that key material has been generated on-card, thereby signaling that - barring a successful attack on the hardware - no other copy of the private key material exists.
Such mechanisms signal that the key holder did not have a chance to mishandle (e.g.: accidentally disclose) the private key material.</t>
</list></t>

<t>However, none of these purported advantages are without caveats.</t>

<t>The hardware itself might actually not resist secret key exfiltration as expected.
For example, isolated hardware devices are sometimes easier to attack physically, via temperature or voltage fluctuations (see <xref target="VOLTAGE-GLITCHING"/> and <xref target="SMART-CARD-FAULTS"/>).</t>

<t>In some cases, dedicated cryptographic hardware that generates a secret key internally may have significant flaws (see <xref target="ROCA"/>).</t>

<t>Furthermore, the most sensitive material in the case of decryption is often the cleartext itself, not the secret key material.
If the host computer itself is potentially compromised, then kleptographic exfiltration of the secret key material itself is only a small risk.
For example, the OpenPGP symmetric session key itself could be exfiltrated, permitting access to the cleartext to anyone without access to the secret key material.</t>

<t>Portability brings with it other risks, including the possibility of abuse by the host software on any of the devices to which the hardware is connected.</t>

<t>Rate-limiting, user-visible authorization steps, and any other form of auditability also suffer from risks related to compromised host operating systems.
Few hardware devices are capable of revealing to the user what operations specifically were performed by the device, so even if the user deliberately uses the device to, say, sign an object, the user depends on the host software to feed the correct object to the device's signing capability.</t>

</section>
<section anchor="usability-considerations"><name>Usability Considerations</name>

<t>External secret keys present specific usability challenges for integration with OpenPGP.</t>

<section anchor="some-hardware-might-be-unavailable-to-some-implementations"><name>Some Hardware Might Be Unavailable To Some Implementations</name>

<t>This specification gives no hints about how to find the hardware device, and presumes that an implementation will be able to probe available hardware to associate it with the corresponding public key material.
In particular, there is no attempt to identify specific hardware or "slots" using identifiers like PKCS #11 URIs (<xref target="RFC7512"/>) or smartcard serial numbers (see <xref target="historical-notes"/>).
This minimalism is deliberate, as it's possible for the same key material to be available on multiple hardware devices, or for a device to be located on one platform with a particular hardware identifier, while on another platform it uses a different hardware identifier.</t>

<t>Not every OpenPGP implementation will be able to talk to every possible hardware device.
If an OpenPGP implementation encounters a hardware-backed secret key as indicated with this mechanism, but cannot identify any attached hardware that lists the corresponding secret key material, it should warn the user that the specific key claims to be hardware-backed but the corresponding hardware cannot be found.
It may also want to inform the user what categories of hardware devices it is capable of probing, for debugging purposes.</t>

</section>
<section anchor="multiple-key-hardware"><name>Hardware Should Support Multiple Secret Keys</name>

<t>Most reasonable OpenPGP configurations require the use of multiple secret keys by a single operator.
For example, the user may use one secret key for signing, and another secret key for decryption, and the corresponding public keys of both are contained in the same OpenPGP certificate.</t>

<t>Reasonable hardware <bcp14>SHOULD</bcp14> support embedding and identifying more than one secret key, so that a typical OpenPGP user can rely on a single device for hardware backing.</t>

</section>
<section anchor="authorization-challenges"><name>Authorization Challenges</name>

<t>Cryptographic hardware can be difficult to use if frequent authorization is required, particularly in circumstances like reading messages in a busy e-mail inbox.
This hardware <bcp14>MAY</bcp14> require authorization for each use of the secret key material as a security measure, but considerations should be made for caching authorization.</t>

<t>If the cryptographic hardware requires authorization for listing the corresponding public key material, it becomes even more difficult to use the device in regular operation.
Hardware <bcp14>SHOULD NOT</bcp14> require authorization for the action of producing the corresponding public key.</t>

<t>If a user has two attached pieces of hardware that both hold the same secret key, and one requires authorization while the other does not, it is reasonable for an implementation to try the one that doesn't require authorization first.
Some cryptographic hardware is designed to lock the device on repeated authorization failures (e.g. 3 bad PIN entries locks the device), so this approach reduces the risk of accidental lockout.</t>

</section>
<section anchor="latency-and-error-handling"><name>Latency and Error Handling</name>

<t>While hardware-backed secret key operations can be significantly slower than modern computers, and physical affordances like button-presses or NFC tapping can themselves incur delay, an implementation using a hardware-backed secret key should remain responsive to the user.
It should indicate when some interaction with the hardware may be required, and it should use a sensible timeout if the hardware device appears to be unresponsive.</t>

<t>A reasonable implementation should surface actionable errors or warnings from the hardware to the user where possible.</t>

</section>
</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>This document asks IANA to make three changes in the "OpenPGP" protocol group.</t>

<t>Add the following row in the "OpenPGP Secret Key Encrpytion (S2K Usage Octet)" registry:</t>

<texttable title="Row to add to OpenPGP Secret Key Encrpytion (S2K Usage Octet) registry">
      <ttcol align='left'>S2K usage octet</ttcol>
      <ttcol align='left'>Shorthand</ttcol>
      <ttcol align='left'>Encryption parameter fields</ttcol>
      <ttcol align='left'>Encryption</ttcol>
      <ttcol align='left'>Generate?</ttcol>
      <c>TBD (252?)</c>
      <c>External</c>
      <c>External Locator Hint, see <xref target="spec"/> of RFC XXX (this document)</c>
      <c>no data</c>
      <c>Yes</c>
</texttable>

<t>Modify this row of the "OpenPGP Symmetric Key Algorithms" registry:</t>

<texttable title="Row to modify in OpenPGP Symmetric Key Algorithms registry">
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>Algorithm</ttcol>
      <c>253, 254, and 255</c>
      <c>Reserved to avoid collision with Secret Key Encryption</c>
</texttable>

<t>to include TBD (252?) in this reserved codepoint sequence, resulting in the following entry:</t>

<texttable title="Modified row in OpenPGP Symmetric Key Algorithms registry">
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>Algorithm</ttcol>
      <c>TBD (252?), 253, 254, and 255</c>
      <c>Reserved to avoid collision with Secret Key Encryption</c>
</texttable>

<t>Establish a new registry, "OpenPGP External Secret Key Locator Hints", with the following columns and initial range:</t>

<texttable title="OpenPGP External Secret Key Locator Hints">
      <ttcol align='right'>ID</ttcol>
      <ttcol align='left'>Shorthand</ttcol>
      <ttcol align='left'>Description</ttcol>
      <ttcol align='left'>Reference</ttcol>
      <c>0-191</c>
      <c>Unassigned</c>
      <c>&#160;</c>
      <c>RFC XXX (this document)</c>
      <c>249-255</c>
      <c>Private Use</c>
      <c>&#160;</c>
      <c>RFC XXX (this document)</c>
</texttable>

<t>Assigning a new codepoint to this registry uses SPECIFICATION <bcp14>REQUIRED</bcp14>.</t>

</section>


  </middle>

  <back>


    <references title='Normative References' anchor="sec-normative-references">



<reference anchor="RFC9580">
  <front>
    <title>OpenPGP</title>
    <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters"/>
    <author fullname="D. Huigens" initials="D." surname="Huigens"/>
    <author fullname="J. Winter" initials="J." surname="Winter"/>
    <author fullname="Y. Niibe" initials="Y." surname="Niibe"/>
    <date month="July" year="2024"/>
    <abstract>
      <t>This document specifies the message formats used in OpenPGP. OpenPGP provides encryption with public key or symmetric cryptographic algorithms, digital signatures, compression, and key management.</t>
      <t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format. It is not a step-by-step cookbook for writing an application. It describes only the format and methods needed to read, check, generate, and write conforming packets crossing any network. It does not deal with storage and implementation questions. It does, however, discuss implementation issues necessary to avoid security flaws.</t>
      <t>This document obsoletes RFCs 4880 ("OpenPGP Message Format"), 5581 ("The Camellia Cipher in OpenPGP"), and 6637 ("Elliptic Curve Cryptography (ECC) in OpenPGP").</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9580"/>
  <seriesInfo name="DOI" value="10.17487/RFC9580"/>
</reference>

<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>

<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>

<reference anchor="RFC8126">
  <front>
    <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
    <author fullname="M. Cotton" initials="M." surname="Cotton"/>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <author fullname="T. Narten" initials="T." surname="Narten"/>
    <date month="June" year="2017"/>
    <abstract>
      <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
      <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
      <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="26"/>
  <seriesInfo name="RFC" value="8126"/>
  <seriesInfo name="DOI" value="10.17487/RFC8126"/>
</reference>




    </references>

    <references title='Informative References' anchor="sec-informative-references">

<reference anchor="OPENPGP-SMARTCARD" target="https://gnupg.org/ftp/specs/OpenPGP-smart-card-application-3.4.1.pdf">
  <front>
    <title>Functional Specification of the OpenPGP application on ISO Smart Card Operating Systems, Version 3.4.1</title>
    <author initials="A." surname="Pietig" fullname="Achim Pietig">
      <organization></organization>
    </author>
    <date year="2020" month="March" day="18"/>
  </front>
</reference>
<reference anchor="GNUPG-SECRET-STUB" target="https://dev.gnupg.org/source/gnupg/browse/master/doc/DETAILS;gnupg-2.4.3$1511">
  <front>
    <title>GNU Extensions to the S2K algorithm</title>
    <author initials="W." surname="Koch" fullname="Werner Koch">
      <organization>g10 Code</organization>
    </author>
    <date year="2023" month="July" day="04"/>
  </front>
</reference>
<reference anchor="TPM" target="https://trustedcomputinggroup.org/resource/tpm-library-specification/">
  <front>
    <title>Trusted Platform Module Library Specification, Family “2.0”, Level 00, Revision 01.59</title>
    <author >
      <organization>Trusted Computing Group</organization>
    </author>
    <date year="2019" month="November"/>
  </front>
</reference>
<reference anchor="SMART-CARD-FAULTS" target="http://hdl.handle.net/2117/99293">
  <front>
    <title>Smart Card Fault Injections with High Temperatures</title>
    <author initials="P. M. C." surname="Massolino" fullname="Pedro Maat C. Massolino">
      <organization></organization>
    </author>
    <author initials="B." surname="Ege" fullname="Baris Ege">
      <organization></organization>
    </author>
    <author initials="L." surname="Batina" fullname="Lejla Batina">
      <organization></organization>
    </author>
    <date year="2016" month="November" day="15"/>
  </front>
</reference>


<reference anchor="VOLTAGE-GLITCHING">
  <front>
    <title>The Forgotten Threat of Voltage Glitching: A Case Study on Nvidia Tegra X2 SoCs</title>
    <author fullname="Otto Bittner" initials="O." surname="Bittner">
      <organization/>
    </author>
    <author fullname="Thilo Krachenfels" initials="T." surname="Krachenfels">
      <organization/>
    </author>
    <author fullname="Andreas Galauner" initials="A." surname="Galauner">
      <organization/>
    </author>
    <author fullname="Jean-Pierre Seifert" initials="J." surname="Seifert">
      <organization/>
    </author>
    <date year="2021"/>
  </front>
  <seriesInfo name="DOI" value="10.48550/ARXIV.2108.06131"/>
<refcontent>arXiv</refcontent></reference>

<reference anchor="ROCA">
  <front>
    <title>The Return of Coppersmith's Attack: Practical Factorization of Widely Used RSA Moduli</title>
    <author fullname="Matus Nemec" initials="M." surname="Nemec">
      <organization>Masaryk University, Ca' Foscari University of Venice, Brno, Czech Rep</organization>
    </author>
    <author fullname="Marek Sys" initials="M." surname="Sys">
      <organization>Masaryk University, Brno, Czech Rep</organization>
    </author>
    <author fullname="Petr Svenda" initials="P." surname="Svenda">
      <organization>Masaryk University, Brno, Czech Rep</organization>
    </author>
    <author fullname="Dusan Klinec" initials="D." surname="Klinec">
      <organization>EnigmaBridge, Masaryk University, Brno, Czech Rep</organization>
    </author>
    <author fullname="Vashek Matyas" initials="V." surname="Matyas">
      <organization>Masaryk University, Brno, Czech Rep</organization>
    </author>
    <date month="October" year="2017"/>
  </front>
  <seriesInfo name="Proceedings of the 2017 ACM SIGSAC Conference on Computer and Communications" value="Security"/>
  <seriesInfo name="DOI" value="10.1145/3133956.3133969"/>
<refcontent>ACM</refcontent></reference>

<reference anchor="RFC7512">
  <front>
    <title>The PKCS #11 URI Scheme</title>
    <author fullname="J. Pechanec" initials="J." surname="Pechanec"/>
    <author fullname="D. Moffat" initials="D." surname="Moffat"/>
    <date month="April" year="2015"/>
    <abstract>
      <t>This memo specifies a PKCS #11 Uniform Resource Identifier (URI) Scheme for identifying PKCS #11 objects stored in PKCS #11 tokens and also for identifying PKCS #11 tokens, slots, or libraries. The URI scheme is based on how PKCS #11 objects, tokens, slots, and libraries are identified in "PKCS #11 v2.20: Cryptographic Token Interface Standard".</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7512"/>
  <seriesInfo name="DOI" value="10.17487/RFC7512"/>
</reference>




    </references>


<?line 271?>

<section anchor="historical-notes"><name>Historical notes</name>

<t>Some OpenPGP implementations make use of private codepoint ranges in the OpenPGP specification within an OpenPGP Transferable Secret Key to indicate that the secret key can be found on a smartcard.</t>

<t>For example, GnuPG uses the private/experimental codepoint 101 in the S2K Specifier registry, along with an embedded trailer with an additional codepoint, plus the serial number of the smartcard (see <xref target="GNUPG-SECRET-STUB"/>).</t>

<t>However, recent versions of that implementation ignore the embedded serial number in favor of scanning available devices for a match of the key material, since some people have multiple cards with the same secret key.</t>

</section>
<section anchor="test-vectors"><name>Test vectors</name>

<section anchor="example-transferable-secret-key"><name>Example Transferable Secret Key</name>

<t>The OpenPGP Transferable Secret Key used for this example. It includes (unencrypted) private key material for both its primary key and one subkey:</t>

<figure><sourcecode type="application/pgp-keys" name="software-backed.key"><![CDATA[
-----BEGIN PGP PRIVATE KEY BLOCK-----

xVgEZgWtcxYJKwYBBAHaRw8BAQdAlLK6UPQsVHR2ETk1SwVIG3tBmpiEtikYYlCy
1TIiqzYAAQCwm/O5cWsztxbUcwOHycBwszHpD4Oa+fK8XJDxLWH7dRIZzR08aGFy
ZHdhcmUtc2VjcmV0QGV4YW1wbGUub3JnPsKNBBAWCAA1AhkBBQJmBa1zAhsDCAsJ
CAcKDQwLBRUKCQgLAhYCFiEEXlP8Tur0WZR+f0I33/i9Uh4OHEkACgkQ3/i9Uh4O
HEnryAD8CzH2ajJvASp46ApfI4pLPY57rjBX++d/2FQPRyqGHJUA/RLsNNgxiFYm
K5cjtQe2/DgzWQ7R6PxPC6oa3XM7xPcCx10EZgWtcxIKKwYBBAGXVQEFAQEHQE1Y
XOKeaklwG01Yab4xopP9wbu1E+pCrP1xQpiFZW5KAwEIBwAA/12uOubAQ5nhf1UF
a51SQwFLpggB/Spn29qDnSQXOTzIDvPCeAQYFggAIAUCZgWtcwIbDBYhBF5T/E7q
9FmUfn9CN9/4vVIeDhxJAAoJEN/4vVIeDhxJVTgA/1WaFrKdP3AgL0Ffdooc5XXb
jQsj0uHo6FZSHRI4pchMAQCyJnKQ3RvW/0gm41JCqImyg2fxWG4hY0N5Q7Rc6Pyz
DQ==
=lYbx
-----END PGP PRIVATE KEY BLOCK-----
]]></sourcecode></figure>

</section>
<section anchor="as-an-external-secret-key"><name>As an External Secret Key</name>

<t>The same OpenPGP Transferable Secret Key with the S2K Usage Octet set to 252? (External) for both the Primary Key Packet and the Subkey Packet. This format omits all data following the S2K Usage Octet:</t>

<figure><sourcecode type="application/pgp-keys" name="external-secret.key"><![CDATA[
-----BEGIN PGP PRIVATE KEY BLOCK-----

xTQEZgWtcxYJKwYBBAHaRw8BAQdAlLK6UPQsVHR2ETk1SwVIG3tBmpiEtikYYlCy
1TIiqzb8zR08aGFyZHdhcmUtc2VjcmV0QGV4YW1wbGUub3JnPsKNBBAWCAA1AhkB
BQJmBa1zAhsDCAsJCAcKDQwLBRUKCQgLAhYCFiEEXlP8Tur0WZR+f0I33/i9Uh4O
HEkACgkQ3/i9Uh4OHEnryAD8CzH2ajJvASp46ApfI4pLPY57rjBX++d/2FQPRyqG
HJUA/RLsNNgxiFYmK5cjtQe2/DgzWQ7R6PxPC6oa3XM7xPcCxzkEZgWtcxIKKwYB
BAGXVQEFAQEHQE1YXOKeaklwG01Yab4xopP9wbu1E+pCrP1xQpiFZW5KAwEIB/zC
eAQYFggAIAUCZgWtcwIbDBYhBF5T/E7q9FmUfn9CN9/4vVIeDhxJAAoJEN/4vVIe
DhxJVTgA/1WaFrKdP3AgL0Ffdooc5XXbjQsj0uHo6FZSHRI4pchMAQCyJnKQ3RvW
/0gm41JCqImyg2fxWG4hY0N5Q7Rc6PyzDQ==
=3w/O
-----END PGP PRIVATE KEY BLOCK-----
]]></sourcecode></figure>

<t>The (primary) Secret-Key Packet of this key looks as follows, in this format:</t>

<figure><artwork><![CDATA[
0000  c5                        packet type: Secret-Key Packet
0001     34                     packet length
0002        04                  version
0003           66 05 ad 73      creation time
0007                       16   public-key algorithm: EdDSALegacy
0008  09                        curve OID length
0009     2b 06 01 04 01 da 47   curve OID
0010  0f 01
0012        01 07               EdDSA public key Q MPI length
0014              40 94 b2 ba   EdDSA public key Q MPI
0018  50 f4 2c 54 74 76 11 39
0020  35 4b 05 48 1b 7b 41 9a
0028  98 84 b6 29 18 62 50 b2
0030  d5 32 22 ab 36
0035                 fc         S2K usage octet
]]></artwork></figure>

</section>
</section>
<section anchor="acknowledgements"><name>Acknowledgements</name>

<t>This work depends on a history of significant work with hardware-backed OpenPGP secret key material, including useful implementations and guidance from many people, including:</t>

<t><list style="symbols">
  <t>NIIBE Yutaka</t>
  <t>Achim Pietig</t>
  <t>Werner Koch</t>
  <t>Heiko Schäfer</t>
</list></t>

<t>The people acknowledeged in this section are not responsible for any proposals, errors, or omissions in this document.</t>

</section>
<section anchor="document-history"><name>Document History</name>

<section anchor="substantive-changes-from-draft-dkg-openpgp-external-secrets-00-to-draft-dkg-openpgp-external-secrets-01"><name>Substantive Changes from draft-dkg-openpgp-external-secrets-00 to draft-dkg-openpgp-external-secrets-01</name>

<t><list style="symbols">
  <t>define the external locator hinting mechanism</t>
</list></t>

</section>
<section anchor="substantive-changes-from-draft-dkg-openpgp-hardware-secrets-02-to-draft-dkg-openpgp-external-secrets-00"><name>Substantive Changes from draft-dkg-openpgp-hardware-secrets-02 to draft-dkg-openpgp-external-secrets-00</name>

<t><list style="symbols">
  <t>rename from "Hardware-backed" to "External"</t>
  <t>use RFC9580 instead of I-D.ietf-openpgp-crypto-refresh</t>
</list></t>

</section>
<section anchor="substantive-changes-from-draft-dkg-openpgp-hardware-secrets-01-to-draft-dkg-openpgp-hardware-secrets-02"><name>Substantive Changes from draft-dkg-openpgp-hardware-secrets-01 to draft-dkg-openpgp-hardware-secrets-02</name>

<t><list style="symbols">
  <t>re-format hexdump of test vector secret key packet</t>
</list></t>

</section>
<section anchor="substantive-changes-from-draft-dkg-openpgp-hardware-secrets-00-to-draft-dkg-openpgp-hardware-secrets-01"><name>Substantive Changes from draft-dkg-openpgp-hardware-secrets-00 to draft-dkg-openpgp-hardware-secrets-01</name>

<t><list style="symbols">
  <t>Added test vector for experimentation</t>
  <t>Mention on-device attestation</t>
  <t>update OpenPGP card spec reference to 3.4.1</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
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
CThEFQwKBCOLPPn2iKg21yyxqKhghS6B8TJo4ZgzyvKjHM7lPvbCAu2yZUWU
3oB561g+qpNdI0zV21ml10EjXZHHoorkgOwppyRDZYEA0OQIekVynu9l1MGV
0vKJ0QQUH4Rm+06kWIWFEDOw5KU7UbL8fQhWvs9DDB+6n2amrJO0VVmWTP0p
zJ9r8VxREDmG7KwEbu8j+dSw2nejKg/VXijM1KnjYUunxtQL3aoOl/s0cEFZ
oOv69kZLD6UI1a2pclZVLr4UaRpaJq35K7NzCBpFqURhFVkULrdw5OWDnPnl
poqa8COs1MrdvDwBTVQP1uiiP2bfWRZ7uBsK3O34+e60/7prtXF3A/cR85xY
SLcZZthXmYcX4HkaYYO3b4KD54KiCUki72+h6lih7bSp6qXfi2rbWZ6JVzPf
qJKsorbnO1zrVkwIknaDCivCt2VLDmI+hh42b0vL06qiGJV7s5xNdXR2qtFQ
NV/lA3i6qatUrdgyBGj2NVbxAWStduWn6+qEe5JUUaSXckZtdGUNX6ol8lDj
81JD15Y0E+URajyi9BMFWDSFTQjvUZpWqkavttUa0VywqWlbCWpLGKsjF1Uu
AAOEpb7JfENNqzUli77tBUJJdn1NOi+uzlrO7VSiOQW+uNUeyCUiJ2q3I9lW
vb46qOFRUrYZPjwqLZY32mVlVHYfuHySzWbSyKmMLKSvy93cWC5/rAptV1rB
q4XO7bu3hnGFnl+WbGj6vE0hCqfeLNPRSm+XfmmveLIqNq5lsIuSLXiIeIPM
o7HCCkTBRauwogO7tJy1ZwrsKB97ySsS4ycRWmzC9XajLBXmnmNLgwbt1OSs
yQWndgR0abO0Z4/1QaXhVOGPpE6Ha2ukkK46G3UhR09PrMGElPYmo7Dgp3JL
01KNhaHqwl2pEr0KNOrnkdMw+tvTBFWuQP+DPizNy2NTgEi0CZmu4S0vVwWE
prnv82lzzPESJwsww8+bdEGzXLnXIQTlgFTyAtAI6ZsZyBrYJHrWe7R56O49
5ipXJYCqhlh1zooNlW343FZZj0z0A5BilqhqpVOBJKVSQmC7kr0OVWxm1amL
3dUdSZciWGyh2Kc61+zrIjc5tQk2O2JWisCP9GhDSiXA56G6zCgK5RCzYZyv
KSzusO3mKlVZHZ33FDt9L9EseWJLpcVCSbqMCrcee9xZ83mk9GSIWJsojK9s
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
q9gjppaWmDss0eUkJEt+Xdz/AzsqyyjvUQAA

-->

</rfc>

