- From: Anders Rundgren <anders.rundgren.net@gmail.com>
- Date: Thu, 25 Jun 2015 21:43:01 +0200
- To: Billy Simon Chaves <b.simon@hermes-soft.com>
- Cc: Mark Watson <watsonm@netflix.com>, public-webcrypto-comments@w3.org, Ryan Sleevi <sleevi@google.com>, Jeffrey Walton <noloader@gmail.com>
- Message-ID: <CADEL5ztBPcukAeyuq9ZaLBGQW1mRTzX5sYUYkgQbdq+k5snXoA@mail.gmail.com>
Billy, WebCrypto keys are constrained by SOP which is the fundamental feature or problem depending to who you talk to :) anders On Jun 25, 2015 8:27 PM, "Billy Simon Chaves" <b.simon@hermes-soft.com> wrote: > > > On Jun 25, 2015, at 9:47 AM, Mark Watson <watsonm@netflix.com> wrote: > > > > On Thu, Jun 25, 2015 at 8:21 AM, Billy Simon Chaves < > b.simon@hermes-soft.com> wrote: > >> Thans Ryan for you detailed answer, >> >> On Jun 25, 2015, at 12:57 AM, Ryan Sleevi <sleevi@google.com> wrote: >> >> Billy, >> >> I'm a bit surprised that you mentioned your countries CA, but then don't >> see the privacy implications. I'm not familiar with Costa Rica's eID >> scheme, but under much of the eIDAS regulation in the EU, the certificates >> contain a variety of uniquely-identifying PII, such as the users name, >> their government-assigned ID, and, in some cases, biometric or photographic >> identifiers. >> >> >> I get your point. In my country, Costa Rica, certificates only have the >> subject's name and national ID. That information is already public and you >> can download it from our national registry official site ( >> http://www.tse.go.cr/descarga_padron.htm). I understand that that would >> be unacceptable in many other countries. >> >> That's simply unacceptable to expose to an arbitrary webpage without >> permissions, and we should strive for APIs that function without >> permissions, as permissions are a usability pox upon users. >> >> Even if we accepted that users are willing to identify themselves to >> websites in undeniable ways, you end up with a tremendously dangerous >> security model. In your document signing case, you may have a document >> signing application at hermes-soft.com/signing. However, if >> evilhacker.example.com/muahaha was able to get access to your private >> key (using the exact same mechanisms that hermes-soft.com/signing), then >> evilhacker.example.com could cause your smart card to generate >> signatures that the user hadn't authorized. >> >> The PIN prompt is simply not a security mechanism, and it should >> hopefully be clear the various ways in which evilhacker.example.com >> could make you think the prompt is coming from hermes-soft.com/signing >> (via timing attacks) when it's actually coming from >> evilhacker.example.com. Even if the prompt included the URL, there's >> huge phishing opportunities. >> >> >> Digital signature stealing by a phishing site is a big concern. No >> security mechanism is perfect, but at least the PIN prompt gives the user >> the chance to make a decision. If the PIN prompt is generated by the >> browser and includes relevant information like the site url, certificate >> name, what for the private key will be used, can not the user agent deter >> or minimize the kind of attacks you mentioned? >> > > "what for the private key will be used" > > Therein lies the reason WebCrypto is not a suitable API for this kind of > use-case. WebCrypto is a very low-level API. Once a site has a CryptoKey > object with usage "sign" it can use it to sign any arbitrary string of > bytes. The UA could present every byte string the site wants to sign to the > user for permission, but this does not seem like a path to a very > user-friendly experience. If you provide a separate API for the site to > indicate to the UA what the key will be used for in a more user-friendly > form, how would the UA then ensure that the key was indeed only used for > that purpose ? > > I suspect a somewhat higher level API is needed to support these use-cases > in the web environment. > > > > You are touching two sensitive issues: access control to the private key > and trust on the application requesting a digital signature. > > Access control to the private key is a critical issue and it has to be > dealt at the lowest possible level. Most scenarios involving digital > signature I can think of requiere at minimum: > > > - The private key is locally generated and stored in the user’s device. > - The private key has to be securely stored and protected by a strong > password or passphrase known only by the user > - The private key can not be used without explicit authorization from > the key owner. > > > Those requirements are needed to guaranty authenticity and no repudiation > of the digital signatures and can not be delegated to a higher level APIs. > > It is hard for me to come up with real live scenarios involving signing > documents, transactions or messaging where: > > - my private keys are generated by a third party and then somehow > delivered to my device > - a site can ask the UA to generate a digital signature using “my" > private key without asking for my permission every single time. Maybe > that's not user friendly, but to me it is dangerous if a site can use my > private key without my explicit authorization. > > > Regarding trust I think that’s up to the user and the application he is > using. The UA should not make that decision for the user. The API signs a > hash of the actual data so it can not tell what data is actually being > signed. A well behaved application must present the whole information that > is being signed when requesting a digital signature, in order to allow the > user to read and probably keep a copy of the information that he is going > to sign. > > The role of the UA regarding trust is: > > - Guaranty that the private key remains private and is not used > without authorization > - Provide evidence of the identity of the site requesting the digital > signature, so the user can decide whether to trust or not > - Make sure that a signature requested by a site is only delivered to > that site and can’t be stealed by another site > > > There are other issues involved in real live scenarios that any one using > WebCrypto will have to cope with: > > - Key expiration and revocation. Are keys going to live for ever or > will the expire? if I found out that my key is compromised how I tell the > site that revoke it? > - Public key distribution and trust (how can Bob be sure he has Alice > public key? do I trust to the site? whats the process the site follows to > identify and issue keys for its users) > - Long time validation of digital signatures, for instance validating > a document signature signature many years after It was made > > To me it seems that applications using webcrypto will have to assume many > of the current CA’s responsibilities... > > > > > >> By the way, we deal with that issue in our digital signature component >> restricting which domains can use our component. >> >> Hopefully this makes it a bit more explicit the deep concerns with the >> security and why there isn't really a path forward for such keys, >> especially when alternative, modern systems exist. >> >> >> My point raising these issues is that at least in Costa Rica, sadly, we >> won’t be able to use Web Crypto with its current limitations for eGov or >> Banking or any serius applications because by law we have to use digital >> certificates issued by our national approved CAs and private keys stored in >> FIPS 140‐2 level 3. I think that could be the case in many other countries >> that have national CA’s, I think Costa Rica borrowed its CAs model from >> Spain. >> >> Thanks again, >> >> >> On Wed, Jun 24, 2015 at 3:48 PM, Billy Simon Chaves < >> b.simon@hermes-soft.com> wrote: >> >>> >>> >>> >>> Hello Ryan, >>> >>> It is not obvious to me the privacy or security reasons why a web >>> application should not be able to enumerate trusted roots and client >>> certificates in the user certificate store. The whole point of a digital >>> certificate is that it is public. Can you elaborate on those reasons? >>> >>> Regarding security and privacy to me it is more concerning that web >>> crypto only works with private keys stored in the browser store, and >>> doesn’t allow me to use private keys stored in secure devices, like >>> physical tokens. >>> >>> For instance my application needs to be able to sign documents and >>> transactions, (something like web crypto scenario "2.4 document signing") >>> using a private key associated to a certificate issued by my country’s >>> official CA. First my application needs to find in the user store for a >>> certificate issued by my country’s CA, that has a matching private key, >>> then ask the browser to generate a digital signature using that private >>> key, the browser ask the user for permission to use the private key (in my >>> case it has to ask for a PIN cause the private key is stored in a smart >>> card), if the user accepts the browser ask the smart card to generate the >>> digital signature. In my case for security and privacy reasons all the >>> crypto operations are done inside the smart card, the private key never >>> leaves the smart card. >>> >>> Thanks in advance, >>> >>> >>> *Su aliado en la Web...* >>> >>> *Ing Billy Simón Ch.* >>> >>> Gerente de Tecnología >>> Tel. 2234-9900 ext 102 >>> www.hermes-soft.com >>> >>> >>> >>> >>> >>> On Jun 24, 2015, at 3:00 PM, Ryan Sleevi <sleevi@google.com> wrote: >>> >>> >>> >>> On Wed, Jun 24, 2015 at 1:50 PM, Jeffrey Walton <noloader@gmail.com> >>> wrote: >>> >>>> I see the WebCrypto API will allow discovery of keys >>>> (http://www.w3.org/TR/WebCryptoAPI/): >>>> >>>> In addition to operations such as signature generation >>>> and verification, hashing and verification, and encryption >>>> and decryption, the API provides interfaces for key >>>> generation, key derivation, key import and export, and >>>> key discovery. >>>> >>>> Certificates have public keys, and they are not as sensitive as private >>>> keys. >>>> >>>> Will the WebCrypto API allow discovery/enumeration of certificates? >>>> >>>> Examples of what I would like to discover or enumerate (in addition to >>>> the private keys): >>>> >>>> * Trusted roots >>>> * Client certs >>>> >>>> Trusted Roots are in the platform's trust store. Client certs may be >>>> in the trust store. >>>> >>>> Thanks in advance, >>>> Jeff >>>> >>>> >>> There are no plans from Chrome to implement such, on the hopefully >>> obvious and significant privacy grounds. >>> >>> Client certs contain PII. >>> Trusted certs contain PII and fingerprinting. >>> >>> In modern, sandboxed operating systems, such as iOS and Android, >>> applications cannot enumerate either, as those platform providers reached >>> the same conclusion. >>> >>> So no. Never.[1] >>> >>> [1] For some really long value of never >>> >>> >>> >> >> > >
Received on Thursday, 25 June 2015 19:43:30 UTC