Formal ¡Security ¡Analysis ¡of ¡ Cryptographic ¡Protocol ¡Code ¡ ¡ Karthikeyan ¡Bhargavan ¡ INRIA ¡ Karthikeyan.Bhargavan@inria.fr ¡ IIT ¡Delhi, ¡Fall ¡2010 ¡
Lecture ¡4: ¡ Security ¡Proofs ¡for ¡Protocol ¡Code ¡ Formalizing ¡Security: ¡ Interfaces ¡and ¡Opponents ¡
F ¡Syntax ¡ 3 ¡
PrimiGve ¡Constructors ¡& ¡FuncGons ¡ • PrimiGve ¡types: ¡unit, ¡string, ¡bool, ¡tuples, ¡chan ¡ – F ¡is ¡an ¡untyped ¡lambda ¡calculus, ¡ ¡but ¡funcGons ¡and ¡constructors ¡have ¡ariGes. ¡ ¡ – We ¡write ¡protocol ¡code ¡that ¡compiles/typechecks ¡in ¡F#, ¡ ¡but ¡the ¡opponent ¡is ¡an ¡untyped ¡F ¡program ¡ ¡
Interfaces ¡ • An ¡interface ¡is ¡a ¡set ¡of ¡menGons ¡ • A ¡menGon ¡declares ¡ ¡ – A ¡value ¡variable, ¡or ¡ – A ¡constructor ¡of ¡arity ¡ n , ¡or ¡ – A ¡funcGon ¡of ¡arity ¡ n ¡
Prim: ¡An ¡Interface ¡for ¡F ¡PrimiGves ¡ • Constructors ¡ – true ¡: ¡ ctor ¡0 ¡ – false ¡: ¡ ctor ¡0 ¡ – tuple i ¡: ¡ ctor ¡i ¡(i ∈ 1..m) ¡ – S s ¡: ¡ ctor ¡0 ¡ ¡ ¡ ¡ ¡ ¡(s ∈ Strings) ¡ • FuncGons ¡ – failwith: ¡ fun ¡1 ¡ ¡ ¡ ¡ ¡ ¡ ¡failwith ¡“error ¡condiGon” ¡ – log ¡: ¡ fun ¡1 ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡log ¡(Send(x)) ¡ – name ¡: ¡ fun ¡1 ¡ ¡ ¡ ¡ ¡ ¡ ¡name ¡() ¡ – send: ¡ fun ¡2 ¡ ¡ ¡ ¡ ¡send ¡chan ¡msg ¡ – recv: ¡ fun ¡1 ¡ ¡ ¡ ¡ ¡recv ¡chan ¡
FormaGon ¡Rules ¡for ¡F ¡Interfaces ¡
Example: ¡System ¡Interface ¡
Example: ¡System ¡Interface ¡ System ¡(Program) ¡ System ¡Interface ¡
Public ¡Interfaces ¡and ¡Opponents ¡ • For ¡each ¡system ¡we ¡declare ¡a ¡ public ¡ interface ¡ – It ¡must ¡be ¡a ¡proper ¡subset ¡of ¡the ¡system ¡interface ¡ • Opponents ¡are ¡parameterized ¡by ¡public ¡interfaces ¡ • An ¡ I-‑opponent ¡is ¡an ¡F ¡program ¡that ¡can ¡access ¡ ¡ the ¡values, ¡constructors ¡and ¡funcGons ¡in ¡ ¡ Prim ¡\ ¡log ¡+ ¡I ¡ ¡ ¡ – An ¡opponent ¡must ¡be ¡well-‑formed ¡(respect ¡ariGes) ¡
Example: ¡System ¡Interface ¡ System ¡Interface ¡ Public ¡Interface ¡
Formalizing ¡Security: ¡Queries ¡ • A ¡query ¡is ¡a ¡property ¡of ¡runGme ¡configuraGons ¡ – E ¡ is ¡called ¡the ¡ end ¡event ¡ – B 1 ,…, ¡B n ¡ ¡ are ¡called ¡ begin ¡events ¡ – It ¡encodes ¡a ¡safety ¡property ¡on ¡reducGon ¡traces ¡ – E.g. ¡ev:Accept(x) ¡=> ¡ev:Send(x) ¡ – Whenever ¡the ¡event ¡Accept(x) ¡is ¡logged ¡(for ¡any ¡x) ¡ the ¡event ¡Send(x) ¡must ¡have ¡been ¡logged ¡before ¡ ¡ – Free ¡variables ¡in ¡end ¡events ¡(e.g. ¡x) ¡are ¡universally ¡quanGfied ¡
Query ¡SaGsfacGon ¡ • A ¡configuraGon ¡saGsfies ¡a ¡query ¡iff ¡ – whenever ¡the ¡end ¡event ¡occurs ¡in ¡the ¡ configuraGon ¡under ¡some ¡subsGtuGon ¡σ ¡ – one ¡of ¡the ¡begin ¡events ¡also ¡occurs ¡under ¡σ ¡ • E.g. ¡if ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡C ¡ ≡ ¡event ¡Accept(x) ¡{“foo”/x} ¡| ¡C’, ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡then ¡ ¡ ¡ ¡C’ ¡ ≡ ¡event ¡Send(x) ¡{“foo”/x”} ¡| ¡C’’ ¡
Formal ¡Security ¡Goal: ¡Robust ¡Safety ¡ • A ¡program ¡is ¡ safe ¡for ¡a ¡query ¡ q ¡if ¡ q ¡ is ¡saGsfied ¡by ¡all ¡its ¡reachable ¡ configuraGons ¡ ¡ – QuanGficaGon ¡over ¡all ¡reducGon ¡traces ¡ • A ¡program ¡is ¡robustly ¡safe ¡for ¡ q ¡ and ¡public ¡interface ¡ I ¡if ¡it ¡is ¡safe ¡ against ¡all ¡ I -‑opponents ¡ – QuanGficaGon ¡over ¡all ¡opponents ¡ ¡
Undecidability ¡of ¡Security ¡VerificaGon ¡ • Robust ¡safety ¡quanGfies ¡over ¡all ¡reducGon ¡traces ¡ and ¡all ¡opponents ¡ – Is ¡the ¡number ¡of ¡traces ¡finite? ¡ ¡ – No, ¡but ¡a ¡number ¡of ¡traces ¡look ¡the ¡same ¡ e.g. ¡(client ¡k1 ¡| ¡server ¡k1) ¡vs ¡(client ¡k2 ¡| ¡server ¡k2) ¡ ¡ – Is ¡the ¡number ¡of ¡disGnct ¡“shapes” ¡of ¡traces ¡finite? ¡ – Only ¡if ¡the ¡number ¡of ¡names ¡is ¡fixed ¡ • That ¡is, ¡if ¡the ¡number ¡of ¡sessions/keys/nonces ¡is ¡fixed ¡ • In ¡general, ¡security ¡verificaGon ¡is ¡undecidable ¡ – Decidable ¡under ¡a ¡variety ¡of ¡(unrealisGc) ¡restricGons ¡
Example ¡ • Let ¡ S 10 ¡ be ¡our ¡target ¡program ¡ • Let ¡ I 10 ¡ be ¡its ¡full ¡system ¡interface ¡ • Let ¡ I pub ¡ be ¡its ¡public ¡interface ¡ • Let ¡ q ¡ be ¡the ¡query ¡ev:Accept(x) ¡=> ¡ev:Send(x) ¡ • Is ¡ S 10 ¡ safe ¡for ¡ q ? ¡ • Is ¡ S 10 ¡ robustly ¡safe ¡for ¡ q ¡ and ¡ I 10 ? ¡ – Is ¡there ¡an ¡ I 10 -‑opponent ¡ O ¡ s.t. ¡ S 10 ¡ O ¡ is ¡unsafe ¡for ¡ q? ¡ • Is ¡ S 10 ¡ robustly ¡safe ¡for ¡ q ¡ and ¡ I pub ? ¡
Lecture ¡4: ¡ Security ¡Proofs ¡for ¡Protocol ¡Code ¡ A ¡Proof ¡of ¡Security ¡
Security ¡Goal ¡ • Is ¡ S 10 ¡ robustly ¡safe ¡for ¡ q ¡ and ¡ I pub ? ¡ • where ¡ q ¡ is: ¡ev:Accept(x) ¡=> ¡ev:Send(x) ¡ • and ¡ I pub ¡ is: ¡
Towards ¡a ¡RunGme ¡Invariant ¡ • We ¡can ¡show ¡that ¡ S 10 ¡ ¡ always ¡goes ¡to ¡ • Let ¡ O ¡ be ¡an ¡ I pub -‑ opponent ¡ • Let ¡ C 1 ¡be ¡ C 0 ¡| ¡ d u1 ¡d u2 ¡O ¡ • Then ¡ S 10 ¡ O ¡-‑> * ¡ C 1 ¡ • The ¡program ¡d u1 ¡d u2 ¡O ¡ ¡ is ¡also ¡an ¡ I pub -‑ opponent ¡ – Does ¡not ¡use ¡key, ¡uses ¡only ¡funcGons ¡and ¡values ¡in ¡ I pub ¡ • Hence, ¡ C 1 ¡is ¡of ¡the ¡form ¡ C 0 ¡| ¡ O’ , ¡where ¡ C 0 ¡ is ¡inacGve ¡
Towards ¡a ¡RunGme ¡Invariant ¡ • How ¡can ¡the ¡opponent ¡ O’ ¡ produce ¡event ¡Accept(x)? ¡ – by ¡calling ¡resp ¡(), ¡and ¡ ¡ – by ¡producing ¡Enc(x,k) ¡ • Can ¡the ¡opponent ¡obtain ¡k? ¡ – No, ¡otherwise ¡the ¡protocol ¡is ¡broken ¡ • How ¡can ¡the ¡opponent ¡produce ¡Enc(x,k)? ¡ – by ¡calling ¡init ¡x, ¡and ¡ – hence, ¡triggering ¡Send(x) ¡before ¡obtaining ¡Enc(x,k) ¡ • So, ¡our ¡runGme ¡invariant ¡must ¡capture ¡ – The ¡states ¡of ¡different ¡calls ¡to ¡resp, ¡ – The ¡occurrences ¡of ¡k ¡ ¡ – The ¡states ¡of ¡different ¡calls ¡to ¡init ¡ ¡
A ¡RunGme ¡Invariant ¡ For ¡all ¡configuraGons ¡ C ¡such ¡that ¡ C 1 ¡-‑> * ¡ C ¡ ¡ ¡ ¡ C ¡ must ¡be ¡of ¡the ¡form ¡ ¡ ¡C 0 ¡| ¡ event ¡Accept( s1 ) ¡| ¡ event ¡Send( s1 ) ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡| ¡… ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡| ¡ event ¡Accept( sk ) ¡| ¡ event ¡Send( sk ) ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ | ¡ event ¡Send( t1 ) ¡| ¡… ¡| ¡ event ¡Send( tm ) ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ ¡ | ¡i 1 ¡| ¡… ¡| ¡ i l ¡| ¡r 1 ¡| ¡… ¡| ¡ r l ¡| ¡O’ ¡where ¡ – All ¡occurrences ¡of ¡k ¡in ¡O’ ¡are ¡of ¡the ¡form ¡Enc(G, ¡k) ¡ – Each ¡ i j ¡ ¡ is ¡of ¡the ¡form ¡let ¡x ¡= ¡ e j ¡ in ¡ O j ¡ where ¡ ¡ ¡ e j ¡ ¡ ¡ is ¡an ¡intermediate ¡expression ¡of ¡init ¡and ¡ ¡ ¡ ¡ ¡ all ¡occurrences ¡of ¡k ¡in ¡O j ¡are ¡of ¡the ¡form ¡Enc(G, ¡k) ¡ – Each ¡ r j ¡ ¡ is ¡of ¡the ¡form ¡let ¡x ¡= ¡ e j ¡ in ¡ O j ¡ where ¡ ¡ e j ¡ ¡ ¡ is ¡an ¡intermediate ¡expression ¡of ¡resp ¡
Recall: ¡ReducGons ¡of ¡init ¡
Recall: ¡ReducGons ¡of ¡init ¡
Recall: ¡ReducGons ¡of ¡recv ¡
Recommend
More recommend