CONIKS (KEY TRANSPARENCY)
Slides adapted from Marcela Melara [USENIX Security ’15, Marcela S. Melara, Aaron Blankstein, Joseph Bonneau, Edward W. Felten, Michael J. Freedman]
CONIKS (KEY TRANSPARENCY) Slides adapted from Marcela Melara The - - PowerPoint PPT Presentation
[USENIX Security 15, Marcela S. Melara, Aaron Blankstein, Joseph Bonneau, Edward W. Felten, Michael J. Freedman] CONIKS (KEY TRANSPARENCY) Slides adapted from Marcela Melara The problem of the PKI (Public key infrastructure) A long
Slides adapted from Marcela Melara [USENIX Security ’15, Marcela S. Melara, Aaron Blankstein, Joseph Bonneau, Edward W. Felten, Michael J. Freedman]
keys securely in the presence of attackers
Bob and needs Bob’s public key to encrypt the message
incorrect PK
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!
Equivocates: returns incorrect value
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
Non-Equivocation No unexpected key changes Key seen by Alice = Key seen by Bob Alice’s key today = Alice’s key yesterday
These are essentially blockchains, with decentralized security but hosted centrally
à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
snapshot = root signed by provider
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
username -> index; arrange usernames based on index in the leaves
foo.com
ialice: PKAlice H(subL) H(subR) H(subL) H(subR) root H(subL) H(subR) icharlie: PKCharlie 1 1
A user can ask the server to prove inclusion of a binding (i->PK) against a signed snapshot: this can be the owner of the binding, or a user wanting to fetch the PK for i
foo.com
ialice: PKAlice H(subL) H(subR) H(subL) H(subR) root
a signed snapshot
binding against the signed snapshot
different signed snapshots
H(seed) root0 Snapshot0
H(rootprev-1) rootprev Snapshotprev tprev tprev-1 H(rootprev) roott Snapshott t tprev
The provider gives the signed last snapshot to other providers, who check that it is well-formed (e.g., it contains a hash of the previous snapshot) and cross-check that they all received the same snapshot
Blockchain!
to check for consistency
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 Check ``alice’’ is not taken already Why do we need this “promise” signed? (provider might discard update forever)
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
What can happen without monitoring?
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
Every user is responsible for monitoring their binding How often does each user need to check his/her binding?
What can happen without auditing?
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
The attacker can provide different but well-formed snapshots
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
Is it clear why foo cannot equivocate?
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.
Progress on any of:
IoT devices, wants to generate a snapshot every second