Internet DRAFT - draft-mpalmer-key-compromise-attestation

draft-mpalmer-key-compromise-attestation







Individual Submission                                          M. Palmer
Internet-Draft                                             pwnedkeys.com
Intended status: Experimental                               15 June 2023
Expires: 17 December 2023


            A Standard Format for Key Compromise Attestation
              draft-mpalmer-key-compromise-attestation-00

Abstract

   This document describes a profile for a PKCS#10 Certificate Signing
   Request (CSR) that attests with reasonable confidence that the key
   which signed the CSR has been compromised.

About This Document

   This note is to be removed before publishing as an RFC.

   Status information for this document may be found at
   https://datatracker.ietf.org/doc/draft-mpalmer-key-compromise-
   attestation/.

   Source for this draft and an issue tracker can be found at
   https://github.com/pwnedkeys/key-compromise-attestation-rfc.

Status of This Memo

   This Internet-Draft is submitted in full conformance with the
   provisions of BCP 78 and BCP 79.

   Internet-Drafts are working documents of the Internet Engineering
   Task Force (IETF).  Note that other groups may also distribute
   working documents as Internet-Drafts.  The list of current Internet-
   Drafts is at https://datatracker.ietf.org/drafts/current/.

   Internet-Drafts are draft documents valid for a maximum of six months
   and may be updated, replaced, or obsoleted by other documents at any
   time.  It is inappropriate to use Internet-Drafts as reference
   material or to cite them other than as "work in progress."

   This Internet-Draft will expire on 17 December 2023.

Copyright Notice

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




Palmer                  Expires 17 December 2023                [Page 1]

Internet-Draft         Key Compromise Attestation              June 2023


   This document is subject to BCP 78 and the IETF Trust's Legal
   Provisions Relating to IETF Documents (https://trustee.ietf.org/
   license-info) in effect on the date of publication of this document.
   Please review these documents carefully, as they describe your rights
   and restrictions with respect to this document.

Table of Contents

   1.  Introduction  . . . . . . . . . . . . . . . . . . . . . . . .   2
   2.  Conventions and Definitions . . . . . . . . . . . . . . . . .   3
   3.  Purpose and Goals of a Key Compromise Attestation . . . . . .   3
   4.  Structure of a Key Compromise Attestation . . . . . . . . . .   3
     4.1.  CSR Subject . . . . . . . . . . . . . . . . . . . . . . .   4
     4.2.  CSR Subject Public Key  . . . . . . . . . . . . . . . . .   4
     4.3.  CSR Attributes  . . . . . . . . . . . . . . . . . . . . .   4
     4.4.  CSR Signature . . . . . . . . . . . . . . . . . . . . . .   4
   5.  Security Considerations . . . . . . . . . . . . . . . . . . .   4
     5.1.  Generating Key Compromise Attestations  . . . . . . . . .   4
     5.2.  Processing Key Compromise Attestations  . . . . . . . . .   5
   6.  IANA Considerations . . . . . . . . . . . . . . . . . . . . .   6
   7.  References  . . . . . . . . . . . . . . . . . . . . . . . . .   6
     7.1.  Normative References  . . . . . . . . . . . . . . . . . .   6
     7.2.  Informative References  . . . . . . . . . . . . . . . . .   7
   Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . .   7
   Author's Address  . . . . . . . . . . . . . . . . . . . . . . . .   7

1.  Introduction

   When a private key becomes compromised through disclosure or
   intrusion, it can be difficult to safely and conclusively demonstrate
   to third parties that the key is, in fact, compromised.  Different
   parties have different standards of proof, and the tools available to
   them may differ.  In many cases, the lowest-common-denominator
   approach, that of providing the actual compromised private key, is
   used, which increases the risk of further disclosure and the
   associated hazards.

   This document describes a specific profile for a PKCS#10 [RFC2986]
   Certificate Signing Request (CSR) which provides a reliable
   attestation that a private key has been compromised.  The use of an
   existing format allows re-use of existing tools for generating and
   validating the CSR, whilst minimising the risk of inadvertent misuse
   of a CSR generated for another purpose.








Palmer                  Expires 17 December 2023                [Page 2]

Internet-Draft         Key Compromise Attestation              June 2023


2.  Conventions and Definitions

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
   "OPTIONAL" in this document are to be interpreted as described in BCP
   14 [RFC2119] [RFC8174] when, and only when, they appear in all
   capitals, as shown here.

