Copyright © 2016 the Contributors to the Hardware Based Secure Service CG Specification, published by the Hardware Based Secure Services under the W3C Community Contributor License Agreement (CLA). A human-readable summary is available.
TBD
This specification was published by the Hardware Based Secure Services. It is not a W3C Standard nor is it on the W3C Standards Track. Please note that under the W3C Community Contributor License Agreement (CLA) there is a limited opt-out and other conditions apply. Learn more about W3C Community and Business Groups.
Working copy
At this time Secure Element are not anymore usable by web applications. For years, various form factors have been usable thanks to many API and technologies (PKCS#11, Microsoft API like CSP / Minidriver, Java applet ...). Use cases are still here but not the browser access, especially on the mobile devices. This document is targeting to define the next generation Javascript API for hardware based keys management and usage, including the corresponding underlying components requirements to re-enable a strong security and identity ecosystem.
Single Origin Policy: one main matter of interest of this report is how to protect key usage outside the issuing origin:
Let's consider that a domain foo.com issue a key. Because the keys won't be accessible with a Javascript API from any domain, how the domain bar.com is allowed to use this key ? There is strong need for an access control model because the hypothesis of a trusted environment that every Secure Element relies on is not anymore valid with an API on the browser.
This first version of the report will not address this important issue but will focus on:
Position to FIDO and WebAuth standards: this document is focusing on providing web developers means to issue and use identity keys (whether they are X509 certificates or any other cryptographic model with underlying asymmetric cryptography). FIDO standards is related to device authentication: in the FIDO vision, it is up to the relying party to manage the link between the credential and the identity.
Position to WebCryptoAPI standards: this report includes to WebCryptoAPI so that web developers can rely upon the same API but with a different initialization (like Java Cryptographic Engine with hardware provider).
The user verification method is out of scope of this specification. But it should be clear whether a key is protected by
QUESTION: Need to provide here names of well-known customers to help pushing the standards to browser makers?
To request to a bank
???
To be completed by Brian (Visa Europe)
This API is defined to cover the various hardware based use cases including usage and lifecycle.
This subpart of the API is relying upon pre-existing keys.
Goal: to give some assurance to a remote entity that a transaction is confirmed. Confirm that what was sent was communicated to the user, and what was displayed to the user is what was confirmed (What You See Is What You Confirm)
This first section covers the various usages of keys. These use cases are not highly sensitive in terms
of transaction context confidentiality, which means that standard SOP rules are considered sufficient without any need
for end-to-end encryption (like secure messaging).
To avoid context swapping, it is mandatory that the non-repudiation message contains specific data for the requested
transaction with the requesting party, the purpose of the transaction and the date of the operation.
[NoInterfaceObject]
enum UVMMode { "passive", "presence", "os", "active" };
[Exposed=(Window)]
interface HBSS {
Promise confirm(DOMString origin, DOMString NRMessage, UVMMode mode, ArrayBuffer[] issuingAuthorities);
Promise deviceAuthentication(DOMString origin, BufferSource challenge, ArrayBuffer[] issuingAuthorities);
Promise sign(DOMString origin, DOMString NRMessage, BufferSource data, UVMMode mode, ArrayBuffer[] issuingAuthorities);
}
This operation is defined to request from the browser and underlying security capabilities to ensure that the context has been presented to the end-user and provide non-repudiation
This operation should be used when the relying party is trying to use a hardware key to authenticate the device without any user consent
This operation is defined to allow binary data signature.
Assumption: for many different reasons, complex data are not the right format to get the end-user consent and confirm her/his acknowledgment:
SECURITY NOTE: it could occur that the binary data are altered before signature by a malware or javascript or even the browser. So the altered binary data would be successfully signed on the user agent side. But in this case this is the relying party responsibility to check that the data and the context received are signed with the same key and at the same time. It MUST reject any attempt to submit binary signed data if they are not provided with a valid signed context.
Within this operation, the mode for the user verification method MUST NOT be "presence".
... Relation to Web Crypto API: same API but with a different initialization engine...
These samples are provided to split the responsibilities of each vendor / software providers.
It is typically the environment where secure elements - either smartcards with readers or usb tokens - are used with middleware through PKCS#11 or Microsoft Minidriver. In this architecture, the trusted UI is:
In mobile environments, Secure Elements are either:
In this situation, the trusted user interface should be part of the Operating System, interacting with the Secure Credential Storage
In this situation, the browser is a trusted app and the trusted UI is relying upon the existing TEE functions (See [GP_TEE])
Implementation into a mobile phone will require: