owned this note changed 3 years ago
Linked with GitHub

Rebase VCs

Priorization

First, defining verification flows + test vectors for:

  1. Github
  2. Discord

Verification Flows

The goal of a Rebase verification flow is to provide the user with an attestation which is verified by a third-party witness that the user owns a certain identifier on a target system (e.g., Github, Discord, DNS).

To allow the witness to attest that the user owns a target identifier, the user typically needs to publish a statement that proves they own the target identifer on the target which is linked to their user identifier (e.g., DID, Ethereum Account). The witness would then verify the statement and issue a W3C Verifiable Credential and includes evidence that was used for verification (e.g., URI to Twitter post).

The statment has another function which is to give implicit consent to publish the content on the target system. It also tells the user why something is published. This is important for GDPR reasons.

A statement is a quadruple comprising user identifier, target system identifier, human-readable message, and a target system identifier name.

Internationalization of the statement is out of scope for now.

Example:

"I am attesting that this GitHub handle {awoie} is linked to the {Ethereum Address} {0x...}."

The generic verification flow is as follows:

  • User creates and publishes statement on target system.
  • Witness verifies statement and linkage.
  • Witness issues a W3C VC with an evidence property that contains information on what and how it was verified, so other witnesses can do the verification themselves. The W3C VC contains the witness' issuer identifier and is signed by the witness.
  • Witness provides the W3C VC to the user. This is out of scope of Rebase.

The user can then provide the W3C VC to verifying parties. A verifier would need to trust the witness but can use the evidence material to verify the witness was genuine. This allows the verifier to avoid registering with third-party platforms to for example use their API and to reduce implementation complexity and costs.

Test Vectors

Discord

{ "@context":[ "https://www.w3.org/2018/credentials/v1", { "sameAs":"https://schema.org/sameAs", "DiscordVerification":{ "@id":"https://rebase.xyz/context/DiscordVerification", "@context":{ "@version":1.1, "@protected":true, "url":"https://schema.org/URL" } }, "DiscordVerificationMessage":{ "@id":"https://tzprofiles.com/DiscordVerificationMessage", "@context":{ "@version":1.1, "@protected":true, "handle":"https://tzprofiles.com/handle", "timestamp":{ "@id":"https://tzprofiles.com/timestamp", "@type":"https://www.w3.org/2001/XMLSchema#dateTime" }, "channelId":"https://tzprofiles.com/DiscordChannelId", "messageId":"https://tzprofiles.com/DiscordMessageId" } } } ], "evidence":{ "type":[ "DiscordVerificationMessage" ], "handle":"{discordHandle}", "messageId":"{discord_message_id}", "channelId":"{discord_channel_id}", "timestamp":"2010-01-01T19:23:24Z" }, "issuanceDate":"2010-01-01T19:23:24Z", "id":"urn:uuid:{uuid_v4}", "type":[ "VerifiableCredential", "DiscordVerification" ], "credentialSubject":{ "id":"did:pkh:...", "sameAs":"urn:discord:{discord_handle}", "issuer":"did:web:..." }, "proof":{ ... } }

DNS

{ "@context":[ "https://www.w3.org/2018/credentials/v1", { "sameAs":"https://schema.org/sameAs", "DnsVerification":"https://tzprofiles.com/DnsVerification", "DnsVerificationMessage":{ "@id":"https://tzprofiles.com/DnsVerificationMessage", "@context":{ "@version":1.1, "@protected":true, "timestamp":{ "@id":"https://tzprofiles.com/timestamp", "@type":"https://www.w3.org/2001/XMLSchema#dateTime" }, "dnsServer":"https://tzprofiles.com/dnsServer" } } } ], "evidence":{ "type":[ "DnsVerificationMessage" ], "dnsServer":"{dnsServer}", "timestamp":"2010-01-01T19:23:24Z" }, "issuanceDate":"2010-01-01T19:23:24Z", "id":"urn:uuid:{uuid_v4}", "type":[ "VerifiableCredential", "DnsVerification" ], "credentialSubject":{ "id":"did:pkh:...", "sameAs":"dns:{domain}" }, "issuer":"did:web:...", "proof":{ ... } }

Github

{ "@context":[ "https://www.w3.org/2018/credentials/v1", { "sameAs":"https://schema.org/sameAs", "GitHubVerification":{ "@id":"https://tzprofiles.com/GithubVerification", "@context":{ "@version":1.1, "@protected":true, "url":"https://schema.org/URL" } }, "GitHubVerificationMessage":{ "@id":"https://tzprofiles.com/GitHubVerificationMessage", "@context":{ "@version":1.1, "@protected":true, "timestamp":{ "@id":"https://tzprofiles.com/timestamp", "@type":"https://www.w3.org/2001/XMLSchema#dateTime" }, "gistId":"https://tzprofiles.com/gistId", "gistVersion":"https://tzprofiles.com/gistVersion", "handle":"https://tzprofiles.com/handle" } } } ], "evidence":{ "type":[ "GithubVerificationMessage" ], "handle":"{github_username}", "gistVersion":"{gist_version}", "gistId":"{gist_id}", "timestamp":"2010-01-01T19:23:24Z" }, "issuanceDate":"2010-01-01T19:23:24Z", "id":"urn:uuid:{uuid_v4}", "type":[ "VerifiableCredential", "GitHubVerification" ], "credentialSubject":{ "id":"did:pkh:...", "sameAs":"https://github.com/{github_handle}" }, "issuer":"did:web:...", "proof":{ ... } }

