Cross-Tool Semantics for Protocol Security Goals SSR December 5, - - PowerPoint PPT Presentation
Cross-Tool Semantics for Protocol Security Goals SSR December 5, - - PowerPoint PPT Presentation
Cross-Tool Semantics for Protocol Security Goals SSR December 5, 2016 Gaithersburg, MD Joshua D. Guttman, John D. Ramsdell, Paul D. Rowe The MITRE Corporation {guttman, ramsdell, prowe}@mitre.org 2 Transparency in Security Standardization
§ Public trust in standardized security protocols is based in transparency
– Rigorous analysis can help rule out hidden insecurities
§ True transparency requires
– Reproducibility of results – By multiple, independent parties – Using a diversity of methods or tools
§ Sometimes analysis can be opaque
– Reliance on expert knowledge – Reliance on specific tool set
2
Transparency in Security Standardization
§ Standardized framework for the verification of cryptographic protocols § Highest assurance level (4) requires
– Formal, tool-supported, analysis of unbounded sessions
§ Reproducibility calls for tool-independent inputs
– We claim our first-order language of security goals is tool-independent
Self-assessment evidence Protocol description Adversary model Security properties
3
ISO/IEC 29128
Impact:
§
Improve reproducibility of formal analyses
Technical:
§
New semantics of first-order language for security goals – Originally designed for strand spaces (CPSA) – Adapted for applied 𝜌 (ProVerif)
§
Proof of compatibility of the two semantics
4
Main Contributions
5
Compatible Cross-Tool Semantics
P ℙ ℒ(P) ℒ(ℙ)
strand runs traces
⊨ ⊨ 𝑔 𝐶*+,
- 𝐶
.*
- Strand spaces
Applied 𝝆
6
Simple Example Protocol (SEP) 𝑩 ⟶ 𝑪: 𝑙 𝒕𝒍(𝒃)
𝒒𝒍(𝒄) 𝒃
𝑪 ⟶ 𝑩: 𝒆
< 𝒕
Clients 𝐵 may not always choose symmetric key 𝑙 randomly Servers 𝐶 always choose data d randomly
If 𝑩 has finished a session with 𝑪; and 𝑪’s private decryption key 𝒒𝒍 𝑪 ?𝟐 is uncompromised and the session key 𝒍 is freshly chosen
7
Sample Goals
then 𝑪 previously transmitted 𝒆 with matching parameters then 𝒆 remains confidential
§ Ordering and equality
– Preceq(m,n), Coll(m,n), d = d’
§ Freshness and secrecy
– Unq(d), UnqAt(m,d), Non(sk(a))
8
Goal Language
Protocol-Dependent Protocol-Independent
§ Role position predicates
– InitStart(n), RespDone(m)
§ Parameter predicates
– Self(n,a), SessKey(m,k)
If 𝑩 has finished a session with 𝑪; and 𝑪’s private decryption key 𝒒𝒍 𝑪 ?𝟐 is uncompromised and the session key 𝒍 is freshly chosen
9
Sample Goal Formalized
then 𝑪 previously transmitted 𝒆 with matching parameters
InitDone(n) ∧ Self(n,a) ∧ Peer(n,b) ∧ SessKey(n,k) ∧ Data(n,d) ∧ Non(pk(b)-1) ∧ Unq(k)
⟹
RespDone(m) ∧ Self(m,b) ∧ Peer(m,a) ∧ SessKey(n,k) ∧ Data(m,d) ∧ Preceq(m,n) ∀ n,a,b,k,d. ∃ m.
𝑄, 𝑅 = in 𝑑, 𝑦 . 𝑄
- utℓ 𝑑, 𝑣 . 𝑄
let 𝑦 ∶ s = 𝑤 in 𝑄 else 𝑅 (𝑄 ∣ 𝑅) new 𝑜 ∶ s . 𝑄 sum 𝑜R ∶ s . 𝑄 !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . 𝑄 ℓ . 𝑄
10
Applied 𝝆 Syntax
(𝑑, 𝑢𝑗𝑒 ∈ 𝐷ℎ, 𝑦 ∈ 𝒴, 𝑜 ∈ 𝒪
[\, 𝑜R ∈ 𝒪 [])
11
Applied 𝝆 Protocols
sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . sum 𝑙: skey . outInitStart(𝑢𝑗𝑒, 𝑙 [<(`)
a<(b) `
) . in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙: skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data . outRespDone(𝑢𝑗𝑒, 𝑒
< [) . 𝟏
Init = Resp = !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 .
𝑩 ⟶ 𝑪: 𝑙 [<(`)
a<(b) `
𝑪 ⟶ 𝑩: 𝑒
< [
12
Operational Trace Semantics
sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . sum 𝑙: skey . outInitStart(𝑢𝑗𝑒, 𝑙 [<(`)
a<(b) `
) . in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙 ∶ skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data . outRespDone(𝑢𝑗𝑒, 𝑒
< [) . 𝟏
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 .
13
Operational Trace Semantics
sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . sum 𝑙: skey . outInitStart(𝑢𝑗𝑒, 𝑙 [<(`)
a<(b) `
) . in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙 ∶ skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data . outRespDone(𝑢𝑗𝑒, 𝑒
< [) . 𝟏
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 .
14
Operational Trace Semantics
sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . sum 𝑙: skey . outInitStart(𝑢𝑗𝑒, 𝑙 [<(`)
a<(b) `
) . in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙 ∶ skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data . outRespDone(𝑢𝑗𝑒, 𝑒
< [) . 𝟏
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 .
15
Operational Trace Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . sum 𝑙: skey . outInitStart(𝑢𝑗𝑒, 𝑙 [<(`)
a<(b) `
) . in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙 ∶ skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data . outRespDone(𝑢𝑗𝑒, 𝑒
< [) . 𝟏
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 .
16
Operational Trace Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . sum 𝑙: skey . outInitStart(𝑢𝑗𝑒, 𝑙 [<(`)
a<(b) `
) . in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙 ∶ skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data . outRespDone(𝑢𝑗𝑒, 𝑒
< [) . 𝟏
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 .
17
Operational Trace Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . sum 𝑙: skey . outInitStart(𝑢𝑗𝑒, 𝑙 [<(`)
a<(b) `
) . in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙 ∶ skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data . outRespDone(𝑢𝑗𝑒, 𝑒
< [) . 𝟏
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 .
18
Operational Trace Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . sum 𝑙: skey . outInitStart(𝑢𝑗𝑒, 𝑙 [<(`)
a<(b) `
) . in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙 ∶ skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data . outRespDone(𝑢𝑗𝑒, 𝑒
< [) . 𝟏
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 .
19
Operational Trace Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . sum 𝑙: skey . outInitStart(𝑢𝑗𝑒, 𝑙 [<(`)
a<(b) `
) . in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙 ∶ skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data . outRespDone(𝑢𝑗𝑒, 𝑒
< [) . 𝟏
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 .
20
Operational Trace Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . sum 𝑙: skey . outInitStart(𝑢𝑗𝑒, 𝑙 [<(`)
a<(b) `
) . in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙 ∶ skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data . outRespDone(𝑢𝑗𝑒, 𝑒
< [) . 𝟏
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 .
21
Operational Trace Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓). sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . sum 𝑙: skey . outInitStart(𝑢𝑗𝑒, 𝑙 [<(`)
a<(b) `
) . in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙 ∶ skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data . outRespDone(𝑢𝑗𝑒, 𝑒
< [) . 𝟏
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 .
22
Operational Trace Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓). (⊥, in 𝑢𝑗𝑒, 𝑛s , 𝓕𝟔). sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . sum 𝑙: skey . outInitStart(𝑢𝑗𝑒, 𝑙 [<(`)
a<(b) `
) . in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙 ∶ skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data . outRespDone(𝑢𝑗𝑒, 𝑒
< [) . 𝟏
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 .
23
Operational Trace Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓). (⊥, in 𝑢𝑗𝑒, 𝑛s , 𝓕𝟔). sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . sum 𝑙: skey . outInitStart(𝑢𝑗𝑒, 𝑙 [<(`)
a<(b) `
) . in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙 ∶ skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data . outRespDone(𝑢𝑗𝑒, 𝑒
< [) . 𝟏
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 .
24
Operational Trace Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓). (⊥, in 𝑢𝑗𝑒, 𝑛s , 𝓕𝟔). (InitDone, ⊥, 𝓕𝟕) sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . sum 𝑙: skey . outInitStart(𝑢𝑗𝑒, 𝑙 [<(`)
a<(b) `
) . in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙 ∶ skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data . outRespDone(𝑢𝑗𝑒, 𝑒
< [) . 𝟏
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 .
25
Security Goal Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓). (⊥, in 𝑢𝑗𝑒, 𝑛s , 𝓕𝟔). (InitDone, ⊥, 𝓕𝟕)
InitDone(n) ∧ Self(n,a) ∧ Peer(n,b) ∧ SessKey(n,k) ∧ Data(n,d) ∧ Non(pk(b)-1) ∧ Unq(k)
⟹
RespDone(m) ∧ Self(m,b) ∧ Peer(m,a) ∧ SessKey(m,k) ∧ Data(m,d) ∧ Preceq(m,n) ∀ n,a,b,k,d. ∃ m.
26
Security Goal Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓). (⊥, in 𝑢𝑗𝑒, 𝑛s , 𝓕𝟔). (InitDone, ⊥, 𝓕𝟕)
InitDone(n) ∧ Self(n,a) ∧ Peer(n,b) ∧ SessKey(n,k) ∧ Data(n,d) ∧ Non(pk(b)-1) ∧ Unq(k)
⟹
RespDone(m) ∧ Self(m,b) ∧ Peer(m,a) ∧ SessKey(m,k) ∧ Data(m,d) ∧ Preceq(m,n) ∀ n,a,b,k,d. ∃ m.
27
Security Goal Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓). (⊥, in 𝑢𝑗𝑒, 𝑛s , 𝓕𝟔). (InitDone, ⊥, 𝓕𝟕)
InitDone(n) ∧ Self(n,a) ∧ Peer(n,b) ∧ SessKey(n,k) ∧ Data(n,d) ∧ Non(pk(b)-1) ∧ Unq(k)
⟹
RespDone(m) ∧ Self(m,b) ∧ Peer(m,a) ∧ SessKey(m,k) ∧ Data(m,d) ∧ Preceq(m,n) ∀ n,a,b,k,d. ∃ m.
28
Security Goal Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓). (⊥, in 𝑢𝑗𝑒, 𝑛s , 𝓕𝟔). (InitDone, ⊥, 𝓕𝟕)
InitDone(n) ∧ Self(n,a) ∧ Peer(n,b) ∧ SessKey(n,k) ∧ Data(n,d) ∧ Non(pk(b)-1) ∧ Unq(k)
⟹
RespDone(m) ∧ Self(m,b) ∧ Peer(m,a) ∧ SessKey(m,k) ∧ Data(m,d) ∧ Preceq(m,n) ∀ n,a,b,k,d. ∃ m.
29
Security Goal Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓). (⊥, in 𝑢𝑗𝑒, 𝑛s , 𝓕𝟔). (InitDone, ⊥, 𝓕𝟕)
InitDone(n) ∧ Self(n,a) ∧ Peer(n,b) ∧ SessKey(n,k) ∧ Data(n,d) ∧ Non(pk(b)-1) ∧ Unq(k)
⟹
RespDone(m) ∧ Self(m,b) ∧ Peer(m,a) ∧ SessKey(m,k) ∧ Data(m,d) ∧ Preceq(m,n) ∀ n,a,b,k,d. ∃ m.
30
Security Goal Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓). (⊥, in 𝑢𝑗𝑒, 𝑛s , 𝓕𝟔). (InitDone, ⊥, 𝓕𝟕)
InitDone(n) ∧ Self(n,a) ∧ Peer(n,b) ∧ SessKey(n,k) ∧ Data(n,d) ∧ Non(pk(b)-1) ∧ Unq(k)
⟹
RespDone(m) ∧ Self(m,b) ∧ Peer(m,a) ∧ SessKey(m,k) ∧ Data(m,d) ∧ Preceq(m,n) ∀ n,a,b,k,d. ∃ m.
31
Security Goal Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓). (⊥, in 𝑢𝑗𝑒, 𝑛s , 𝓕𝟔). (InitDone, ⊥, 𝓕𝟕)
InitDone(n) ∧ Self(n,a) ∧ Peer(n,b) ∧ SessKey(n,k) ∧ Data(n,d) ∧ Non(pk(b)-1) ∧ Unq(k)
⟹
RespDone(m) ∧ Self(m,b) ∧ Peer(m,a) ∧ SessKey(m,k) ∧ Data(m,d) ∧ Preceq(m,n) ∀ n,a,b,k,d. ∃ m.
32
Security Goal Semantics
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓). (⊥, in 𝑢𝑗𝑒, 𝑛s , 𝓕𝟔). (InitDone, ⊥, 𝓕𝟕)
InitDone(n) ∧ Self(n,a) ∧ Peer(n,b) ∧ SessKey(n,k) ∧ Data(n,d) ∧ Non(pk(b)-1) ∧ Unq(k)
⟹
RespDone(m) ∧ Self(m,b) ∧ Peer(m,a) ∧ SessKey(m,k) ∧ Data(m,d) ∧ Preceq(m,n) ∀ n,a,b,k,d. ∃ m.
A protocol achieves a goal Γ iff all admitted traces satisfy Γ
§ An entity originates a value if it transmits it without having received it
– An entity must know or create a value to originate it
§ Method for expressing freshness and secrecy of values
– Characterizes the effects of randomness and secrecy
§ Traces allow us to identify points of origination for values
33
Origination
Unique origination: A randomly chosen value can
- nly originate at most once.
Non-origination: Keys kept secret never originate.
§ !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . 𝑄
– Replication is bound to channel restriction – Enables sensible semantics for Coll(m,n)
§ Diverse trace elements
– Labels: semantics for role position predicates – Msg events: semantics for origination
§ Labels occur in two ways
– outℓ 𝑑, 𝑣 . 𝑄 and ℓ . 𝑄 – Required for compatibility with strand space semantics
§ sum 𝑜R ∶ s . 𝑄
– Acts as infinite choice operator 𝑄 + 𝑅 – Allows multiple origination of values – Finite choice may suffice (e.g. bounded agent set)
34
Notable Details
§ Independent replication of results depends on:
– Analyzing compatible protocols § Roles must create same traces – Compatible semantics for predicates
§ Λ 𝑔 𝜐 𝜍{@𝑘
= 𝜍{@𝑘
§ We provide
– Prototype compiler from strands to applied 𝜌 – Semantic criterion for compatibility
35
Compatible Protocols
𝜐 Λ
36
Compilation
Main Idea: +𝑛 ⟼ outℓ(𝑢𝑗𝑒, 𝑛) −𝑛 ⟼ in 𝑢𝑗𝑒, 𝑨 . … . ℓ
Sequence of let bindings to parse 𝑨 as 𝑛
37
Compilation
Main Idea: +𝑛 ⟼ outℓ(𝑢𝑗𝑒, 𝑛) −𝑛 ⟼ in 𝑢𝑗𝑒, 𝑨 . … . ℓ
Sequence of let bindings to parse 𝑨 as 𝑛
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . Resp
38
Compilation
Main Idea: +𝑛 ⟼ outℓ(𝑢𝑗𝑒, 𝑛) −𝑛 ⟼ in 𝑢𝑗𝑒, 𝑨 . … . ℓ
Sequence of let bindings to parse 𝑨 as 𝑛
𝑙 [<(`)
a<(b) `
in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙: skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . Resp
39
Compilation
Main Idea: +𝑛 ⟼ outℓ(𝑢𝑗𝑒, 𝑛) −𝑛 ⟼ in 𝑢𝑗𝑒, 𝑨 . … . ℓ
Sequence of let bindings to parse 𝑨 as 𝑛
𝑙 [<(`)
a<(b) `
𝑒
< [
in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙: skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart .
- utRespDone(𝑢𝑗𝑒,
𝑒
< [) . 𝟏
!new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . Resp
40
Compilation
Main Idea: +𝑛 ⟼ outℓ(𝑢𝑗𝑒, 𝑛) −𝑛 ⟼ in 𝑢𝑗𝑒, 𝑨 . … . ℓ
Sequence of let bindings to parse 𝑨 as 𝑛
𝑙 [<(`)
a<(b) `
𝑒
< [
in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙: skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart .
- utRespDone(𝑢𝑗𝑒,
𝑒
< [) . 𝟏
sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . Resp
41
Compilation
Main Idea: +𝑛 ⟼ outℓ(𝑢𝑗𝑒, 𝑛) −𝑛 ⟼ in 𝑢𝑗𝑒, 𝑨 . … . ℓ
Sequence of let bindings to parse 𝑨 as 𝑛
𝑙 [<(`)
a<(b) `
𝑒
< [
in(𝑢𝑗𝑒, 𝑨) . let 𝑦: ⊤ = 𝑒𝑓𝑑` 𝑨, 𝑡𝑙(𝑐) in let 𝑙: skey = 𝑤𝑓𝑠 𝑦, 𝑞𝑙(𝑏) in RespStart . new 𝑒 ∶ data .
- utRespDone(𝑢𝑗𝑒,
𝑒
< [) . 𝟏
sum 𝑏 ∶ agt . sum 𝑐 ∶ agt . !new 𝑢𝑗𝑒 . out 𝑑, 𝑢𝑗𝑒 . Resp 𝑒 : fresh
42
Compatibility Criterion: Local Bisimulation 𝐶k
- (𝜅; 𝒯, 𝑄, ℰ) iff 𝜅 and (𝒯, 𝑄, ℰ) have
- compatible pasts
- compatible possible next steps
43
Compatibility Criterion: Local Bisimulation
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 𝑙 [<(`)
a<(b) `
𝑒
< [
𝐶k
- (𝜅; 𝒯, 𝑄, ℰ) iff 𝜅 and (𝒯, 𝑄, ℰ) have
𝜅 = 𝒯 = 𝑄 = ℰ =
𝓕𝟐 = {a ↦ 𝒃, 𝑐 ↦ 𝒄, 𝑡 ↦ 𝒕, 𝑢𝑗𝑒 ↦ 𝒖𝒋𝒆𝟐}
(init, 1, 𝜏 = {a ↦ 𝒃, 𝑐 ↦ 𝒄, 𝑡 ↦ 𝒕})
- compatible pasts
- compatible possible next steps
44
Compatibility Criterion: Local Bisimulation
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 𝑙 [<(`)
a<(b) `
𝑒
< [
𝐶k
- (𝜅; 𝒯, 𝑄, ℰ) iff 𝜅 and (𝒯, 𝑄, ℰ) have
𝜅 = 𝒯 = 𝑄 = ℰ =
𝓕𝟐 = {a ↦ 𝒃, 𝑐 ↦ 𝒄, 𝑡 ↦ 𝒕, 𝑢𝑗𝑒 ↦ 𝒖𝒋𝒆𝟐}
(init, 1, 𝜏 = {a ↦ 𝒃, 𝑐 ↦ 𝒄, 𝑡 ↦ 𝒕})
- compatible pasts
- compatible possible next steps
45
Compatibility Criterion: Local Bisimulation
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 𝑙 [<(`)
a<(b) `
𝑒
< [
𝐶k
- (𝜅; 𝒯, 𝑄, ℰ) iff 𝜅 and (𝒯, 𝑄, ℰ) have
𝜅 = 𝒯 = 𝑄 = ℰ =
𝓕𝟐 = {a ↦ 𝒃, 𝑐 ↦ 𝒄, 𝑡 ↦ 𝒕, 𝑢𝑗𝑒 ↦ 𝒖𝒋𝒆𝟐}
(init, 1, 𝜏 = {a ↦ 𝒃, 𝑐 ↦ 𝒄, 𝑡 ↦ 𝒕})
- compatible pasts
- compatible possible next steps
46
Compatibility Criterion: Local Bisimulation
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). in(𝑢𝑗𝑒, 𝑨) . let 𝑒 ∶ data = 𝑒𝑓𝑑[ 𝑨, 𝑙 in InitDone . 𝟏 𝑙 [<(`)
a<(b) `
𝑒
< [
𝐶k
- (𝜅; 𝒯, 𝑄, ℰ) iff 𝜅 and (𝒯, 𝑄, ℰ) have
𝜅 = 𝒯 = 𝑄 = ℰ =
𝓕𝟐 = {a ↦ 𝒃, 𝑐 ↦ 𝒄, 𝑡 ↦ 𝒕, 𝑢𝑗𝑒 ↦ 𝒖𝒋𝒆𝟐}
(init, 1, 𝜏 = {a ↦ 𝒃, 𝑐 ↦ 𝒄, 𝑡 ↦ 𝒕})
- compatible pasts
- compatible possible next steps
(⊥, in 𝑢𝑗𝑒, 𝑛s , 𝓕𝟔). (InitDone, ⊥, 𝓕𝟕)
47
Global Bisimulation
Init Resp
48
Global Bisimulation
𝒍 𝒕𝒍(𝒃)
𝒒𝒍(𝒄) 𝒃
Init Resp
49
Global Bisimulation
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). 𝒍 𝒕𝒍(𝒃)
𝒒𝒍(𝒄) 𝒃
Init Resp
50
Global Bisimulation
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). 𝒍 𝒕𝒍(𝒃)
𝒒𝒍(𝒄) 𝒃
Init Resp
51
Global Bisimulation
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). 𝒍 𝒕𝒍(𝒃)
𝒒𝒍(𝒄) 𝒃
Init Resp
52
Global Bisimulation
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓). 𝒍 𝒕𝒍(𝒃)
𝒒𝒍(𝒄) 𝒃
𝒆
𝒍 𝒕
Init Resp
53
Global Bisimulation
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓).(⊥, in 𝑢𝑗𝑒, 𝑛s , 𝓕𝟔). (InitDone, ⊥, 𝓕𝟕) 𝒍 𝒕𝒍(𝒃)
𝒒𝒍(𝒄) 𝒃
𝒆
𝒍 𝒕
Init Resp
54
Global Bisimulation
(InitStart, out 𝑢𝑗𝑒, 𝑛k , 𝓕𝟐). (⊥, in 𝑢𝑗𝑒, 𝑛n , 𝓕𝟑). (RespStart, ⊥, 𝓕𝟒). (RespDone, out 𝑢𝑗𝑒, 𝑛q , 𝓕𝟓).(⊥, in 𝑢𝑗𝑒, 𝑛s , 𝓕𝟔). (InitDone, ⊥, 𝓕𝟕) 𝒍 𝒕𝒍(𝒃)
𝒒𝒍(𝒄) 𝒃
𝒆
𝒍 𝒕
Init Resp
Theorem: Compatible protocols are globally bisimilar
55
Goal Preservation Theorem
Suppose 𝓠 and ℙ are globally bisimilar protocols. If 𝓠 achieves 𝚫 then ℙ achieves 𝒈(𝚫)
56
Converse is Not Always True
∀m,n.Preceq(m,n) ∨ Preceq(n,m) Strand spaces Applied 𝝆 Totally ordered traces Partially ordered executions Restricted goals: Preceq does not occur, or ∨ does not occur Trichotomy
57
Conjecture: Partial Converse
Suppose 𝓠 and ℙ are globally bisimilar protocols, and 𝚫 is a restricted goal If ℙ achieves 𝒈(𝚫) Then 𝓠 achieves 𝚫
§
Improve reproducibility of formal analyses
§
Demonstrate tool-independence of security goal language – Provide goal semantics for applied 𝜌 – Prove compatibility with goal semantics for strand spaces
58
Summary
Self-assessment evidence Protocol description Adversary model Security properties