Skip to content

Instantly share code, notes, and snippets.

@janpieterz
Last active August 18, 2016 20:45
Show Gist options
  • Save janpieterz/f392e6314f606b03e47ea565fb3d0bc4 to your computer and use it in GitHub Desktop.
Save janpieterz/f392e6314f606b03e47ea565fb3d0bc4 to your computer and use it in GitHub Desktop.
Blockstack partial identity disclosure

In the podcast Epicenter Bitcoin 101 Ryan descibes a method of selectively disclosing information to a third party ( ~50:00 - 55:00).

In below description we use a simplified version of a Person to demonstrate the concept.

{
  name: 'Jan-Pieter Zoutewelle',
  birthDate: { value:  '18-02-1991', subValues: [{'above21': true, 'above18': true}]},
  birthPlace: 'Ridderkerk, The Netherlands'
}

Using things like the schema.org [Person] (https://schema.org/Person) you have a profile of a user with properties. This can be extended so, for example, in certain domains you could add certifications or other more specific pieces of data without breaking schema compatability.

The disclosure work as follows:

The different pieces of information on a profile can be split up (name, birth date, birth place, children etc) and tokenized (in this example sha256), each signed by a different key. The signatures show that, using the public key of self.2 or gov.nl it indeed is the token, proving the legitimacy of the token provided.

At this point no actual data has been transfered to anyone, purely that this token is signed by the applicable government and by the self identity, who in this example is still private (no id or any other identifying information is linked if the self signature is unique for this specific item).

name: {
    token: 'e7e7ef4d26adfd9fa28dd61a6d61ca82a2de0b7bbd3674def26282d111751e60',     
    signatures: [
		    {id: 'self.2' , signature: 'abc'}, 
			{id: 'gov.nl', signature: 'xyz'}
		]
	}

This makes the approach very privacy conscious because a user can selectively choose to disclose tokens and only when needed more and more of the identity can be revealed. A bar has no need for my name, social security number (in NL: BSN), they just need to know that I can sign the date of birth > drinking age token and it matches, and that the government has signed it too, proving I'm above the drinking age.

If the actual data is needed (for example, for date of birth a subtype could exists that says > drinking age, but also the full date of birth can be signed and approved) the user can give this data, prove that it leads to this token that is signed by the government and the self, and disclosing still only that part (the date of birth) without the actual identity.

Using methods like the BIP32 the users identity can prove that the keys signing these subsets of data do, in the end, belong to this blockchain id.

If the right data is provided, parties could walk the tree of descendant public keys and form a whole identity.

@shea256
Copy link

shea256 commented Aug 18, 2016

This is exactly right! Nice work on the writeup.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment