- From: <meetings@w3c-ccg.org>
- Date: Wed, 16 Apr 2025 15:05:49 -0700
- To: public-credentials@w3.org
- Message-ID: <CA+ChqYc9KFkGKhsarffK4dw0YMxtMaYTYnMM7yrZ4rUO5HmObw@mail.gmail.com>
CCG Incubation and Promotion Meeting Summary - April 16, 2025 *Topics Covered:* - *Report Out from Internet Identity Workshop (IIW40):* Discussion of issues raised regarding internationalization, handling compound credentials, specifying credential views in render methods, applying logic to fields for human-readable output, and iterating through credential arrays in templates. - *Promotion of Specifications to VCWG:* Focus on the readiness of several specifications for transition to the Verifiable Credentials Working Group (VCWG), including the Verifiable Credential API, Render Method, Confidence Method, Post-quantum secure data integrity crypto suites, and the Trusted Issuers Verifiers List. The ZCAP spec was also briefly discussed, with uncertainty regarding its appropriate working group. - *Render Method Pull Request 17:* The majority of the meeting focused on this pull request, aiming to improve the render-method specification based on a year of field experience. Key changes include: - *Templated Render Method:* Shifting from a solely SVG-based approach to a more flexible templating system using Mustache, allowing for various output formats (PDF, text, etc.). - *Render Suites:* Introducing render suites similar to crypto suites, providing a structured approach to define different rendering processes and their associated media types and security considerations. - *Media Type Handling:* Extensive discussion regarding the handling of media types (e.g., SVG, HTML, PDF), emphasizing the importance of security and privacy by preventing network access and scripting within rendering processes to avoid tracking and correlation attacks. - *Render Property:* Debate over the render property (a list of fields to be rendered), with a push towards making it explicit and potentially using it for selective disclosure. Concerns were raised about issuer trustworthiness and the need for wallets to independently verify rendered data. The possibility of using objects instead of strings to provide more metadata about fields was raised. - *Offline Flag:* Suggestion to add a flag indicating offline-friendliness to ensure privacy and prevent network-based tracking. - *ID Property:* Confusion around the use of JSON-LD IRI IDs was noted, along with a potential need for clearer documentation or alternative mechanisms. However, consensus was to stay the course for now. *Key Points:* - The render-method specification is being significantly revised to improve flexibility and address security and privacy concerns. - Render suites are introduced to provide a standardized and secure way to define different rendering processes. - The use of media types requires careful consideration to mitigate tracking and correlation attacks. - The render property should be designed to enforce explicitness about the data used in rendering and potentially enable selective disclosure. - Tooling and linting are crucial to help developers build more privacy-preserving credentials. - Further discussion is needed on several aspects, including the precise format of the render property, function handling in templates, and ID property clarity. The meeting will continue next week to address these remaining points. Text: https://meet.w3c-ccg.org/archives/w3c-ccg-ccg-incubation-and-promotion-2025-04-16.md Video: https://meet.w3c-ccg.org/archives/w3c-ccg-ccg-incubation-and-promotion-2025-04-16.mp4 *CCG Incubation and Promotion - 2025/04/16 10:58 EDT - Transcript* *Attendees* Alex Higuera, Benjamin Young, David C, Dmitri Zagidulin, Hiroyuki Sano, John's Notetaker, Kayode Ezike, Manu Sporny, Parth Bhatt, Phillip Long *Transcript* Manu Sporny: All right, let's go ahead and get started. let me go ahead and share our agenda for today. welcome everyone. this is the April 16th credentials community group call on items that have been incubated for a while and we're getting ready to promote to the verifiable credentials working group. today on the agenda we are going to try to focus on render method specifically there is a new pull request 17 to add a template render method type and a render suite approach to render methods. Manu Sporny: this is after about a year of kind of field experience implementing what was in the spec. we found it lacking in a variety of different areas. and with addition of work that MIT dcc's done and a couple of other folks in the ecosystem have done we've tried to kind of take those learnings and unify it into this pull request. So this is expected to be the one fairly major change to render method before we hand it off to the verifiable credential working group. so we'll be spending the vast majority of the call talking about that today. we can also cover anything that is of relevance from the internet identity workshop. 00:05:00 Manu Sporny: anything relevant to any of the specs that we are planning to promote. That includes verifiable credential API, render method, confidence method in any of the postquantum data integrity cryptography suites. those are the major work items we're thinking of promoting to the VCWG. so we can cover anything from IW that happened there. okay, I think that's it for the agenda. Are there any changes or updates that anyone would like to make to the agenda? All right. Manu Sporny: If there are no changes or updates, is there anyone new to the call today that would like to introduce themselves? All right. If not, let's go ahead and jump into our first agenda item which is a report out from the internet identity workshop IIW40 which happened last week. is there anything relevant that happened at IIW related to any of the work items that we're planning to transition to the verifiable credential working group? Manu Sporny: Again that's VC barcodes, VC API, render method, confidence method, postquantum secure data integrity, crypto suites, BBS pseudonyms, any of that. and of course the trusted issuers verifiers list. go ahead, David, please. David C: I don't need to now because you just said, " yes." And Okay. Manu Sporny: Yes, my apologies. David C: Yes. My Manu Sporny: I'm having a hard time keeping all of the specs in my head. There are a lot of them. I were planning to transition, but yes, of course. as well, Coyote, please. You might be double muted. Manu Sporny: Still no audio from you. Unfortunately, I think your audio is not working for some reason. I can't hear All right. we'll take your comment when you rejoin. And we'll just hold for a second until Cody rejoins and maybe he'll have his audio things fixed. Manu Sporny: While we wait, anything else that happened at IW that folks feel are relevant to the conversation. I will I guess point out that one of the things that came up on the main CCG call was the Zcap spec, which we have not touched in a long while. it is something that could potentially be incubated and moved to and there and there's a big question mark Dimmitri we're just talking about kind of the ZCAP spec and where the incubation and promotion would go to VCWG does not seem like the right place but it's kind of like a big question mark on what would be the right place this came about as a kind of recap Dmitri Zagidulin: Makes sense. Manu Sporny: IW40. … Dmitri Zagidulin: Makes sense. I think if I can just add a comment. Manu Sporny: please. … Dmitri Zagidulin: I think if all else fails, diff would be happy to incubate CC Zcaps. Yeah. 00:10:00 Manu Sporny: it's not the incubation. It's the standardization. where would we, send it? meaning what's the official working group that would take it? I think one of the things I've been trying to figure out at least from a W3C charter standpoint is that there's a chunk of stuff that's happened in the BCWG specifically around data integrity that probably belongs in its own working group around security and data integrity and that kind of stuff and that if we had a working group like that that would be a kind of ideal landing place so Manu Sporny: that working group would take over the data integrity work all the crypto suites in pull in ZCAPS potentially a future EDV thing… Manu Sporny: although that would probably be a stretch for that group there is a security interest group that's been chartered and… Dmitri Zagidulin: Got it. Dmitri Zagidulin: And isn't there a straight up security group that was being chartered? not working. Manu Sporny: they exist but they're not items… Manu Sporny: but They're not supposed to work on technology for whatever reason. Manu Sporny: I don't know why that decision was made,… Dmitri Zagidulin: Got it. Dmitri Zagidulin: And last question about Zcaps. Manu Sporny: but I would have some deep reservations about doing that given the votes against a lot of the stuff that we've tried to take Dmitri Zagidulin: Would it be at all plausible or feasible interest from this crowd to possibly take it to the idea? understood. Manu Sporny: there. I mean, multibase, multiash, all of those were shut down,… Dmitri Zagidulin: Yeah. Manu Sporny: I'd want to put it somewhere that had a friendly atmosphere and,… Dmitri Zagidulin: right. Manu Sporny: could survive. yeah, I mean, a lot of the technologies we've tried to move to ITF just got shut down by … Dmitri Zagidulin: Got it. Understood. Manu Sporny: that's so I think though the thoughts there is, we'll continue to incubate the ZCAP stuff. and then we can figure out where it goes later and we can always recharter some of these working groups it's not a hard no from the VC working group. Manu Sporny: It's just kind of like and maybe there's an argument there for it to go there because that's where a lot of the people that worked on Zcaps are and there's strong feelings about VCs are not ZCAPS and there needs to be a separation between them and that sort of thing. go ahead Coyote. Yes. Kayode Ezike: Yeah. No, this is just my audio works now, Okay, great. Yeah, sorry about that. So, you had asked about whether or not we had touched on any of these at IW and the answer is So, I just wanted to say that Dimmitri and I led a discussion about it. These are the issues. I think there's four of them there that came out of it. some of them around internationalization, handling compound credentials like CLR2 and linked L RS and then other things like for example being able to specify what the item view of a credential is and not just the detail view in a render method. So a number of interesting conversations came out of that. Kayode Ezike: There are some other others too that I thought about since then that I wanted to add on I haven't gotten a chance to yet. But for example around being able to actually apply logic to certain fields and… Manu Sporny: Mhm. Kayode Ezike: not just being able to reference them. For example for date fields ideally you don't just show a degree and if a degree has a diploma has a date it wouldn't just be like the ISO 601 value would actually be something more human readable. So things like that and then being able to actually do basically iterate through an array of credentials and have templates for them that you can have inline in a template that are referenced by an ID that's inside the template that I'll probably spec out some of these in an issue… Kayode Ezike: but these are some of the things that I've also been kind of contending with as well. Manu Sporny: That's awesome. Manu Sporny: That's fantastic. Yeah, I totally missed that these new issues were raised, but yeah, that's great. and yes, please Coyote add those other issues so that we can kind of process them with the spec. and we'll go over these later on today if we can get to them, but they all are good solid asks and we can discuss as we do. Okay. 00:15:00 Manu Sporny: anything else from IIW that we should cover related to the work that we're incubating to promotion. All right. if not then we will jump into the main topic of today. I thought the way that we could go about this is to just look at the PR in the spec as it go through it, kind of explain what we're doing here and and then we can go into questions that people have. Clearly, just ask questions as we go, so if you raise comments or whatever, please fit it into the conversation where you think it's appropriate just via hand raise. Manu Sporny: The other request I have is that if you do have a change or modification or something like that, please raise it on the pull request so that we can make sure that we capture all of the changes that people are requesting. So here's the links in the chat channel. please go there, add your comments if there's something that you want to have covered. Manu Sporny: With that, let's go ahead and jump into it. let's start off with an example. so as a reminder to folks, what was in the spec or what still is in the spec is this SVG render method example. And what we have heard over, we've implemented it and what we've heard over the last year was, sure, okay, SVGs, but what about PDFs? Those are way more Manu Sporny: prevalent in the ecosystem. What are we doing for that? and what are we doing for the other types of rendering? So render method is very broad in what it means. Meaning we render to the electromagnetic spectrum which includes visible light like a QR code. It includes near field wireless like NFC and Bluetooth. Manu Sporny: and includes again human interpretable optical pictures right including other things we're also talking with accessibility folks on braille and audio and stuff like that so when we say render it in a very broad sense but the biggest thing that people have asked for is I as an issuer want to at least provide the way I would like the credential to be rendered in a variety of different form factors. So primarily this is the issuer going if you're going to render this in a variety of different ways. I have opinions about how I think it be It is however totally up to the wallet and how the holder has configured their wallet to do the rendering. Same thing with the verifier. Manu Sporny: So this is all based on what the entity that's looking at the render method, wants to do with it. So, we used to have just a pure SVG thing. That didn't cut it. people wanted a different approach. So, we've gone through and refactored it with this PR. So, what we have now is we still have the render method property. So this is just a bog standard verifiable credential. and it's got this property in here. we do have an extra context for render method because it didn't get into v2. there's some extra properties we need. So we need this extra context up here. Manu Sporny: And then down in the main kind of type of render method that we're proposing is a templated based render method. So it's largely a textbased template where it uses mustache is a template language where you put double curly braces. So the name mustache comes from the curly brace. You rotate it 90° and it looks like a mustache. That's why it's named that. and so you put double curly braces around variables and the variables come from the verifiable credential. Manu Sporny: So this would be double curly brace valid from right would fill this in directly and as coyote mentioned that's kind of ugly and we don't want to expose that to a human being that doesn't know what ISO the XML datetime format looks and this is not in the spec right now but we can have functions in the mustache templates that execute and would form that this into a nice human readable datetime that is in their current local and so on so forth because not everyone writes dates in the same way in different societies. 00:20:00 Manu Sporny: the US does it differently from other places and even within those individual states it can be done differently as okay so this render suite so sorry so the high level thing is a template render method and we're adding render suites that are somewhat equivalent to crypto suites like we do for the data integrity proofs. These ones would provide a render suite so that you can do an SVG mustache-based template thing or you can do a text file mustachebased template thing or you could do a PDFbased one. Manu Sporny: and we could also potentially do binary templated syntaxes here as well. That's very experimental. I don't think we're going to do it the first go out. But the idea here is the render suite gives you a lot more flexibility and we only need to support one kind of type for most of the use cases, certainly not all. Demetri, you're on the queue, please. Dmitri Zagidulin: Two questions comments on that. one is about both in media type property and in the file extension in the ID. I was going to say I wonder if it make more sense but no it's more like we've got two sort of competing things to denote. One is the end result after the templating which is the SVG but before the templating might we also need to use the mustache specific file extension… Dmitri Zagidulin: which in our case we used handlebars so it's HBS do you know what I mean right the type of the template is not the same as the media type of the end result and… Manu Sporny: Yeah. Interesting. Manu Sporny: Mhm. Yeah. Dmitri Zagidulin: so I'm wondering if there's some way we can denote similarly to your earlier question you mentioned people are wondering about PDF but the thing about PDF is that it is that or at least the only way we've been able to do it sort of consistently at dcc is to start with SVG or HTML and pass it to a PDF printer library and it converts it there so I'm wondering if there's some way Dmitri Zagidulin: to denote it that the initial template is handlebars/html for use with the intended use of creating PDF and it might be just as simple as a description comment string like this is a template converting HTML to P Dmitri Zagidulin: but I just wanted to raise it up right it's not clear how to denote to consumers to developers really that hey Although this is an HTML template, we're really using it to do PDF. And also this notion of the template format versus media type of the end format. Manu Sporny: Yeah, excellent point. Manu Sporny: How would that change this? so what you're saying is that the media type here would really be a handlebars media type. Dmitri Zagidulin: Yeah. Yeah. whatever the mustache media type is. Manu Sporny: Mhm. And… Dmitri Zagidulin: Or maybe we should just straight up have two different properties,… Manu Sporny: then Yeah. Dmitri Zagidulin: right? Templify output media type or Manu Sporny: And we did discuss that a bit that here's where things we started getting in trouble, right? Manu Sporny: when you needed to look at multiple different media types or multiple different properties to do something in the crypto suite stuff, we ended up in a variety of dangerous situations. that is the kind of the same approach that JWTs can take the cording of multiple properties was an anti-attern that we didn't want to do. So we wanted to make sure that when you looked at the render suite,… 00:25:00 Dmitri Zagidulin: Got it. Manu Sporny: you knew exactly what you needed as input and you knew exactly… Dmitri Zagidulin: Got it. Manu Sporny: what was going to be the output and all of it lived here. Meaning that what you look at one field and everything that's going to be an input and everything that's going to be an output. Manu Sporny: And it's kind of like these things are secondary to the render suite. Manu Sporny: So the render suite is the thing that provides kind of the security guarantees around… Dmitri Zagidulin: Got it. Dmitri Zagidulin: Got it. Manu Sporny: what you're doing or at least limits what you're doing. and this gets into kind of the security and privacy considerations. what we didn't want is the ability to make decisions based off of media types that were either server provided Manu Sporny: because that could lead to different types of attacks correlation attacks like HTML is a good example of that. that doesn't mean we don't do it. Dmitri Zagidulin: Understood. Dmitri Zagidulin: Got it. No,… Manu Sporny: I'm just noting where kind of some of the concern came from with Mhm. Dmitri Zagidulin: No, you know what? you're right about the render suite that is the primary thing to look at. So while there's still a question about what file extension to put on the template, I agree with you that we don't need an input and output media type that is contained in the media suite in the render suite, sorry. Manu Sporny: Yeah. so I Don't drop it yet, Demetri. I think we need to really analyze it. But I think that's why we were leaning towards render suite is the source of truth and then everything else must match up. This media type is for a different purpose. it's basically the issuer going you need to fetch this and if you don't get a media type of image SVG throw an error, right? Manu Sporny: because that means that someone's tried to intercept this or they've modified the media type and they've put an in HTML file in place, if that makes sense. so yeah, Demetri, I think that's a really good concern. Manu Sporny: We should discuss it at depth to make sure that we are making the right decision all next up, Benjamin. Benjamin Young: Yeah, sure. Benjamin Young: Just kind of picking up from Dimmitri. there's a use case for SVG where that ultimate rendered output would be like a PNG or something. so I like Demetri, I'm wondering around render suite and whether or not what else needs to go in there if anything. because as far as mustache is concerned and handlebars has a registered media type, mustache doesn't, but that's kind of fine because u you can use mustache on SVG file, basically any text file. Benjamin Young: you can feed through a mustache template engine. So, it doesn't need its own media type per se, but we do need to know that whatever text thing we're getting back or feeding into the mustache renderer, we should assume contains mustache holes and we're going to fill those in. but I'm not sure that at what point does the rendering system need to know that when is SVG meaning going to be valuable to the thing running the text file through the template and then doing something on the output. Benjamin Young: and that may be idiosyncratic. If the system knows it got an image SVG file in, ran it through mustache, then maybe the wallet decides is it going to render it as a PNG, is it going to turn it into a PDF, is it going to display the raw SPG content, etc. those are my thoughts at the moment. Thanks. Manu Sporny: Yeah, plus one to that. Yeah, good thoughts. David C: Yeah, I mean given that you said that the render suite property is the primary determinating factor of the code that's going to process all this. then I just wondered why do you just make it the type? So the type is the SVG mustache because what do you gain by having a type of a template render method and then the next parameter completely differentiates between all the different ones? cuz you may find you've got some non-ommonality anyway and maybe you don't even need the template object then if you get rid of the template render method and just call the type the render suite the SVG mustache right right on. 00:30:00 Manu Sporny: Yes. Right. Yeah. Yeah. Under understood. let's see. I put myself on the queue to respond to Benjamin your point and David's, but I'll do them in the opposite order. so the reason we have a single type here is the same kind of reason that we have a single type for data integrity proof. if we wanted to add a new type in the future between verifiable credential version two let's say 2.1 in version 3 and 31 and 40 we would have to keep adding new types and new variations and we didn't want to centralize the development of new render suites to the verifiable Manu Sporny: credential working group. We wanted to make sure that this is effectively a text field in any and that allows for decentralized innovation so that they wouldn't have to come and centralize the types at the verifiable credential working group because the verifiable credential working group is the one that has authority over this thing. So it's very much we could do what you're saying David and that is where we started out with cryptography suites but we learned very quickly that it's centralized the development of cryptography suites at W3C to the working group and we felt that that was bad for the ecosystem. so that's why we use just a very general name here. Manu Sporny: we have a sweet property and then have fairly open a string here that you can do decentralized innovation on. Manu Sporny: Did that make sense David? Sure. David C: Can I respond to that? David C: Can I respond to that? Because if you got fully decentralized and you've just got a string there, then you're going to get string clashes. somebody in China is going to, maybe have the same string as someone in Chile. and then when you process it in Luxembourg, you won't know whether it's the Chinese string or the Chilean string because it's the same string because there's no control over what the string can be. there is an expectation that there's going to be a registry that people can register these things in… Manu Sporny: There is an expectation that there's going to be a registry that people can register these things in but it's optional right anytime you go to fully decentralized systems there's always the risk of potential clashes and… David C: but it's optional right anytime you go to fully decentralized systems there's always the risk of potential clashes and… Manu Sporny: names like this… David C: names like this… Manu Sporny: but we sorry David I'm getting a lot of feedback from your audio thanks there's always the possibility of name clashes. David C: but we sorry David I'm getting a lot of feedback from your Manu Sporny: When you go fully decentralized, we provide an optional registry for people that want to avoid those name clashes. and the same thing's true for the cryptography suites, I mean, someone could choose the same cryptography suite name. but we don't expect that to happen. Manu Sporny: especially with render method cuz we're not expecting there to be even above 10 is probably not going to happen but even if it does go above 10 managing 10 to 20 strings globally is probably not that big of an issue. did that make sense David? I mean I think we're saying yes we know that there's a possible David C: are saying, "Yes, we know that you could use URIs. Manu Sporny: Yep. David C: You could just say there URIs there and then you've solved that. Manu Sporny: So, I mean, if folks want to use URIs, they can use URIs. I don't know if we'd necessarily suggest that, Because we're kind of standardizing things, but in any case, let's put this down as, one thing that we can kind of discuss. Should this be a URI or should it be a string? we can raise that as an issue. okay. Manu Sporny: Benjamin, I unfortunately forgot the comment I was going to mention with you. yes yeah yeah yeah. Benjamin Young: We were talking about input and… Benjamin Young: output media types, I think, and the lack of input media types. 00:35:00 Manu Sporny: so the media type so yes I mean a plus one to what you said this should be good enough for most of it we do have a media type here it's debatable on how useful it is there is a concern about just leaving this open it could be anything it might be a SVG that's served as text HTML and there's an attack where if you do that a different rendering engine is picked in if you pick a different rendering engine your correlatability charact characteristics change dramatically. So for example for SVG I think in the spec we would insist that you cannot go out to the network. So there's a type of SVG processing where it's purely local. Manu Sporny: You absolutely cannot go out to the network and fetch images and other things like that. it's completely self-contained. You can't run scripts. you can't go out to the network and fetch extra items. you can't do animations. there's all this stuff. There's a simplified version of SVG. So I think we'd say you have to use that version because if you don't use that version then issuers can put tracking tokens in the SVG files so that whenever anybody renders it they can track the person either as it's being rendered in the wallet so you can figure out when people are using their credentials or when it's used at the verifier you can figure out what verifiers are receiving what credentials from what specific individuals. Manu Sporny: so that's important, right? I mean, with HTML, we might say if you're going to take HTML and generate a PDF from it, you have to do it in a sandboxed environment where there's no network traffic. that's allowed. and if you detect network traffic, you should just immediately break the rendering. be very aggressive about shutting down correlatability. yeah, Coyote, I think it also means no linked images. again, this goes into our security privacy characteristics. I think we'd have to have a very in-depth discussion about this. Manu Sporny: but if you think about you've got this BBS credential it's unlinkable and you have all these nice properties and then you've got a HTML rendering mechanism in there to just completely destroys the cryptography and makes it fully linkable because you're tracking images which we know people are going to want to do right to track where these things are being used. So, I think we do need to be careful about, these rendering subsystems and what they're allowed to do and what we say, should be done and how people are going to get the implementation wrong anyway, And all and go out to the network anyway. go ahead, Benjamin. Benjamin Young: Yeah, relatedly that template ID value could be unique to the credential or… Manu Sporny: Yeah. Mhm. Benjamin Young: made to be unique or contain a query string that's unique and guarding against that is nearly impossible. which is why in experimentations last year, and there's still, I think, one on the VC playground, we stuffed the entire thing, including the photo of the person into the credential, which ends up, with a five meg credential or something. so there's a weird tension between how to ship a generic truly templated contains no Benjamin Young: no PII or identifying anything in it. and then how do you assure that from the credential side and I don't know that you can Manu Sporny: Less one to that. Manu Sporny: There are some strategies that we've talked about in the past for example and again this is dangerous but wallet systems keeping track having a public registry of images and links that are in credentials and seeing how many other credentials out there refer to images that you link to. Manu Sporny: And if the number is below five then you are holding a tracking credential meaning you can take this value hash it and you can see how unique it is and you can be in a kind of a public registry. so that at least your wallet or other wallets even if they're not big wallets at scale can know you've got tracking data in your credential right as an example. I'm not saying that's well thought through or anything like that, but they're ways of potentially trying to provide signals to individuals. go ahead, Dimmitri. 00:40:00 Dmitri Zagidulin: So I'm wondering if the other thing I was going to bring up may help this which is I wonder if it makes sense to add a property for this is offline friendly or not right and if we have an offline flag… Manu Sporny: Mhm. Yep. Dmitri Zagidulin: then we can say okay lock it down to make network tracks etc etc right that's thought one. And the other one that I wanted to mention before I forget, I wanted to mention about the ID property. I've heard from several people including the guy from GS1 at IW. he was looking at the template. He's like, "Where's the URL?" I'm like, it's this weird JSON LDSM that IDs are URLs." He's like, " that is not intuitive at all." And I've seen other developers hit up against this as well. Dmitri Zagidulin: So, I just wanted to flag it that it is a source of confusion. Not sure… Manu Sporny: Mhm. Yep. Dmitri Zagidulin: if we want to add a template URL field, but the ID thing is confusing Manu Sporny: Noted. I mean, we can have a discussion about that. Manu Sporny: I mean, Demetri, as you know, we had a very long discussion about that in the VC working group,… Manu Sporny: and this is where we landed. And it's like, okay, are we going back and revisiting that conversation, or this is just the way you do it in go ahead, Benjamin. Benjamin Young: Yeah, I'd be in favor of staying the course. Benjamin Young: I don't know what people think URLs are if not identifiers. I realize it's not intuitive in language, but they come around. Dmitri Zagidulin: Locators. Benjamin Young: Those are the same thing, right? It one's a subset of the other one. I think it's just an educational failure on the part of browsers and computer science people. but we should do more to hoist that. I did want to come back to monetary tracking wallets recording URLs going out. Benjamin Young: I think developer tools before that would be helpful to when doing a render method or when rendering anything through one of these catalog all the requests that are made or forcibly put it through some of the sandboxed ones or not to just show the developer what's happening. This is maybe part of the render method test suite in the future. because Demetri, you mentioned having an offline flag. I think the wallet's going to need to I mean you could signal to do that, but the wallet should take the strict depending on the wallet should take the strictest approach for preserving the privacy of the individual. some wallets will not, right? Benjamin Young: But some way to surface that to at least developers,… Benjamin Young: but even the end user to say, you've got credentials that all have matching content in them. So maybe you're not who you think you are. Manu Sporny: Yep. Yeah. Manu Sporny: Huge plus one. Tooling, linting, all that stuff. I think it helps people design better credentials, more privacy preserving credentials, and not accidentally fall into a situation where they have, this credential that they're starting to issue and then they find out after they've issued the first 15,000 of them that none of the wallets are rendering it because they've been flagged as a tracking beacon, We definitely don't want that experience. so yeah, huge plus one to that, Benjamin. Manu Sporny: okay. We've talked about media type. digest multibase is just a digest of the file to make sure that it doesn't change. Sometimes you want that, sometimes t. sometimes you want to update the look and feel of your credential while it's out there in the wild. And other times you do not want to do that, Meaning you do not want to change what the credential you issued looks like. because everyone expects it to look a very specific way. So something like a driver's license or a permanent resident card once it's issued people do not expect the entire face of the card to change. the last one here is render property and these we're still heavily debating the name for this. 00:45:00 Manu Sporny: This is basically the list of fields that will be taken from the verifiable credential and passed into the renderer to render the thing. right now this is an issuer supplied list. And the reason for this is kind of like a consent privacy thing for the individual. when you render this thing, we think it might be important for your wallet or something to say, "Hey, by the way, these fields from this credential are going to go into this PDF file." And if you're going to take this PDF file and you're going to send it somewhere, just know that these five fields are in there. They're going to be in the PDF and when you email it to someone, they're going to see that information. Manu Sporny: Sometimes when you render these things like a certificate of completion or a birth certificate or something like that there is so much data in there that you don't think twice about printing it out and sending it to someone but hey by the way this thing includes your social security number in it or your national ID number or something like that. the argument against this is what if the issuer lies? we can also have an argument that hey what the temp the renderer can figure out what properties are there because there's a whole bunch of mustache templates that are used and filled out. and then of course the counterargument to that is not for NFC you have no idea everything's a binary blob so you don't really know. Manu Sporny: go ahead, Benjamin. Benjamin Young: Yeah. … Benjamin Young: I wonder if we could use this render property, especially with mustache as almost a selective disclosure style thing because mustache uses a view model. that doesn't obviously need to be fed this list of render properties or some similar sort of filtered thing could be what is used to selectively disclose parts of the credential data to create a view model that then is passed into the mustache template engine. Benjamin Young: So that's basically you're stating this template needs these fields and you need to create an object that is just those fields. so essentially if you don't as the developer list a property in there, you won't have access to it in your template. So you have to be explicit for the render suite to even send you the data. You have to state what data you want from that way it's not a secondary thing you need to remember to update and it's a nice to have signal or something you have to go out of your way to do. Benjamin Young: You're going to have to trip over it to get data into your rendering system at all. and then those two things are tied more tightly together. Manu Sporny: Yep. Absolutely. Manu Sporny: I think that that was the purpose of this Coyote, you had a good feedback and in my instinct was the same as yours. So Coyote, maybe you want to kind of vocalize the counterargument there. Kayode Ezike: Yeah, I think you covered it. It was basically that right why should the world decide to trust the issuer on that either it could be out of a simple oversight that the issuer just didn't remember all the fields that were exposed and so that's the reason why it wasn't listed or it could be maliciously hidden and there's not really a way to determine which one it was but the point is that it is a misguidance to the wallet either way. And so that's where I felt that for something that seemed to me that could be deterministically determined from the wallet with the combination of the credential and a template that it should be I hear there are some cases where it could be difficult to do that. Kayode Ezike: But I wonder even for those binary cases, is it still possible for the wallet to get some of that data anyway and determine with some processing or is it absolutely no way to get around it for some types of credentials? I'm see. Manu Sporny: Yep. Good question. 00:50:00 Manu Sporny: Benjamin, you're up. Benjamin Young: I think I take the stance that the wallet should be generally distrusting of render methods even… Benjamin Young: though they come with the credential that it should be suspicious. and I think forcing the render method developer to be explicit about what data they depend on in whatever their render method is. even if the contents of that template is somehow binary to tell the wallet this is the stuff I need to render properly and then it's on the wallet to not overexpose the user and to also accommodate the render method with the things it asked for. and potentially, it's conceivable that the user might say, I don't actually want this stuff rendered. So, you could go farther with it. Benjamin Young: But I think at minimum if this is a required field that builds the bridge between the data in the credential and what the render method needs for the template. then that becomes a forcing function to make the render method expose what it's doing in an easily parsible and potentially even selectable way by the wallet on behalf of with the help of the user. and then the person developing the render method has to do it to get any data to begin with. because it's a little freaky when you do a render method now and many of the experience experiments we've done over the past year what am I going to feed into this thing? Benjamin Young: I could feed it the whole credential and often you just end up being like here's the credential because you need valid from which is on the top and so you can't just relegate yourself to credential subject which initially feels like all you would need but you want issuer data sometimes you want all this other stuff so you end up just saying here you go render method here's the whole credential which then gives them the potential to expose all kinds of data which it probably shouldn't have access to. Benjamin Young: So at least here it must be explicit about what it wants. Manu Sporny: Plus one to that. Manu Sporny: Demetri, you're You might be muted. Dimmitri Dmitri Zagidulin: Whoops. I wonder if it makes sense for us instead of an array of strings to do an array of objects, and that's a constant heristic whenever you see an array of strings, always pause and ask this should probably be array of objects. But the reason I bring it up is to our earlier comment about processing functions, You could easily see instead of just field identifiers set of tupils such as valid from comma pass it to this date formatting function right so what I'm going to saying is we may want to leave ourselves room to add additional metadata to the field identifiers so objects not strings Manu Sporny: That's an interesting point. I think so the other proposal here was to because Mustache has the ability to talk about functions that you expose that would do the kinds of transformations that Coyote was mentioning and… Dmitri Zagidulin: I see. Manu Sporny: we were and if we had that then we could still do strings but I think your point still stands which is like what if we want to do something else we're stuck with strings Manu Sporny: Or we could say strings and… Manu Sporny: objects where the object kind of future proofs us from mistakes we made,… Dmitri Zagidulin: Yeah. Yeah. Manu Sporny: the first. go ahead, Benjamin. Benjamin Young: Yeah. … Benjamin Young: mustache functions are useful for string formatting mostly and almost exclusively. they can't really look around the data object. they can only take in what's currently in that context of that processing moment. but where objects in render property could be useful is signaling that you have a date for example that you need to run that function on. because I think with this render method related to mustache, the question are we going to provide a set of fixed functions that wallets have to or that the render method has to implement or plan to implement to be compliant with rendering it that are certain date formats or whatever. or are we going to make it more broadly extensible? 00:55:00 Benjamin Young: But the object format could be useful there for at least signaling that this is a date or I wanted it to be treated that way because you can hard to explain but in mustache the function is It's just another property really that's prepopulated inside the view model. so who does that and… Benjamin Young: when they do it and whether that's in the spec or not is related to what other handles we might want in render property. Manu Sporny: Yep. yes,… Manu Sporny: all good points. yeah, if we're going to do functions, we would almost certainly have to define it in the specification. The step after that is to quite literally make the object take a function like a JavaScript function that's executed at runtime which is probably a bridge too far. Manu Sporny: there is another argument that hey if you want all that kind of flexibility use an HTML file and dump scripts into that HTML file and you can do all the processing you want to using JavaScript but then of course it's like beware the correlatability characteristics of things like that and the ability to run arbitrary endless loops that eat Manu Sporny: CPU cycles and that sort of thing. but those are decisions I think we're going to have to have to make eventually here. noting the time, we are out of time but thank you very much for the wonderful discussion today. I think we got a lot of stuff out on the table. I'm hoping some folks were able to write some of that down. I certainly was not if there is one of those items that you really want to make sure sticks around and is applied to the R, please write it down or raise an issue. a lot of the things we discussed seemed like issues that need more detailed conversation. We didn't get through all of it. there's this SVG Mustache render suite. Manu Sporny: here we have different types of expressions that we can use where you can put the template inline. You can link to a template and provide a digest multibbase. or you can even put the entirety of the render method on a remote resource. That's possible too. so we need to cover those items. And then we didn't touch on the NFC render suite either. so we'll come back next week and discuss those items. In the meantime, please do take a look at pull request 17. Provide any feedback that you would like on that. after we give it, another week or so, we will probably merge it down unless there's some standing objections to any particular part of it. Manu Sporny: And then again remember we're not trying to get it perfect. We're just trying to get it good enough so that when it goes into the verifiable credential working group people have a good kind of understanding of what we were going for here. And of course many of us are going to show up in the verifiable credential working group to continue work on it. Manu Sporny: Yes exactly right. same time I have made that request a while ago. Dmitri Zagidulin: Are we going to have same time next week? Dmitri Zagidulin: Any chance we can add it to the CCG calendar? got it. Okay, I'll poke Harrison. Manu Sporny: Okay. Dmitri Zagidulin: Dmitri Zagidulin: Yeah, got it. Thanks. Manu Sporny: Thanks. yeah, there are a number of meetings like this that are still not on the CCG calendar and I think they're having some technical difficulties getting it updated. thanks everyone. Have a wonderful rest of your day and we will meet again next week. Take care. Bye. Meeting ended after 00:59:18 👋 *This editable transcript was computer generated and might contain errors. People can also change the text after it was created.*
Received on Wednesday, 16 April 2025 22:06:00 UTC