Modern key distribution with ClaimChains A decentralized Public Key - - PowerPoint PPT Presentation

modern key distribution with claimchains
SMART_READER_LITE
LIVE PREVIEW

Modern key distribution with ClaimChains A decentralized Public Key - - PowerPoint PPT Presentation

Modern key distribution with ClaimChains A decentralized Public Key Infrastructure that supports privacy-friendly social verification Bogdan Kulynych Marios Isaakidis N E X T L E A P Carmela Troncoso George Danezis photo by lisa cee


slide-1
SLIDE 1

A decentralized Public Key Infrastructure that supports privacy-friendly social verification

Bogdan Kulynych Marios Isaakidis

Modern key distribution with ClaimChains

N E X T L E A P

Carmela Troncoso George Danezis

photo by lisa cee

slide-2
SLIDE 2
slide-3
SLIDE 3

HIGH-INTEGRITY Tamper proof Authenticity

slide-4
SLIDE 4

HIGH-INTEGRITY Tamper proof Authenticity DECENTRALIZATION Availability Censorship-resistant Global consensus

slide-5
SLIDE 5

Cryptocurrency chains

Powerful abstraction for identities Global namespace No mechanism for social validation All transactions are public Users need to buy coins and pay for transaction fees Resource expensive HEAD BLOCK HEADER

  • pointer to previous block
  • hash of block transactions
  • timestamp

. . . TRANSACTIONS

  • transaction x0
  • transaction x1

. . .

  • transaction xn
slide-6
SLIDE 6

Federated “Merkle prefix tree” chains

Accountability Easy discovery Efficient Do not prevent equivocation Centralization

Single point of failure

Surveillance keybase.io CONIKS CONIKS

slide-7
SLIDE 7

Merkle binary prefix trees

ROOT i = 001… v = valueX H(child0, child1) 1 1 1 1 1 1 1 Leaf nodes are ordered using a Verifiable Random Function i = 000… v = valueY

slide-8
SLIDE 8

ClaimChains

claimchain.github.io

photo by Wendi Halet

slide-9
SLIDE 9

ClaimChains

  • A ClaimChain for each user/device/identity
  • Blocks appended as needed
  • Compromises appear as ClaimChain forks
  • Owner selects who can read a specific

claim – all readers get the same content

slide-10
SLIDE 10

ClaimChains

  • A ClaimChain for each user/device/identity
  • Blocks appended as needed
  • Compromises appear as ClaimChain forks
  • Owner selects who can read a specific

claim – all readers get the same content

cross-hash

slide-11
SLIDE 11

ClaimChains

  • A ClaimChain for each user/device/identity
  • Blocks appended as needed
  • Compromises appear as ClaimChain forks
  • Owner selects who can read a specific claim – all

readers get the same content

  • Propagation of key updates in “cliques” of user
  • Vouch for the latest state of a friend’s ClaimChain
  • Friend introductions - Social validation – Web of Trust

… while preserving privacy

cross-hash

slide-12
SLIDE 12

Overview

  • ClaimChains are high-integrity, authenticated data stores that can support

generic claims

  • Privacy: a capabilities mechanism for fine-grained claim-specific access control
  • Non-equivocation: all readers of a private claim get the same view
  • Cross-hashing enables the propagation and vouching of the latest state of

linked ClaimChains

  • Equivocation attempts a compromises produce non-repudiable cryptographic

evidence (“ClaimChain forks”)

  • Flexible in terms of deployment
  • Efficient “selective sharing” of claims
slide-13
SLIDE 13

ClaimChains block structure

Block index Timestamp Nonce ClaimChain version BLOCK MAP Merkle prefix tree with all claims and capabilities CLAIMCHAIN METADATA

  • Connected identities
  • ClaimChain Public keys (pkSIG, pkVRF, pkDH)

Pointers to previous blocks Signature under pkSIG

slide-14
SLIDE 14

Block claim map: Adding a claim

ROOT

label = bob@riseup.net claim = 0515b693e5

slide-15
SLIDE 15

Block claim map: Adding a claim

ROOT

label = bob@riseup.net claim = 0515b693e5

1) Compute claim key k = VRF ( || nonce)

slide-16
SLIDE 16

Block claim map: Adding a claim

ROOT

label = bob@riseup.net claim = 0515b693e5

