CONIKS (KEY TRANSPARENCY)
Slides adapted from Marcela Melara
CONIKS (KEY TRANSPARENCY) Slides adapted from Marcela Melara Any - - PowerPoint PPT Presentation
CONIKS (KEY TRANSPARENCY) Slides adapted from Marcela Melara Any scriber for today? Sign up for presentations or scribers The problem of the PKI (Public key infrastructure) A long standing problem has been to distribute public keys
Slides adapted from Marcela Melara
keys securely in the presence of attackers
Bob and needs Bob’s public key to encrypt the message
incorrect PK
Email Provider foo.com User Alice User Bob
HTTP + SSL/TLS HTTP + SSL/TLS
Certificate Authority
SSL/TLS Certificate: (foo.com, PKf)
Email Provider foo.com User Alice User Bob
HTTP + SSL/TLS HTTP + SSL/TLS
Certificate Authority
SSL/TLS Certificate: (foo.com, PKf)
Email Provider foo.com User Alice User Bob
HTTP + SSL/TLS HTTP + SSL/TLS
Certificate Authority
SSL/TLS Certificate: (foo.com, PKf)
Email Provider foo.com User Alice User Bob
HTTP + SSL/TLS HTTP + SSL/TLS
Certificate Authority
SSL/TLS Certificate: (foo.com, PKf)
Email Provider foo.com User Alice User Bob
HTTP + SSL/TLS HTTP + SSL/TLS
Certificate Authority
SSL/TLS Certificate: (foo.com, PKf)
Email Provider foo.com User Alice User Bob
HTTP + SSL/TLS HTTP + SSL/TLS
Certificate Authority
SSL/TLS Certificate: (foo.com, PKf)
Hacker foo.com
“hey, I’m foo.com”
Email Provider foo.com User Alice User Bob
HTTP + SSL/TLS HTTP + SSL/TLS
Certificate Authority
SSL/TLS Certificate: (foo.com, PKf)
Hacker foo.com
Certificate: (foo.com, PKevil)
Email Provider foo.com User Alice User Bob
HTTP + SSL/TLS HTTP + SSL/TLS
Certificate Authority
SSL/TLS Certificate: (foo.com, PKf)
Email Provider foo.com User Alice User Bob
HTTP + SSL/TLS HTTP + SSL/TLS
Certificate Authority
SSL/TLS Certificate: (foo.com, PKf)
Hacker foo.com
Certificate: (foo.com, PKevil)
Email Provider foo.com User Alice User Bob
E2E Encryption E2E Encryption
User Alice User Bob
PKAlice: DEF456 PKBob: 123ABC
Manual key exchange
User Alice User Bob
Alice trusts PKBob Bob trusts PKAlice
Mutual Endorsement
User Alice User Bob
PKAlice: DEF456 PKBob: 123ABC
Lost keys
User Alice User Bob
PKAlice: DEF456 PKBob: 123BAC
Mistakes transferring keys
Should be AB
Email Provider foo.com User Alice User Bob
E2E Encryption E2E Encryption
PGP Key Server X
PKBob PKAlice
XKCD, Responsible Behavior
[1] A. Whitten and J. D. Tygar. Why Johnny can’t encrypt: a usability evaluation of PGP 5.0. USENIX Security, Aug. 1999 [2] S. Gaw, E. W. Felten, and P. Fernandez-Kelly. Secrecy, flagging, and paranoia: Adoption criteria in encrypted email. CHI, Apr 2006.
Register (alice → PKA)
Email + Key Provider foo.com User Alice User Bob
1 1 Register (bob → PKB)
Register (alice → PKA)
Email + Key Provider foo.com User Alice User Bob
1 Look up Alice’s public key: PKA 2 Send message encrypted to PKA, signed by SKB 3 3
Register (alice → PKA)
Email + Key Provider foo.com User Alice User Bob
1 Look up Alice’s public key: PK’
A
2 This isn’t Alice’s real key!
Email + Key Provider foo.com User Alice User Bob
Read message encrypted to PK’
A
4 Send message encrypted to PK’
A ,
signed by SKB 3
Alice alice@foo.com
Certificate Name: alice@foo.com PKA: 456DEF Owner: Alice Signed by: CA
Bob’s real-world friend Alice?
Non-Equivocation No unexpected key changes Key seen by Alice = Key seen by Bob Alice’s key today = Alice’s key yesterday
→automated key management
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob Register (alice → PKA) 1 1 Register (bob → PKBs)
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob Look up the public key for alice: PKA 2 3 Send message encrypted to PKA , signed by SKB 4 Look up public key for bob: PKB, verify signature, decrypt using SKA
Untrusted Identity Provider foo.com Client A Client B Client C Client D
N = 4
Validity Checks
O(N) storage per client
Non-equivocation Checks
O(N2) downloads per client
→ Clients do not check individual bindings.
→ Build publicly verifiable history
foo.com
ialice: PKAlice H(subL) H(subR) H(subL) H(subR) root H(subL) H(subR) icharlie: PKCharlie iemily: PKEmily igeorge: PKGeorge
foo.com
ialice: PKAlice H(subL) H(subR) H(subL) H(subR) root H(subL) H(subR) icharlie: PKCharlie iemily: PKEmily igeorge: PKGeorge 1 1 1
foo.com
ialice: PKAlice H(subL) H(subR) H(subL) H(subR) root H(subL) H(subR) icharlie: PKCharlie 1 1
foo.com
ialice: PKAlice H(subL) H(subR) H(subL) H(subR) root
H(seed) root0 Snapshot0
H(rootprev-1) rootprev Snapshotprev tprev tprev-1 H(rootprev) roott Snapshott t tprev
H(seed) root0 Snapshot0
H(rootprev-1) rootprev Snapshotprev tprev tprev-1 H(rootprev) roott Snapshott t tprev
H(root’prev-1) root’prev Snapshot’prev tprev tprev-1 H(root’prev) root’t Snapshot’t t tprev
The server can try a fork attack, but after fork the provider must maintain these forked hash chains for the rest of time, and not allow clients seeing one branch of the hash chain to communicate with anyone seeing the other branch.
Register (alice → PKA)
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob 2 Temporary binding = [(alice → PKA) + next epoch], Sig(TB) 3 Generate key pair (PKA, SKA) 1
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob
Provider regularly generates and publishes snapshots
Register (alice → PKA)
PKA PKB
Publish new snapshot including PKA
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob Look up the public key for alice: PK’
A
This isn’t alice’s real key!
Return Fake Key
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob Verify & accept snapshot
No proof fake key is inconsistent with snapshot
PKA PKB
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob Read message encrypted to PK’
A
Send message encrypted to PK’
A ,
signed by SKB
Provider can read Bob’s message
and not leaving any evidence of the misbehavior.
Lookup (alice → PKA)
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob 1 Send proof of inclusion: Authentication path for (alice → PKA) 2 Verify auth. path 3
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob Register (alice → PKA) Look up the public key for alice: PKA
Epoch 1: Key has not Changed
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob Send message encrypted to PKA, signed by SKB
Epoch 1: Provider cannot read Bob’s message
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob Look up the public key for alice: PK’
A
This isn’t Alice’s real key!
Epoch 2: Key has been Changed
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob Read message encrypted to PK’
A
Send message encrypted to PK’
A ,
signed by SKB
Epoch 2: Provider can read Bob’s message
replacing existing keys.
Lookup (alice → PKA)
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob 1 Send (alice → PKA) + authentication path 2 Verify validity of binding & auth. path 3
Register (bob → PKB)
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob Register (alice → PKA)
Clients register legitimate Keys
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob client B sees PK’
A as
alice’s public key
Provider creates two versions of its Directory
client A sees PK’B as bob’s public key
Untrusted Identity Provider foo.com Client A Client B
User Alice User Bob
Provider presents two different but valid snapshots
Verify & accept snapshot SA Verify & accept snapshot SB
PKA PK’B
SA
PK’A PKB
SB
publishing inconsistent versions of key directory.
Verify foo.com’s snapshot history
Untrusted Identity Provider foo.com Client A
User Alice Distribute signed snapshot Verify foo.com’s snapshot history
Untrusted Identity Provider bar.com Client B
1
Untrusted Identity Provider rando.com
1
Send most recent snapshot Request most recent snapshot
Untrusted Identity Provider foo.com Client A
User Alice
Untrusted Identity Provider bar.com Client B
2
Untrusted Identity Provider rando.com
Verify foo.com’s snapshot history 4 Verify foo.com’s snapshot history Verify foo.com’s snapshot history 1 1 3
Valid Match Check signature
Compare H(rootprev) of cached and new snapshot rootprev Check passed
Fail Not matching Valid Check signature
Compare H(rootprev) of cached and new snapshot rootprev
Request snapshot
Request snapshot
Untrusted Identity Provider foo.com Client A
User Alice
Untrusted Identity Provider bar.com Client B
5
Untrusted Identity Provider rando.com
Compare observed snapshots for foo.com 6 5
d = 24 epochs/day.
Download Requirements Storage Requirements Lookup (per binding) < 1.4KB 0B Monitoring (epoch) < 800B ~ 300B Monitoring (day) < 20KB ~ 300B Auditing (epoch, per snapshot) ~ 100B ~ 100B Auditing (day, per snapshot) ~ 2.5KB ~ 100B
d = 24 epochs/day.
Download Requirements Storage Requirements Lookup (per binding) < 1.4KB 0B Monitoring (epoch) < 800B ~ 300B Monitoring (day) < 20KB ~ 300B Auditing (epoch, per snapshot) ~ 100B ~ 100B Auditing (day, per snapshot) ~ 2.5KB ~ 100B
d = 24 epochs/day.
Download Requirements Storage Requirements Lookup (per binding) < 1.4KB ~ 300B Monitoring (epoch) < 800B ~ 300B Monitoring (day) < 20KB ~ 300B Auditing (epoch, per snapshot) ~ 100B ~ 100B Auditing (day, per snapshot) ~ 2.5KB ~ 100B
d = 24 epochs/day.
Download Requirements Storage Requirements Lookup (per binding) < 1.4KB ~ 300B Monitoring (epoch) < 800B ~ 300B Monitoring (day) < 20KB ~ 300B Auditing (epoch, per snapshot) ~ 100B ~ 100B Auditing (day, per snapshot) ~ 2.5KB ~ 100B
management service for end-user public keys.