Skip to content
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

uTLS: X25519Kyber768Draft00 hybrid post-quantum key agreement #223

Merged
merged 3 commits into from
Aug 26, 2023

Commits on Aug 12, 2023

  1. uTLS: X25519Kyber768Draft00 hybrid post-quantum key agreement by clou…

    …dflare/go (#222)
    
    * crypto/tls: Add hybrid post-quantum key agreement  (#13)
    
    * import: client-side KEM from cloudflare/go
    
    * import: server-side KEM from cloudflare/go
    
    * fix: modify test to get rid of CFEvents.
    
    Note: uTLS does not promise any server-side functionality, and this change is made to be able to conduct unit tests which requires both side to be able to handle KEM Curves.
    
    Co-authored-by: Christopher Wood <caw@heapingbits.net>
    Co-Authored-By: Bas Westerbaan <bas@westerbaan.name>
    
    ----
    
    Based on:
    
    * crypto/tls: Add hybrid post-quantum key agreement 
    
    Adds X25519Kyber512Draft00, X25519Kyber768Draft00, and
    P256Kyber768Draft00 hybrid post-quantum key agreements with temporary
    group identifiers.
    
    The hybrid post-quantum key exchanges uses plain X{25519,448} instead
    of HPKE, which we assume will be more likely to be adopted. The order
    is chosen to match CECPQ2.
    
    Not enabled by default.
    
    Adds CFEvents to detect `HelloRetryRequest`s and to signal which
    key agreement was used.
    
    Co-authored-by: Christopher Wood <caw@heapingbits.net>
    
     [bas, 1.20.1: also adds P256Kyber768Draft00]
     [pwu, 1.20.4: updated circl to v1.3.3, moved code to cfevent.go]
    
    * crypto: add support for CIRCL signature schemes
    
    * only partially port the commit from cloudflare/go. We would stick to the official x509 at the cost of incompatibility.
    
    Co-Authored-By: Bas Westerbaan <bas@westerbaan.name>
    Co-Authored-By: Christopher Patton <3453007+cjpatton@users.noreply.github.com>
    Co-Authored-By: Peter Wu <peter@lekensteyn.nl>
    
    * crypto/tls: add new X25519Kyber768Draft00 code point
    
    Ported from cloudflare/go to support the upcoming new post-quantum keyshare.
    
    ----
    
    * Point tls.X25519Kyber768Draft00 to the new 0x6399 identifier while the
      old 0xfe31 identifier is available as tls.X25519Kyber768Draft00Old.
    * Make sure that the kem.PrivateKey can always be mapped to the CurveID
      that was linked to it. This is needed since we now have two ID
      aliasing to the same scheme, and clients need to be able to detect
      whether the key share presented by the server actually matches the key
      share that the client originally sent.
    * Update tests, add the new identifier and remove unnecessary code.
    
    Link: https://mailarchive.ietf.org/arch/msg/tls/HAWpNpgptl--UZNSYuvsjB-Pc2k/
    Link: https://datatracker.ietf.org/doc/draft-tls-westerbaan-xyber768d00/02/
    Co-Authored-By: Peter Wu <peter@lekensteyn.nl>
    Co-Authored-By: Bas Westerbaan <bas@westerbaan.name>
    
    ---------
    
    Co-authored-by: Bas Westerbaan <bas@westerbaan.name>
    Co-authored-by: Christopher Patton <3453007+cjpatton@users.noreply.github.com>
    Co-authored-by: Peter Wu <peter@lekensteyn.nl>
    4 people committed Aug 12, 2023
    Configuration menu
    Copy the full SHA
    da99cf7 View commit details
    Browse the repository at this point in the history

Commits on Aug 13, 2023

  1. new: enable PQ parrots (#225)

    * Redesign KeySharesEcdheParameters into KeySharesParameters which supports multiple types of keys.
    
    * Optimize program logic to prevent using unwanted keys
    gaukas committed Aug 13, 2023
    Configuration menu
    Copy the full SHA
    011276b View commit details
    Browse the repository at this point in the history

Commits on Aug 14, 2023

  1. new: more parrots and safety update (#227)

    * new: PQ and other parrots
    
    Add new preset parrots:
    - HelloChrome_114_Padding_PSK_Shuf
    - HelloChrome_115_PQ
    - HelloChrome_115_PQ_PSK
    
    * new: ShuffleChromeTLSExtensions
    
    Implement a new function `ShuffleChromeTLSExtensions(exts []TLSExtension) []TLSExtension`.
    
    * update: include psk parameter for parrot-related functions
    
    Update following functions' prototype to accept an optional pskExtension (of type *FakePreSharedKeyExtension):
    - `UClient(conn net.Conn, config *Config, clientHelloID ClientHelloID)` => `UClient(conn net.Conn, config *Config, clientHelloID ClientHelloID, pskExtension ...*FakePreSharedKeyExtension)`
    - `UTLSIdToSpec(id ClientHelloID)` => `UTLSIdToSpec(id ClientHelloID, pskExtension ...*FakePreSharedKeyExtension)`
    
    * new: pre-defined error from UTLSIdToSpec
    
    Update UTLSIdToSpec to return more comprehensive errors by pre-defining them, allowing easier error comparing/unwrapping.
    gaukas committed Aug 14, 2023
    Configuration menu
    Copy the full SHA
    f687104 View commit details
    Browse the repository at this point in the history