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


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

]>


<rfc ipr="trust200902" docName="draft-hko-openpgp-identifiers-for-legacy-devices-02" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="OpenPGP identifiers for legacy devices">OpenPGP key identifiers for legacy hardware devices</title>

    <author initials="H." surname="Schäfer" fullname="Heiko Schäfer">
      <organization></organization>
      <address>
        <email>heiko.schaefer@posteo.de</email>
      </address>
    </author>

    <date year="2026" month="August" day="24"/>

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

    <abstract>


<t>This document describes an approach for storing a shortened fingerprint-based identifier for OpenPGP private key material on hardware security devices.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-hko-openpgp-identifiers-for-legacy-devices/"/>.
      </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/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://codeberg.org/heiko/openpgp-identifiers-for-legacy-devices"/>.</t>
    </note>


  </front>

  <middle>


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

<t>Private key material for OpenPGP component keys may be stored on hardware security devices (also see <xref target="I-D.dkg-openpgp-external-secrets"></xref>).
Some such devices offer informational data fields for key identification based on OpenPGP fingerprints.</t>

<t>Many currently available hardware devices that target use with OpenPGP keys offer 20 octet identifier fields (originally designed to store OpenPGP v4 fingerprints).</t>

<t>For example, the "OpenPGP card" specification defines a 20 octet "fingerprint" field for each secret key packet stored on the card (see page 23 in <xref target="OPENPGP-SMARTCARD"/>, under the tag "C5").
These fields were sized for OpenPGP version 4 fingerprints (based on SHA-1 hashes). Note that the field's name is "fingerprint", since that was its original intended use.</t>

<t>This document describes an interoperable scheme for using such size-constrained identifier fields to refer to OpenPGP component keys with version &gt; 4.
It deals with two limitations of existing identifier fields:</t>

<t><list style="symbols">
  <t>They don't allow storing the key packet version.</t>
  <t>Modern OpenPGP fingerprints exceed the field size. For example, OpenPGP version 6 key packets use 32 octet SHA-256 fingerprints (see <xref section="5.5.4.3" sectionFormat="of" target="RFC9580"/>).</t>
</list></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>

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

<t><list style="symbols">
  <t>"Transferable Secret Key" or just "TSK" refers to an OpenPGP Transferable Secret Key (see <xref section="10.2" sectionFormat="of" target="RFC9580"/>).</t>
  <t>"Component key" refers to a single key object found within an OpenPGP certificate.
A certificate's primary key is a "component key", and any subkey in the certificate is also a "component key".</t>
  <t>"Keyholder" is the party that has legitimate access to the secret key material corresponding to the component keys in a certificate.
The keyholder can sign messages that can be verified with the certificate, decrypt messages that were encrypted to the certificate, and update the certificate itself over time.</t>
</list></t>

</section>
</section>
<section anchor="scope"><name>Scope</name>

<t>This draft describes an interoperable scheme for using a class of widely available hardware security devices (such as the "OpenPGP card" family of devices) for OpenPGP key packets with version &gt; 4.</t>

<t>This scheme may be applied to handle OpenPGP key packets on hardware security devices that have 20 octet-sized informational key identification fields.
The scheme <bcp14>MUST NOT</bcp14> be applied in other contexts, without a specification that describes why it is appropriate for that context.</t>

<t>This draft also outlines current practices for handling OpenPGP v4 keys on such devices, as informational context.</t>

</section>
<section anchor="motivation"><name>Motivation</name>

<t>For the last decades, hardware security devices used for OpenPGP keys have typically stored full v4 key fingerprints as identifiers.
While this fingerprint information is not required for performing cryptographic operations, it is useful for various purposes. More on this below.</t>

<t>Since identifier fields on many existing devices are size-limited, full modern fingerprints can not be stored in them.
Separately, the key packet version can also not be stored explicitly.</t>

