<?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-01" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="OpenPGP identifiers for legacy devices">Shortened OpenPGP 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="12"/>

    
    <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 lookup based on OpenPGP fingerprints.</t>

<t>This document outlines an approach for how to use such identifier fields on hardware devices, when the field size is too constrained for the length of modern 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).
However, modern OpenPGP version 6 component keys (as specified in <xref section="5.5.4.3" sectionFormat="of" target="RFC9580"/>) use 32 octet (SHA-256) fingerprints, which cannot be directly stored in a 20 octet field.</t>

<t>This document describes an approach for using size-constrained identifier fields to refer to OpenPGP component keys with longer fingerprint sizes.</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 anchor="goals"><name>Goals</name>

<t>This draft describes a scheme for using the widely available OpenPGP card devices for OpenPGP version 6 (or later) keys.
The scheme may be applied analogously for other types of hardware security device that have comparable constraints.</t>

</section>
</section>
<section anchor="encoding-a-shortened-key-identifier-on-the-device"><name>Encoding a shortened key identifier on the device</name>

<t>To store a fingerprint-based key identifier on a hardware device when the target field is shorter than the fingerprint, 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>The leftmost octets of the full fingerprint.</t>
</list></t>

<section anchor="encoding-version-6-or-later-fingerprints-on-openpgp-card-devices"><name>Encoding version 6 (or later) fingerprints on OpenPGP card devices</name>

<t>OpenPGP card devices that implement <xref target="OPENPGP-SMARTCARD"/> version 3.4.1 (or earlier) offer a 20 octet identifier field for each key that is stored on the hardware device. Note that this field an OpenPGP smart cards is named "fingerprint", for historical reasons.</t>

<t>With OpenPGP version 4 keys, the size of the fields on the device matches the length of the OpenPGP fingerprint.
However, OpenPGP version 6 keys use 32 octet fingerprints, so it is not possible to store these fingerprints on the card in full.</t>

<t>When importing a version 6 (or later) OpenPGP key onto an OpenPGP card device, applications should instead store 20 octets of identifier, concatenating 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 v6 key, the version marker is <spanx style="verb">0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x06</spanx>.</t>
  <t>The leftmost 8 octets of the full fingerprint.</t>
</list></t>

</section>
<section anchor="example"><name>Example</name>

<t>The full version 6 fingerprint of the primary key 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 an OpenPGP card device, the identifier on the card should be set to <spanx style="verb">000000000000000000000006cb186c4f0609a697</spanx>.</t>

</section>
</section>
<section anchor="purpose-of-the-identifier-field-on-the-hardware-device"><name>Purpose of the identifier field on the hardware device</name>

<t>The value stored the hardware device as a shortened identifier (stored in the "fingerprint" field for OpenPGP card devices) serves the following purposes:</t>

<t><list style="symbols">
  <t>Positive confirmation that an OpenPGP key has been correctly reconstructed from the public key parameters on the card, and associated metadata. This positive confirmation validates any additional parameters (algorithm ID, creation time, version number, EC parameters...). Confirmation of OpenPGP public key packet reconstruction is the main purpose of this scheme.</t>
  <t>Quick identification of keys stored in slots, by either humans and software. This is a low priority purpose.</t>
  <t>Quick identification of the key version, by both humans and software. This is a low priority purpose.</t>
</list></t>

</section>
<section anchor="some-version-4-fingerprints-become-unusable-on-constrained-card-devices"><name>Some version 4 fingerprints become unusable on constrained card devices</name>

<t>Because the scheme outlined here limits itself to using a pre-existing data field (which can legitimately contain any possible value), and uses this field to encode additional information, the scheme necessarily involves a tradeoff.</t>

<t>Concretely, the chosen tradeoff is:</t>

<t>Version 4 key packets with a fingerprint that starts with 12 octets that match the "version marker" format specified above become unusable when following the guidance in this text, because they would be interpreted as key packets with a different version.</t>

<t>That is, to allow explicit encoding of key version other than 4, a (small) portion of the fingerprint namespace gets effectively blocked off.</t>

<t>This text considers the blocked part of the namespace sufficiently small that it is disregarded in the remainder of the document.
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 12 octets all have the same content).</t>

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

<section anchor="discussion-of-collision-risk-with-shortened-identifiers"><name>Discussion of collision risk with shortened 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>There are at least two classes of conceivable risks:</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 an OpenPGP card device only exist within the user's own local computing environment. They are only visible locally, for example when the user plugs in a USB device that implements the OpenPGP card application.
These identifiers are never visible in more global namespaces.</t>

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

<t>It is exceedingly unlikely that the 8 octet prefix of an OpenPGP fingerprint has an accidental collision with a second card-backed component key, within any user's local environment.</t>

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

<t>First, it is unclear under which circumstances an attacker benefits from causing a target keyholder to use a different private key than the one they intend to use. While there might be attacks that are important to consider, underhandedly replacing a user's private keys is not a typical attack scenario.</t>

<t>Given that, this scheme does not add much new attack surface for an attacker who underhandedly replaces a user's OpenPGP card:</t>

<t>When using an "honest" OpenPGP card device in an attack, it remains non-trivial for an attacker to generate a malicious key pair that shares the 64 bit prefix with the user's key, even if the user relies solely on that identifier to ensure that they are using the correct private key material (however, the user's application is not constrained to checking only the identifier field on the card. It can easily also check that the full public key parameters, as reported by the card, correspond to the expected component key).</t>

