- From: Ryan Sleevi <sleevi@google.com>
- Date: Sat, 26 Mar 2016 09:38:51 -0700
- To: Jim Schaad <ietf@augustcellars.com>
- Cc: "public-webcrypto@w3.org" <public-webcrypto@w3.org>
- Message-ID: <CACvaWvYuP_XpUEEZyW7+jjqQ9kGnm-_OMRpN1_Upg0KzCEGFqg@mail.gmail.com>
On Fri, Mar 25, 2016 at 11:52 PM, Jim Schaad <ietf@augustcellars.com> wrote: > Options going forward: > > 1. Completely give up on the idea of supporting algorithms specificity for > the import/export routines with ASN.1. This is really the only option that > is going to be viable in terms of getting the work done even close to the > schedule laid out. > > 2. Make a (small) step toward getting the algorithms part of the keys by > doing what the current PSS and OAEP IETF standards say to do for public > keys, but probably not for private keys. > > 3. Go for broke and keep things as they are now. > > 4. Kill the idea of doing any ASN.1 import and export code at all. > Hi Jim, While I appreciate you spelling out these options, unfortunately, they ignore the root cause of the interoperability issues, and thus fails to address what's causing it. While the historical context is useful, fundamentally what we have is a question regarding implementors plans towards interoperability. As it stands today, implementations - Chrome and Firefox, at least - are deferring to the underlying cryptographic libraries to perform their ASN.1 parsing. This, unsurprisingly, leads to incompatibility. One might also assume that Microsoft is or will do the same - thus adding to it, as NSS, BoringSSL, and CryptoAPI/CNG all output keys in slightly different ways, and are all *liberal* in different ways. I want to stress that this is a cause of interoperability issues. If one implementation accepts "rsaEncryption" and "id-RSA-PSS", but the others don't, then that's an interoperability issue - even if all implementations can and do import rsaEncryption. If, say, it was Chrome being liberal in what it accepted (accepting both), then in order for Firefox to support id-RSA-PSS, it would have to reverse engineer Chrome's implementation - or do something incompatible. So let's set the first order goal as needing to have all implementations being uniformly consistent in what they import, or, alternatively, fully specifying what all implementations import. So if we set that as our problem statement, we will see why we have challenges today. Because browsers are deferring to their underlying cryptographic libraries, and because THOSE libraries don't make stable API guarantees in what they will accept (after all, from the perspective of the library, there is no web compat concern because it's "just" a library), we can't have interoperability. To solve these, we would need the browsers themselves to do the ASN.1 parsing / normalization / validation, BEFORE handing to the underlying cryptographic library. This is not hard. It's not entirely unreasonable. But it needs to be called out here as the root cause of the interoperability concerns. And unless and until we know what other implementations plan to do on that problem, then we can't say we'll have interoperability. As such, your Options 1-3 are not options - they're really just variations of continuing the status quo, because they don't actually move to a world where things behave as expected. So what we have is simply two options: 1) Keep ASN.1 key types, but process them (first) in the browser, rather than the underlying cryptographic library 2) Remove ASN.1 key types These are the only options that move us to a Web Platform level of interoperability. Changes to the spec language, whether moving to 'informative' or loosening (as Harry has suggested in the past) or, for the matter, your Options 1 & 2, don't actually address interoperability - it requires implementation side changes. The question is: Are implementors willing to make the necessary changes? If not, then we should remove the types. If there's strong feeling that supporting these types is important, THEN the only viable, responsible path forward for the web platform is for implementations to do #1.
Received on Saturday, 26 March 2016 16:39:59 UTC