On 2024-08-26 20:07, Orie Steele wrote:


On Sat, Aug 24, 2024 at 10:28 AM Anders Rundgren <[email protected] 
<mailto:[email protected]>> wrote:

    Hi Orie,

    On 2024-08-24 14:47, Orie Steele wrote:
     > What are your requirements?
    They are approximately the same as 
https://www.w3.org/TR/vc-data-model-2.0/#example-usage-of-issuer-expanded-property 
<https://www.w3.org/TR/vc-data-model-2.0/#example-usage-of-issuer-expanded-property>
 using EdDSA.

    That is, they and I want the proof (signature) to be a part of the 
credential (data).

    What they must likely will end-up is rather the opposite, here using JWT:
    
eyJraWQiOiJFeEhrQk1XOWZtYmt2VjI2Nm1ScHVQMnNVWV9OX0VXSU4xbGFwVXpPOHJvIiwiYWxnIjoiR
    
VMyNTYifQ.eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvdjIiLCJ
    
odHRwczovL3d3dy53My5vcmcvbnMvY3JlZGVudGlhbHMvZXhhbXBsZXMvdjIiXSwiaWQiOiJodHRwOi8v
    
dW5pdmVyc2l0eS5leGFtcGxlL2NyZWRlbnRpYWxzLzM3MzIiLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZ
    
W50aWFsIiwiRXhhbXBsZURlZ3JlZUNyZWRlbnRpYWwiXSwiaXNzdWVyIjp7ImlkIjoiZGlkOmV4YW1wbG
    
U6NzZlMTJlYzcxMmViYzZmMWMyMjFlYmZlYjFmIiwibmFtZSI6IkV4YW1wbGUgVW5pdmVyc2l0eSJ9LCJ
    
2YWxpZEZyb20iOiIyMDEwLTAxLTAxVDE5OjIzOjI0WiIsImNyZWRlbnRpYWxTdWJqZWN0Ijp7ImlkIjoi
    
ZGlkOmV4YW1wbGU6ZWJmZWIxZjcxMmViYzZmMWMyNzZlMTJlYzIxIiwiZGVncmVlIjp7InR5cGUiOiJFe
    
GFtcGxlQmFjaGVsb3JEZWdyZWUiLCJuYW1lIjoiQmFjaGVsb3Igb2YgU2NpZW5jZSBhbmQgQXJ0cyJ9fX
    
0.v85SIqmg4AFCB8iJRl3yIg7lOf3xjaNlHVWVDtVf7BORIj-QUY20VBDDoHFJTHp9xT4XqhdfocC5xW3UD3wsiA

    :(


Thats a JWT as a JWS with an encoded payload,

Right, that's the only solution that would pass through the IETF since they 
didn't accept RFC 8785.


as opposed to a detached unencoded payload JWT, per:

https://datatracker.ietf.org/doc/html/rfc7797 
<https://datatracker.ietf.org/doc/html/rfc7797>

RFC 8785 didn't really make it in JOSE.  CBOR/CDE meets all reasonable requirements including a 
much improved blob and big integer handling.  The "JSON" object in JavaScript is crippled 
beyond belief.  A corresponding "CBOR" object would not build on 20 year old JavaScript:
https://github.com/cyberphone/CBOR.js#cborjs



     > Are you trying to implement an embedded  detached signature?

    The proper term is rather enveloped signature.  It was featured in XML 
DSig.  CSF is code-wise between 1 and 2 magnitudes simpler.


Do you have an IETF citation for this?

The "inspiration" rather comes from: 
https://www.w3.org/TR/xmldsig-core/#def-SignatureEnveloped


Seems like a misuse of "enveloped" in the context of 
https://datatracker.ietf.org/doc/html/rfc9052#name-enveloped-cose-structure 
<https://datatracker.ietf.org/doc/html/rfc9052#name-enveloped-cose-structure>

Unlike the CBOR Signature Format (CSF), COSE does not sign CBOR, it signs 
anything binary.  Specialization versus universality.


     > Is that why you require the map to be modified and then CDE applied?

    In this scheme, CDE is/must be an integral part of the CBOR toolbox.  Given 
that a full-blown CBOR CDE encoder can be built using less than 300 lines of 
(well-commented) JavaScript code [1], CDE is not a showstopper; not buying into 
COSE is the only problem.  OTOH, the blockchain commons are pushing for 
standards [2] that do not make use of COSE either, and probably for the same 
reasons as I; a desire keeping the data and its container intact.


If I put an RFC 7797 signature in a RFC 8785 JSON object under the key 
"detached_sigantures".
I can easily create the same concept of "signatures in envelopes for json"... 
no CDE required.

Although I'm the primary author of RFC 8785, I have given up on that and JSON as well.  
CBDR/CDE + CSF/CEF seem like an unbeatable "combo" for payment wallets.


The ingredients of the scheme are:

- canonicalization / normalization / CDE (so you get a consistent hash of the 
resource)
- detached signatures (so you can embed signatures of the canonical resource, 
and remove them in a deterministic way)

Yes, that is what CSF does, although I tend to call it enveloped.

For the CBOR Encryption Format (CEF), this scheme is also for used for creating 
Additional Authentication Data (AAD):
https://cyberphone.github.io/javaapi/org/webpki/cbor/doc-files/encryption.html




     >
     > Why not just say:
     >
     > Detach the signatures, apply cde to the original map, sign the hash of 
the cde with cose sign1... Attach the signature.
     >
     > In this approach you also get a content identifier for the CBOR map, 
which you can use to build unique URIs.

    I'm not able to fully decipher what you are suggesting here, an example 
would be nice.


If you are already required to enforce deterministic ordering of the 
"container" as you call it, then each container under that canonical form has a 
unique sha-256 hash.

So you can sign that hash, with any signing algorithm... JOSE / COSE / PGP...

Indeed.


I'm not recommending any of this...

I don't ask anybody to recommend this but it would be cool with a peer review 
or two:
https://test.webpki.org/csf-lab/create


I'm pointing out that its application specific processing, which is at a 
different layer than COSE protocol stuff.

CSF is indeed quite different to COSE.

Anders




    Anders

    1] https://github.com/cyberphone/simple-cbor-encoder.js/blob/main/cde.js 
