Re: Using CONCAT and ECDH

You could, according to the spec, but AFAIK, there's no current support for
Concat in implementations.  Thus my suggestion to polyfill for now.

--Richard

On Wed, Oct 8, 2014 at 11:13 AM, Mark Watson <watsonm@netflix.com> 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)
>
> ?
>
> ...Mark
>
> On Wed, Oct 8, 2014 at 7:45 AM, Richard Barnes <rlb@ipv.sx> wrote:
>
>> On Wed, Oct 8, 2014 at 10:36 AM, Ryan Sleevi <sleevi@google.com> wrote:
>>
>>>
>>> On Oct 8, 2014 10:22 AM, "Anders Rundgren" <
>>> 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 Thursday, 9 October 2014 21:17:08 UTC