<t>However, self-reported information from a hardware device cannot be relied on, if the device itself is malicious.
A custom "fake" hardware device could report fingerprints and public key material that do not legitimately correspond to the private key material that the card uses.</t>

<t>This draft does not attempt to mitigate the risks associated with adversarial devices.</t>

</section>
</section>
</section>
<section anchor="usability-considerations"><name>Usability Considerations</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 method outlined in this text, applications can determine if an OpenPGP card contains the expected key material, 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 fingerprint length exceeds 20 octets, the application considers only the leftmost 8 octets of the full fingerprint.</t>
  <t>The application then checks that
a) The first 12 octets of the identifier on the card conform to the "version marker" format described above.
b) The following 8 octets of the identifier on the card correspond to the leftmost 8 octets of the fingerprint.</t>
  <t>If the key slot on the card matches this convention, the application assumes that it contains the expected key material.</t>
</list></t>

</section>
<section anchor="finding-the-openpgp-certificate-that-corresponds-to-a-shortened-openpgp-card-identifier"><name>Finding the OpenPGP certificate that corresponds to a shortened OpenPGP card identifier</name>

<t>With the scheme outlined in this text, given a key slot on an OpenPGP card device, some additional work may be needed to find the associated OpenPGP certificate:
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-key-store-that-allows-searches-by-fingerprint-prefix"><name>Lookup in a key store that allows searches by fingerprint prefix</name>

<t>If an application has access to a set of certificates, locally, it can search them by (8 octet) fingerprint prefix.
Depending on the application, it may be sufficient and acceptable to perform such a local key search.</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>

</section>
<section anchor="determining-the-full-openpgp-fingerprint-without-relying-on-external-data"><name>Determining the full OpenPGP fingerprint without relying on external data</name>

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

<t>For example, given an OpenPGP card device, without any additional context, it is not possible to perform a keyserver lookup based on the shortened identifier field alone: Privacy-preserving public key servers do not 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 non-v4 key that is stored on an OpenPGP card device, applications can use the following method:</t>

<t><list style="numbers">
  <t>For each key stored on an OpenPGP card device, applications obtain 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 prefix of the OpenPGP fingerprint.</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).</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 these candidate public key packets.</t>
  <t>For key packets with a version greater than 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>
</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="design-choices"><name>Design Choices</name>

<t>An alternative design could encode the first octets of the full fingerprint on the card, 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>This approach would also be practically viable. However, it would be in more tension with the guidance in (<xref section="14.1" sectionFormat="of" target="RFC9580"/>).</t>

</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>Werner Koch</t>
</list></t>

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

</section>


  </back>

<!-- ##markdown-source:
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
HM971YSemFNruDmpP/clwJQ85kIMvE7gm3fkOCw2n+ytE7XoBm7s3h9j9S3D
r3m1QqVnk7TZx501skbavYbQAS8B+gzNKYp6jYyZTgnjcT7rBVgNUS5bmDBS
EkwMpC1ADsDGNkpoER8Jw5IzW1hvS89j8V5Xzgw53dqNgoDJxRwfxNBuVBgl
Xbg5tEA65UonRkwqlTRQL8T5MwWMXQRI3mRxLgNnr44Gb7eWTIEODme2UHRY
GXYU2KDGXW/mUNiBfF2gh4idssAI6BXamJR8sdKteRq1o/4GPiPGkjnRmclz
oGa4ifXZXjvy/HHKyruJMrCafofxXmY58/bAdt3axDD0JhcN5zrL9D1/u9ec
dwy72OQ42OJx19se80YG6qV1+H0ywYMiVY0frWVWK/H56MvR0eehowEjmdHJ
lJO1e5WO651TUNXTimfNKrJm0eWAlMK7i3/rf2efd+LA+fdFAluRWXzMr7Sq
DAG22yTEDu7RPsjD1ckF4CbS9hdxMT7pAh4+cDybnJ/FJ/Ojs6Pn8uz5M3WS
nB4nc3kWPzs+nh3Fk/lEHT+LJ+fy9OzZ0fn87PT4VMXHz2YyeQ7c8Pyzt8W6
yLS08IA8vAMOxAOWRwfYzTD8irNDag3gRNjj81H/P2fbp/jMGe1jXcLDGs/f
CWT9wcoqwlqbi2o9bxFcDxNlsPlBW7Nxkb2naO6L3oc4abl2gah1o8IehLzo
sfioTUqtNvKXeeq6GDa2BjImqRPMmynohuEbl5P4g9N+HRNcmpd6ZY2qnsH9
XXYrEXwrAr2BLhwiNUbHqaSleEVS32QsGCcVvUxBiCkBL8NYViZJ6jouAZED
mS0Q0avlSlxfIQggrNsDAY8NG1fI69WMgs2Ly2DteDw+HIvLkCJU3XS1wjNx
PyI4PL3rcPEKEMhL2JoKpTPGX2OI+y91Gt816m3bhhzoW02bTFN4RzRSKaOy
Zb2CV7LYjJ5XZDpOVoz4oVlyZc0wzVF/iNxWWGNKM+C/f48OnINbY3vaJTMI
Cr/WeW04pui802/qopAfVSwp4VUtbHV9sIRLWZGlKwBtD7a5DWZTForrkfri
Qn7bhBMHTTckqFJgvOChklxobdrUyY566GC+YddpAAZoKcJZKrS9oPc3DJnO
FVVBskwzipxrna0Z7+PQiQIogtBgaRRbwYpdGC8hzLx5AwKHg/41xB/O8lzX
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
cWc5AAA=

-->

</rfc>

