- From: Mark Watson <watsonm@netflix.com>
- Date: Wed, 8 Oct 2014 09:51:20 -0700
- To: Anders Rundgren <anders.rundgren.net@gmail.com>
- Cc: Richard Barnes <rlb@ipv.sx>, Ryan Sleevi <sleevi@google.com>, "public-webcrypto-comments@w3.org" <public-webcrypto-comments@w3.org>
- Message-ID: <CAEnTvdDE0Gi2Vzw4u2qMwS6MBOZFGo+KW4TFnKC6szep5LhzqQ@mail.gmail.com>
On Wed, Oct 8, 2014 at 9:01 AM, Anders Rundgren < anders.rundgren.net@gmail.com> wrote: > On 2014-10-08 17:13, Mark Watson wrote: > >> Surely you should change this: >> >> crypto.subtle.deriveKey(__derive_alg, key_pair.privateKey, {name: >> 'AES-CBC', length: 256}, false, ['encrypt']).then (function(aes_key) >> >> to this: >> >> crypto.subtle.deriveKey(__derive_alg, key_pair.privateKey, {name: >> 'CONCAT'}, false, ['deriveKey']).then (function(concat_key) >> >> var concat_params = { name: 'CONCAT', hash: 'SHA-1', algorithmId: ..., >> partyUInfo: ..., partyVInfo: ... }; >> crypto.subtle.deriveKey(concat_params, concat_key, {name: 'AES-CBC', >> length: 256}, false, ['encrypt']).then (function(aes_key) >> >> ? >> > > Whow! This looks great albeit a bit puzzling for a java-guy :-) > > The first deriveKey only runs the ECDH primitive (generating Z) but marks > the result as a CONCAT key? > Yes. deriveKey is equal to ( deriveBits + import ), so the ECDH deriveKey above derives some bits using ECDH and imports those as a CONCAT key. This is equivalent to doing the deriveBits and import separately yourself, except that the key material is not exposed to Javascript. ...Mark > > Future user's of WebCrypto will surely look for answers at stacktrace.com > because the specification is not very easy to interpret for programmers. > A user's guide would be an excellent addition to this work. There is one > for XML Schema and it was my life-saver! > > thanx, > Anders > > > >> ...Mark >> >> On Wed, Oct 8, 2014 at 7:45 AM, Richard Barnes <rlb@ipv.sx <mailto: >> rlb@ipv.sx>> wrote: >> >> On Wed, Oct 8, 2014 at 10:36 AM, Ryan Sleevi <sleevi@google.com >> <mailto:sleevi@google.com>> wrote: >> >> >> On Oct 8, 2014 10:22 AM, "Anders Rundgren" < >> anders.rundgren.net@gmail.com <mailto:anders.rundgren.net@gmail.com>> >> wrote: >> > >> > Dear List; >> > I'm not particularly up-to-speed on the WebCrypto API but I at >> least got this working fairly quickly: >> > >> > // Generate ephemeral ECDH key-pair >> > var gen_alg = {name: 'ECDH', namedCurve: >> selected_card.bank_encryption_key.crv}; >> > crypto.subtle.generateKey(gen_alg, false, ['deriveKey']).then >> (function(key_pair) { >> > >> > // Import static ECDH key >> > crypto.subtle.importKey('jwk', selected_card.bank_encryption_key, >> {name: 'ECDH'}, false, ['deriveKey']).then (function(public_key) { >> > >> > // Derive key using ECDH >> > var derive_alg = {name: 'ECDH', public: public_key}; >> > crypto.subtle.deriveKey(derive_alg, key_pair.privateKey, >> {name: 'AES-CBC', length: 256}, false, ['encrypt']).then (function(aes_key) >> { >> > >> > // Encrypt using derived key >> > var encryption_algorithm = { name: 'AES-CBC', iv: >> window.crypto.getRandomValues(new Uint8Array(16))}; >> > crypto.subtle.encrypt(encryption_algorithm, aes_key, >> signed_auth_data).then (function(encrypted_auth_data) { >> > >> > Naturally I wanted to use a KDF as well but then it got a bit >> less obvious how to do. >> > There is no support for deriveKey and CONCAT? >> > >> > So the proper solution is to deriveBits() and then import() >> the raw secret for usage with symmetric encryption algorithms? >> > >> > Pardon me if I'm totally off, WebCrypto is quite different to >> JCA/JCE which is my primary tool... >> > >> > Cheers >> > Anders >> > >> > >> >> "Derive bits" is the description of the internal algorithm used >> to support both the deriveKey and deriveBits API surface. >> >> So you can use deriveKey >> >> However, Anders is correct that there's no support for Concat right >> now (AFAIK). You should be able to polyfill with digest, though, if you >> really need it. You'll just have to export the secret from ECDH (or just >> use deriveBits). >> >> --Richard >> >> >> >
Received on Wednesday, 8 October 2014 16:51:51 UTC