Traditionally, cryptographic algorithms and protocols are geared towards protecting against attacks that interact with the designed algorithms via well specified interfaces (such as I/O and communication). However, the increasingly sophisticated ways in which computing devices are currently used completely shatter the traditional boundaries between the attacker and the "private internals" of the cryptographic algorithm under attack. Algorithms are run over small and exposed machines that leak information on their internal state; they are transported to other, potentially adversarial machines which may inspect all the internal state and also misreport the result; their code is exposed and subject to adversarial tinkering.
This project is aimed at developing new algorithmic and analytical techniques for dealing with this new reality. This includes cryptographic algorithms and protocols that are resilient to leakage from and tampering with the internal states of the host machines, program obfuscation techniques, and techniques for verifying computation done on untrusted machines. A basic premise of this project is that new analytical techniques, that no longer treat the adversary as black-box, are essential. Consequently, special effort is dedicated to developing such techniques.
The project tackles a set of problems that are central to the security of modern computer systems and consequently also to the well-being and stability of modern society. But even disregarding practical applicability, the tackled problems lie at the heart of our understanding of the notion of computation, the interplay between code and data, and the ability to algorithmically "understand" arbitrary code.