How To Prove Security of Communication Protocols? A Discussion On The Soundness of Formal Models W.R.T. Computational Ones
How To Prove Security of Communication Protocols? A Discussion On The Soundness of Formal Models W.R.T. Computational Ones
protocols?
A discussion on the soundness of formal models
w.r.t. computational ones.
Hubert Comon-Lundh1 and Vronique Cortier2
1
2
Abstract
Security protocols are short programs that aim at securing communication over a public network.
Their design is known to be error-prone with flaws found years later. That is why they deserve
a careful security analysis, with rigorous proofs. Two main lines of research have been (independently) developed to analyse the security of protocols. On the one hand, formal methods provide
with symbolic models and often automatic proofs. On the other hand, cryptographic models
propose a tighter modeling but proofs are more difficult to write and to check. An approach
developed during the last decade consists in bridging the two approaches, showing that symbolic models are sound w.r.t. symbolic ones, yielding strong security guarantees using automatic
tools. These results have been developed for several cryptographic primitives (e.g. symmetric
and asymmetric encryption, signatures, hash) and security properties.
While proving soundness of symbolic models is a very promising approach, several technical
details are often not satisfactory. Focusing on symmetric encryption, we describe the difficulties
and limitations of the available results.
1998 ACM Subject Classification F.3.1 Specifying and Verifying and Reasoning about Programs
Keywords and phrases Verification, security, cryptography
Digital Object Identifier 10.4230/[Link].2011.29
Introduction
Security protocols aim at securing communications over public networks. They are typically
designed for bank transfers over the Internet, establishing private channels, or authenticating remote sites. They are also used in more recent applications such as e-voting procedures.
Depending on the application, they are supposed to ensure security properties such as confidentiality, privacy or authentication, even when the network is (at least partially) controlled
by malicious users, who may intercept, forge and send new messages. While the specification of such protocols is usually short and rather natural, designing a secure protocol is
notoriously difficult and flaws may be found several years later. A famous example is the
man-in-the-middle attack found by G. Lowe against the Needham-Schroder public key
protocol [41]. A more recent example is the flaw discovered in Gmail (and now fixed) by
Armando et. al. [9].
30
During the two last decades, formal methods have demonstrated their usefulness when
designing and analyzing security protocols. They indeed provide with rigorous frameworks
and techniques that allow to discover new flaws. For instance, the two previously mentioned
flaws have been discovered while trying to prove the security of the protocol in a formal
setting. Following the seminal work of Dolev and Yao [33], many techniques have been
developed for analysing the security of protocols, often automatically. For example, the
AVISPA platform [8] and the ProVerif tool [20] are both efficient and practical tools for
automatically proving security properties or finding bugs if any. The security of protocols
is undecidable in general [34]. Checking the secrecy and authentication-like properties is
however NP-complete when the number of sessions is fixed [44]. Several extensions have been
designed, considering more security properties or more security primitives [2, 25, 28, 24, 37].
Bruno Blanchet has developed an (incomplete) procedure based on clause resolution [19] for
analyzing protocols for an unbounded number of sessions. All these approaches rely on a
common representation for messages: they are symbolically modeled by terms where each
function symbol represents a cryptographic primitive, some of their algebraic properties
being reflected in an equational theory. Then protocols are modeled using or adapting
existing frameworks such as fragments of logic, process algebras or constraint systems.
While the symbolic approaches were successful in finding attacks, the security proofs
in these models are questionable, because of the level of abstraction: most cryptographic
details are ignored. This might be a problem: for instance, it is shown in [45] that a protocol
can be proved in a formal, symbolic, model, while there is an attack, that also exploits
some finer details of the actual implementation of the encryption scheme. In contrast,
cryptographic models are more accurate: the security of protocols is based on the security
of the underlying primitives, which in turn is proved assuming the hardness of various
computational tasks such as factoring or computing discrete logarithms. The messages are
bitstrings. The proofs in the computational model imply strong guarantees (security holds
in the presence of an arbitrary probabilistic polynomial-time adversary). However, security
reductions for even moderately-sized protocols become extremely long, difficult, and tedious.
Recently, a significant research effort [6, 43, 13, 15, 11, 26] has been directed towards bridging
the gap between the symbolic and the cryptographic approaches. Such soundness results
typically show that, under reasonable cryptographic assumptions such as IND-CCA2 for the
encryption scheme, proofs in symbolic models directly imply proofs in the more detailed
cryptographic models. These approaches are very promising: they allow to reconcile two
distinct and independently developed views for modeling and analysing security protocols.
Second and more importantly, they allow to obtain the best of the two worlds: strong
security guarantees through the simpler symbolic models, that are amenable to automatic
proofs.
However, such soundness results also assume many other properties regarding the implementation or even regarding the key infrastructure. In this paper, we discuss these usually
under-looked assumptions, pointing the limitations of current results. In particular, we provide with several protocols (counter) examples, for which IND-CCA2 does not imply the
security, as soon as a malicious user may chose its own keys at its will. These examples
show that standard symbolic models are not sound w.r.t. cryptographic ones when using
symmetric encryption. We also discuss how to symbolically represent the length of messages and what are the implications on the implementation. All these examples will be
discussed within the the applied-pi calculus [3], but the counter-examples do not depend on
this particular process algebra: the discussion will stay at a rather informal level and can
be understood without familiarity with the applied-pi calculus.
31
Related work. Many soundness results have been established in various settings. We
discuss some of them in Section 3. Fewer works are dedicated to the limitations. Backes
and Pfitzmann have shown that primitives such as Exclusive Or or hash functions cannot
be soundly abstracted in their simulatability library [14]. This is related to the impossibility
of constructing some universally composable primitives [40]. This witnesses the difficulty of
designing sound and accurate models for some primitives. [1] compares CryptoVerif [21], an
automatic tool designed for performing proofs directly in the cryptographic model, and the
use of soundness results, emphasizing the current limitations of the latter.
Setting
We recall here briefly part of the syntax and the operational semantics of the applied calculus of [3]. We are going to use a small fragment of this calculus for the formal definition
of the protocols.
2.1
Syntax
In any symbolic model for security protocols, messages are modeled by terms, which are built
on a set of function symbols , that represent the cryptographic primitives (e.g. encryption,
pairing, decryption). Given an infinite set N of names and an infinite set X of variables,
T (N , X ) is the set of terms:
s, t, u ::=
x, y, z
a, b, c, k, n, r
f (s1 , . . . , sk )
terms
variable
name
function application
Terms represent messages and names stand for (randomly) generated data. We assume
the existence of a length function l, which is a -morphism from T (N ) to N.
In what follows, we will consider symmetric encryption and pairing. Let 0 consist of
the binary pairing < , >, the two associated projections 1 , 2 , the binary decryption dec
and the ternary symbol {} for symmetric encryption: {x}rk stands for the encryption of x
with the key k and the random r. 0 also contains constants, in particular a constant 0l of
length l for every l.
The syntax of processes is displayed in Figure 1. In what follows, we restrict ourselves
to processes with public channels: there is no restriction on name channel. We assume
a set P of predicate symbols with an arity. Such a definition, as well as its operational
semantics coincides with [3], except for one minor point introduced in [26]: we consider
conditionals with arbitrary predicates. This leaves some flexibility in modeling various levels
of assumptions on the cryptographic primitives.
In what follows, we may use expressions of the form let . . . in . . . as a syntactic sugar
to help readability.
2.2
Operational semantics
We briefly recall the operational semantics of the applied pi-calculus (see [3, 26] for details).
E is a set of equations on the signature , defining an equivalence relation =E on T (N ),
which is closed under context. =E is meant to capture several representations of the same
message. This yields a quotient algebra T (N )/ =E , representing the messages. Predicate
symbols are interpreted as relations over T (N )/ =E . This yields a structure M.
S TA C S 1 1
32
1 , 2 ::=
p(s1 , . . . , sn )
1 2
conditions
predicate application
conjunction
P, Q, R ::=
c(x).P
c(s).P
0
P kQ
!P
()P
if then P else Q
processes
input
output
terminated process
parallel composition
replication
restriction
conditional
In what follows, we will consider the equational theory E0 on 0 defined by the equations
corresponding to encryption and pairing:
dec({x}zy , y) = x
1 (< x, y >) = x
2 (< x, y >) = y
These equations can be oriented, yielding a convergent rewrite system: every term s has
a unique normal form s .
We also consider the following predicates introduced in [26].
M checks that a term is well formed. Formally, M is unary and holds on a (ground)
term s iff s does not contain any projection nor decryption symbols and for any {u}rv
subterm of s, v and r must be names. This forbids compound keys for instance.
EQ checks the equality of well-formed terms. EQ is binary and holds on s, t iff M (s), M (t)
and s = t : this is a strict interpretation of equality.
Psamekey is binary and holds on ciphertexts using the same encryption key: M |= Psamekey (s, t)
0
iff k, u, v, r, r0 .EQ(s, {u}rk ) EQ(t, {v}rk ).
EL is binary and holds on s, t iff M (s), M (t) and s, t have the same length.
I Example 2.1. The Wide Mouth Frog [22] is a simple protocol where a server transmits a
session key Kab from an agent A to an agent B. This toy example is also used in [1] as a
case study for both CryptoVerif and soundness techniques. For the sake of illustration, we
propose here a flawed version of this protocol.
AS
SB
The server is assumed to share long-term secret keys with each agent. For example, Kas
denotes the long-term key between A and the server. In this protocol, the agent A establishes
a freshly generated key Kab with B, using the server for securely transmitting the key to B.
A session la of role A played by agent a with key kas can be modeled by the process
def
A(a, b, kas , la ) = (r, na ) cout (< la , < a, < b, {< na , kab >}rkas >>>) 0
33
Similarly a session of role S played for agents a, b with corresponding keys kas and kbs , can
be modeled by
def
S(a, b, kas , kbs , ls ) = (ns , r) cin (x). if EQ(1 (x), ls ) then let y = 2 (dec(2 (2 (2 (x))), kas )) in
if 1 (2 (x)) = a 1 (2 (2 (x)) = b M (y) then
cout (< ls , < a, {< ns , y >}rkbs > >) 0
else cout () 0 else cout () 0
where ls is the session identifier of the process.
Then an unbounded number of sessions of this protocol, in which A plays a (with b) and
s plays S (with a, b and also with b, c) can be represented by the following process
Pex = (kas , kbs ) ( !((kab , la )cout (la ).A(a, b, kas , la , r))
k !((ls )cout (ls ).S(a, b, kas , kbs , ls )) k !((ls )cout (ls ).S(a, c, kas , kcs , ls )) )
To reflect the fact that c is a dishonest identity, its long-term key kcs shared with the server
does not appear under a restriction and is therefore known to an attacker.
The environment is modeled through evaluation context, that is a process C = ()([]kP )
where P is a process. We write C[Q] for ()(Q k P ). A context (resp. a process) C is
closed when it has no free variables (there might be free names).
Possible evolutions of processes are captured by the relation , which is the smallest
relation, compatible with the process algebra and such that:
(Com)
(Cond1)
(Cond2)
c(x).P k c(s).Q {x 7 s} k P k Q
if then P else Q P
if M |=
if then P else Q Q
if M 6|=
Cattack = [] k cout (xla ).cout (xls ).cout (xma ). //listens to sessions ids and the first message
let y = 2 (2 (xma )) in
cin (< xls , < a, < c, y >>>). //replays the message, with b replaced by c
cout (xms ). //listens to the servers reply
let y 0 = dec(2 (2 (xms )), kcs ) in cin (2 (y 0 )).0 //outputs the secret
S TA C S 1 1
34
2.3
Observational equivalence
C 0 [c(s0 ) B 0 ].
A
C[c(s) A0 ] then for some context C 0 , term s0 and process B 0 , B
2. if A
A0 then, for some B 0 , B
B 0 and A0 SB 0
3. C[A]SC[B] for all closed evaluation contexts C
I Example 2.4 (Group signature). The security of group signature has been defined in [7].
It intuitively ensures that an attacker should not be able to distinguish two signatures performed with two distinct identities when they belong to the same group. It can be modeled
as observational equivalence as follows. Let P (x, i) be the protocol for signing message x
with identity i. Let P0 = c(y).P (1 (y), 1 (2 (y))) and P1 = c(y).P (1 (y), 2 (2 (y))). Intuitively, the adversary will send < m, < i0 , i1 >> where m is a message to be signed and
i0 , i1 are two identities. P0 signs m with i0 while P1 signs m with i1 . Then P preserves
anonymity iff P0 o P1 .
2.4
Computational interpretation
We assume given an encryption scheme (G, E, D) where G is the generating function for
keys, E is the encryption function and D the decryption function. We also assume given a
pairing function. The encryption, decryption, and pairing functions and their corresponding
projectors form respectively the computational interpretation of the symbols {}, dec, <, >
, 1 , 2 . We assume that the decryption and projection functions return an error message
when they fail. Then, given an interpretation of names as bitstrings, [[]] is the (unique)
-morphism extending to T (N ); [[t]] is the computational interpretation of t. When is
randomly drawn, according to a distribution that depends on a security parameter , we
may write [[t]] for the corresponding distribution and [[t]] for the corresponding family of
distributions. Then here are possible interpretations of the predicates:
[[M ]] is the set of bitstrings, which are distinct from . Intuitively [[M ]] implements M
if the encryption scheme is confusion-free (a consequence of INT-CTXT [42]).
[[EQ]] is the set of pairs of identical bitstrings, which are distinct from . It is an
implementation of EQ as soon as [[M ]] implements M .
[[Psamekey ]] is the set of pairs of bitstrings that have the same encryption tag.
[[EL]] is the set of pairs of bitstrings of same length.
Processes can also be interpreted as communicating Turing machines. Such machines
have been introduced in [16, 38] for modeling communicating systems. They are probabilistic
Turing machines with input/output tapes. Those tapes are intuitively used for reading and
sending messages. We will not describe them here and we refer to [26] for more details.
Now, given a process P without replication, one can interpret it as a (polynomial time)
communicating Turing machine. The computational interpretation of P is denoted by [[P ]]
and is intuitively defined by applying the computational counterpart of each function and
35
predicate symbols. Then the replicated process !P can also be interpreted by letting the
adversary play with as many copies of [[P ]] as he wants.
Indistinguishability. In computational models, security properties are often stated as indistinguishability of games. Two families of machines are indistinguishable if an adversary
cannot tell them apart except with non negligible probability.
A function f : N N is negligible if, for every polynomial P , N N, > N, f () <
1
P () . We write Pr{x : P (x)} the probability of event P (x) when the sample x is drawn
according to an appropriate distribution (the key distribution or the uniform distribution;
this is kept implicit).
I Definition 2.5. Two environments F and F 0 are indistinguishable, denoted by F F 0 ,
if, for every polynomial time communicating Turing Machine A (i.e. for any attacker),
|Pr{r, r : (F(r) k A(r))(0 ) = 1}
Soundness results
Computational models are much more detailed than symbolic ones. In particular, the adversary is very general as it can be any (polynomial) communicating Turing machine. Despite
the important difference between symbolic and computational models, it is possible to show
that symbolic models are sound w.r.t. computational ones.
3.1
A brief survey
S TA C S 1 1
36
In a series of papers starting with Micciancio and Warinschi [43] and continued with e.g.
[31, 36], the authors show trace mapping properties: for some selected primitives (public-key
encryption and signatures in the above-cited papers) they show that a computational trace
is an instance of a symbolic trace, with overwhelming probability. But, again, this does not
show that indistinguishability properties can be soundly abstracted, except for the special
case of computational secrecy that can be handled in [31] and also in [29] for hash functions
in the random oracle model.
We refer to [30] for a more complete survey of soundness results.
3.2
The main result of [26] consists in establishing that observational equivalence implies indistinguishability:
I Theorem 3.1. Let P1 and P2 be two simple processes such that each Pi admits a key
hierarchy. Assume that the encryption scheme is joint IND-CPA and INT-CTXT. Then
P1 o P2 implies that [[P1 ]] [[P2 ]].
This result assumes some hypotheses, some of which are explicitly stated above and
informally discussed below (the reader is referred to [26] for the full details). There are
additional assumptions, that are discussed in more details in the next section.
Simple processes are a fragment (introduced in [26]) of the applied-pi calculus. It intuitively
consists of parallel composition of (possibly replicated) basic processes, that do not involve
replication, parallel composition or else branches. Simple processes capture most protocols
without else branch, for an unbounded number of sessions. For example, the process Pex
introduced in Example 2.1 is a basic process.
The most annoying restriction is the absence of conditional branching. Ongoing works
should overcome this limitation, at the price of some additional computational assumptions.
But the extension to the full applied -calculus is really challenging, because of possible
restrictions on channel names. Such restrictions indeed allow private computations, of
which an attacker only observes the computing time (which is not part of the model).
Key hierarchy ensures that no key cycles can be produced on honest keys, even with the
interaction of the adversary. This hypothesis is needed because current security assumptions
such as IND-CPA do not support key cycles (most encryption schemes are not provably
secure in the presence of key cycles). In [26], it is assumed that there exists a strict ordering
on key such that no key encrypts a greater key.
Checking such conditions, for any possible interaction with the attacker, is in general
undecidable, though a proof can be found in many practical cases. (And it becomes decidable when there is no replication [27]).
No dynamic corruption assumes that keys are either immediately revealed (e.g. corrupted
keys) or remain secret. Showing a soundness result in case of dynamic key corruption is
a challenging open question, that might require stronger assumptions on the encryption
scheme.
IND-CPA and INT-CTXT are standard security assumptions on encryption schemes. The
IND-CPA assumption intuitively ensures that an attacker cannot distinguish the encryption
of any message with an encryption of zeros of the same length. INT-CTXT ensures that an
37
adversary cannot produce a valid ciphertext without having the encryption key. IND-CPA
and INT-CTXT are standard security assumptions [18].
Current limitations
We discuss in this section the additional assumptions of Theorem 3.1. Let us emphasize
that such assumptions are not specific to this result: other soundness results have similar
restrictions and/or provide with a weaker result.
4.1
Parsing
Parsing the bitstrings into terms is used in the proof of the soundness results; this function
has actually to computable in polynomial time, since this is part the construction of a
Turing machine used in a reduction. Therefore, Theorem 3.1 assumes that the pairing, key
generation and encryption functions add a typing tag (which can be changed by the attacker),
that indicates which operator has been used and further includes which key is used in case of
encryption. This can be achieved by assuming that a symmetric key k consists of two parts
(k1 , k2 ), k1 being generated by some standard key generation algorithm and k2 selected at
random. Then one encrypts with k1 and tags the ciphertext with k2 .
These parsing assumptions are easy to implement and do not restrict the computational
power of an adversary. Adding tags can only add more security to the protocol. However,
current implementations of protocols do not follow these typing hypotheses, in particular
regarding the encryption. Therefore Theorem 3.1 requires a reasonable but non standard
and slightly heavy implementation in order to be applicable.
The parsing assumption might be not necessary. There are ongoing works trying to drop
it.
4.2
Length function
As explained in Section 2, Theorem 3.1 assumes the existence of a length function l, which
is a morphism from T (N ) to N. This length function is needed to distinguish between
ciphertexts of different lengths. For example, the two ciphertext {< n1 , n2 >}k and {n1 }k
should be distinguishable while {< n1 , n2 >}k and {< n1 , n1 >}k should not. There are
however cases where it is unclear whether the ciphertexts should be distinguishable or not:
?
iff
. length([[s]] ) = length([[t]] )
This requires some length-regularity of the cryptographic primitives. But even more,
this requires length to be homogenous w.r.t. the security parameter . To see this, consider
the case where length is an affine morphism:
length([[{t1 }rk ]] )
length([[t1 ]] ) + +
length([[< t1 , t2 >]] )
length([[t1 ]] ) + length([[t2 ]] ) +
length( (n))
S TA C S 1 1
38
where cannot be null since some bits are needed to mark the separators between the two
strings [[t1 ]] and [[t2 ]]. (Also, , > 0.)
Now, if we consider an arbitrary term t, length([[t]] ) = n1 +n1 +n2 +n3 .
length([[s]] )
0
0
0
length([[t]] ) must be independent of , hence there must exist , N, > 0 such that
0
0
= and = .
This implies in particular that the pairing function always adds bits (or a greater
multiple of ) to the bitstrings. Similarly, a ciphertext should be the size of its plaintext
plus a number of bits which is the a multiple of .
While it is possible to design an implementation that achieves such constraints, this is
not always the case in practice and it may yield a heavy implementation, in particular in
conjunction with the parsing assumptions. Moreover, on the symbolic side, adding a length
function raises non trivial decidability issues.
Adding a symbolic length function is needed for proving indistinguishability as illustrated
by the former examples. It is worth noticing that several soundness results such as [13, 15,
31, 29, 12] do not need to consider a length function. The reason is that they focus on
trace properties such as authentication but they cannot considered indistinguishability-based
properties (except computational secrecy for some of them).
4.3
Dishonest keys
Theorem 3.1 assumes the adversary only uses correctly generated keys. In particular, the
adversary cannot choose his keys at its will, depending on the observed messages. The
parties are supposed to check that the keys they are using have been properly generated.
The assumption could be achieved by assuming that keys are provided by a trusted server
that properly generates keys together with a certificate. Then when a party receives a key,
it would check that it comes with a valid certificate, guaranteeing that the key has been
issued by the server. Of course, the adversary could obtain from the server as many valid
keys as he wants.
However, this assumption is strong compared to usual implementation of symmetric keys
and it is probably the less realistic assumptions among those needed for Theorem 3.1. We
discuss alternative assumptions at the end of this section. It is worth noticing that in all
soundness results for asymmetric encryption, it is also assumed that the adversary only uses
correctly generated keys. Such an assumption is more realistic in an asymmetric setting as a
server could certify public keys. However, this does not reflect most current implementations
for public key infrastructure, where agents generate their keys on their own.
We now explain why such an assumption is needed to obtain [Link] intuitive
reason is that IND-CCA does not provide any guarantee on the encryption scheme when
keys are dishonestly generated.
I Example 4.1. Consider the following protocol. A sends out a message of the form {c}Kab
where c is a constant. This can be formally represented by the process
A = (r)cout (< c, {c}rkab >).0
Then B expects a key y and a message of the form {{b}y }Kab where b is the identity of B,
in which case, it sends out a secret s (or goes in a bad state).
A
B:
(r) c, {c}rKab
B : k, {{b}k }Kab
A:
39
B:
A:
(r3 ) {k 0 }rK3ab
A : {A}Kab
B: s
Then symbolically, the process (kab )(s)AkB would never emit s while again, a computational adversary can forge a key k such that any bitstring can be successfully decrypted
to a using k.
This attack could be captured, allowing the forged key to be independent of the ciphertext. This can be modeled by the equation
dec(x, fakekey(y)) = y
where fakekey is now a primitive of arity 1. Some attacks may however require the decryption
to depend from the cyphertext as shown in the next example.
I Example 4.3 (simultaneous cyphertexts). Consider the following protocol where A sends to
B p cyphertexts c1 , . . . , cp . Then B encrypts all ciphertexts with a shared key kab together
S TA C S 1 1
40
with a fresh value nb and commits to p other nonces N1 , . . . , Np . Then A simply forwards
the cyphertext together with a fresh key k. Then B checks whether each cyphertext ci
decrypts to Ni using the key k received from A, in which case he sends out a secret s.
A
B:
c1 , . . . , c p
A:
{Nb , c1 , . . . , cp }Kab , N1 , . . . , Np
B:
{Nb , c1 , . . . , cp }Kab , k
A:s
Then symbolically, the process (kab )(s)AkB would never emit s since the Ni are generated after having received the ci and the nonce Nb protects the protocol from replay attacks.
However, having seen the ci and the Ni , a computational adversary can forge a key k such
that each bitstring ci can be successfully decrypted to Ni using k. More precisely, given an
IND-CCA2 (authenticated) encryption scheme (G, E, D), it is easy to build another INDCCA2 (authenticated) encryption scheme (G 0 , E 0 , D0 ), which allows to mount the previous
attack. Indeed, consider G 0 = 0G (all honest keys begin with the bit 0), E 0 (m, i.k) = E(m, k)
for i {0, 1} and D0 defined as follows:
D0 (c, k) = D(c, k 0 ) if k = 0 k 0
D0 (c, k) = n if k = 1 c1 , n1 , c, n cp , np
D0 (c, k) = otherwise
For dishonest keys, the decryption function D0 (c, k) searches for c in k and outputs the
following component when c is found in k. It is easy to check that (G 0 , E 0 , D0 ) remains INDCCA2 and allows an adversary to chose a key that decrypts to anything he wants, but with
different possible outputs depending on the ciphertext.
To capture this attack, we need to consider a symbol of arity 2p for any p and an equation
of the form
dec(xi , fakekey(x1 , . . . , xp , y1 , . . . , yp )) = yi
But this is still not be sufficient as the outcome may also depend on the ciphertext that is
under decryption and on public data. Intuitively, decrypting with an adversarial key may
produce a function depending on the underlying plaintext and on any previously known
data.
Related work. To our best understanding of [13], these examples seem to form counterexamples of the soundness results for symmetric encryption as presented in [13]. An implicit
assumption that solves this issue [10] consists in forbidding dishonest keys to be used for
encryption or decryption (the simulator would stop as soon as it received a dishonest keys).
As a consequence, only protocols using keys as nonces could be proved secure.
The only work overcoming this limitation in a realistic way is the work of Kuesters
and Tuengerthal [39] where the authors show computational soundness for key exchange
protocols with symmetric encryption, without restricting key generation for the adversary.
Instead, they assume that sessions identifiers are added to plaintexts before encryption. This
assumption is non standard but achievable. It would however not be sufficient in general
as shown by the examples. In their case, such an assumption suffices because the result is
tailored to key exchange protocols and realization of a certain key exchange functionality.
Conclusion
Among all the limitations we discuss in this paper, the main one is to consider only honestly
generated keys (or a certifying infrastructure), which is completely unrealistic. There are
41
(at least) two main ways to overcome this assumption. A first possibility, already sketched
in the paper, consists in enriching the symbolic model by letting the adversary create new
symbolic equalities when building new (dishonest) keys. In this way, many protocols should
still be provably secure under the IND-CCA assumption, yet benefiting from a symbolic
setting for writing the proof.
A second option is to seek for stronger security assumptions by further requesting nonmalleability. The idea is that a ciphertext should not be opened to a different plaintext,
even when using dishonest keys. This could be achieved by adding a commitment to the
encryption scheme [35].
However all these limitations also demonstrate that it is difficult to make symbolic and
computational models coincide. Even for standard security primitives, soundness results
are very strong since they provide with a generic security proof for any possible protocol
(contrary to CryptoVerif). For primitives with many algebraic properties like Exclusive Or
or modular exponentiation, the gap between symbolic and computation models is even larger
and would require a lot of efforts.
We still believe that computational proofs could benefit from the simplicity of symbolic
models, yielding automated proofs. An alternative approach to soundness results could
consist in computing, out of a given protocol, the minimal computational hypotheses needed
for its security. This is for example the approach explored in [17], though the symbolic model
is still very complex.
Acknowledgement
We wish to thank Michael Backes and Dominique Unruh for very helpful explanations on
their work and David Galindo for fruitful discussion on non-malleable encryption schemes.
References
1
2
3
4
5
S TA C S 1 1
42
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
43
S TA C S 1 1
44
40
41
42
43
44
45
Y. Lindell. General composition and universal composition in secure multiparty computation. In Proc. 44th IEEE Symp. Foundations of Computer Science (FOCS), 2003.
G. Lowe. Breaking and fixing the Needham-Schroeder public-key protocol using FDR.
In T. Margaria and B. Steffen, editors, Tools and Algorithms for the Construction and
Analysis of Systems (TACAS96), volume 1055 of LNCS, pages 147166. Springer-Verlag,
march 1996.
D. Micciancio and B. Warinschi. Completeness theorems for the Abadi-Rogaway language
of encrypted expressions. Journal of Computer Security, 2004.
D. Micciancio and B. Warinschi. Soundness of formal encryption in the presence of active
adversaries. In Theory of Cryptography Conference (TCC 2004), volume 2951 of Lecture Notes in Computer Science, pages 133151, Cambridge, MA, USA, February 2004.
Springer-Verlag.
M. Rusinowitch and M. Turuani. Protocol Insecurity with Finite Number of Sessions and
Composed Keys is NP-complete. Theoretical Computer Science, 299:451475, April 2003.
B. Warinschi. A computational analysis of the needham-schroeder protocol. In 16th Computer security foundation workshop (CSFW), pages 248262. IEEE, 2003.