<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>A Brief Tour of Formally Secure Compilation</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Matteo Busi</string-name>
          <email>matteo.busi@di.unipi.it</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Letterio Galletta</string-name>
          <email>letterio.galletta@imtlucca.it</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>IMT School for Advanced Studies</institution>
          ,
          <addr-line>Lucca</addr-line>
          ,
          <country country="IT">Italy</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Università di Pisa</institution>
          ,
          <addr-line>Pisa</addr-line>
          ,
          <country country="IT">Italy</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>ions and mechanisms (e.g. types, module, automatic memory management) that enforce good programming practices and are crucial when writing correct and secure code. However, the security guarantees provided by such abstractions are not preserved when a compiler translates a source program into object code. Formally secure compilation is an emerging research field concerned with the design and the implementation of compilers that preserve source-level security properties at the object level. This paper presents a short guided tour of the relevant literature on secure compilation. Our goal is to help newcomers to grasp the basic concepts of this field and, for this reason, we rephrase and present the most relevant results in the literature in a common setting.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>Compilers are one of the fundamental tools for software development. Not only
they translate a source program, written in a high-level language, into an object
code (low-level), but they also help programmers to catch a variety of errors, and
optimize the resulting program. A well-known advantage of using a high-level
language is that it usually provides a variety of abstractions and mechanisms
(e.g. types, modules, automatic memory management) that enforce good
programming practices and ease programmers in writing correct and secure code.</p>
      <p>
        However, those high-level abstractions do not always have counterparts at
the low-level. This discrepancy can be dangerous when the source level
abstractions are used to enforce security properties: if the target language does not
provide any mechanism to preserve such security properties, the resulting code
is vulnerable to attacks. Consider for example Fig. 1, where the code on the left
is written in a C-like language with no pointers, and the code on the right is
its translation into a RISC-like assembly (under the assumption that count is
stored in the register R0). In this case the programmer’s intention was to use the
encapsulation mechanism provided by the static qualifier to guarantee integrity
on the value stored in count. However, at the object level, the value is no longer
protected: any other object-level module linking our code as a library can read
from or write to the register R0. This toy example leverages the very same idea
as real-world, potentially dangerous attacks: both use object level mechanisms
to break high-level abstractions, thus making the reasoning at the source level
useless [
        <xref ref-type="bibr" rid="ref14">37,14</xref>
        ]. A possible solution to this problem would be to adapt the source
to the object language (or vice-versa) so to make them equally powerful, but
that is undesirable because, in doing that, we would lose all the advantages that
come from having different levels of abstraction in the source and in the object.
Moreover, it would not be even sufficient. Indeed, as recently observed by D’Silva
et al. [
        <xref ref-type="bibr" rid="ref23">23</xref>
        ] and previously known in the cybersecurity community [
        <xref ref-type="bibr" rid="ref1 ref2 ref3">1,2,3,42</xref>
        ], even
less radical, seemingly innocuous code transformations that maps a language into
itself (e.g. compiler optimizations) may hinder security. Consider for example the
snippet in Fig. 2 that checks the correctness of a given PIN number. A dead-store
elimination, i.e. a transformation that removes assignments to variables that are
not used afterwards, optimizes away the line highlighted in red. Unfortunately,
that assignment ensured the confidentiality of the value of pin, that now might
be accessed by any attacker able to read the memory of the program (e.g. an
untrusted operating system in which our optimized code is executed), so making
it possible to leak the secret.
      </p>
      <p>A way to solve both the above problems is to work on the compiler itself, by
guaranteeing that it preserves the source-level security properties. The emerging
field of formally secure compilation has exactly this goal. More precisely, secure
compilation is concerned with granting that the security properties at the source
level are preserved as they are into the object level or, equivalently, that all the
attacks that can be carried out at the object level can also be carried out at
the source level. In this way, it is enough to reason at the source level to rule
out attacks even at the object level. Of course, making program translations
secure in general would be a huge step forward for the security of software
systems, especially for those that are critical (e.g. avionics or medical software)
and possibly written in unsafe languages.</p>
      <p>Structure of the tour. The next section discusses non-robust secure compilation,
and briefly overviews its basic concepts and motivations, together with the recent
literature. Similarly, in Section 3 we discuss an extended notion of secure
compilation to deal with active attackers. Then, Section 4 reports common dynamic
mechanisms, complementary to secure compilation, for protecting programs
distatic int count = 0;
void count ()
{</p>
      <p>count++;
}
!
count:</p>
      <p>add R0, R0, 1
print("Pin:");
pin = read_secret();
if (check(pin))</p>
      <p>print("OK!");
else</p>
      <p>print("KO!");
pin = 0; // reset pin
rectly at the hardware level. In Section 5 we briefly discuss the open problems
and the challanges of the field. Finally, Section 6 concludes.</p>
      <p>Note that, from now onwards, we highlight in blue the elements of the source
language, and in red the elements of the object language for better readability.
2</p>
    </sec>
    <sec id="sec-2">
      <title>Secure Compilation</title>
      <p>In the previous section we informally introduced secure compilation, explaining
that it is concerned with guaranteeing that source level security properties are
preserved when compiling a program into a object language. In this section, we
specify more precisely what security preservation actually means.</p>
      <p>
        First, we need to clarify what kind of security policies we are interested in. To
do that, we introduce the concept of program behaviour, as the set of sequences of
actions/states that a program performs/reaches during its execution. Formally,
the behaviour of a program p – written p# – is a subset of the set of all the finite
and the infinite traces defined on a set of observables (or events). Typically,
observables encode information about I/O operations performed by a program,
errors occurred during executions, termination, or divergence [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ]. Intuitively,
a security policy predicates on the program behaviour and establishes which
traces are allowed and which not. There are (at least) two different proposals
on how to formalise security properties in the literature: trace properties [
        <xref ref-type="bibr" rid="ref10 ref25">25,10</xref>
        ]
and hyperproperties [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ].
      </p>
      <p>The first proposal defines a security policy as the set of permitted traces,
more precisely, a trace property is a subset of . In this case, we say that a
program p satisfies a trace property P whenever all the executions of p, i.e. p#,
are allowed by P , in symbols p# P . Two typical classes of trace properties
are safety (nothing bad will ever happen) and liveness (something good will
eventually happen).</p>
      <p>The commonly used chinese-wall policy is a safety property, stating that “a
system may write to the network as long as it did not read from a file” and it
takes the following form:</p>
      <p>j : 9i &lt; j : isFileRead (ti) ^ isNetworkWrite(tj )
where ti and tj are the observables at the steps i and j of the trace t, and
isFileRead and isNetworkWrite are predicates with the expected meaning.</p>
      <p>However, trace properties are not enough to express all the interesting
security policies. For example, termination insensitive non-interference requires
that the public part of the state is not affected by the non-public part, otherwise
some information of this last kind turns out to be disclosed. While this policy
is not a trace property, it can be expressed through a hyperproperty: compare
all pairs of traces the initial states of which coincide on their public part, and
verify that they reach the same final state, up to their public part.</p>
      <p>The needed additional expressive power comes from the ability of predicating
on multiple executions of the same program. Indeed, hyperproperties express
security policies as a set of program behaviours, i.e. a set of sets of traces. We
say that a program p satisfies a hyperproperty H }( ) whenever the whole
behaviour of p is an element of H, i.e. p# 2 H. We formalise the above
noninterference as follows:</p>
      <p>fT j 8 traces t; t0 2 T: t0 =public t00 ) tf =public t0f g
where t0; t00 and tf ; t0f are the initial and final states of t and t0, respectively, and
ti =public t0j holds if and only if the public part of the states ti and t0j coincides.</p>
      <p>For conciseness, we shall write p# F whenever p satisfies a given security
property F: when F is a trace property P , p# F reads as p# P , and when F
is a hyperproperty H, p# 2 H.</p>
      <p>We say that a compiler is secure whenever it preserves the properties of a
source program s under the translation steps. In other words, if s satisfies a given
family of properties F then also its compiled counterpart does:
Definition 1 (Secure compiler). A compiler J KSO from a source language S
to an object language O is secure for F iff for any source program s
8F 2 F: s#</p>
      <p>F ) JsKSO #</p>
      <p>F</p>
      <p>
        Consider first F to be the set of trace properties. In this case, for proving
a compiler secure it suffices proving that is correct, according to the following
definition that requires the source program to exhibit a trace when the object
code does:
Definition 2 (Compiler correctness [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ]). We say that a compiler J KSO is
correct iff for any source program s:
      </p>
      <p>t 2 s# ( t 2 JsKSO #</p>
      <p>
        Correctness is often proved by establishing a backward simulation (or
refinement) between the behaviours of source and object programs. Typically, this is
the case when S is an imperative language with some under-specified aspects
(e.g. the evaluation order of expressions) and O is an assembly-level language.
Other notions of compiler correctness, together with some discussion about their
suitability for different kind of languages and their relation with backward
simulation, are discussed in [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ].
      </p>
      <p>
        A correct compiler is also secure for trace properties:
Theorem 1 ([
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]). Every correct compiler preserves all the trace properties.
Actually, correctness also suffices in proving that a compiler preserves the
subsetclosed (SSC) hyperproperties, i.e. those hyperproperties H such that, for any
T 2 H and T 0 T , T 0 2 H (note that trace properties can be turned into SSC
hyperproperties) [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ].
      </p>
      <p>
        Theorem 2 ([
        <xref ref-type="bibr" rid="ref17">17</xref>
        ]). Every correct compiler preserves all and only the SSC
hyperproperties.
      </p>
      <p>
        Note that in Theorems 1 and 2 we made the implicit assumptions that the
observables we are considering for establishing the correctness are the same on
which our security property predicates. Consequently, the correctness proof is
monolithic in the sense that it has to deal with both the functional and the
nonfunctional properties, and therefore the observables should be rather complex,
along with the proof itself. In addition, this approach is not modular and does not
scale well when we want to prove the preservation of new security policies: the
correctness proof needs to be changed accordingly. Furthermore, it is not possible
to reuse off the shelf compilers already proved correct. Take for example
CompCert [
        <xref ref-type="bibr" rid="ref26">26</xref>
        ], a compiler for C that is proved correct assuming as observables I/O
operations (calls to library functions and load/store on those variables modelling
memory-mapped hardware devices). Proving that it preserves the above notion
of non-interference would require to observe also the values of public variables
and to re-do the proof. For these reasons, many papers in the literature adopt a
different approach advocating a neat separation of concerns between functional
and non-functional aspects, allowing for modular and incremental proofs. The
proof that a compiler preserves the security properties of interest is then done
assuming that it is correct, i.e. that it preserves the I/O semantics of programs.
      </p>
      <p>
        Below, we briefly discuss a couple of proposals that address the security
of program optimizations, assuming them correct w.r.t. I/O observables. Deng
and Namjohsi proved that (variants of) popular compiler optimizations preserve
the above property of non-interference [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ], and introduced in [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ] a technique
that statically enforces it in SSA-based optimization pipelines. In a framework
that generalises [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ], Barthe et al. [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] studied the cryptographic constant-time
policy, which is an instance of observational non-interference and requires that
the execution time of a program does not depend on non-public parts of the state.
The key ingredient of their proposal are (three variants of) CT-simulation, which
is a pair of simulations, one considering two source programs and the other the
corresponding two object programs.
      </p>
    </sec>
    <sec id="sec-3">
      <title>Robust Secure Compilation</title>
      <p>Secure compilation as presented in the previous section works well when we
consider monolithic programs that incorporate in their code all the
functionalities they require to operate. Actually, it is not fully adequate when we want
to preserve properties of programs whose external references cannot be solved
at compile time, e.g. because they rely on dynamically linked libraries. These
real-world situations require a sharper notion of security. Environments can be
conveniently abstracted as contexts C[ ], i.e. programs with a hole to be filled by
the program to be executed. When an environment is malicious, the context acts
as an attacker that can actively interact with the program at run-time, rather
than passively watching at its execution.</p>
      <p>
        To take into account active attackers and the external environment where the
program is plugged in, we resort to the notion of RHP (X) (§ 3.1 of [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]), where
X denotes a family of hyperproperties, to update the Definition 1 as follows:
Definition 3 (Robustly secure compiler). A compiler J KSO from a source
language S to an object language O is robustly secure for F iff for any source
program s
8F 2 F: (8CS [ ]: CS [s]#
      </p>
      <p>F) ) (8CO[ ]: CO[ JsKSO]#</p>
      <p>F)</p>
      <p>
        The seminal work of Abadi [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] proposed full abstraction as a framework to
assess this enhanced notion of compiler security. Indeed, a fully abstract
compiler preserves and reflects the equivalence of behaviours between original and
compiled programs under any untrusted context of execution. Equivalence of
behaviours is expressed as contextual equivalence, often defined as p ' p0 iff
8C[ ], C[p]# = C[p0]#. We now rephrase the definition of full abstraction (FA) in
our terms:
Definition 4 ([
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]). A compiler J KSO is fully abstract iff
      </p>
      <p>8s1; s2 2 S : s1 ' s2 , Js1KSO ' Js2KSO:</p>
      <p>
        However, FA has some limitations. The first, most serious drawback is that
real-world, off-the-shelf compilers seldom are FA. For example, neither the
standard compiler from Java to Bytecode [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ] nor the one from C# to CLR
language [
        <xref ref-type="bibr" rid="ref24">24</xref>
        ] are FA. The second shortcoming is that FA can be hard to prove
and even harder to disprove. Indeed, the compiler from System F to the
cryptographic -calculus [35] was conjectured to be FA, but it was proved not such only
20 years later [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ]. Also, enforcing FA requires to instrument the object code,
often making it inefficient [34]. Finally, there is no exact characterization of the
class of properties an FA compiler (robustly) preserves [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ]. Indeed, FA sometimes
does not preserve properties that secure compilation chains are expected to, as
shown by the following example [33].
      </p>
      <p>Example 1 (FA ; safety preservation). Consider the language S to be a simple
functional language with boolean values and just the constantly true function:
S 3 s ::= true j false j
_:true j s1 s2
Similarly, let O be an object language with booleans, integers and non-recursive
functions:</p>
      <p>O 3 o ::= true j false j n j x j</p>
      <p>x:o j o1 o2 j if o1 &lt; o2 then o3 else o4
An FA compiler follows, assuming the observables to be the values returned by
functions:</p>
      <sec id="sec-3-1">
        <title>JtrueKSO , true</title>
      </sec>
      <sec id="sec-3-2">
        <title>JfalseKSO , false</title>
        <p>Js1 s2KSO , Js1KSO Js2KSO
_:trueKSO ,</p>
        <p>x:if x &lt; 2 then true else false</p>
        <p>J
Actually, it is a trivial compiler except for the constantly true function that is
mapped to a function yielding true or false depending on its parameter.</p>
        <p>Consider now the (informal) safety property for S stating that “a function
never outputs false”, trivially satisfied by all the programs in S. However, object
programs can output false depending on x, the object-level input provided by
the context, hence invalidating the property.</p>
        <p>
          An extensive treatment of FA compilation is outside the scope of this paper and
we refer the interested reader to the survey by Patrignani et al. [
          <xref ref-type="bibr" rid="ref31">31</xref>
          ].
        </p>
        <p>To overcome the limitations of FA sketched above, new secure compilation
principles have been recently proposed. The first one was trace-preserving (TP)
compilation for reactive programs [33]. Informally, a compiler J KSO is TP if any
trace of the compiled program JsKSO is either a trace of s or is a special invalid
trace. Depending on how invalid traces are defined, TP compilation comes in
two flavours: halting and disregarding. The first one prescribes that invalid traces
must stutter after an invalid input; the second one defines invalid traces as those
that discard invalid inputs and corresponding outputs. Finally, TP compilers
preserve all the safety hyperproperties [33].</p>
        <p>
          There have been interests in the literature in studying tailored classes of
