<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://en.zaoniao.it/index.php?action=history&amp;feed=atom&amp;title=Identity_protocol_v1</id>
	<title>Identity protocol v1 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://en.zaoniao.it/index.php?action=history&amp;feed=atom&amp;title=Identity_protocol_v1"/>
	<link rel="alternate" type="text/html" href="http://en.zaoniao.it/index.php?title=Identity_protocol_v1&amp;action=history"/>
	<updated>2026-05-15T07:57:51Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.32.0</generator>
	<entry>
		<id>http://en.zaoniao.it/index.php?title=Identity_protocol_v1&amp;diff=5425&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;  ==Design goals==  Fully decentralized, anonymous, secure identity.  A SIN (&quot;Secure Identity Number&quot; or &quot;System Identification Number&quot;) is the unique record identifier by whi...&quot;</title>
		<link rel="alternate" type="text/html" href="http://en.zaoniao.it/index.php?title=Identity_protocol_v1&amp;diff=5425&amp;oldid=prev"/>
		<updated>2019-06-03T04:16:41Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;  ==Design goals==  Fully decentralized, anonymous, secure identity.  A SIN (&amp;quot;Secure Identity Number&amp;quot; or &amp;quot;System Identification Number&amp;quot;) is the unique record identifier by whi...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
==Design goals==&lt;br /&gt;
&lt;br /&gt;
Fully decentralized, anonymous, secure identity.&lt;br /&gt;
&lt;br /&gt;
A SIN (&amp;quot;Secure Identity Number&amp;quot; or &amp;quot;System Identification Number&amp;quot;) is the unique record identifier by which this identity will be known.&lt;br /&gt;
&lt;br /&gt;
Attributes:&lt;br /&gt;
* Ownership may be digitally proven&lt;br /&gt;
* Attach sequence of key-value pairs (public proof) and hashes (private proof) to your SIN record.&lt;br /&gt;
** A merkle root exists in each record, for even more private proofs.&lt;br /&gt;
* Start as anonymous; opt out of anonymity by attaching identifying key-value pairs (real.name = &amp;quot;John Smith&amp;quot;, gov.us.ssn = &amp;quot;123-45-6789&amp;quot;).&lt;br /&gt;
* Disposable&lt;br /&gt;
* All key-value pair updates digitally signed by SIN owner (key holder)&lt;br /&gt;
* Third parties may offer digital attestions:&lt;br /&gt;
** Identity Verification, Inc. digitally signs a SIN as passing their Not A Criminal/Level-1 check.&lt;br /&gt;
** Big Auction Provider, Inc. digitally signs a SIN as having a certain reputation score, on their website.&lt;br /&gt;
** Decentralized market users digitally sign one another's SINs, building a decentralized reputation&lt;br /&gt;
* Type-1 SINs:  have some creation cost, deterring spam.&lt;br /&gt;
* Type-1 SINs: Sacrifice may be digitally proven, bootstrapping root of trust from blockchain data&lt;br /&gt;
&lt;br /&gt;
tl;dr: A “master public key” generated by the user forms the root of digital trust.&lt;br /&gt;
&lt;br /&gt;
==Types of SINs==&lt;br /&gt;
&lt;br /&gt;
===Type 1 (persistent)===&lt;br /&gt;
&lt;br /&gt;
SIN_Type 0x01 (bitcoin main chain) or 0x11 (testnet)&lt;br /&gt;
&lt;br /&gt;
Type-1 SINs are intentionally scarce resources, much like bitcoins themselves.  All Type-1 SINs must conform to the sacrifice protocol described in this specification, to be considered valid.&lt;br /&gt;
&lt;br /&gt;
===Type 2 (ephemeral)===&lt;br /&gt;
&lt;br /&gt;
SIN_Type 0x02&lt;br /&gt;
&lt;br /&gt;
Type-2 SINs may be generated at any time, without network activity, much like bitcoin addresses.&lt;br /&gt;
&lt;br /&gt;
==Definitions==&lt;br /&gt;
&lt;br /&gt;
* MPK: Master Public Key.  ECDSA, using same curve as bitcoin (secp256k1).&lt;br /&gt;
* Hash160: ripemd160(sha256(data))&lt;br /&gt;
* base58_encode_check: see bitcoin source code, https://github.com/bitcoin/bitcoin/blob/master/src/base58.h&lt;br /&gt;
&lt;br /&gt;
==Creating a SIN==&lt;br /&gt;
&lt;br /&gt;
# Prefix = 0x0F&lt;br /&gt;
# SIN_Type = [0x01 | 0x02 | 0x11] -- See above for discussion of SIN types.&lt;br /&gt;
# MD = Hash160(MPK)&lt;br /&gt;
# SIN = base58_encode_check( Prefix + SIN_Version + MD )&lt;br /&gt;
# Hyphenate SIN for easier human reading if desired, inserting one hyphen after every 5th character.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example, using the compressed public key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
02F840A04114081690223B7069071A70D6DABB891763B638CC20C7EC3BD58E6C86 &lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Step 1 (SHA-256 of public key):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cb05d0fd5e76ba8ea88323fc5d3eefd09a78d8e2a5fd4955307b549657a31330&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 2 (RIPEMD-160 of Step 1):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
cb1f4a4d793731842732c153b8e9923bdb462553&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 3 (Prefix + SIN_Version + Step 2):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
0F02cb1f4a4d793731842732c153b8e9923bdb462553&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 4 (Double SHA-256 of Step 3):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
1a4214cdd79f55883263be8118d571c112cd4dbc9f8542d30daebd1231b522e9&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 5 (Checksum):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
1a4214cd&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Step 6 (Step 5 + Step 3):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
0F02cb1f4a4d793731842732c153b8e9923bdb4625531a4214cd&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SIN (Base58 encoded):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
TfG4ScDgysrSpodWD4Re5UtXmcLbY5CiUHA&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Creating sacrifice transactions==&lt;br /&gt;
&lt;br /&gt;
Creation cost is attached to decentralized identity by means of sacrificing a small amount of value.&lt;br /&gt;
&lt;br /&gt;
An implementation of [https://en.bitcoin.it/wiki/Fidelity_bonds#Announce.2FCommit_Sacrifices Announce/Commit Sacrifices].  That author's feedback on this protocol was very helpful.&lt;br /&gt;
&lt;br /&gt;
# MPK = master ECDSA public key (compressed)&lt;br /&gt;
# BH = current block height&lt;br /&gt;
# Create and sign transaction T2. Broadcast if desired.&lt;br /&gt;
## must include Hash160(MPK) OP_TRUE anyone-can-spend output with value &amp;amp;gt;= 0.001BTC&lt;br /&gt;
## nlocktime = BH + 144 blocks&lt;br /&gt;
## no more than 1000 bytes in size&lt;br /&gt;
# Create, sign and broadcast transaction T1&lt;br /&gt;
## must include OP_RETURN serialized(T2) output as last txout&lt;br /&gt;
&lt;br /&gt;
==Validating the root identity information==&lt;br /&gt;
&lt;br /&gt;
# B1 = block w/ T1&lt;br /&gt;
# B2 = block w/ T2&lt;br /&gt;
# Verify B2 height - 144 &amp;amp;gt;= B1 height.&lt;br /&gt;
# Verify announced T2 is valid&lt;br /&gt;
# Verify mined T2 spends same inputs as announced T2 (not equal to account for [[Transaction Malleability]])&lt;br /&gt;
# Fail and waste sacrifice if not.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thus a minimal root record is MPK and is provably&lt;br /&gt;
* linked to the sacrifices&lt;br /&gt;
* MPK starts a new chain of digital signature trust, for further record updates&lt;br /&gt;
&lt;br /&gt;
==SIN record==&lt;br /&gt;
&lt;br /&gt;
A SIN record is a series of hashes or key/value pairs, validated by MPK digital signature.  Each SIN record has a stable binary encoding designed to ensure stable hash values.  This scheme is intentionally mirroring bitcoin's block header/merkle scheme.&lt;br /&gt;
&lt;br /&gt;
Data types:&lt;br /&gt;
* uint32_t: an unsigned, little endian integer&lt;br /&gt;
* uint256_t: bitcoin-like 256-bit hash value&lt;br /&gt;
&lt;br /&gt;
Layout of a SIN record:&lt;br /&gt;
* uint32_t magic number (and/or version number) == 0x88, 0x41, 0x92, 0xA4&lt;br /&gt;
* uint256_t merkle root&lt;br /&gt;
* uint32_t data record count&lt;br /&gt;
* [list of data records]&lt;br /&gt;
* Signature&lt;br /&gt;
&lt;br /&gt;
Layout of a data record:&lt;br /&gt;
* uint32_t: record type (== 0x1 for hash, 0x2 for key/value pair)&lt;br /&gt;
* [data record-specific data]&lt;br /&gt;
&lt;br /&gt;
Layout of a hash data record:&lt;br /&gt;
* [32 bytes of hash data]&lt;br /&gt;
&lt;br /&gt;
Layout of a key/value data record:&lt;br /&gt;
* uint32_t key length&lt;br /&gt;
* uint32_t value length&lt;br /&gt;
* [key-length UTF8-encoded key]&lt;br /&gt;
* [value-length opaque data]&lt;br /&gt;
&lt;br /&gt;
Duplicate keys are not permitted.&lt;br /&gt;
&lt;br /&gt;
==Implementations==&lt;br /&gt;
&lt;br /&gt;
See:&lt;br /&gt;
* https://github.com/bitpay/bitauth/blob/master/lib/bitauth.js&lt;br /&gt;
* https://github.com/gasteve/node-libcoin/blob/master/SIN.js&lt;br /&gt;
* https://github.com/gasteve/node-libcoin/blob/master/SINKey.js&lt;br /&gt;
* https://github.com/ionux/phactor/blob/master/src/Sin.php&lt;br /&gt;
&lt;br /&gt;
==Future work==&lt;br /&gt;
&lt;br /&gt;
After creation, the root identity and key-value pairs must be stored $somewhere.&lt;br /&gt;
&lt;br /&gt;
After that root identity is created, additional key-value pairs may be associated with the root record via updates verified by MPK, stored in an alt-blockchain or DHT somewhere.  That is outside the scope of this minimal document, at this time.&lt;br /&gt;
&lt;br /&gt;
Key attributes of this system, like price and transaction size, are hardcoded.  It is presumed that version 2+ will improve upon this, once field experience is gained and lessons are learned.&lt;br /&gt;
&lt;br /&gt;
==Source==&lt;br /&gt;
&lt;br /&gt;
[http://bitcoin.it/ http://bitcoin.it/]&lt;br /&gt;
==See Also on BitcoinWiki==&lt;br /&gt;
* [[Nordeus]]&lt;br /&gt;
* [[The Rise and Rise of Bitcoin]]&lt;br /&gt;
* [[The 1UP Fever]]&lt;br /&gt;
* [[Shattered World]]&lt;br /&gt;
* [[Afterschool]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
		
	</entry>
</feed>