<https://github.com/cyberphone/simple-cbor-encoder.js/blob/main/cde.js>

    2] https://datatracker.ietf.org/doc/html/draft-mcnally-envelope-07 
<https://datatracker.ietf.org/doc/html/draft-mcnally-envelope-07>

     >
     >
     > On Sat, Aug 24, 2024, 2:19 AM Anders Rundgren <[email protected] 
<mailto:[email protected]> <mailto:[email protected] 
<mailto:[email protected]>>> wrote:
     >
     >     Assume you have a message like this, where a tag holding a URL acts 
as an object type Id:
     >
     >     1010(["https://example.com/status <https://example.com/status> 
<https://example.com/status <https://example.com/status>>", {
     >         / temperature /
     >         1: 2.56,
     >         / weight /
     >         2: 505,
     >         / timestamp /
     >         3: "2024-08-22T15:32:20Z"
     >     }])
     >
     >     Using the CBOR Signature Format (CSF) you would get this:
     >
     >     1010(["https://example.com/status <https://example.com/status> 
<https://example.com/status <https://example.com/status>>", {
     >         1: 2.56,
     >         2: 505,
     >         3: "2024-08-22T15:32:20Z",
     >         / Signature container /
     >         -1: {
     >           / Signature algorithm (COSE Ed25519) /
     >           1: -50,
     >           / Ed25519 public key in COSE format /
     >           4: {
     >             1: 1,
     >             -1: 6,
     >             -2: 
h'fe49acf5b92b6e923594f2e83368f680ac924be93cf533aecaf802e37757f8c9'
     >           },
     >           / Signature value /
     >           6: 
h'1f10bf2efcfddee741a6dea052ef49e6b67dd549d580be36e5a1d50dc3f9afd5fb92a28ce37dfc877111ff35fb2f4c1f21ff0b0b48bdc04276742e6af033330b'
     >         }
     >     }])
     >
     >     Compared to COSE you get the following advantages:
     >     - The entire message is signed including the object type Id
     >     - The message is kept in its original form
     >     - Headers are in clear
     >     - Extremely simple algorithm
     >
     >     WDYT?
     >
     >     Anders
     > https://datatracker.ietf.org/doc/draft-ietf-cbor-cde/ 
<https://datatracker.ietf.org/doc/draft-ietf-cbor-cde/> 
<https://datatracker.ietf.org/doc/draft-ietf-cbor-cde/ 
<https://datatracker.ietf.org/doc/draft-ietf-cbor-cde/>>
     > https://cyberphone.github.io/javaapi/org/webpki/cbor/doc-files/signatures.html 
<https://cyberphone.github.io/javaapi/org/webpki/cbor/doc-files/signatures.html> 
<https://cyberphone.github.io/javaapi/org/webpki/cbor/doc-files/signatures.html 
<https://cyberphone.github.io/javaapi/org/webpki/cbor/doc-files/signatures.html>>
     > https://www.ietf.org/archive/id/draft-rundgren-cotx-04.html 
<https://www.ietf.org/archive/id/draft-rundgren-cotx-04.html> 
<https://www.ietf.org/archive/id/draft-rundgren-cotx-04.html 
<https://www.ietf.org/archive/id/draft-rundgren-cotx-04.html>>
     >
     >     _______________________________________________
     >     COSE mailing list -- [email protected] <mailto:[email protected]> 
<mailto:[email protected] <mailto:[email protected]>>
     >     To unsubscribe send an email to [email protected] <mailto:[email protected]> 
<mailto:[email protected] <mailto:[email protected]>>
     >



--


ORIE STEELE
Chief Technology Officer
www.transmute.industries

<https://transmute.industries>


_______________________________________________
COSE mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to