<t>This draft proposes an approach to storing identifiers for modern OpenPGP keys on existing hardware.
The identifier scheme described here aims to match the properties of existing practice for v4 keys as closely as possible.</t>

</section>
<section anchor="purposes-of-the-identifier-field"><name>Purposes of the identifier field</name>

<t>The identifier value stored on hardware devices can serve some or all of the following purposes.</t>

<section anchor="detect-if-key-material-is-associated-with-an-openpgp-key-packet"><name>Detect if key material is associated with an OpenPGP key packet</name>

<t>Bare key material on a hardware device may be associated with different protocols.
Even on "OpenPGP card" devices, some users may store cryptographic key material that is associated with other (non-OpenPGP) protocols.</t>

<t>It can be useful for applications to detect whether a key on a device is associated with an OpenPGP component key.</t>

<t>This detection is currently possible for v4 OpenPGP keys by testing if the v4 fingerprint stored on the device corresponds to the public key material stored on the device.</t>

<t>This draft extends this property for key version &gt; 4.</t>

</section>
<section anchor="detect-the-openpgp-key-packet-version"><name>Detect the OpenPGP key packet version</name>

<t>Users or software can easily detect the OpenPGP key packet version of keys on a hardware device.</t>

<t>By default, version 4 is assumed, for historical reasons.</t>

<t>The scheme described in this draft explicitly encodes the key packet version in the identifier, for key packet version &gt; 4.</t>

</section>
<section anchor="identification-of-openpgp-key-packets-stored-on-devices"><name>Identification of OpenPGP key packets stored on devices</name>

<t>Users or software can easily compare the identifier stored on a hardware device with fingerprints that are known to them.</t>

<t>By default, the identifier field is assumed to contain the fingerprint of a version 4 OpenPGP key packet.</t>

<t>The scheme described in this draft stores an 8 octet fingerprint prefix in the identifier field for key packet version &gt;4.
This fingerprint prefix can be visually inspected by users, or leveraged by applications for different purposes (more on this below).</t>

</section>
<section anchor="validate-reconstruction-of-openpgp-key-packets-from-a-device"><name>Validate reconstruction of OpenPGP key packets from a device</name>

<t>Some applications may want to reconstruct the exact OpenPGP key packet that is associated with key material on a hardware device, without having a separate copy of the full key packet available.</t>

<t>The identifier field can be used to achieve positive confirmation that an OpenPGP key packet has been correctly reconstructed from the public parameters and metadata stored on the device.</t>

<t>This positive confirmation validates all parameters of a key packet, including the public key material, version number, creation time, algorithm id, additional elliptic curve or KDF parameters.</t>

<t>Validation of a reconstructed key packet is possible both for version 4 and version &gt; 4, with the scheme outlined in this draft.</t>

<t>Note that this validation has the benefit that an application can detect cases where it doesn't interpret the intended usage of key material on a device correctly (e.g. because it doesn't implement some newer draft yet, and the data on the card is ambiguous and allows misinterpretation of the key as a format that the implementation does know about).
This enables applications to back off gracefully and intentionally, instead of using key material in an unintended way, with potentially confusing outcomes for users.</t>

</section>
</section>
<section anchor="encoding-identifiers-for-openpgp-keys"><name>Encoding identifiers for OpenPGP keys</name>

<t>This draft describes 20 octet-sized identifiers that represent OpenPGP key packets.
These identifiers can be stored on hardware devices with fields of that fixed length.</t>

<section anchor="encoding-for-v4-openpgp-key-packets"><name>Encoding for v4 OpenPGP key packets</name>

<t>Fingerprints for v4 key packets have been stored verbatim on devices with 20 octet identifier fields.</t>

<t>This draft notes this practice, and does not propose handling v4 key packets differently, going forward.
However, this existing use of the identifier field interacts with this draft, which outlines a different mode of using the same field for keys with version &gt; 4.</t>