1) Compute claim key k = VRF ( || nonce) 2) Calculate the index of the leaf node: i = SHA256( k || “lookup” )

slide-17
SLIDE 17

Block claim map: Adding a claim

ROOT

label = bob@riseup.net claim = 0515b693e5

1) Compute claim key k = VRF ( || nonce) 2) Calculate the index of the leaf node: i = SHA256( k || “lookup” ) 3) Generate a symm. enc. key K = SHA256( k || “enc” )

slide-18
SLIDE 18

Block claim map: Adding a claim

ROOT

label = bob@riseup.net claim = 0515b693e5

1) Compute claim key k = VRF ( || nonce) 2) Calculate the index of the leaf node: i = SHA256( k || “lookup” ) 3) Generate a symm. enc. key K = SHA256( k || “enc” ) 4) Encrypt claim content C = EncK( VRFproof + “0515b693e5” )

slide-19
SLIDE 19

Block claim map: Adding a claim

ROOT

label = bob@riseup.net claim = 0515b693e5

1) Compute claim key k = VRF ( || nonce) 2) Calculate the index of the leaf node: i = SHA256( k || “lookup” ) 3) Generate a symm. enc. key K = SHA256( k || “enc” ) 4) Encrypt claim content C = EncK( VRFproof + “0515b693e5” ) i = 0110... v = C

slide-20
SLIDE 20

ROOT

Block claim map: Adding a capability for to read

i = 0110... v = C

slide-21
SLIDE 21

ROOT

Block claim map: Adding a capability for to read

i = 0110... v = C 1) Establish DH shared secret s between and

slide-22
SLIDE 22

ROOT

Block claim map: Adding a capability for to read

i = 0110... v = C 1) Establish DH shared secret s between and 2) Derive the capability lookup key i = SHA256 ( nonce || s || “lookup” )

slide-23
SLIDE 23

ROOT

Block claim map: Adding a capability for to read

i = 0110... v = C 1) Establish DH shared secret s between and 2) Derive the capability lookup key i = SHA256 ( nonce || s || “lookup” ) 3) Derive the symm. enc. key K = SHA256( nonce || s || “enc” )

slide-24
SLIDE 24

ROOT

Block claim map: Adding a capability for to read

i = 0110... v = C 1) Establish DH shared secret s between and 2) Derive the capability lookup key i = SHA256 ( nonce || s || “lookup” ) 3) Derive the symm. enc. key K = SHA256( nonce || s || “enc” ) 4) Encrypt claim key VRF ( || nonce) C = EncK( k )

slide-25
SLIDE 25

ROOT

Block claim map: Adding a capability for to read

i = 0110... v = C 1) Establish DH shared secret s between and 2) Derive the capability lookup key i = SHA256 ( nonce || s || “lookup” ) 3) Derive the symm. enc. key K = SHA256( nonce || s || “enc” ) 4) Encrypt claim key VRF ( || nonce) C = EncK( k ) i = 1010... v = C

slide-26
SLIDE 26

Block claim map: retrieving the latest update for

ROOT i = 0110... v = C i = 1010... v = C

slide-27
SLIDE 27

Block claim map: retrieving the latest update for

ROOT i = 0110... v = C i = 1010... v = C 1) Establish DH shared secret s between and

slide-28
SLIDE 28

Block claim map: retrieving the latest update for

ROOT i = 0110... v = C i = 1010... v = C 1) Establish DH shared secret s between and 2) Derive the capability lookup key i = SHA256 ( nonce || s || “lookup” )

slide-29
SLIDE 29

Block claim map: retrieving the latest update for

ROOT i = 0110... v = C i = 1010... v = C 1) Establish DH shared secret s between and 2) Derive the capability lookup key i = SHA256 ( nonce || s || “lookup” ) 3) Derive the symm. enc. key K = SHA256( nonce || s || “enc” )

slide-30
SLIDE 30

Block claim map: retrieving the latest update for

ROOT i = 0110... v = C i = 1010... v = C 1) Establish DH shared secret s between and 2) Derive the capability lookup key i = SHA256 ( nonce || s || “lookup” ) 3) Derive the symm. enc. key K = SHA256( nonce || s || “enc” ) 4) Retrieve capability block and decrypt it with K Result: key for ‘s claim i = 1010... v = C