trace properties and hyperproperties, devising new principles for their
preservation. In particular, Abate et al. [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] carried out a systematic investigation in
search of hyperproperty-specific secure compilation principles that come in two
forms: the first one, property-full, explicitly mentions the family of properties
to be preserved, the second one, property-free, does not and fosters formal
reasoning. The underlying idea is that tailored principles may be helpful to make
proofs easier and to reduce the overhead in the generated code.
Concentrating on trace properties one finds: robust trace property preservation, where the
family of security properties F coincides with all the trace properties; robust
dense property preservation [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ] where F coincides with properties predicating on
all terminating traces; and robust safety property preservation and robustly safe
compilation [
          <xref ref-type="bibr" rid="ref6">6,34</xref>
          ], where F coincides with all the safety properties. Interestingly,
robustly safe compilation can be also extended to consider modularity and
undefined behaviours [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ]. As for hyperproperties, there are a series of principles that
we do not report here, e.g. those for relational hyperproperties –
hyperproperties that consider multiple runs of multiple systems at the same time. For the
sake of simplicity, here we present as an example the most general principle that
preserves all the hyperproperties, which is an instance of Definition 3.
Definition 5 (Robust hyperproperty preservation [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]). Let s be a source
program. The property-full variant of robust hyperproperty preservation holds
iff for any hyperproperty H
(8CS [ ]: CS [s]#
        </p>
        <p>H) ) (8CO[ ]: CO[ JsKSO]#</p>
        <p>H)
Its property-free variant holds iff</p>
        <p>
          The proposed principles are elegant and expressive, however, there are no
fully automatic provers available yet for establishing them. Some ongoing work [
          <xref ref-type="bibr" rid="ref15">15</xref>
          ]
is exploring the possibility of extending translation validation [
          <xref ref-type="bibr" rid="ref28">36,28</xref>
          ] to
automatically verify security properties. Intuitively, the idea is to prove in the style
of translation validation that a given run of the compiler succeeds in (robustly)
preserving a family of hyperproperties on a specific program, instead of proving
the compiler secure for all programs.
4
        </p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Low-level Enforcement Mechanisms</title>
      <p>In this section, we briefly survey some features of target languages and
lowlevel architectural mechanisms and tools that a designer can use to implement
a secure compiler.</p>
      <p>
        A first proposal was to use an object language with a rich typed structure
in order to preserve the type guarantees of the source language. An example
is typed assembly language (TAL) [
        <xref ref-type="bibr" rid="ref27">27</xref>
        ] that among others has existential types
to support closures and other data abstractions. It has been used as object
language of a type-preserving compiler for System F. Some researches addressed
the development of FA compilers targeting TAL [
        <xref ref-type="bibr" rid="ref8 ref9">8,9</xref>
        ], but we are not aware of
any that respects one of the robust secure compilation principles above.
      </p>
      <p>
        Other proposals consist of enriching the target architecture with low-level
mechanisms to enforce the security policies during program execution. Along
these lines there are capability machines (CM), special microprocessors
guaranteeing control-flow integrity and local-state encapsulation at the hardware
level [
        <xref ref-type="bibr" rid="ref16">16,38</xref>
        ]. CMs are based on memory capabilities, i.e. fat pointers that
include some access-control information, tagging registers and memory locations.
Besides memory capabilities, many machines also implement object capabilities,
i.e. sand-boxed executions that allow invoking a piece of code without exposing
its encapsulated state. Of course, memory and object capabilities neither prevent
vulnerabilities in software nor their exploitation, but they do provide strong
mitigation mechanisms. Indeed, their main goals are to reduce the attack surface
and, in case of successful exploitation, to avoid that attackers gain too many
rights over the compromised machine. Capability Hardware Enhanced RISC
Instructions (CHERI) [41] extends commodity RISC Instruction Set Architectures
(ISAs) with capability-based primitives and supports real-world operating
systems and applications. Recent research efforts have been devoted to formally
study the properties of this model and to securely compile C code to these
machines [
        <xref ref-type="bibr" rid="ref20">39,40,20</xref>
        ]. Similarly, protected module architectures (PMAs) bring some
security guarantees at the hardware level by splitting the memory into a
protected and an unprotected section in order isolate sensitive and critical
applications from the untrusted ones. The idea was further developed [
        <xref ref-type="bibr" rid="ref29 ref30 ref32 ref7">7,32,30,29</xref>
        ] and
also implemented in commodity processors by industry, e.g. Intel Secure Guard
eXtensions (Intel SGX).
      </p>
      <p>
        In this line of research a further proposal is the Sancus 2.0 [
        <xref ref-type="bibr" rid="ref29">29</xref>
        ] architecture,
implementing PMA features on a low-cost and embedded microprocessor.
Sancus achieves, without a trusted computing base, (i) software module isolation;
(ii) remote attestation; (iii) secure communication and linking; (iv) confidential
deployment; and (v) hardware breach confinement. For that, this architecture is
equipped with symmetric encryption, key management mechanisms and strictly
regulated protected sections (enclaves ) for software modules. Note that, even
though Sancus guarantees some security properties, research is still ongoing to
make these mechanisms more secure, e.g. against side-channel attacks [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ].
      </p>
      <p>
        Finally, other proposals attempt to develop new architectures to dynamically
enforce security policies. Among them, micro-tagged architectures [
        <xref ref-type="bibr" rid="ref11 ref12 ref22">22,12,11</xref>
        ]
enrich each assembly instruction by tagging it with a pointer to a (security) policy
to be checked at run-time.
5
      </p>
    </sec>
    <sec id="sec-5">
      <title>Open Challenges</title>
      <p>In the above sections, we reviewed some of the recent advances in secure