<t>Existing practice for storing v4 key packets needs to be taken into account by implementers. Even implementations that don't support v4 keys need to be able to gracefully handle identifier fields that contain verbatim v4 fingerprints.</t>

</section>
<section anchor="encoding-for-post-v4-openpgp-key-packets"><name>Encoding for post-v4 OpenPGP key packets</name>

<t>To store a fingerprint-based key identifier on a hardware device for OpenPGP keys with a version &gt; 4, instead of the full fingerprint, applications should store the concatenation of:</t>

<t><list style="symbols">
  <t>A "version marker" that specifies the key packet's version.</t>
  <t>A prefix of the full fingerprint.</t>
</list></t>

<t>The version marker clearly identifies the key packet version, while the fingerprint prefix enables both visual inspection and positive confirmation if key material on the device is associated with a specific OpenPGP key packet.</t>

<t>To encode an OpenPGP key packet with version &gt; 4, applications should store the concatenation of the following two parts:</t>

<t><list style="symbols">
  <t>12 octets of <em>version marker</em>, consisting of 11 copies of the value <spanx style="verb">0x00</spanx>, followed by one octet of the key version. For a version 6 key, the version marker is <spanx style="verb">000000000000000000000006</spanx>.</t>
  <t>The leftmost 8 octets of the full fingerprint.</t>
</list></t>

<t>Note that the legal values of the version marker overlap with a part of the v4 fingerprint namespace.
Some legitimate v4 fingerprints will be interpreted as post-v4 identifiers, under this scheme (more on this below).
The size of the version marker is intentionally large, so that the subset of the v4 fingerprint namespace that it overlaps with is small.</t>

</section>
<section anchor="example-identifier-for-a-version-6-openpgp-key-packet"><name>Example: Identifier for a version 6 OpenPGP key packet</name>

<t>The full version 6 fingerprint of the primary key packet of the Transferable Secret Key in <xref section="A.4" sectionFormat="of" target="RFC9580"/> is <spanx style="verb">cb186c4f0609a697e4d52dfa6c722b0c1f1e27c18a56708f6525ec27bad9acc9</spanx>.</t>

<t>When uploading this component key to e.g. an OpenPGP card device, the identifier on the card should be set to <spanx style="verb">000000000000000000000006cb186c4f0609a697</spanx>.</t>

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

<section anchor="collision-risk-for-identifiers"><name>Collision risk for identifiers</name>

<t>This text proposes use of (effectively) an 8 octet identifier to recognize a key on an OpenPGP card, instead of previously a 20 octet identifier.</t>

<t>This raises the question if there are any risks associated with that shortened identifier.</t>

<t>Conceivable risks fall into at least two classes:</t>

<t><list style="numbers">
  <t>Accidental occurrence of a duplicate identifier in a user's context.</t>
  <t>Attackers who intentionally cause a duplicate identifier to be present in a user's context.</t>
</list></t>

<t>It is important to keep in mind that the identifiers stored on hardware security devices only exist within the user's local computing environment.
They are only visible locally, when a user plugs in, for example, a USB device that implements the "OpenPGP card" application.</t>

<section anchor="accidental-occurrence-of-duplicate-identifiers"><name>Accidental occurrence of duplicate identifiers</name>

<t>Accidental collisions of 8 octet fingerprint prefixes between multiple hardware-backed component keys in a user's local environment are exceedingly unlikely.</t>

<t>And even if they were to occur, they could be detected safely by applications, e.g. by reconstructing the full key packet and checking the complete fingerprint for each hardware-backed key.</t>

</section>
<section anchor="attackers-causing-occurrence-of-duplicate-identifiers-between-devices"><name>Attackers causing occurrence of duplicate identifiers between devices</name>

<t>This case only arises if an attacker can introduce hardware security devices into a user's computing environment.</t>

<t>For example, when an attacker underhandedly replaces a user's OpenPGP card.</t>

<t>In such a scenario, it's unclear that this draft - and in particular, the 8 octet fingerprint prefix stored as part of the identifier - adds any risks over the status quo for v4 key packets:</t>

<t><list style="symbols">
  <t>If an application takes the identifier field at face value, then an attacker can mislead the user by writing any value into that field, on a device that is used in an attack (including in the pre-existing v4 case). A longer value doesn't improve the situation, there.</t>
  <t>Assuming an "honest" device (which reports the public key material correctly): If an application checks for consistency between the reported public key material and the reported identifier, it would require non-trivial effort to find an 8 octet collision with a pre-existing user key.</t>
  <t>However, the user's software is not limited to checking the 8 octets of fingerprint prefix in the identifier field. It can instead compare the full fingerprint on the reconstructed key packet against the expected fingerprint.</t>
  <t>Assuming a "dishonest" device (which reports "untrue" public key parameters to the host system), an attacker can mislead a user independent of the identifier scheme used. A dishonest device can report the expected public key material and fingerprint values, independent of the private key material on the device. The private key material that a hardware security device uses can by definition not be inspected directly by the host system.</t>
</list></t>

<t>In short, relying on self-reported information from a hardware device is always a losing proposition, if the device is malicious.
This draft does not attempt to mitigate the risks associated with adversarial devices.</t>

