summaryrefslogtreecommitdiff
path: root/doc/rfc/rfc8937.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/rfc/rfc8937.txt')
-rw-r--r--doc/rfc/rfc8937.txt461
1 files changed, 461 insertions, 0 deletions
diff --git a/doc/rfc/rfc8937.txt b/doc/rfc/rfc8937.txt
new file mode 100644
index 0000000..6ea6a75
--- /dev/null
+++ b/doc/rfc/rfc8937.txt
@@ -0,0 +1,461 @@
+
+
+
+
+Internet Research Task Force (IRTF) C. Cremers
+Request for Comments: 8937 CISPA
+Category: Informational L. Garratt
+ISSN: 2070-1721 Cisco Meraki
+ S. Smyshlyaev
+ CryptoPro
+ N. Sullivan
+ C. Wood
+ Cloudflare
+ October 2020
+
+
+ Randomness Improvements for Security Protocols
+
+Abstract
+
+ Randomness is a crucial ingredient for Transport Layer Security (TLS)
+ and related security protocols. Weak or predictable
+ "cryptographically secure" pseudorandom number generators (CSPRNGs)
+ can be abused or exploited for malicious purposes. An initial
+ entropy source that seeds a CSPRNG might be weak or broken as well,
+ which can also lead to critical and systemic security problems. This
+ document describes a way for security protocol implementations to
+ augment their CSPRNGs using long-term private keys. This improves
+ randomness from broken or otherwise subverted CSPRNGs.
+
+ This document is a product of the Crypto Forum Research Group (CFRG)
+ in the IRTF.
+
+Status of This Memo
+
+ This document is not an Internet Standards Track specification; it is
+ published for informational purposes.
+
+ This document is a product of the Internet Research Task Force
+ (IRTF). The IRTF publishes the results of Internet-related research
+ and development activities. These results might not be suitable for
+ deployment. This RFC represents the consensus of the Crypto Forum
+ Research Group of the Internet Research Task Force (IRTF). Documents
+ approved for publication by the IRSG are not a candidate for any
+ level of Internet Standard; see Section 2 of RFC 7841.
+
+ Information about the current status of this document, any errata,
+ and how to provide feedback on it may be obtained at
+ https://www.rfc-editor.org/info/rfc8937.
+
+Copyright Notice
+
+ Copyright (c) 2020 IETF Trust and the persons identified as the
+ document authors. All rights reserved.
+
+ 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. Conventions Used in This Document
+ 3. Randomness Wrapper
+ 4. Tag Generation
+ 5. Application to TLS
+ 6. Implementation Guidance
+ 7. IANA Considerations
+ 8. Security Considerations
+ 9. Comparison to RFC 6979
+ 10. References
+ 10.1. Normative References
+ 10.2. Informative References
+ Acknowledgements
+ Authors' Addresses
+
+1. Introduction
+
+ Secure and properly implemented random number generators, or
+ "cryptographically secure" pseudorandom number generators (CSPRNGs),
+ should produce output that is indistinguishable from a random string
+ of the same length. CSPRNGs are critical building blocks for TLS and
+ related transport security protocols. TLS in particular uses CSPRNGs
+ to generate several values, such as ephemeral key shares and
+ ClientHello and ServerHello random values. CSPRNG failures, such as
+ the Debian bug described in [DebianBug], can lead to insecure TLS
+ connections. CSPRNGs may also be intentionally weakened to cause
+ harm [DualEC]. Initial entropy sources can also be weak or broken,
+ and that would lead to insecurity of all CSPRNG instances seeded with
+ them. In such cases where CSPRNGs are poorly implemented or
+ insecure, an adversary, Adv, may be able to distinguish its output
+ from a random string or predict its output and recover secret key
+ material used to protect the connection.
+
+ This document proposes an improvement to randomness generation in
+ security protocols inspired by the "NAXOS trick" [NAXOS].
+ Specifically, instead of using raw randomness where needed, e.g., in
+ generating ephemeral key shares, a function of a party's long-term
+ private key is mixed into the entropy pool. In the NAXOS key
+ exchange protocol, raw random value x is replaced by H(x, sk), where
+ sk is the sender's private key. Unfortunately, as private keys are
+ often isolated in Hardware Security Modules (HSMs), direct access to
+ compute H(x, sk) is impossible. Moreover, some HSM APIs may only
+ offer the option to sign messages using a private key, yet offer no
+ other operations involving that key. An alternate, yet functionally
+ equivalent construction, is needed.
+
+ The approach described herein replaces the NAXOS hash with a keyed
+ hash, or pseudorandom function (PRF), where the key is derived from a
+ raw random value and a private key signature. Implementations SHOULD
+ apply this technique a) when indirect access to a private key is
+ available and CSPRNG randomness guarantees are dubious or b) to
+ provide stronger guarantees about possible future issues with the
+ randomness. Roughly, the security properties provided by the
+ proposed construction are as follows:
+
+ 1. If the CSPRNG works fine (that is, in a certain adversary model,
+ the CSPRNG output is indistinguishable from a truly random
+ sequence), then the output of the proposed construction is also
+ indistinguishable from a truly random sequence in that adversary
+ model.
+
+ 2. Adv with full control of a (potentially broken) CSPRNG and
+ ability to observe all outputs of the proposed construction does
+ not obtain any non-negligible advantage in leaking the private
+ key (in the absence of side channel attacks).
+
+ 3. If the CSPRNG is broken or controlled by Adv, the output of the
+ proposed construction remains indistinguishable from random,
+ provided that the private key remains unknown to Adv.
+
+ This document represents the consensus of the Crypto Forum Research
+ Group (CFRG).
+
+2. Conventions Used in This Document
+
+ 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. Randomness Wrapper
+
+ The output of a properly instantiated CSPRNG should be
+ indistinguishable from a random string of the same length. However,
+ as previously discussed, this is not always true. To mitigate this
+ problem, we propose an approach for wrapping the CSPRNG output with a
+ construction that mixes secret data into a value that may be lacking
+ randomness.
+
+ Let G(n) be an algorithm that generates n random bytes, i.e., the
+ output of a CSPRNG. Define an augmented CSPRNG G' as follows. Let
+ Sig(sk, m) be a function that computes a signature of message m given
+ private key sk. Let H be a cryptographic hash function that produces
+ output of length M. Let Extract(salt, IKM) be a randomness
+ extraction function, e.g., HKDF-Extract [RFC5869], which accepts a
+ salt and input keying material (IKM) parameter and produces a
+ pseudorandom key of L bytes suitable for cryptographic use. It must
+ be a secure PRF (for salt as a key of length M) and preserve
+ uniformness of IKM (for details, see [SecAnalysis]). L SHOULD be a
+ fixed length. Let Expand(k, info, n) be a variable-length output
+ PRF, e.g., HKDF-Expand [RFC5869], that takes as input a pseudorandom
+ key k of L bytes, info string, and output length n, and produces
+ output of n bytes. Finally, let tag1 be a fixed, context-dependent
+ string, and let tag2 be a dynamically changing string (e.g., a
+ counter) of L' bytes. We require that L >= n - L' for each value of
+ tag2.
+
+ The construction works as follows. Instead of using G(n) when
+ randomness is needed, use G'(n), where
+
+ G'(n) = Expand(Extract(H(Sig(sk, tag1)), G(L)), tag2, n)
+
+ Functionally, this expands n random bytes from a key derived from the
+ CSPRNG output and signature over a fixed string (tag1). See
+ Section 4 for details about how "tag1" and "tag2" should be generated
+ and used per invocation of the randomness wrapper. Expand()
+ generates a string that is computationally indistinguishable from a
+ truly random string of n bytes. Thus, the security of this
+ construction depends upon the secrecy of H(Sig(sk, tag1)) and G(L).
+ If the signature is leaked, then security of G'(n) reduces to the
+ scenario wherein randomness is expanded directly from G(L).
+
+ If a private key sk is stored and used inside an HSM, then the
+ signature calculation is implemented inside it, while all other
+ operations (including calculation of a hash function, Extract
+ function, and Expand function) can be implemented either inside or
+ outside the HSM.
+
+ Sig(sk, tag1) need only be computed once for the lifetime of the
+ randomness wrapper and MUST NOT be used or exposed beyond its role in
+ this computation. Additional recommendations for tag1 are given in
+ the following section.
+
+ Sig MUST be a deterministic signature function, e.g., deterministic
+ Elliptic Curve Digital Signature Algorithm (ECDSA) [RFC6979], or use
+ an independent (and completely reliable) entropy source, e.g., if Sig
+ is implemented in an HSM with its own internal trusted entropy source
+ for signature generation.
+
+ Because Sig(sk, tag1) can be cached, the relative cost of using G'(n)
+ instead of G(n) tends to be negligible with respect to cryptographic
+ operations in protocols such as TLS (the relatively inexpensive
+ computational cost of HKDF-Extract and HKDF-Expand dominates when
+ comparing G' to G). A description of the performance experiments and
+ their results can be found in [SecAnalysis].
+
+ Moreover, the values of G'(n) may be precomputed and pooled. This is
+ possible since the construction depends solely upon the CSPRNG output
+ and private key.
+
+4. Tag Generation
+
+ Both tags MUST be generated such that they never collide with another
+ contender or owner of the private key. This can happen if, for
+ example, one HSM with a private key is used from several servers or
+ if virtual machines are cloned.
+
+ The RECOMMENDED tag construction procedure is as follows:
+
+ tag1: Constant string bound to a specific device and protocol in
+ use. This allows caching of Sig(sk, tag1). Device-specific
+ information may include, for example, a Media Access Control
+ (MAC) address. To provide security in the cases of usage of
+ CSPRNGs in virtual environments, it is RECOMMENDED to
+ incorporate all available information specific to the process
+ that would ensure the uniqueness of each tag1 value among
+ different instances of virtual machines (including ones that
+ were cloned or recovered from snapshots). This is needed to
+ address the problem of CSPRNG state cloning (see [RY2010]).
+ See Section 5 for example protocol information that can be
+ used in the context of TLS 1.3. If sk could be used for other
+ purposes, then selecting a value for tag1 that is different
+ than the form allowed by those other uses ensures that the
+ signature is not exposed.
+
+ tag2: A nonce, that is, a value that is unique for each use of the
+ same combination of G(L), tag1, and sk values. The tag2 value
+ can be implemented using a counter or a timer, provided that
+ the timer is guaranteed to be different for each invocation of
+ G'(n).
+
+5. Application to TLS
+
+ The PRF randomness wrapper can be applied to any protocol wherein a
+ party has a long-term private key and also generates randomness.
+ This is true of most TLS servers. Thus, to apply this construction
+ to TLS, one simply replaces the "private" CSPRNG G(n), i.e., the
+ CSPRNG that generates private values, such as key shares, with
+
+ G'(n) = HKDF-Expand(HKDF-Extract(H(Sig(sk, tag1)), G(L)), tag2, n)
+
+6. Implementation Guidance
+
+ Recall that the wrapper defined in Section 3 requires L >= n - L',
+ where L is the Extract output length and n is the desired amount of
+ randomness. Some applications may require n to exceed this bound.
+ Wrapper implementations can support this use case by invoking G'
+ multiple times and concatenating the results.
+
+7. IANA Considerations
+
+ This document has no IANA actions.
+
+8. Security Considerations
+
+ A security analysis was performed in [SecAnalysis]. Generally
+ speaking, the following security theorem has been proven: if Adv
+ learns only one of the signature or the usual randomness generated on
+ one particular instance, then, under the security assumptions on our
+ primitives, the wrapper construction should output randomness that is
+ indistinguishable from a random string.
+
+ The main reason one might expect the signature to be exposed is via a
+ side-channel attack. It is therefore prudent when implementing this
+ construction to take into consideration the extra long-term key
+ operation if equipment is used in a hostile environment when such
+ considerations are necessary. Hence, it is recommended to generate a
+ key specifically for the purposes of the defined construction and not
+ to use it another way.
+
+ The signature in the construction, as well as in the protocol itself,
+ MUST NOT use randomness from entropy sources with dubious security
+ guarantees. Thus, the signature scheme MUST either use a reliable
+ entropy source (independent from the CSPRNG that is being improved
+ with the proposed construction) or be deterministic; if the
+ signatures are probabilistic and use weak entropy, our construction
+ does not help, and the signatures are still vulnerable due to repeat
+ randomness attacks. In such an attack, Adv might be able to recover
+ the long-term key used in the signature.
+
+ Under these conditions, applying this construction should never yield
+ worse security guarantees than not applying it, assuming that
+ applying the PRF does not reduce entropy. We believe there is always
+ merit in analyzing protocols specifically. However, this
+ construction is generic so the analyses of many protocols will still
+ hold even if this proposed construction is incorporated.
+
+ The proposed construction cannot provide any guarantees of security
+ if the CSPRNG state is cloned due to the virtual machine snapshots or
+ process forking (see [MAFS2017]). It is RECOMMENDED that tag1
+ incorporate all available information about the environment, such as
+ process attributes, virtual machine user information, etc.
+
+9. Comparison to RFC 6979
+
+ The construction proposed herein has similarities with that of
+ [RFC6979]; both of them use private keys to seed a deterministic
+ random number generator. Section 3.3 of [RFC6979] recommends
+ deterministically instantiating an instance of the HMAC_DRBG
+ pseudorandom number generator, described in [SP80090A] and Annex D of
+ [X962], using the private key sk as the entropy_input parameter and
+ H(m) as the nonce. The construction G'(n) provided herein is
+ similar, with such difference that a key derived from G(n) and
+ H(Sig(sk, tag1)) is used as the entropy input and tag2 is the nonce.
+
+ However, the semantics and the security properties obtained by using
+ these two constructions are different. The proposed construction
+ aims to improve CSPRNG usage such that certain trusted randomness
+ would remain even if the CSPRNG is completely broken. Using a
+ signature scheme that requires entropy sources according to [RFC6979]
+ is intended for different purposes and does not assume possession of
+ any entropy source -- even an unstable one. For example, if in a
+ certain system all private key operations are performed within an
+ HSM, then the differences will manifest as follows: the HMAC_DRBG
+ construction described in [RFC6979] may be implemented inside the HSM
+ for the sake of signature generation, while the proposed construction
+ would assume calling the signature implemented in the HSM.
+
+10. References
+
+10.1. Normative References
+
+ [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/info/rfc2119>.
+
+ [RFC5869] Krawczyk, H. and P. Eronen, "HMAC-based Extract-and-Expand
+ Key Derivation Function (HKDF)", RFC 5869,
+ DOI 10.17487/RFC5869, May 2010,
+ <https://www.rfc-editor.org/info/rfc5869>.
+
+ [RFC6979] Pornin, T., "Deterministic Usage of the Digital Signature
+ Algorithm (DSA) and Elliptic Curve Digital Signature
+ Algorithm (ECDSA)", RFC 6979, DOI 10.17487/RFC6979, August
+ 2013, <https://www.rfc-editor.org/info/rfc6979>.
+
+ [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/info/rfc8174>.
+
+10.2. Informative References
+
+ [DebianBug]
+ Yilek, S., Rescorla, E., Shacham, H., Enright, B., and S.
+ Savage, "When private keys are public: results from the
+ 2008 Debian OpenSSL vulnerability", ICM '09,
+ DOI 10.1145/1644893.1644896, November 2009,
+ <https://pdfs.semanticscholar.org/fcf9/
+ fe0946c20e936b507c023bbf89160cc995b9.pdf>.
+
+ [DualEC] Bernstein, D., Lange, T., and R. Niederhagen, "Dual EC: A
+ Standardized Back Door", DOI 10.1007/978-3-662-49301-4_17,
+ March 2016, <https://projectbullrun.org/dual-ec/documents/
+ dual-ec-20150731.pdf>.
+
+ [MAFS2017] McGrew, D., Anderson, B., Fluhrer, S., and C. Schenefiel,
+ "PRNG Failures and TLS Vulnerabilities in the Wild",
+ January 2017,
+ <https://rwc.iacr.org/2017/Slides/david.mcgrew.pptx>.
+
+ [NAXOS] LaMacchia, B., Lauter, K., and A. Mityagin, "Stronger
+ Security of Authenticated Key Exchange",
+ DOI 10.1007/978-3-540-75670-5_1, November 2007,
+ <https://www.microsoft.com/en-us/research/wp-
+ content/uploads/2016/02/strongake-submitted.pdf>.
+
+ [RY2010] Ristenpart, T. and S. Yilek, "When Good Randomness Goes
+ Bad: Virtual Machine Reset Vulnerabilities and Hedging
+ Deployed Cryptography", January 2010,
+ <https://rist.tech.cornell.edu/papers/sslhedge.pdf>.
+
+ [SecAnalysis]
+ Akhmetzyanova, L., Cremers, C., Garratt, L., Smyshlyaev,
+ S., and N. Sullivan, "Limiting the impact of unreliable
+ randomness in deployed security protocols",
+ DOI 10.1109/CSF49147.2020.00027, IEEE 33rd Computer
+ Security Foundations Symposium (CSF), Boston, MA, USA, pp.
+ 385-393, 2020,
+ <https://doi.org/10.1109/CSF49147.2020.00027>.
+
+ [SP80090A] National Institute of Standards and Technology,
+ "Recommendation for Random Number Generation Using
+ Deterministic Random Bit Generators, Special Publication
+ 800-90A Revision 1", DOI 10.6028/NIST.SP.800-90Ar1, June
+ 2015, <https://doi.org/10.6028/NIST.SP.800-90Ar1>.
+
+ [X962] American National Standard for Financial Services (ANSI),
+ "Public Key Cryptography for the Financial Services
+ Industry, The Elliptic Curve Digital Signature Algorithm
+ (ECDSA)", ANSI X9.62, November 2005,
+ <https://www.techstreet.com/standards/
+ x9-x9-62-2005?product_id=1327225>.
+
+Acknowledgements
+
+ We thank Liliya Akhmetzyanova for her deep involvement in the
+ security assessment in [SecAnalysis]. We thank John Mattsson, Martin
+ Thomson, and Rich Salz for their careful readings and useful
+ comments.
+
+Authors' Addresses
+
+ Cas Cremers
+ CISPA
+ Saarland Informatics Campus
+ Saarbruecken
+ Germany
+
+ Email: cremers@cispa.saarland
+
+
+ Luke Garratt
+ Cisco Meraki
+ 500 Terry A Francois Blvd
+ San Francisco,
+ United States of America
+
+ Email: lgarratt@cisco.com
+
+
+ Stanislav Smyshlyaev
+ CryptoPro
+ 18, Suschevsky val
+ Moscow
+ Russian Federation
+
+ Email: svs@cryptopro.ru
+
+
+ Nick Sullivan
+ Cloudflare
+ 101 Townsend St
+ San Francisco,
+ United States of America
+
+ Email: nick@cloudflare.com
+
+
+ Christopher A. Wood
+ Cloudflare
+ 101 Townsend St
+ San Francisco,
+ United States of America
+
+ Email: caw@heapingbits.net