-
Notifications
You must be signed in to change notification settings - Fork 110
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
Proposal: Anchored Resources and Hashlinks for VCs #831
Comments
Why reinvent the wheel? IPLD already solves this type of problem very well. |
@dmitrizagidulin Thanks for putting up this proposal. I agree that there are indeed some key use cases for needing to supply a hash to related resources to be able to securely "bind them together". For example, this would be useful to us in C2PA (https://c2pa.org) in ensuring that VC's couldn't be moved between manifests to forge ownership. The one question that I would pose here is whether a hashlink is a right solution. As such as I like them - including having my name on the spec - I believe that they are overkill in this instance. They are really to be used when you need to combine the URL and the hash into a single value in instances where you don't have rich structured data. But in this case, the |
In some cases like to see a proof over a hash. Can you make it clear to separate that use case out from this one? One use case for me is a VC where I have verified that you are the holder of the keys for another VC. |
@lrosenthol - Yeah, on further thought, I agree, hashlinks are overkill for this usecase. I DO want to (in a separate proposal) advocate for using hashlinks for contexts and schemas. But you're right, for linking VCs together, a @oed - A very valid concern, sure. We never want to reinvent if we don't have to. For what it's worth, this proposal (and the Hashlink spec itself) does use multihash & multiformat specs from IPFS. |
Good question. It's both -- in the VP case, the individual VCs inside the VP may be unrelated to each other. And ALSO, they may have different (I'll try to answer your other question in the next comment.) |
Ah, right. So let's talk about that. On the CCG mailing list, @awoie asked "would it be possible to link two DIDs through one VC together with this approach?" My personal thought on it is -- yes, it's possible, but maybe we would want a slightly different mechanism for it. Let's dive into the details, though. 1. Using
|
Interesting, ok! You're right that just the
Can you say a bit more about this use case? |
This is a new feature which would create changes to the VC context, so I'm going to label this as a v2 issue. |
tl;dr: linkage based on hashed compressed facial images can avoid the need
for verifiable presentation to a human verifier. A subject can present
authentic DIDs or sufficiently simple credentials as QR codes on paper.
*Credential*: I’m particularly interested in the use-case of a passport or
driver’s license *Credential* that includes *a human-recognizable face
biometric in order to link the Subject to the tamper-resistant proof. *The
Issuer of such a *Credential* is signing over the correspondence of the
biometric to other attributes of the Subject such as their DID. This
Credential is typically long-lived and not specific to any particular
transaction.
*Document*: For example, a notary signs and seals for the correspondence
between a face and a name of a Subject as a transaction. The notary also
keeps a private log of the transaction that includes a unique attribute of
the Subject as their state drivers license number. Importantly, the
contents of the *Document* referencing the Subject are not verified by the
notary. The signature is over the entire document as a transaction that
identifies an individual in a non-repudiable way.
*Hash*: As with an analog biometric credential, the digital version of a
biometric credential prevents tampering using a digital hash rather than
physical inspection.
The notary serves important roles in non-repudiation of the transaction and
in privacy. The notarized document need not include the Subject's unique
attribute (a driver's license number or a DID) that might be opaque to a
Verifier. All the Verifier cares about is that the notary is "registered"
and the transaction they logged is indexed by timestamp in the notary's
log.
*Linkage* between the notarized *Document* and the Subject is via a
human-friendly Subject Name as an attribute shared among:
- the long-lived biometric *Credential*,
- the notarized transaction *Document*,
- and the Verifier.
*DID:* The opaque unique identifier (e.g. a DID) need not be scrutinized by
the Subject, the notary, or the Verifier as long as it is accurately copied
from the biometric credential to the notary's log. This is a major user
experience and adoption benefit. The DID need not appear in the Document at
all as long as there is sufficient information to access the notary's log,
if necessary.
*Privacy*: The Verifier does not need access to the biometric as long as
they trust the notary. *This mitigates the risk of Verifiers contributing
to biometric registries*. The notary needs access to the biometric but does
not need to store the biometric. The biometric is only available locally in
the *Credential* and may or may not be stored by the Issuer either.
*Inspection:* The notary who inspects the *Credential* needs access to both
the human-recognizable biometric and the hash of the biometric in order to
verify the integrity of the Name and various other attributes.
*QR codes*: If the size of the *Credential* is limited, then the biometric
template used to calculate the hash of the biometric needs to be a
compromise between human recognition of a live person and a size small
enough for efficient encoding of the biometric. This is a well-understood
compression problem.
Involving a notary in a presentation transaction is expensive and
inconvenient. What happens if your Verifier is presented with the
credential directly? In that case, live presentation of the credential is
still required and the risk of biometric aggregation is now increased.
However, the biometric aggregation risk can be mitigated to the extent that
compression of the biometric makes it much less useful as a facial
recognition input when the long lived Credential is not involved. This
reduces the risk of ambient authentication a la Clearview AI.
In summary, hashed human-recognizable biometrics can be the basis of
linking long-lived Credentials to transactions whether a notary is involved
or not. To the extent linkage across credentials is based on human
recognition, this works even when multiple Credentials are presented, each
having a different biometric of the same person. Well understood image
compression technology makes presentation of DIDs or credentials as QR
codes practical. In many use cases, verifiable presentation and the need
for Subjects to use an app to sign a challenge can be eliminated.
- Adrian
…On Wed, Nov 3, 2021 at 12:36 PM Dmitri Zagidulin ***@***.***> wrote:
@vongohren <https://github.com/vongohren>
When you say unrelated credentials, that is unrelated to each other
credentials and not unrelated to the DID right?
Good question. It's both -- in the VP case, the individual VCs inside the
VP may be unrelated to each other. And ALSO, they may have different
credentialSubject IDs from each other, and those IDs can be different
from the DID of the holder who signed the VP. Does that make sense? A VP
(at least in the current VC Data Model spec) is an envelope for arbitrary
different VCs; the credentials don't have to be about the same subject, nor
do they have to be about the presenter who is handing them over.
(I'll try to answer your other question in the next comment.)
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#831 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AABB4YPI7QP22KSUXHUCRC3UKFXIXANCNFSM5HHUDLOQ>
.
Triage notifications on the go with GitHub Mobile for iOS
<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
or Android
<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
|
What's the use of all this linked data if we can't see it? This is the World Wide Web Consortium. We make webs for the entire world! A web has to be complicated enough that people stop asking how it works and just get caught up in it. If we depend on human readable credentials, we won't be able to use the link hashes to triangulate a person's activities across multiple VCs. That's a whole new market to exploit! Plus, the photo hosting platform won't be able to see where, when, and how the link is being used. The person would become invisible to the identity ecosystem. Don't you think that's a little too private? What if they commit crimes? Police would have work harder. That's expensive. People would have to be hired to do the inspection. People are very expensive. It sounds like you value privacy more than money / open society. |
Let’s start with a slide by @cjbuchanan on p193 of Proceedings of the 31st Internet Identity Workshop. Transcribed as:
Standards-based digital credentials make surveillance vastly more efficient for all parties acting as service providers:
Much of the security and privacy engineering related to VCs is driven by the desire to make digital identity socially acceptable by mitigating the risks of surveillance. BBS+, Zero Knowledge Proofs, Dead-Drop revocation lists, and Decentralized Public Ledgers are prominent examples of our community’s concern for the risks associated with digital identity, including VCs. These are considerations of the data model designs and we have done great work on the VC and DID data models. We now need to do great work on the protocols that are the essence of surveillance #252, w3c-ccg/vc-api#237 (comment). Mitigation of surveillance risk falls within four broad categories:
VC-API is the one protocol in a position to create and deliver VCs to other actors including Subjects, Holders, Controllers, Mediators and Verifiers. I propose we consider all four surveillance mitigation categories in our work and specifically that we avoid VC-API designs that would compromise the use of any of the four mitigation strategies. |
The IMS Global Comprehensive Learner Record (CLR) standard has something like this to associate achievements to each other but being able to associate assertions/credentials like this would be useful. This is the reference for the CLR achievements association: |
@kayaelle - Thanks! |
I updated the proposal to include a |
Also, another example in related to what I believe @ChristopherA is referencing is endorsements. Open Badges has a concept like this: https://www.imsglobal.org/sites/default/files/Badges/OBv2p0Final/index.html#Endorsement In 2.0, endorsements can be about OB profiles, badge classes, and assertions. In OBv3 we could consider that an endorsement claim references another asserted badge or single skill assertion. A use case being discussed would be a self-assertion VC of a skill and then an endorsement VC of that self-assertion such as an employee claiming they learned a skill at a job and an employer endorsing that. Both of these VCs may be in the employees wallet and presented together and it would be useful to be able to link them together in a verifiable way in the endorsement claim. |
A third approach, mentioned above by @oed is leveraging a separate infrastructure to host a VC endorsement, using the hashlinking approach to connect that VC to the particular attributes of an issued VC in the holders wallet. These we hope to talk about Monday Dec. 6th at @kayaelle's VC-EDU meeting. I hope many of the people commenting here participate as we need all the help we can get on this. |
Is there an expectation that many different forms of canonicalization will be necessary to achieve this feature? I know in the past we've allowed for alot of extensibility which has come at the cost of interoperability and so I'm wondering if it's actually valuable for us to allow for this extension path if we're able to achieve the same outcome in either case. |
@dmitrizagidulin Does your method #3, issuing a fit-for-purpose VC that binds DIDs together, require the two DIDs are both assigned to Alice? Imagine I have two separate VCs, one associated with Alice's DID and one associated with Bob's DID, The first, Alice's, is an assertion about a skill or competency she has demonstrated. The second is an endorsement VC created by Bob where in he is supporting the issued assertion made to Alice as the subject of the skill credential. Does the method you describe enable the two VCs to be bound together and provide a tamper evident connection? Who is issuing this linking VC? |
Isn’t this exactly what notaries do in the world? However we decide to
support or describe notarization we need to be clear about this very common
use case.
…On Sun, Dec 5, 2021 at 2:59 PM Phillip Long ***@***.***> wrote:
@dmitrizagidulin <https://github.com/dmitrizagidulin> Does your method w3c/vc-data-model#3
<#3>, issuing a
fit-for-purpose VC that binds DIDs together, require the two dids are both
assigned to Alice? This, imagine I have two separate VCs, one associated
with Alice's DID and one associated with Bob's DID, The first, Alice's, is
an assertion about a skill or competency she has demonstrated. The second
is an endorsement VC created by Bob where in he is supporting the issued
assertion made to Alice as the subject of the skill credential. Does the
method you describe enable the two VCs to be bound together and provide a
tamper evident connection?
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<#831 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AABB4YPGTAY5KMVJXGQXN6TUPPHERANCNFSM5HHUDLOQ>
.
Triage notifications on the go with GitHub Mobile for iOS
<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
or Android
<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>.
|
Just a quick note that this issue here could also be relevant to the new RDF Dataset Canonicalization and Hash Working Group: https://www.w3.org/groups/wg/rch |
(bikeshedding) Maybe change from |
The issue was discussed in a meeting on 2022-08-24
View the transcript3.3. Proposal: Anchored Resources and Hashlinks for VCs (issue vc-data-model#831)See github issue vc-data-model#831. Kristina Yasuda: ... Dmitri would you be able to talk to hash links for VCs? Dmitri Zagidulin: Sure. In a lot of use cases in the VC world, we need a way to bind not only objects in the VC but also bind other external VCs or other external / outside resource like a PDF. Kristina Yasuda: I think people are interested in the use case. I think we want to discuss how we want to address it. Michael Prorock: I really appreciate this PR / proposal and discussion on it. We run into it a lot on the supply chain side of the world. The thing that threw me a little bit. The first is calling it an anchored resource. The broader use case is to point at some external system. That may or may not be able to have a hashlink with it. Michael Jones: I'm going to bitch about the use of multibase, it's not a standard in any standard organization. It's a draft subject to change. That's one of the things that resulted in the formal objections to the DID specs. I don't think we should start repeating that mistake.
Manu Sporny: Multibase just went out to dispatch at IETF. The expectation is that it will be a standard soon with air quotes around "soon". I think focusing on multibase misses the point. This is important, there are multiple industries, supply chain, education, retail that are all using some variation of pattern here.
Phil Archer: This sounds like something really important to use at GS1. We will look at it in detail and we're glad to see it.
Kristina Yasuda: Thank you everyone, that was a great call!.
|
In the 2022-08-24 meeting, it was suggested that the two proposals in this issue should be extracted to separate issues.
|
@dmitrizagidulin 1EdTech's CLR standard also has a mechanism to link VCs together as peers or as parent/child relationships, but the relationships are explicit. For example, the issuer of a CLR VC can say that VC1 is the parent of VC2 and that both VC1 and VC2 are contained in CLR VC's (Short summary of CLR: It looks very much like a VP, but it is a VC, and the set of contained VCs is in the Thinking about a future CLR standard that uses |
I still wonder about this... When is a URL enough? When is an Why is multibase a requirement? Do VCs need a RDF type to explain what a hash is? (like proof.type)... What about JWK thumbprint URNs? What about compression in content id systems? Which hash to use? There have been some recent software supply chain issues with compression and hashes ... |
is that how you use it? ChatGPT says it's like this: |
one small question:
If all that is being linked to is other VCs doesn't Also of note the CLR standard mentioned earlier is here and has some great ideas on linking VCs together. |
@brianorwhatever it knows what a hash is supposed to look like, and how to encode base64url... but sadly its not secure in the random oracle model.... the syntax it proposes is indeed valid... even if the hash is made up :) I remain annoyed by things like this.... "evidence": {"@id": "cred:evidence", "@type": "@id"}, Seems like we have already solved for the problem... "evidence" is a name for an "identifier"... Why can't we use "evidence" for this use case?.. and embed the "type" in the identifier?... like what ChatGPT suggests? This is also the approach taken in multi codec.... and URNs at IETF generally, for example:
Why do we need a new "predicate" ? Note that GS1 invented "extendsCredential"... https://w3c-ccg.github.io/traceability-vocab/#GS1KeyCredential We seem to really like to create new predicates for "identifier links"... but does that help or hurt the knowledge / information representation and processing / querying behaviors... |
This comment was marked as resolved.
This comment was marked as resolved.
Recently seen on the IETF lists: https://github.com/TheELNConsortium/TheELNFileFormat/blob/master/SPECIFICATION.md {
"@id": "./2022-05-29 - Some-experiment/2022-05-30-export.elabftw.csv",
"@type": "File",
"description": "CSV Export",
"name": "2022-05-30-export.elabftw.csv",
"contentType": "text/csv; charset=UTF-8",
"contentSize": "247",
"sha256": "f3278e796c687371cc63a600b6f12ea32167067fed3ef98099d0c1aad2426531"
} cc @mprorock ^ maybe a thing you would like. |
You're not talking about the same thing if the identifier changes (at least, you can't know that without special reasoning software). When you want to link to an external VC (or any resource) that has identifier This affects the ability to merge graphs of information together using simple tools. This can get particularly awkward when trying to combine statements from within the VC (which necessarily can't use the content-based identifier) and statements made externally about the VC. If this is what you want / you don't care about this, use a content-based identifier. If instead, you want or need these sorts of capabilities, use a predicate to express the hash. The safest approach is to use a predicate so everything is additive, ensuring capabilities aren't lost and there isn't confusion / extra reasoning software required. |
Which tools?
Is support for "software reasoning systems", a design goal for W3C Verifiable Credentials? If so, which specific systems? Can we add some citations regarding this? |
Standard JSON-LD processors using the JSON-LD framing API are the simplest / most common that come to mind.
Well, we already support such systems to some extent by publishing vocabularies, etc. I don't think we're looking to do more than that at this time. |
I'd like to cover the framing APIs informatively, next to the data model, if possible... Developers should understand why we put all the effort in... Otherwise it seems hard to argue for 1 representation over another in the context. I added w3c/vc-data-integrity#107 to keep this thread focused on relationships between things that might have hashes. |
also pending close on #952 |
The issue was discussed in a meeting on 2023-04-11
View the transcript1.12. Proposal: Anchored Resources and Hashlinks for VCs (issue vc-data-model#831)See github issue vc-data-model#831. Kristina Yasuda: suggests pending close on "Proposal: Anchored Resources and Hashlinks for VCs" as well. |
1 similar comment
The issue was discussed in a meeting on 2023-04-11
View the transcript1.12. Proposal: Anchored Resources and Hashlinks for VCs (issue vc-data-model#831)See github issue vc-data-model#831. Kristina Yasuda: suggests pending close on "Proposal: Anchored Resources and Hashlinks for VCs" as well. |
No objections since being marked |
Sidenote: I debated for a while where to open this issue (whether on the overall CCG repo, or the VC Dev Guide, or here), and decided to go with the VC Data Model spec repo, only because the proposal involves adding two new terms to the VC
@context
. This issue is meant to be a start of the discussion, and please let me know if this proposal should go somewhere else.Motivation
Background / Use Cases
There are many use cases that involve binding multiple Verifiable Credentials together. For example, a simple Student ID credential can consist of an overall container credential, which links to several individual credentials (such as a student Photo credential, a proof of enrollment at a particular university, a proof of age, etc).
Note that this is different than binding multiple credentials together in a Verifiable Presentation (and having the presenter sign the VP). In the VP case, the binding just means "this presenter is authenticating the handing over of these unrelated credentials". Whereas in the linked VC case, the credentials are aware of each other, and the peer or hierarchical relationship is built into the VC itself.
Proposal
This proposal introduces two new related properties:
anchoredResource
anddigestMultibase
.Anchored Resource
An anchored resource points to one or more linked or bound resources. It can appear in the
credentialSubject
section (which implies that the resource is linked to the subject), or in the top level credential (same level as issuer, issuanceDate, etc), which implies that the resource is linked to the credential itself.digestMultibase
A
digestMultibase
property provides a way to lock down a link using a hash of its content, by specifying the hash algorithm, and (optionally) the canonicalization mechanism to perform before hashing.Example
Here's what this would look like, using a mock Student ID credential.
Note the two usages of
digestMultibase
in the example. In theissuer
, the link is to a resolvable resource (a regular .png hosted somewhere), and its only purpose is to cryptographically bind the exact version of the logo. (The alternative way to do that is to embed the full image in adata:image/png;base64,iVBORw0KGgoAA...
url. Except those tend to make the VC too large for some use cases, such as fitting onto a QR Code.)Whereas in the
anchoredResource
, the link is to a non-resolvableurn:uuid:
type URN, which only makes sense if both the student id and the photo credential were presented to the verifier.Edits
canonicalizationAlgorithm
property toanchoredResource
.contentHash: <hashlink>
tocontentHash: <multibase+multihash of the content>
.The text was updated successfully, but these errors were encountered: