- From: Bob Wyman <bob@wyman.us>
- Date: Wed, 1 Apr 2026 01:27:36 -0400
- To: "Michael Herman (Trusted Digital Web)" <mwherman@parallelspace.net>
- Cc: "public-credentials (public-credentials@w3.org)" <public-credentials@w3.org>
- Message-ID: <CAA1s49UZX+1u7VSZpvn0Pk-GvN93hTVpC4gK19ho73c9P64vug@mail.gmail.com>
Michael, Thank you — useful prior art, and it confirms that embedding VCs in non-document artifacts is tractable. The XMP/EXIF approach works well for file-level attestation of binary media. The source code case has two properties that make it worth asking the question more carefully: - First, the granularity is sub-file. The provenance claim attaches to a specific function, not to the file as a whole. A file may contain dozens of functions with different provenance categories — some verified, some pattern-derived, some WAGs. File-level attestation doesn't help here. - Second, source code undergoes transformations that binary media does not — reformatting, refactoring, minification, transpilation. A metadata field stripped by a formatter is silently lost. The docstring survives most of these transformations because it is semantically part of the code. An external or header-based embedding may not. So the question I'm really asking is not "can a VC be embedded in a source file" — clearly it can, your 2021 example shows one approach and mine shows another. The question is: given the sub-file granularity requirement and the transformation-survival requirement, is the docstring Provenance section the right mechanism? Are there alternatives that handle these requirements better? And are there fragilities in my approach that I haven't considered — the AST normalization question being the obvious one — and noting that while Python has a single reference parser with a stable AST grammar, the same approach faces significant complications in other languages: JavaScript has multiple competing parsers; C++ preprocessing happens before parsing so semantically identical functions may have different ASTs depending on macro expansion; Erlang's pattern matching and guard syntax have no straightforward cross-language AST equivalent. A language-agnostic solution to the subject identification problem may need a different approach entirely, or a per-language normalization specification as part of the content type convention. bob wyman On Tue, Mar 31, 2026 at 11:39 PM Michael Herman (Trusted Digital Web) < mwherman@parallelspace.net> wrote: > Here’s something from 2021…what do you see as the challenge with embedded > a VC in any document? E.g. code, Word doc, XML purchase order, a photo? > > > > *From:* Michael Herman (Trusted Digital Web) > *Sent:* Sunday, August 8, 2021 11:48 PM > *To:* Leonard Rosenthol <lrosenth@adobe.com>; public-credentials@w3.org > *Subject:* VC-if-eye a plain old .JPG file [was: Binding credentials to > publicly accessible repositories] > > > > RE: There is no mechanism in XMP nor in most standard asset formats for > establishing a model for tamper evidence, such as Digital Signatures, > (H)MAC, etc > > > > Leonard here’s a counterexample. > > > > I’ve applied to the principles and data model for Structured Credentials ( > https://www.youtube.com/watch?v=FFv4WZ0p3aY&list=PLU-rWqHm5p45dzXF2LJZjuNVJrOUR6DaD&index=1) > to VC-if-eye a plain old .JPG file (a photo I took with my Pixel 4a phone). > > > > - Test1_original.jpg is the original, unmodified test copy of the photo > - Test1_ps1.txt is a script that uses exiftool.exe to add the > Structured Credential structures to the original test copy of the photo > …including the proof elements stored in the EnvelopeSeal structure. They > are stored as elements in the XMP Keyword Info property of the photo. > - Test1_xmp.png is a screen shot of the Structured Credential > structures embedded into the XMP Keyword Info properties of the photo. > > > > We now have a mechanism for a .JPG file (or any XMP compatible media file) > to serve as both a photo and a Verifiable Credential. We are now able to > VC-if-eye any XMP compatible media file. > > > > Any holes? > > > > Best regards, > > Michael Herman > > Far Left Self-Sovereignist > > > > Self-Sovereign Blockchain Architect > > Trusted Digital Web > > Hyperonomy Digital Identity Lab > > Parallelspace Corporation > > > > > > > > > > *From:* Leonard Rosenthol <lrosenth@adobe.com> > *Sent:* August 3, 2021 3:02 PM > *To:* Michael Herman (Trusted Digital Web) <mwherman@parallelspace.net>; > public-credentials@w3.org > *Subject:* Re: Binding credentials to publicly accessible repositories > > > > There is no mechanism in XMP nor in most standard asset formats for > establishing a model for tamper evidence, such as Digital Signatures, > (H)MAC, etc. > > > > Leonard > > > > *From: *Michael Herman (Trusted Digital Web) <mwherman@parallelspace.net> > *Date: *Tuesday, August 3, 2021 at 2:49 PM > *To: *public-credentials@w3.org <public-credentials@w3.org>, Leonard > Rosenthol <lrosenth@adobe.com> > *Subject: *Re: Binding credentials to publicly accessible repositories > > Leonard, how do you define "native tamper-evident system"? > > Get Outlook for Android <https://aka.ms/AAb9ysg> > > > ------------------------------ > > *From:* Leonard Rosenthol <lrosenth@adobe.com> > *Sent:* Tuesday, August 3, 2021 10:53:47 AM > *To:* Michael Herman (Trusted Digital Web) <mwherman@parallelspace.net>; > public-credentials@w3.org <public-credentials@w3.org> > *Subject:* Re: Binding credentials to publicly accessible repositories > > > > Michael, thanks for the reference to XMP…but you are probably not aware > that I am the chair of ISO TC 171/SC 2/WG 12 where XMP is standardized * > *and** the project leader for XMP itself. (oh, and I am also the XMP > Architect internally to Adobe 😉 ). > > > > So yes, leveraging existing open standards such as XMP is indeed a key to > delivering on the promises mentioned below – but it can’t be the only > solution due to it being a text-based serialization (thus not lending > itself well to binary data structures) and not having a native > tamper-evident system. Additionally, while it is supported by most common > asset formats, it is not supported by all. > > > > Leonard > > > > *From: *Michael Herman (Trusted Digital Web) <mwherman@parallelspace.net> > *Date: *Tuesday, August 3, 2021 at 10:43 AM > *To: *Leonard Rosenthol <lrosenth@adobe.com>, public-credentials@w3.org < > public-credentials@w3.org> > *Subject: *Re: Binding credentials to publicly accessible repositories > > Checkout https://en.wikipedia.org/wiki/Extensible_Metadata_Platform > > > > And here's a data model to consider for use in a custom XMP profile: > https://youtu.be/FFv4WZ0p3aY > > > > Get Outlook for Android <https://aka.ms/AAb9ysg> > ------------------------------ > > *From:* Michael Herman (Trusted Digital Web) <mwherman@parallelspace.net> > *Sent:* Friday, July 30, 2021 1:25:18 PM > *To:* Leonard Rosenthol <lrosenth@adobe.com>; public-credentials@w3.org < > public-credentials@w3.org> > *Subject:* RE: Binding credentials to publicly accessible repositories > > > > So an alternate strategy to avoid embed an actual VC or otherwise try to > attach a VC to an asset is to use the metadata capabilities of each of > these formats to store the credential id, @context, vc type list, > credentialSubject id, the individual claims (name-value pairs), and the > proof elements > > > > …vc-if-eye each format using each format’s native metadata capabilities. > > > > *From:* Leonard Rosenthol <lrosenth@adobe.com> > *Sent:* July 30, 2021 1:03 PM > *To:* Michael Herman (Trusted Digital Web) <mwherman@parallelspace.net>; > public-credentials@w3.org > *Subject:* Re: Binding credentials to publicly accessible repositories > > > > Michael – not sure you understand the scenario here. > > > > We aren’t building a specific system/solution for our own needs and those > of our customers – we are developing an open standard that associates > provenance with existing assets (eg. JPEG, PNG, MP4, PDF, etc.). Since > those are the formats that are recognized by systems (and regulatory > solutions) today, it would make no sense to start wrapping them in some > other format (be it JSON, XML, or whatever). JPEG files (for example) need > to work everywhere they do today – BUT contain tamper-evident provenance. > > > > Leonard > > > > *From: *Michael Herman (Trusted Digital Web) <mwherman@parallelspace.net> > *Date: *Friday, July 30, 2021 at 2:46 PM > *To: *Leonard Rosenthol <lrosenth@adobe.com>, public-credentials@w3.org < > public-credentials@w3.org> > *Subject: *RE: Binding credentials to publicly accessible repositories > > It’s a SMOP (small matter of programming). Once upon a time, browers > weren’t capable of displaying a lot of different kinds of resources (e.g. > XML). > > > > Why not render your VCs as XML? > > …or consider using server-side rendering? > > …or write an in-browser renderer using WASM? > > > > *“The difficult we can do, the impossible takes us a little bit longer…” * > 😊 > > > > *From:* Leonard Rosenthol <lrosenth@adobe.com> > *Sent:* July 30, 2021 12:35 PM > *To:* Michael Herman (Trusted Digital Web) <mwherman@parallelspace.net>; > public-credentials@w3.org > *Subject:* Re: Binding credentials to publicly accessible repositories > > > > Given that putting a “.vc” file on a website or in a Twitter feed of > YouTube channel isn’t going have it properly displayed – that’s not an > option, unfortunately, Michael. > > > > Leonard > > > > *From: *Michael Herman (Trusted Digital Web) <mwherman@parallelspace.net> > *Date: *Friday, July 30, 2021 at 1:05 PM > *To: *Leonard Rosenthol <lrosenth@adobe.com>, public-credentials@w3.org < > public-credentials@w3.org> > *Subject: *RE: Binding credentials to publicly accessible repositories > > I suggest storing the “original version” of the artwork as a claim within > a signed credential …the credential wraps the artwork like a container or a > “frame”. > > > > I believe this is much better than trying to attach a credential to the > artwork. > > > > Best regards, > > Michael Herman > > Far Left Self-Sovereignist > > > > Self-Sovereign Blockchain Architect > > Trusted Digital Web > > Hyperonomy Digital Identity Lab > > Parallelspace Corporation > > > > > > > > > > *From:* Leonard Rosenthol <lrosenth@adobe.com> > *Sent:* July 30, 2021 10:31 AM > *To:* public-credentials@w3.org > *Subject:* Binding credentials to publicly accessible repositories > > > > I realize that I might be out on the bleeding edge a bit, though not > completely as I think it is very similar to what OpenBadges will face as > they move to VC’s… > > > > In the Trust Model section of the VC Data Model spec, it states that one > of aspects of that model is: > > The holder trusts the repository to store credentials securely, to not > release them to anyone other than the holder, and to not corrupt or lose > them while they are in its care. > > This is certainly true when the repository in question is something like a > wallet that is designed to be kept private or local (not shared). But what > happens when the repository is designed to be out in the public… such as an > image or PDF with the VC embedded? > > > > > > As part of the C2PA’s (https://c2pa.org) work on establishing provenance > for digital assets, we will be using VC’s as a way for persons and > organizations to establish their relationships to the asset. Specifically > in this instance, we’re extending schema.org’s Person and Organization > schemas, as used by their CreativeWork schema, to support referencing a > VC. This then allows the author or publisher (or any of the other roles in > CW) to provide their credentials in that role, which (a) adds useful trust > signal(s) to the end consumer and (b) helps establish reputation. > > > > These VC’s (etc.) will be embedded into the assets (e.g., video, images, > documents, etc.) in a tamper-evident manner, so that in addition to the > individual VC’s “proof”, any attempt to change the CreativeWork > relationships, etc. can also be detected. This all works great. > > > > However, in doing some threat modelling, we recognized that we have no > protection against a malicious actor simply copying the VC from one asset > and dropping it into another (and then signing the new setup), because > there is nothing that binds the credential to the asset in our case. > > > > Has anyone run into this scenario before and has some guidance to offer? > Am I doing something that I shouldn’t be doing – and if so, what does that > mean for OpenBadges? > > > > All thoughts and suggestions welcome! > > > > Thanks, > > Leonard > > >
Attachments
- image/jpeg attachment: image003.jpg
- image/jpeg attachment: image004.jpg
Received on Wednesday, 1 April 2026 05:27:56 UTC