Hi!

While working on adding RSASSA-PSS support to Go's crypto/tls library
(TLS 1.2), I have noticed something that may cause interop problems
later.


The current draft says the following about Server Certificate Selection
(https://tools.ietf.org/html/draft-ietf-tls-tls13-21#section-4.4.2.2):

   -  The certificate MUST allow the key to be used for signing (i.e.,
      the digitalSignature bit MUST be set if the Key Usage extension is
      present) with a signature scheme indicated in the client's
      "signature_algorithms" extension.

In TLS 1.2, the cipher suite was responsible for selecting the hash
function and signature algorithm (e.g. for ServerKeyExchange) while
"signature_algorithms" directed what certificate signatures are
accepted.  But in TLS 1.3, this also influences what algorithms can be
used for signing handshake messages (CertificateVerify).

This results in possible interop problem: while implementations
advertise RSASSA-PSS support in "supported_algorithms" because they can
indeed sign/verify handshake messages with said algorithm, they might
not be able to accept certificates with a RSASSA-PSS signature (because
the PKI library does not implement it for example). And because PSS
certificates are non-existent now, it will only be discovered later.

Some implementations I have checked wrt RSASSA-PSS support:
 - Go crypto/tls (TLS 1.2) - no RSASSA-PSS yet.
 - tls-tris (TLS 1.3) - accepts PSS for CV, but not certificates.
 - BoringSSL - failed, "bssl server" rejects cert.
 - OpenSSL - failed, s_server rejects cert. Related:
   https://github.com/openssl/openssl/issues/2878
 - NSS - not checked, but I think it has the same problem as tls-tris.
   Related: https://bugzilla.mozilla.org/show_bug.cgi?id=158750

These implementations will require fixing, but at the moment it is just
broken. Is this the expected behavior/intention?


While RSASSA-PSS is quite well understood for handshake messages, its
restrictions for certificates are not explicit. Currently the draft
limits the salt length for handshake messages, but what about certs?
What is needed for a TLS implementation to claim support for RSASSA-PSS?

In particular, for certificates:

 - Limitations on salt length?
 - What AlgorithmIdentifier OID to use?
 - Whether to constrain other AlgorithmIdentifier Params? (MGF, hash
   algorithm, trailerField)?
-- 
Kind regards,
Peter Wu
https://lekensteyn.nl

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

Reply via email to