compilation and sketched some relevant formal techniques that can be currently used
to achieve it. Indeed, the field of secure compilation is still young, and there are
many open problems have not been tackled yet. This section briefly mentions
some of them and gives some hints about future research directions in the field.</p>
      <p>
        A first open problem is that of devising novel secure compilation principles.
Even though many principles have been recently added to the literature,
concerning both robust and non-robust secure compilation, there is still the need of
new secure compilation principles, possibly tailored to very specific
hyperproperties (e.g. variants of non-interference or protecting from side-channel attacks).
A key point is to make these new principles suitable to be (rather) easily proved
even for realistic compilers. For that they must be provable in a modular fashion,
e.g. in the style of [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] that assumes some notion of compiler correctness and
builds the security proof on that.
      </p>
      <p>This leads us to the second problem, i.e. that of developing proof and
verification techniques for secure compilers. On the one hand, it is particularly
important to develop novel proof techniques that help the designer of the
compiler in showing that her compiler is indeed secure. To be applicable in realistic
cases, these new proof techniques must not only be modular (as said above) but
also incremental, in the sense that proofs must require minimal adaptations as
compilers evolve. On the other hand, to foster the development of secure
compilers also for mainstream languages, new fully automatic, push-button verification
techniques should emerge. Indeed, the existence of such techniques, for example
along the lines of translation validation, may allow to bring secure compilation
also to real-world and fully fledged compilers.</p>
      <p>Bringing secure compilation into real-world compilers also poses the challenge
of separate compilation. The hurdle with separate compilation is that each
(malicious) component interacts with the others, built from different source languages
by different compilers (hence, with different security guarantees).</p>
      <p>Finally, from a theoretical viewpoint, a last open problem consists in
establishing the exact family of security properties that full abstraction preserves
and under which conditions. Actually, first steps in this direction (at least for
safety hyperproperties) were done by Patrignani and Garg [33], but it is not
clear yet under which conditions full abstraction may preserve other classes of
hyperproperties.
6</p>
    </sec>
    <sec id="sec-6">
      <title>Conclusions</title>
      <p>This brief tour of formally secure compilation highlighted recent advances in
secure compilation.</p>
      <p>We first reviewed what it is called non-robust secure compilation, that is a
simple notion of secure compilation taking into account passive attackers that
can just observe some of the actions performed by the programs, and its relation
with compiler correctness. Also, we rephrased well-known results in the
literature, so to make precise the claim that correct compilers may preserve security
properties and we summarised recent and relevant results that applies when
correct compilers do not preserve security properties.</p>
      <p>In the third section, we defined the notion of robust secure compilation by
extending the previous concept to cope with active attackers, i.e. contexts
(programs with a hole). After giving a short motivation on why the classical principle
of full abstraction might not be fully appropriate in some situations, we briefly
discussed emerging principles for robust secure compilation and we sketched
some ideas on how they can be statically enforced.</p>
      <p>Talking of enforcement in Section 4 we reported some mechanisms that allow
enforcing security properties directly at the low level, usually at run-time.</p>
      <p>Finally, we discussed open problems and known challenges in secure
compilation, especially concerning the need of new robust secure compilation principles,
(automatic) verification and proof techniques for real-world, off-the-shelf
compilers, and full abstraction guarantees.</p>
      <p>The picture that emerges is that secure compilation is an expanding and ever
growing research field sitting at the intersection of programming languages,
program verification and cybersecurity. Given that secure compilation is relatively
new and little-known, we hope that this shallow tour may help newcomers to
grasp the basics of the field and to navigate the existing literature on the topic.
33. Patrignani, M., Garg, D.: Secure compilation and hyperproperty preservation. In:
30th IEEE Computer Security Foundations Symposium, CSF 2017, Santa Barbara,
CA, USA, August 21-25, 2017. pp. 392–404. IEEE Computer Society (2017)
34. Patrignani, M., Garg, D.: Robustly safe compilation or, efficient, provably secure
compilation. CoRR abs/1804.00489 (2018)
35. Pierce, B., Sumii, E.: Relating Cryptography and Polymorphism (2000), http://
www.kb.ecei.tohoku.ac.jp/~sumii/pub/infohide.pdf
36. Pnueli, A., Siegel, M., Singerman, E.: Translation validation. In: Steffen, B. (ed.)
Tools and Algorithms for Construction and Analysis of Systems, 4th International
Conference, TACAS ’98, Lisbon, Portugal, March 28 - April 4, 1998, Proceedings.</p>
      <p>Lecture Notes in Computer Science, vol. 1384, pp. 151–166. Springer (1998)
37. Roemer, R., Buchanan, E., Shacham, H., Savage, S.: Return-oriented programming:
Systems, languages, and applications. ACM Trans. Inf. Syst. Secur. 15(1), 2:1–2:34
(2012)
38. Shapiro, J.S., Smith, J.M., Farber, D.J.: EROS: a fast capability system pp. 170–
185 (1999)
39. Skorstengaard, L., Devriese, D., Birkedal, L.: Reasoning about a machine with
local capabilities - provably safe stack and return pointer management. In: Ahmed,
A. (ed.) 27th European Symposium on Programming, ESOP 2018, Proceedings.</p>
      <p>Lecture Notes in Computer Science, vol. 10801, pp. 475–501. Springer (2018)
40. Tsampas, S., El-Korashy, A., Patrignani, M., Devriese, D., Garg, D., Piessens, F.:
Towards automatic compartmentalization of c programs on capability machines.</p>
      <p>In: Workshop on Foundations of Computer Security. pp. 1–14 (2017)
