Hi folks,

I've put together a PR that attemps to address the PSS issue.

See:
https://github.com/tlswg/tls13-spec/pull/1114


Because there are platforms which don't have any support for PSS in
the cert validator, at all, it seems like we MUST be able to express
the following:

1. I accept PSS in CV, but nowhere in certificates, and the SPKI
   MUST be of type rsaEncryption (because this is what Chrome
   can do on some platforms).

Going forward, we want to be able to express:

2. I accept PSS in CV *and* everywhere in the certificate chain
   (otherwise PSS certificates are dead)

3. I accept EdDSA in CV but not for signing certificates
   (note that this is subtly different from the PSS case because
   you would need an EdDSA SPKI)

4. I accept EdDSA in CV and everywhere in the cert chain


Of these, #4 is mandatory, but #2 and #3 are pretty nice to have if
we want fast deployment. Otherwise, it's not possible to roll out
EdDSA (or other new algorithms) to browsers which don't have full
support in the validator, which, based on history, seems like a
pretty common situation.


Unfortunately, this seems to require two distinctions:

1. CV versus cert chain (for any incremental deployment)
2. PKCS#1 versus PSS (for the goofy PSS case).


So, I think in order to address this problem we need two constructs:

- A separate extension that refers only to the cert chain
- Two sets of RSA code points, one for PSS and one for PKCS#1.

For the first, we would introduce a new signature_algorithms_certs
which says: "this is what I support for the signature algorithms in
certificates" (and by extension SPKI) If this is present, you filter:

   (a) CV signatures/EE keys against signature_algorithms

   (b) the signatures on certificates (and keys of their signers)
   against signature_algorithms_cert

If it's absent, you filter everything against signature_algorithms as
in the current design.


For the second, we would have:

- rsa_pss_shaX_rsae       == "I support PSS signatures with rsaEncryption
SPKI"
                             [these would use the current rsa_pss_shaX code
points]
- rsa_pss_shaX_rsassa_pss == "I support PSS signatures with RSASSA-PSS SPKI"


To go back to our requirements, you would say #1 (PSS in CV only, with
rsaEncryption)
as:

  signature_algorithms = [rsa_pss_shaX_rsae]
  signature_algorithms_cert = [rsa_pkcs1_shaX]


You would say #2 (full PSS) as:

  signature_algorithms = [rsa_pss_shaX_rsae, rsa_pss_shaX_rsassa_pss]
  signature_algorithms_cert = [rsa_pkcs1_shaX, rsa_pss_shaX_rsae,
rsa_pss_shaX_rsassa-pss]

You would say #3 (EdDSA in CV only as)

  signature_algorithms = [ed25519]
  signature_algorithms_cert = [something else like ecdsa_secp256r1_sha256]

And finally, #4 (full EdDSA support)

  signature_algorithms = [ed25519]
  signature_algorithms_cert = [ed25519]


I recognize that this isn't totally ideal, but I think it covers all the
relevant
cases, and even some we don't need to cover, like you would support
RSASSA-PSS
SPKI in the EE cert:

  signature_algorithms = [rsa_pss_shaX_rsae, rsa_pss_shaX_rsassa_pss]
  signature_algorithms_cert = [rsa_pkcs1_shaX]

Comments?
-Ekr
_______________________________________________
TLS mailing list
TLS@ietf.org
https://www.ietf.org/mailman/listinfo/tls

Reply via email to