-
Notifications
You must be signed in to change notification settings - Fork 17.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
crypto/tls: fix pseudo-constant mitigation for lucky 13 #27071
Comments
cc @FiloSottile |
Change https://golang.org/cl/170701 mentions this issue: |
Change https://golang.org/cl/170704 mentions this issue: |
Change https://golang.org/cl/170702 mentions this issue: |
Change https://golang.org/cl/170703 mentions this issue: |
The CBC mode ciphers in TLS are a disaster. By ordering authentication and encryption wrong, they are very subtly dependent on details and implementation of the padding check, admitting attacks such as POODLE and Lucky13. crypto/tls does not promise full countermeasures for Lucky13 and still contains some timing variations. This change fixes one of the easy ones: by checking the MAC, then the padding, rather than all at once, there is a very small timing variation between bad MAC and (good MAC, bad padding). The consequences depend on the effective padding value used in the MAC when the padding is bad. extractPadding simply uses the last byte's value, leaving the padding bytes effectively unchecked. This is the scenario in SSL 3.0 that led to POODLE. Specifically, the attacker can take an input record which uses 16 bytes of padding (a full block) and replace the final block with some interesting block. The MAC check will succeed with 1/256 probability due to the final byte being 16. This again means that after 256 queries, the attacker can decrypt one byte. To fix this, bitwise AND the two values so they may be checked with one branch. Additionally, zero the padding if the padding check failed, to make things more robust. Updates #27071 Change-Id: I332b14d215078928ffafe3cfeba1a68189f08db3 Reviewed-on: https://go-review.googlesource.com/c/go/+/170701 Reviewed-by: Filippo Valsorda <filippo@golang.org> Run-TryBot: Filippo Valsorda <filippo@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
@FiloSottile Is there more to do here for 1.14? |
Kindly ping @FiloSottile @katiehockman, shall we move this issue back to backlog, or is there something left for Go1.14 and then we can close it? |
Since we're in the freeze and the RC1 has been cut, I think we should move this to the 1.15 milestone. @FiloSottile what do you think? It looks like you gave a +2 to one of the CLs early last year. |
Punting to Go1.16 as no movement on the CLs since April 2019. |
Punting to Go1.17. |
Moving to Backlog. |
As detailed in the paper "Pseudo Constant Time Implementations of TLS
Are Only Pseudo Secure"
https://eprint.iacr.org/2018/747
The text was updated successfully, but these errors were encountered: