Public Profile¶
The public profile allows an organization to share public information about itself in the form of a W3C Verifiable Presentation (VP).
The public profile can be seen as a very simple, limited implementation of the Identity Hub concept for an organization.
Rationale¶
Provide basc public information without relying on DIDcomm and Indy Credentials (Anoncreds), i.e. such that even a human with a browser and a ledger explorer can read the data.
Allow the integration of documents (self-attested data) and credentials (third-party attested data)
Allow the public profile to be a “static” ressource, i.e. a request should not require access to cryptographic keys.
Design¶
Profile Endpoint¶
The service that returns the public profile VP is advertised in the DID document as a service endpoint of type profile
.
{
"service":
[{
"type":"profile",
"serviceEndpoint":"http://localhost:8080/profile.jsonld"
}]
}
Organizational Profile Credential¶
The Organizational Profile Credential contains basic organizational master data and provides the means for a self description of the organization. It is natively defined as W3C Verifiable Credential (VC) in JSON-LD. Hence it supports a richer structure with nested objects and arrays. The JSON-LD Context is available here.
Indy Credentials¶
In order to embed Indy Anconcreds in the public profile, we wrap their content in a dynamically generated VC with an additional Indy Credential JSON-LD context. The VC itself is not directly cryptographically verifiable, but contains all information required to request a presentation (proof) via DIDcomm. The intent is that an organization self-attests that it holds these credentials and provides the content. A business partner supporting DIDcomm is able to request a verification if required.
Example of a wrapped in Indy Credential¶
Given an Indy Credential based on this schema, we dynamically create the following unsigned VC.
It becomes verifiably self-attested by including it in a signed VP (see example at the end). The actual content of the original credential gets included in the credentialSubject
.
{
"@context":[
"https://www.w3.org/2018/credentials/v1",
{
"@context":{
"sc":"did:sov:F6dB7dMVHUQSC64qemnBi7:2:bank_account:1.0",
"bic":{
"@id":"sc:bic"
},
"iban":{
"@id":"sc:iban"
}
}
},
"https://raw.githubusercontent.com/iil-network/contexts/master/indycredential.jsonld"
],
"type":[
"VerifiableCredential",
"IndyCredential"
],
"id":"urn:583100e7-9141-4444-b3bf-3bd27fb1e33e",
"issuanceDate":"2020-12-09T19:21:58Z",
"credentialSubject":{
"bic":"456",
"iban":"1234"
},
"label":"1234",
"indyIssuer":"did:sov:F6dB7dMVHUQSC64qemnBi7",
"schemaId":"F6dB7dMVHUQSC64qemnBi7:2:bank_account:1.0",
"credDefId":"F6dB7dMVHUQSC64qemnBi7:3:CL:571:bank_account_no_revoc"
}
Verifiable Presentation¶
The VP can be verified with the public key listed in the authentication section of the DID document.
Example of a public profile¶
The following example shows a public profile that consists of a VP including two verifiable credentials.
Organization Profile Credential
Bank Account Indy Credential
{
"@context":[
"https://www.w3.org/2018/credentials/v1"
],
"type":[
"VerifiablePresentation"
],
"verifiableCredential":[
{
"@context":[
"https://www.w3.org/2018/credentials/v1",
"https://raw.githubusercontent.com/iil-network/contexts/master/masterdata.jsonld",
"https://raw.githubusercontent.com/iil-network/contexts/master/labeled-credential.jsonld"
],
"type":[
"VerifiableCredential",
"LabeledCredential",
"OrganizationalProfileCredential"
],
"id":"urn:992c5897-e897-484f-99b2-33070593a128",
"issuer":"did:sov:VoSfM3eGaPxduty34ySygw",
"issuanceDate":"2020-12-14T14:48:08Z",
"credentialSubject":{
"id":"did:sov:VoSfM3eGaPxduty34ySygw",
"type":"Legal Entity",
"altName":"",
"legalName":"Robert Bosch GmbH (ILL)",
"identifier":[
{
"id":"123",
"type":"D-U-N-S"
}
],
"registeredSite":{
"id":"ff35b805-c7c2-49aa-bb1c-d90383fd3919",
"address":{
"city":"Gerlingen",
"region":"",
"country":"Germany",
"zipCode":"79999",
"streetAddress":"Mauserstrasse 1"
}
}
},
"label":"Robert Bosch GmbH (ILL)"
},
{
"@context":[
"https://www.w3.org/2018/credentials/v1",
{
"@context":{
"sc":"did:sov:M6Mbe3qx7vB4wpZF4sBRjt:2:bank_account:1.0",
"bic":{
"@id":"sc:bic"
},
"iban":{
"@id":"sc:iban"
}
}
},
"https://raw.githubusercontent.com/iil-network/contexts/master/indycredential.jsonld"
],
"type":[
"VerifiableCredential",
"IndyCredential"
],
"id":"urn:583100e7-9141-4444-b3bf-3bd27fb1e33e",
"issuanceDate":"2020-12-09T19:21:58Z",
"credentialSubject":{
"bic":"456",
"iban":"1234"
},
"label":"1234",
"indyIssuer":"did:sov:M6Mbe3qx7vB4wpZF4sBRjt",
"schemaId":"M6Mbe3qx7vB4wpZF4sBRjt:2:bank_account:1.0",
"credDefId":"M6Mbe3qx7vB4wpZF4sBRjt:3:CL:571:bank_account_no_revoc"
}
],
"proof":{
"type":"Ed25519Signature2018",
"created":"2020-12-14T14:48:08Z",
"verificationMethod":"did:sov:VoSfM3eGaPxduty34ySygw#key-1",
"proofPurpose":"authentication",
"jws":"eyJhbGciOiAiRWREU0EiLCAiYjY0IjogZmFsc2UsICJjcml0IjogWyJiNjQiXX0..fYhHd3qJlGZjsiDMgYH-0cFlhgPlvW4NQw5pkKQX5KN0_jBKhbjJwIwzrplo9tPDASB2tRJAXnWBykgKPz8FAQ"
}
}