slide-31
SLIDE 31

Block claim map: retrieving the latest update for

ROOT i = 0110... v = C i = 1010... v = C 1) Establish DH shared secret s between and 2) Derive the capability lookup key i = SHA256 ( nonce || s || “lookup” ) 3) Derive the symm. enc. key K = SHA256( nonce || s || “enc” ) 4) Retrieve capability block and decrypt it with K Result: key for ‘s claim 5) Retrieve ‘s claim and decrypt it i = 1010... v = C i = 0110... v = C

slide-32
SLIDE 32

Block claim map: retrieving the latest update for

ROOT i = 0110... v = C i = 1010... v = C 1) Establish DH shared secret s between and 2) Derive the capability lookup key i = SHA256 ( nonce || s || “lookup” ) 3) Derive the symm. enc. key K = SHA256( nonce || s || “enc” ) 4) Retrieve capability block and decrypt it with K Result: key for ‘s claim 5) Retrieve ‘s claim and decrypt it 6) Verify VRFproof i = 1010... v = C i = 0110... v = C

slide-33
SLIDE 33

Resilience

  • Field research to understand user needs
  • Collaboration with related communities
  • Applied research:

– Cryptographic games to define security and privacy properties – Formally verified implementation

  • Simulations using real world data
  • Interoperability and plans for gradual deployment
  • User-centric design
  • Multidisciplinarity
  • Open Innovation (open access and extendability)
slide-34
SLIDE 34

Thank you

@misaakidis

claimchain.github.io

photo by alcidecota

slide-35
SLIDE 35

Evaluation of scalability

Claim map construction time Cumulative block storage size

slide-36
SLIDE 36

Key propagation in a fully decentralized setting

Outgoing bandwidth cost Email encryption status (%)

slide-37
SLIDE 37

Merkle binary prefix trees: Proof of inclusion

ROOT 1 1 1 1 1 1 1

slide-38
SLIDE 38

Merkle binary prefix trees: Proof of inclusion

ROOT 1 1 1 1 1 1 1 (alice@riseup.net, 0x1A2B3C) VRFpkVRF(alice@riseup.net) = 01011...

slide-39
SLIDE 39

Merkle binary prefix trees: Proof of inclusion

ROOT 1 1 1 1 1 1 1 (alice@riseup.net, 0x1A2B3C) VRFpkVRF(alice@riseup.net) = 01011...

slide-40
SLIDE 40

Merkle binary prefix trees: Proof of inclusion

ROOT 1 1 1 1 1 1 1 (alice@riseup.net, 0x1A2B3C) VRFpkVRF(alice@riseup.net) = 01011... ROOT i = 01011… v =0x1A2B

slide-41
SLIDE 41

Merkle binary prefix trees: Proof of inclusion

ROOT 1 1 1 1 1 1 1 (alice@riseup.net, 0x1A2B3C) VRFpkVRF(alice@riseup.net) = 01011... ROOT i = 01011… v =0x1A2B i = 01011… v =0x1A2B

slide-42
SLIDE 42

Merkle binary prefix trees: Proof of absence

ROOT 1 1 1 1 1 1 1

slide-43
SLIDE 43

Merkle binary prefix trees: Proof of absence

ROOT 1 1 1 1 1 1 1 VRFpkVRF(bob@riseup.net) = 11001...

slide-44
SLIDE 44

Merkle binary prefix trees: Proof of absence

ROOT 1 1 1 1 1 1 1 VRFpkVRF(bob@riseup.net) = 11001...

slide-45
SLIDE 45

Merkle binary prefix trees: Proof of absence

ROOT 1 1 1 1 1 1 1 VRFpkVRF(bob@riseup.net) = 11001... ROOT i = 11011… v =0xFFFF

slide-46
SLIDE 46

Merkle binary prefix trees: Proof of absence

ROOT 1 1 1 1 1 1 1 VRFpkVRF(bob@riseup.net) = 11001... ROOT i = 11011… v =0xFFFF

slide-47
SLIDE 47

Merkle binary prefix trees: Proof of absence

ROOT 1 1 1 1 1 1 1 VRFpkVRF(bob@riseup.net) = 11001... ROOT i = 11011… v =0xFFFF i = 11011… v =0xFFFF