-
Notifications
You must be signed in to change notification settings - Fork 569
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
[TLS 1.3] Post-Quantum Readiness via Hybrid Key Exchange #2983
Conversation
cb06d70
to
7b74a14
Compare
This pull request introduces 1 alert when merging 7b74a14 into 8bfb00f - view on LGTM.com new alerts:
|
7b74a14
to
9b38694
Compare
Rebased to master. |
9b38694
to
5bad80a
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Broadly speaking looks good to me. Needs a rebase to resolve the merge conflicts and I can give a final review.
5bad80a
to
f6b4f80
Compare
Rebased to master. This will certainly need another look and compatibility testing round. Maybe it could even be used as a vehicle to find a better alternative to the I'd suggest to keep this open until most of the the remaining TLS 1.3 work is done and revisit. |
Codecov ReportBase: 87.98% // Head: 87.69% // Decreases project coverage by
Additional details and impacted files@@ Coverage Diff @@
## master #2983 +/- ##
==========================================
- Coverage 87.98% 87.69% -0.30%
==========================================
Files 599 600 +1
Lines 66333 66544 +211
Branches 6610 6635 +25
==========================================
- Hits 58365 58355 -10
- Misses 5181 5407 +226
+ Partials 2787 2782 -5
Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here. ☔ View full report at Codecov. |
There is a specific draft for X25519+Kyber768 which is already implemented by Zig stdlib and also (IIRC) Cloudflare https://github.com/bwesterb/draft-westerbaan-tls-xyber768d00/blob/main/draft-tls-westerbaan-xyber768d00.md |
Closing as superseded by: #3609 |
Pull-Request Dependencies
Both change sets are currently also displayed in this pull request. Hence, review and merge of those should make this PR fairly small (~700 lines added).
TODO
minimum_kyber_group_size()
to the TLS policy (??)Description
This enables the TLS 1.3 implementation to perform hybrid key exchanges using a classical KEX (ECDH or X25519) and a post-quantum KEM (Kyber or Kyber90s). The implementation is based on this IETF draft and the group identifiers for the Key Share extension are taken from OQS.
Demo
./configure.py \ --build-targets=static,cli \ --minimized-build \ --without-documentation \ --enable-modules=tls13,tls13_pqc,auto_rng,system_rng,chacha20poly1305,curve25519,kyber make -j$(nproc) cli ./botan tls_client \ --policy=src/tests/data/tls-policy/default_tls13_pqc.txt \ --port=443 \ kms.eu-central-1.amazonaws.com
Using the snippets above, one should obtain a TLS 1.3 connection to Amazon's KMS endpoint (that is already PQC-enabled using their s2n-tls library). Simply typing "GET / HTTP/1.1" [Enter][Enter] should yield an (admittedly useless) "Bad Request" response.
The PQC TLS 1.3 policy file passed to the CLI uses X25519/Kyber512 as the hybrid key exchange scheme.