Any chance you can enable this quantum-resistant key encapsulation method sometime soon to meet our PQC agility goals? (i.e. ability to negotiate TLS 1.3 Group X25519MLKEM768 … ECDH + ML-KEM-768)
Thank you for getting back to me. Unsure of Syncthing’s setup, and yes, perhaps it’s enabled in the library, but you might have to explicitly enable ML-KEM via configuration (e.g. in nginx you use the ssl_ecdh_curve directive).
Connecting to ::1
CONNECTED(00000200)
B84E0000:error:0A000410:SSL routines:ssl3_read_bytes:ssl/tls alert handshake failure:..\ssl\record\rec_layer_s3.c:916:SSL alert number 40
---
no peer certificate available
---
No client certificate CA names sent
Negotiated TLS1.3 group: <NULL>
---
SSL handshake has read 7 bytes and written 1466 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Protocol: TLSv1.3
This TLS version forbids renegotiation.
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---
This result means the client can’t negotiate the requested group. If I try without then I can negotiate ECDH only:
openssl s_client -connect localhost:8384
---
No client certificate CA names sent
Peer signing digest: SHA384
Peer signature type: ecdsa_secp384r1_sha384
Peer Temp Key: X25519, 253 bits
---
SSL handshake has read 930 bytes and written 1588 bytes
Verification error: self-signed certificate
---
New, TLSv1.3, Cipher is TLS_AES_128_GCM_SHA256
Protocol: TLSv1.3
Server public key is 384 bit
This TLS version forbids renegotiation.
No ALPN negotiated
Early data was not sent
Verify return code: 18 (self-signed certificate)
I recently dug into this topic. While go 1.24 supports PQC by default, it doesn’t seem to work for syncthing yet.
@calmh suggested that this may be related to syncthing “targeting” an older go version while building with a newer version. Otherwise, there should be nothing to configure.