-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support for multiple signatures #23
Comments
We're not aware of a use case where a derived VC that carries additional proofs is necessary. Currently, the supported use cases involve having multiple proofs on a single VC that is stored in a digital wallet. This proof set is free to include N-many "traditional digital signature proofs" and M-many "base proofs" for selective disclosure / unlinkable-style VCs. Then, at presentation time, a verifier indicates which cryptosuites they accept and the digital wallet (potentially with input from the user) selects one of the accepted cryptosuites and provides the VC using a proof that matches it. This will involve performing proof derivation at the time (if the mutually acceptable cryptosuite supports selective-disclosure). There's no reason to presume that a selectively disclosed reveal document (VC with a derived proof using a particular cryptosuite) would continue to be compatible with any other proofs based on other cryptosuites. This isn't part of the design requirements for such cryptosuites -- and I imagine it would be quite challenging to make it so. For example, certainly a traditional digital signature proof would fail when any information in a VC is omitted during selective disclosure. Similar problems may occur with how selective disclosure is performed between different SD-style cryptosuites, depending on what they do. Current designs for any SD-style cryptosuite thankfully do not need to consider every other possible cryptosuite's approaches (including unknown prospective ones). In short, there's no expectation that a derived proof would work in a proof set, nor is there any use case that I'm aware of where it would be needed. The derivation occurs once negotiation has already been performed to select a mutually acceptable cryptosuite to provide the security for a presented VC. Does this make sense -- and do you have some other use cases in mind? If you are thinking of presentation of VCs "for the purpose of transfer" (i.e., simply moving VCs from one digital wallet to another), a digital wallet can get the consent of a user that the current request is for this purpose and include the VC(s) as they are (with their base proofs intact, performing no derivation). The recipient would also be aware of this. This is a special case of presentment, but it involves no derivation. |
Hey,
So I was looking at how to support multiple signatures.
If the document is already signed, then the ecdsa-sd-2023 signature gets added to the document in an array of proof as expected.
However I see 2 issues:
I tried adding
proof
as a mandatory field and sign, but it gets dropped (https://github.com/digitalbazaar/jsonld-signatures/blob/main/lib/ProofSet.js#L57), at the moment of truth theproof
property is not part of the signable document, hence it throws an error:I tried commenting out the
delete
instruction and was able to sign with I suppose theproof
property as part of the ecdsa-sd signature value:At this point I tried to derive but again the same issue occurs (https://github.com/digitalbazaar/jsonld-signatures/blob/main/lib/ProofSet.js#L117). Commenting this out leads to another issue (
"labelMap" must be a Map of strings to strings.
) which I didn't debug further.Because anyway even if derivation worked, and the initial proof remained in the derived document, since it is now a subset of the initial document, the first signature wouldn't pass as the document has been "tempered with" in its computation.
So it looks an unsolvable problem. Was there any sort of talks on the subject, any context you could fill me with to get a broader understanding of what could be done alternatively?
The text was updated successfully, but these errors were encountered: