- From: Mitch Zollinger <mzollinger@netflix.com>
- Date: Fri, 27 Jan 2012 15:51:32 -0800
- To: "Richard L. Barnes" <rbarnes@bbn.com>
- CC: <public-identity@w3.org>
On 1/26/2012 2:51 PM, Richard L. Barnes wrote: > Hey Mitch, > > Thanks for writing this up. It should be very helpful, especially in clarifying key management requirements. In general, it seems like a good design goal would be to allow key material to live entirely within the crypto module (inaccessible to Javascript) for the great majority of applications. > > The one thing in your document that seemed odd to me was the part about key wrapping: > " > var Ks = webcrypto.getRandom(16); > var wrappedKs = webcrypto.encrypt(Ks, “Kab”, “aes-128-cbc”); > " > > It seems like you could just as well have the crypto module generate an internal key and export the wrapped version, something like: > " > var Ks = webcrypto.generateSymmetricKey(16); > var wrappedKs = webcrypto.exportWrappedKey(Ks, “Kab”, “aes-128-cbc”); > " Good catch. Yes, I agree with you completely. In keeping with my simplification that there are no key handles, I'd like to propose a small tweak to your code above: webcrypto.generateSymmetricKey(/*key size in bytes*/16, /*key name*/"Ks"); var wrappedKs = webcrypto.exportWrappedKey("Ks", “Kab”, “aes-128-cbc”); I made a note in the doc that KeyHandle is probably a more flexible mechanism, but the above is more consistent with the rest of the doc. (I've updated the doc with your suggestion.) > ... where in this case, Ks stores a handle to the internal key, just like "Kab". > > Likewise, key derivation (transformSS) will require some ability to transform values within the key store. It seems like the basic choice here is how to constrain the space of transforms: > 1. Single, fixed transform > 2. Finite list of fixed transforms > 3. Pass in a function to be applied > Your transformSS example seems to assume (1) (based on RFC2631), but it might also be useful to be able to add in other information (nonces) or apply things like pseudo-random functions. Agreed. My example was for illustrative purposes & the obvious use case we have for D-H. > > (As a benchmark, I'm trying to imagine whether you could use this API to do standard RSA-based TLS key establishment, in which case you need to do the following computation within the crypto boundary: > 1. Unwrap a pre_master_secret > 2. Compute master_secret = PRF(pre_master_secret, "master secret", nonces) > So you would need unwrapping and the application of the PRF to happen within the boundary.) Out of curiosity, why would you want to do a TLS key establishment in Javascript? > > Hope this helps, Very helpful, indeed. Thanks for the input. Mitch > --Richard > > > > > On Jan 6, 2012, at 7:00 PM, Mitch Zollinger wrote: > >> Hi all, >> >> Happy New Year! >> >> I posted this before the holidays: >> http://www.w3.org/wiki/NetflixWebCryptoUseCase >> >> Input appreciated. >> >> Mitch >> >> >
Received on Friday, 27 January 2012 23:52:01 UTC