Decentralized Identifier WG
TPAC Sessions
Day 1: September 16, 2019
Chairs: Dan Burnett, Brent Zundel
Location: Hilton Fukuoka Sea Hawk, 1st Floor, Navis B
1
Welcome!
2
Logistics
3
W3C WG IPR Policy
4
Today’s agenda
5
Time | Topic | Discussion Leader |
8:30 | Welcome, Introductions, and Logistics | Chairs |
9:00 | Getting to Candidate Recommendation | Chairs |
10:00 | A short history of DIDs | Drummond Reed |
10:30 | Break | |
11:00 | Perspectives on DIDs ("DLT-based DIDs" sov/v1/btcr/eth/uport?) | Markus Sabadello |
11:30 | Perspectives on DIDs ("Unanchored DIDs" peer/key?) | Ken Ebert |
12:00 | Perspectives on DIDs ("Layer 2 DIDs" ion/stack?) | Daniel Buchner |
12:30 | Perspectives on DIDs ("Alternative DIDs" git/web/ipfs/private network) | Manu Sporny |
13:00 | Lunch | |
14:00 | Documenting Use Cases | Joe Andrieu |
15:00 | | |
15:30 | Break | |
16:00 | Technical direction | Chairs |
17:00 | CCG GitHub Issues | Chairs |
IRC and Scribes
6
| Monday | Tuesday |
AM1 | Charles | Ken Ebert |
AM2 | Joe Andrieu | Markus Sabadello |
PM1 | David Ezell | Gregg Kellogg |
PM2 | Manu Sporny | Mike Jones |
|
Introductions & Dinner
7
Potential topics for the “Open Topics” sessions
8
Getting to Candidate Recommendation
9
Getting to Candidate Recommendation (60 min)
10
DID WG Mission and Goals (Dan)
DID WG Scope (Brent)
DID WG Out of Scope (Brent)
W3C Technical Report Progression Process (Dan)
14
W3C Technical Report Process (Dan)
15
Documents and Background (Brent)
16
Charter Deliverables (Brent)
17
Timing (Dan)
18
Timing of our primary spec (Dan)
19
Aug 2021
Jul 2021
March 2021
(CR2)
Nov 2020
(CR1) .
Nov 2019
(FPWD)
May 2020
(Feature freeze)
A brief history of DIDs (Drummond, 30 min)
20
Timeline
21
2015
2016
2017
2018
2019
Spring IIW: First blockchain identity discussions
Fall IIW: Decision to begin blockchain ID projects
W3C VCTF: A Decentral- ized Hash Table for the Web
DHS: Awards 1st blockchain Identity R&D contracts
Spring IIW: DID Spec work fully underway
Fall IIW: First DID Spec nearly complete
DHS: �First DID Spec published & contract complete
DHS: �DKMS contract awarded; work begins
W3C CCG: DID Spec contributed
DHS: �DKMS Design & Architec- ture V3 published
W3C CCG: Second draft of �DID Spec
W3C CCG: Work on DID WG Charter begins
W3C: �DID WG Charter approved
W3C CCG: �Community Final�Draft of�DID Spec
DHS: �DKMS Design & Architec- ture V4 published
Where did the term “DID” come from?
22
23
24
Why did the U.S. Department of Homeland Security fund development of the DID spec?
25
Four reasons:
It never needs to change
You can look it up to discover metadata
You can prove control using cryptography
No centralized registration authority is required
26
What does a DID look like?
27
URNs (Uniform Resource Names, RFC 8141)
DIDs
28
How widely are DIDs in use today?
29
Some statistics
30
For a full history, see:
31
Morning break
32
Perspectives on DIDs - Ledger-Based (Markus, 30 min)
sov btrc eth v1
33
Markus Sabadello
Danube Tech, Decentralized Identity Foundation,�Sovrin Foundation, W3C DID WG + CCG, OASIS XDI TC
https://danubetech.com/
TPAC, Fukuoka, 16th September 2019
Ledger-Based DIDs
Introduction
The DID is “created” by writing data to the blockchain/DLT that allows the
subject to prove control of the DID. This data is secured by the blockchain/DLT.
3e89d07c2d
did:m1:3e89d07c2d
The subject creates a random identifier
as well as a key pair. The identifier is written
to the blockchain/DLT in a signed transaction,
together with the public key as well as
optional additional data.
772e635b04
did:m2:772e635b04
The subject creates a key pair. An identifier
is derived from a public key, and written to the
blockchain/DLT in a signed transaction,
together with the public key as well as�optional additional data.
The DID is “registered” by writing data to the blockchain/DLT that allows the
subject to prove control of the DID. This data is secured by the blockchain/DLT.
The subject creates a key pair. A signed�transaction is written to the blockchain/DLT�together with the public key as well as optional�additional data. The identifier is derived from
the transaction on the blockchain/DLT.
did:m3:cb7864966b
cb7864966b
a4fa7ef9fd
did:m4:a4fa7ef9fd
The subject creates a random identifier
as well as a key pair. The identifier is written
to the blockchain/DLT in a signed transaction,
together with the public key as well as
optional additional data.
did:m4:2e3e700830
did:m4:58dc4beb75
The DID can be “updated” or “deactivated” by writing�additional transactions to the blockchain/DLT.
All cumulative transactions pertaining to a DID constitute its latest state.
NYM: [18,{"dest":"WRfXPg8dantKVubE3HX8pw","identifier":�"BrYDA5NubejDVHkCYBbpY5","reqId":1501522732982387,"signature":"5HGRA...",�"verkey":"~P7F3BNs5VmQ6eVpwkNKJ5D"}]
ATTRIB: [19,{"dest":"WRfXPg8dantKVubE3HX8pw","identifier":�"WRfXPg8dantKVubE3HX8pw","raw":"0249fedf5246b...","reqId":1504718156368788,�"signature":"3jL1ZNjLAzyAm5"}]
...
...
...
DID Document
DID Registry
Sovrin Ledger
did:sov:WRfXPg8dantKVubE3HX8pw
{
"@context": "https://w3id.org/did/v1",
"id": "did:sov:WRfXPg8dantKVubE3HX8pw",
"publicKey": [
{
"id":"did:sov:WRfXPg8dantKVubE3HX8pw#key-1",
"type": "Ed25519VerificationKey2018",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
NYM: [18,{"dest":"WRfXPg8dantKVubE3HX8pw","identifier":�"BrYDA5NubejDVHkCYBbpY5","reqId":1501522732982387,"signature":"5HGRA...",�"verkey":"~P7F3BNs5VmQ6eVpwkNKJ5D"}]
ATTRIB: [19,{"dest":"WRfXPg8dantKVubE3HX8pw","identifier":�"WRfXPg8dantKVubE3HX8pw","raw":"0249fedf5246b...","reqId":1504718156368788,�"signature":"3jL1ZNjLAzyAm5"}]
...
...
...
DID Document
did:sov:WRfXPg8dantKVubE3HX8pw
Sovrin Ledger
DID Registry
{
"@context": "https://w3id.org/did/v1",
"id": "did:sov:WRfXPg8dantKVubE3HX8pw",
"publicKey": [
{
"id":"did:sov:WRfXPg8dantKVubE3HX8pw#key-1",
"type": "Ed25519VerificationKey2018",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
NYM: [18,{"dest":"WRfXPg8dantKVubE3HX8pw","identifier":�"BrYDA5NubejDVHkCYBbpY5","reqId":1501522732982387,"signature":"5HGRA...",�"verkey":"~P7F3BNs5VmQ6eVpwkNKJ5D"}]
ATTRIB: [19,{"dest":"WRfXPg8dantKVubE3HX8pw","identifier":�"WRfXPg8dantKVubE3HX8pw","raw":"0249fedf5246b...","reqId":1504718156368788,�"signature":"3jL1ZNjLAzyAm5"}]
...
...
...
DID Document
did:sov:WRfXPg8dantKVubE3HX8pw
Sovrin Ledger
DID Registry
{
"@context": "https://w3id.org/did/v1",
"id": "did:sov:WRfXPg8dantKVubE3HX8pw",
"publicKey": [
{
"id":"did:sov:WRfXPg8dantKVubE3HX8pw#key-1",
"type": "Ed25519VerificationKey2018",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
{
"@context": "https://w3id.org/did/v1",
"id": "did:sov:WRfXPg8dantKVubE3HX8pw",
"publicKey": [
{
"id":"did:sov:WRfXPg8dantKVubE3HX8pw#key-1",
"type": "Ed25519VerificationKey2018",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
NYM: [18,{"dest":"WRfXPg8dantKVubE3HX8pw","identifier":�"BrYDA5NubejDVHkCYBbpY5","reqId":1501522732982387,"signature":"5HGRA...",�"verkey":"~P7F3BNs5VmQ6eVpwkNKJ5D"}]
...
...
...
did:sov:WRfXPg8dantKVubE3HX8pw
DID Document
Sovrin Ledger
ATTRIB: [19,{"dest":"WRfXPg8dantKVubE3HX8pw","identifier":�"WRfXPg8dantKVubE3HX8pw","raw":"0249fedf5246b...","reqId":1504718156368788,�"signature":"3jL1ZNjLAzyAm5"}]
DID Registry
TX #80: 5310788c3f8c47d2e0336a4de7ecaceb52405699b571bd1254bf4580caf6�
TXIN #1: P2PKH muorV4hjg9EFxE7U1MScUnpQ5gFqCtMdzh
TXOUT #1: P2PKH mkhu17qayX84QK6Hvj3BQPPjhf93hQmYvU
TXOUT #2: OP_RETURN https://btcr.host.com/peacekeeper/self.ddo
did:btcr:xz35-jzv2-qqs2-9wjt
TX #81: a8150d3d1e7e635314ca0bd2b8976aa5d98d46f7bd64dfc850969586afb2�
TXIN #1: P2PKH muAA7os3wCEDB46bmveP4eVKNwC6jz75KF
TXOUT #1: P2PKH mvysHdp7Fnqda8ivgWAduTvC3DvGhr6Qjk
BLOCK 1202316
...
Bitcoin Blockchain
DID Document
DID Registry
{
"@context": "https://w3id.org/did/v1",
"id": "did:btcr:xz35-jzv2-qqs2-9wjt",
"publicKey": [
{
"id":"did:btcr:xz35-jzv2-qqs2-9wjt#key-1",
"type": "EcdsaSecp256k1VerificationKey2019",
"publicKeyHex": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
TX #80: 5310788c3f8c47d2e0336a4de7ecaceb52405699b571bd1254bf4580caf6�
TXIN #1: P2PKH muorV4hjg9EFxE7U1MScUnpQ5gFqCtMdzh
TXOUT #1: P2PKH mkhu17qayX84QK6Hvj3BQPPjhf93hQmYvU
TXOUT #2: OP_RETURN https://btcr.host.com/peacekeeper/self.ddo
TX #81: a8150d3d1e7e635314ca0bd2b8976aa5d98d46f7bd64dfc850969586afb2�
TXIN #1: P2PKH muAA7os3wCEDB46bmveP4eVKNwC6jz75KF
TXOUT #1: P2PKH mvysHdp7Fnqda8ivgWAduTvC3DvGhr6Qjk
BLOCK 1202316
...
DID Document
did:btcr:xz35-jzv2-qqs2-9wjt
Bitcoin Blockchain
DID Registry
{
"@context": "https://w3id.org/did/v1",
"id": "did:btcr:xz35-jzv2-qqs2-9wjt",
"publicKey": [
{
"id":"did:btcr:xz35-jzv2-qqs2-9wjt#key-1",
"type": "EcdsaSecp256k1VerificationKey2019",
"publicKeyHex": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
...
DID Document
did:btcr:xz35-jzv2-qqs2-9wjt
Bitcoin Blockchain
TX #80: 5310788c3f8c47d2e0336a4de7ecaceb52405699b571bd1254bf4580caf6�
TXIN #1: P2PKH muorV4hjg9EFxE7U1MScUnpQ5gFqCtMdzh
TXOUT #1: P2PKH mkhu17qayX84QK6Hvj3BQPPjhf93hQmYvU
TXOUT #2: OP_RETURN https://btcr.host.com/peacekeeper/self.ddo
BLOCK 1202316
TX #81: a8150d3d1e7e635314ca0bd2b8976aa5d98d46f7bd64dfc850969586afb2�
TXIN #1: P2PKH muAA7os3wCEDB46bmveP4eVKNwC6jz75KF
TXOUT #1: P2PKH mvysHdp7Fnqda8ivgWAduTvC3DvGhr6Qjk
DID Registry
{
"@context": "https://w3id.org/did/v1",
"id": "did:btcr:xz35-jzv2-qqs2-9wjt",
"publicKey": [
{
"id":"did:btcr:xz35-jzv2-qqs2-9wjt#key-1",
"type": "EcdsaSecp256k1VerificationKey2019",
"publicKeyHex": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
{
"@context": "https://w3id.org/did/v1",
"id": "did:btcr:xz35-jzv2-qqs2-9wjt",
"service": [ {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
} ],
"signature": { ... }
}
https://btcr.host.com/peacekeeper/self.ddo
DID Document
did:btcr:xz35-jzv2-qqs2-9wjt
Bitcoin Blockchain
...
TX #80: 5310788c3f8c47d2e0336a4de7ecaceb52405699b571bd1254bf4580caf6�
TXIN #1: P2PKH muorV4hjg9EFxE7U1MScUnpQ5gFqCtMdzh
TXOUT #1: P2PKH mkhu17qayX84QK6Hvj3BQPPjhf93hQmYvU
TXOUT #2: OP_RETURN https://btcr.host.com/peacekeeper/self.ddo
BLOCK 1202316
TX #81: a8150d3d1e7e635314ca0bd2b8976aa5d98d46f7bd64dfc850969586afb2�
TXIN #1: P2PKH muAA7os3wCEDB46bmveP4eVKNwC6jz75KF
TXOUT #1: P2PKH mvysHdp7Fnqda8ivgWAduTvC3DvGhr6Qjk
DID Registry
{
"@context": "https://w3id.org/did/v1",
"id": "did:btcr:xz35-jzv2-qqs2-9wjt",
"publicKey": [
{
"id":"did:btcr:xz35-jzv2-qqs2-9wjt#key-1",
"type": "EcdsaSecp256k1VerificationKey2019",
"publicKeyHex": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
{
"@context": "https://w3id.org/did/v1",
"id": "did:btcr:xz35-jzv2-qqs2-9wjt",
"service": [ {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
} ],
"signature": { ... }
}
{
"@context": "https://w3id.org/did/v1",
"id": "did:btcr:xz35-jzv2-qqs2-9wjt",
"publicKey": [
{
"id":"did:btcr:xz35-jzv2-qqs2-9wjt#key-1",
"type": "EcdsaSecp256k1VerificationKey2019",
"publicKeyHex": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
...
https://btcr.host.com/peacekeeper/self.ddo
DID Document
did:btcr:xz35-jzv2-qqs2-9wjt
Bitcoin Blockchain
TX #80: 5310788c3f8c47d2e0336a4de7ecaceb52405699b571bd1254bf4580caf6�
TXIN #1: P2PKH muorV4hjg9EFxE7U1MScUnpQ5gFqCtMdzh
TXOUT #1: P2PKH mkhu17qayX84QK6Hvj3BQPPjhf93hQmYvU
TXOUT #2: OP_RETURN https://btcr.host.com/peacekeeper/self.ddo
BLOCK 1202316
TX #81: a8150d3d1e7e635314ca0bd2b8976aa5d98d46f7bd64dfc850969586afb2�
TXIN #1: P2PKH muAA7os3wCEDB46bmveP4eVKNwC6jz75KF
TXOUT #1: P2PKH mvysHdp7Fnqda8ivgWAduTvC3DvGhr6Qjk
DID Registry
{
"@context": "https://w3id.org/did/v1",
"id": "did:v1:test:nym:3AEJTDMSxDDQpyUftju",
"publicKey": [
{
"id":"did:v1:test:nym:3AEJTDMSxDDQpyUftju#key-1",
"type": "Ed25519VerificationKey2018",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
{
"@context": "https://w3id.org/did/v1",
"id": "did:v1:test:nym:3AEJTDMSxDDQpyUftju",
"publicKey": [
{
"id":"did:v1:test:nym:3AEJTDMSxDDQpyUftju#key-1",
"type": "Ed25519VerificationKey2018",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
did:v1:test:nym:3AEJTDMSxDDQpyUftju
Veres One Ledger
DID Document
DID Registry
{
"@context": "https://w3id.org/did/v1",
"id": "did:v1:test:nym:3AEJTDMSxDDQpyUftju",
"publicKey": [
{
"id":"did:v1:test:nym:3AEJTDMSxDDQpyUftju#key-1",
"type": "Ed25519VerificationKey2018",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
{
"@context": "https://w3id.org/did/v1",
"id": "did:v1:test:nym:3AEJTDMSxDDQpyUftju",
"publicKey": [
{
"id":"did:v1:test:nym:3AEJTDMSxDDQpyUftju#key-1",
"type": "Ed25519VerificationKey2018",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
DID Document
did:v1:test:nym:3AEJTDMSxDDQpyUftju
Veres One Ledger
DID Registry
{
"@context": "https://w3id.org/did/v1",
"id": "did:v1:test:nym:3AEJTDMSxDDQpyUftju",
"publicKey": [
{
"id":"did:v1:test:nym:3AEJTDMSxDDQpyUftju#key-1",
"type": "Ed25519VerificationKey2018",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
{
"@context": "https://w3id.org/did/v1",
"id": "did:v1:test:nym:3AEJTDMSxDDQpyUftju",
"publicKey": [
{
"id":"did:v1:test:nym:3AEJTDMSxDDQpyUftju#key-1",
"type": "Ed25519VerificationKey2018",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAj..."
}
],
"service": {
"type": "agent",
"serviceEndpoint": "https://host.com/a43/"
}
}
DID Document
did:v1:test:nym:3AEJTDMSxDDQpyUftju
Veres One Ledger
DID Registry
Summary
Perspectives on DIDs - Unanchored (30 min) - Ken Ebert
peer key
52
Peer DIDs and Public Key-based DIDs
PRESENTED BY
Ken Ebert�Software Architect
Peer DIDs
https://openssi.github.io/peer-did-method-spec/
What is Peer DID?
...
DIDs Are About Relationships
Government DID
Alice DID
Blockchain
Alice DID
Bob DID
Carol DID
Alice DID
Bob DID
Bob DID
Sample
did:peer:11-479cbc07c3f991725836a3aa2a581ca2029198aa420b9d99bc0e131d9f3e2cbe
ABNF
peer-did = "did:peer:" numalgo encalgo "-" numbasis
numalgo = "1"
encalgo = "1"
numbasis = 64*HEXDIGCI
HEXDIGCI = HEXDIG / "a" / "b" / "c" / "d" / "e" / "f”
What's a Peer DID Look Like?
Benefits of Peer DIDs
Challenges of Peer DIDs
Layers of Support
Public Key-based DIDs
https://digitalbazaar.github.io/did-method-key/
Sample (ed25519 public key)
did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH
ABNF
did-key = "did:key:" multibase( multicodec( public-key ) )
multibase = function(bytes) => [1-9A-Za-z]
multicodec = function(codec, bytes) => codec[ed25519publickey -> 0xed, …] bytes
public-key = [0x00-0xff]
What's a Public Key-based DID Look Like?
Benefits of Public Key DIDs
Challenges of Public Key DIDs
Perspectives on DIDs - Layer 2 (30 min)
ION Layer 2 DID Network
66
Layer 2 DID Network
1.
The Scaling Trilema
Creating secure, decentralized systems that run at world-scale
68
Three critical components:
Decentralization
Without this property, many proposed solutions do not deliver sufficiently differentiated benefit over those built using traditional systems.
Scalability
If decentralized systems (i.e. blockchains, DLTs) are to deliver on the benefits they promise, they must support billions of participating entities.
Security
These systems must achieve decentralization at global scale, while maintaining a high level of security.
69
The Scale of Decentralized Identity:
70
Human Identity
There are 7.5 billion humans on Earth currently. At bare minimum, a decentralized identity system must be capable of supporting identities for all of them. Each person may have multiple Decentralized Identifiers, each requiring their own PKI lineage.
Identity of All Things.
Human identity is just the tip of the iceberg – there is an entire world containing hundreds of billions of devices, machines, apps, and other entities, both tangible and virtual.
Requirements for DPKI:
71
Key Realization
Identifiers and PKI do not suffer from the same double spend problem money does, because DIDs do not need to be transferred between parties like assets. However, you must still prevent double issuance and ensure all parties on the DID network can derive a single deterministic PKI state for an identifier.
How might these differences in requirements affect how we approach the architecture of a DID network?
72
2.
Technical Overview
Architecture and Protocol Details
73
What is ION?
ION is a public, permissionless, decentralized DID overlay network that runs on Bitcoin, and leverages a deterministic DPKI protocol, called Sidetree.
74
Technical Assumptions:
No secondary consensus required
ION nodes do not require a secondary consensus system to derive the correct PKI state of IDs.
No conflicting states are allowed
The protocol eliminates conflicting PKI states via a strict, deterministic rule set that each node applies individually.
IDs are not transferable between entities
Transferring ownership of IDs between untrusting parties, as you would crypto-assets like Bitcoin, is not a supported function.
75
System Overview
76
Bitcoin blockchain
ION Node 1
IPFS Storage
ION Node 2
Processor
IPFS Storage
Batch #
Txn Writer
Txn Writer
Source
Data for #
Replicated
Source
Data for #
1. Anchoring PKI
Operations
ION nodes aggregate PKI operations into batches, embed batch hashes in blockchain transactions, and store the source data in a Content Addressable Storage (CAS) layer both locally and over a peer network.
1
2. Locating PKI Operations
Other ION nodes are observing the underlying chain to look for transactions embedded with hashes of PKI operation batches. When they locate one, they pull it in for processing
2
3. Replication & Processing
When a node locates a batch hash, it requests the hash’s corresponding data from the CAS layer, parses the batch, and applies the protocol rules to each operation. The process outputs the latest deterministic state for the ID linked to every operation in the batch.
3
Processor
System Overview
77
Bitcoin blockchain
ION Node 1
IPFS Storage
ION Node 2
Processor
IPFS Storage
Batch #
Txn Writer
Txn Writer
Source
Data for #
Replicated
Source
Data for #
1. Anchoring PKI
Operations
ION nodes aggregate PKI operations into batches, embed batch hashes in blockchain transactions, and store the source data in a Content Addressable Storage (CAS) layer both locally and over a peer network.
1
2. Locating PKI Operations
Other ION nodes are observing the underlying chain to look for transactions embedded with hashes of PKI operation batches. When they locate one, they pull it in for processing
2
3. Replication & Processing
When a node locates a batch hash, it requests the hash’s corresponding data from the CAS layer, parses the batch, and applies the protocol rules to each operation. The process outputs the latest deterministic state for the ID linked to every operation in the batch.
3
Processor
Anatomy of an Operation
78
DID PKI State Convergence
79
Traditional Delta-based CRDT converging changes using vector clocks
ION enables key features to enhance our offerings:
Massive Scale
The network can collectively process tens of thousands of operations per second, even on consumer-grade machines.
Cost Efficient
Decentralized blockchains provide unique features, but the come at a high monetary/energy cost. ION’s batching mechanism reduces per-unit op costs by several orders of magnitude.
Flexible Nodes
Unlike a blockchain, nodes of the ION network that runs atop the underlying decentralized system do not need to maintain the full history of transactions.
Permissionless
Many other blockchain-based systems used for identity purposes rely on central authority schemes to scale their networks. ION is able to meet and exceed scale requirements while remaining decentralized.
80
3.
Building the Network
ION is an organic system that requires care to develop, grow, and flourish.
81
Protocol Development and Network Upgrades
82
1 . 2 . 3
Major Protocol Evolution
Protocol advancements so large they require separate codebases
Forks & Required Upgrades
Critical updates, forking changes, or security patches that require all nodes to upgrade
Discretionary Updates
All non-critical change that do not require all nodes to upgrade
Upgrade Process
The path to a robust network - a three stage journey:
83
Stage 1
Larger entities run full nodes to jumpstart the network
Stage 2
Entities with product needs and early adopter hobbyists start running full nodes ad hoc
Stage 3
The long tail of developers, users, and organizations run a mix of light and full nodes to suit their needs
How to get involved:
Help shape specifications
To ensure these systems meet the needs of all the individuals, organizations, and use cases that will rely on them, help shape the Sidetree protocol spec and technical decisions in ION.
Contribute to open source development
Contribute open source code to the DIF Sidetree protocol and ION node code in the DIF repositories on GitHub.
Run a node, participate in the ecosystem
In order to realize the value decentralized identity can deliver, participate in running the foundational components it relies on.
84
Perspectives on DIDs - Alternatives
(30 min)
git web ipld etc
85
Alternative DID Methods
W3C TPAC 2019 - Fukuoka
Manu Sporny - CEO - Digital Bazaar
Manu Sporny | CEO | Digital Bazaar
Email: msporny@digitalbazaar.com
https://www.linkedin.com/in/manusporny/
87
What is an Alternative DID Method?
Alternative DID Methods...
Typically fall into at least one of these categories.
did:web
did:web
A DID Method for the Web
did:git
did:git
A DID Method for developers
did:ipid
did:ipid
A DID Method layered on top of a DHT-based clustered file system
did:PROPRIETARY
did:PROPRIETARY
DID Methods where the namespace is owned by an organization.
Questions?
Appendix: Git DIDs
https://github.com/dhuseby/did-git-spec/blob/master/did-git-spec.md
What is Git DID?
Git Repo
Relationships are with the git repo as an entity and store
...
DIDs Are About Relationships
Government DID
Alice DID
Git Repo
Bob DID
Sample
did:git:625557b5a9cdf399205820a2a716da897e2f9657
ABNF
git-did = "did:git:repo-id" 1*(":" contributor-id) 1*(";" did-service)
1*("/" did-path) 1*("?" did-query) 1*("#" did-fragment)
repo-id = commit-id
contributor-id = commit-id
commit-id = 40*(lowerhex)
lowerhex = "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / "a" /"b" / "c" / "d" / "e" / "f"
What's Git DID Look Like?
Benefits of Git DIDs
Challenges of Git DIDs
Lunch
105
Documenting Use Cases (Joe, 60 min)
106
Use Cases for �Decentralized Identifiers�
W3C TPAC 2019�DID WORKING GROUP
JOE ANDRIEU JOE@LEGREQ.COM
DID WG Charter
"Other non-normative documents may be created such as:
Decentralized Identifier Use Cases v1.0
...
The Credentials Community Group has developed a set of initial use cases and requirements that will serve as input for this document."
Agenda
Why Use Cases
Example – Title & Scenario
E.2 Taking a test
Eunice is about to take her ACT (a test used to evaluate her readiness for college). When she arrives at the testing center, she is required to present identification. Her government-issued identity certificate is acceptable, as the verifiable credentials contained in it reflect all of the required attributes and it is difficult to counterfeit.
Example – Domain Map
Example – Focal Use Case
5.1 Citizenship by Parentage
Background
Sam wants to claim US citizenship because his mother is American. Sam has a digital birth certificate from Kenya, where he was born while his Mother was in the Peace corps. He also has a digital version of his mother's US passport. Because his mother’s name changed between his birth and the issuance of the passport, Sam also has a marriage license with her maiden and married names. Sam is applying for a new passport from the US Secretary of State.
Distinction
This use case is challenging because the mother’s name changed, by marriage, between the issuance of the birth certificate and passport.
Scenario
Sam’s mother emailed him the certificate, license, and passport as independent Verifiable Credentials. He then creates a verifiable presentation which includes those credentials, a statement of their relationship to each other and his relationship to his mother. He then visits the US Secretary of State website, creates an account, starts the application for a passport, and uploads his new verifiable presentation as supporting evidence. After processing the application, Sam is issued both a traditional passport and a new digital passport.
Verifiable Credentials
Birth Certificate
Establishes relationship to mother with maiden name
Marriage License
Establishes mother's name change
Mother’s Passport
Establishes mother's US citizenship
Sam’s Passport
Establishes Sam is the child in the birth certificate
Verifiable Presentation
A verifiable presentation which includes those three credentials, adds his name, photo, and demographic data along with the assertions that —
Trust Hierarchy
Sam is legally liable for his claim to the rights of citizenship. The state department is on the hook for verifying the underlying credentials and Sam’s claims, including correlating against any additional data they might already have.�
Threat model
�Threat: Terrorist / Identity fraud. A bad actor could be impersonating Sam to attain a passport. Of course, if a bad actor were to be able to collect the required verifiable credentials—mother’s passport, birth certificate, and marriage license, that actor has already significantly compromised the system.
Response: Identity assurance based on the presentation and other data, above and beyond what is in the presentation and the claims.
Response: Identity assurance based on the contents of the claims, potentially with enhanced data embedded in the claims, i.e., data not currently in passports, birth certificates, or marriage license. For example, a biometric template could be embedded in the birth certificate claim and that template could be used for interactive identity assurance at the time of submitting the presentation.
Threat: Exposure of private information. By storing potentially compromising information in credentials and sending them over the network, we are increasing the attack surface for the subjects of those credentials.
Response: Encrypt the claims (once by issuer, every verifier gets the same encrypted blob)
Response: Encrypt the claims uniquely for each verifier. This may leak usage data to the issuer, assuming the holder must ask for a new, encrypted credential for each verifier.
Response: Blind the claims uniquely for each verifier.
Response: Encrypt the presentation uniquely for each verifier. No issuer involved.
Good Use Cases
Lessons Learned from �Verifiable Credentials
CCG’s DID Use Case Document
Proposed Content
Moving forward
Afternoon break
119
Technical Direction (Chairs, 60 min)
120
Technical direction
CCG GitHub Issues (Chairs, 60 min)
122
CCG DID spec Issues
Questions
Clarifications
Discussions
Editorial
Other
Questions?
Dinner Tonight: 19:00-
https://www.jrk-hotels.co.jp/Fukuoka/en/restaurant/
‘Akasaka Umaya’ in the basement of the JR Kyushu Hotel Blossom Fukuoka, Near JR Hakata Station
Fixed Course (see next slide), 5000yen in cash (or in 42 euros) or credit card.
MEET: 18:30 Grandfloor for taxi. (If you’re late, you’re on your own)
k-sako@ab.jp.nec.com
130
Dinner Course (subject to minor change)/Free drinks
- Seasonal Appetizer
- Tofu
- Sashimi (raw fish; sushi without rice)
- Grilled skewers
- Ham Salad
- Fried Scallops and Eggplant
- Chicken with Miso paste
- Rice/Noodles
- Dessert
131
Decentralized Identifier WG
TPAC Sessions
Day 2: September 17, 2019
Chairs: Dan Burnett, Brent Zundel
Location: Hilton Fukuoka Sea Hawk, 1st Floor, Navis B
132
Welcome
133
8:30 | Good Morning, Agenda preview | Chairs |
9:00 | Test Suite | |
10:00 | Teleconferences, next f2f, etc. | Chairs |
10:30 | Morning Break | |
11:00 | Decentralization Rubric | Joe Andrieu |
12:00 | Adopting Work - Concerns and Requirements | Manu Sporny |
13:00 | Lunch | |
14:00 | DID Resolution - which pieces are ours | Markus Sabadello |
14:30 | WoT joint session | |
15:00 | Working through issues | |
15:30 | Break | |
16:00 | Open Topics | |
16:30 | PING joint session | |
17:00 | Open Topics | |
Test Suite (60 min)
134
Test suite
Teleconferences, next f2f (Chairs, 30 min)
136
Logistics of further meetings - chairs seeking input
Morning break
138
Decentralization Rubric (Joe, 60 min)
139
A Rubric for�Decentralization of �DID Methods
W3C TPAC 2019�DID WORKING GROUP
JOE ANDRIEU JOE@LEGREQ.COM
DID WG Charter
Provide a rubric of decentralized characteristics for DID Method specifications. This allows the DID Method specifications to self-certify, or independent third parties to evaluate, the DID Method specification's level of adherence to principles of decentralization.
Agenda
What’s a Rubric
Example 1
Example 2
Example 3
Why a Rubric for Decentralization of DID Methods?
Intentions
A Rubric (structure)
Illustration – Amusement Park Rides
History
Proposed Next Steps
Adopting Work -
Concerns and Requirements
(60 min)
153
What are the concerns?
154
What are the concrete requirements?
155
Lunch
156
DID Resolution (Markus, 30 min)
157
Markus Sabadello
Danube Tech, Decentralized Identity Foundation,�Sovrin Foundation, W3C DID WG + CCG, OASIS XDI TC
https://danubetech.com/
TPAC, Fukuoka, 17th September 2019
DID Resolution
{
"@context": "https://w3id.org/did/v1",
"id": "did:example:456",
"publicKey": [
{
"id": "did:example:456#key-1",
"type": "Ed25519VerificationKey2018",
"publicKeyBase58": "H3C2AVvLMv6gmMNam3uVAjJCwDmqPV"
}
],
"service": {
"type": "hub",
"serviceEndpoint":� "https://cloud.service.com/hub/did:example:456"
},
"authentication": {
"did:example:456#key-1"
}
}
Example DID Document:
DID Resolution
DID Resolution
https://w3c-ccg.github.io/did-resolution/
When does DID Resolution happen?
did = "did:" method-name ":" method-specific-id
method-name = 1*method-char
method-char = %x61-7A / DIGIT
method-specific-id = *idchar *( ":" *idchar )
idchar = ALPHA / DIGIT / "." / "-" / "_"
did-url = did *( ";" param ) path-abempty [ "?" query ] [ "#" fragment ]
param = param-name [ "=" param-value ]
param-name = 1*param-char
param-value = *param-char
param-char = ALPHA / DIGIT / "." / "-" / "_" / ":" / pct-encoded
did:xyz:1234;service=agent/profile?query#frag
DID
DID URL
DIDs and DID URLs
Example:
A DID gets resolved
A DID URL gets dereferenced
service – Identifies a service from the DID Document by service ID.
service-type – Identifies services from the DID Document by service type.
key – Identifies a key from the DID Document by key ID.
key-type – Identifies keys from the DID Document by key type.
version-id – Identifies an earlier version of the DID Document.
version-time – Identifies an earlier version of the DID Document.
content-id – Identifies content other than the DID Document.
content-type – Identifies content other than the DID Document.
hl – Adds integrity protection to the DID Document.
DID URL Matrix Parameters
DID Resolver Architectures
Other DID Resolution Topics
{
"id": "did:btcr:x705-jzv2-qqaz-7vuz;hub",
"type": "HubService",
"serviceEndpoint": "did:btcr:xz35-jzv2-qqs2-9wjt"
}
DNS → DID
~> dig _did.ssi.labs.nic.at uri
;; Warning: Client COOKIE mismatch
; <<>> DiG 9.11.5-P4-5-Debian <<>> _did.ssi.labs.nic.at uri
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50630
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1024
; COOKIE: d79d92fd59041556a1e33daf5d00fdb1774deb5d01034bd3 (bad)
;; QUESTION SECTION:
;_did.ssi.labs.nic.at. IN URI
;; ANSWER SECTION:
_did.ssi.labs.nic.at. 292 IN URI 10 1 "did:sov:stn:r1dwAJxcoG7EPiioGMz7h"
;; Query time: 1 msec
;; SERVER: 192.168.8.1#53(192.168.8.1)
;; WHEN: Wed Jun 12 15:27:21 CEST 2019
;; MSG SIZE rcvd: 126
HTTPS URL → DID
{
"iss": "did:example:4567",
"domain": "well-known.transmute-did.com",
"exp": 1925269272,
"iat": 1565272872
}
{
"claims": {
"did:example:4567": {
"jwt": "eyJhbGciOiJF...."
}
}
}
https://www.mywebsite.com/.well-known/did-configuration
DID Universal Resolver
What will happen where?
DID Spec
(DID Working Group)
DID URI Scheme
DID Document Data Model
DID Document Syntax(es)
Requirements for DID Methods
Security+Privacy Considerations
DID Resolution Spec
(Credentials Community Group)
DID Resolution Algorithm
DID URL Dereferencing Algorithm
HTTP(S) Binding
Input Options
Result Metadata
DID Method Specs
(by anyone)
Method Name
Method-specific Identifier
Create, Read, Update, Deactivate
Security+Privacy Considerations
(WoT Joint session, 30 min)
179
Working through issues (30 min)
180
Afternoon break
181
(Open Topics, 30 min)
182
DID Controller? (Proposed by Joe)
In the spec:�5.4 Authentication
Authentication is the mechanism by which the controller(s) of a DID can cryptographically prove that they are associated with that DID. See Section § 9.3 Binding of Identity . Note that Authentication is separate from Authorization because the controllers may wish to enable others to update their DID Document (for example, to assist with key recovery as discussed in Section § 9.8 Key Revocation and Recovery ) without enabling them to prove control (and thus be able to impersonate the controllers).
This has triggered a conversation on the CCG email list as the usage here is directly inverted from the meaning of controller and authentication as understood by some of this community. (Hat tip to Sethi Shivam and Daniel Hardman.)
183
PING (90 min)
184
Things we can talk about
(Open topics, 60 min)
186