Andrew D. Gordon 0001

dblp:g/AndrewDGordon · also Andrew Donald Gordon 0001, Andy Gordon 0001 · DBLP profile ↗
← Back
103ranked-venue papers
25as first author
10since 2021 · last 2025
0000-0002-5809-2484ORCID · verified

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 46 · 11 first-author · 2 since 2021Theory of computation · 27 · 11 first-authorSecurity and privacy · 21 · 4 first-authorHuman-computer interaction and ubiquitous computing · 9 · 7 since 2021Artificial intelligence and machine learning · 2Systems, architecture and hardware · 2 · 1 first-authorDatabases, data management, data science and information retrieval · 1 · 1 since 2021
YearPublicationVenuePosition
2025 Requirements Are All You Need: The Final Frontier for End-User Software Engineering
abstract
What if end-users could own the software development lifecycle from conception to deployment using only requirements expressed in language, images, video or audio? We explore this idea, building on the capabilities that Generative AI brings to software generation and maintenance techniques. How could designing software in this way better serve end-users? What are the implications of this process for the future of end-user software engineering and the software development lifecycle? We discuss the research needed to bridge the gap between where we are today and these imagined systems of the future.
Diana Robinson, Christian Cabrera 0001, Andrew D. Gordon 0001, Neil D. Lawrence, Lars Mennen
ACM Trans. Softw. Eng. Methodol.3
2023 "What It Wants Me To Say": Bridging the Abstraction Gap Between End-User Programmers and Code-Generating Large Language Models
abstract
Code-generating large language models map natural language to code. However, only a small portion of the infinite space of naturalistic utterances is effective at guiding code generation. For non-expert end-user programmers, learning this is the challenge of abstraction matching. We examine this challenge in the specific context of data analysis in spreadsheets, in a system that maps the user’s natural language query to Python code using the Codex generator, executes the code, and shows the result. We propose grounded abstraction matching, which bridges the abstraction gap by translating the code back into a systematic and predictable naturalistic utterance. In a between-subjects, think-aloud study (n=24), we compare grounded abstraction matching to an ungrounded alternative based on previously established query framing principles. We find that the grounded approach improves end-users’ understanding of the scope and capabilities of the code-generating model, and the kind of language needed to use it effectively.
Michael Xieyang Liu, Advait Sarkar, Carina Negreanu, Benjamin G. Zorn, Jack Williams 0001, Neil Toronto, Andrew D. Gordon 0001
CHI7
2023 FxD: a functional debugger for dysfunctional spreadsheets
abstract
Recent enhancements to the spreadsheet formula language and intelligent spreadsheet interfaces allow spreadsheet users to build more complex spreadsheets in systematic ways (e.g., via functional abstractions). However, users have been slow to adopt such features, partly due to the absence of corresponding improvements in tools such as editors and debuggers. In this paper, we present FxD, a novel spreadsheet debugging interface, which provides structured information needed for spreadsheet users to debug formulas in systematic ways through affordances such as the ability to step into the execution of dependencies and provide contextual information to users based on the current context. An in-vitro, within-subject (n=12) experiment revealed that, even though using FxD did not lead to faster debugging, participants reported qualitative improvements (e.g., feelings of efficiency and capability) when debugging with it. Further, participants were more satisfied with the amount of information provided by FxD and felt that it would enhance their existing debugging workflows. Our results have implications for the design of debuggers for spreadsheets and for functional programming languages in general.
Ian Drosos, Nicholas C. Wilson, Andrew D. Gordon 0001, Sruti Srinivasa Ragavan, Jack Williams 0001
VL/HCC3
2023 COLDECO: An End User Spreadsheet Inspection Tool for AI-Generated Code
abstract
Code-generating large language models (LLMs) are transforming programming. Their capability to generate multi-step solutions provides even non-programmers a mechanism to harness the power of coding. Non-programmers often use spreadsheets to manage tabular data, as they offer an intuitive understanding of data manipulation and formula out-comes. Considering that LLMs can generate complex, potentially incorrect code, our focus is on enabling user trust in the accuracy of LLM-generated code. We present ColDeco, the first end-user inspection tool for comprehending code produced by LLMs for tabular data tasks. ColDeco integrates two new features for inspection with a grid-based interface. First, users can decompose a generated solution into intermediate helper columns to understand how the problem is solved step by step. Second, users can interact with a filtered table of summary rows, which highlight interesting cases in the program. We evaluate our tool using a within-subjects user study (n=24) where participants are asked to verify the correctness of programs generated by an LLM. We found that while all features are independently useful, participants preferred them in combination. Users especially noted the usefulness of helper columns, but wanted more transparency in how summary rows are generated to assist with understanding and trusting them. Users also highlighted the application of ColDeco in collaborative settings for explaining and understanding existing formulas.
Kasra Ferdowsifard, Jack Williams 0001, Ian Drosos, Andrew D. Gordon 0001, Carina Negreanu, Nadia Polikarpova, Advait Sarkar, Benjamin G. Zorn
VL/HCC4
2022 GridBook: Natural Language Formulas for the Spreadsheet Grid
abstract
Writing formulas on the spreadsheet grid is arguably the most widely practiced form of programming. Still, studies highlight the difficulties experienced by end-user programmers when learning and using traditional formulas, especially for slightly complex tasks. The purpose of GridBook is to ease these difficulties by supporting formulas expressed in natural language within the grid; it is the first system to do so.
Sruti Srinivasa Ragavan, Zhitao Hou, Yun Wang 0012, Andrew D. Gordon 0001, Dongmei Zhang 0001
IUI4
2022 End-user encounters with lambda abstraction in spreadsheets: Apollo's bow or Achilles' heel?
abstract
The value of computational abstractions to non-expert end-user programmers is contentious. We study reactions to the lambda function in Microsoft Excel, which enables users to define their own functions using the spreadsheet formula language, through a thematic analysis of nearly 2,700 comments posted on the Reddit, Hacker News, YouTube, and Microsoft Tech Community online forums. We find that computational abstractions are viewed both as helpful and harmful, that users encounter learning and understanding barriers to applying them, and that there are deficiencies and opportunities in tooling such as in formula editing, versioning, reuse and sharing. We find that the introduction of lambda prompts new debate around whether spreadsheets are code, whether writing formulas can be considered programming, and whether spreadsheet users identify themselves as programmers.
Advait Sarkar, Sruti Srinivasa Ragavan, Jack Williams 0001, Andrew D. Gordon 0001
VL/HCC4
2022 Conditional Independence by Typing
abstract
A central goal of probabilistic programming languages (PPLs) is to separate modelling from inference. However, this goal is hard to achieve in practice. Users are often forced to re-write their models to improve efficiency of inference or meet restrictions imposed by the PPL. Conditional independence (CI) relationships among parameters are a crucial aspect of probabilistic models that capture a qualitative summary of the specified model and can facilitate more efficient inference. We present an information flow type system for probabilistic programming that captures conditional independence (CI) relationships and show that, for a well-typed program in our system, the distribution it implements is guaranteed to have certain CI-relationships. Further, by using type inference, we can statically deduce which CI-properties are present in a specified model. As a practical application, we consider the problem of how to perform inference on models with mixed discrete and continuous parameters. Inference on such models is challenging in many existing PPLs, but can be improved through a workaround, where the discrete parameters are used implicitly , at the expense of manual model re-writing. We present a source-to-source semantics-preserving transformation, which uses our CI-type system to automate this workaround by eliminating the discrete parameters from a probabilistic program. The resulting program can be seen as a hybrid inference algorithm on the original program, where continuous parameters can be drawn using efficient gradient-based inference methods, while the discrete parameters are inferred using variable elimination. We implement our CI-type system and its example application in SlicStan: a compositional variant of Stan. 1
Maria I. Gorinova 0001, Andrew D. Gordon 0001, Charles Sutton, Matthijs Vákár
ACM Trans. Program. Lang. Syst.2
2022 LinkingPark: An automatic semantic table interpretation system
Shuang Chen 0003, Alperen Karaoglu, Carina Negreanu, Jin-Ge Yao, Jack Williams 0001, Feng Jiang 0001, Andrew D. Gordon 0001, Chin-Yew Lin
J. Web Semant.8
2021 Spreadsheet Comprehension: Guesswork, Giving Up and Going Back to the Author
abstract
Spreadsheet users routinely read, and misread, others' spreadsheets, but literature offers only a high-level understanding of users’ comprehension behaviors. This limits our ability to support millions of users in spreadsheet comprehension activities. Therefore, we conducted a think-aloud study of 15 spreadsheet users who read others’ spreadsheets as part of their work. With qualitative coding of participants’ comprehension needs, strategies and difficulties at 20-second granularity, our study provides the most detailed understanding of spreadsheet comprehension to date.
Sruti Srinivasa Ragavan, Advait Sarkar, Andrew D. Gordon 0001
CHI3
2021 Where-Provenance for Bidirectional Editing in Spreadsheets
abstract
We explore the idea of adding bidirectionality to spreadsheet formulas, so that editing the output can directly affect the input. We introduce portals: a portal is a value paired with its where-provenance, that is, one or more links to its origin. When a portal is the result of a formula in a cell, that cell inherits the capability to edit the locations described by the provenance of the portal. The simplicity of portals makes them amenable to implementation in an existing spreadsheet system. We analyse the list of functions provided by a widely-used commercial spreadsheet system and find that many frequently used functions work with portals with no modification.
Jack Williams 0001, Andrew D. Gordon 0001
VL/HCC2
2020 Higher-Order Spreadsheets with Spilled Arrays
abstract
Abstract We develop a theory for two recently-proposed spreadsheet mechanisms: gridlets allow for abstraction and reuse in spreadsheets, and build on spilled arrays, where an array value spills out of one cell into nearby cells. We present the first formal calculus of spreadsheets with spilled arrays. Since spilled arrays may collide, the semantics of spilling is an iterative process to determine which arrays spill successfully and which do not. Our first theorem is that this process converges deterministically. To model gridlets, we propose the grid calculus, a higher-order extension of our calculus of spilled arrays with primitives to treat spreadsheets as values. We define a semantics of gridlets as formulas in the grid calculus. Our second theorem shows the correctness of a remarkably direct encoding of the Abadi and Cardelli object calculus into the grid calculus. This result is the first rigorous analogy between spreadsheets and objects; it substantiates the intuition that gridlets are an object-oriented counterpart to functional programming extensions to spreadsheets, such as sheet-defined functions.
Jack Williams 0001, Nima Joharizadeh, Andrew D. Gordon 0001, Advait Sarkar
ESOP3
2020 Understanding and Inferring Units in Spreadsheets
abstract
The following topics are dealt with: computer science education; programming; software tools; computer aided instruction; software engineering; interactive systems; learning (artificial intelligence); data analysis; text analysis; groupware.
Jack Williams 0001, Carina Negreanu, Andrew D. Gordon 0001, Advait Sarkar
VL/HCC3
2020 Elastic sheet-defined functions: Generalising spreadsheet functions to variable-size input arrays
abstract
Abstract Sheet-defined functions (SDFs) bring modularity and abstraction to the world of spreadsheets. Alas, end users naturally write SDFs that work over fixed-size arrays, which limits their reusability. To help end user programmers write more reusable SDFs, we describe a principled approach to generalising such functions to become elastic SDFs that work over inputs of arbitrary size. We prove that under natural, checkable conditions, our algorithm returns the principal generalisation of an input SDF. We describe a formal semantics and several efficient implementation strategies for elastic SDFs. A user study with spreadsheet users compares the human experience of programming with elastic SDFs to the alternative of relying on array-processing combinators. Our user study finds that the cognitive load of elastic SDFs is lower than for SDFs with map/reduce array combinators, the closest alternative solution.
Matt McCutchen, Judith W. Borghouts, Andrew D. Gordon 0001, Simon L. Peyton Jones, Advait Sarkar
J. Funct. Program.3
2019 Probabilistic programming with densities in SlicStan: efficient, flexible, and deterministic
abstract
Stan is a probabilistic programming language that has been increasingly used for real-world scalable projects. However, to make practical inference possible, the language sacrifices some of its usability by adopting a block syntax, which lacks compositionality and flexible user-defined functions. Moreover, the semantics of the language has been mainly given in terms of intuition about implementation, and has not been formalised. This paper provides a formal treatment of the Stan language, and introduces the probabilistic programming language SlicStan --- a compositional, self-optimising version of Stan. Our main contributions are (1) the formalisation of a core subset of Stan through an operational density-based semantics; (2) the design and semantics of the Stan-like language SlicStan, which facilities better code reuse and abstraction through its compositional syntax, more flexible functions, and information-flow type system; and (3) a formal, semantic-preserving procedure for translating SlicStan to Stan.
Maria I. Gorinova 0001, Andrew D. Gordon 0001, Charles Sutton
Proc. ACM Program. Lang.2
2018 Calculation View: multiple-representation editing in spreadsheets
abstract
Spreadsheet errors are ubiquitous and costly, an unfortunate combination that is well-reported. A large class of these errors can be attributed to the inability to clearly see the underlying computational structure, as well as poor support for abstraction (encapsulation, re-use, etc). In this paper we propose a novel solution: a multiple-representation spreadsheet containing additional representations that allow abstract operations, without altering the conventional grid representation or its formula syntax. Through a user study, we demonstrate that the use of multiple representations can significantly improve user performance when performing spreadsheet authoring and debugging tasks. We close with a discussion of design implications and outline future directions for this line of inquiry.
Advait Sarkar, Andrew D. Gordon 0001, Simon L. Peyton Jones, Neil Toronto
VL/HCC2
2017 Deriving Probability Density Functions from Probabilistic Functional Programs
abstract
The probability density function of a probability distribution is a fundamental concept in probability theory and a key ingredient in various widely used machine learning methods. However, the necessary framework for compiling probabilistic functional programs to density functions has only recently been developed. In this work, we present a density compiler for a probabilistic language with failure and both discrete and continuous distributions, and provide a proof of its soundness. The compiler greatly reduces the development effort of domain experts, which we demonstrate by solving inference problems from various scientific applications, such as modelling the global carbon cycle, using a standard Markov chain Monte Carlo framework.
Sooraj Bhat, Johannes Borgström, Andrew D. Gordon 0001, Claudio V. Russo
Log. Methods Comput. Sci.3
2016 Differentially Private Bayesian Programming
abstract
We present PrivInfer, an expressive framework for writing and verifying differentially private Bayesian machine learning algorithms. Programs in PrivInfer are written in a rich functional probabilistic programming language with constructs for performing Bayesian inference. Then, differential privacy of programs is established using a relational refinement type system, in which refinements on probability types are indexed by a metric on distributions. Our framework leverages recent developments in Bayesian inference, probabilistic programming languages, and in relational refinement types. We demonstrate the expressiveness of PrivInfer by verifying privacy for several examples of private Bayesian inference.
Gilles Barthe, Gian Pietro Farina, Marco Gaboardi, Emilio Jesús Gallego Arias, Andrew D. Gordon 0001, Justin Hsu, Pierre-Yves Strub
CCS5
2016 A lambda-calculus foundation for universal probabilistic programming
abstract
We develop the operational semantics of an untyped probabilistic λ-calculus with continuous distributions, and both hard and soft constraints,as a foundation for universal probabilistic programming languages such as Church, Anglican, and Venture. Our first contribution is to adapt the classic operational semantics of λ-calculus to a continuous setting via creating a measure space on terms and defining step-indexed approximations. We prove equivalence of big-step and small-step formulations of this distribution-based semantics. To move closer to inference techniques, we also define the sampling-based semantics of a term as a function from a trace of random samples to a value. We show that the distribution induced by integration over the space of traces equals the distribution-based semantics. Our second contribution is to formalize the implementation technique of trace Markov chain Monte Carlo (MCMC) for our calculus and to show its correctness. A key step is defining sufficient conditions for the distribution induced by trace MCMC to converge to the distribution-based semantics. To the best of our knowledge, this is the first rigorous correctness proof for trace MCMC for a higher-order functional language, or for a language with soft constraints.
Johannes Borgström, Ugo Dal Lago, Andrew D. Gordon 0001, Marcin Szymczak 0002
ICFP3
2016 On Robust Malware Classifiers by Verifying Unwanted Behaviours
Wei Chen 0023, David Aspinall 0001, Andrew D. Gordon 0001, Charles Sutton, Igor Muttik
IFM3
2016 Fabular: regression formulas as probabilistic programming
abstract
Regression formulas are a domain-specific language adopted by several R packages for describing an important and useful class of statistical models: hierarchical linear regressions. Formulas are succinct, expressive, and clearly popular, so are they a useful addition to probabilistic programming languages? And what do they mean? We propose a core calculus of hierarchical linear regression, in which regression coefficients are themselves defined by nested regressions (unlike in R). We explain how our calculus captures the essence of the formula DSL found in R. We describe the design and implementation of Fabular, a version of the Tabular schema-driven probabilistic programming language, enriched with formulas based on our regression calculus. To the best of our knowledge, this is the first formal description of the core ideas of R's formula notation, the first development of a calculus of regression formulas, and the first demonstration of the benefits of composing regression formulas and latent variables in a probabilistic programming language.
Johannes Borgström, Andrew D. Gordon 0001, Long Ouyang, Claudio V. Russo, Adam Scibior, Marcin Szymczak 0002
POPL2
2016 More Semantics More Robust: Improving Android Malware Classifiers
abstract
Automatic malware classifiers often perform badly on the detection of new malware, i.e., their robustness is poor. We study the machine-learning-based mobile malware classifiers and reveal one reason: the input features used by these classifiers can't capture general behavioural patterns of malware instances. We extract the best-performing syntax-based features like permissions and API calls, and some semantics-based features like happen-befores and unwanted behaviours, and train classifiers using popular supervised and semi-supervised learning methods. By comparing their classification performance on industrial datasets collected across several years, we demonstrate that using semantics-based features can dramatically improve robustness of malware classifiers.
Wei Chen 0023, David Aspinall 0001, Andrew D. Gordon 0001, Charles Sutton, Igor Muttik
WISEC3
2015 Probabilistic Programs as Spreadsheet Queries
Andrew D. Gordon 0001, Claudio V. Russo, Marcin Szymczak 0002, Johannes Borgström, Nicolas Rolland, Thore Graepel, Daniel Tarlow
ESOP1
2015 Practical probabilistic programming with monads
abstract
The machine learning community has recently shown a lot of interest in practical probabilistic programming systems that target the problem of Bayesian inference. Such systems come in different forms, but they all express probabilistic models as computational processes using syntax resembling programming languages. In the functional programming community monads are known to offer a convenient and elegant abstraction for programming with probability distributions, but their use is often limited to very simple inference problems. We show that it is possible to use the monad abstraction to construct probabilistic models for machine learning, while still offering good performance of inference in challenging models. We use a GADT as an underlying representation of a probability distribution and apply Sequential Monte Carlo-based methods to achieve efficient inference. We define a formal semantics via measure theory. We demonstrate a clean and elegant implementation that achieves performance comparable with Anglican, a state-of-the-art probabilistic programming system.
Adam Scibior, Zoubin Ghahramani, Andrew D. Gordon 0001
Haskell3
2015 Bimodal Modelling of Source Code and Natural Language
abstract
We consider the problem of building probabilistic models that jointly model short natural language utterances and source code snippets. The aim is to bring together recent work on statistical modelling of source code and work on bimodal models of images and natural language. The resulting models are useful for a variety of tasks that involve natural language and source code. We demonstrate their performance on two retrieval tasks: retrieving source code snippets given a natural language query, and retrieving natural language descriptions given a source code query (i.e., source code captioning). The experiments show there to be promise in this direction, and that modelling the structure of source code is helpful towards the retrieval tasks.
Miltiadis Allamanis, Daniel Tarlow, Andrew D. Gordon 0001
ICML3
2014 Tabular: a schema-driven probabilistic programming language
abstract
We propose a new kind of probabilistic programming language for machine learning. We write programs simply by annotating existing relational schemas with probabilistic model expressions. We describe a detailed design of our language, Tabular, complete with formal semantics and type system. A rich series of examples illustrates the expressiveness of Tabular. We report an implementation, and show evidence of the succinctness of our notation relative to current best practice. Finally, we describe and verify a transformation of Tabular schemas so as to predict missing values in a concrete database. The ability to query for missing values provides a uniform interface to a wide variety of tasks, including classification, clustering, recommendation, and ranking.
Andrew D. Gordon 0001, Thore Graepel, Nicolas Rolland, Claudio V. Russo, Johannes Borgström, John Guiver
POPL1
2014 Guiding a general-purpose C verifier to prove cryptographic protocols
abstract
We describe how to verify security properties of C code for cryptographic protocols by using a general-purpose verifier. We prove security theorems in the symbolic model of cryptography. Our techniques include: use of ghost state to attach formal algebraic terms to concrete byte arrays and to detec t collisions when two distinct terms map to the same byte array; decoration of a crypto API with contracts based on symbolic terms; and expression of the attacker model in terms of C programs. We rely on the general-purpose verifier VCC; we guide VCC to prove security simply by writing suitable header files and annotations in implementation files, rather than by changing VCC itself. We formalize the symbolic model in Coq in order to justify the addition of axioms to VCC.
François Dupressoir, Andrew D. Gordon 0001, Jan Jürjens, David A. Naumann
J. Comput. Secur.2
2013 A model-learner pattern for bayesian reasoning
abstract
A Bayesian model is based on a pair of probability distributions, known as the prior and sampling distributions. A wide range of fundamental machine learning tasks, including regression, classification, clustering, and many others, can all be seen as Bayesian models. We propose a new probabilistic programming abstraction, a typed Bayesian model, which is based on a pair of probabilistic expressions for the prior and sampling distributions. A sampler for a model is an algorithm to compute synthetic data from its sampling distribution, while a learner for a model is an algorithm for probabilistic inference on the model. Models, samplers, and learners form a generic programming pattern for model-based inference. They support the uniform expression of common tasks including model testing, and generic compositions such as mixture models, evidence-based model averaging, and mixtures of experts. A formal semantics supports reasoning about model equivalence and implementation correctness. By developing a series of examples and three learner implementations based on exact inference, factor graphs, and Markov chain Monte Carlo, we demonstrate the broad applicability of this new programming pattern.
Andrew D. Gordon 0001, Mihhail Aizatulin, Johannes Borgström, Guillaume Claret, Thore Graepel, Aditya V. Nori, Sriram K. Rajamani, Claudio V. Russo
POPL1
2013 Bayesian inference using data flow analysis
abstract
We present a new algorithm for Bayesian inference over probabilistic programs, based on data flow analysis techniques from the program analysis community. Unlike existing techniques for Bayesian inference on probabilistic programs, our data flow analysis algorithm is able to perform inference directly on probabilistic programs with loops. Even for loop-free programs, we show that data flow analysis offers better precision and better performance benefits over existing techniques. We also describe heuristics that are crucial for our inference to scale, and present an empirical evaluation of our algorithm over a range of benchmarks.
Guillaume Claret, Sriram K. Rajamani, Aditya V. Nori, Andrew D. Gordon 0001, Johannes Borgström
ESEC/SIGSOFT FSE4
2013 Deriving Probability Density Functions from Probabilistic Functional Programs
Sooraj Bhat, Johannes Borgström, Andrew D. Gordon 0001, Claudio V. Russo
TACAS3
2012 Computational verification of C protocol implementations by symbolic execution
abstract
We verify cryptographic protocols coded in C for correspondence properties with respect to the computational model of cryptography. The first step uses symbolic execution to extract a process calculus model from a C implementation of the protocol. The new contribution is the second step in which we translate the extracted model to a CryptoVerif protocol description, such that successful verification with CryptoVerif implies the security of the original C implementation. We implement our method and apply it to verify several protocols out of reach of previous work in the symbolic model (using ProVerif), either due to the use of XOR and Diffie-Hellman commitments, or due to the lack of an appropriate computational soundness result. We analyse only a single execution path, so our tool is limited to code following a fixed protocol narration. This is the first security analysis of C code to target a verifier for the computational model. We successfully verify over 3000 LOC. One example (about 1000 LOC) is independently written and currently in testing phase for industrial deployment; during its analysis we uncovered a vulnerability now fixed by its author.
Mihhail Aizatulin, Andrew D. Gordon 0001, Jan Jürjens
CCS2
2012 A Declarative Approach to Automated Configuration
John A. Hewson, Paul Anderson 0003, Andrew D. Gordon 0001
LISA3
2012 Semantic subtyping with an SMT solver
abstract
Abstract We study a first-order functional language with the novel combination of the ideas of refinement type (the subset of a type to satisfy a Boolean expression) and type-test (a Boolean expression testing whether a value belongs to a type). Our core calculus can express a rich variety of typing idioms; for example, intersection, union, negation, singleton, nullable, variant, and algebraic types are all derivable. We formulate a semantics in which expressions denote terms, and types are interpreted as first-order logic formulas. Subtyping is defined as valid implication between the semantics of types. The formulas are interpreted in a specific model that we axiomatize using standard first-order theories. On this basis, we present a novel type-checking algorithm able to eliminate many dynamic tests and to detect many errors statically. The key idea is to rely on a Satisfiability Modulo Theories solver to compute subtyping efficiently. Moreover, using a satisfiability modulo theories solver allows us to show the uniqueness of normal forms for non-deterministic expressions, provide precise counterexamples when type-checking fails, detect empty types, and compute instances of types statically and at run-time.
Gavin M. Bierman, Andrew D. Gordon 0001, Catalin Hritcu, David E. Langworthy
J. Funct. Program.2
2011 Extracting and verifying cryptographic models from C protocol code by symbolic execution
abstract
Consider the problem of verifying security properties of a cryptographic protocol coded in C. We propose an automatic solution that needs neither a pre-existing protocol description nor manual annotation of source code. First, symbolically execute the C program to obtain symbolic descriptions for the network messages sent by the protocol. Second, apply algebraic rewriting to obtain a process calculus description. Third, run an existing protocol analyser (ProVerif) to prove security properties or find attacks. We formalise our algorithm and appeal to existing results for ProVerif to establish computational soundness under suitable circumstances. We analyse only a single execution path, so our results are limited to protocols with no significant branching. The results in this paper provide the first computationally sound verification of weak secrecy and authentication for (single execution paths of) C code.
Mihhail Aizatulin, Andrew D. Gordon 0001, Jan Jürjens
CCS2
2011 Guiding a General-Purpose C Verifier to Prove Cryptographic Protocols
abstract
We describe how to verify security properties of C code for cryptographic protocols by using a general-purpose verifier. We prove security theorems in the symbolic model of cryptography. Our techniques include: use of ghost state to attach formal algebraic terms to concrete byte arrays and to detect collisions when two distinct terms map to the same byte array, decoration of a crypto API with contracts based on symbolic terms, and expression of the attacker model in terms of C programs. We rely on the general-purpose verifier VCC, we guide VCC to prove security simply by writing suitable header files and annotations in implementation files, rather than by changing VCC itself. We formalize the symbolic model in Coq in order to justify the addition of axioms to VCC.
François Dupressoir, Andrew D. Gordon 0001, Jan Jürjens, David A. Naumann
CSF2
2011 Maintaining Database Integrity with Refinement Types
Ioannis G. Baltopoulos, Johannes Borgström, Andrew D. Gordon 0001
ECOOP3
2011 Measure Transformer Semantics for Bayesian Machine Learning
Johannes Borgström, Andrew D. Gordon 0001, Michael Greenberg 0002, James Margetson, Jurgen Van Gael
ESOP2
2011 Robin Milner 1934--2010: verification, languages, and concurrency
abstract
No abstract available.
Andrew D. Gordon 0001, Robert Harper 0001, John Harrison 0001, Alan Jeffrey, Peter Sewell
POPL1
2011 Roles, stacks, histories: A triple for Hoare
abstract
Abstract Behavioral type and effect systems regulate properties such as adherence to object and communication protocols, dynamic security policies, avoidance of race conditions, and many others. Typically, each system is based on some specific syntax of constraints, and is checked with an ad hoc solver. Instead, we advocate types refined with first-order logic formulas as a basis for behavioral type systems, and general purpose automated theorem provers as an effective means of checking programs. To illustrate this approach, we define a triple of security-related type systems: for role-based access control, for stack inspection, and for history-based access control. The three are all instances of a refined state monad. Our semantics allows a precise comparison of the similarities and differences of these mechanisms. In our examples, the benefit of behavioral type-checking is to rule out the possibility of unexpected security exceptions, a common problem with code-based access control.
Johannes Borgström, Andrew D. Gordon 0001, Riccardo Pucella
J. Funct. Program.2
2011 Refinement types for secure implementations
abstract
We present the design and implementation of a typechecker for verifying security properties of the source code of cryptographic protocols and access control mechanisms. The underlying type theory is a λ-calculus equipped with refinement types for expressing pre- and post-conditions within first-order logic. We derive formal cryptographic primitives and represent active adversaries within the type theory. Well-typed programs enjoy assertion-based security properties, with respect to a realistic threat model including key compromise. The implementation amounts to an enhanced typechecker for the general-purpose functional language F # ; typechecking generates verification conditions that are passed to an SMT solver. We describe a series of checked examples. This is the first tool to verify authentication properties of cryptographic protocols by typechecking their source code.
Jesper Bengtson, Karthikeyan Bhargavan, Cédric Fournet, Andrew D. Gordon 0001, Sergio Maffeis
ACM Trans. Program. Lang. Syst.4
2010 Semantic subtyping with an SMT solver
abstract
We study a first-order functional language with the novel combination of the ideas of refinement type (the subset of a type to satisfy a Boolean expression) and type-test (a Boolean expression testing whether a value belongs to a type). Our core calculus can express a rich variety of typing idioms; for example, intersection, union, negation, singleton, nullable, variant, and algebraic types are all derivable. We formulate a semantics in which expressions denote terms, and types are interpreted as first-order logic formulas. Subtyping is defined as valid implication between the semantics of types. The formulas are interpreted in a specific model that we axiomatize using standard first-order theories. On this basis, we present a novel type-checking algorithm able to eliminate many dynamic tests and to detect many errors statically. The key idea is to rely on an SMT solver to compute subtyping efficiently. Moreover, interpreting types as formulas allows us to call the SMT solver at run-time to compute instances of types.
Gavin M. Bierman, Andrew D. Gordon 0001, Catalin Hritcu, David E. Langworthy
ICFP2
2010 Modular verification of security protocol code by typing
abstract
We propose a method for verifying the security of protocol implementations. Our method is based on declaring and enforcing invariants on the usage of cryptography. We develop cryptographic libraries that embed a logic model of their cryptographic structures and that specify preconditions and postconditions on their functions so as to maintain their invariants. We present a theory to justify the soundness of modular code verification via our method.
Karthikeyan Bhargavan, Cédric Fournet, Andrew D. Gordon 0001
POPL3
2010 SecPAL: Design and semantics of a decentralized authorization language
abstract
We present a declarative authorization language. Policies and credentials are expressed using predicates defined by logical clauses, in the style of constraint logic programming. Access requests are mapped to logical authorization queries, consisting of predicates and constraints combined by conjun ctions, disjunctions, and negations. Access is granted if the query succeeds against the current database of clauses. Predicates ascribe rights to particular principals, with flexible support for delegation and revocation. At the discretion of the delegator, delegated rights can be further delegated, either to a fixed depth, or arbitrarily deeply. Our language strikes a careful balance between syntactic and semantic simplicity, policy expressiveness, and execution efficiency. The syntax is close to natural language, and the semantics consists of just three deduction rules. The language can express many common policy idioms using constraints, controlled delegation, recursive predicates, and negated queries. We describe an execution strategy based on translation to Datalog with Constraints, and table-based resolution. We show that this execution strategy is sound, complete, and always terminates, despite recursion and negation, as long as simple syntactic conditions are met.
Moritz Y. Becker, Cédric Fournet, Andrew D. Gordon 0001
J. Comput. Secur.3
2009 A compositional theory for STM Haskell
abstract
We address the problem of reasoning about Haskell programs that use Software Transactional Memory (STM). As a motivating example, we consider Haskell code for a concurrent non-deterministic tree rewriting algorithm implementing the operational semantics of the ambient calculus. The core of our theory is a uniform model, in the spirit of process calculi, of the run-time state of multi-threaded STM Haskell programs. The model was designed to simplify both local and compositional reasoning about STM programs. A single reduction relation captures both pure functional computations and also effectful computations in the STM and I/O monads. We state and prove liveness, soundness, completeness, safety, and termination properties relating source processes and their Haskell implementation. Our proof exploits various ideas from concurrency theory, such as the bisimulation technique, but in the setting of a widely used programming language rather than an abstract process calculus. Additionally, we develop an equational theory for reasoning about STM Haskell programs, and establish for the first time equations conjectured by the designers of STM Haskell. We conclude that using a pure functional language extended with STM facilitates reasoning about concurrent implementation code.
Johannes Borgström, Karthikeyan Bhargavan, Andrew D. Gordon 0001
Haskell3
2008 Verified implementations of the information card federated identity-management protocol
abstract
We describe reference implementations for selected configurations of the user authentication protocol defined by the Information Card Profile V1.0. Our code can interoperate with existing implementations of the roles of the protocol (client, identity provider, and relying party). We derive formal proofs of security properties for our code using an automated theorem prover. Hence, we obtain the most substantial examples of verified implementations of cryptographic protocols to date, and the first for any federated identity-management protocols. Moreover, we present a tool that downloads security policies from services and identity providers and compiles them to a verifiably secure client proxy.
Karthikeyan Bhargavan, Cédric Fournet, Andrew D. Gordon 0001, Nikhil Swamy
AsiaCCS3
2008 Service Combinators for Farming Virtual Machines
Karthikeyan Bhargavan, Andrew D. Gordon 0001, Iman Narasamdya
COORDINATION2
2008 Refinement Types for Secure Implementations
abstract
We present the design and implementation of a typechecker for verifying security properties of the source code of cryptographic protocols and access control mechanisms. The underlying type theory is a λ-calculus equipped with refinement types for expressing pre- and post-conditions within first-order logic. We derive formal cryptographic primitives and represent active adversaries within the type theory. Well-typed programs enjoy assertion-based security properties, with respect to a realistic threat model including key compromise. The implementation amounts to an enhanced typechecker for the general purpose functional language F#; typechecking generates verification conditions that are passed to an SMT solver. We describe a series of checked examples. This is the first tool to verify authentication properties of cryptographic protocols by typechecking their source code.
Jesper Bengtson, Karthikeyan Bhargavan, Cédric Fournet, Andrew D. Gordon 0001, Sergio Maffeis
CSF4
2008 Code-Carrying Authorization
Sergio Maffeis, Martín Abadi, Cédric Fournet, Andrew D. Gordon 0001
ESORICS4
2008 Verifying policy-based web services security
abstract
WS-SecurityPolicy is a declarative language for configuring web services security mechanisms. We describe a formal semantics for WS-SecurityPolicy and propose a more abstract language for specifying secure links between web services and their clients. We present the architecture and implementation of tools that (1) compile policy files from link specifications, and (2) verify by invoking a theorem prover whether a set of policy files run by any number of senders and receivers correctly implements the goals of a link specification, in spite of active attackers. Policy-driven web services implementations are prone to the usual subtle vulnerabilities associated with cryptographic protocols; our tools help prevent such vulnerabilities. We can verify policies when first compiled from link specifications, and also re-verify policies against their original goals after any modifications during deployment. Moreover, we present general security theorems for all configurations that rely on compiled policies.
Karthikeyan Bhargavan, Cédric Fournet, Andrew D. Gordon 0001
ACM Trans. Program. Lang. Syst.3
2008 Verified interoperable implementations of security protocols
abstract
We present an architecture and tools for verifying implementations of security protocols. Our implementations can run with both concrete and symbolic implementations of cryptographic algorithms. The concrete implementation is for production and interoperability testing. The symbolic implementation is for debugging and formal verification. We develop our approach for protocols written in F#, a dialect of ML, and verify them by compilation to ProVerif, a resolution-based theorem prover for cryptographic protocols. We establish the correctness of this compilation scheme, and we illustrate our approach with protocols for Web Services security.
Karthikeyan Bhargavan, Cédric Fournet, Andrew D. Gordon 0001, Stephen Tse
ACM Trans. Program. Lang. Syst.3
2007 Design and Semantics of a Decentralized Authorization Language
abstract
We present a declarative authorization language that strikes a careful balance between syntactic and semantic simplicity, policy expressiveness, and execution efficiency. The syntax is close to natural language, and the semantics consists of just three deduction rules. The language can express many common policy idioms using constraints, controlled delegation, recursive predicates, and negated queries. We describe an execution strategy based on translation to datalog with constraints, and table-based resolution. We show that this execution strategy is sound, complete, and always terminates, despite recursion and negation, as long as simple syntactic conditions are met.
Moritz Y. Becker, Cédric Fournet, Andrew D. Gordon 0001
CSF3
2007 A Type Discipline for Authorization in Distributed Systems
abstract
We consider the problem of statically verifying the conformance of the code of a system to an explicit authorization policy. In a distributed setting, some part of the system may be compromised, that is, some nodes of the system and their security credentials may be under the control of an attacker. To help predict and bound the impact of such partial compromise, we advocate logic-based policies that explicitly record dependencies between principals. We propose a conformance criterion, safety despite compromised principals, such that an invalid authorization decision at an uncompromised node can arise only when nodes on which the decision logically depends are compromised. We formalize this criterion in the setting of a process calculus, and present a verification technique based on a type system. Hence, we can verify policy conformance of code that uses a wide range of the security mechanisms found in distributed systems, ranging from secure channels down to cryptographic primitives, including encryption and public-key signatures.
Cédric Fournet, Andrew D. Gordon 0001, Sergio Maffeis
CSF2
2007 Secure sessions for Web services
abstract
We address the problem of securing sequences of SOAP messages exchanged between web services and their clients. The WS-Security standard defines basic mechanisms to secure SOAP traffic, one message at a time. For typical web services, however, using WS-Security independently for each message is rather inefficient; moreover, it is often important to secure the integrity of a whole session, as well as each message. To these ends, recent specifications provide further SOAP-level mechanisms. WS-SecureConversation defines security contexts , which can be used to secure sessions between two parties. WS-Trust specifies how security contexts are issued and obtained. We develop a semantics for the main mechanisms of WS-Trust and WS-SecureConversation, expressed as a library for TulaFale, a formal scripting language for security protocols. We model typical protocols relying on these mechanisms and automatically prove their main security properties. We also informally discuss some pitfalls and limitations of these specifications.
Karthikeyan Bhargavan, Ricardo Corin, Cédric Fournet, Andrew D. Gordon 0001
ACM Trans. Inf. Syst. Secur.4
2007 A type discipline for authorization policies
abstract
Distributed systems and applications are often expected to enforce high-level authorization policies. To this end, the code for these systems relies on lower-level security mechanisms such as digital signatures, local ACLs, and encrypted communications. In principle, authorization specifications can be separated from code and carefully audited. Logic programs in particular can express policies in a simple, abstract manner. We consider the problem of checking whether a distributed implementation based on communication channels and cryptography complies with a logical authorization policy. We formalize authorization policies and their connection to code by embedding logical predicates and claims within a process calculus. We formulate policy compliance operationally by composing a process model of the distributed system with an arbitrary opponent process. Moreover, we propose a dependent type system for verifying policy compliance of implementation code. Using Datalog as an authorization logic, we show how to type several examples using policies and present a general schema for compiling policies.
Cédric Fournet, Andrew D. Gordon 0001, Sergio Maffeis
ACM Trans. Program. Lang. Syst.2
2006 Verified Interoperable Implementations of Security Protocols
abstract
We present an architecture and tools for verifying implementations of security protocols. Our implementations can run with both concrete and symbolic implementations of cryptographic algorithms. The concrete implementation is for production and interoperability testing. The symbolic implementation is for debugging and formal verification. We develop our approach for protocols written in F#, a dialect of ML, and verify them by compilation to ProVerif a resolution-based theorem prover for cryptographic protocols. We establish the correctness of this compilation scheme, and we illustrate our approach with protocols for Web services security
Karthikeyan Bhargavan, Cédric Fournet, Andrew D. Gordon 0001, Stephen Tse
CSFW3
2006 Provable Implementations of Security Protocols
abstract
The author implements the relatively new enterprise of adapting formal methods for security to work on code instead of abstract models. The goal is to lower the practical cost of security protocol verification by eliminating the need to write a separate formal model. The main technical content is on extracting pi-calculus models from protocol implementation code. Our software is developed in the functional language F#, a dialect of ML
Andrew D. Gordon 0001
LICS1
2005 Secrecy Despite Compromise: Types, Cryptography, and the Pi-Calculus
Andrew D. Gordon 0001, Alan Jeffrey
CONCUR1
2005 A Type Discipline for Authorization Policies
Cédric Fournet, Andrew D. Gordon 0001, Sergio Maffeis
ESOP2
2005 From Typed Process Calculi to Source-Based Security
Andrew D. Gordon 0001
SAS1
2005 Validating a web service security abstraction by typing
abstract
Abstract An XML web service is, to a first approximation, an RPC service in which requests and responses are encoded in XML as SOAP envelopes, and transported over HTTP. We consider the problem of authenticating requests and responses at the SOAP-level, rather than relying on transport-level security. We propose a security abstraction, inspired by earlier work on secure RPC, in which the methods exported by a web service are annotated with one of three security levels: none, authenticated, or both authenticated and encrypted. We model our abstraction as an object calculus with primitives for defining and calling web services. We describe the semantics of our object calculus by translating to a lower level language with primitives for message passing and cryptography. To validate our semantics, we embed correspondence assertions that specify the correct authentication of requests and responses. By appeal to the type theory for cryptographic protocols of Gordon and Jeffrey's Cryptyc, we verify the correspondence assertions simply by typing. Finally, we describe an implementation of our semantics via custom SOAP headers.
Andrew D. Gordon 0001, Riccardo Pucella
Formal Aspects Comput.1
2005 Secrecy and group creation
Luca Cardelli, Giorgio Ghelli, Andrew D. Gordon 0001
Inf. Comput.3
2005 Deciding validity in a spatial logic for trees
abstract
We consider a propositional spatial logic for finite trees. The logic includes $\A \Par \B$ (tree composition), $\A \,{\Guarantee}\, \B$ (the implication induced by composition), and $\Zero$ (the unit of composition). We show that the satisfaction and validity problems are equivalent, and decidable. The crux of the argument is devising a finite enumeration of trees to consider when deciding whether a spatial implication is satisfied. We introduce a sequent calculus for the logic, and show it to be sound and complete with respect to an interpretation in terms of satisfaction. Finally, we describe a complete proof procedure for the sequent calculus. We envisage applications in the area of logic-based type systems for semistructured data. We describe a small programming language based on this idea.
Cristiano Calcagno, Luca Cardelli, Andrew D. Gordon 0001
J. Funct. Program.3
2005 A semantics for web services authentication
Karthikeyan Bhargavan, Cédric Fournet, Andrew D. Gordon 0001
Theor. Comput. Sci.3
2005 Preface for the Special Issue: Foundations of Software Science and Computation Structures
Andrew D. Gordon 0001
Theor. Comput. Sci.1
2004 Verifying policy-based security for web services
abstract
WS-SecurityPolicy is a declarative configuration language for driving web services security mechanisms. We describe a formal semantics for WS-SecurityPolicy, and propose a more abstract link language for specifying the security goals of web services and their clients. Hence, we present the architecture and implementation of fully automatic tools that (1) compile policy files from link specifications, and (2) verify by invoking a theorem prover whether a set of policy files run by any number of senders and receivers correctly implements the goals of a link specification, in spite of active attackers. Policy-driven web services implementations are prone to the usual subtle vulnerabilities associated with cryptographic protocols; our tools help prevent such vulnerabilities, as we can verify policies when first compiled from link specifications, and also re-verify policies against their original goals after any modifications during deployment.
Karthikeyan Bhargavan, Cédric Fournet, Andrew D. Gordon 0001
CCS3
2004 From Stack Inspection to Access Control: A Security Analysis for Libraries
Frédéric Besson, Tomasz Blanc, Cédric Fournet, Andrew D. Gordon 0001
CSFW4
2004 A semantics for web services authentication
abstract
We consider the problem of specifying and verifying cryptographic security protocols for XML web services. The security specification WS-Security describes a range of XML security tokens, such as username tokens, public-key certificates, and digital signature blocks, amounting to a flexible vocabulary for expressing protocols. To describe the syntax of these tokens, we extend the usual XML data model with symbolic representations of cryptographic values. We use predicates on this data model to describe the semantics of security tokens and of sample protocols distributed with the Microsoft WSE implementation of WS-Security. By embedding our data model within Abadi and Fournet's applied pi calculus, we formulate and prove security properties with respect to the standard Dolev-Yao threat model. Moreover, we informally discuss issues not addressed by the formal model. To the best of our knowledge, this is the first approach to the specification and verification of security protocols based on a faithful account of the XML wire format.
Karthikeyan Bhargavan, Cédric Fournet, Andrew D. Gordon 0001
POPL3
2004 Types and effects for asymmetric cryptographic protocols
abstract
We present the first type and effect system for proving authenticity properties of security protocols based on asymmetric cryptography. The most significant new features of our type system are: (1) a separation of public types (for data possibly sent to the opponent) from tainted types (for data po ssibly received from the opponent) via a subtype relation; (2) trust effects, to guarantee that tainted data does not, in fact, originate from the opponent; and (3) challenge/response types to support a variety of idioms used to guarantee message freshness. We illustrate the applicability of our system via protocol examples.
Andrew D. Gordon 0001, Alan Jeffrey
J. Comput. Secur.1
2003 Authenticity by Typing for Security Protocols
abstract
We propose a new method to check authenticity properties of cryptographic protocols. First, code up the protocol in the spi-calculus of Abadi and Gordon. Second, specify authenticity properties by annotating the code with correspondence assertions in the style of Woo and Lam. Third, figure out type s for the keys, nonces, and messages of the protocol. Fourth, check that the spi-calculus code is well-typed according to a novel type and effect system presented in this paper. Our main theorem guarantees that any well-typed protocol is robustly safe, that is, its correspondence assertions are true in the presence of any opponent expressible in spi. It is feasible to apply this method by hand to several well-known cryptographic protocols. It requires little human effort per protocol, puts no bound on the size of the opponent, and requires no state space enumeration. Moreover, the types for protocol data provide some intuitive explanation of how the protocol works. This paper describes our method and gives some simple examples. Our method has led us to the independent rediscovery of flaws in existing protocols and to the design of improved protocols.
Andrew D. Gordon 0001, Alan Jeffrey
J. Comput. Secur.1
2003 Equational Properties Of Mobile Ambients
abstract
The ambient calculus is a process calculus for describing mobile computation. We develop a theory of Morris-style contextual equivalence for proving properties of mobile ambients. We prove a context lemma that allows derivation of contextual equivalences by considering contexts of a particular limited form, rather than all arbitrary contexts. We give an activity lemma that characterises the possible interactions between a process and a context. We prove several examples of contextual equivalence. The proofs depend on characterising reductions in the ambient calculus in terms of a labelled transition system.
Andrew D. Gordon 0001, Luca Cardelli
Math. Struct. Comput. Sci.1
2003 Model checking mobile ambients
Witold Charatonik, Silvano Dal-Zilio, Andrew D. Gordon 0001, Supratik Mukhopadhyay, Jean-Marc Talbot
Theor. Comput. Sci.3
2003 Typing correspondence assertions for communication protocols
Andrew D. Gordon 0001, Alan Jeffrey
Theor. Comput. Sci.1
2003 Stack inspection: Theory and variants
abstract
Stack inspection is a security mechanism implemented in runtimes such as the JVM and the CLR to accommodate components with diverse levels of trust. Although stack inspection enables the fine-grained expression of access control policies, it has rather a complex and subtle semantics. We present a formal semantics and an equational theory to explain how stack inspection affects program behavior and code optimisations. We discuss the security properties enforced by stack inspection, and also consider variants with stronger, simpler properties.
Cédric Fournet, Andrew D. Gordon 0001
ACM Trans. Program. Lang. Syst.2
2002 Types for Cryptographic Protocols
Andrew D. Gordon 0001
CONCUR1
2002 Types and Effects for Asymmetric Cryptographic Protocols
abstract
We present the first type and effect system for proving authenticity properties of security protocols based on asymmetric cryptography. The most significant new features of our type system are: (1) a separation of public types (for data possibly sent to the opponent) from tainted types (for data possibly received from the opponent) via a subtype relation; (2) trust effects, to guarantee that tainted data does not, in fact, originate from the opponent; and (3) challenge/response types to support a variety of idioms used to guarantee message freshness. We illustrate the applicability of our system via protocol examples.
Andrew D. Gordon 0001, Alan Jeffrey
CSFW1
2002 Finite-Control Mobile Ambients
Witold Charatonik, Andrew D. Gordon 0001, Jean-Marc Talbot
ESOP2
2002 Automating Type Soundness Proofs via Decision Procedures and Guided Reductions
Don Syme, Andrew D. Gordon 0001
LPAR2
2002 Stack inspection: theory and variants
abstract
Stack inspection is a security mechanism implemented in runtimes such as the JVM and the CLR to accommodate components with diverse levels of trust. Although stack inspection enables the fine-grained expression of access control policies, it has rather a complex and subtle semantics. We present a formal semantics and an equational theory to explain how stack inspection affects program behaviour and code optimisations. We discuss the security properties enforced by stack inspection, and also consider variants with stronger, simpler properties.
Cédric Fournet, Andrew D. Gordon 0001
POPL2
2002 Types for the Ambient Calculus
Luca Cardelli, Giorgio Ghelli, Andrew D. Gordon 0001
Inf. Comput.3
2002 Region analysis and a pi-calculus with groups
abstract
We show that the typed region calculus of Tofte and Talpin can be encoded in a typed π-calculus equipped with name groups and a novel effect analysis. In the region calculus, each boxed value has a statically determined region in which it is stored. Regions are allocated and de-allocated according to a stack discipline, thus improving memory management. The idea of name groups arose in the typed ambient calculus of Cardelli, Ghelli, and Gordon. There, and in our π-calculus, each name has a statically determined group to which it belongs. Groups allow for type-checking of certain mobility properties, as well as effect analyses. Our encoding makes precise the intuitive correspondence between regions and groups. We propose a new formulation of the type preservation property of the region calculus, which avoids Tofte and Talpin's rather elaborate co-inductive formulation. We prove the encoding preserves the static and dynamic semantics of the region calculus. Our proof of the correctness of region de-allocation shows it to be a specific instance of a general garbage collection principle for the π-calculus with effects. We propose new equational laws for letregion , analogous to scope mobility laws in the π-calculus, and show them sound in our semantics.
Silvano Dal-Zilio, Andrew D. Gordon 0001
J. Funct. Program.2
2001 Authenticity by Typing for Security Protocols
abstract
We propose a new method to check authenticity proper-ties of cryptographic protocols. First, code up the protocol in the spi-calculus of Abadi and Gordon. Second, specify authenticity properties by annotating the code with corre-spondence assertions in the style of Woo and Lam. Third, figure out types for the keys, nonces, and messages of the protocol. Fourth, check that the spi-calculus code is well-typed according to a novel type and effect system presented in this paper. Our main theorem guarantees that any well-typed protocol is robustly safe, that is, its correspondence assertions are true in the presence of any opponent express-ible in spi. 1 Verifying Correspondences by Typing Spi We propose a new method for analysing authenticity
Andrew D. Gordon 0001, Alan Jeffrey
CSFW1
2001 The Complexity of Model Checking Mobile Ambients
Witold Charatonik, Silvano Dal-Zilio, Andrew D. Gordon 0001, Supratik Mukhopadhyay, Jean-Marc Talbot
FoSSaCS3
2001 Typing a multi-language intermediate code
abstract
The Microsoft .NET Framework is a new computing architecture designed to support a variety of distributed applications and web-based services. .NET software components are typically distributed in an object-oriented intermediate language, Microsoft IL, executed by the Microsoft Common Language Runtime. To allow convenient multi-language working, IL supports a wide variety of high-level language constructs, including class-based objects, inheritance, garbage collection, and a security mechanism based on type safe execution.This paper precisely describes the type system for a substantial fragment of IL that includes several novel features: certain objects may be allocated either on the heap or on the stack; those on the stack may be boxed onto the heap, and those on the heap may be unboxed onto the stack; methods may receive arguments and return results via typed pointers, which can reference both the stack and the heap, including the interiors of objects on the heap. We present a formal semantics for the fragment. Our typing rules determine well-typed IL instruction sequences that can be assembled and executed. Of particular interest are rules to ensure no pointer into the stack outlives its target. Our main theorem asserts type safety, that well-typed programs in our IL fragment do not lead to untrapped execution errors.Our main theorem does not directly apply to the product. Still, the formal system of this paper is an abstraction of informal and executable specifications we wrote for the full product during its development. Our informal specification became the basis of the product team's working specification of type-checking. The process of writing this specification, deploying the executable specification as a test oracle, and applying theorem proving techniques, helped us identify several security critical bugs during development.
Andrew D. Gordon 0001, Don Syme
POPL1
2001 Types for Cyphers: Thwarting Mischief and Malice with Type Theory
Andrew D. Gordon 0001
PPDP1
2001 A Type and Effect Analysis of Security Protocols
Andrew D. Gordon 0001, Alan Jeffrey
SAS1
2000 Secrecy and Group Creation
Luca Cardelli, Giorgio Ghelli, Andrew D. Gordon 0001
CONCUR3
2000 Region Analysis and a pi-Calculus wiht Groups
Silvano Dal-Zilio, Andrew D. Gordon 0001
MFCS2
2000 Anytime, Anywhere: Modal Logics for Mobile Ambients
abstract
The Ambient Calculus is a process calculus where processes may reside within a hierarchy of locations and modify it. The purpose of the calculus is to study mobility, which is seen as the change of spatial configurations over time. In order to describe properties of mobile computations we devise a modal logic that can talk about space as well as time, and that has the Ambient Calculus as a model.
Luca Cardelli, Andrew D. Gordon 0001
POPL2
2000 Mobile ambients
Luca Cardelli, Andrew D. Gordon 0001
Theor. Comput. Sci.2
1999 Equational Properties of Mobile Ambients
Andrew D. Gordon 0001, Luca Cardelli
FoSSaCS1
1999 Mobility Types for Mobile Ambients
Luca Cardelli, Andrew D. Gordon 0001, Giorgio Ghelli
ICALP2
1999 Types for Mobile Ambients
abstract
Java has demonstrated the utility of type systems for mobile code, and in particular their use and implications for security. Security properties rest on the fact that a well-typed Java program (or the corresponding verified bytecode) cannot cause certain kinds of damage.In this paper we provide a type system for mobile computation, that is, for computation that is continuously active before and after movement. We show that a well-typed mobile computation cannot cause certain kinds of run-time fault: it cannot cause the exchange of values of the wrong kind, anywhere in a mobile system.
Luca Cardelli, Andrew D. Gordon 0001
POPL2
1999 A Calculus for Cryptographic Protocols: The spi Calculus
Martín Abadi, Andrew D. Gordon 0001
Inf. Comput.2
1999 Compilation and Equivalence of Imperative Objects
abstract
We adopt the untyped imperative object calculus of Abadi and Cardelli as a minimal setting in which to study problems of compilation and program equivalence that arise when compiling object-oriented languages. We present both a big-step and a small-step substitution-based operational semantics for the calculus. Our first two results are theorems asserting the equivalence of our substitution-based semantics with a closure-based semantics like that given by Abadi and Cardelli. Our third result is a direct proof of the correctness of compilation to a stack-based abstract machine via a small-step decompilation algorithm. Our fourth result is that contextual equivalence of objects coincides with a form of Mason and Talcott's CIU equivalence; the latter provides a tractable means of establishing operational equivalences. Finally, we prove correct an algorithm, used in our prototype compiler, for statically resolving method offsets. This is the first study of correctness of an object-oriented abstract machine, and of operational equivalence for the imperative object calculus.
Andrew D. Gordon 0001, Paul D. Hankin, Søren B. Lassen
J. Funct. Program.1
1999 Relating operational and denotational semantics for input/output effects
Roy L. Crole, Andrew D. Gordon 0001
Math. Struct. Comput. Sci.2
1999 Bisimilarity as a Theory of Functional Programming
Andrew D. Gordon 0001
Theor. Comput. Sci.1
1998 A Bisimulation Method for Cryptographic Protocols
Martín Abadi, Andrew D. Gordon 0001
ESOP2
1998 Mobile Ambients
Luca Cardelli, Andrew D. Gordon 0001
FoSSaCS2
1997 A Calculus for Cryptographic Protocols: The Spi Calculus
abstract
We introduce the spi calculus, an extension of the pi calculus designed for the description and analysis of cryptographic protocols.We show how to use the spi calculus, particularly for studying authentication protocols.The pi calculus (without extension) suffices for some abstract protocols; the spi calculus enables us to consider cryptographic issues in more detail.We represent protocols as processes in the spi calculus and state their security properties in terms of coarse-grained notions of protocol equivalence.
Martín Abadi, Andrew D. Gordon 0001
CCS2
1997 Reasoning about Cryptographic Protocols in the Spi Calculus
Martín Abadi, Andrew D. Gordon 0001
CONCUR2
1997 Compilation and Equivalence of Imperative Objects
Andrew D. Gordon 0001, Paul D. Hankin, Søren B. Lassen
FSTTCS1
1996 Bisimilarity for a First-Order Calculus of Objects with Subtyping
abstract
Bisimilarity (also known as 'applicative bisimulation') has attracted a good deal of attention as an operational equivalence for λ-calculi. It approximates or even equals Morris-style contextual equivalence and admits proofs of program equivalence via co-induction. It has an elementary construction from the operational definition of a language. We consider bisimilarity for one of the typed object calculi of Abadi and Cardelli. By defining a labelled transition system for the calculus in the style of Crole and Gordon and using a variation of Howe's method we establish two central results: that bisimilarity is a congruence, and that it equals contextual equivalence. So two objects are bisimilarity no amount of programming can tell them apart. Our third contribution is to show that bisimilarity soundly models the equational theory of Abadi and Cardelli. This is the first study of contextual equivalence for an object calculus and the first application of Howe's method to subtyping. By these results, we intend to demonstrate that operational methods are a promising new direction for the foundations of object-oriented programming.
Andrew D. Gordon 0001, Gareth D. Rees
POPL1
1996 Concurrent Haskell
abstract
No abstract available.
Simon L. Peyton Jones, Andrew D. Gordon 0001, Sigbjørn Finne
POPL2
1992 The Formal Definition of a Synchronous Hardware-Description Language in Higher Order Logic
abstract
If formal methods of hardware verification are to have any impact on the practices of working designers, connections must be made between the languages used in practice to design circuits and those used for research into hardware verification. SILAGE is a simple data-flow language used for specifying digital signal processing circuits. Higher-order logic (HOL) is extensively used for research into hardware verification. A novel combination of operational and predictive semantics is used to define formally a substantial subset of SILAGE by mapping SILAGE definitions into HOL predicates. The authors sketch the method used, discuss what is gained by a formal definition, and explain an immediate practical application: secure transformational design of SILAGE circuits as theorem proving in HOL.>
Andrew D. Gordon 0001
ICCD1