Home
People
Research
Publications
Projects
Events
Software
Seminar






Address
Project Everest
INRIA Sophia-Antipolis
2004, Route des Lucioles
BP 93
06902 Sophia-Antipolis


EVEREST

Verification and Security of Software



The Everest project concentrates on increasing reliability and security of mobile and embedded software. This is achieved by developing and applying formal methods and language-based techniques, covering both platform and application level.
The project's privileged application domain ranges from trusted personal devices, such as mobile phones and smart cards, to ubiquitous computing.

The project focuses on the following research themes:

  • Program verification and Proof Carrying Code
  • Machine-checked semantics and algorithms
  • Foundations of proof assistants

Program verification and Proof Carrying Code


To ensure safety and security of software we study different verification techniques, notably program logics and type systems. We focus on particular paradigms for mobile code security, in particular Proof Carrying Code.

Current topics of interest include:

  • Information flow type systems: we develop information flow type systems for the Java Virtual Machine, and establish type-preserving compilation results between our type system and information flow type systems for Java source code programs.
  • Security by logic: we devise methods that use program logics to enforce security policies such as non-interference, resource control, or high-level security rules found in industrial security policies. Further, we also study compositional verification techniques.
  • Certificate translation: we provide means to bring the benefits of source code verification to code consumers, via certificate translators that transform certificates (as in Proof Carrying Code) of source code programs into certificates of byte code programs. Our certificate translators apply to non-optimizing compilers as well as to compilers that perform standard program optimizations.
  • Verification of multi-threaded programs: specification languages and program logics are extended to multi-threading. We pay particular attention to techniques that allow to simplify reasoning, preferably by reducing it to sequential verification problems. As a first point of interest we study immutable objects, thread-local objects and atomicity properties.
  • JACK (Java Applet Correctness Kit), an environment for the verification of annotated Java programs. The programs are written in either source code or byte code, their annotations are written using JML or its byte code equivalent, as developed within the Everest project.
  • Verification of system components.
This work is partly done in the context of the European Projects MOBIUS and Inspired and of the ACI Securite projects  GECCOO and SPOPS.

Machine-checked semantics and algorithms

We use proof assistants to model and verify programming language semantics and cryptographic algorithms.

Current topics of interest include:
  • Machine checked type systems and static analyses. We develop certified static analyses for the Java Card platform; in order to facilitate our work, we also develop the Jakarta toolset, that provides automatic tool support for large parts of the verification task.
  • Verification of cryptographic algorithms. We develop machine checked formalisations of provable security to show the security of cryptographic schemes. In particular, we use the Generic Model and Random Oracle Model to prove security bounds for cryptosystems based on the discrete logarithm.
Part of this work is done in the context of the RNTL project Castles.

Earlier work includes the formalization of the JavaCard platform, and of the GlobalPlatform specifications. We also participated in a collaborative effort to verify a moderately optimizing compiler for C--.

Foundations of proof assistants

We study means to improve the usability and robustness of proof assistants, both from a theoretical perspective and from an implementation point of view.

Current topics of interest include:
  • type-based termination, an approach that advocates the use of size types to guarantee termination of recursive definitions;
  • reflective tactics;
  • efficient convertibility checking.
Part of this work is done in the context of the Thematic Network Types.