W3C home > Mailing lists > Public > public-credentials@w3.org > September 2022

Re: A node.js did:jwk implementation

From: Wayne Chang <wayne@spruceid.com>
Date: Tue, 6 Sep 2022 10:42:33 -0700
Message-ID: <CAFTzAXg5eAFs28UbKWsafFCxqtK-czRtaOXkyjbv8JRkutS-UQ@mail.gmail.com>
To: Orie Steele <orie@transmute.industries>
Cc: Leonard Rosenthol <lrosenth@adobe.com>, W3C DID Working Group <public-did-wg@w3.org>, "W3C Credentials CG (Public List)" <public-credentials@w3.org>
Thanks for working on this, really cool how simple it is vs. how much you
get out of the box.

On Tue, Sep 6, 2022 at 10:37 AM Orie Steele <orie@transmute.industries>
wrote:

> This is awesome:
> https://c2pa.org/specifications/specifications/1.0/specs/C2PA_Specification.html#_digital_signatures
>
>
>
> On Tue, Sep 6, 2022 at 12:18 PM Leonard Rosenthol <lrosenth@adobe.com>
> wrote:
>
>> Very nice job!
>>
>>
>>
>> I too would be interested in how this evolves for CBOR/COSE, thought
>> outside the CWK context – for a “stand-alone” COSE signature, such as those
>> used in C2PA (
>> https://c2pa.org/specifications/specifications/1.0/specs/C2PA_Specification.html#_digital_signatures)
>> where we also use a certificate chain.
>>
>>
>>
>> (yes, I know our current signatures are separate from our credentials in
>> C2PA – but having a way to align them would mean that we could then use
>> VC/DID’s as a signing credential and part of our trust model!)
>>
>
> Yes, a major reason to prefer did:jwk or a future did:cwk would be to
> support signing and encryption outside of the "web", "ssi" or "verifiable
> credentials" context...
>
> For more arbitrary use cases, such as protecting CDNs ( https://datatracker.ietf.org/doc/rfc9246/
> ), Software Bills of Material, Digital Bills of Lading, and
> `access_token`s.
>
>
>>
>> Leonard
>>
>>
>>
>> *From: *Orie Steele <orie@transmute.industries>
>> *Date: *Tuesday, September 6, 2022 at 12:33 PM
>> *To: *W3C DID Working Group <public-did-wg@w3.org>, W3C Credentials CG
>> (Public List) <public-credentials@w3.org>
>> *Subject: *A node.js did:jwk implementation
>>
>> *EXTERNAL: Use caution when clicking on links or opening attachments.*
>>
>>
>>
>> Friends,
>>
>> This was my weekend project: https://github.com/OR13/did-jwk
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2FOR13%2Fdid-jwk&data=05%7C01%7Clrosenth%40adobe.com%7C040d2a1f24c64f55f9cc08da90258555%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637980788095479741%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=J9rEUPz7zWn6tnKNbAXzBHu6ZjY6glH19t29Z98RbiA%3D&reserved=0>
>>
>> It's an implementation of https://github.com/quartzjer/did-jwk
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fquartzjer%2Fdid-jwk&data=05%7C01%7Clrosenth%40adobe.com%7C040d2a1f24c64f55f9cc08da90258555%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637980788095479741%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=gigbsmJ9KwJB3H4KT7PpXAugRZgfmVnco0%2BbAHwCcmI%3D&reserved=0>
>>
>> It's only dependencies are:
>>
>> -  https://github.com/yargs/yargs
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fyargs%2Fyargs&data=05%7C01%7Clrosenth%40adobe.com%7C040d2a1f24c64f55f9cc08da90258555%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637980788095479741%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=G4jKBWHp8oO5J%2BH9HHMvX2zDgX%2BY7tfVJMNqhDixXDA%3D&reserved=0>
>> -  https://github.com/panva/jose
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fpanva%2Fjose&data=05%7C01%7Clrosenth%40adobe.com%7C040d2a1f24c64f55f9cc08da90258555%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637980788095792187%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=ymaXwNosMK%2BPtl5DGGqhWxH4Aj64WACjAKzvjtI5%2BhU%3D&reserved=0>
>>
>> It comes with out of the box support for:
>>
>> - many key types (supported by JWK)
>>
>> - many signature types (supported by JWS)
>> - many encryption types (supported by JWE)
>> - built in cli for testing (see readme)
>>
>> Why spend time on "did:jwk" what's wrong with "did:key" ?
>>
>> There are several things about "did:key" that make it a difficult
>> starting point for the community:
>>
>> 1. Multibase is not yet an IETF RFC, there are limited implementations of
>> it
>>
>> There is `secdispatch` thread on this, AFAIK, its WIP.
>>
>> 2. "did:key" doesn't really have a preference for "publicKeyJwk" vs
>> "publicKeyMultibase" or application/did+json vs application/did+ld+json
>>
>> So if you support "both" you automatically support a superset of
>> "did:jwk".
>>
>> This means did:jwk is by definition even simpler than "did:key" !
>>
>> 3. Easier to integrate with JsonWebSignature2020 and VC-JWT
>>
>> Both formats prefer keys in JWK format, and produce signatures in JWS
>> format.
>>
>> See:
>>
>> - https://github.com/w3c/vc-jwt
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fw3c%2Fvc-jwt&data=05%7C01%7Clrosenth%40adobe.com%7C040d2a1f24c64f55f9cc08da90258555%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637980788095792187%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=TrnICeVUy%2BKApUR1WxgkmylE8dpz0Q8QrRTTNvDvXGA%3D&reserved=0>
>> - https://github.com/w3c/vc-jws-2020
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fw3c%2Fvc-jws-2020&data=05%7C01%7Clrosenth%40adobe.com%7C040d2a1f24c64f55f9cc08da90258555%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637980788095792187%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=J515D3iPbPXgzGpj1PF7XbB1g8OH5jOJAb3xLO5Y1uQ%3D&reserved=0>
>>
>> 4. "did:key" does not support certificates
>>
>>
>>
>> Arguably this is a feature of "did:key" in that it makes the keys
>> "simpler"... don't support
>> https://www.rfc-editor.org/rfc/rfc7517#section-4.3
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.rfc-editor.org%2Frfc%2Frfc7517%23section-4.3&data=05%7C01%7Clrosenth%40adobe.com%7C040d2a1f24c64f55f9cc08da90258555%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637980788095792187%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=%2B3EwFZrqp5UcYmtxvNJL%2F3hscGuI3Zmv5kWCQo1RWGY%3D&reserved=0>,
>> etc...
>>
>> But many use cases, including the "mDoc personal credential" use cases
>> and the "cyber physical supply chain" use cases, require some concept of
>> "certificate chains".
>>
>> This is fairly trivial to support in did:jwk, due to JWK supporting
>> x5c... -> https://www.rfc-editor.org/rfc/rfc7517#section-4.7
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.rfc-editor.org%2Frfc%2Frfc7517%23section-4.7&data=05%7C01%7Clrosenth%40adobe.com%7C040d2a1f24c64f55f9cc08da90258555%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637980788095792187%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=FzypUg1pG3evYXgU0sfgQ4SgJYX1HP1b7goRDUq8GjI%3D&reserved=0>
>>
>> 5. A path to compact binary DIDs that is familiar to JSON / JOSE
>> developers.
>>
>> Due to the similarities between JOSE / COSE... A similar method for cwk
>> (COSE_Key?) is possible, we're very interested in this use case,
>> particularly due to:
>>
>> https://github.com/cose-wg/CBOR-certificates
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fcose-wg%2FCBOR-certificates&data=05%7C01%7Clrosenth%40adobe.com%7C040d2a1f24c64f55f9cc08da90258555%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637980788095792187%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=LouYx8q4cdlMWNOqgFFEsQ5IBQBIq0XvYpYm0Zc38Lo%3D&reserved=0>
>>
>> Conclusion:
>>
>> Keep in mind, I built this entire package yesterday... All I needed was a
>> good JOSE library as a starting point.
>>
>> Other language support is expected to be similarly trivial...
>> especially now that you have an "example implementation" and "test-vectors"
>> to base your implementation on.
>>
>> Regards,
>>
>> OS
>>
>>
>>
>> --
>>
>> *ORIE STEELE*
>>
>> Chief Technical Officer
>>
>> www.transmute.industries
>>
>>
>>
>> [image: Image removed by sender.]
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.transmute.industries%2F&data=05%7C01%7Clrosenth%40adobe.com%7C040d2a1f24c64f55f9cc08da90258555%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637980788095792187%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=APQT4Z4PajV0%2F9n3kVCtWS%2F8q2z1zuRj%2FdbEVMhs73Y%3D&reserved=0>
>>
>
>
> --
> *ORIE STEELE*
> Chief Technical Officer
> www.transmute.industries
>
> <https://www.transmute.industries>
>
Received on Tuesday, 6 September 2022 17:43:02 UTC

This archive was generated by hypermail 2.4.0 : Tuesday, 6 September 2022 17:43:03 UTC