A closer look at your referenced CVEs suggests these can be classified as (i) 
lack of checking for improperly generated DH groups; (ii) exploiting 
overflow/underflow/carry bugs. To me, nothing seems to be new here and more 
likely a failure of implementers to heed to results and advice predating the 
CVEs by years (and sometimes decades) or in QA processes. E.g., with respect to 
(i), one had not gotten oneself into trouble if one had actually bothered to 
implement domain parameter checks. In the literature of implementation attacks, 
OpenSSL has proven to be an excellent "implementation security flaw paper 
generator".

 

I have yet to see evidence that ephemeral-static ECDH would be inherently 
insecure.

 

If a consistent history of directly linked vulnerabilities across major 
implementations doesn't show something is unsafe, I don't think there is 
progress to be made in the discussion. Blaming the implementers is not 
particularly interesting to me.

 

First, is this the only mode that has “directly linked vulnerabilities”? 
Second, cutting corners (e.g., for performance sake) by omitting domain 
parameters check, or not taking care of over/underflow, and such, cannot be 
considered a “protocol or algorithm fault”. Blame who you want, but the facts 
are here.

 

 

Anyway, I don't have an opinion on SHOULD NOT vs MUST NOT, as long as it leads 
to Recommended: N in the registry.

 

“MUST NOT”     => “if you do that, you’re not compliant, period”.

“SHOULD NOT” => “don’t do that, unless you have very good reasons, and can 
explain to your customers why it’s really OK in that particular case”.

 

Correct, both should lead to “Not Recommended”.

 

 

On 2021-08-27 9:34 a.m., Filippo Valsorda wrote:

[snip] 

 

This is empirically disproved by a number of vulnerabilities that are 
exploitable (or near-misses for other reasons) only in ephemeral-static mode, 
such as CVE-2016-0701, CVE-2016-7055, CVE-2017-3732, CVE-2017-3736, 
CVE-2017-3738, CVE-2019-1551 just in the past 5 years in OpenSSL, and 
CVE-2017-8932 and CVE-2021-3114 in Go. https://eprint.iacr.org/2011/633 gives a 
good explanation of how these attacks work, and you might find 
https://i.blackhat.com/us-18/Wed-August-8/us-18-Valsorda-Squeezing-A-Key-Through-A-Carry-Bit-wp.pdf
 interesting as well.

OpenSSL:

CVE-2016-0701: improper generation of Diffie-Hellman group

The DH_check_pub_key function in crypto/dh/dh_check.c in OpenSSL 1.0.2 before 
1.0.2f does not ensure that prime numbers are appropriate for Diffie-Hellman 
(DH) key exchange, which makes it easier for remote attackers to discover a 
private DH exponent by making multiple handshakes with a peer that chose an 
inappropriate number, as demonstrated by a number in an X9.42 file.

CVE-2016-7055: carry-propagation bug

There is a carry propagating bug in the Broadwell-specific Montgomery 
multiplication procedure in OpenSSL 1.0.2 and 1.1.0 before 1.1.0c that handles 
input lengths divisible by, but longer than 256 bits. Analysis suggests that 
attacks against RSA, DSA and DH private keys are impossible. This is because 
the subroutine in question is not used in operations with the private key 
itself and an input of the attacker's direct choice. Otherwise the bug can 
manifest itself as transient authentication and key negotiation failures or 
reproducible erroneous outcome of public-key operations with specially crafted 
input. Among EC algorithms only Brainpool P-512 curves are affected and one 
presumably can attack ECDH key negotiation. Impact was not analyzed in detail, 
because pre-requisites for attack are considered unlikely. Namely multiple 
clients have to choose the curve in question and the server has to share the 
private key among them, neither of which is default behaviour. Even then only 
clients that chose the curve will be affected.

CVE-2017-3732: carry-propagation bug

There is a carry propagating bug in the x86_64 Montgomery squaring procedure in 
OpenSSL 1.0.2 before 1.0.2k and 1.1.0 before 1.1.0d. No EC algorithms are 
affected. Analysis suggests that attacks against RSA and DSA as a result of 
this defect would be very difficult to perform and are not believed likely. 
Attacks against DH are considered just feasible (although very difficult) 
because most of the work necessary to deduce information about a private key 
may be performed offline. The amount of resources required for such an attack 
would be very significant and likely only accessible to a limited number of 
attackers. An attacker would additionally need online access to an unpatched 
system using the target private key in a scenario with persistent DH parameters 
and a private key that is shared between multiple clients. For example this can 
occur by default in OpenSSL DHE based SSL/TLS ciphersuites. Note: This issue is 
very similar to CVE-2015-3193 but must be treated as a separate problem.

