Trust, Authority, and Information Flow in Secure Distributed Systems
Computing systems that make use of other people's data are an important and pervasive aspect of modern life. However, users have little ability to specify how their information should be used, and system providers have insufficient tools to provide assurance that they correctly handle that information. Decentralized information flow control (DIFC) provides a framework for specifying policies on the use of information and ensuring that systems abide by those policies. However, existing DIFC systems do not address the complexity of the modern software ecosystem, where multiple entities interact to provide the software, data storage, and computational resources for a given application. This dissertation aims to bridge the divide between the strong security guarantees provided by DIFC systems and the complex requirements of today's distributed applications. We present Fabric, a platform for secure distributed storage and computation. Fabric provides a high-level programming model that enables heterogeneously trusted parties to share code, information, and computational resources while enforcing strong information flow constraints. We have evaluated Fabric by building applications that model the data storage, communication, and software evolution patterns present in existing applications, while adding appropriate information flow constraints. Results from these applications suggest that Fabric has a clean, concise programming model, offers good performance, and enforces strong security policies. In a decentralized setting like Fabric, it should be the case that a principal's security policy can only be violated if someone they trust misbehaves. Formalizing these notions in a decentralized system is challenging because statements of trust and definitions of policies are also decentralized. To address this challenge, we show how to identify the data that influences information flows in a broad class of DIFC systems. We use influenced flows to formalize the notion that you can only be harmed by those you trust, and show that definitions of harm based on influenced flows generalize existing semantic definitions of information flow security. Since trust statements in federated systems are distributed, determining whether a computation is safe may require a separate distributed computation, which may in turn introduce potentially unsafe information flows. We present a programming language for distributed authorization queries that tracks information flow. We show that programs in our language do not leak information, and that the language is sufficiently expressive to model nontrivial authorization queries.