<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://en.bitcoin.it/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ionux</id>
	<title>Bitcoin Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://en.bitcoin.it/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ionux"/>
	<link rel="alternate" type="text/html" href="https://en.bitcoin.it/wiki/Special:Contributions/Ionux"/>
	<updated>2026-04-13T17:04:12Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Identity_protocol_v1&amp;diff=55590</id>
		<title>Identity protocol v1</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Identity_protocol_v1&amp;diff=55590"/>
		<updated>2015-03-19T23:30:59Z</updated>

		<summary type="html">&lt;p&gt;Ionux: Updated broken link to one of the example SIN classes.&lt;/p&gt;
&lt;hr /&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&#039;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&#039;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;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;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&#039;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/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;/div&gt;</summary>
		<author><name>Ionux</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Identity_protocol_v1&amp;diff=51547</id>
		<title>Identity protocol v1</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Identity_protocol_v1&amp;diff=51547"/>
		<updated>2014-10-02T18:25:03Z</updated>

		<summary type="html">&lt;p&gt;Ionux: Corrected broken link.&lt;/p&gt;
&lt;hr /&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&#039;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&#039;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;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;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&#039;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/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/php-ectools/blob/master/ECTools/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;/div&gt;</summary>
		<author><name>Ionux</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Identity_protocol_v1&amp;diff=49448</id>
		<title>Identity protocol v1</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Identity_protocol_v1&amp;diff=49448"/>
		<updated>2014-08-04T23:09:54Z</updated>

		<summary type="html">&lt;p&gt;Ionux: /* Creating a SIN */ Updated example to use compressed key instead of deprecated uncompressed key&lt;/p&gt;
&lt;hr /&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;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;
* 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&#039;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 below 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&#039;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;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;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;
DANGER:  This section is under heavy development and discussion.&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&#039;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/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/php-ectools/blob/master/ecsingen.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;/div&gt;</summary>
		<author><name>Ionux</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=User:Ionux&amp;diff=49333</id>
		<title>User:Ionux</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=User:Ionux&amp;diff=49333"/>
		<updated>2014-08-02T18:27:08Z</updated>

		<summary type="html">&lt;p&gt;Ionux: Created page with &amp;quot;Contributer payment sent to: 17FnxSuDF8xWEXug4VinTJ9h7hdvL7C6be&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Contributer payment sent to: 17FnxSuDF8xWEXug4VinTJ9h7hdvL7C6be&lt;/div&gt;</summary>
		<author><name>Ionux</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Identity_protocol_v1&amp;diff=49332</id>
		<title>Identity protocol v1</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Identity_protocol_v1&amp;diff=49332"/>
		<updated>2014-08-02T18:19:37Z</updated>

		<summary type="html">&lt;p&gt;Ionux: /* Creating a SIN */ Added example SIN creation with steps performed to further elucidate the process&lt;/p&gt;
&lt;hr /&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;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;
* 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&#039;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 below 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 public key:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
0445286F7B5CAB821CED2184AD69D5FADBF81A8B0334243373D89865D741AE6AA2FB50104BDD66FF40FF5E64EF8FDBFC48096F49A9863242F3FB7FC86B2D222A3D&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;
: a935ced8278c80da3f5fe555906e847d894b8847d5dde55481f48862f9c5a05f&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;
: d5caffd3e024269af98ad6f6221929e228151579&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;
: 0F02d5caffd3e024269af98ad6f6221929e228151579&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;
: 73a06d3a5cd12105c67045f0161cb028ecfa7c4597e21a0056c31586aab75bad&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;
: 73a06d3a&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;
: 0F02d5caffd3e024269af98ad6f6221929e22815157973a06d3a&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;
: TfH2s4hD98LthqXendoFvTj3486JffDzwrZ&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&#039;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;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;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;
DANGER:  This section is under heavy development and discussion.&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&#039;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/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/php-ectools/blob/master/ecsingen.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;/div&gt;</summary>
		<author><name>Ionux</name></author>
	</entry>
	<entry>
		<id>https://en.bitcoin.it/w/index.php?title=Identity_protocol_v1&amp;diff=49331</id>
		<title>Identity protocol v1</title>
		<link rel="alternate" type="text/html" href="https://en.bitcoin.it/w/index.php?title=Identity_protocol_v1&amp;diff=49331"/>
		<updated>2014-08-02T17:49:50Z</updated>

		<summary type="html">&lt;p&gt;Ionux: /* Implementations */  Added my pure PHP implementation for SIN generation hosted on GitHub &amp;amp; MIT licensed&lt;/p&gt;
&lt;hr /&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;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;
* 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&#039;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 below 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;
==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&#039;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;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;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;
DANGER:  This section is under heavy development and discussion.&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&#039;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/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/php-ectools/blob/master/ecsingen.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;/div&gt;</summary>
		<author><name>Ionux</name></author>
	</entry>
</feed>