CVE-2017-3736: carry-propagation bug

There is a carry propagating bug in the x86_64 Montgomery squaring procedure in 
OpenSSL before 1.0.2m and 1.1.0 before 1.1.0g. No EC algorithms are affected. 
Analysis suggests that attacks against RSA and DSA as a result of this defect 
would be very difficult to perform and are not believed likely. Attacks against 
DH are considered just feasible (although very difficult) because most of the 
work necessary to deduce information about a private key may be performed 
offline. The amount of resources required for such an attack would be very 
significant and likely only accessible to a limited number of attackers. An 
attacker would additionally need online access to an unpatched system using the 
target private key in a scenario with persistent DH parameters and a private 
key that is shared between multiple clients. This only affects processors that 
support the BMI1, BMI2 and ADX extensions like Intel Broadwell (5th generation) 
and later or AMD Ryzen.

CVE-2017-3738: overflow bug

There is an overflow bug in the AVX2 Montgomery multiplication procedure used 
in exponentiation with 1024-bit moduli. No EC algorithms are affected. Analysis 
suggests that attacks against RSA and DSA as a result of this defect would be 
very difficult to perform and are not believed likely. Attacks against DH1024 
are considered just feasible, because most of the work necessary to deduce 
information about a private key may be performed offline. The amount of 
resources required for such an attack would be significant. However, for an 
attack on TLS to be meaningful, the server would have to share the DH1024 
private key among multiple clients, which is no longer an option since 
CVE-2016-0701. This only affects processors that support the AVX2 but not ADX 
extensions like Intel Haswell (4th generation). Note: The impact from this 
issue is similar to CVE-2017-3736, CVE-2017-3732 and CVE-2015-3193. OpenSSL 
version 1.0.2-1.0.2m and 1.1.0-1.1.0g are affected. Fixed in OpenSSL 1.0.2n. 
Due to the low severity of this issue we are not issuing a new release of 
OpenSSL 1.1.0 at this time. The fix will be included in OpenSSL 1.1.0h when it 
becomes available. The fix is also available in commit e502cc86d in the OpenSSL 
git repository.

CVE-2019-1551: overflow bug

There is an overflow bug in the x64_64 Montgomery squaring procedure used in 
exponentiation with 512-bit moduli. No EC algorithms are affected. Analysis 
suggests that attacks against 2-prime RSA1024, 3-prime RSA1536, and DSA1024 as 
a result of this defect would be very difficult to perform and are not believed 
likely. Attacks against DH512 are considered just feasible. However, for an 
attack the target would have to re-use the DH512 private key, which is not 
recommended anyway. Also applications directly using the low level API 
BN_mod_exp may be affected if they use BN_FLG_CONSTTIME. Fixed in OpenSSL 
1.1.1e (Affected 1.1.1-1.1.1d). Fixed in OpenSSL 1.0.2u (Affected 1.0.2-1.0.2t).

Go:

CVE-2017-8932: arithmetic bug

A bug in the standard library ScalarMult implementation of curve P-256 for 
amd64 architectures in Go before 1.7.6 and 1.8.x before 1.8.2 causes incorrect 
results to be generated for specific input points. An adaptive attack can be 
mounted to progressively extract the scalar input to ScalarMult by submitting 
crafted points and observing failures to the derive correct output. This leads 
to a full key recovery attack against static ECDH, as used in popular JWT 
libraries.

CVE-2021-3114: underflow bug

In Go before 1.14.14 and 1.15.x before 1.15.7, crypto/elliptic/p224.go can 
generate incorrect outputs, related to an underflow of the lowest limb during 
the final complete reduction in the P-224 field.
_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls
 
 
-- 
email: rstruik....@gmail.com | Skype: rstruik
cell: +1 (647) 867-5658 | US: +1 (415) 287-3867
 

Attachment: smime.p7s
Description: S/MIME cryptographic signature

_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to