3.  Purpose and Goals of a Key Compromise Attestation

   An attestation of key compromise is a document which verifiably
   attests that a private key is no longer private.  This destroys the
   utility of that key for cryptographic operations, as the fundamental
   assumption of the private key -- that it is private -- no longer
   holds.

   An attestation of key compromise should be useable by both first
   parties (the legitimate "owner" of the private key) as well as third
   parties (anyone who happens to come across a compromised private key
   and wishes to attest that it has been compromised).  It must be
   durable and reliable, in that it must not expire or otherwise become
   significantly less trustworthy over time.  It must also not require
   the real-time possession of the private key itself, to allow for
   attestation of compromise even in situations where the access to the
   key material has been lost or is not kept permanently online.

   Ideally, a key compromise attestation should be simple to generate
   and verify with existing tools, and not require extensive new code or
   infrastructure to be useful.

4.  Structure of a Key Compromise Attestation

   The format of a key compromise attestation is a PKCS#10 [RFC2986]
   Certificate Signing Request (CSR), with a specified subject and
   extension to minimise the chances of it being mistaken for a
   legitimate CSR useful for some other purpose.

   The CSR format was chosen because it is already in wide use for ad
   hoc attestation of key compromise, and as such has wide existing
   support for verification and handling.  A very constrained CSR
   profile is specified to enhance resistance to collision attacks
   against the hashes used in signatures.









Palmer                  Expires 17 December 2023                [Page 3]

Internet-Draft         Key Compromise Attestation              June 2023


4.1.  CSR Subject

   The subject field of a key compromise attestation CSR MUST be a
   distinguished name which contains only a CN field, with the value
   "kca=v1 This Key Is Compromised" (without the quotes) as a
   UTF8String.

   Additional fields SHOULD NOT appear in the subject of the CSR, as
   they may be used to provide attacker-controlled prefix data.

4.2.  CSR Subject Public Key

   The subjectPKInfo field of the key compromise attestation CSR MUST be
   the SubjectPublicKeyInfo of the key which is attested as having been
   compromised.

4.3.  CSR Attributes

   A key compromise attestation CSR MUST contain an Attributes section
   with a single attribute, an extensionRequest [RFC2985].  The
   extensionRequest, in turn, MUST contain a single extension, a
   NoSecurityAfforded [RFC7169] extension, with a value of TRUE.  Per
   [RFC7169], this extension MUST be marked critical.

4.4.  CSR Signature

   The signature carried by the CSR MUST be made by the key which is
   attested as having been compromised.

5.  Security Considerations

   As the consequences for erroneously generating, disseminating, or
   accepting a key compromise attestation can be significant (the
   complete loss of utility of a key or key-using artifact, such as a
   certificate), it is important that compromise attestations are
   securely generated and validated before use.

5.1.  Generating Key Compromise Attestations

   An attestation of key compromise is a potent service denial tool in
   the wrong hands.  As such, a key compromise attestation should never
   be generated for a key which is not (yet) compromised, unless the
   resulting attestation will be carefully secured against disclosure.
   While the improper disclosure of a compromise attestation is not as
   catastrophic as a key compromise, it can certainly have unwanted
   consequences.





Palmer                  Expires 17 December 2023                [Page 4]

Internet-Draft         Key Compromise Attestation              June 2023


   Key compromise attestations do not introduce any new security issues
   for systems which are capable of signing arbitrary data, although the
   consequences of signing the wrong thing are somewhat different.  If a
   miscreant is capable of coercing a system into signing a key
   compromise attestation, this could be used to deny further use of the
   key.  However, the potential for mischief if a miscreant is capable
   of signing arbitrary data is already significant.

5.2.  Processing Key Compromise Attestations

   The consequences of incorrectly accepting an invalid attestation of
   key compromise can be significant.  As such, it is important that any
   attestation should be carefully examined to ensure its validity
   before it is relied upon.

   The first thing that MUST be checked on any attestation is the
   signature.  This signature SHOULD be validated against the
   subjectPublicKeyInfo in the CSR.  If the signature does not validate,
   then under no circumstances should the attestation be relied upon for
   any purpose.

   Given a valid signature, the subjectPKInfo in the CSR MUST be
   compared against the subjectPublicKey info of the key(s) which are to
   be checked for compromise.  This MAY be done via direct comparison,
   or via comparison of a SHA256 (or equivalently robust) hash of the
   keys.  However, it is important to bear in mind that some key
   formats, in particular elliptic curve keys [SEC1], have multiple
   valid representations.  The subjectPublicKeyInfo data in both the CSR
   and the key(s) in use MUST be normalised to a common format before
   comparison, to avoid false negatives.

   The subject of the CSR should be checked to ensure it indicates that
   the CSR is a Key Compromise Attestation, and not a regular CSR.  The
   prefix "kca=v1 " in the CN field indicates the version of the
   attestation, while the remainder of the field is a more human-
   readable indication that the key is compromised and should not be
   used.

   Ensuring the presence of the NoSecurityAfforded extension is of
   lesser importance, as its presence is primarily to prevent the
   accidental use of the compromise attestation CSR for other purposes.
   Any system which validates attributes in a CSR before use should fail
   to process the extension (as it MUST be marked critical), while any
   system which blindly copies attributes from the CSR to the eventual
   certificate will produce a certificate which, once again, will fail
   to validate.  Systems which blindly copy attributes from a CSR to a
   certificate whilst resetting the critical flag are beyond help.