<t>(As a side-note, it is unclear under which circumstances an attacker benefits from causing a target keyholder to use a different private key than the one they intended to use. While there might be edge cases in which such attacks that are important to consider, underhandedly replacing a user's private key material is not a typical attack scenario.)</t>

</section>
</section>
</section>
<section anchor="use-cases"><name>Use cases</name>

<section anchor="finding-a-hardware-device-that-matches-a-given-openpgp-public-key-packet"><name>Finding a hardware device that matches a given OpenPGP public key packet</name>

<t>When using the identifier scheme outlined in this text, applications can determine if a hardware device contains key material that corresponds to a given OpenPGP key packet, as follows:</t>

<t><list style="numbers">
  <t>Given an OpenPGP key packet, the application determines that component key's full fingerprint.</t>
  <t>If the key packet is newer than version 4, the application considers only the leftmost 8 octets of the full fingerprint.</t>
  <t>The application then checks that:
  <list style="symbols">
      <t>The first 12 octets of the identifier on the card conform to the "version marker" format described above.</t>
      <t>The following 8 octets of the identifier on the card correspond to the leftmost 8 octets of the fingerprint.</t>
    </list></t>
  <t>If a key on the device matches this identifier convention, the application assumes that it contains the expected key material.</t>
</list></t>

</section>
<section anchor="determining-the-full-openpgp-fingerprint-and-key-packet-details-without-relying-on-external-data"><name>Determining the full OpenPGP fingerprint (and key packet details) without relying on external data</name>

<t>In some contexts, it may be desirable to determine the full OpenPGP fingerprint of the OpenPGP key packet that corresponds to an on-device key, without relying on any data that is external to the device.</t>

<t>For example, given an OpenPGP card device, without any additional context, it is not possible to perform a keyserver lookup for an OpenPGP v6 key, based on the shortened identifier field alone:</t>

<t>Privacy-preserving public key servers don't allow lookup of version 6 keys by 8 octet fingerprint prefix. To perform a lookup on such a keyserver, the full 32 octet fingerprint is needed.</t>

<t>To obtain the full fingerprint of a post-v4 key that is stored on a legacy hardware device, applications can use the following method:</t>

<t><list style="numbers">
  <t>For the on-device key, the application obtains the following information from the device:
  <list style="symbols">
      <t>The basic algorithm setting (e.g. RSA, ECDH).</t>
      <t>The key version (e.g. <spanx style="verb">0x06</spanx>), if the first 12 octets of the identifier conform to the "version marker" format defined above.</t>
      <t>8 octets of fingerprint prefix, from the identifier field.</t>
      <t>The (4 octet) key creation timestamp.</t>
      <t>The public key parameters of the key.</t>
    </list></t>
  <t>From this information, the application can construct a set of candidate OpenPGP public key packets, by iterating over all key packet properties that are unspecified on the card (for example, the set of plausible KDF parameters for ECDH key packets). Usually, this search space will be small, often it contains just one candidate.</t>
  <t>The key packet version may be assumed to be <spanx style="verb">0x04</spanx>, if the first 12 octets of the identifier on an OpenPGP card device don't conform to the "version marker" format. If the first 12 octets of the identifier <em>do</em> conform to the "version marker" format, the encoded version value is taken as the key packet's version number.</t>
  <t>The full OpenPGP fingerprint is calculated for each of the candidate public key packets.</t>
  <t>For key packets with version &gt; 4, if the fingerprint of a candidate public key packet matches the 8 octet fingerprint prefix in the identifier, then the application may assume that this candidate public key packet corresponds to the key slot in question.</t>
  <t>The full OpenPGP fingerprint for that public key packet can now be used for any purpose (e.g. for certificate lookup on a privacy-preserving key server).</t>
</list></t>

</section>
<section anchor="finding-the-openpgp-certificate-that-corresponds-to-a-hardware-backed-key"><name>Finding the OpenPGP certificate that corresponds to a hardware-backed key</name>

<t>With the scheme outlined in this text, given a key on a hardware security device, some additional work is needed to find the associated OpenPGP certificate:</t>

<t>Because the identifier field on the device only contains the first 8 octets of the full fingerprint, not all certificate lookup methods are directly applicable.</t>

<section anchor="lookup-in-a-local-key-store-by-fingerprint-prefix"><name>Lookup in a local key store by fingerprint prefix</name>

<t>If an application has access to a set of certificates, locally, it may be able to search them by the 8 octet fingerprint prefix from the device.
Depending on the application, it may be sufficient and acceptable to perform such a local lookup.</t>

<t>However, applications should consider if collisions of the 8 octet fingerprint prefix are a concern in the expected threat model of their users.</t>

<t>This should not normally be an issue if the lookup is performed on a set of intentionally curated certificates that the user considers controlled by themselves.</t>

</section>
<section anchor="lookup-by-full-fingerprint-eg-from-a-public-key-server"><name>Lookup by full fingerprint (e.g. from a public key server)</name>

<t>In order to perform a certificate lookup by fingerprint, an application can perform the "determining the full OpenPGP fingerprint" procedure (as described above), and then perform a network lookup based on the confirmed fingerprint, e.g. from public key servers.</t>

</section>
</section>
</section>
<section anchor="additional-considerations"><name>Additional considerations</name>

<section anchor="some-version-4-fingerprint-values-are-overloaded-by-this-identifier-scheme"><name>Some version 4 fingerprint values are overloaded by this identifier scheme</name>

<t>Because the scheme outlined here reuses a pre-existing data field (which can legitimately contain any possible value), and uses this field to encode additional information, the scheme necessarily overloads a subset of that field's range of values.</t>

<t>This involves a tradeoff. Concretely, the chosen tradeoff is:</t>

<t>Identifiers for version 4 key packets with a fingerprint that starts with 12 octets that match the "version marker" format specified above become ambiguous.
Such keys on a device would then be (mistakenly) interpreted as key packets with a different version.</t>

<t>In other words, to allow explicit encoding of key versions &gt; 4, a (small) portion of the v4 fingerprint namespace gets reserved for special handling.</t>

<t>Concretely, the fraction of the v4 fingerprint namespace that becomes unusable with this scheme is <spanx style="verb">1 : 2^88</spanx> (any value in which the first 11 octets are all zero).
This text considers the blocked part of the namespace sufficiently small that it is disregarded in the remainder of the document.</t>

<t>Note that applications could in theory recognize and correctly handle OpenPGP v4 keys with fingerprints that start with what looks like a version marker segment.
However, it is unclear if the added complexity of such special case handling would be well-spent. This draft does not recommend implementing handling of that case.</t>

</section>
<section anchor="handling-seeming-inconsistencies-of-on-device-data"><name>Handling (seeming) inconsistencies of on-device data</name>

<t>Since there is redundancy within the on-device data (public key material, associated metadata, and the identifier), the combination of values may appear inconsistent to applications.</t>

<t>This is true both for the long-established use of v4 OpenPGP keys on hardware devices and for the scheme outlined in this draft.</t>

<t>Such inconsistencies may have different underlying root causes.
Those are discussed in the following.</t>

<section anchor="case-1-the-key-material-is-not-associated-with-an-openpgp-key-packet"><name>Case 1: The key material is not associated with an OpenPGP key packet</name>

<t>Some key material stored on hardware devices (including on "OpenPGP card" devices) is not linked to an OpenPGP key packet.</t>

<t>Such keys won't have a consistent OpenPGP identifier set on the device.
This fact is unchanged by this draft.</t>

</section>
<section anchor="case-2-the-application-cant-interpret-the-identifier-because-it-lacks-knowledge"><name>Case 2: The application can't interpret the identifier because it lacks knowledge</name>

<t>In some cases, even though the identifier is in fact consistent with all other on-device data, it may appear inconsistent to an application, because the application does not interpret the flavor of key material on the device correctly.</t>

<t>In this case, applications are expected to back off, and - if appropriate from a UX perspective - may inform the user about the issue.</t>

<t>When an application cannot find an internally consistent interpretation of the on-device data, it should assume that the device contains key material that it doesn't know how to handle. It must neither use that key on the device, nor alter it without explicit user confirmation.</t>

</section>
<section anchor="case-3-the-application-understands-the-key-flavor-can-validate-all-public-key-data-against-additional-information-about-the-openpgp-key-packet-but-the-identifier-field-doesnt-match-the-expected-value"><name>Case 3: The application understands the key flavor, can validate all public key data against additional information about the OpenPGP key packet, but the identifier field doesn't match the expected value</name>

<t>In this case, the application has access to a key on a hardware security device, as well as to a complete representation of the OpenPGP key packet that is associated with this on-device key (e.g. the certificate associated with the hardware device may be available as part of the local state of the application).</t>

<t>If the application can verify that the public key material and other data on the device (including algorithm setting and key creation time) corresponds to a key packet that it can handle, and only the identifier information stored on the device is inconsistent, it may consider the key usable, and the identifier on the device to be in error.</t>

<t>In this case, the application may use the key on the device. It may also optionally update the identifier field on the device to conform to the guidance in this document.</t>

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

<t>This document does not require any action from IANA.</t>

</section>


  </middle>

  <back>


    <references title='Normative References'>



<reference anchor='RFC9580' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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' target='https://www.rfc-editor.org/info/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>




    </references>

    <references title='Informative References'>




<reference anchor='I-D.dkg-openpgp-external-secrets' target='https://datatracker.ietf.org/doc/html/draft-dkg-openpgp-external-secrets-03'>
   <front>
      <title>OpenPGP External Secret Keys</title>
      <author fullname='Daniel Kahn Gillmor' initials='D. K.' surname='Gillmor'>
         <organization>American Civil Liberties Union</organization>
      </author>
      <author fullname='Heiko Schaefer' initials='H.' surname='Schaefer'>
         </author>
      <date day='22' month='July' year='2026'/>
      <abstract>
	 <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>
   </front>
   <seriesInfo name='Internet-Draft' value='draft-dkg-openpgp-external-secrets-03'/>
   
</reference>


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


    </references>


<section anchor="alternative-designs-considered"><name>Alternative designs considered</name>

<t>The option space for encoding a 20 octet identifier for a key packet is large.
Some substantively different design options that were considered follow:</t>

<section anchor="octet-prefix-of-fingerprint"><name>20 octet prefix of fingerprint</name>

<t>One alternative design could encode the first 20 octets of the full fingerprint on the device, matching the length of the field on the constrained device, without an explicit version marker.
With this approach, applications would for example store the first 20 octets of a version 6 fingerprint on an OpenPGP card device.</t>

<t>For the version 6 fingerprint of the primary key packet of the Transferable Secret Key in <xref section="A.4" sectionFormat="of" target="RFC9580"/>, the identifier on a hardware device would be set to <spanx style="verb">cb186c4f0609a697e4d52dfa6c722b0c1f1e27c1</spanx> (truncated from the full fingerprint <spanx style="verb">cb186c4f0609a697e4d52dfa6c722b0c1f1e27c18a56708f6525ec27bad9acc9</spanx>).</t>

<t>This approach would also be practically viable.</t>

<t>However, the lack of an explicitly encoded version number is a downside. This is not in itself a reason to reject the approach. However, it has no known upsides that counterbalance this downside.</t>

</section>
<section anchor="key-packet-version-only"><name>Key packet version only</name>

<t>Another alternative design would omit any key-specific data from the identifier field, except for the key's version number.</t>

<t>For the version 6 fingerprint of the primary key packet of the Transferable Secret Key in <xref section="A.4" sectionFormat="of" target="RFC9580"/>, the identifier on a hardware device would be set to <spanx style="verb">0000000000000000000000000000000000000006</spanx> (as it would be for any other version 6 key packet).</t>

<t>This scheme is sufficient for performing cryptographic operations, and it has the advantage that the data on the device can't be internally inconsistent.</t>

<t>However, as downsides, this scheme would not allow applications to reason about the key material on a device, in the absence of an externally available copy of the OpenPGP key packet data:</t>

<t><list style="symbols">
  <t>Applications could not conclusively detect if the on-device key is intended for use in an OpenPGP context, without additional information.</t>
  <t>Applications could not deduce the shape of the associated key packet, without additional information.</t>
</list></t>

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

<t>The following people have contributed in various ways to this draft,
offering reviews, suggestions, corrections, and implementation notes:</t>

<t><list style="symbols">
  <t>Andrew Gallagher</t>
  <t>Daniel Huigens</t>
  <t>Daniel Kahn Gillmor</t>
  <t>Paul Schaub</t>
  <t>Simo Sorce</t>
  <t>Simon Josefsson</t>
  <t>Werner Koch</t>
</list></t>

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

<section numbered="false" anchor="substantive-changes-from-draft-hko-openpgp-identifiers-for-legacy-devices-01-to-draft-hko-openpgp-identifiers-for-legacy-devices-02"><name>Substantive Changes from draft-hko-openpgp-identifiers-for-legacy-devices-01 to draft-hko-openpgp-identifiers-for-legacy-devices-02</name>

<t><list style="symbols">
  <t>Further elaborate the purpose of the identifier</t>
  <t>Add guidance for dealing with (seemingly) inconsistent identifier values</t>
  <t>Add some more context about the status quo of handling v4 keys on hardware devices</t>
  <t>Edits for clarity</t>
</list></t>

</section>
<section numbered="false" anchor="substantive-changes-from-draft-hko-openpgp-identifiers-for-legacy-devices-00-to-draft-hko-openpgp-identifiers-for-legacy-devices-01"><name>Substantive Changes from draft-hko-openpgp-identifiers-for-legacy-devices-00 to draft-hko-openpgp-identifiers-for-legacy-devices-01</name>

<t><list style="symbols">
  <t>Change the version marker from 12 octets of <spanx style="verb">&lt;version&gt;</spanx> to 11 octets of <spanx style="verb">0x00</spanx> and one octet of <spanx style="verb">&lt;version&gt;</spanx></t>
  <t>Add an explicit description of the identifier field's purpose(s)</t>
</list></t>

</section>
</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

