Abstract
Many security protocols are built as the composition of an application-layer protocol and a secure transport protocol, such as TLS. There are several approaches to proving the correctness of such protocols. One popular approach is verification by abstraction, in which the correctness of the application-layer protocol is proven under the assumption that the transport layer satisfies certain properties, such as confidentiality. Following this approach, we adapt the strand spaces model in order to analyse application-layer protocols that depend on secure transport protocols; we consider both bilaterally and unilaterally authenticating secure transport protocols, such as bilateral and unilateral TLS.
The paper’s main contribution is a proof of the model’s soundness. In particular, we prove that, subject to a suitable independence assumption, if there is an attack against the application-layer protocol when layered on top of a particular secure transport protocol, then there is an attack against the abstracted model of the application-layer protocol. In contrast to existing work in this area, the independence assumption consists of eight statically checkable conditions, meaning that it is not necessary to consider all possible runs of the protocol.
Introduction
Modern security protocols tend to be constructed as two separate layers. The bottom layer, known as the secure transport layer, is a generic secure transport protocol, such as TLS [11], that can send arbitrary messages, protected in some way. For example, the secure transport layer might guarantee confidentiality of the messages (i.e. the messages can only be read by the intended recipient) or authenticity (i.e. the recipient can be sure of the identity of the sender). The second layer, known as the application layer, uses the guarantees provided by the transport layer to provide some useful functionality. For example, WebAuth [25] is an application-layer protocol that uses the security guarantees provided by the transport layer to provide a single-sign-on service, so that users can login to multiple websites with just one account.
There are two main tactics for verifying layered security protocols. Firstly, a combined protocol formed from the composition of the application and transport-layer protocols, can be analysed using standard techniques. Alternatively, verification by abstraction can be used to prove the application-layer protocol correct in isolation, assuming only that the transport protocol satisfies certain properties, rather than considering a particular implementation.
There are several advantages to verifying protocols by abstraction. Firstly, the proofs are simpler, as the combined protocols are often very large, and transport-layer protocols (particularly TLS) are highly complex. It also permits the proof of transport-layer correctness to be reused for multiple application-layer protocols. Further, the application-layer proof no longer depends on a particular transport layer, meaning that any protocol that provides equivalent (or stronger) properties can be used. Lastly, such a proof often reveals precisely why the transport layer has to satisfy some property to guarantee the security of the application layer. This can be informative for the protocol designer, who may be able to alter the application-layer protocol to weaken its requirements, or even change the transport-layer protocol required.
Proof by abstraction. The first contribution of this paper, in Section 3, is an extension to the strand spaces model [26], the high-level strand spaces model, that can be used to prove application-layer protocols correct by abstracting away from the transport-layer protocol. Our model allows us to capture the properties of a wide variety of transport-layer protocols, including TLS, to be modelled. In contrast to other techniques, we are able to model the guarantees provided by so-called unilaterally authenticating secure transport protocols, such as unilateral TLS. In these protocols, the server is authenticated to the client, but the client is not authenticated to the server, although the server can assume all messages come from the same source. Many other techniques for verifying layered security protocols have focused on modelling the security guarantees provided by bilateral transport-layer protocols, such as bilateral TLS, where each participant is authenticated to the other. However, many application-layer protocols, in particular those used on the web, are unable to make use of bilateral TLS since each party must possess a public-key certificate. Thus, web-based protocols almost exclusively use unilateral TLS, making it important that protocol analysis techniques can model its guarantees.
There have been many approaches to verifying layered-security protocols by abstraction. For example, [4] extends the Inductive Approach [24] to verify application-layer protocols that are layered on a simple type of secure transport protocol. In [3] the authors give a LTL-based model checking approach to verifying layered security protocols by abstraction that supports many types of secure transport protocol, although not unilateral protocols. In [12] the authors use CSP to verify application-layer protocols layered on a similar range of transport-layer protocols to those we support, with the exception of unilaterally authenticating secure transport protocols. In [22] the authors define a model-checking based approach that allows verification of application-layer protocols that are layered on unilateral or bilateral protocols. In [6] the authors define a variant of the pi-calculus that allows the guarantees provided by both unilateral and bilateral transport-layer protocols to be modelled. [1] presents a variant of the join-calculus that allows strong secure channels to be modelled. Further comparisons are made in Section 8.
Soundness. Proving a layered security protocol correct by abstraction introduces an obligation to prove that the analysis captures all attacks that verifying the combined protocol would find. Clearly, such a proof requires a number of assumptions on the application and transport-layer protocols, as it is possible to construct protocols that break the security guarantees of others by, for example, deliberately leaking keys. Further, it is highly desirable for these assumptions to be statically checkable (i.e. such that they can be checked simply by inspection of the protocol messages), or checkable using existing tools, in order to easily determine if a composition is sound.
Our main contribution is a proof of the soundness of the high-level strand spaces model, with respect to the Dolev–Yao model [13]. In particular, we prove that, subject to statically checkable conditions, whenever there is an attack against the combined protocol, then there is an attack against the application-layer protocol in the high-level model. This is a particularly difficult problem for a number of reasons. The central challenge was to ensure that the proof did not impose restrictions that prevented real-world protocols from being modelled. For example, we could have proven the result easily had we insisted that the messages of the application and transport layer were entirely disjoint, or that transport-layer messages were of a certain format. This would have substantially restricted the utility of the proof. Instead, we believe that our static assumptions are satisfied by large classes of both application and transport-layer protocols, including WebAuth and TLS (although TLS does require an attack-preserving transformation).
Our statically checkable conditions take some inspiration from [17] since they are primarily concerned with what encryptions can be shared between the layers. For example, we prohibit any encrypted term from being shared between the application layer and certain parts of the transport layer. We also make several assumptions about the penetrator initial knowledge and how regular agents behave. These assumptions allow us to prove our main result as follows.
In the following, a bundle is a collection of runs of a protocol by various agents, possibly involving the penetrator. A low-level bundle models the messages of the secure transport protocol explicitly, whereas a high-level bundle abstracts from the details of the secure transport protocol.
In Section 4, we prove that there exists a class of low-level bundles, known as interference-free bundles, that can be converted into high-level bundles that have corresponding application-layer behaviour.
In Section 5, assuming that our statically checkable condition holds, we prove that any low-level bundle can be transformed to a corresponding interference-free low-level bundle.
In Section 6 we show that the above transformations preserve attacks against protocols. We prove that the transformations from Section 5 ensure that if a low-level bundle does not satisfy a particular protocol-correctness property then neither does the transformed low-level bundle. Further, we show that whenever a low-level bundle does not satisfy a protocol-correctness property, and the application-layer protocol is layered on a correct transport-layer protocol, then the high-level bundle created by Section 4 also does not satisfy the protocol-correctness property.
Using the above, we can then observe that the high-level strand spaces model is sound, in the sense that any proof of correctness at the high-level implies there can be no bundle at the low-level that does not satisfy the property.
In Section 7 we show how a simple attack-preserving transformation allows both forms of TLS to be considered within our model.
The soundness of protocol composition has been widely considered before. Most work [2,7,8,10,17] considers when it is sound to compose protocols in parallel. Generally, the results of these papers require various disjointness properties to hold, not unlike the properties we consider in this paper. However, we are attempting to prove the correctness of the layers independently, even though messages are formed from those of multiple layers.
There has been relatively little work done on the soundness of techniques that prove protocol correctness by abstraction. Therefore, we consider the fact that the high-level strand spaces has a general soundness result to be the most novel aspect of our work. The work closest to ours is [16], in which the authors show that their analysis technique is sound, assuming a statically checkable condition. Compared to the assumptions developed in this paper, the conditions the authors specify are more restrictive and, in particular, TLS does not satisfy their definition. Further comparisons to this and other closely related pieces of work are given in Section 8.
The proofs for many of the results are contained in the Appendices of the online version (see Supplemental material).
Relationship to previous work. This paper builds on existing work of the authors in [15,19,20]. The version of the high-level strand spaces model defined in Section 3 is from [15], which in turn extended [19]; the only difference is that this version supports compound keys. Section 4 is loosely based on [20] in that the translation between the low and high-level strand spaces are similar. However, the semantic condition and the resulting correctness proof have been reformulated. [14] contains a slightly extended version of the model that models the guarantees provided by protocols that additionally prevent message reordering.
Notation. In this paper we use the following notation for sequences. A sequence is denoted as, for example,
Introduction to strand spaces
The strand spaces model [26] allows security protocols to be proven correct under the Dolev–Yao model [13]. In this section we review the strand spaces model.
Terms and strands. The basic components of protocol messages are terms, which can be an atom, a concatenation of terms or an encryption of a term. This is based on [26] and has been augmented with support for compound keys.
(Based on [26]).
The set of atoms
The set of terms
This differs from [26] where the set of atoms was denoted by
The set of key generation functions
We assume an ordering relation, the subterm relation, ⊑, over
Note that the ⊑ relation is defined such that
Whilst the term algebra does not include explicit support for hash functions, it is possible to model protocols that use hash functions by making use of key generation functions. For example, hashing a term t using a hash function h could be modelled as encrypting 0 using h as a key-generation function; i.e.
A strand represents one principal’s view of a protocol’s execution and it consists of a sequence of message transmissions (written
A signed term is a pair
(From [26]).
A strand space over A node is a pair If There is an edge There is an edge An unsigned term t originates at a positive node An unsigned term t is uniquely originating iff t originates on a unique
A bundle represents possible real-world runs of the protocol; it is a set of strands such that every message that is received by a strand is sent by another strand in the bundle. Since the above definition of a strand space allows us to view a strand space as a connected graph
(From [26]).
Suppose If If
A node n is in a bundle
(From [26]).
If
(From [26]).
If
(From [26]).
Let
The penetrator. The capabilities of the penetrator are defined by the operations that he can perform. In the case of the strand spaces model this means that we need to define penetrator strands that allow the penetrator to manipulate messages according to the Dolev–Yao model.
(From [26]).
A penetrator strand for
Text message: Concatenation: Separation into components: Encryption: Decryption: Key generation:
(Adapted from [26]).
An infiltrated strand space is a tuple
We define
For the remainder of this paper we will refer to an infiltrated strand space simply as a strand space and implicitly consider P and
(From [18]).
Bundles
(From [18]).
A path p through a bundle
In order to simplify protocol correctness proofs, a bundle normal form is defined, as follows.
(Based on [18]).
A
(Based on [18]).
A bundle
Intuitively, a normal bundle is one where the penetrator first de-constructs any term that it needs in order to build the new term, and only then starts constructing the outgoing term. In particular, if the bundle does not contain
For any bundle there exists an equivalent normal bundle (Based on [18]).
The high-level strand spaces model
This section defines the high-level strand spaces model. In Section 3.1, we define the basics of the model, including the necessary adaptations to support unilaterally authenticating secure transport protocols. In Section 3.2 we define the operations that the penetrator can perform, including how he can manipulate messages sent over secure channels. In Section 3.3 we give a simple example that demonstrates how the high-level strand spaces model can be used.
Basic definitions
We consider a channel as an object that allows two participants to exchange messages: messages sent at one end of the channel are intended to be received at the other end. A fundamental property of many transport protocols, including TLS, is that a principal is able to send or receive on a channel only if she has the relevant cryptographic keys; these are different for different channels, which prevents messages being replayed between sessions.
A channel end conceptually encapsulates all the information that is required to communicate on a particular channel. However, as we abstract away from the details of the transport protocol, we treat channel ends as opaque values. For generality, we also consider channels (for protocols that are weaker than TLS) that do not provide a separation between sessions; we denote the channel end by
We denote by
However, some protocols, such as unilateral TLS, do not authenticate a participant’s name. We denote the endpoint by
We assume a set of channel types,
The set of regular endpoints
In examples, we write
High-level terms model data being sent across the network.
A high-level term is a tuple denoted as
Let
When the sign of a high-level term is irrelevant, we will elide
From the above definition of high-level terms, high-level nodes, high-level strands, high-level strand spaces, high-level bundles and high-level origination can be defined analogously to the standard case presented in Section 2. We also lift the definitions of
For the remainder of this section, fix a high-level strand space Σ.
Channel types determine the acceptable format of high-level terms. In particular, they determine the permissible channel endpoints. For example, if the channel was a bilateral TLS channel then the sender and recipient endpoints
For every channel Either every Either every Either every Either every
Note that if a strand makes exclusive use of bilateral channels then the sender’s name will typically be the same on each node and would be, for example, the name contained in the sender’s certificate if public-key certificates were being used by the transport protocol. Further, there is nothing to prohibit a transport protocol that reuses the same channel end with multiple names, e.g.
The function
As an example consider Fig. 1. This bundle represents a client retrieving e-mail via a hypothetical protocol that makes use of unilateral TLS. It contains a client strand

An example bundle illustrating how a regular agent on strand
This example illustrates the necessity of channel ends. Note that we need to ensure that
We now consider how to model the penetrator. We start with messages that are sent over the unprotected channel ⊥ (i.e. not over a secure transport protocol). Clearly, we need to model the penetrator as the full Dolev–Yao penetrator and therefore we allow the penetrator to perform all the usual actions.
The application-layer penetrator strands are strands of the following form:
Text message: Concatenation: Separation: Encryption: Decryption: Key generation:
We now consider what the penetrator can do with messages sent over a secure transport channel. For ease of exposition we firstly consider a restricted model in which the only secure transport protocols are bilateral and unilateral TLS. Clearly, we must allow the penetrator to receive messages intended for him, and to send messages coming from himself.
The transport-layer penetrator strands for TLS-like protocols are of the following form, where Send: Receive:
Note that the side conditions
Observe that
Further, the definition captures session properties of TLS-like protocols. The condition
Figure 2 gives an example illustrating how the penetrator can use these strands to check his e-mail, using the same hypothetical protocol as earlier.

A figure illustrating how the penetrator can check his e-mail, using the same protocol as Fig. 1.
Generalising the secure transport protocol. For secure transport protocols that are weaker than TLS, there are many other ways for the penetrator to interact with transport messages. We now generalise the above in order to model such protocols. In particular, we follow the approach taken in [12,19] to define a more general penetrator that can also:
Learn a message sent to an honest endpoint (i.e. overhear); Fake a message as coming from an honest endpoint; Hijack a message, redirecting it to a different endpoint, and/or re-ascribing it as from a different endpoint (changing name and/or channel end).
Later, we will restrict the use of such strands to channels that do not provide confidentiality (in the case of learning) or authentication (in the case of faking or hijacking). Formally, we exclude penetrator strands from the strand spaces according to the guarantees it provides (noting that this introduces a proof obligation on the transport protocol). For example, in the case of bilateral TLS we exclude all of the above penetrator strands from the strand space.
The transport-layer penetrator strands are Learn: Fake: Hijack:
Note that by Assumption 3.3 it is not possible for a
Having defined the set of penetrator strands, we lift the usual definitions of penetrator paths, regular nodes, penetrator nodes, and bundle equivalence from the low-level strand space definitions in the obvious way.
We make one further assumption to ensure that a regular agent has exclusive usage of a number of channel ends to send and receive messages.
Let
Channel properties. We now define channel properties that restrict the penetrator’s behaviour. There are many different channel properties. We consider only the most important; other definitions could be made if specialised applications require them. We define channel properties by stating the restrictions they impose upon the strand space.
The first property we consider is confidentiality. Intuitively this needs to prohibit the penetrator from learning any value that was sent along a confidential channel to a regular agent. Clearly, this requires
We let
Note that the above definition also prohibits changing the recipient from
The above is a significant difference to other formalisations. For example, [3] defines a confidentiality property, but does not consider sessions so confidentiality is only considered relative to a particular name. Further, [22] defines a Confidential Channel, but has no direct support for modelling segmented sessions, as above. We believe the above is a very useful guarantee and, actually more accurately corresponds to the guarantees a channel implementation is likely to provide.
Many application-layer protocols require a guarantee that messages came from a certain source or were intended for a particular destination, i.e. that the channel is authenticated. Thus, this means that
(Authenticated).
We let
Note that an authenticated channel does not authenticate the origin of the message, but only the sender. Thus, if B receives a message of the form
The definition of
The conjunction of
[21] uses the low-level strand spaces model to prove TLS correct. Utilising Section 4 it would be straightforward to prove that TLS indeed only allows
High-level normality. As with the low-level strand spaces model, there are a large number of ways for the penetrator to construct a message and thus, we define a normal form for bundles that avoids redundancies. We will require that bundles contain no low-level redundancies, as per Definition 2.13, but also that there are no redundancies amongst the high-level strands (e.g.
We proceed as per the low-level case, and begin by defining what it means for
A p is a single whenever a constructive edge sends to a destructive edge in p, the constructive edge must be a
A high-level bundle
In order to prove that every high-level bundle is equivalent to a normal bundle, we require several assumptions on what transport-layer strands the strand space contains. For example, by the above definition, penetrator paths that consist of a

An illustration of Assumption 3.12(1).
Every high-level strand space Σ satisfies the following properties:
If a If a If multiple adjacent
Note that the strands prohibited by the
Every high-level bundle is equivalent to a normal high-level bundle
We now present a simple example of how the model can be used. A more complex example can be found in [14,15] in which WebAuth [25], a single-sign-on protocol, is analysed.
The following protocol allows a user U to authenticate to a login server
Using the above, the strands can be defined as follows (assuming that
In order to prove the above protocol correct, some assumptions on the security of the password are required. We formalise what it means for a term t to be confidential as follows.
A term t is confidential in a high-level bundle
If the above holds then it is impossible for the penetrator to obtain the term t in any way. We quantify over all equivalent bundles in order to ensure we consider all possible ways in which the penetrator could obtain the value without altering the regular behaviour.
In [14,15] we present proof rules that allow one to verify properties of protocols such as these. For example, it is possible to verify that, assuming U,
Analysing layered security protocols by abstracting away from the implementation of the transport layer introduces a proof obligation that this abstraction is sound. In this section we begin to prove that if there is an attack on the protocol when implemented using a transport-layer protocol that satisfies the channel properties, then there is also an attack on the abstracted protocol. The outline of the overall proof is as follows:
In Section 4.2 and Section 4.3 we define what it means for a high-level bundle to abstract a low-level bundle. Informally, this means that they have the same application-layer behaviour. In Section 4.4 we define what it means for a bundle to be interference-free and use this to prove that every interference-free bundle can be abstracted. Section 5 proves that every bundle Lastly, Section 6 introduces a logic in which protocol-correctness properties can be expressed. We also prove that if ϕ is such a property, whenever
Hence the model is sound since if there is an attack against a low-level bundle, there is an attack against a high-level bundle.
For the remainder of this paper, we will denote high-level objects with a hat (e.g.
Preliminaries
In order to define low-level penetrator behaviours like sending and hijacking, we define different types of penetrator paths. Recall that a penetrator path is a sequence of nodes where each consecutive pair of nodes is linked by either
A penetrator path p in a low-level bundle is:
normal iff whenever a constructive edge sends to a destructive edge, the constructive edge is a constructive iff it only traverses constructive edges; destructive iff it only traverses destructive edges.
We will frequently wish to check if a given term is the application-layer message of a transport-layer message. However, we cannot use the subterm relation to check this since the transport-layer packaging may include the application-layer message. Hence, we would like the ability to retrieve the term that lies in a particular position. We thus define extraction paths which allow us to specify the subterm to extract from a term, given the position of it. Conceptually, they are paths in the abstract syntax tree.
The set of all extraction paths,
For example, if

A bundle containing a destructive penetrator path
It will be helpful, particularly in Section 5, to consider what the penetrator is doing in terms of extraction paths. For example, consider Fig. 4 and the destructive penetrator path
Let p be a constructive or destructive penetrator path in a bundle starting at a node
If p is destructive
If p is constructive
Transport-layer modelling. We now define how to extract application-layer information, such as the sender of a transport-layer message, from a low-level strand space. We also define some assumptions on the transport-layer protocols in order to ensure well-definedness. Throughout this section we use the example of a simple transport-layer protocol that sends an application-layer message m from A to B as follows:

A low-level bundle that sends application-layer messages, one over the unprotected channel and another using a simple transport-layer protocol. The corresponding high-level bundle is also given. (a) The low-level bundle. (b) The corresponding high-level bundle.
We start by stating an assumption regarding the partitioning of the set of regular nodes according to the type of transport-layer content they contain. Note that in the following we give informal meanings to the different sets of nodes; other assumptions in this section will impose sufficient conditions on the partition to ensure that the partition satisfies these informal descriptions.
The set of regular nodes The set of transport-layer nodes, denoted The set of unprotected regular nodes, denoted The set of transport-layer non-message nodes, denoted
The set of application-layer nodes, denoted
For example, in Fig. 5, set definitions that would satisfy the intuition above are
We now consider how to transform transport-layer messages into high-level terms by making a number of assumptions on the structure of transport-layer messages, as formalised below.
For each channel
For all channels The set of transport-layer payload terms, The set of transport-layer non-payload terms,
Further, we define:
For example, considering Fig. 5, the example channel c, and the above sets of nodes,
Note that the existence of
For each low-level bundle
Observe that we cannot define
Using the above functions we define several functions that extract components from arbitrary transport-layer payload terms. In order to define these functions it is necessary to know which channel a particular transport-layer payload term was sent on. To ensure such a function is well-defined we need to ensure that no two channels share any transport-layer payload terms.
For all distinct channels
Given the above assumption we can now define the following functions.
Let Σ be a low-level strand space. Define the following functions over
For each bundle
For example, in Fig. 5,
Recall that in Assumption 3.3 we disallowed the penetrator from transforming a message where, for example, the sending channel end was
For all low-level bundles
For all low-level bundles
The first step in the proof is to define an abstraction function,
Let for for
The bundle is omitted when it is clear from the context.
Using the above we specify how the low and high-level regular nodes are related, as follows.
A regular node map is a partial function for
For example, the regular node map between the low and high-level bundles of Fig. 5 is given by the function
In this section we define how the penetrator nodes of the low-level bundle are related to the penetrator nodes of the high-level bundle. This is done by defining two different maps, the first of which maps application-layer nodes to high-level penetrator nodes. This definition is similar to Definition 4.12.
An application-layer penetrator node map is a partial injective function
For example, considering the bundles shown in Fig. 6, a valid application-layer penetrator node map would map
Relating transport-layer penetrator nodes requires more thought since some of the transport-layer high-level penetrator strands (i.e.

An illustration of how the low-level penetrator paths and high-level penetrator strands relate. (a) A bundle containing a low-level
We will also require a high-level penetrator strand that simply copies the application-layer message. This is required for technical reasons, which are discussed in Remark 4.18.
The transmit strand is defined as:
Transmit:
Clearly
In order to define the various transport-layer penetrator strands, we will need to identify when a penetrator path is sending or receiving an application-layer message. We can formalise such a definition by using extraction paths, as follows.
We say that a destructive penetrator path
Consider the low-level penetrator paths that correspond to the normal high-level penetrator strands, i.e.
A normal penetrator path p transports the application-layer message iff
We now define how low-level penetrator paths correspond to high-level penetrator strands.

Various penetrator paths from Definition 4.17 using the running example of a secure transport protocol. In each case, the penetrator path runs from the top-left node, to the bottom-right node. (a) A
Let p be a penetrator path in a low-level bundle, starting at a node n and ending at a node
n is a positive regular node and p is destructive; As per a
n is a positive penetrator node and p is constructive; As per a
n is a positive regular node and p is normal; p transports the application-layer message. As per
As an example of why
We now define a second map involving penetrator nodes that maps nodes on penetrator paths to nodes on high-level penetrator strands. Note that the map cannot be a function since a subsequence of a penetrator path could be part of two different penetrator paths. For example, consider the penetrator path in Fig. 6(a); if the penetrator wanted to send the message from two different penetrator identities then he could create another
A transport-layer penetrator node map is a relation Maps the first and last penetrator nodes of
For example, again considering the bundles from Fig. 6, a suitable transport-layer penetrator node map would map
Using the above definitions in conjunction with those from Section 4.2 it is now possible to define a node map for a bundle
A node map is a relation
Note that in some cases there may be multiple, equally valid, node maps from a low-level bundle. For example, a
In this section we consider the conditions under which we can safely abstract away from the transport-layer behaviour. In particular, we develop a condition that holds whenever a term t is constructed by the penetrator in a way that can be mirrored in a high-level bundle. Further, we describe a bundle condition, interference-freedom that is true whenever the bundle can be safely abstracted, in the following sense.
A high-level bundle
Interference-freedom. When proving that a low-level bundle is abstractable we will need to ensure that application-layer messages constructed by the penetrator are constructed only from terms that he can obtain in the high-level model, otherwise the bundle cannot be abstracted. For example, suppose the penetrator takes a nonce sent by an honest agent in the key establishment phase of the transport-layer protocol and replays it within an application-layer message. Clearly, this case has to be disallowed since the node providing the nonce will not exist in the abstracted bundle.
To define interference-freedom we require an auxiliary definition. Informally, a negative low-level node n is abstractly constructible precisely when Terms in the penetrator’s initial knowledge, obtained from Terms sent by honest agents on ⊥; Terms sent by honest agents on non-⊥ channels that are unpacked by the penetrator.
Thus, if a negative node is abstractly constructible it follows that all the nodes that are required to construct the message will be in the abstracted bundle.
Note that in all subsequent definitions and lemmas we assume, without loss of generality, that bundles are normal to simplify the definitions and proofs. In the following, an initial penetrator path starts at an initial penetrator node (i.e. at a
To define abstractly constructible, we need to define what it means for a penetrator path to contribute to the message of a node
A penetrator path p directly-contributes iff, for every node n on p that lies on the key edge of a
Thus, the above definition identifies penetrator paths that only provide a key to decrypt a transport-layer message. Using the above, we can now define what it means for penetrator paths and nodes to be abstractly constructible.
Let p starts at a p starts at a regular node p starts at a regular node
A penetrator node
We now define what it means for a bundle to be interference-free. The intention is that this property is true precisely when a low-level bundle can be safely abstracted, in the sense that high-level terms are not constructed from transport-layer terms.
Let p is normal, p starts at a regular node p is constructive and starts at an abstractly constructible node
Thus, a negative regular node
Hijack, or simply alter the packaging of an existing message (Case (2a)); or
send a message that has been properly constructed (i.e. from an abstractly constructible node) via a
The above definition prevents several kinds of attacks from appearing in interference-free bundles. In particular, it disallows penetrator paths where the penetrator transforms a transport-layer term from one channel into one for another channel, without fully decrypting the application-layer message (a multi-channel attack). It also prevents the penetrator from sending transport-layer terms as application-layer messages (a multi-layer attack – e.g. Fig. 8(a)). We have to prohibit both of these cases otherwise the bundle cannot be safely abstracted as there would be attacks that depend on the transport-layer implementation. See Fig. 8 for an example.
The above definition is a semantic condition, in that it quantifies over all bundles, making it hard to verify directly. We define a statically checkable condition on the protocol’s definition in Section 5 that implies interference-freedom.

Two bundles that illustrate abstractly constructible and interference-freedom. (a)
Abstract correctness. The channel properties, such as
Unfortunately, this is too strong. Recall that a
A
We now define a property of low-level bundles that is true iff the bundle contains only penetrator behaviours that are compatible with the channel’s security properties (i.e.
A channel c is abstractly correct in a bundle If If
A bundle
Observe that this definition precisely specifies what it means for a channel to be correct in a low-level strand space, and thus specifies what proof obligations there are on the user.
Henceforth, we will only consider abstractly correct strand spaces.
Σ is abstractly correct.
We can now state that any interference-free low-level bundle is abstractable.
Let
In this section we have proven the soundness of the high-level strand spaces model by proving that every bundle that satisfies our independence assumption, defined in Definition 4.24, and is abstractly correct, can be abstracted to a high-level bundle.
We defined a mapping
To define our semantic condition we firstly defined what it means for a node to be abstractly constructible, which is true whenever a node’s message is built from only application-layer values. Intuitively, this means that the node can be safely abstracted. We then defined our main semantic property, interference-freedom, and proved that all interference-free bundles that are also abstractly correct (which requires that channels are being used correctly) are abstractable.
Disjoint encryption
In the previous section we proved that any interference-free bundle can be safely abstracted. Unfortunately, interference-freedom is not a statically checkable condition, based on the syntax of the transport and application-layer messages, but instead explicitly quantifies over all possible bundles. This makes testing for it automatically rather difficult, and also lessens our understanding of the assumption. In this section we instead address this problem by introducing a new statically checkable condition based on disjoint encryption [17]. We then prove that if a strand space satisfies our condition, then any bundle of the strand space can be transformed to an equivalent bundle that is interference-free.
Note that in addition to the statically checkable assumptions that we develop in this section, we will require Assumption 4.27 (which assumes the strand space is abstractly correct). This is not a statically checkable assumption, but can be verified using existing tools such as ProVerif [5] or Scyther [9] etc.
The main challenge we address is the presence of paths in the low-level bundle that transform a value that is part of the transport-layer packaging (e.g. a nonce) and send it as part of an application-layer message. We term such penetrator paths crossing-paths. These paths prevent us from abstracting bundles as the paths are not abstractly-constructible. However, under the new assumptions that we define, any crossing-paths that do exist are actually superfluous, in that an equivalent bundle exists that contains no crossing-path.
The outline of the proof is as follows. In Section 5.1 we define a few preliminaries including: several sets of encryptions (for the disjointness condition) and a type of penetrator path that are used by the penetrator to send application-layer messages. We also introduce a new, stronger, form of bundle equivalence that preserves the satisfaction of application-layer correctness properties. In Section 5.2 we define the statically checkable assumptions that the low-level strand space must satisfy. In Section 5.3 we consider crossing-paths, which are penetrator paths that, for example, transfer transport-layer nonces into the application layer. We prove that any bundle can be transformed to an equivalent bundle that contains no crossing-paths. We remove these crossing-paths by defining a new strand space that is related to the previous strand space, but in which the penetrator has been given a larger set of initial knowledge (this set will not contain any values of relevance to the application layer). In Section 5.4 we prove that any crossing-path-free bundle can be transformed into an equivalent one that is interference-free. This is used in Section 6 to prove that the high-level strand spaces model is sound, since any bundle that contains an attack is equivalent to an abstractable bundle that also contains the attack.
Preliminaries
Encryption sets. Firstly, we define various sets of terms and encryptions that will be used to define the disjointness conditions.
The set of application-layer messages sent over the unprotected channel, ⊥ is defined by The set of application-layer terms is defined by: The (subterm closed) set of transport-layer non-message terms, The set of application-layer ingredients,
Recalling the running example used in Section 4.1, in the case of Fig. 5,
The set of all encryptions, denoted by E, is defined as: The set of transport-layer message encryptions, of all encryptions that enclose an application-layer message is defined by The set of transport-layer non-message encryptions for a channel c is defined by
The union of
Message sending. In the following sections we will need to identify which penetrator nodes are manipulating application-layer messages. We term such nodes application-layer penetrator nodes. In order to identify such nodes, we firstly identify all penetrator paths that manipulate terms that are eventually incorporated into application-layer messages. The following definition identifies when a constructive penetrator path constructs a message and then sends it over a transport channel. For ease we consider only normal bundles.
Let
Bundle correctness properties. In Section 6 we will prove that the high-level strand spaces model is sound, by showing that whenever a low-level bundle does not satisfy a correctness property, a high-level bundle that also does not satisfy the property exists. We prove this by showing that we can transform the low-level bundle to a related bundle that is abstractable, but also does not satisfy the correctness property. Clearly, in order to prove the above we need the bundle transformation to preserve the incorrectness of the correctness property. Unfortunately, the standard definition of bundle equivalence is not strong enough to do this.
For example, consider specifying a node causally precedes, i.e. ≼, another node. Since bundle equivalence only requires the regular behaviour to be the same, this relation is not necessarily preserved by bundle equivalence. Further, the transformations we define will change the ≼ relation: they will remove some penetrator paths that cannot be safely abstracted. However, as we will only want to write ≼ as a conclusion of an implication in our correctness properties, it will therefore only occur positively. Thus, it suffices to ensure that the transformed ≼ relation relates fewer nodes. Thus, we introduce a relation on bundles ⊵ that holds when the bundles are equivalent and the resulting ≼ relation is a restriction of the original relation.
A low-level bundle
Abstract correctness preserving transformations. Later in this section we will develop a number of bundle transformations. We then prove that the resulting bundles satisfy certain properties. However, in these proofs we will need to assume that the bundle is abstractly correct. Therefore, when transforming bundles we need to be careful not to go outside of the set of abstractly correct bundles. In order to ensure this, we define a class of transformations, known as abstract correctness preserving transformations, that preserve the abstract correctness of bundles.
A bundle transformation f is abstract correctness preserving (henceforth ACP) iff whenever
Observe that the composition of ACP bundle transformations is ACP.
In order to prove that the transformations we use in this section are ACP, we will need an additional assumption that the channel restrictions are sensible. For example, recall that a A low-level strand space Σ contains only sensible channels iff: the strand space contains a
In this section we consider what statically checkable assumptions are necessary in order to prove our main result of this section, i.e. that every bundle can be made interference-free. In particular, we consider what behaviours we need to prohibit in order to safely abstract the bundles of a given strand space. We intersperse the definition of our assumptions with the reasons for their necessity.
Note that the aim of this section is to define assumptions that can reasonably be checked given a textual description of a protocol, such as the description given to a tool such as Casper, ProVerif or Scyther. We discuss how these assumptions can be checked at the end of the section.
The first condition requires that different transport protocols do not share any encryptions that enclose application-layer messages. This ensures that a message for one transport protocol cannot be partially deconstructed to produce a component of a message for another transport protocol. In particular, this ensures that any penetrator path starting at a regular transport-layer node on a channel
Two transport-layer channels
Using the above definition we can easily state our first assumption.
The next few conditions impose further disjointness conditions on various types of encryptions. Recall that the set of all encryptions is given by
No application-layer encryption is also a transport-layer encryption, i.e.
No non-message transport encryption is also a transport-layer encryption, i.e.
Note that we do not require that
If a term
To see why a condition like this is necessary consider the bundle in Fig. 9, where

The fifth condition ensures that the penetrator cannot possess any transport-layer encryptions in his initial knowledge. This is required as it prevents the penetrator from creating transport-layer messages for which he does not know the application-layer message: clearly there is no high-level strand that permits this.
The set of terms initially deducible by the penetrator, denoted
No transport-layer encryptions are initially deducible by the penetrator, i.e.
The sixth condition ensures that the penetrator cannot possess non-public application-layer terms surrounded by non-application-layer encryptions. If the penetrator initially knew a non-public term that contained an application-layer term surrounded by some transport-layer encryptions, then there could exist a penetrator path on which he extracts the application-layer term by decrypting using transport-layer keys. However, such a path would not be valid in the high-level bundle and thus we cannot safely abstract the bundle.
Non-public application-layer terms must only appear in the penetrator’s initial knowledge surrounded by application-layer encryptions, i.e. if
The seventh condition disallows bundles in which an application-layer secret (e.g. a key) originates at both the application layer and the transport layer. Such occurrences are likely to be coincidences (and are certainly indicative of poor design) and may result in the bundle being unable to be abstracted. For instance, suppose a node n originates a value t at both the application layer and the transport layer. Further, assume that the application-layer value is unavailable to the penetrator (as it is sent over a confidential channel, or similar) but that the transport-layer value can be obtained by the penetrator. Therefore, the low-level bundle may contain a penetrator path from n to another application-layer node along which the penetrator uses t. However, such a path is not abstractable since it requires a particular configuration of the transport-layer protocol.
Atomic or encrypted application-layer values originate only at the application layer. That is, if a non-public application-layer term
The eighth condition disallows bundles in which a transport-layer encryption is also an application-layer ingredient (cf. Definition 2.1). Clearly any such bundle is not abstractable, since the transport-layer encryptions are not available in the abstracted bundle, and thus the key cannot be generated.
No transport-layer encryption can be an application-layer ingredient; i.e.
Note that the above condition actually subsumes the first part of Assumption 5.10(2); we keep these as separate conditions for clarity.
Lastly, we require that the strand space is abstractly correct. This is required as without this condition we are unable to abstract any bundles as there would be transport-layer behaviours that have no accompanying representation in the high-level bundles. In particular, recall that Proposition 4.28 required a bundle to be abstractly correct in order for it to be abstractable.
A strand space Σ satisfies layered-disjoint encryption iff it satisfies conditions (1)–(8) above.
Σ satisfies layer-disjoint encryption.
Unfortunately, TLS [11] does not satisfy the above condition. This is discussed further in Section 7.
We now briefly outline how these properties can be checked using static analysis on an appropriate protocol description. Assumption 5.10(1)–(4) and (8) all require various sets of encryptions to be disjoint. In most cases, the corresponding plaintexts are disjoint: this can be verified by inspection of the specifications of the formats of the plaintexts (e.g. XML formats). In other cases, it is necessary to prove that keys are disjoint: this follows immediately when the protocols generates the keys freshly; for long-term keys, it may be necessary to assume that such keys are not shared between protocols.
Assumption 5.10(7) could be easily verified given a symbolic definition of the regular agents that included details of where terms originate (i.e. which terms are fresh). Assumption 5.10(5) and Assumption 5.10(6) are assumptions on the penetrator’s initial knowledge and thus could be verified by considering a symbolic definition of
As discussed in the introduction to Section 5, there is nothing to prevent the penetrator from taking terms from the transport layer and moving them into the application layer. We term such penetrator paths crossing-paths and the corresponding terms crossing terms. Clearly, we cannot safely abstract such bundles as the transport-layer sections of such penetrator paths will not appear in the high-level bundle and therefore there is nowhere to obtain the crossing term.
Note that penetrator paths from the application layer to the transport layer (which could also be considered as crossing paths) are not prohibited. This is because such crossovers do not affect our ability to abstract the bundle as they affect transport-layer, rather than application-layer, behaviour. Further, as we assume that the bundle is abstractly correct, we are already assuming that the application-layer protocol does nothing to break the transport-layer protocol.
In this section we prove that we are able to remove crossing-paths from a bundle
Let
A bundle
The first clause in the above captures the case where the penetrator takes a term that originated within a transport-layer message, but not from within the application-layer content or enclosing the application-layer content, and then uses it in constructing the application-layer content of another message. The second clause captures the case where the penetrator takes a term obtained from a handshake node and uses it to construct the application-layer content of another message. Both of these take terms from a non-application-layer source and move it into the application layer, and are therefore crossing-paths.
In order to abstract our bundles we need to remove any crossing-paths, as such paths will not be abstractly-constructible. Our basic approach is to replace the crossing edge with a
Enlarging the strand space. When removing crossing-paths from a bundle we may need to add extra values to the penetrator’s initial knowledge. For instance, consider a bundle containing a crossing-path where the penetrator takes a handshake nonce and then uses it in an application-layer message. This bundle will be transformed to an equivalent bundle in which the crossing-path has been replaced by a
We now consider how to enlarge the set of public terms in such a way as to allow transformations like those discussed above. We do this by defining a new strand space, based on the existing strand space, that differs only in the penetrator’s initial knowledge (cf. Definition 2.9). Further, we restrict the penetrator’s behaviour so that the transport-layer behaviour is identical (but the application-layer behaviour is enlarged, as discussed above). Clearly, such a transformation has the potential to introduce false attacks against the application-layer protocol by giving the penetrator encryption keys that he could not otherwise obtain. However, we avoid doing this by only adding values that are not in
In order to define this transformation we firstly define a set that contains all terms that may appear at crossing points and may need transforming as above.
The set of transport extractable components, denoted
Recall that
Using the above it is now possible to define the enlarged strand space.
Let Σ be an abstractly correct low-level strand space. The enlarged strand space of Σ, denoted
This has some repercussions on application-layer proofs. In general, in order to prove the required application-layer result we will need an assumption on the terms in
For the remainder of this section we make exclusive use of the enlarged strand space,
Crossing path removal. Using the above, we can prove that crossing-paths can be removed.
Let
In this section we state that we can transform any bundle of Σ into an equivalent interference-free bundle of
Let
Recall that Proposition 4.28 required that each innocuous penetrator path in
Let
Using the above we are now able to prove our main proposition of this section as follows.
Let
The proof of Proposition 5.17 uses Proposition 5.14 to remove the crossing paths in the original bundle. Lemma 5.15 can then be applied multiple times to remove each of the non-interference-free nodes in the resulting bundle.
In this section we have proven that whenever there exists a low-level bundle in a strand space satisfying Definition 5.9, then there exists a related (cf. Definition 5.4) bundle that can be abstracted. This assumption can be checked statically and also allows us to understand more about the problem, e.g. where care should be taken to avoid key sharing.
Firstly, we defined the bundle relation ⊵, which formalises how a bundle is related to its abstractable version, before defining Assumption 5.10. In Section 5.3 we proved that any path on which the penetrator takes a values from the transport layer into the application layer is incidental. In Section 5.4 we then showed that Assumption 5.10 implies that all bundles can be transformed to a related bundle that is interference-free.
Given Definition 5.13, when proving the correctness of the application-layer protocol,
Abstracting correctness properties
In the previous sections we have proven that any low-level bundle can be transformed to an abstractable bundle. Further, the transformed bundle has the same application-layer behaviour as the original bundle. In this section we prove that whenever there is an attack against the low-level model, there must be an attack against the high-level model. This shows that the high-level strand spaces model is sound, in that if a proof of protocol correctness can be constructed in the high-level model, then there are no attacks against the low-level model.
In Section 6.1 we formalise a logic in which protocol-correctness properties can be expressed. In Section 6.2 and Section 6.3, we define two semantics for the logic, one for low-level bundles and another for high-level bundles. In Section 6.4, we consider how the values of the terms of the logic are related when interpreted in both a low-level bundle and a high-level bundle that abstracts it. We then prove that, for a large subclass of correctness properties, whenever an abstractable low-level bundle does not satisfy a correctness property, its high-level abstraction also does not. In Section 6.5, we show that the transformations applied in Section 5 preserve the correctness of bundle formulas. Then, we use Proposition 5.17 to prove that whenever a low-level bundle does not satisfy a correctness property, the bundle can be transformed to an abstractable bundle such that its abstraction does not satisfy the correctness property.
A logic of correctness properties
In this section we define a logic in which we can express correctness properties. We do not intend the logic to be a practical usable logic. Instead, the logic is merely a tool that we can use to show that results about protocols in the high-level model also apply to low-level models. In a sense, the logic is an assembly language for logics, rather than being inherently useful itself.
In order to define standard correctness properties, the logic needs to be able to specify properties such as:
A regular node precedes another node; A term (e.g. a password) is confidential or uniquely originating; A channel is confidential or authentic; Certain message components are equal; A node lies on a particular type of strand (e.g. on an
The logic that we will define allows all of the above to be expressed.
Note that the logic cannot express that a node must send a message directly to another node. The reason why we cannot express the latter is that it is, in general, rather complex. Defining what it means in a normal high-level bundle is not difficult; either the nodes must be connected using →, or there must be a
An informal explanation of the meaning of the terms of our correctness property logic
An informal explanation of the meaning of the terms of our correctness property logic
An informal explanation of the bundle formulas
We start by defining the terms in our logic, which we call logical terms. The informal meaning behind the terms of the logic is given in Table 1.
We assume the existence of a set of variables V and a set of constants C. The set of logical terms, denoted
Note that the structure of the terms is typed, meaning that the logic we define is actually a many-sorted logic. Further, the logic requires infinite sets as constants, most notably as sets of terms. For example, to specify that something is in the set of public terms, the set of public terms has to be explicitly encoded as an infinite constant set.
Using the definition of logical terms we are now able to define what a bundle formula is. The informal meaning of the formulas is given in Table 2.
The set of high-level bundle formulas is given by the following grammar:
We include a number of cases that could be removed by using logical equivalences (e.g.
We now consider how to define the semantics of the logic when applied to low and high-level bundles. We start by considering the case of the high-level semantics. In order to define this we assume the existence of a set of regular high-level strands,
The set of high-level logical term values in a high-level strand space If
Let
In the semantics of
Note
We now develop a semantics for high-level bundle formulas when applied to low-level bundles. As we aim to prove that the correctness of bundle formulas can be abstracted, we define the semantics of the logic in a way that is both intuitive and compatible with the high-level semantics.
To define a low-level semantics that corresponds to the high-level semantics we need to consider how to interpret
Let
We now consider how to define the semantics of high-level bundle formulas when applied to low-level bundles. We need to assume a few things about how the strand spaces are defined. Firstly, we assume that for each role
We also need to define what it means for a term t to be confidential in a low-level bundle, analogously to Definition 3.14. A term t is confidential in a low-level bundle The set of low-level logical term values in a low-level strand space Σ is given by:
Let
To prove that the low and high-level semantics of our logic correspond, we firstly consider the problem of relating terms of the logic. Firstly, we define a relation
Let x is a low-level strand, y is a high-level strand, x is a set of strands, y is a set of strands and there exists a bijection μ between x and y such that, for each pair
We lift the above definition to apply to logical term environments.
In order to prove compatibility we need to assume that the set of regular strands (i.e.
Let
Using the above we are now able to prove the required result.
Let t be a logical term
We now consider under what circumstances the ≼ relation between application-layer nodes is preserved between low and high-level bundles. Consider two nodes
Let
Using the above we are now able to state that bundle satisfaction is preserved by abstraction. In light of Lemma 6.10 we are only able to consider formulas where ≼ only occurs positively (i.e. within the scope of an even number of negations only). However, this is not a restriction in practice; all formulas that we want to express will take the form of an implication where ≼ will occur only on the right-hand side (i.e. as a conclusion), and thus will occur positively.
Let ϕ be a closed high-level bundle predicate in which ≼ occurs only positively
It is not necessarily the case that
We now consider how to combine the results of Proposition 5.17 and Proposition 6.11 to show that the high-level strand spaces model is sound. We prove that whenever a low-level bundle
Let ϕ be a closed high-level bundle formula in which ≼ occurs only positively
Lastly, we can state our main result that shows that a proof of protocol correctness in the high-level model is sound, in that it will consider all attacks that could have occurred in the low-level model.
Let ϕ be a closed high-level bundle predicate in which ≼ occurs only positively
Note that the above proposition requires the high-level strand space to abstract
High-level proofs. When proving the correctness of application-layer protocols in the high-level strand spaces model we will frequently only consider normal bundles, for ease. Further, recall that the high-level bundles produced as abstractions of low-level bundles in Proposition 4.28 contain
A high-level bundle
If
Let ϕ be a closed high-level bundle formula in which ≼ occurs only positively and let
Let
Thus, in all high-level strand spaces proofs we can, without loss of generality, consider only normal bundles.
In this section we have proven that the high-level strand spaces model is sound. In particular, we proved in Proposition 6.13 that, if a protocol has been proven to satisfy a given property in the high-level strand spaces model, then it also satisfies the same property in any corresponding low-level strand spaces model, assuming the transport protocols satisfy the relevant channel types. We also showed, in Proposition 6.17, that if a correctness property is satisfied by all high-level normal bundles then that it is satisfied by all high-level bundles. This is particularly useful since we often only consider normal bundles, for ease.
We began, in Section 6.1, by defining a logic of correctness properties. Then, in Section 6.2 and Section 6.3 we defined what it meant for high and low-level bundles to satisfy the correctness properties. In Section 6.4 we then proved that, given a high-level bundle that abstracts a low-level bundle, the value of any logical term in the low-level bundle is related, according to Definition 6.7, to its value in the high-level bundle. This was then used in Section 6.5 to prove that whenever a low-level bundle satisfies a correctness property, then the corresponding high-level bundle also satisfies the property.
TLS
As TLS [11] is the most widespread secure transport protocol, we need to ensure that our model allows application-layer protocols that use TLS to be analysed. TLS is really two separate protocols: bilateral TLS (denoted
Unfortunately, as we illustrate below, TLS does not satisfy Assumption 5.10 as it is possible for some encryptions to be shared between the two forms of TLS in a harmless way that is not allowed by Assumption 5.10. In particular, this violates Assumption 5.10(1), which requires that the sets of transport-layer message encryptions for the two protocols are disjoint.
In this section we describe how any low-level bundle that uses TLS can be transformed into a bundle of a strand space that does satisfy Assumption 5.10 and has the same application-layer behaviour.
TLS. Unilateral and bilateral TLS both have two stages. The first phase, called the handshake phase, involves the two participants exchanging data in order to derive a master key; this is then used in the second phase to protect the messages sent in the session. In the second phase, the identities of the sender and recipient of the message are not included in the message packaging. Thus, if the penetrator can somehow cause two sessions to use the same encryption keys then he will be able to pass messages between the two sessions without the other participants detecting it. If the two participants are regular agents then this is not possible [21]. However, if the penetrator is a legitimate participant in two different TLS sessions, one as the client and one as the server (i.e. both regular agents are aware they are communicating with the penetrator), he is able to manipulate the messages to cause this to occur.

A example of a session where the penetrator causes a unilateral TLS session between C and
The encryption keys used in the second phase are generated from a nonce
If one of the sessions is using unilateral TLS and the other is using bilateral TLS then
Transforming bundles. Whilst such behaviour contradicts our assumptions, it is clear that any bundle in which such behaviour occurs could be replaced by a bundle in which disjoint message encryption is satisfied by:
Making the penetrator generate fresh nonces, rather than passing the nonces directly between the sessions; then
replacing every path that crosses between the two sessions by a
The second step ensures that messages are no longer passed directly between the strands, whilst the first step ensures that the sessions will use disjoint keys and hence
Unfortunately, the low-level bundle that results from the above transformation is not equivalent to the original bundle, since the regular behaviour has changed as the keys used have been altered. However, the application-layer behaviour has not changed. We formalise the notion of equivalence as follows.
Two low-level bundles For all γ respects the regular strand structure on application-layer nodes, i.e. for all
In the above, the first clause ensure that the application-layer messages are identical. The second clause then ensures that none of the nodes have been re-ordered, as two regular strands will be related by this bijection iff every application-layer node is related by γ. Together, these ensure that, if two regular strands in two application-layer-equivalent bundles are related by γ, then the strands abstract to the same high-level strand.
As with standard bundle equivalence, application-layer equivalence does not preserve the correctness of application-layer correctness properties that include ≼ (cf. Definition 5.4). Thus, we introduce a relation
A low-level bundle For all regular application-layer nodes For all regular application-layer nodes
It is clear that the transformation that we described above will result in a bundle that is application-layer-equivalent to the original bundle. Thus, we can formalise the notion that any TLS bundle can be converted into an application-layer-equivalent bundle that satisfies our assumptions as follows.
Let Σ be a low-level strand space that satisfies layer-disjoint encryption
We believe the truth of the above claim is intuitively clear. A formal proof requires a full analysis of both forms of TLS, which is far beyond scope of this paper. [21] contains a suitable formalisation of bilateral TLS in the strand spaces model. This could be extended to a model of unilateral TLS, which would allow this claim to be formalised and proven.
The following proposition shows that whenever a property is proven correct in a high-level abstraction of the transformed TLS strand space, then it is also correct in the original strand space that did not satisfy Assumption 5.10.
Let Σ be a low-level strand space that satisfies layer-disjoint encryption
In this paper we have presented the high-level strand spaces model which models the guarantees provided by both unilateral and bilateral transport-layer protocols. Further, it supports transport-layer protocols that, like TLS, can group messages into sessions.
The main contribution of this paper is the soundness proof of the high-level strand spaces model. We have proven that, subject to certain statically checkable assumptions, whenever there exists a low-level bundle that does not satisfy a protocol correctness property, then there exists a high-level bundle that also does not satisfy the property. Thus, if a protocol can be proven correct at the high-level, then it is guaranteed to be correct at the low-level. We have also sketched how our results can be extended to prove that any bundle that contains a use of TLS can be transformed to an equivalent bundle that satisfies our assumptions.
The soundness result was proven by firstly, in Section 4, proving that all interference-free bundles can be abstracted. In Section 5 we proved that a bundle
Related work. As stated in Section 1, there are many other formalisms for verifying layered security protocols. [1,3,4,6,12] all provide ways of modelling application-layer protocols that are layered on secure transport-layer protocols, varying in exactly what types of secure transport protocols they support. However, none of these models have a formally proven and general soundness result that supports commonly used transport-layer protocols such as TLS: we consider this to be a strength of the high-level strand spaces model. On the other hand, the above techniques all allow for some form of automated analysis, whilst there is, at the present time, no tool support for the high-level strand spaces model. [14] does present some proof rules that dramatically simplifies the process of developing these proofs.
The LTL-based model that [3] proposes is similar to the model presented here, but does not include support for protocols that group messages into sessions, such as TLS, or for unilateral protocols. [12] models the protocol in CSP and supports both bilateral protocols and protocols that group messages into sessions, but does not support unilateral protocols. It also supports protocols that prevent messages from being reordered, which is not supported by the model presented in this paper: see [14] for a version that does support such protocols. [4] extends the inductive approach [24] and supports simple bilateral transport-layer protocols that do not group messages into sessions. [6] presents a formalism based on the pi-calculus that supports extremely strong channel definitions based on observational equivalence; as such these channels are likely to be difficult to implement in practice. [1] models the protocols using a variant of the join-calculus that supports very strong channel definitions that are difficult to implement in practice.
The most similar approach to verifying layered protocols by abstraction is that of Mödersheim and Viganò [22]. They define a model, the Ideal Channel Model (ICM), that abstracts away from how the channels are implemented. They then consider how to model the guarantees given by unilaterally authenticating transport-layer protocols (or secure pseudonymous channels). In their model they specify confidential, authentic and secure channels, which roughly correspond to
In [16] Groß and Mödersheim consider what they term vertical protocol composition, which corresponds to our notion of layering protocols. They develop a semantic condition that proves arbitrary composition of protocols introduces no new attacks. In one sense, this is more general than the result we prove since it permits arbitrary stacks of protocols to be composed, whereas we have only considered the two layer case. However, it only allows transport-layer protocols that establish two symmetric keys, one for protecting messages sent in each direction, meaning it is not a general result.
In [23] Mödersheim and Viganò also propose a statically checkable condition that allows for the composition of precisely two layers in a very similar way to the approach presented in this paper. However, their assumptions are more restrictive than ours, and prevent TLS from being used as a secure transport layer, as well as prohibiting a large class of application-layer protocols. For example, their Disjointness condition requires the disjointness of all non-atomic messages, whereas we only require certain encryptions to be disjoint. Also, their Disjointness of Concrete Payloads requires that distinct agents send disjoint payloads, which appears to prohibit messages from being forwarded by agents, as is commonplace. Additionally, they currently only consider transport-layer protocols where a single message is sent, although this is not likely to be a problem in practice.
Future work. One obvious enhancement to the high-level strand spaces model would be to allow protocols that consist of more than two layers to be modelled. For example, consider a simple transport-layer protocol that transmits a username and a password over a unilateral TLS connection, and then transmits application-layer messages. It would be desirable to prove that this implements a bilateral
In order to prove results about such protocols, it would be interesting to give some simple proof rules that detail how the security guarantees provided by different layers combine. Further, it would be useful to adapt the soundness proof of this paper to prove that any such analysis is sound. We expect that this particular case should be solvable by a sort of induction over the protocol in question, but the details need to be checked carefully. Whilst this problem has been considered in [22] before, no general proof rules were provided and a statically checkable soundness result is not available, as discussed above.
It would be useful to develop a tool that could check if the assumptions of Section 5.2 are satisfied. This could then automatically inform the user of potential implementations of their protocol that are guaranteed to be secure. We have developed a prototype tool that accomplishes some of this, but further work is required in order to enable the tool to automatically search for a proof.
Supplemental material
Online supplement consisting of Appendices is available at: https://dx-doi-org.web.bisu.edu.cn/10.3233/JCS-150526.
Footnotes
Acknowledgments
We would like to thank Michael Goldsmith, Joshua Guttman and Bill Roscoe for useful comments and discussions. We would also like to thank the anonymous reviews for their many helpful contributions that helped to improve the paper.
