<?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.3.8) -->


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

]>


<rfc ipr="trust200902" docName="draft-dkg-openpgp-external-secrets-02" 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="2025" month="September" day="12"/>

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

    <abstract>


<?line 69?>

<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 73?>

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

<t>Some OpenPGP secret key material is held by a hardware device that permits 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 an OpenPGP implementation to use external secret key material via a standard platform library interface 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 that 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 or be indexed by 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 its secret key material is stored in an cryptographic subsystem that is identifiable by public key parameters by setting the S2K usage octet to TBD (252?), known in shorthand as <spanx style="verb">External</spanx>.</t>

<t>The remainder of the Secret Key packet consists of an optional hint about how the implementation might be able to locate an external subsystem that offers access to the secret key.
This locator hint is entirely advisory.</t>

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

<section anchor="locator-hint"><name>Locator Hint</name>

<t>If the locator 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 locator hint can be used to preferentially access a likely token, without probing each token.</t>

<t>This document does not describe any particular scheme of locator hint.</t>

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

<t>When no locator hint is available, or when a consuming implementation does not understand a given locator hint, or when a given locator hint fails to point to a useful device, 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 these cases, 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, when handling an OpenPGP Encrypted Message, 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, or for probing whether a given public key matches the device's secret keys, 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 list of corresponding public keys or for probing whether a public key matches the device's secret keys.</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 Encryption (S2K Usage Octet)" registry:</t>

<texttable title="Row to add to OpenPGP Secret Key Encryption (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>248-255</c>
      <c>Private or Experimental 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 Security" value="pp. 1631-1648"/>
  <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 numbered="false" 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>
  <t>Andrew Gallagher</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 numbered="false" anchor="document-history"><name>Document History</name>

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

<t><list style="symbols">
  <t>A device can support indexing (probing for public key material) instead of enumerating available public keys</t>
  <t>Encourage "best effort" even if an understood locator hint fails to identify a device</t>
  <t>Private use range is now "Private or Experimental", and aligned with a power of 2</t>
</list></t>

</section>
<section numbered="false" 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 numbered="false" 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 numbered="false" 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 numbered="false" 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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
aEIr5g5LdBESwZKfcfx/vSdPHoxVAAA=

-->

</rfc>