Palmer                  Expires 17 December 2023                [Page 5]

Internet-Draft         Key Compromise Attestation              June 2023


   Because key compromise attestations do not expire, and do not need to
   be "refreshed" on a regular basis, it is possible that over time
   attestations may exist whose signatures use hash algorithms which are
   not considered particularly strong at the time of comparison.
   Processors of key compromise attestations SHOULD reject a key
   compromise attestation which uses a signature algorithm known to be
   weak to second pre-image attacks, and which also contains additional
   subject distinguished name fields and/or attributes and extensions.

   When a valid key compromise attestation is received, all use of the
   compromised key should cease as soon as possible.  Further, the
   compromised key SHOULD be remembered as compromised, to prevent the
   inadvertent reuse of that key in the future.  Whilst storage of a
   potentially unbounded list of banned keys is problematic, it is
   important to bear in mind that a compromised key is compromised
   forever.  Debian weak keys [DWK] have been spotted being used in the
   wild over a decade after their existence was first revealed, and
   there is no reason to believe that other compromised keys may not
   have similar longevity.

   Systems which receive key compromise attestations from the public
   must bear in mind that generating many keys, and hence generating
   many attestations of compromise, is a trivial exercise.  If the work
   required to process a key compromise attestation (such as examining
   all in-use accounts or certificates to see if they use an attested-
   compromised key) is significantly greater than the work required to
   generate a key compromise attestation, it is recommended that
   defences against Denial of Service attacks due to "flooding"
   attestations be implemented.

   Repeated submission of attestations for the same compromised key
   should not, in general, cause problems for a properly-implemented
   system.  Once a valid attestation has been received, all use of that
   key should cease.  Therefore, if another compromise attestation for
   the same key is received, it should be sufficient to verify that the
   key is already in the "banned keys" list, without going through the
   entire attestation handling chain again.

6.  IANA Considerations

   This document has no IANA actions.

7.  References

7.1.  Normative References






Palmer                  Expires 17 December 2023                [Page 6]

Internet-Draft         Key Compromise Attestation              June 2023


   [RFC2119]  Bradner, S., "Key words for use in RFCs to Indicate
              Requirement Levels", BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, March 1997,
              <https://www.rfc-editor.org/rfc/rfc2119>.

   [RFC2985]  Nystrom, M. and B. Kaliski, "PKCS #9: Selected Object
              Classes and Attribute Types Version 2.0", RFC 2985,
              DOI 10.17487/RFC2985, November 2000,
              <https://www.rfc-editor.org/rfc/rfc2985>.

   [RFC2986]  Nystrom, M. and B. Kaliski, "PKCS #10: Certification
              Request Syntax Specification Version 1.7", RFC 2986,
              DOI 10.17487/RFC2986, November 2000,
              <https://www.rfc-editor.org/rfc/rfc2986>.

   [RFC7169]  Turner, S., "The NSA (No Secrecy Afforded) Certificate
              Extension", RFC 7169, DOI 10.17487/RFC7169, April 2014,
              <https://www.rfc-editor.org/rfc/rfc7169>.

   [RFC8174]  Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
              2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              May 2017, <https://www.rfc-editor.org/rfc/rfc8174>.

7.2.  Informative References

   [DWK]      The Debian Project, "DSA-1571-1 openssl -- predictable
              random number generator", May 2008,
              <https://www.debian.org/security/2008/dsa-1571>.

   [SEC1]     Standards for Efficient Cryptography Group (SECG), "SEC 1:
              Elliptic Curve Cryptography", September 2000.

Acknowledgments

   The author acknowledges the contributions of the many, many people
   who leave their private keys in public places, providing such a
   wealth of opportunity for handling and reporting their compromise to
   the appropriate parties.

Author's Address

   Matt Palmer
   pwnedkeys.com
   Email: matt@pwnedkeys.com







Palmer                  Expires 17 December 2023                [Page 7]