41. Watson, R.N.M., Woodruff, J., Neumann, P.G., Moore, S.W., Anderson, J.,
Chisnall, D., Dave, N.H., Davis, B., Gudka, K., Laurie, B., Murdoch, S.J., Norton, R.,
Roe, M., Son, S.D., Vadera, M.: CHERI: A hybrid capability-system architecture
for scalable software compartmentalization. In: 2015 IEEE Symposium on Security
and Privacy, SP 2015, San Jose, CA, USA, May 17-21, 2015. pp. 20–37 (2015)
42. Yang, Z., Johannesmeyer, B., Olesen, A.T., Lerner, S., Levchenko, K.: Dead store
elimination (still) considered harmful. In: 26th USENIX Security Symposium,
USENIX Security 2017, Vancouver, BC, Canada, August 16-18, 2017. pp. 1025–
1040 (2017)</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1. CVE-2009
          <article-title>-1897</article-title>
          . http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009
          <source>- 1897, accessed: 17 Nov 2018</source>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2. CWE-
          <volume>14</volume>
          . https://cwe.mitre.org/data/definitions/14.html,
          <source>accessed: 17 Nov 2018</source>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3. CWE-
          <volume>733</volume>
          . https://cwe.mitre.org/data/definitions/733.html,
          <source>accessed: 17 Nov 2018</source>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Abadi</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>Protection in programming-language translations</article-title>
          . In: Vitek,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Jensen</surname>
          </string-name>
          , C.D. (eds.) Secure Internet Programming,
          <source>Security Issues for Mobile and Distributed Objects. Lecture Notes in Computer Science</source>
          , vol.
          <volume>1603</volume>
          , pp.
          <fpage>19</fpage>
          -
          <lpage>34</lpage>
          . Springer (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Abate</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>de Amorim</surname>
            ,
            <given-names>A.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Blanco</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Evans</surname>
            ,
            <given-names>A.N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fachini</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hritcu</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Laurent</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pierce</surname>
            ,
            <given-names>B.C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stronati</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tolmach</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>When good components go bad: Formally secure compilation despite dynamic compromise</article-title>
          .
          <source>In: Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security, CCS</source>
          <year>2018</year>
          , Toronto, ON, Canada,
          <source>October 15-19</source>
          ,
          <year>2018</year>
          . pp.
          <fpage>1351</fpage>
          -
          <lpage>1368</lpage>
          (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Abate</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Blanco</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Garg</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hritcu</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Patrignani</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Thibault</surname>
          </string-name>
          , J.:
          <article-title>Journey beyond full abstraction: Exploring robust property preservation for secure compilation</article-title>
          . CoRR abs/
          <year>1807</year>
          .04603 (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Agten</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Strackx</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jacobs</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Piessens</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Secure compilation to modern processors</article-title>
          . In: Chong,
          <string-name>
            <surname>S</surname>
          </string-name>
          . (ed.)
          <source>25th IEEE Computer Security Foundations Symposium, CSF 2012</source>
          , Cambridge, MA, USA, June 25-27,
          <year>2012</year>
          . pp.
          <fpage>171</fpage>
          -
          <lpage>185</lpage>
          . IEEE Computer Society (
          <year>2012</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Ahmed</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Blume</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          :
          <article-title>Typed closure conversion preserves observational equivalence</article-title>
          .
          <source>In: Proceeding of the 13th ACM SIGPLAN international conference on Functional programming, ICFP</source>
          <year>2008</year>
          ,
          <article-title>Victoria</article-title>
          ,
          <string-name>
            <surname>BC</surname>
          </string-name>
          , Canada,
          <source>September 20-28</source>
          ,
          <year>2008</year>
          . pp.
          <fpage>157</fpage>
          -
          <lpage>168</lpage>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Ahmed</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Blume</surname>
            ,
            <given-names>M.:</given-names>
          </string-name>
          <article-title>An equivalence-preserving CPS translation via multilanguage semantics</article-title>
          .
          <source>In: Proceeding of the 16th ACM SIGPLAN international conference on Functional Programming</source>
          ,
          <string-name>
            <surname>ICFP</surname>
          </string-name>
          <year>2011</year>
          , Tokyo, Japan,
          <source>September 19-21</source>
          ,
          <year>2011</year>
          . pp.
          <fpage>431</fpage>
          -
          <lpage>444</lpage>
          (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Alpern</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schneider</surname>
            ,
            <given-names>F.B.</given-names>
          </string-name>
          :
          <article-title>Defining liveness</article-title>
          .
          <source>Inf. Process. Lett</source>
          .
          <volume>21</volume>
          (
          <issue>4</issue>
          ),
          <fpage>181</fpage>
          -
          <lpage>185</lpage>
          (
          <year>1985</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>de Amorim</surname>
            ,
            <given-names>A.A.</given-names>
          </string-name>
          , Collins,
          <string-name>
            <given-names>N.</given-names>
            ,
            <surname>DeHon</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            ,
            <surname>Demange</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            ,
            <surname>Hritcu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            ,
            <surname>Pichardie</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            ,
            <surname>Pierce</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.C.</given-names>
            ,
            <surname>Pollack</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            ,
            <surname>Tolmach</surname>
          </string-name>
          ,
          <string-name>
            <surname>A.</surname>
          </string-name>
          :
          <article-title>A verified information-flow architecture</article-title>
          .
          <source>Journal of Computer Security</source>
          <volume>24</volume>
          (
          <issue>6</issue>
          ),
          <fpage>689</fpage>
          -
          <lpage>734</lpage>
          (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>de Amorim</surname>
            ,
            <given-names>A.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dénès</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Giannarakis</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hritcu</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pierce</surname>
            ,
            <given-names>B.C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>SpectorZabusky</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Tolmach</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Micro-policies: Formally verified, tag-based security monitors</article-title>
          .
          <source>In: 2015 IEEE Symposium on Security and Privacy</source>
          ,
          <string-name>
            <surname>SP</surname>
          </string-name>
          <year>2015</year>
          , San Jose, CA, USA, May
          <volume>17</volume>
          -21,
          <year>2015</year>
          . pp.
          <fpage>813</fpage>
          -
          <lpage>830</lpage>
          . IEEE Computer Society (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Barthe</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Grégoire</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Laporte</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          :
          <article-title>Secure compilation of side-channel countermeasures: The case of cryptographic "constant-time"</article-title>
          .
          <source>In: 31st IEEE Computer Security Foundations Symposium, CSF 2018</source>
          , Oxford,
          <source>United Kingdom, July</source>
          <volume>9</volume>
          -
          <issue>12</issue>
          ,
          <year>2018</year>
          . pp.
          <fpage>328</fpage>
          -
          <lpage>343</lpage>
          (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Bulck</surname>
            ,
            <given-names>J.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Piessens</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Strackx</surname>
          </string-name>
          , R.: Nemesis:
          <article-title>Studying microarchitectural timing leaks in rudimentary cpu interrupt logic</article-title>
          .
          <source>In: CCS '18: 2018 ACM SIGSAC Conference on Computer &amp; Communications Security</source>
          , Oct.
          <volume>15</volume>
          -
          <fpage>19</fpage>
          ,
          <year>2018</year>
          , Toronto, ON, Canada. ACM, New York, NY, USA (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Busi</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Degano</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Galletta</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          :
          <article-title>Translation Validation for Security Properties</article-title>
          . CoRR abs/
          <year>1901</year>
          .05082 (
          <year>2019</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16.
          <string-name>
            <surname>Carter</surname>
            ,
            <given-names>N.P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Keckler</surname>
            ,
            <given-names>S.W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Dally</surname>
          </string-name>
          , W.J.:
          <article-title>Hardware support for fast capabilitybased addressing</article-title>
          .
          <source>SIGPLAN Not</source>
          .
          <volume>29</volume>
          (
          <issue>11</issue>
          ),
          <fpage>319</fpage>
          -
          <lpage>327</lpage>
          (
          <year>Nov 1994</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          17.
          <string-name>
            <surname>Clarkson</surname>
            ,
            <given-names>M.R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Schneider</surname>
            ,
            <given-names>F.B.</given-names>
          </string-name>
          : Hyperproperties.
          <source>Journal of Computer Security</source>
          <volume>18</volume>
          (
          <issue>6</issue>
          ),
          <fpage>1157</fpage>
          -
          <lpage>1210</lpage>
          (
          <year>2010</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18.
          <string-name>
            <surname>Deng</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Namjoshi</surname>
            ,
            <given-names>K.S.</given-names>
          </string-name>
          :
          <article-title>Securing a compiler transformation</article-title>
          . In: Rival,
          <string-name>
            <surname>X</surname>
          </string-name>
          . (ed.)
          <source>Static Analysis - 23rd International Symposium, SAS</source>
          <year>2016</year>
          ,
          <article-title>Edinburgh</article-title>
          , UK, September 8-
          <issue>10</issue>
          ,
          <year>2016</year>
          ,
          <source>Proceedings. Lecture Notes in Computer Science</source>
          , vol.
          <volume>9837</volume>
          , pp.
          <fpage>170</fpage>
          -
          <lpage>188</lpage>
          . Springer (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>Deng</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Namjoshi</surname>
            ,
            <given-names>K.S.:</given-names>
          </string-name>
          <article-title>Securing the SSA transform</article-title>
          . In: Ranzato,
          <string-name>
            <surname>F</surname>
          </string-name>
          . (ed.)
          <source>Static Analysis - 24th International Symposium, SAS</source>
          <year>2017</year>
          , New York, NY, USA,
          <source>August 30 - September 1</source>
          ,
          <year>2017</year>
          ,
          <source>Proceedings. Lecture Notes in Computer Science</source>
          , vol.
          <volume>10422</volume>
          , pp.
          <fpage>88</fpage>
          -
          <lpage>105</lpage>
          . Springer (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20.
          <string-name>
            <surname>Devriese</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Birkedal</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Piessens</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Reasoning about object capabilities with logical relations and effect parametricity</article-title>
          .
          <source>In: IEEE European Symposium on Security and Privacy</source>
          , EuroS&amp;P. pp.
          <fpage>147</fpage>
          -
          <lpage>162</lpage>
          . IEEE (
          <year>2016</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <string-name>
            <surname>Devriese</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Patrignani</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Piessens</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Parametricity versus the universal type</article-title>
          .
          <source>PACMPL 2(POPL)</source>
          ,
          <volume>38</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>38</lpage>
          :
          <fpage>23</fpage>
          (
          <year>2018</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22.
          <string-name>
            <surname>Dhawan</surname>
            ,
            <given-names>U.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hritcu</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Rubin</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vasilakis</surname>
            ,
            <given-names>N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chiricescu</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Smith</surname>
            ,
            <given-names>J.M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jr.</surname>
            ,
            <given-names>T.F.K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pierce</surname>
            ,
            <given-names>B.C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>DeHon</surname>
          </string-name>
          , A.:
          <article-title>Architectural support for software-defined metadata processing</article-title>
          .
          <source>In: Proceedings of the Twentieth International Conference on Architectural Support for Programming Languages and Operating Systems</source>
          , ASPLOS '
          <fpage>15</fpage>
          , Istanbul, Turkey, March
          <volume>14</volume>
          -18,
          <year>2015</year>
          . pp.
          <fpage>487</fpage>
          -
          <lpage>502</lpage>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23.
          <string-name>
            <surname>D'Silva</surname>
            ,
            <given-names>V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Payer</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Song</surname>
            ,
            <given-names>D.X.:</given-names>
          </string-name>
          <article-title>The correctness-security gap in compiler optimization</article-title>
          .
          <source>In: 2015 IEEE Symposium on Security and Privacy Workshops</source>
          ,
          <string-name>
            <surname>SPW</surname>
          </string-name>
          <year>2015</year>
          , San Jose, CA, USA, May
          <volume>21</volume>
          -22,
          <year>2015</year>
          . pp.
          <fpage>73</fpage>
          -
          <lpage>87</lpage>
          . IEEE Computer Society (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <surname>Kennedy</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Securing the .NET programming model</article-title>
          .
          <source>Theor. Comput. Sci</source>
          .
          <volume>364</volume>
          (
          <issue>3</issue>
          ),
          <fpage>311</fpage>
          -
          <lpage>317</lpage>
          (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref25">
        <mixed-citation>
          25.
          <string-name>
            <surname>Lamport</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          :
          <article-title>Proving the correctness of multiprocess programs</article-title>
          .
          <source>IEEE Trans. Software Eng</source>
          .
          <volume>3</volume>
          (
          <issue>2</issue>
          ),
          <fpage>125</fpage>
          -
          <lpage>143</lpage>
          (
          <year>1977</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref26">
        <mixed-citation>
          26.
          <string-name>
            <surname>Leroy</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          :
          <article-title>Formal certification of a compiler back-end or: programming a compiler with a proof assistant</article-title>
          .
          <source>In: Proceedings of the 33rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, POPL</source>
          <year>2006</year>
          , Charleston, South Carolina, USA, January
          <volume>11</volume>
          -
          <issue>13</issue>
          ,
          <year>2006</year>
          . pp.
          <fpage>42</fpage>
          -
          <lpage>54</lpage>
          (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref27">
        <mixed-citation>
          27.
          <string-name>
            <surname>Morrisett</surname>
            ,
            <given-names>J.G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Walker</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Crary</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Glew</surname>
          </string-name>
          , N.:
          <article-title>From system F to typed assembly language</article-title>
          .
          <source>ACM Trans. Program. Lang. Syst</source>
          .
          <volume>21</volume>
          (
          <issue>3</issue>
          ),
          <fpage>527</fpage>
          -
          <lpage>568</lpage>
          (
          <year>1999</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref28">
        <mixed-citation>
          28.
          <string-name>
            <surname>Necula</surname>
            ,
            <given-names>G.C.</given-names>
          </string-name>
          :
          <article-title>Translation validation for an optimizing compiler</article-title>
          . In: Lam, M.S. (ed.)
          <source>Proceedings of the 2000 ACM SIGPLAN Conference on Programming Language Design and Implementation</source>
          (PLDI), Vancouver, Britith Columbia, Canada, June 18-21,
          <year>2000</year>
          . pp.
          <fpage>83</fpage>
          -
          <lpage>94</lpage>
          . ACM (
          <year>2000</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref29">
        <mixed-citation>
          29.
          <string-name>
            <surname>Noorman</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bulck</surname>
            ,
            <given-names>J.V.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mühlberg</surname>
            ,
            <given-names>J.T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Piessens</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Maene</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Preneel</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Verbauwhede</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Götzfried</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Müller</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Freiling</surname>
            ,
            <given-names>F.C.</given-names>
          </string-name>
          :
          <article-title>Sancus 2.0: A low-cost security architecture for iot devices</article-title>
          .
          <source>ACM Trans. Priv. Secur</source>
          .
          <volume>20</volume>
          (
          <issue>3</issue>
          ), 7:
          <fpage>1</fpage>
          -
          <lpage>7</lpage>
          :
          <fpage>33</fpage>
          (
          <year>2017</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref30">
        <mixed-citation>
          30.
          <string-name>
            <surname>Patrignani</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Agten</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Strackx</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Jacobs</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Clarke</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Piessens</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          :
          <article-title>Secure compilation to protected module architectures</article-title>
          .
          <source>ACM Trans. Program. Lang. Syst</source>
          .
          <volume>37</volume>
          (
          <issue>2</issue>
          ), 6:
          <fpage>1</fpage>
          -
          <lpage>6</lpage>
          :
          <fpage>50</fpage>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref31">
        <mixed-citation>
          31.
          <string-name>
            <surname>Patrignani</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ahmed</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Clarke</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Formal approaches to secure compilation: A survey of fully abstract compilation and related work</article-title>
          .
          <source>ACM Computing Surveys</source>
          (
          <year>2019</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref32">
        <mixed-citation>
          32.
          <string-name>
            <surname>Patrignani</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Clarke</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Fully abstract trace semantics for protected module architectures</article-title>
          .
          <source>Computer Languages, Systems &amp; Structures</source>
          <volume>42</volume>
          ,
          <fpage>22</fpage>
          -
          <lpage>45</lpage>
          (
          <year>2015</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>