mpri 2-30: automated verification of cryptographic protocol ...mpri 2-30:! automated verification...

73
MPRI 2-30: Automated Verification of Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon and C. Fournet) Spring, 2014

Upload: others

Post on 24-May-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

MPRI 2-30: !Automated Verification of !

Cryptographic Protocol Implementations

K Bhargavan (Slides from A.D. Gordon and C. Fournet)

Spring, 2014

Page 2: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

TLS Handshakes

Page 3: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

''''''ClientHello''''''''''''''''''99999999>'''''''''''''''''''''''''''''''''''''''''''''''''''''''ServerHello''''''''''''''''''''''''''''''''''''''''''''''''''''''Certificate*''''''''''''''''''''''''''''''''''''''''''''''''ServerKeyExchange*'''''''''''''''''''''''''''''''''''''''''''''''CertificateRequest*''''''''''''''''''''''''''''''''''''<99999999''''''ServerHelloDone'''''''Certificate*'''''''ClientKeyExchange'''''''CertificateVerify*'''''''[ChangeCipherSpec]'''''''Finished'''''''''''''''''''''99999999>''''''''''''''''''''''''''''''''''''''''''''''''[ChangeCipherSpec]''''''''''''''''''''''''''''''''''''<99999999'''''''''''''Finished'''''''Application'Data'''''''''''''<9999999>'''''Application'Data'

''''''ClientHello''''''''''''''''''99999999>'''''''''''''''''''''''''''''''''''''''''''''''''''''''ServerHello''''''''''''''''''''''''''''''''''''''''''''''''[ChangeCipherSpec]''''''''''''''''''''''''''''''''''''<99999999'''''''''''''Finished'''''''[ChangeCipherSpec]'''''''Finished'''''''''''''''''''''99999999>'''''''Application'Data'''''''''''''<9999999>'''''Application'Data'

full%handshake%

abbreviated%

Page 4: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

The Handshake •  Two linked sub-protocols –  Negotiates protocol version,!

handshake method and algorithms,!authenticated encryption method and algorithms

–  Authenticates peers from their certificates –  Derives connection keys

•  Full handshake takes up to 3 rounds with 11 messages •  Abbreviated handshake often possible

Page 5: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

''''''ClientHello''''''''' ''''''''''''99999999>'''''''''''''''''''''''''''''''''''''''''''''''''''''''ServerHello''''''''''''''''''''''''''''''''''''''''''''''''''''''Certificate*''''''''''''''''''''''''''''''''''''''''''''''''ServerKeyExchange*'''''''''''''''''''''''''''''''''''''''''''''''CertificateRequest*'''''''''''''''''''''''''''<99999999'''''''''''''''ServerHelloDone'''''''Certificate*'''''''ClientKeyExchange'''''''CertificateVerify*'''''''ChangeCipherSpec'''''''Finished''''''''''''99999999>''''''''''''''''''''''''''''''''''''''''''''''''''ChangeCipherSpec'''''''''''''''''''''''''''<99999999''''''''''''''''''''''Finished'''''''''''''''''''''''''''<9999999>''''''''''''''Application'Data'''''''Application'Data'''

Full%handshake%

Page 6: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

''''''ClientHello'Vmax$Cr$sId*$CSs$CMs$Cext'''''''''' ''''''''''''99999999>'''''''''''''''''''''''''''''''''''ServerHello'V$Sr$sId$CS$CM$Sext$''''''''''''''''''''''''''''''''''''''''''''''''''''''Certificate*''''''''''''''''''''''''''''''''''''''''''''''''ServerKeyExchange*'''''''''''''''''''''''''''''''''''''''''''''''CertificateRequest*'''''''''''''''''''''''''''<99999999'''''''''''''''ServerHelloDone'''''''Certificate*'''''''ClientKeyExchange'''''''CertificateVerify*'''''''ChangeCipherSpec'''''''Finished'MAC(Clog)''99999999>''''''''''''''''''''''''''''''''''''''''''''''''''ChangeCipherSpec'''''''''''''''''''''''''''<99999999''''''''''''Finished'MAC(Slog)'''''''''''''''''''''''''''<9999999>''''''''''''''Application'Data'''''''Application'Data''''The'key'exchange'messages'are'used'to'compute'shared'''pre9master9secret'(PMS)'then'master9secret'(MS)'for'the'session''''The'MS'and'(Cr,Sr)'are'used'to'(1)'derive'fresh'connection'keys'''and'(2)'authenticate'the'handshake'digests'in'Finished'messages''

Full%handshake%

Page 7: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

'''''ClientHello'Vmax$Cr$sId$CSs$CMs$Cext''' ' '''''''99999999>'

