@@ -67,6 +67,21 @@ normative:
6767 title : " SEC 1: Elliptic Curve Cryptography"
6868
6969informative :
70+ FALCON :
71+ target : https://falcon-sign.info/
72+ title : ' FALCON: Fast-Fourier Lattice-based Compact Signatures over NTRU'
73+ author :
74+ - fullname : Pierre-Alain Fouque
75+ - fullname : Jeffrey Hoffstein
76+ - fullname : Paul Kirchner
77+ - fullname : Vadim Lyubashevsky
78+ - fullname : Thomas Pornin
79+ - fullname : Thomas Prest
80+ - fullname : Thomas Ricosset
81+ - fullname : Gregor Seiler
82+ - fullname : William Whyte
83+ - fullname : Zhenfei Zhang
84+ date : 2017
7085 FIPS-201 :
7186 target : https://doi.org/10.6028/NIST.SP.800-73pt2-5
7287 title : ' Interfaces for Personal Identity Verification: Part 2 – PIV Card Application Card Command Interface'
@@ -174,6 +189,7 @@ Since different signature algorithms digest the message in different ways
174189and at different stages of the algorithm,
175190it is not possible for a cryptographic API to specify that, for example, "the hash digest is computed by the caller"
176191generically for all algorithms.
192+ Security considerations for this split may also differ between algorithms.
177193Instead, the algorithm identifiers defined in this specification
178194enable the parties of that cryptographic API to signal precisely, for each signature algorithm individually,
179195which steps of the algorithm are performed by which party.
@@ -191,10 +207,13 @@ Some signature algorithms,
191207such as PureEdDSA [RFC8032],
192208by their design, cannot be split in this way, and therefore cannot be assigned split signing algorithm identifiers.
193209However, if such a signature algorithm defines a "pre-hashed" variant,
194- such as Ed25519ph [RFC8032],
195210that "pre-hashed" algorithm can be assigned a split signing algorithm identifier,
196211enabling the pre-hashing step to be performed by the _digester_
197212and the remaining steps by the _signer_.
213+ For example, this specification defines Ed25519ph-split ({{eddsa-split}}) as a split variant of Ed25519ph [RFC8032].
214+ Note that Ed25519 and Ed25519ph have distinct verification algorithms,
215+ but Ed25519ph and Ed25519ph-split use the same verification algorithm.
216+
198217
199218# # Requirements Notation and Conventions
200219
@@ -379,14 +398,25 @@ and a key derived using `ARKG-P256` [I-D.bradleylundberg-ARKG]:
379398
380399This specification assumes that both the _digester_ and _signer_ roles
381400described in {{split-algs}} are trusted and cooperate honestly.
382- This is because these split signing procedures concern details
383- that are considered implementation details from a verifier's perspective.
401+ This is because a similar division between "application" and "secure element"
402+ typically exists already :
403+ even if all steps of the signing algorithm are executed in a trusted secure element,
404+ the inputs to the secure element are provided by some outside component such as a software application.
405+ If the application can provide any input to be signed,
406+ then for all practical purposes it is trusted with possession of any private keys
407+ for as long as it is authorized to exercise the secure element.
408+ The application can in practice obtain a signature over any chosen message
409+ without needing to perform a forgery attack.
410+ The same relationship exists between _digester_ and _signer_.
411+ Applications that cannot trust an external _digester_ -
412+ for example a hardware security device with an integrated secure display of what data is about to be signed -
413+ by definition have no use for split signing algorithm identifiers.
414+
415+ Similarly from a verifier's perspective,
416+ these split signing procedures are implementation details.
384417When a signature is generated by a single party,
385418that single party takes on both the _digester_ and the _signer_ roles,
386419and obviously trusts itself to perform the _digester_ role honestly.
387- This assumption is carried forward for the split signing use case :
388- the _digester_ is assumed trusted,
389- since it is part of the overall procedure of generating a signature over some input data.
390420From the verifier's perspective,
391421a malicious _digester_ in the split signing model would have the same powers
392422as a malicious signature generator in a single-party signing model.
@@ -400,18 +430,26 @@ The reasoning in {{sec-cons-trusted-roles-protocol}} does not hold on the compon
400430A _signer_ implementation MUST NOT assume that the _digester_ implementation
401431it interoperates with is necessarily honest.
402432Split signing algorithms MUST NOT be defined in a way
403- that enables a malicious _digester_ with access to an honest _signer_
404- to produce forgeries or extract secrets from the _signer_.
433+ that enables a malicious _digester_ with access to an honest _signer_ to produce forgeries -
434+ any that could not be produced by simply requesting a signature over the desired message -
435+ or extract secrets from the _signer_.
405436
406437For example, for ECDSA ({{ecdsa-split}}), a malicious _digester_ can choose _H_
407438in such a way that the _signer_ will derive any _digester_-chosen value of _e_,
408439including zero or other potentially problematic values.
409440Fortunately, in this case, this does not enable the _digester_ to extract the signature nonce or private key.
410- It also does not enable forgeries,
441+ It also does not make forgeries easier ,
411442since the _digester_ still needs to find a preimage of _e_ for the relevant hash function.
412443Definitions of other algorithms need to ensure that similar chosen-input attacks
413444do not enable extracting secrets or forging protocol-level messages.
414445
446+ For example, a naively prehashed version of FALCON [FALCON] would allow such a key compromise :
447+ A FALCON signature is a value `s` such that both `s` and `s * h - hash(r || m)` are short,
448+ where `h` is the public key and `r` a randomizer.
449+ If the digester gets to query the signer for signatures of arbitrary stand-ins for `hash(r || m)`,
450+ they can extract the private key by for example asking for repeated signatures of 0.
451+ Therefore, definitions of split signing algorithms need to be reviewed and potentially have security proofs adjusted.
452+
415453
416454# # Incorrect Use of Split Signing Algorithm Identifiers {#sec-cons-invalid-alg-use}
417455
@@ -586,7 +624,8 @@ the Internet-Draft of ARKG [I-D.bradleylundberg-ARKG] extends this specification
586624
587625We would like to thank
588626Ilari Liusvaara,
589- Lucas Prabel
627+ Lucas Prabel,
628+ Sophie Schmieg
590629and
591630Falko Strenzke
592631for their reviews of and contributions to this specification.
@@ -603,6 +642,10 @@ for their reviews of and contributions to this specification.
603642* Added Security Considerations section "Incorrect Use of Split Signing Algorithm Identifiers".
604643* Added Implementation Considerations section "Using Non-Split Signing Algorithm Identifiers in a Split Signing Protocol".
605644* Added section "Defining Split Signing Algorithms" with guidance for handling domain separation tags in new definitions.
645+ * Clarified in introduction that Ed25519 and Ed25519ph(-split) have distinct verification algorithms.
646+ * Clarified in section "Protocol-Level Trusted Roles" why digester is necessarily trusted.
647+ * Clarified in section "Component-Level Trusted Roles" that redundant forgeries are acceptable,
648+ and added example of key compromise concern for naively hashed FALCON.
606649
607650-04
608651
0 commit comments