Bertrand Anckaert
Diversity for Software Protection
Introducing artificial diversity between versions of a piece of
software has a number of applications. Firtly, multiple versions of
the software may be distributed over time or to different users. The
difference between these versions may consist of critial information
that shouldn't be leaked. Consider the example of a user-specific key
in DRM applications. Another example can be found in software updates:
the difference between the patched and unpatched version may inform an
attacker on how to exploit vulnerabilities in systems that haven't
been patched yet. In these cases, we can introduce additional,
artificial diversity to hide the true differences. Secondly,
diversity may be used to mitigate class attacks, if every user has a
different version, or different versions are distributed over time, an
exploit against one version may not work against another version. We
will also look at the other side of the spectrum: at techniques to
match related fragments between different versions. These techniques
are often the first step against artificial diversity.
|
|
Jan Cappaert
Self-encrypting Code to Protect against Analysis and Tampering
Confidentiality and data authenticity are two basic concepts in
security. The first guarantees secrecy of a message, while the latter
protects its integrity. We propose a technique based on self-encrypting
code to protect software against static analysis and tampering attacks.
We will present the concept of code encryption, which offers
confidentiality, and a method to create code dependencies that
implicitly protects integrity of the code.
|
|
Claudio Orlandi
Introduction to Secure Multiparty Computation techniques
Defined during the '80s by Yao, Secure Multiparty Computation is the
scenario where a set of users wants to compute a function of their
inputs, without disclosing them. General solutions exist for the 2 or
n participants case, and they will be introduced during this talk.
|
|
Mariano Ceccato
Distributed Trust Verification
The remote trust problem aims to address the problem of verifying the
execution of a program running on an untrusted host which communicates
regularly with a trusted server. One proposed solution to this
problem uses a centralized scheme using assertions and replication to
withhold usable services from tampered client. We show how to extend
such a scheme to a distributed trusted hardware such as
tamper-resistant smartcards. We compared the performance and security
of proposed distributed system to the original centralized scheme on a
case study. Our results indicate that compared to a centralized
scheme, our distributed trust scheme has dramatically lower network
traffic, and smaller memory and computational requirements on the
server.
|
|
Haya Shulman
White-Box Remote Procedure Call
We investigate "software hardening", for secure execution on an
untrusted server, as required for many applications. The common
approach to such problems is to use an obfuscator. We present White
Box Remote Procedure Call (WBRPC), an alternative definition of
hardening mechanism, and argue that it may provide a better fit for
important applications, including grid computing, software agents,
private databases and more. We define several security specifications
for WBRPC, protecting client (sending request to the untrusted server)
and server, and addressing both confidentiality (indistinguishability)
and integrity (unforgeability). Barak et al. showed, that some
programs cannot be obfuscated. We believe there is reason to hope
that, in contrast, all programs can be white-boxed. Specifically, we
present a "universal WBRPC"; namely, if there is an obfuscator (or
WBRPC) for the universal WBRPC, then there is a WBRPC for all
programs. Finally, we present a combiner, with input two candidate
WBRPC implementations W1, W2, and output a third candidate W3 = W1 o
W2. We show that this combier is robust for WBRPC, namely, W3 is
secure as long as either W1 or W2 is secure.
|
|
Bart van Rijnsoever
White box cryptography and secure storage
White Box Cryptography is a technique for hiding a cryptographic key
in the software implementation of a cryptographic algorithm. The
presentation shows how White Box Cryptography can be used to create
secure storage. Applications are for example secure smart card storage
and protection of intellectual property in embedded devices.
|
|
Brecht Wyseur
Remote attestation on legacy operating systems with trusted platform modules
A lot of progress has been made to secure network communication, e.g.,
through the use of cryptographic algorithms. However, this offers only
a partial solution as long as the communicating end points still
suffer from security problems. A number of applications require remote
verification of software executing on an untrusted platform. Trusted
computing solutions propose to solve this problem through software and
hardware changes, typically a secure operating system and the addition
of a secure coprocessor respectively. On the other hand, timed
execution of code checksum calculations aims for a solution on legacy
platforms, but can not provide strong security assurance. We present a
mixed solution by using the trusted computing hardware, namely the
time stamping functionality of the trusted platform module, in
combination with a timing based remote code integrity verification
mechanism. In this way, we do not require a secure operating system,
but at the same time the overall security of the timed execution
scheme can be improved.
|
|
Dennis Hofheinz
Obfuscation from a cryptographic perspective
We survey the topic of obfuscating programs from a cryptographic
perspective. In a nutshell, obfuscating a program means transforming
the program code such that it still provides the desired
functionality, but in a way that hides the way how functionality is
achieved. Besides the obvious practical application of protecting
software know-how against reverse engineering, this concept has also
important theoretic applications.
We start off with Barak et al.'s celebrated result that obfuscating
programs is impossible for arbitrary classes of programs. We then give
an overview over the program classes which are currently known to
allow for an obfuscation. The mentioned results are achieved with
respect to different definitions of obfuscation, so we will also go
into technical difficulties and proposed solutions to defining
obfuscation in the first place.
|
|