Instagram

{ "@context":[ "https://www.w3.org/2018/credentials/v1", { "sameAs":"https://schema.org/sameAs", "InstagramVerification":{ "@id":"https://tzprofiles.com/InstagramVerification", "@context":{ "@version":1.1, "@protected":true, "url":"https://schema.org/URL" } }, "InstagramVerificationPublicPost":{ "@id":"https://tzprofiles.com/InstagramVerificationPublicPost", "@context":{ "@version":1.1, "@protected":true, "handle":"https://tzprofiles.com/handle", "timestamp":{ "@id":"https://tzprofiles.com/timestamp", "@type":"https://www.w3.org/2001/XMLSchema#dateTime" }, "postUrl":"https://tzprofiles.com/postUrl" } } } ], "evidence":{ "type":[ "InstagramVerificationPublicPost" ], "handle":"{instagram_handle}", "postUrl":"{instagram_post_url}", "timestamp":"2010-01-01T19:23:24Z" }, "issuanceDate":"2010-01-01T19:23:24Z", "id":"urn:uuid:{uuid_v4}", "type":[ "VerifiableCredential", "InstagramVerification" ], "credentialSubject":{ "id":"did:pkh:...", "sameAs":"https://instagram.com/{instagram_handle}" }, "issuer":"did:web:...", "proof":{ ... } }

Twitter

{ "@context":[ "https://www.w3.org/2018/credentials/v1", { "sameAs":"https://schema.org/sameAs", "TwitterVerification":{ "@id":"https://tzprofiles.com/TwitterVerification", "@context":{ "@version":1.1, "@protected":true, "url":"https://schema.org/URL" } }, "TwitterVerificationPublicTweet":{ "@id":"https://tzprofiles.com/TwitterVerificationPublicTweet", "@context":{ "@version":1.1, "@protected":true, "handle":"https://tzprofiles.com/handle", "timestamp":{ "@id":"https://tzprofiles.com/timestamp", "@type":"https://www.w3.org/2001/XMLSchema#dateTime" }, "tweetId":"https://tzprofiles.com/tweetId" } } } ], "evidence":{ "type":[ "TwitterVerificationPublicTweet" ], "handle":"{twitter_handle}", "postUrl":"{twitter_post_url}", "timestamp":"2010-01-01T19:23:24Z" }, "issuanceDate":"2010-01-01T19:23:24Z", "id":"urn:uuid:{uuid_v4}", "type":[ "VerifiableCredential", "TwitterVerification" ], "credentialSubject":{ "id":"did:pkh:...", "sameAs":"https://twitter.com/{twitter_handle}" }, "issuer":"did:web:...", "proof":{ ... } }

Ethereum

{ "@context":[ "https://www.w3.org/2018/credentials/v1", { "EthereumVerification":{ "@id":"https://tzprofiles.com/EthereumVerification", "@context":{ "@version":1.1, "@protected":true, "sameAs":"https://schema.org/sameAs", "wallet":"https://schema.org/Text" } }, "EthereumAddressControl":{ "@id":"https://tzprofiles.com/EthereumAddressControl", "@context":{ "@version":1.1, "@protected":true, "sameAs":"https://schema.org/sameAs", "address":"https://schema.org/Text" } } } ], "issuanceDate":"2010-01-01T19:23:24Z", "id":"urn:uuid:{uuid_v4}", "type":[ "VerifiableCredential", "EthereumAddressControl" ], "credentialSubject":{ "address":"{eth_address}", "sameAs":"{assoc_address}" }, "issuer":"did:pkh:eth:{eth_address}", "proof":{ ... EIP712 ... } }

Personal Profile

{ "@context":[ "https://www.w3.org/2018/credentials/v1", { "alias":"https://schema.org/name", "description":"https://schema.org/description", "website":"https://schema.org/url", "logo":"https://schema.org/logo", "BasicProfile":"https://tzprofiles.com/BasicProfile" } ], "id":"urn:uuid:{uuid}", "issuer":"did:pkh:...", "issuanceDate":"2010-01-01T19:23:24Z", "type":[ "VerifiableCredential", "BasicProfile" ], "credentialSubject":{ "id":"did:pkh:...", "alias":"{alias}", "description":"{description}", "website":"{website}", "logo":"{logo}" }, "proof":{ ... } }

Telegram

TBD

Discourse

TBD

Select a repo