Introducing an ID Tuple : A smart data structure for ID management and transfer
We, at DID, had to decide on a data structure and a data unit for ID transactions. As per our agenda, we wanted the basic data unit to provide the user complete control and visibility of the data being transferred. Say Hello to the ID tuple: it is a registration form request, it is a filled-in registration form, it is a programmable unit of ID data and it provides YOU visibility of your data.
So imagine the current internet but with our ID tuple; you always send in a complete registration form filled-in, the data is always yours and all permissions attached to the data are implicitly stated at the time of user input. Just clicking an “I Agree” button to change permissions is not enough anymore. The complete registration form as-is with storage and usage permissions is shown to a user. The idea is simple: the users are in control of what they send through.
Versatility of an ID Tuple:
- An ID tuple is used for requesting a username:password on a website, for requesting a user to show his Govt-issued ID card, to validate that a user is the actual owner of the ID he is showing and so much more …
- An ID tuple fits in perfectly in a Financial environment as well as an IoT-centric application. We made the ID tuple to work across the board.
- Given our real-world implentations and pilots, we tweaked the ID tuple a little to provide interoperability: you will soon be seeing an ID tuple in action on a traffic warden’s handheld device being translated on to a paper ticket.
A programatic unit of ID data:
From the code samples and examples, our viewers can see that each and every field comes with a regular expression check field. This will be implemented in the next release in our software. But provision for an “intellgent” unit of data exists in an ID tuple right from the start.
An alternative data structure:
Our readers will find the DID ID tuple standard to be in their favour. This is where we are different from the other solutions out there. Our IDs are issued by you (the user) and the ID tuple provides you (the user) visibility and record of data being provided. The private keys are stored at the user’s end and the “cookies” are also in the user’s control.
An ID stored on a user’s device is also an ID tuple!
An ID Tuple presenting a sample Polling card issued to a user during our Sierra Leone pilot study in March 2018 (More here: https://decentralized.id/sl-case-study/). The ID tuple below is a user’s ID stored on his device:
{"type": "issue","addr": "0x489ed357adbf19cfe8d671d105ac1549e088db64","pri": "133e362332acee4f", //of course this isn't correct"auth": "0x64a68894491fB2b4EC2f6E70096eA5c35305470F","secret": "300f43ca92aa68ebd434f932acd6a4cf2a","hash": "d0c1ebeda8cc9c0bb59c4f968fcf26e63a26804d83d1fc84f1578764755018864138fe33f8497478917596dd610f67db3eda64b65635f27a1d262497e3be6b3e","name": "SL Election Pilot","fields": [{"name": "Number","descr": "Voter ID number","type": "int","optional": "0","usage": "As per policy","storage": "Stored on Server for 1 year","regex": "","regex_err": "Min 3 chars","instructions": "Min 3 chars","value": "2501578"},{"name": "Ward","descr": "Polling Ward","type": "int","optional": "0","usage": "As per policy","storage": "Stored on Server for 1 year","regex": "","regex_err": "Min 3 chars","instructions": "Min 3 chars","value": "386"},{"name": "District","descr": "Voting District","type": "int","optional": "0","usage": "As per policy","storage": "Stored on Server for 1 year","regex": "","regex_err": "Min 3 chars","instructions": "Min 3 chars","value": "Western Area Rural"},{"name": "Last Name","descr": "Voters last name","type": "str","optional": "0","usage": "As per policy","storage": "Stored on Server for 1 year","regex": "","regex_err": "Min 3 chars","instructions": "Min 3 chars","value": "Voter-a4f0c27e"},{"name": "Other Names","descr": "Voters other names","type": "str","optional": "0","usage": "As per policy","storage": "Stored on Server for 1 year","regex": "","regex_err": "Min 3 chars","instructions": "Min 3 chars","value": "Voter-a4f0c27e"},{"name": "Sex","descr": "Voters sex","type": "str","optional": "0","usage": "As per policy","storage": "Stored on Server for 1 year","regex": "","regex_err": "","instructions": "","value": "M"},{"name": "Date of Birth","descr": "Voters DOB","type": "str","optional": "0","usage": "As per policy","storage": "Stored on Server for 1 year","regex": "","regex_err": "Fully qualified date","instructions": "Min 3 chars","value": "September 19, 1990"},{"name": "Address","descr": "Voters Address","type": "str","optional": "0","usage": "As per policy","storage": "Stored on Server for 1 year","regex": "","regex_err": "Min 3 chars","instructions": "Min 3 chars","value": "32 Winchester Street"},{"name": "Village","descr": "Voters Village","type": "str","optional": "0","usage": "As per policy","storage": "Stored on Server for 1 year","regex": "","regex_err": "Min 3 chars","instructions": "Min 3 chars","value": "Ober Funkia"}]}
We are releasing a new version of our Technical white paper soon. The new release finalizes the ID tuple standard used in our current system.
This basic unit of data gets transferred, filled-in by a user, presented to an authority, verified by an authority and as is an ID in itself.