-
Notifications
You must be signed in to change notification settings - Fork 18
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
proofChain property violates VC data model requirement #26
Comments
Bumped into the same issue. Is there any way to help move this forward? Being able to support multiple ordered signatures on a credential unlocks a number of interesting use cases. If my understanding is correct, "Proof Sets" are already supported (since multiple proofs are allowed). Unfortunately that does not suffice for some use cases. |
@Exulansis - great question.
So, basically, I'm reading it as "help wanted". I think the next steps would be something like:
|
Thank you @dmitrizagidulin and @dlongley for your answers and offered help! Sorry for the slow replies, juggling a few things at the moment. But still quite interested in sketching out some preliminary designs here. To reiterate, some of the initial ideas / requirements are: The proof A chained proof includes information / references other proofs on the document
Further assumptions:
I hope to spend a bit more time on this issue in the coming days, and will hopefully be able to post some (most likely naive) further potential ideas. |
Hey everyone! I tried to define (perhaps to some extent naively), an initial design for the new The document can be found here. It would be great to receive some feedback, perhaps from @dmitrizagidulin, @dlongley, specifically on whether this is moving into the right direction, but also on any identified design issues / unclarities / alternatives, etc. Of course nothing is set in stone yet, and both the design (as well as naming for the various properties / suite itself) can be updated based on feedback. If there is a better place / way to present and discus this idea, as well as gather feedback, please let me know and I'll take the necessary steps. Thank you in advance! |
Thanks @Exulansis for your work. I'm facing the business requirement of having chained proof and I think this is quite a good start. I tend to agree with you that we need a better identifying mechanism of the previous proof (and I suppose adding an |
Hi @msporny, following yesterday's presentation during the CCG call, I am confused with the status of this work item. More specifically, I am facing a use case where using the But in yesterday's presentation, the sequential signing slide was referencing Could you please clarify what is the official stance so I can align accordingly? For now I have settled on a hybrid solution where I am using Thanks a lot |
@lemoustachiste wrote:
That is dangerous because the
The That specification is slated to be standardized in the VC Working Group 2.0 (under the verifiable data integrity work): https://w3c.github.io/vc-wg-charter/#deliverables I expect that many implementations don't support Hope that helps, @lemoustachiste. :) |
Thank you for the overview @msporny. We have been encountering an increasing number of such, more advanced, use cases. Because there's no clear way to accomplish the feature given the current specs, In many cases we end up simplifying / re-framing the use case to avoid relying on this functionality. I think as soon as soon as this feature / functionality is better documented, we will see many use cases building on top of it. The path forward you described (i.e. relying on the In my current understanding, the approach we proposed in this issue (described in this previously linked doc) is complementary and to some extent orthogonal to the path forward you described. I.e. we could still continue maturing and iterating on the new proposed Data Integrity Proof Type (i.e. Hope my assumptions / understanding is correct, but in case it isn't (or I am missing something), any feedback / corrections would be appreciated! |
One of the things the new Data Integrity (renamed from Linked Data Proofs/Signatures) work does is ensure that people can continue to experiment and refine in parallel instead of being gated by an "official" W3C/IETF Working Group. It does lead to a messier/more chaotic landscape during the pre-standardization phase, but some of us view that as better than some very small handful of people from large tech companies dictating what the world should do. So yes, innovate away, we can converge later if it makes sense. The more experiments we run before standardization, the better. |
Hi @Exulansis, so I've been spending a bit more time on the question and I think your proposal for the time being would be the most in line with what we are trying to achieve. I am wondering what is the state of work there, if you have some code available, if you are open to collaboration on the subject, etc? Thanks |
Just chiming in here and figuring how I can help? There have been a repo doing exactly this: https://github.com/mattrglobal/jsonld-signatures-bbs/blob/master/sample/ts-node/src/demo_multi.ts, but its not working with later versions. And probably not following any standards Also a slack message on DIF on tihs: https://difdn.slack.com/archives/C4X50SNUX/p1651490478563459 I was wondering, can one just order the proofs and have that signature flow as stated in the workaround, just consequently signing things? Its not optimal. I was suggested just to add another issuer to get things to work now, but that is really not compliant with the w3c spec. |
Im following up with a nice repro that we can work with to find a balance of what how to do multi issuance https://github.com/vongohren/verify-issues This can now issue multi signature VCs, in the most simple format, and it verifies with low level library, because it does not check the context of the VC. But what are the issues or problems of getting this to work with the higher levels? Is it to make sure the chain is defined as mentioned in this topic? Any meetings or anything this issue is being discussed? |
I have done a simple implementation of ChainedProof2021 in python here: https://github.com/blockchain-certificates/cert-issuer/pull/232/files#diff-d123b32a844527612bcfe9e7dcf295bed57cbdf610c0a9f8da253ea10d3546f3 (still in PR) And some tests describing the behavior here: https://github.com/blockchain-certificates/cert-issuer/pull/232/files#diff-8690e98af00dae98fbb87b457f1ab9edaea0c42524527f738c376955932b3f81 This is all executed with the MerkleProof2019 signature suite because that's the only signature suite supported by our issuer, but I've made it so that it is agnostic to the type. I have also made a context for ChainedProof2021 which I use locally at this moment. It's basically a copy of the Ed25519 context (https://w3id.org/security/suites/ed25519-2020/v1), where I have added I find the repetition of data a bit annoying, here is for instance and RDF normalization:
Since we are referencing the whole proof as I am going to look at the verification side of things now |
I have defined a context for After discussion with @msporny I will open a PR in the w3id security perma-id repo to define this URL: https://w3id.org/security/suites/chained-2021/v1. Please advise if you prefer another URL. @dmitrizagidulin as you proposed in another comment, do you mind taking a look at the context definition? https://github.com/blockchain-certificates/cert-schema/pull/43/files#diff-6e646b5b2499d851c911f125d859e55a971e430937613ce4773294e155dbdb00. I am improving on my jsonld skills but they are still trial and error. Thanks |
Question, Why do we need to have a |
Just a question, proofChains usescases, when there are multiple entities/people who want to leave a proof(signature) on a piece of data? Searching for use cases inside this issue, I cannot really find a clear example. It would help me understand the value and context of this issue. |
Correct, we don't need a |
Notarization is a prevalent use case in many market verticals: https://en.wikipedia.org/wiki/Notary |
I have just implemented the proposal as it was, but I never really liked the verbosity that |
Another option to support "proof chains" could be to add whatever properties we need to the vocabulary to allow a proof to reference other proofs and/or the |
This has been done now. We have removed the https://www.w3.org/TR/vc-data-integrity/#proof-chains The way Given that this issue was raised to resolve the fact that |
@msporny just to clarify something, are my assumptions correct:
|
@lemoustachiste wrote:
Yes, correct.
Yes, correct. You got it. :) |
@msporny is this a valid VC use case, and if so what is the best approach to it: 2 spouses sign an official document (proof set) and a notary signs over them to certify the validity of the signed document (proof chain). In that case how do we represent the previous proof? Does the spec allow for a sort of mix and match of the 2 types? |
@lemoustachiste wrote:
Yes, here's how it would work:
One alternative here is that we allow Interested in feedback from folks on whether we should allow |
Thanks Manu, it makes sense. In my opinion I think it might be easier to specify an array of previous proofs that were signed, rather than multiplying signatures on a 1 to 1 basis. The reason for that is I think it would be easier to parse the proof object and isolate the proofs that were signed by the proof chain, remove the non relevant one(s) and verify the document once, rather than getting the proofs, noticing one is a proof chain, removing non relevant proofs and verifying the document n times as necessary (ie: a succession with 8 inheritors). Also should there be a limit to the proof set/proof chain depth. Let's get a bit more cocky with the initial example, 2 couples have to sign one document, each with their notary vouching for their signatures, but an extra judicial entity signs the document as valid encompassing all signatures (or just the notary ones). I suppose it's an extreme edge case but I'm wondering if the spec should mention something about it (it might be better suited to use a verifiable presentation, but technically, what does prevent such an approach?). Last but not least, I couldn't find the vocabulary for |
This concern is being tracked in issue #87
Ok, I agree, we'll make the change in the spec.
Yes, it's a relatively new change and we were waiting for community feedback before we set it in stone. It sounds like there's support to go this direction, so we'll add it to the Given that this issue is closed, I've opened a new issue to track that concern and make sure the change is made in issue #120 |
The VC data model states:
When embedding a proof, the proof property MUST be used.
But the LD-proofs spec introduces new keyword proofChain:
A proof chain, where order needs to be preserved, is represented by associating an ordered list of proofs with the proofChain key in a document.
I wonder if it is possible to align the LD-proofs spec with VC data model.
The first possible solution that comes to mind is to introduce new
ProofChain
type and aproofChain
property which could be used like this:Is there any better way to make proof chain conformant with VC data model?
The text was updated successfully, but these errors were encountered: