Thank you for your reply, but to me this seems overly complicated. Why do I 
need a KeyId?

What about the following proposal:

Phase one: The server knows the user's password and encrypts the file.
Phase two: The encrypted file is stored on the local hard drive using the File 
API.
Pase three: User enters the password, which is hashed and used for decryption:

var password = document.getElementById('passwordfield').value;
var hash = window.crypto.hash('md5', password);
var data = window.crypto.decrypt('aes-256', hash, encfiledata);

This code is just a sample, but it looks way more convenient to me. 
Additionally there is no need to store the keyid somewhere?!?

Kind regards,
Simon Heckmann


Am 27.07.2011 um 04:14 schrieb Adam Barth <[email protected]>:

> 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