Hi Simon,

That would look something like the following:

== Phase 1: Key Generation (Client-Side) ==

crypto.pk.generateKeypair("rsa-1024-aes-128", function(keyID, pubKey) {
  ... send pubKey to the server ...
  ... store keyID somewhere??? ...
});

== Phase 2: Encryption (Server-Side) ==

The server encrypts file F under public key pubKey.
The server sends the encrypted file EF to the client and stores it
locally using the File API.

== Phase 3: Decryption (Client-Side) ==

... retrieve keyID from somewhere??? ...

crypto.pk.decrypt(EF, keyID, function(plainText) {
  ... rejoice ...
});

To fill in the ??? we need to store the keyID somewhere.  (To be
clear, the keyID is just a capability to use the private key, which
never leaves the user agent's secure key store.)  To complete your
example, we'd need to provide a facility to protect the keyID with the
user's password.

Adam


On Tue, Jul 26, 2011 at 3:55 PM, Simon Heckmann <[email protected]> wrote:
> Okay, I am a little confused now: What about the following use case:
>
> On the server: Encrypt a file using AES-256 with a MD5 hash of the user's 
> password.
>
> On the client: Download the file and save it on the hard drive using the File 
> API. Some time later when offline the user can then enter their password. 
> DOMCrypt calculates the MD5 hash of the password and decrypts the locally 
> stored file so it can be viewed by the user.
>
> As far as I understand your specification this scenario should be supported, 
> right? How would this look like in source code? Could you give an example of 
> the JavaScript DOMCrypt calls required for this?
>
> Additionally, are there plans or a roapmap to bring the DOMCrypt 
> specification to a W3C technical report?
>
> Thank you very much!
>
> Kind regards,
> Simon Heckmann
>
>
> Am 27.07.2011 um 00:41 schrieb Silvia Pfeiffer <[email protected]>:
>
>> OK, so it would apply to a private video conference, but not to
>> protect a server-client-delivery. That's good to know, thanks.
>> Silvia.
>> On Wed, Jul 27, 2011 at 8:26 AM, David Dahl <[email protected]> wrote:
>>> Silvia:
>>>
>>> The design - at this time - allows the client to encrypt data locally, with 
>>> the publicKey of the recipient - not allowing anyone else to read the data. 
>>> The callback that the web page provides which captures the decrypted data 
>>> has full access to the decoded data.
>>>
>>> I imagine the DRM scenario would be possible if the API was implemented 
>>> server side, but I think it would be a rather weak system.
>>>
>>> Generally, this API is designed for private messaging between 2 users, with 
>>> an untrusted server (as well as all of the hashing, HMAC, sign and verify 
>>> methods).
>>>
>>> The use-cases are listed here: 
>>> https://wiki.mozilla.org/Privacy/Features/DOMCryptAPI/UseCases
>>>
>>> Cheers,
>>>
>>> David
>>>
>>> ----- Original Message -----
>>> From: "Silvia Pfeiffer" <[email protected]>
>>> To: "David Dahl" <[email protected]>
>>> Cc: "WHATWG Proposals" <[email protected]>
>>> Sent: Tuesday, July 26, 2011 4:58:30 PM
>>> Subject: Re: [whatwg] DOMCrypt update: July 14 Meeting Report
>>>
>>> If I understand this correctly, then this is introducing a mechanism
>>> for Web publishers to provide a secure service to users where the data
>>> exchanged between the server and the UA is encrypted and not decodable
>>> by anyone else listening in on that communication or getting access to
>>> the data stored in the browser for that communication.
>>>
>>> If so, could this be a means to provide a one-session-only decoding
>>> key to a UA to decode a specially encoded piece of content (e.g. a
>>> video) from a publisher? I am quite directly thinking that this could
>>> be a first step towards providing DRM methodology in the browser, but
>>> also for example for about having secure private video conversations
>>> without needing to install browser plugins.
>>>
>>> Apologies for taking this thread a bit off topic - I am just curious.
>>>
>>> Cheers,
>>> Silvia.
>>>
>>>
>>> On Wed, Jul 27, 2011 at 5:59 AM, David Dahl <[email protected]> wrote:
>>>> Hello All:
>>>>
>>>> Just a quick report on a DOMCrypt meeting that took place Thursday, 
>>>> 2011-07-14 at Mozilla in Mountain View.
>>>>
>>>> Summary:
>>>>
>>>>    DOMCrypt is a high-level API that should be usable by web developers 
>>>> after a short period of study
>>>>    DOMCrypt will be designed and implemented so that it is difficult to 
>>>> "do the wrong thing"
>>>>    HASH and HMAC methods may be implemented first
>>>>    The Public Key API is the most useful, so it should be implemented 
>>>> before the symmetric encryption API
>>>>        Keypairs must be generated on a per-origin basis
>>>>        The Keypair for a specific origin cannot be used in another origin
>>>>    No private or wrapped key material will be accessible to content scripts
>>>>    Each implementation will provide a mechanism to clear keys
>>>>    A "Key ID" will be used to tell the decrypt method which (content 
>>>> inaccessible) private key to use to decrypt data
>>>>    The returned encrypted object format will be a raw ArrayBuffer
>>>>    The public key format will be a raw ArrayBuffer
>>>>        **We agreed to "have all the inputs and outputs be raw, unformatted 
>>>> ArrayBuffers, letting higher-level pure JS wrappers deal with conversion 
>>>> to application data formats until we understand better what higher-level 
>>>> formats would be useful"
>>>>    HASH and HMAC methods should be synchronous to make them simpler
>>>>        HASH and HMAC methods should be constructors
>>>>    We may implement the HASH and HMAC APIs first then the PublicKey API
>>>>
>>>> A wiki page with more detail is here: 
>>>> https://wiki.mozilla.org/Privacy/Features/DOMCryptAPISpec/Meeting-2011-07-14
>>>>
>>>> The DOMCrypt Spec is here: 
>>>> https://wiki.mozilla.org/Privacy/Features/DOMCryptAPISpec/Latest
>>>>
>>>> Any comments and discussion will be most welcome.
>>>>
>>>> Regards,
>>>>
>>>> David Dahl
>>>>
>>>
>

Reply via email to