- From: =JeffH via GitHub <sysbot+gh@w3.org>
- Date: Wed, 26 Oct 2016 17:14:06 +0000
- To: public-webauthn@w3.org
@rlin1 wrote:
> JSON Web Key defines RS256 which is equivalent to the Web Crypto
defined "RSASSA-PKCS1-v1_5" (see http://www.w3c.org/TR/WebCryptoAPI/)
>
> In Section 3.8.3 in web authentication spec, we reference the
WebCrypto terminology, but in example two (and other places) we use
RS256 - the JWK term.
AFAICT, section 3.8.3 is now S 5.3.3
{#generating-an-attestation-statement}
Upon inspection, this issue appears to be composed of several
sub-issues:
1. actually, wrt S 5.3.3 {#generating-an-attestation-statement} and
the notation therein of "RSA PKCS1" and "RSASSA-PSS": the former is
incorrect/imprecise in terms of both WebCrypto [1] and RFC3447 [2].
The latter, "RSASSA-PSS", is used only in RFC3447.
Also, the phrase they are used within -- "Raw encoded RSA PKCS1 or
RSASSA-PSS public key" -- is incorrect in that the former is an
identifier for the RSA PKCS #1 spec series itself, the latter is the
identifier for the RSASSA-PSS signature scheme, and neither are
identifiers for ostensible subtypes of RSA keys.
In fact, as I understand it, relative to the various RSA encryption
and signature schemes, there are no variances of RSA key pairs,
themselves, relative to their use in encryption or signature schemes.
I.e., a given RSA key pair can be used with any of the various RSA
encryption and signature schemes.
[Note: the so-called "multi-prime" RSA key subtype, where the modulus
may have more than two prime factors ([2] Section 3), does not affect
which RSA encryption or signature schemes an RSA key pair may be used
with, other than said schemes needing to be spec'd per RSA PKCS #1
v2.1 or greater if the modulus is multi-prime.]
The RSA signature scheme identifiers as used in RFC3447 and WebCrypto
actually are..
<pre>
RFC3447 WebCrypto
------- ---------
RSASSA-PKCS1-v1_5 RSASSA-PKCS1-v1_5
RSASSA-PSS RSA-PSS
</pre>
..and so there is a difference between the sig scheme identifiers used
by those two specs in the case of RSA SSA PSS (RSA sig scheme
w/appendix (SSA) probabilistic sig scheme (PSS)).
1.1. It appears that the only reason to reference RFC3447 & RFC4055 in
the table in {#generating-an-attestation-statement} is to express
requirements for the characteristics of, and format of, a credential
public key of type RSA, and to also express the two supported RSA
signature algs.
2. @rlin1 says "in example two (and other places) we use RS256 - the
JWK term."
"example 2" is in S 10.1 Registration {#sample-registration}, and does
indeed use the JWA terms [4] for values of `cryptoParams.algorithm`,
which is incorrect given the present type of
`ScopedCredentialParameters.algorithm` is `AlgorithmIdentifier`.
3. wrt the question of whether to use either WebCrypto
`AlgorithmIdentifier`, or RFC7518 JWA, literal algorithm values
consistently in the WebAuthn spec, there are the following
considerations:
a. for `makeCredential()`: need to convey only a key type, e.g. RSA or
EC.
b. for authenticator (authnr) implementors and RP implementors, need
to state the set of supported [6] key types, signature algs, and hash
algs, and their mappings, termed here: "alg tuples" [5]. This is
applicable to both credential key pairs and attestation key pairs.
c. bytes-on-the-wire considerations for expressing alg tuples..
<pre>
WebCrypto RFC7518 Note
--------- ------- ----
{"name":"RSASSA-PKCS1-v1_5","hash":"SHA-256"} RS256 [7]
{"name":"RSA-PSS","hash":"SHA-256"} PS256 [8]
{"name":"ECDSA","namedCurve":"P-256","hash":"SHA-256"} ES256 [9]
</pre>
>From a bytes-on-the-wire perspective, using RFC7518 seems to win.
Note: we could ostensibly (mis-)use WebCrypto notation and state only
the "name" member of the AlgorithmIdentifier and explicilty state in
the spec the other alg tuple values that go along with each "name".
###
References and Footnotes:
[1] https://www.w3.org/TR/WebCryptoAPI/
[2] https://tools.ietf.org/html/rfc3447
[3] https://tools.ietf.org/html/draft-moriarty-pkcs1
[4] Note: RFC7518 is "JSON Web Algorithms (JWA)" -- JWK refers to
RFC7517 "JSON Web Key (JWK)", a key conveyance format -- the former,
JWA, is the correct term and reference for the WebAuthn spec to use in
that we do not employ JWK (if this PR is merged).
[5] Note: I'll term this "algorithm tuple". I.e., `{ key type,
signature alg, hash alg }`.
[6] Note: "supported" here **implies** (a) an authnr vendor may
implement any one of the algorithm tuples in a particular authnr, and
(b) RPs may honor any or all of the "alg tuples", modulo any notion of
"Mandatory To Implement" (MTI) statement we add to the spec.
[7] generically: RSASSA-PKCS1-v1_5 using SHA-256
[8] generically: RSASSA-PSS using SHA-256 and MGF1 with SHA-256
[9] generically: Elliptic Curve using curve p-256 with SHA-256
--
GitHub Notification of comment by equalsJeffH
Please view or discuss this issue at
https://github.com/w3c/webauthn/issues/123#issuecomment-256416058
using your GitHub account
Received on Wednesday, 26 October 2016 17:14:13 UTC