modern key distribution with claimchains
play

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


  1. 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

  2. HIGH-INTEGRITY Tamper proof Authenticity

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

  4. Cryptocurrency chains TRANSACTIONS ● transaction x 0 HEAD Powerful abstraction for identities ● transaction x 1 Global namespace . . . ● transaction x n No mechanism for social validation All transactions are public Users need to buy coins and pay for transaction fees BLOCK HEADER Resource expensive ● pointer to previous block ● hash of block transactions ● timestamp . . .

  5. Federated “Merkle prefix tree” chains Accountability Easy discovery Efficient Do not prevent equivocation Centralization Single point of failure – Surveillance – keybase.io CONIKS CONIKS

  6. Merkle binary prefix trees Leaf nodes are ordered using ROOT a Verifiable Random Function 0 1 0 1 1 0 H(child 0 , child 1 ) 0 0 1 0 1 0 1 1 i = 000… i = 001… v = value Y v = value X

  7. ClaimChains claimchain.github.io photo by Wendi Halet

  8. 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

  9. ClaimChains A ClaimChain for each user/device/identity ● cross-hash Blocks appended as needed ● Compromises appear as ClaimChain forks ● Owner selects who can read a specific ● claim – all readers get the same content

  10. ClaimChains A ClaimChain for each user/device/identity ● cross-hash 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

  11. 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

  12. ClaimChains block structure ClaimChain version Block index Timestamp Nonce Signature CLAIMCHAIN METADATA under pk SIG ● Connected identities ● ClaimChain Public keys (pk SIG , pk VRF , pk DH ) BLOCK MAP Merkle prefix tree with all claims and capabilities Pointers to previous blocks

  13. Block claim map: Adding a claim label = bob@riseup.net claim = 0515b693e5 ROOT

  14. Block claim map: Adding a claim label = bob@riseup.net claim = 0515b693e5 ROOT 1) Compute claim key k = VRF ( || nonce)

  15. Block claim map: Adding a claim label = bob@riseup.net claim = 0515b693e5 ROOT 1) Compute claim key k = VRF ( || nonce) 2) Calculate the index of the leaf node: i = SHA256( k || “lookup” )

  16. Block claim map: Adding a claim label = bob@riseup.net claim = 0515b693e5 ROOT 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” )

  17. Block claim map: Adding a claim label = bob@riseup.net claim = 0515b693e5 ROOT 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 = Enc K ( VRFproof + “0515b693e5” )

  18. Block claim map: Adding a claim label = bob@riseup.net claim = 0515b693e5 ROOT 1) Compute claim key k = VRF ( || nonce) 2) Calculate the index of the leaf node: i = SHA256( k || “lookup” ) i = 0110... v = C 3) Generate a symm. enc. key K = SHA256( k || “enc” ) 4) Encrypt claim content C = Enc K ( VRFproof + “0515b693e5” )

  19. Block claim map: Adding a capability for to read ROOT i = 0110... v = C

  20. Block claim map: Adding a capability for to read ROOT 1) Establish DH shared secret s between and i = 0110... v = C

  21. Block claim map: Adding a capability for to read ROOT 1) Establish DH shared secret s between and 2) Derive the capability lookup key i = SHA256 ( nonce || s || “lookup” ) i = 0110... v = C

  22. Block claim map: Adding a capability for to read ROOT 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” ) i = 0110... v = C

  23. Block claim map: Adding a capability for to read ROOT 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 = Enc K ( k ) i = 0110... v = C

  24. Block claim map: Adding a capability for to read ROOT 1) Establish DH shared secret s between and 2) Derive the capability lookup key i = SHA256 ( nonce || s || “lookup” ) i = 1010... 3) Derive the symm. enc. key v = C K = SHA256( nonce || s || “enc” ) 4) Encrypt claim key VRF ( || nonce) C = Enc K ( k ) i = 0110... v = C

  25. Block claim map: retrieving the latest update for ROOT i = 1010... i = 0110... v = C v = C

  26. Block claim map: retrieving the latest update for 1) Establish DH shared secret s between and ROOT i = 1010... i = 0110... v = C v = C

  27. Block claim map: retrieving the latest update for 1) Establish DH shared secret s between and ROOT 2) Derive the capability lookup key i = SHA256 ( nonce || s || “lookup” ) i = 1010... i = 0110... v = C v = C

  28. Block claim map: retrieving the latest update for 1) Establish DH shared secret s between and ROOT 2) Derive the capability lookup key i = SHA256 ( nonce || s || “lookup” ) 3) Derive the symm. enc. key K = SHA256( nonce || s || “enc” ) i = 1010... i = 0110... v = C v = C

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

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

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

  32. 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)

  33. Thank you @misaakidis claimchain.github.io photo by alcidecota

  34. Evaluation of scalability Claim map construction time Cumulative block storage size

  35. Key propagation in a fully decentralized setting Outgoing bandwidth cost Email encryption status (%)

  36. Merkle binary prefix trees: Proof of inclusion ROOT 1 0 0 1 1 0 0 0 1 0 1 0 1 1

  37. Merkle binary prefix trees: Proof of inclusion (alice@riseup.net, 0x1A2B3C) ROOT VRF pkVRF (alice@riseup.net) = 01011... 1 0 0 1 1 0 0 0 1 0 1 0 1 1

  38. Merkle binary prefix trees: Proof of inclusion (alice@riseup.net, 0x1A2B3C) ROOT VRF pkVRF (alice@riseup.net) = 01011... 1 0 0 1 1 0 0 0 1 0 1 0 1 1

  39. Merkle binary prefix trees: Proof of inclusion (alice@riseup.net, 0x1A2B3C) ROOT ROOT VRF pkVRF (alice@riseup.net) = 01011... 1 0 0 1 1 0 0 0 1 0 1 0 1 1 i = 01011… v =0x1A2B

Recommend


More recommend