''''''''''''''''''''''''''''''''''ServerHello'V$Sr$sId$CS$CM$Sext''''''''''''''''''''''''''''''''''''''''''''''''''ChangeCipherSpec''''''''''''''''''''''''''''''''''''''''''''<99999999'''''''''Finished'MAC(Slog)''''''ChangeCipherSpec''''''Finished'MAC(Clog)$$'''99999999>''''''Application'Data'''''''<9999999>''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Application'Data''''''Provided'the'client'and'server'already'share'a'session'sId,'''they'can'use'its'pre9established'master'secret'and'(Cr,'Sr)'''to'derive'fresh'connection'keys.'''''This'saves'one'round'trip'&'any'public9key'cryptography.''''Otherwise'the'server'continues'with'a'full'handshake''''(picking'some'fresh'sId).''

Abbreviated%handshake%

Page 8: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

''ClientHello'[Cr]''''''99999999>''''''''''''''''''''''''''''''''''''''''''' 'ServerHello'[Sr]'

''''''''''''''''''''''Certificate'chain[dk]''''''''''''''''''''''''''CertificateRequest*'

<99999999''''''''''''''''ServerHelloDone'''Certificate*'''ClientKeyExchange[{pms}_ek]''''CertificateVerify*[sig(Clog’)]'''''ChangeCipherSpec'''Finished'MAC(Clog)''''99999999>'''''''

'''''''''''''''''''''''''''''''''''''''''ChangeCipherSpec'''''''''''''''''''''<99999999'''' '''''''Finished'MAC(Slog)'

Application'Data''''''<9999999>'''''''''''''''Application'Data'''''The'client'samples'a'fresh'pms'(mostly)'at'random''Here'*'stands'for'“if'Client'auth”,'at'the'server'initiative'(prescribing'“for'signing”'as'X.509'attributes)'

%RSA%full%handshake%

Page 9: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

''ClientHello'[Cr]'''''''''99999999>''''''''''''''''''''''''''''''''''ServerHello[Sr]'

''''''''''''''''''''''Certificate'chain[vk|fixed$p$g$g^y]$ServerKeyExchange'

[p$g$g^y'sig(Cr'Sr'p'g'g^y)_vk]''''''''''''''''''CertificateRequest*'[for'signing|fixed]'

<99999999''''''''''''''''ServerHelloDone'''''''''Certificate*'chain[for'signing|fixed'p'g'g^x]'''ClientKeyExchange'[fixed'?'empty':'g^x']''''CertificateVerify*[sig(Clog’)]''''ChangeCipherSpec'''Finished'MAC(Clog)$$$$$$$99999999>'

'''''''''''''''''''''''''''''''''''''''''''''''ChangeCipherSpec''''''''''''''''''''<99999999'''''''''''''Finished'MAC(Slog)''''''''

Application'Data'''''''''<9999999>'''''''''''''''Application'Data''''E'stands'for'server9ephemeral;'client9ephemeral'!'“for'signing”'Here'*'stands'for'“if'Client'auth”,'at'the'server'initiative'(prescribing'“for'signing”,'“fixed”,'or'both,'as'X.509'attributes)'…_DSA'and'…_RSA'only'affect'X.509'certs'EC…'should'only'affects'the'crypto'parameters'

%DHE%full%handshake%

Page 10: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Diffie-Hellman Key Exchange •  A fundamental cryptographic algorithms [1976]

•  Secure against passive adversaries;!otherwise we must authenticate X and Y

•  Many variants: STS, ISO, MQV, SIGMA •  Many implementations: SSH, IPsec, Kerberos

'''''Alice' ' ' ' ''' ' ' ' 'Bob'agree'on'public'parameters:'

p'prime,'g'generator'of'Z/pZ*,'q'='|Z/pZ*|''

let'x'='sample'q ' ' ' ' ' 'let'y'='sample'q'let'X'='gx ' ' ' ' ' ' ' 'let'Y'='gy'

' ' ' ' ' 'exchange'' ' ' ' ' ''X'&'Y'

let'Z'='Yx'' ' ' ' ' ' ' 'let'Z'='Xy'''

now'sharing'Z'='g(x*y)'

we'can'derive'keys'as'PRF(Z,…)''

Page 11: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Decisional Diffie-Hellman •  The Decisional Diffie-Hellman assumption: !

the probability of distinguishing between the exponentials !of a DH exchange and its idealized variant is negligible

•  Application: !El Gamal!encryption!is CPA

agree'on'public'parameters:'p'prime,'g'generator'of'Z/pZ*,'q'='|Z/pZ*|'

'

''''''Concrete' ' ' ' ' ' ''''''Ideal''

let'x'='sample'q ' ' ' ' ' 'let'x'='sample'q'let'y'='sample'q ' ' ' ' ' 'let'y'='sample'q'

' ' ' ' ' ' ' ' ' 'let'z'='sample'q'('gx,'gy,'gx*y')' ' ' ' ' ' '('gx,'gy,'gz')'

let'GEN()'=''''let'x'='sample'q'''(x,'gx)''

''

let'ENC'X'm'=''''let'y'='sample'0..q'''(gy','Xy'*'m)''''

let'DEC'x'(Y,M)'='M/Yx'

let'ENC*'X'm'=''''let'y'='sample'q'''let'z'='sample'q'''''(gy','gz'*'m)'''

Page 12: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

The Handshake, ideally •  Our interface abstracts over many details of the Handshake

–  Handshake messages and their formats –  Certificate formats and public key infrastructure –  Database of past sessions, available for abbreviated handshakes

•  A key index is safe when –  Its ciphersuite is cryptographically strong; and –  Its peer authentication materials are trustworthy!

e.g. the private key for the peer certificate!is used only by compliant handshake sessions

•  For instances with safe indexes, the (typed) idealized handshake –  Generates fresh abstract keys instead of calling the concrete KDF –  Drops “Complete” notifications not preceded by a Finished !

with matching parameters sent by a compliant peer instance.

Page 13: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

!Internal !interface for Handshake & CCS protocols

type$(;r:role,o:config)$state$//$for$each$local$instance$of$the$protocol$type$(;ki:KeyInfo)$fragment$$$//$content$type$for$the$Handshake$protocol$type$(;ki:KeyInfo)$ccs$$$$$$$$//$content$type$for$the$Handshake$protocol$$

//$Control$Interface$$val$init:$$$$$$$$$$$r:role$$$$$$$$$$$$$$N>$o:config$N>$(;r$$$$$,o)$state$$

val$resume:$$$$$$$$$si:SessionInfo$$$$$$N>$o:config$N>$(;Client,o)$state$val$rehandshake:$$$(;Client,idle)$state$N>$o:config$N>$(;Client,o)$state$val$rekey:$$$$$$$$$(;Client,idle)$state$N>$o:config$N>$(;Client,o)$state$val$request:$$$$$$$(;Server,idle)$state$N>$o:config$N>$(;Server,o)$state$$

//$Network$Interface$(output)$

type$(;r:role,o:config,ki:KeyInfo)$outgoing$=$$$$|$OutFragment$of$$$$$(;r,o)$state$*$(;ki)$fragment$option$$$$$$$$$$$$$$$$|$OutCCS$of$$$$$$$$s:(;r,o)$state$*$(;ki)$ccs$*$(;OutKi(s))$ccs_data$

$$|$OutComplete$of$$$s:(;r,o)$state${Complete(r,o,s)}$$$$|$...$val$nextFragment:$$$r:role$N>$o:config$N>$ki:KeyInfo$N>$$

$$(;r,o)$state$N>$(;r,o,ki)$outgoing$$$

//$Network$Interface$(input)$type$(;r:role,o:config)$incoming$=$$$$|$InTLSVersion$of$$$$(;r,o)$state$*$ProtocolVersion$$$|$InComplete$of$$$$s:(;r,_)$state${Complete(r,o,s)}$$$

$$|$...$val$recvFragment:$$$$r:role$N>$o:config$N>$ki:KeyInfo$N>$

$$(;r,o)$state$N>$(;ki)$fragment$N>$(;r,o)$incoming$val$recvCCS:$$$r:role$N>$o:config$N>$ki:KeyInfo$N>$$$$(;r,o)$state$N>$(;ki)$ccs$N>$s:(;r,o)$state$*$(;InKi(s))$ccs_data$$$

$

•  New%keys%

are%delivered%

before%%handshake%

comple4on%

•  Nego4ated%

parameters%%

can%be%read%

off%the%state%

•  Refinements%

imply%precise%

matching%%

conversa4ons%

Page 14: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Snap Start & False Start

Two proposed extensions trading speed for security: •  No need to negotiate if both client & server are jointly configured •  The server cannot enforce its own security policy:

–  a client contacts a secure server; the server policy demands AES –  an active adversary suggests using RC4 instead!

(accepted by the client, but not the server) –  the client starts sending secrets shared with the server –  the adversary logs all traffic, decrypts in a few years’ time

ClientHello'''''''''''99999999>'''''''''''''''''''''''''''''''''''''ServerHello'''''''''''''''''''''''''''''''''''''Certificate*'''''''''''''''''''''''''''''''''''''ServerKeyExchange*'''''''''''''''''''''''''''''''''''''CertificateRequest*'''''''''''''''''''''''<99999999'''''ServerHelloDone'Certificate*'ClientKeyExchange'CertificateVerify*'[ChangeCipherSpec]'Finished''''''''''''''99999999>'''''''''''''''''''''''''''''''''''''[ChangeCipherSpec]'''''''''''''''''''''''<99999999'''''Finished'Application'Data''''''<9999999>'''''Application'Data'

ClientHello'ServerHello$Certificate*$ServerKeyExchange*$CertificateRequest*$ServerHelloDone$Certificate*'ClientKeyExchange'CertificateVerify*'[ChangeCipherSpec]'Finished'Application$Data'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''99999999> ''''[ChangeCipherSpec]'''''''''''''''''''''''<99999999'''''Finished'Application'Data''''''<9999999>'''''Application'Data'

Page 15: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Main TLS API

Page 16: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

The TLS API & ideal functionality •  Our API is similar but more informative than mainstream APIs

–  We run on the caller’s thread,!letting the application do the scheduling & multiplexing

–  We give more control to the application code,!and reflect more information from the underlying TLS state!(lengths, fragmentation, authorization queries) •  More precise security theorems •  More flexibility for experiments & testing

•  We can implement safe & simple APIs on top of it •  Sample applications using our API

•  Secure RPCs (with one connection per call) •  Password-based client authentication •  Basic HTTPS clients and servers (for interoperability testing)

Page 17: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

our main!TLS API !(outline)

type$cn$//'for'each'local'instance'of'the'protocol'$

//'creating'new'client'and'server'instances'

val$connect:$TcpStream$N>$params$N>$(;Client)$nullCn$Result$

val$accept:$$TcpStream$N>$params$N>$(;Server)$nullCn$Result$$

//'triggering'new'handshakes,'and'closing'connections'val$rehandshake:$c:cn{Role(c)=Client}$N>$cn$Result$

val$request:$$$$$c:cn{Role(c)=Server}$N>$cn$Result$

val$shutdown:$$$$c:cn$N>$TcpStream$Result$$

//'writing'data'''type$(;c:cn,data:(;c)$msg_o)$ioresult_o$=$

|$WriteComplete$of$c':cn$$ $$

|$WritePartial$$of$c':cn$*$rest:(;c')$msg_o$

|$MustRead$$$$$$of$c':cn$val$write:$c:cn$N>$data:(;c)$msg_o$N>$(;c,data)$ioresult_o$$

//'reading'data'''

type$(;c:cn)$ioresult_i$=$

|$Read$$$$$$of$c':cn$*$data:(;c)$msg_i $$|$CertQuery$of$c':cn$ $ $$

|$Handshake$of$c':cn$ $ $$

|$Close$$$$$of$TcpStream$$$ $$

|$Warning$$$of$c':cn$*$a:alertDescription$|$Fatal$$$$$of$a:alertDescription$$$

val$read$:$c:cn$N>$(;c)$ioresult_i$

Each%applica4on%provides%

its%own%plaintext%module%

for%data%streams:%%

•  Typing%ensures%%%

secrecy%and%authen4city%

at%safe%indexes%

Each%applica4on%creates%

and%runs%session%&%

connec4ons%in%parallel%%%

•  Parameters%select%

ciphersuites%and%%

cer4ficates%

•  Results%provide%

detailed%informa4on%

on%the%protocol%state%

Page 18: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

our&verified&modular&&TLS&implementa?on%

%TLS.fs7&

Bytes,&Network&lib.fs%

Cryptographic&Provider%

cryptographic&assump?ons&

Main result:!concrete TLS and !ideal TLS are indistinguishable

Our typed ideal API!for TLS thus yields application security!by typing

Page 19: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

our&verified&modular&&TLS&implementa?on%

%TLS.fs7&

Bytes,&Network&lib.fs%

any$typed$F#$program$

Main result:!concrete TLS and !ideal TLS are indistinguishable

Our typed ideal API!for TLS thus yields application security!by typing

applica?on&data&streams%

TLS&applica?on&verified&by&typing%

Cryptographic&Provider%

cryptographic&assump?ons&

Page 20: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

DH%

CRE%

PRF%

RSA%Sig%

StAE%

AEAD%

TLS%

Untyped%Adversary%

Handshake%

Untyped%API%

Nonce%

Applica4on%

Untyped%Adversary%

Datastream%

6%

5%

7%

1%

2% 3% 4%

StAEPlain%

Page 21: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

“Untyped” ideal API!

for TLS Ideal/Concrete&

stream.fs%

indis4nguishability%

for%all%PPT%adversaries%

plain&typed&interface%(aTacker%%model)%

our&verified&modular&&TLS&implementa?on%

%TLS.fs7&

any$typed$F#$program$

TLS&proxy&with&bytesBonly&API&%

Bytes,&Network&lib.fs%

any$typed$F#$program$

TLS_Adv.fs7&

Cryptographic&Provider%

cryptographic&assump?ons&

Page 22: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Security !for RPC !

over!TLS

RPC&Payload&plain.fs%

ac4ve%

adversaries%

our&verified&modular&&TLS&implementa?on%

%TLS.fs7&

any$typed$F#$program$

RPC&rpc.fs%

Bytes,&Network&lib.fs%

RpcAdv.fs%

applica4on%code%

any$typed$F#$program$

any$typed$F#$program$

Cryptographic&Provider%

cryptographic&assump?ons&

Page 23: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Interoperability & Performance

We run clients against an OpenSSL 1.0.1e server for various ciphersuites •  How many handshakes per second? •  How much data transferred per second?

Page 24: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

An Implementation of TLS with !Verified Cryptographic Security

Our ideal API provides strong, modular, usable, !conditional application security by typing.

We trust •  automated typechecking: F7 and Z3

–  Now: mechanized type theory –  Next: certified typechecker (F*, POPL’12) and SMT solver

•  cryptographic assumptions, with handwritten proofs –  Next: better concrete reductions, with tighter bounds –  Next: mechanized proofs a la Certicrypt & Easycrypt

•  the F# compiler and runtime: Windows and .NET •  core cryptographic providers

–  Next: correctness proofs for selected algorithms (elliptic curves)

We account for some side-channels, but not for timing analysis

Page 25: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Analyzing TLS Implementations!with ProVerif/CryptoVerif

Page 26: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Protocols and Analyses

TLS Kerberos

WS-SecurityIPsec

SSH

Protocol Standards

Protocol Implementations and Applications

C/C++

Java

ML

C#

F# Ruby

Symbolic Analyses

ProVerif (‘01)

CasperCryptyc, F7AVISPA

Applied-Pi

Computational Analyses

CryptoVerif (‘06)

Hand ProofsNRL

Athena

Scyther

Page 27: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Protocols and Analyses

TLS Kerberos

WS-SecurityIPsec

SSH

Protocol Standards

Protocol Implementations and Applications

C/C++

Java

ML

C#

F# Ruby

Symbolic Analyses

ProVerif (‘01)

CasperCryptyc, F7AVISPA

Applied-Pi

Computational Analyses

CryptoVerif (‘06)

Hand Proofs

FS2PV  (‘06)   FS2CV (new)

NRL

Athena

Scyther

Page 28: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Verifying Protocol Implementations

Protocol Code

Applications

Crypto, Net

Concrete Libraries

Interoperability Testing

Compile

Network

Other Implementations

Run

Page 29: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Verifying Protocol Implementations

Protocol Code

Applications

Crypto, Net

Concrete LibrariesCrypto, Net

Symbolic Libraries

Interoperability Testing

Compile

Network

Compile

Other Implementations

Symbolic Debugging

Run Run No Attack

VerifyDiverges

Attack

Symbolic Verification

Security Goals

Page 30: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Verifying Protocol Implementations

Computational Crypto Model

Protocol Code

Applications

Crypto, Net

Concrete LibrariesCrypto, Net

Symbolic Libraries

Interoperability Testing

Compile

Network

Compile

Other Implementations

Symbolic Debugging

Run Run No Attack

VerifyDiverges

Attack

Symbolic Verification

Security Goals

Proof

VerifyNo Proof

Computational Verification

Page 31: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Proof TechniqueCompiling F# to the Pi Calculus

Page 32: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

An Applied Pi Calculus

� Source language of the ProVerif theorem prover

46

Page 33: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Functions as Processes

47

This is the core of model extraction, but additionally we perform transformations to speed up verification.

Page 34: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

48

How to compile a function?

� Our tool specifically targets symbolic verification,with many optimization to help ProVerif converge� Complete inlining (anticipating resolution)

+ Dead Code Elimination

� We select a translation for each function� Pure non-recursive functions are compiled to

term reductions (as supported by ProVerif)� Pure recursive functions are compiled to

predicate declarations (logic programming)� Functions with side-effects are compiled to Pi Processes

� The generated reduction, predicate, or process is declared public or private depending on whether it is in the interface

Page 35: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Compiling a Function

49

Page 36: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Protocol Model in ProVerif

50

Crypto Model

Secrets and Channels

Pi Calculus Process for A

Pi Calculus Process for B

Full Protocol

ProVerif’sapplied pi-calculussyntax

Page 37: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Soundness of our translation

51

Page 38: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Protocol Verification with ProVerif

52

Message Authentication

PasswordSecrecy

Page 39: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Protocol Verification with ProVerif

� If a property is false, ProVerif exhibits the counter-example as an attack� E.g. Suppose A does not include text in the HMACSHA1

53

Attack Trace

Page 40: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Limitations of fs2pv and ProVerif

� We cannot write higher-order functions� Upcoming version will allow higher-order functions as long

as they do not appear in interfaces

� We cannot use some builtin types such as refs, arrays� We use channels instead to store/retrieve data� Upcoming version will allow limited references

� To use additional libraries, such as System.SQL or List, the user must code up symbolic implementations� We provide implementations for Crypto, Net, Prins, XML

� We avoid recursive and stateful functions� Recursive functions often lead to non-terminating analyses� Stateful functions often take a lot of memory to verify

54

Page 41: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Verifying TLS

Transport Layer Security Protocol (TLS 1.0)– Widely-deployed industrial protocol– Well-understood, with detailed specs– Good benchmark for analysis techniques

This work:• A reference implementation in F#• Symbolic verification• Computational verification

Page 42: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

TLS (Transport Layer Security)

• A long history:– 1994 – Netscape’s Secure Sockets Layer (SSL)– 1994 – SSL2 (known attacks)– 1995 – SSL3 (fixed them)– 1999 – IETF’s  TLS1.0 (RFC2246,  ≈SSL3)– 2006 – TLS1.1 (RFC4346)– 2008 – TLS1.2 (RFC5246)

• Two-party protocol between a client and a server

• Provides a layer between TCP and Application (in the TCP/IP model)– Itself a layered protocol: Handshake over Record

• Record (sub)protocol– provides a private and reliable connection

• Handshake (sub)protocol– authenticates one or both parties, negotiates security parameters– establishes secret connection keys for the Record protocol

• Resumption (sub)protocol– abbreviated version of Handshake: generates connection keys from previous handshake

reliable transport protocol (e.g. TCP)

Record

Handshake ApplicationAlertChangeCipherSpec

Page 43: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Our Reference Implementation in F#

We implement a subset of TLS as a modular library (9700 LOC)– Supports SSL3.0, TLS1.0, TLS1.1 (with session resumption)– Supports any ciphersuite using DES, AES, RC4, SHA1, MD5– Server-only authentication, RSA mode only– No compression, fragmentation, or alerts

We test it using three basic sample applications:– An HTTPS client that can retrieve pages from any web server

(tested against IIS, Apache, and our F# server)– An HTTPS server that can serve pages to any web client

(tested against IE, Firefox, Opera, and our F# client) – A client-server application that performs

password-based authentication over TLS

Page 44: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Implementation Structure

Page 45: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

APIs & Sample ClientHTTPS_Client.fs (application code)

let client_request url = let netconn = Net.connect url in open TCP connection

let connid, sessionid = Handshake.connect netconn url in run Handshake protocol

let request = httpRequest url in build HTTP request

Record.send connid request; send HTTP request over Record protocol

let response = Record.recv connid in receive HTTP response over Record protocol

response return the HTTP response

Record.fsi (interface)

type ConnectionId = bytes

val send: ConnectionId -> bytes -> unitval recv: ConnectionId -> bytes

(* private *)

type Connection = { type ConnectionState = {net_conn: Net.conn; cipher_state: CipherState;crt_version: ProtocolVersion; mackey: bytes;write: ConnectionState; seq_num: bytes;read: ConnectionState } sparams: SecurityParameters; }

val getConnection: ConnectionId -> Connection

Handhake.fsi (interface)

type SessionId = bytes

val connect: Net.conn -> ServerName -> ConnectionId * SessionIdval accept: Net.conn -> CertName -> ConnectionId * SessionIdval resume: Net.conn -> SessionId -> ConnectionId * SessionIdval close: ConnectionId -> unit

(*private *)

type Session = { sid: SessionId;ms: bytes;serverCertificate: bytes; }

val getSession: SessionId -> Session

Page 46: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Record Module

Record.fs (implementation excerpt)let recv (connid:ConnectionId) =let conn = getConnection connid in

let conn, input = recvRecord conn in

let conn, msg = verifyPayload conn CT_application_data input in

let id,entity = connid in log tr (Recv (id,entity,msg));storeConnection connid conn;msg

let verifyPayload (conn:Connection) (ct:ContentType) (input:bytes) =let (bct, bver, blen, ciphertext) = parseRecord input inlet rct, rver, rlen = getAbstractValues bct bver blen inlet ver = conn.crt_version inif rver = ver then

let connst = conn.read in

let connst, plaintext = decrypt ver connst ciphertext in

let payload, recvmac = parsePlaintext ver connst plaintext inlet len = bytes_of_int 2 (length payload) inlet bseq = bytes_of_seq connst.seq_num inlet maced = append5 bseq bct bver len payload inlet conn = updateConnection_read conn connst incheckContentType ct rct payload;

if hmacVerify connst maced recvmac = true then

(conn,payload)else failwith "bad record mac"

else failwith "bad version

Retrieve connection

Decryption supports multiple

ciphersuites

Message parsing

Security event: message accepted!

MAC verification

data

data fragment mac

header encrypted fragment and mac

data fragment

Record protocol(informal narration)

A Æ B : {m,[m]ak}ek

Page 47: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Implementing TLS

• The RFCs do not specify an API– Implementations are free to choose the interface

• Certificate management and verification is tricky

• Testing standard conformance and interop hard

– Multiple versions and ciphersuites

– Poor testing tools

– But results in good insights (e.g. understanding rollback issues) and ensures a very precise model

Page 48: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Symbolic Verification

• Write F# symbolic implementation for libraries– Crypto: cryptographic operations are

algebraic constructors/destructors– Net: networking functions

defined using Pi calculus channels– Prins: database of (server) principals, each with a certificate and private key

• Declare capabilities for active attackers (in Dolev-Yao style)– Crypto, Net, Prins: can perform crypto, control the network, compromise principals– Handshake: can open (and resume) connections with any clients and servers– Record: can send/recv application messages on any open connections

• Run fs2pv tool [BFGT’06] to generate ProVerif script– from F# code for TLS, for symbolic libraries + F# interface for attacker + security goals

• Run ProVerif [Blanchet’01] to verify security goalsagainst any attacker with access to this interface– security guarantees for any number of clients and servers

running any number of Handshake, Resumption, and Record instances

type bytes =| Name of Pi.name| Hash of bytes| SymEncrypt of bytes * bytes|  …

Page 49: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Symbolic Verification GoalsRecord Message Authentication

If the client receives message p over connection c, then either the server has sent p over c, or the server has been compromised (and similarly in the other direction)

Record Payload Secrecy

If the attacker obtains a fresh message p sent over connection cthen either the client or the server has been compromised.

Handshake Authentication

At the end of the handshake, the client and the server agree on all negotiated parameters and keys, provided that the client and the server are not compromised.

Key Secrecy

If the attacker obtains a connection key, then either the client or the server has been compromised.

and similarly when using Resumptionin particular both sets of negotiated parameters are authenticated and correlated

Page 50: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Crypto.fsi (interface)

type bytes (* byte arrays *)

type symkey (* symmetric keys *)

val mkNonce: unit -> bytes (* generate nonce *)

val mkKey: nonce -> symkey (* make key *)

val sha1: bytes -> byte

val aes_encrypt: symkey -> bytes -> bytesval aes_decrypt: symkey -> bytes -> bytes

Symbolic Implementation of Crypto

Crypto.fs (symbolic implementation)

type bytes =| Name of Pi.name| Hash of bytes| SymEncrypt of bytes * bytes|  …

type symkey = Sym of bytes

let mkNonce ()  =  Pi.name  “nonce”let mkKey () = Sym(mkNonce())

let sha1 b = Hash(b)

let aes_encrypt (Sym(k)) x = SymEncrypt(k,x)let aes_decrypt (Sym(k)) (SymEncrypt(k’,x))  =  

if k  =  k’  then x else raise Fail

Page 51: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Symbolic Verification Results• All properties are automatically proved

– But after a lot of hand-tuning on the source code(otherwise ProVerif runs out of memory or does not finish)

– Final ProVerif script of Handshake+Resumption+Record still large (2100LOC)

– Proving Record/Handshake separately is much easier (but less precise)

• Experimental details:

Part of protocol verified # of queries

PV running time Memory used

Handshake (auth. queries) 2 16sec 60MB

Handshake (secr. queries) 2 10sec 80MB

Handshake + Resumption (resumption auth. queries)

2 4min 460MB

Handshake + Resumption + Record (record auth. queries)

2 6min 700MB

Handshake + Resumption + Record 8 2hours 1.7GB

Page 52: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Symbolically Identified Pitfalls• An early version of our implementation failed to correlate

certificates; this leads to a counter-example of Handshake authentication– Common mistake: Ruby/Cisco/OpenSSL

• There is a potential SSL2 version rollback attack during resumption– The version rollback protection in ClientKeyExchange is absent

during Resumption– Experimentally, we could not downgrade to SSL 2.0 with e.g. IIS,

Apache.Client Server

ClientHello

ServerHelloCertificateServerHelloDone

ClientKeyExchange

[ChangeCipherSpec]Finished

[ChangeCipherSpec]Finished

ClientHello : (ver_max, cipher_suites,  …)

ClientKeyExchange : {pms}pk(server)

with pms = ver_max || random

Page 53: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Computational Verification• Computational models are more realistic than symbolic models (bitstrings

instead of terms, PPT adversaries), but harder to work with

• Use  Blanchet’s  recent  CryptoVerif  [Blanchet-S&P’06] as a backend– CV script = PPT processes + crypto assumptions + security goals

– Automatic computational proofs using the game-hopping technique

• Develop a new tool compiling F# code to CryptoVerif scripts– Networking and sampling functions translate to CryptoVerif primitives

– Public functions translate to polynomially replicated processes

• Manually code crypto assumptions in CryptoVerif syntax– Must define types and assumptions for all cryptographic primitives used in the protocol

(HMAC,  AES,  RSA,…)  using  probabilistic  equivalences  encoding  indistinguishability

– Crypto assumptions change rarely

• Run CryptoVerif on generated script + crypto assumptions + security goals

to computationally verify these goals against PPT adversaries

Page 54: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Security Properties (Record)

• Verify Record in isolation– Assume a pre-established connection– Any (polynomial) number of clients and servers share the connection

• Crypto assumptions: – UF-CMA for HMAC: Correlates valid macs with their possible origin(s)– SPRP (super pseudo-random permutation) for block ciphers (AES/DES):

Replaces encryptions and decryptions by random bitstrings

Message AuthenticationIn any polynomial run of the protocol, with overwhelming probability, if the client receives message p, then the server has sent p.

Payload SecrecyIn any polynomial run of the protocol, the sequence of sent payload values is indistinguishable from a sequence of independent random values.

Page 55: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Crypto.fsi (interface)

type bytes (* byte arrays *)

type symkey (* symmetric keys *)

type keyseed = bytes (* seed for symkey *)

val mkNonce: unit -> bytes (* fresh nonce *)

val mkKey: bytes -> symkey (* make key *)

val aes_encrypt: symkey -> bytes -> bytesval aes_decrypt: symkey -> bytes -> bytes

Computational Crypto ModelCrypto.cv (CryptoVerif script)

(* type bytes = blocksize *)

type symkey [fixed].type keyseed [large,fixed].

fun aes_encrypt(symkey, blocksize): blocksize.fun mkKey(keyseed):key.fun aes_decrypt(key, blocksize): blocksize.

forall m:blocksize, r:keyseed;aes_decrypt(mkKey(r), aes_encrypt(mkKey(r), m)) = m.

(* SPRP assumption for AES Encryption *)

equiv!N new r: keyseed;((x:blocksize) Nsymenc -> aes_encrypt(mkKey(r),x),(m:blocksize) Nsymdec -> aes_decrypt(mkKey(r),m))

<= (N * Psymenc(time, Nsymenc, Nsymdec)) => …

Page 56: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

SPRP assumption

equiv

!N new r: keyseed;((x:blocksize) N1 -> symenc(x, kgen(r)),(m:blocksize) N2 -> symdec(m, kgen(r)))

<= (N * Psymenc(time, N1, N2)) =>

!N new r: keyseed;((x:blocksize) N1 ->

find j<=N1 suchthat defined(x[j],r2[j]) && otheruses(r2[j]) && x = x[j] then r2[j]orfind k<=N2 suchthat defined(r4[k],m[k]) && otheruses (r4[k]) && x = r4[k] then m[k] else new r2: blocksize; r2,

(m:blocksize) N2 ->find j<=N1 suchthat defined(x[j],r2[j]) && otheruses(r2[j]) && m = r2[j] then x[j]orfind k<=N2 suchthat defined(r4[k],m[k]) && otheruses(r4[k]) && m = m[k] then r4[k] else new r4: blocksize; r4).

Page 57: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Security Properties (Handshake secrecy)

• Verify most of the client role of the Handshake protocol – We assume pre-established parameters and a public/private keypair– The client sends ClientKeyExchange, generates connection keys, and sends

Finished

• Crypto assumptions: – IND-CCA2 for asymmetric encryption: indistinguishability against chosen-

ciphertext attacks– random oracle for PRF (key derivation): turns derived keys into random

bitstrings

Secrecy of PMS Random (recall that pms = ver_max || random)In any polynomial run of the protocol, the sequence of random valuesis indistinguishable from a sequence of independent fresh values.

Page 58: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Security Properties (Handshake auth.)

• A similar setting as for Handshake secrecy :– we assume pre-established parameters and a public/private keypair

– parties generate connection keys, and send and receive Finished messages

– the messages are sent over the Record layer in NULL mode (enc=mac=identity)

• Crypto assumptions: – random oracle for PRF when used for key derivation

– UF-CMA for PRF when used to build the Finished messages

Agreement on PMSIn any polynomial run of the protocol, with overwhelming probability,

if the client receives the Finished message, then the server has sent it, and

they agree on the value of pms.

Page 59: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Computational vs Symbolic Results

• Some properties hold symbolically but not computationally:– Computationally, mac functions give no secrecy guarantees– For the Handshake protocol,

symbolically, pms is (syntactically) secret,but computationally, only random is secret(where pms = ver_max || random)

– Encryption keys are secret computationally only before they are used

– let Concat(x,y) = m prevents a type-flaw symbolically, but not computationally

• Symbolically, we were able to analyze the full protocol, but not (yet) computationally – mac-then-encrypt is difficult in CryptoVerif– CryptoVerif interactive mode hard to use with generated code

Page 60: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Previous Analyses of TLS• 1996 - Schneier & Wagner “Analysis  of  the  SSL3.0  protocol”,  informal, full protocol

• 1998 - Mitchell, Schmatikov, Stern “Finite  state  analysis  of  SSL  3.0”,  model-checking, handshake

• 1999 - Paulson  “Inductive Analysis of the Internet protocol TLS”,  theorem-proving, handshake protocol• 2001 - Krawczyk “The Order of Encryption and Authentication for Protecting Communications (or: How

Secure Is SSL?)“,  computational  analysis,  record  protocol• 2001 - Yasinac, Childs "Analyzing Internet Security Protocols", automatic symbolic analysis, handshake

• 2002 - Jonsson, Kaliski,  “On the Security of RSA Encryption in TLS”,  computational  analysis,  handshake

• 2004 - Diaz, Curtero, Valero, Pelayo, "Automatic Verification of the TLS Handshake Protocol", model-checking, handshake protocol

• 2005 - Ogata, Futatsugi "Equational Approach to Formal Analysis of TLS“,  symbolic  analysis,  handshake  • 2005 - He, Sundararajan, Datta, Derek, Mitchell, "A modular correctness proof of IEEE802.11i and TLS"

manual symbolic analysis, handshake protocol

• 2008 - Kamil,  Lowe  “Analysing TLS in the Strand Spaces Model”,  manual  symbolic  analysis,  full  handshake and record protocols

• 2008 - Chaki, Datta “Automated verification of security protocol implementation”,  automatic  (with  Copper) symbolic analysis of OpenSSL code

• 2008 - Morrisay, Smart, Warinschi,  “A modular security analysis of SSL/TLS”,  manual  comp.  analysis  of  a variant of the TLS handshake

• ..... (padding attacks, side-channel attacks) .....

Page 61: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Comparing Verification Methods

Page 62: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Protocol Implementations in F#

Page 63: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Verification with ProVerif

Page 64: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Verification with F7

Verifying&miTLS&

Page 65: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

TLS Verification

FS2PV/%

ProVerif%

FS2CV/%

CryptoVerif%

RCF/F7%

Page 66: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Model Extraction vs. Program Analysis •  ProVerif automatically verifies medium-size protocols

–  Can prove authentication queries and syntactic secrecy –  New work on strong secrecy, equivalence-based reasoning !

See: http://proverif.inria.fr –  Other new tools can better handle stateful protocols, !

Diffie-Hellman key exchanges !See e.g.: Tamarin, StatVerif

•  RCF/F7/F* can verify larger programs but require type annotations –  Can prove authentication and computational indistinguishability –  New improvements in type inference, stateful programs!

See: http://research.microsoft.com/fstar –  Other similar tools can verify Java, C programs!

See: CVJ, Csec

Page 67: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Symbolic vs. Computational Models •  Computational proofs require manual intervention –  Tools can be proof assistants –  Results relate well to cryptographic literature –  Many new tools: EasyCrypt, CertiCrypt, RF*

•  Symbolic proofs are automatic –  Prove weaker properties –  Against weaker adversaries –  Useful for finding attacks attacks –  Results relate to programming language semantics –  Stable, well-documented tools: ProVerif, Tamarin, F7, F*

Page 68: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Examples

Page 69: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Authenticated Encryption •  Define cryptographic interfaces for enc and MAC –  Both symbolic and computational

•  Use them to implement authenticated encryption –  Encrypt-Then-MAC (IPsec-style) –  MAC-And-Encrypt (SSH style)

•  Prove that your code satisfies the security goals !of authenticated encryption –  Use typing with RCF, both symbolic and computational

Page 70: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Basic Interfaces: MAC

module'MAC$$

type'text'='bytes'type'mac'='bytes'type'key$ $$'

val'GEN''':'unit'9>'key''val'LEAK'':'key$9>'bytes'val'COERCE:'bytes9>'key''val'MAC''':'key'9>'text'9>'mac'val'VERIFY:'key'9>'text'9>'mac$9>'bool'

Page 71: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Basic Interfaces: ENC module'ENC$type'plain'type'cipher'='bytes'type'key$$'

val'GEN''':'unit'9>'key''val'LEAK'':'key$9>'bytes'val'COERCE:'bytes9>'key''val'ENC''':'key'9>'plain'9>'cipher'val'DEC$$$:'key'9>'cipher'9>'plain$

Page 72: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Authenticated Encryption •  Provides both confidentiaity and integrity – Encryption turns secret data into public data – Data returned by decryption is guaranteed to

be the same as the data that was encrypted

•  Consider two implementations: – Enc-Then-Mac (IPsec).!

Encryption returns: MAC k (ENC k’ t) – Mac-And-Enc (SSH)!

Encryption returns: (MAC k t, ENC k’ t)

Page 73: MPRI 2-30: Automated Verification of Cryptographic Protocol ...MPRI 2-30:! Automated Verification of ! Cryptographic Protocol Implementations K Bhargavan (Slides from A.D. Gordon

Tasks (to submit) 1.  Define RCF interfaces for ENC & MAC 2.  Define symbolic code for ENC & MAC 3.  Prove that the implementations meet the

interface (by typing in RCF) 4.  Define an RCF interface for AuthEnc –  Similar to ENC, but with stronger guarantees

5.  Define concrete code for AuthEnc 6.  Prove that this code meets the interface –  Can you weaken the crypto assumptions? –  Does your proof give computational security?