从分布式信任构建密码系统
从分布式信任构建密码系统
by
Weikeng Chen
Doctor of Philosophy
in
Computer Science
in the
Graduate Division
of the
Committee in charge:
Spring 2022
i
Abstract
by
Weikeng Chen
Centralized systems are prone to data breaches, which may come from hackers and malicious or
compromised employees inside the company. The scale and prevalence of such data breaches raise
concerns from users, companies, and government agencies. In this dissertation, we study how to
build systems that distribute centralized trust among many parties, such that the system remains
secure as long as at least one of the parties is not compromised. We show how distributed trust can
be used to secure systems for storage, machine learning, consensus, and authentication.
ii
Contents
Contents ii
1 Introduction 1
1.1 Summary of the approach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Overview of the works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.2 Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.3 Overview of Cerebro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.4 Programming model and compiler . . . . . . . . . . . . . . . . . . . . . . . . . . 78
4.5 Policies and auditing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.6 Implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.7 Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.8 Related work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.9 More details on physical planning . . . . . . . . . . . . . . . . . . . . . . . . . . 98
6 Reducing Participation Costs via Incremental Verification for Ledger Systems 128
6.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
6.2 Participation costs in ledger systems . . . . . . . . . . . . . . . . . . . . . . . . . 133
6.3 Definition of IVLS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
6.4 System architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
6.5 Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
6.6 Construction and implementation . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
6.7 Evaluation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
6.8 Other related work . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
6.9 Formalizing applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
6.10 Further considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
6.11 Construction of an IVLS compiler . . . . . . . . . . . . . . . . . . . . . . . . . . 161
6.12 Security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Bibliography 201
v
Acknowledgments
I would like to thank many people for their help and support in my PhD journey.
Thanks to my advisor, Raluca Ada Popa, for teaching me virtually everything about computer
security and applied cryptography. She taught me to stay persistent and provided a lot of encour-
agement and support to my research and graduate study in general.
Thanks to my other co-authors, Ian Chang, Alessandro Chiesa, Emma Dauterman, Ryan Deng,
Jorge Guajardo, Thang Hoang, Murat Kantarcioglu, Aurojit Panda, Ion Stoica, Katerina Sotiraki,
Nicholas P. Ward, Attila A. Yavuz, and Wenting Zheng (alphabetically ordered).
Thanks to my friends and colleagues in RISELab, the Berkeley Security Group, and the Blockchain
at Berkeley club.
Thanks to my friends and collaborators in the open-source community of zero-knowledge proofs
and secure computation, including arkworks-rs, ZK Garage, and emp-toolkit.
Thanks to my family for their continuous support during my graduate study.
The research in this dissertation is supported by the NSF CISE Expeditions Award CCF-1730628,
Jim Gray Fellowship, J. K. Zee Fellowship, as well as gifts from the Sloan Foundation, Bakar,
Okawa, and Hellman Fellows Fund, Alibaba, Amazon Web Services, Ant Financial, Capital One,
Ericsson, Facebook, Futurewei, Google, Intel, Microsoft, Nvidia, Scotiabank, Splunk, and VMware.
1
Chapter 1
Introduction
Over the recent decades we see the rise of internet systems. Today, we share files over public
cloud storage; we communicate with our friends and colleagues through online messaging apps;
we share our email address, home address, and phone number to many websites that we visit.
These systems are often centralized, meaning that for each system, there is a centralized party who
can see all our data and can use the data in any way that the party wants.
A problem with such centralization is that it is prone to data breaches, which may come from
either hackers or malicious/compromised employees inside the company [1–13]. In the last decade,
there are about 9500 data breaches in the US, leaking more than one billion records in total [14].
The scale and prevalence of such data breaches raise the concerns from users, companies, and
government agencies.
• Users worry that the companies who have their data are incapable of protecting such data, as
there have been many data breaches.
• Companies worry about their reputation and liability when data breaches happen, as shown
by several companies that go bankruptcy after just one major data breach [15, 16]. Recently,
companies find it difficult to prevent phishing attacks against their employees [17–20].
• Government agencies are concerned about the privacy of the data of the citizens and enterprises.
They are concerned about the cyber espionage that targets intellectual property from companies
and cyberattacks that target federal agencies and other government institutions [21, 22].
There has been many efforts, in different aspects, trying to minimize the risks of these centralized
systems, including legislation including privacy laws [23], data privacy standards [24–27], and on-
going efforts in standardizing cryptographic standards [28, 29]. The congress has been discussing
billion-dollar cybersecurity investment bill that tries to protect sensitive data and public critical
infrastructure [30, 31].
real world. This means that the system needs to be compatible with existing ecosystem, to be
user-friendly, and to satisfy many other requirements in practice. We now give two examples.
In Metal [36], we design a secure and efficient protocol for users to access a file in remote stor-
age, but there is another challenge: how do users share files with others without leaking metadata?
Prior work often assumes that users can “magically” figure out a way to share confidential infor-
mation about how to access a file, thereby enabling file sharing. But we know that it is difficult for
users to figure out such a way without sacrificing the anonymity. Eventually, Metal [36] includes
a dedicated module that provides an efficient and secure way to share files.
In N-for-1 Auth [37], we design an efficient protocol for running a TLS client inside secure
computation, and we start to use this protocol to perform decentralized authentication for a number
of authentication factors (e.g., email, SMS), and we find that usability is a challenge. For example,
for security, users need to provide a different passcode to each authentication server. The process
of having users to go through different websites is cumbersome. To address this challenge, N-for-1
Auth [37] provides a client software to allow users to use the system without worrying about the
cryptographic detail.
Release open source artifacts. To bring cryptography to the real world, we need to first implement
it. We take efforts to provide open-source implementation for the various cryptographic tools used
in this dissertation. Here, we focus on two examples, and other work also has shown adoption.
For example, in Cerebro [32], we build an artifact of our system, which is submitted to USENIX
Security 2021 for artifact evaluation, and the paper received the evaluation badge. Our artifact in-
cludes not only the implementations of new protocols that support physical planning and examples
for implementing machine learning in secure computation, but also documentation and tools that
enable one to evaluate the results provided in the paper. One of the reviewers of the artifact evalu-
ation said that “the documentation was fantastically well written and easy to follow.”
Another example is in incrementally verifiable ledger systems [34], which improves the state-
of-the-art succinct zero-knowledge proofs. Many of the tools are implemented for the very first
time. Today, they have been used in a number of blockchain companies, such as Aleo [35] as in
their implementation of private smart contracts.
Authentication Consensus
Foundation
N-for-1-Auth (Chapter 7) IVLS (Chapter 6)
however, is secure against n − 1 out of n servers being maliciously compromised. This is a joint
work with Thang Hoang, Jorge Guajardo, and Attila A. Yavuz.
Secure collaborative learning: Cerebro and Holmes. Cerebro [32], presented in Chapter 4, is
a platform for collaborative learning. The platform aims to provide an end-to-end solution for
collaborative learning. Beyond the basic support of machine learning, the platform can enforce
release policies and auditing for detecting malicious inputs. This is a joint work with Wenting
Zheng, Ryan Deng, Raluca Ada Popa, Ion Stoica, and Aurojit Panda.
Holmes [33], presented in Chapter 5, is a protocol for performing distribution tests in secure
collaborative learning. Distribution testing enables organizations participating in collaborative
learning to check if data contributed by each other is biased (or unbalanced). Although exist-
ing MPC protocols are already able to do so, the costs are extremely high. Holmes uses a hybrid
construction that integrates MPC and zero-knowledge proofs, and Holmes is able to achieve sig-
nificant speedups. This is a joint work with Ian Chang, Katerina Sotiraki, Raluca Ada Popa, and
Murat Kantarcioglu.
Distributed authentication: N-for-1 Auth. N-for-1 Auth [37], presented in Chapter 7, provides
decentralized authentication for a number of commonly used authentication factors and makes
them friendly to the general users. This is a joint work with Ryan Deng and Raluca Popa.
Scalable blockchain systems: IVLS. Incrementally verifiable ledger systems (IVLS) [34], pre-
sented in Chapter 6, studies how to reduce the participation costs for blockchain systems and
provides a solution through recursive composition of zero-knowledge proofs. This is joint work
with Alessandro Chiesa, Emma Dauterman, and Nicholas Ward.
5
Chapter 2
File-sharing systems like Dropbox offer insufficient privacy because a compromised server can
see the file contents in the clear. Although encryption can hide such contents from the servers,
metadata leakage remains significant. The goal of our work is to develop a file-sharing system that
hides metadata—including user identities and file access patterns.
Metal is the first file-sharing system that hides such metadata from malicious users and that
has a latency of only a few seconds. The core of Metal consists of a new two-server multi-user
oblivious RAM (ORAM) scheme, which is secure against malicious users, a metadata-hiding access
control protocol, and a capability sharing protocol.
Compared with the state-of-the-art malicious-user file-sharing scheme PIR-MCORAM (Maffei
et al.’17), which does not hide user identities, Metal hides the user identities and is 500× faster (in
terms of amortized latency) or 105 × faster (in terms of worst-case latency).
2.1 Introduction
Storing files on a cloud server and sharing these files with other users (e.g., as in Dropbox)
are common activities today. To hide the confidential contents of files from a compromised server,
academia and industry developed end-to-end encryption (E2EE) systems [39–45]; using these, the
user encrypts the file contents, so a compromised server only sees the encryption of a file, and only
permitted users can decrypt the file. Unfortunately, this approach leaves unprotected a lot of user
and file metadata. Figure 2.1 summarizes metadata leakage in E2EE systems: notably, the user
identities and file access patterns.
Such metadata is sensitive, which has become notorious in a related area—communication
surveillance. Former NSA General Counsel, Stewart Baker, said “Metadata absolutely tells you
everything about somebody’s life. If you have enough metadata, you don’t really need content.”
[46] Former NSA Director, Michael Hayden, stated: “We kill people based on metadata.” [47]
Since knowing whom a user calls is similar in spirit to knowing with whom a user shares a file,
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 6
♦ user identities:
• for a file access, which user made the access
Metal • user capabilities
♦ file access patterns:
• for an access, which file was accessed
• type of file operation (read vs. write)
• file access control lists (ACLs)
+ padding ♦♦ type
timing: when each operation was performed
of operation: create account vs. file access
Figure 2.1: Scope of data/metadata protected by end-to-end encryption (E2EE) systems and
Metal; padding in time and computation hides more metadata.
leaking metadata in file sharing is also worrisome. To illustrate this issue, consider some privacy
concerns that arise when medical data is stored on the cloud:
The sensitive user identities. Consider that patient Alice and her oncologist Bob share Alice’s
medical profile in an E2EE system. Even with encryption, the server knows that Alice and Bob
share some files with each other. With the side information that Bob is an oncologist, likely avail-
able from a Google search for Bob’s name, the server knows that Alice is seeing an oncologist and
thus infers that she suffers from cancer.
The sensitive file access patterns. Even without user identities, file access patterns are sensitive.
Consider that some doctors share a folder with disease handouts that consists of many files, one for
each disease. The server sees the access frequency of each file and can relate it to disease incidence
rates, which can be found online [48]. Thus, the server can infer the disease in each file. If the
server knows the time when Alice goes to the doctor, the server can infer Alice’s disease by seeing
which file is accessed by the doctor.
Further, there are many general attacks against anonymous systems leveraging social data [49–
56] or access patterns [56–63], some of which might apply to file sharing.
The first attempt to hide such metadata is oblivious RAM (ORAM) [68–70]. However, ORAM
relies on the trustworthiness of a single client or a proxy to maintain the confidentiality of the
entire data storage. A recent line of multi-user ORAM schemes [64–67], shown in Table 2.1, is
more relevant to our setting. These schemes attempt to retain some oblivious guarantees even
when some users are compromised; for example, file accesses of an honest user remain hidden
across all the files accessible only by honest users. Unfortunately, there are very few such works;
the schemes that support file sharing, PIR-MCORAM [67] and GORAM [66], leak either user
identities or file access patterns, as depicted in Table 2.1.
This paper presents Metal, the first cryptographic file-sharing system that hides both user iden-
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 7
Work File sharing Hide access patterns Hide users Server complexity Setup
Secret-write PANDA [64] No No No Nearly polylog 1-server
AnonRAM-lin [65] No Yes Yes Linear 1-server
AnonRAM-poly [65] No Yes Yes Polylog (linear worst-case) 2-server
GORAM [66] Yes No Partial Polylog 1-server
PIR-MCORAM [67] Yes Partial No Linear 1-server
Metal (this paper) Yes Yes Yes Polylog 2-server
Table 2.1: Comparison of multi-user ORAM schemes when there are an unbounded number
of malicious users. All the listed schemes assume the server(s) to be semi-honest. The server
computation complexity here is in respect to the number of files, assuming each file is of a
constant size. The comparison will be discussed in more detail in Section 2.10.
tities and file access patterns both from the server and from malicious users. Figure 2.1 lists the
various types of metadata that Metal protects. The scheme with the closest security guarantees,
PIR-MCORAM [67], has a very high overhead. Although Metal is not a lightweight system either,
it makes a big leap toward reaching practicality—Metal’s access latency is ≥ 500× (for amortized
latency) or ≥ 105 × (for worst-case latency) shorter than that of PIR-MCORAM, and in absolute
value, only a few seconds.
PIR-MCORAM’s very high overhead is largely due to an unfortunate lower bound that chal-
lenges this research area: Maffei et al. [67] showed that, to hide access patterns, a single-server
file-sharing system must basically scan all the files; hence, PIR-MCORAM scans every file in the
system for each file access. To avoid this impossibility result, AnonRAM-poly [65] adopts a two-
server model, where at least one server is honest. This model is also adopted by much prior work
in related settings for similar reasons [71–74]. Metal adopts this two-server model as well.
Unfortunately, even in the two-server model, efficiency remains a troubling challenge. Putting
aside the fact that worst-case accesses in AnonRAM-poly are still linear, a significant inefficiency
in AnonRAM-poly is that each user’s access requires the user to generate a heavy zero-knowledge
proof (to prove to the servers that this user did not maliciously deviate from the protocol). Generat-
ing such a proof is already 20× times slower than the overall access time of Metal (as described in
Section 2.7.6). Further, AnonRAM-poly does not support file sharing; extending AnonRAM-poly
to file sharing is challenging because its design makes it difficult to hide the access patterns across
files with different sharing permissions. Finally, given the complexity, the authors of AnonRAM-
poly have not implemented AnonRAM-poly.
With Metal, we propose a radically different design than AnonRAM-poly, which centers around
file sharing and obviates the need for zero-knowledge proofs while resisting malicious users. In
Section 2.7, we evaluate Metal extensively and show that its access time is within a few seconds
for a file store of 220 64 KB files. We now overview Metal’s techniques.
the required permission, then the user can fetch or share a file. To understand how Metal performs
these operations securely, we now overview Metal’s techniques, organized by the challenges they
address.
Challenge: Single-user nature of ORAM. ORAM [68–70, 75] can hide access patterns, but it
supports only a single client. To share an ORAM with many users, prior work proposes trusting a
proxy or trusting all users [76–80], which does not guarantee security in the presence of malicious
users.
Primitive Metal: Inspired by ORAM, we start with a primitive construction of Metal (Sec-
tion 2.5.2), which we describe as follows. In Primitive Metal, the two servers interact and run
secure two-party computation (S2PC) [81–83], as we illustrate in Figure 2.2. The reader should
intuitively think that what happens inside S2PC is “safe” (albeit expensive as we will see), and
what happens outside is “unsafe”. Now, the servers can run a global single-user ORAM client
inside their S2PC, which ensures that neither server sees the state of this global ORAM client, as
well as other components for access control and capability sharing. To store and share files, the
users communicate with the global ORAM client in the S2PC, which accesses files stored in the
servers’ ORAM storage on a user’s behalf.
Server 1
User User
S2PC File Access
Metal-ORAM
Metal-AC
Client Access Control Metal-SHARE Client
Capability Sharing
Server 2
This primitive scheme enables users to share files. For the servers to implement a service in
this way, the S2PC protocol needs to be reactive [84–86]: the servers repeatedly take input into the
S2PC, update some internal state, and provide output.
Challenge: Inefficiency of Primitive Metal. Though Primitive Metal has the desired security
guarantees, it is highly inefficient. Our evaluation in Section 2.7.7 shows that the client ORAM
access in S2PC requires a huge amount of server-server communication: ≥ 1 GB for each file
access. It also requires ≥ 75 s to access one file in a store of 220 64 KB files.
Metal-ORAM: In Primitive Metal, the communication is high because the trusted global ORAM
client, which runs inside S2PC, takes the file contents as input. We address this problem using
our technique called synchronized inside-outside ORAM trees (Section 2.5.3), as follows. Metal
maintains two ORAM trees on the servers: one containing the file contents called DataORAM and
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 9
another one containing files’ indices and locations called IndexORAM. DataORAM stays outside
S2PC because it is large, and IndexORAM stays inside S2PC because it is small. Metal maintains
the two ORAMs synchronized: after locating a file’s identifier in the IndexORAM, one can find
the file contents at the same location in DataORAM.
To keep the two ORAMs synchronized, the S2PC must apply the maintenance operations of an
ORAM to IndexORAM and DataORAM in the same way; these operations include path selection
and stash eviction. However, it is unclear how to capture these operations inside S2PC and how to
apply them securely to DataORAM, which is outside S2PC.
For this problem, we develop our tracking and permutation generation technique (Section 2.5.6),
which works as follows. During the ORAM access in IndexORAM, our circuit inside S2PC tracks
the transformations applied to IndexORAM and converts them into a permutation. It turns out
that the transformations are not naturally a permutation, but by “resurrecting” missing blocks in
a certain way, Metal succeeds to create a permutation. Then, we use a custom S2PC protocol to
apply the permutation securely and efficiently to DataORAM.
Altogether, in Metal, the general S2PC no longer touches the file data but works with the po-
sition maps and block locations, which reduces the overhead by ≈ 20×. We call this scheme
Metal-ORAM, and we expect these techniques to be useful for other secure multi-party computa-
tion (SMPC) protocols.
Challenge: Performing oblivious access control in S2PC. A natural solution for file access
control is to obliviously verify, inside S2PC, that the user’s name appears in the file’s access control
list. However, since a file could involve thousands of users, checking the access control list in S2PC
is expensive.
Metal-AC: Metal designs capability-based anonymous access control, which we call Metal-AC
(AC refers to access control); the unit of our access control, the capability, is inspired by the
classical systems concept of a capability [87]. The key differences in Metal are that, given a
capability, the servers cannot tell which file (or user) the capability is for, and that the capability is
implemented cryptographically, checked inside S2PC by the two servers. By doing so, Metal-AC
avoids the heavy handling of access control lists.
Challenge: Establishing anonymous identities. To preserve user anonymity, users must hide
their real-world identities (e.g., email addresses) when sharing files. Simply choosing a pseudonym
is insufficient because the servers or the malicious users can link the activities that involve this
pseudonym together. Even if a user creates multiple accounts, the sharing of files between these
accounts can link them together.
Metal-SHARE: In Metal, users share files via anonyms, each of which is a secret identity ex-
clusively shared between a pair of users. Different from traditional pseudonyms, a user’s many
anonyms are unlinkable to one another, so they will not reveal a user’s identity even when put
together. Metal’s anonyms also permit one-sided anonymity; e.g., an anonymous whistleblower
can send a file to a specific journalist.
We call this scheme Metal-SHARE. This scheme is efficient: even if a user creates millions of
anonyms, the user’s effort to receive a new file does not increase with the number of anonyms—
Metal’s client accumulates all file capabilities shared with a user even when they are under different
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 10
anonyms.
When designing Metal with these strong privacy guarantees in mind, a number of other chal-
lenges popped up. For example, some naive solutions enable the servers to see how many files
a user has received. Padding to the maximum number of files for each user is very expensive.
Instead, Metal instantiates capability broadcast (Section 2.6.2) on the servers, which hides the
per-user numbers of received files.
We describe Metal’s security guarantees (Section 2.2.3) and provide security proof sketches in
the paper.
2.2 Overview
We now describe Metal’s system architecture, threat model, and security guarantees.
Bob then uses the ReceiveCapability function to receive the capability for this file from the
servers, in which Bob knows the file is sent through ABob . Since Bob can have many anonyms and
Bob only gives ABob to Alice, Bob knows that the file is from Alice, assuming that her client is not
compromised.
• Anonymity network. Achieving anonymity requires users to hide their IP addresses. Metal
assumes that each user uses an anonymity tool to contact the servers. Many such tools exist,
providing varying degrees of anonymity, such as Tor [88], secure messaging [89–96], and a
trusted VPN proxy.
• Out-of-band communication. Before sharing a file, a user must first know the recipient’s identity
(an anonym in Metal); otherwise, the user does not even know who should receive the file. Ex-
changing the anonym requires some out-of-band communication between the two users, which
is similar to a Bitcoin user’s telling another user its wallet address. The users can meet in person
or use secure messaging. Metal strives to minimize the use of such out-of-band communication:
every two users only need to use this channel to exchange their Metal anonyms once, and the
subsequent file-sharing activities will be performed within Metal.
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 12
(a) Anonymity: Neither the servers nor anyone in MalUsers can distinguish the honest user U
from other honest users.
(b) File secrecy and integrity: If user U has never granted anyone in MalUsers read or write
access to F , MalUsers learn nothing about F or cannot modify F , respectively.
(c) Read obliviousness: Neither MalUsers nor the servers know which file was read by user U ,
even if MalUsers have read/write capability to all files. That is, MalUsers cannot distinguish a
read operation from a completely different read, by another honest user, to another file.
(d) Write obliviousness: If U never gave anyone in MalUsers the read capability to F , neither
the servers nor anyone in MalUsers realizes that file F has changed. If someone in MalUsers
has read capability, they legitimately learn that the file is changed, but they do not learn who
changed it if more than one honest user has write permission to F .
(e) Read/write indistinguishability: Neither the servers nor anyone in MalUsers knows whether
a honest user’s file access request is read or write, if none of MalUsers has read capability to
that accessed file.
For file sharing, consider another user V who wants to share file F with U , and U owns two
anonyms AU,i and AU,j where i 6= j.
(f) Capability sharing secrecy: If user V sends a file F ’s capability to U via AU,i , Metal does
not reveal to the servers or other users (besides U and V ) the following: U , V , F , AU,i , or that
U and V have access to F .
(g) Anonym unlinkability: Neither servers nor anyone in MalUsers can link AU,i and AU,j unless
U reveals this linkage to compromised users.
(h) Anonym authenticity: If user U gives anonym AU,i to someone in MalUsers, users in MalUsers
cannot send files to the other anonym AU,j that MalUsers do not know.
Formalism and proofs roadmap. Metal achieves the guarantees above based on common crypto-
graphic assumptions. In Section 2.8, we provide a simulation-based security definition and proof
for Metal-ORAM. In Section 2.4 and Section 2.6.1, we provide proof sketches for Metal-AC and
Metal-SHARE.
Non-guarantees. Metal does not hide when the user calls the API (timing) or which function the
user is calling (e.g., sharing a permission vs. reading a file). These two leakages can be hidden by
padding in time and in computation, which are easy to add to Metal (at an extra cost), as we discuss
in Section 2.9. Metal does not protect against denial-of-service attacks by a server, and Metal does
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 13
not protect against either server being malicious (beyond semi-honest), which we leave to future
work.
R S2PC by O
R Yao’s Protocol O
Client Client
(2)
R O(2)
ORAM share Server 2
Figure 2.3: Metal’s two servers run Yao’s protocol to take user input and access ORAM storage.
Client sending a request. As Figure 2.3 illustrates, a client sends its request R (e.g., which file
to access) to the two servers secret-shared (e.g., using XOR secret-sharing) into R(1) and R(2) . In
this way, no server sees the request in the clear. Server i will receive R(i) . Inside S2PC, the servers
combine the two shares R(1) and R(2) to create R.
Metal’s servers also secret-share the ORAM store such that neither server knows the data stored
in the ORAM. But, if they want to access some parts of the ORAM, they take their local shares of
those parts as input and reconstruct those parts inside the S2PC. The two servers then update the
ORAM store by outputting the updated shares from the S2PC.
Yao’s protocol. Our S2PC is based on Yao’s garbled circuits protocol. We present Yao’s protocol
as a black box here and in the form relevant to our S2PC. Yao’s protocol enables two parties (here,
the two Metal servers) to jointly compute a function over their own secret inputs without leaking
the secret inputs to each other. Concretely, suppose that Server 1 has secret input x(1) and Server
2 has secret input x(2) , they can compute a function f (x(1) , x(2) ) → (y (1) , y (2) ) such that Server i
learns only its own input x(i) and function output y (i) , and nothing else about the other party’s input
or function output. To supply a random tape for the function, each server independently samples a
share of the random tape, takes it as input to S2PC, and reconstructs the random tape by XORing
the two shares inside the S2PC. By doing so, one of the two servers does not know the random
tape.
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 14
In Metal, x(i) will consist of R(i) , the ORAM share stored by Server i, and some other state.
The function f processes the user’s request by checking the capability and running ORAM client
operations or file-sharing operations. The result of f is y, which consists of the response O to the
client (as Figure 2.3 shows), an update to the ORAM, and other changes to the servers’ state. The
S2PC outputs O to the client in secret shares O(1) and O(2) , where each server has one share.
Client receiving a response. The servers send the two shares to the client, who can put them
together and obtain output O.
Metal’s S2PC uses Yao’s protocol in a stateful and reactive manner like some works in S2PC
[84–86, 100–102]. That is, it does not compute just one function f within S2PC, but instead it
runs a sequence of functions {f1 , f2 , ...} continuously—this sequence of functions can keep state,
take new inputs, reveal some outputs midway, and continue processing in this manner for many
steps. This reactive property captures the fact that the servers offer a service, not only a one-time
computation. The stateful nature is needed to maintain IndexORAM state.
– When the user receives a capability of a file that another user shares with this user (by calling
the ReceiveCapability function), the user obtains a capability for this file, which is generated by
the servers during the other user’s invocation of SendCapability (described in Section 2.6). The
user can use this capability to access the file but not to share the file.
To grant a capability, the S2PC between the servers decides an access description (e.g., file F with
permission PF ) and proceeds as follows: the S2PC reconstructs the capability key, computes the
capability, and returns the capability in the form of secret shares to the user’s client, as described
in Figure 2.4.
Server 1 Server 1
(1) (1)
C C
C C C C
Generate Verify
Client Client (2)
C (2)
C
Server 2 Server 2
Grant a capability Verify a capability
Figure 2.4: Metal-AC grants or verifies a capability C using the capability key, which is secret-
shared between the two Metal servers.
Verifying a capability. Since users can be malicious, each user needs to present a capability to
the servers before accessing some file. To start with, the user’s client splits the capability into two
secret shares and provides one to each server. Since each time the client uses fresh randomness for
secret sharing, the servers do not know if the same capability is used again. Then, as Figure 2.4
shows, the S2PC uses the capability key to decrypt the capability.
If the access description is valid for the operation the user wants to perform, Metal-AC in-
vokes Metal-ORAM or Metal-SHARE as in Figure 2.2 and provides the access description to the
corresponding component inside S2PC.
Security proof sketch. Metal-AC uses authenticated encryption to hide the information inside
the capability from the user, which avoids the leakage of the file owner due to file identifiers’
being reserved in owner-specific continuous ranges during the account creation, and to prevent
a malicious user from forging a capability. Metal-AC uses S2PC to distribute the access to the
capability key, so that one server cannot grant a capability or see what is inside the capability.
By using secret shares to exchange the capability between the client and the S2PC, anyone of the
servers does not even see the capability.
In relation to the security guarantees we described in Section 2.2.3, Metal-AC ensures anonymity
since none of the two servers can see what the capability is, and the user does not have the capa-
bility key; later in Metal-ORAM (Section 2.5.3), we can see that Metal-AC helps us achieve file
secrecy and file integrity by allowing only those users with the valid capability to access that file.
Metal-AC does not leak the capability as well as the access description inside the capability, which
helps achieve obliviousness and read/write indistinguishability.
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 16
Figure 2.5: Metal-ORAM moves data out of Yao’s protocol (Section 2.5.3). The data is too large
to be processed efficiently in Yao’s protocol.
Each block either is empty or stores the data of a file D[x]. Such a block consists of the index
x, the data D[x], and its position—the root-to-leaf tree path where this block resides. If a block is
currently buffered in the stash, the block stores which tree path the block will be evicted onto.
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 17
To locate a block in this tree, Circuit ORAM keeps a position map, which maps each index
x ∈ {1, 2, ..., N } to the path on which the block resides if the block is not buffered in the stash.
The position of D[x] in the position map should match the position field in the block that contains
D[x].
Reading. To read a file, the two servers in the S2PC first look up the file’s position in the position
map, then look up the block by a linear search of both the stash and the path corresponding to this
position. The two servers can then read the data in the block in S2PC. After reading the file, the
two servers assign a new random position to this block, put the block into the stash, and update the
position map accordingly.
Writing. To write a file, the two servers follow the similar steps, but when they put the block back
into the stash, the two servers replace the data with the new data from the user. Note that accesses
to the position map also need to be oblivious. Metal uses the standard recursive technique [70, 75,
103] to store the position map in ORAM.
Stash eviction. After each read and write, Circuit ORAM needs to perform a stash eviction, in
which some blocks buffered in the stash are evicted into the tree to ensure that the stash does not
overflow. For each eviction, Circuit ORAM chooses two paths of the tree [104] and rearranges the
blocks in the stash and the blocks on these two paths. This rearrangement is the heaviest step and
involves a lot of technical details less relevant to describe here but included in [100].
The bottleneck of Primitive Metal. The primitive scheme is slow due to the data-intensive opera-
tions inside Yao’s protocol. Recall that Yao’s protocol builds on garbled circuits; processing a large
amount of data leads to many garbled gates being generated, transmitted, and evaluated, resulting
in heavy computation and communication. In particular, the primitive scheme is (1) reading all the
blocks in the stash and on an ORAM path and (2) rearranging all the blocks in the stash and on
two ORAM paths during stash eviction.
Metal-ORAM avoids this bottleneck by moving all the file data out of Yao’s protocol and
processing such data with more efficient, customized protocols.
related to the block history [109], and revealing i to the servers breaks obliviousness. Therefore,
Metal-ORAM combines threshold decryption and our secret-shared doubly oblivious transfer pro-
tocol (Section 2.5.4) in a way that the user receives the decryption of the i-th block on path p in
DataORAM, i.e., the file data D[x], but neither server learns i or D[x].
After reading a file, the two servers need to perform the ORAM management routines: they put
the index block into the stash of IndexORAM and put the data block into the stash of DataORAM.
These blocks will later be evicted into the tree. We will describe the details of the reading protocol
in Section 2.5.4.
Writing. To write a file D[x], the two servers run the protocol in a similar manner, but we want
to ensure that (1) the user with write permission does not see the file contents (since such a user
might not have the read permission) and (2) the user-provided data is inserted into DataORAM.
Thus, the writing protocol makes the following changes: First, instead of reading the i-th block
in the array, the protocol reads a dummy block, which contains empty file data; therefore, a user
with only write capability does not see any file data in this operation. Second, when the two
servers insert a data block back into the DataORAM’s stash, the two servers instead write the user-
provided block into the stash. The user-provided block is created in the following manner: the user
secret-shares the file contents between the servers, each server encrypts one share, and the servers
combine the two encrypted shares.
To make reading and writing indistinguishable, we merge their protocols as one protocol such
that the servers are running the same protocol for reading or writing, with little overhead, as we
will show in Section 2.5.4 and Section 2.5.5. This merged protocol does not reveal whether it is
reading or writing to one of the servers, and the protocol still preserves file secrecy and integrity:
a user with read capability cannot modify the file, and a user with write capability does not see the
file data.
Stash eviction. The last aspect we need to take care of is stash eviction, which is needed after
every read or write. The stash eviction rearranges some blocks in the tree. The challenge is that
if Metal-ORAM only evicts the stash in IndexORAM, the synchrony between IndexORAM and
DataORAM breaks.
Metal-ORAM remedies the synchrony by “somehow” capturing the rearrangement that hap-
pens to IndexORAM and also applying it to DataORAM. We cannot simply reveal the rearrange-
ment to the servers since doing so breaks the ORAM obliviousness. Instead, Metal-ORAM pro-
vides a technique for secure tracking and permutation generation, described in Section 2.5.6, to
convert Circuit ORAM’s rearrangement into a permutation. Then, Metal-ORAM employs a dis-
tributed permutation protocol to apply the rearrangement to DataORAM, such that the two ORAM
trees are re-synchronized.
and the (3 × h) blocks on the path. Let m ~ be the array of N = (|stash| + 3 × h) blocks that these
blocks form. The S2PC knows the location i; it secret-shares i between the two servers, such that
Server 1 knows i(1) and Server 2 knows i(2) . Below, we describe our secret-shared doubly oblivious
transfer (SS-DOT) protocol, at the end of which Server 2 receives the i-th (encrypted) block in the
array, without any server learning what i is. The fetched block is encrypted under ElGamal, and
the decryption key is secret-shared between the two servers, so the two servers can run an existing
threshold decryption protocol [65] and return the file contents to the user in a secret-shared form.
We then add read/write indistinguishability to this fetching operation. Recall that if a user only
has write capability, the user should not see the file’s data. To ensure such file secrecy as well as to
make read/write indistinguishable, the two servers add a dummy block that does not contain any
file data at the end of the array. The two servers now search from an array of (|stash| + 3 × h + 1)
blocks. If the user writes to a file D[x], the S2PC secret-shares i = (|stash| + 3 × h + 1) instead,
such that the two servers fetch the dummy block, and the user sees only dummy data. This dummy
block is unused when the user is reading a file; it merely stays in the array for padding.
Secret-shared doubly oblivious transfer. To fetch the i-th block, Metal uses the following cus-
tomized protocol. Recall that each server has a share of i: i(1) and i(2) , respectively. Server 1 has
an array of file data blocks m ~ = {m1 ,m2 , . . . ,mN }. In our protocol, N = |stash| + 3 × h + 1,
and Server 1 needs to rerandomize the blocks read from DataORAM, using the functionality of
ElGamal encryption, before executing the SS-DOT protocol.1 This protocol has Server 2 obtain
the i-th block without either server learning i.
Oblivious transfer (OT) [110, 111] does not suffice for our task because in OT one server knows
the index. Doubly oblivious transfer [112] does not suffice either because it does not support two-
party secret-sharing and focuses on one-out-of-two transfer instead of one-out-of-N .
There are many ways to implement this simple functionality in S2PC, so we do not claim
much novelty for this procedure. Yet what is important for us is to find a way that is efficient for
our setting because this operation runs for every file access. We develop a simple and efficient
procedure as follows:
1. The two servers S1 and S2 , inside S2PC, reconstruct i from its shares i(1) and i(2) , and generate
N keys {k1 , . . . , kN } such that S1 receives as output all these keys, and S2 receives only ki .
2. For each j ∈ {1, ..., N }, S1 uses kj to symmetrically encrypt 0 and mj to obtain ciphertexts zj
and cj , respectively, with authenticated encryption. S1 shuffles all the (zj , cj ) pairs and sends
them to S2 .
3. S2 uses ki to decrypt the first ciphertext of each pair: only one, say zj , will decrypt to 0. It
then decrypts the corresponding cj , obtaining mi . Note that j is independent of i because of
Server 1’s shuffle.
This procedure has the advantages that the computation in S2PC is independent of the length of
mi and that the messages mi are symmetrically encrypted, which has small ciphertext expansion
and efficient encryption/decryption.
1
A trick to implement this rerandomization efficiently is to observe that Server 2 only sees one of these N blocks,
and thus one can rerandomize these N blocks using the same randomness, which saves a lot of computation.
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 21
Security proof sketch. The security of SS-DOT, i.e., obliviousness for both parties, is a direct
result of the security of S2PC and authenticated encryption.
Tracking. Before the stash eviction, as Figure 2.6 shows, Metal-ORAM attaches some “trackers”
to the index blocks inside S2PC. Next, it performs the stash eviction per the ORAM algorithm and
then observes how the trackers moved. In Circuit ORAM’s stash eviction, some trackers disappear
because the blocks that they were attached to were deleted (indicated by ‘---’ in Figure 2.6). Thus,
the list of trackers directly pulled from IndexORAM after the eviction is incomplete (i.e., with
empty slots), as shown in Figure 2.6’s red area. We give the details of tracking in Figure 2.7.
Permutation generation. These missing trackers prevent us from creating a permutation directly.
Hence, Metal-ORAM brings back those numbers to the empty slots, as Figure 2.6’s green area
highlights. The resultant list of trackers becomes a permutation subsuming the changes in In-
dexORAM. Metal-ORAM feeds this permutation into the distributed permutation described in
2
The permutation does not explicitly remove the previous version’s data block from DataORAM: since the index
of the previous version has been deleted in IndexORAM, that data block becomes inaccessible (treated as dummy)
in our construction. The previous version’s data block may be indirectly discarded later, as a result of a permutation
process shown in Section 2.5.5.
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 23
Section 2.5.5 to apply the permutation to DataORAM. Thus, the IndexORAM and DataORAM
become re-synchronized, as desired, shown in Figure 2.7.
We have described how stash eviction works in our synchronized inside-outside ORAM trees.
In our implementation, Metal-ORAM combines the permutation in Section 2.5.5 with the re-
synchronizing permutation inside the S2PC, so every file access only uses one distributed per-
mutation.
Server 1
generate AU,i
AU,i IDU, i CV,F CU,F CU,F Enc(BKU, i ||CU,F) decrypt
AU,i decrypt decrypt/encrypt encrypt
i,CU,F
user’s anonym key CV,F user’s broadcast key
anonym capability key broadcast
master key master key broadcast
Receiver U Owner V Receiver U
Server 2
Capability broadcast. When a user V sends a capability to U , V puts the capability on the servers
so that the receiver U can later retrieve it from the servers. This allows U and V to share files even
if they will never be online at the same time.
To avoid leaking metadata through network patterns of a user, Metal-SHARE has Server 1
publish a list of encrypted capabilities so that each user can download this list. A user can only
decrypt those ciphertexts destined to the user. This is similar to a blockchain where all nodes
download the blocks, but only some of the blocks contain transactions relevant to the node. In
contrast to a blockchain, though, in Metal-SHARE, the blocks are much smaller than in a regular
blockchain, and users only need to download and organize the capabilities periodically.
To implement this broadcast, Server 1 keeps a capability broadcast list that contains the en-
crypted capabilities for users to download. The two servers will encrypt, inside S2PC, each ca-
pability under the recipient’s broadcast key, which the user receives during the account creation
from the two servers’ S2PC. When a user’s client wants to download the list, Server 1 shuffles the
capabilities in the list before sending them to the client.
After user V obtains the capability, V can—in the future—use this capability to access the file,
without interacting with U . If U wants to revoke the permission, U must discard the old file, create
a new file, and share the new file with other users who are supposed to retain the permission.
To prevent the broadcast list from growing monotonically, Metal-SHARE has each encrypted
capability in the list to be deleted after a fixed interval (e.g., three days).
Example. We now illustrate how to share a capability. Suppose that user V owns file F and wants
to send the read capability of file F to another user U , as Figure 2.8 shows. The procedure is:
1. Get the receiver’s anonym. User V obtains one of U ’s anonyms from U , say AU,i , as we
discussed in Section 2.2.2. This anonym can be used for all future file-sharing activities from
V to U .
2. Send a capability. User V who owns file F requests the servers to grant a capability for reading
F to the anonym AU,i . The servers check V ’s capability CV,F , create a read capability CU,F for
user U , and encrypt CU,F together with i under U ’s broadcast key, as Figure 2.8 shows. The
ciphertext of CU,F is appended to the capability broadcast list.
3. Receive a capability. User U ’s client periodically downloads the new capability ciphertexts
from Server 1’s broadcast list and uses U ’s broadcast key to decrypt each ciphertext. In this
manner, it finds capabilities that are destined to U , one of which will be capability CU,F with
the anonym index i and the type of permission. U can learn which anonym was used by the
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 25
sender based on i. If AU,i was only provided to V , U knows that this file is from V .
Figure 2.9: Algorithms of the customized encryption that instantiates anonyms; the use of Pail-
lier encryption follows the common Paillier encryption syntax. Without loss of generality, we
assume that the message size of the Paillier encryption set up by security parameter λ is larger
than |s| + 2ρ + 1 bits where ρ is the statistical security parameter (80 bits in our implementation).
This step avoids the linkage among multiple uses of AU,i . The sender V rerandomizes the en-
crypted secret shares using the additive homomorphism in Paillier encryption, as AnonymRerand
in Figure 2.9 shows.
In this rerandomization step, we adapt a trick from [120] to rerandomize the anonym. As fol-
lows, ρ denotes the statistical security parameter. Before the rerandomization, the distribution of
each of s(1) , s(2) is statistically indistinguishable from a uniform distribution in {0, 1, ..., 2|s|+ρ }
as a result of secret sharing. When we rerandomize the two shares by homomorphically adding
r ←$ {0, 1, ..., 2|s|+2ρ }, the distribution of each of the new s(1) , s(2) is now statistically indistin-
guishable from a uniform distribution in {0, 1, ..., 2|s|+2ρ } and is statistically independent of the
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 27
original value of s(1) or s(2) , which gives us the following guarantee: even if a user calls Send-
Capability many times using the same anonym, one of the two servers, knowing the previous
rerandomized anonyms, cannot link these anonyms together.
Security proof sketch. Anonym authenticity can be proved by reducing to the unforgeability of
MAC. Anonym unlinkability can be reduced to the security properties of Paillier encryption and
additive secret sharing. Since our secret sharing has a customized design, we detail its security as
follows:
• Sharing. Recall from Figure 2.9 that the secret s is shared into s(1) ←$ {0, 1, ..., 2|s|+ρ } and
s(2) = s(1) + s where ρ is the statistical security parameter. The distribution of each share
is statistically indistinguishable from a uniform distribution in {0, 1, ..., 2|s|+ρ }. Since the two
shares are then encrypted under separate Paillier keys, if an attacker only has one of the private
keys, the attacker sees only one share, not s.
• Rerandomizing. As discussed above, the rerandomization algorithm homomorphically adds r to
both shares, and the distribution of each new share (inside the Paillier encryption) is statistically
indistinguishable from a uniform distribution in {0, 1, ..., 2|s|+2ρ } even with the knowledge of the
original share. One of the servers does not learn s or the shares in the original anonym.
N capabilities every interval T . In case of insufficient capabilities, the user pads the number to the
bound N . If a user cannot retrieve all the capabilities (more than N ), the user retrieves the rest of
them the next time. Unfortunately, this solution leaks use patterns, as we now discuss.
Consider the following scenario: When users receive file capabilities, they may subsequently
perform a few noticeable operations, e.g., adding a new line to the file. If a user has too many
incoming capabilities and many of them are deferred to be downloaded the next time in this ap-
proach, other users may notice this user’s delayed responses to some files and learn that more than
N files are sent during an interval. Inevitably, avoiding this leakage requires each user to retrieve
all his/her capability ciphertexts as in Metal-SHARE.
Making broadcast efficient. Though capability receiving has to be linear, Metal-SHARE im-
proves the efficiency and makes it practical for the client. In Metal-SHARE, the capabilities are
encrypted symmetrically under the user’s broadcast key (derived from the broadcast master key,
which is secret-shared between the servers). As a result, the encryption, transmission, and decryp-
tion costs become small. Concretely, if the broadcast list has 104 capabilities, a user only needs to
download 1 MB and can decrypt all of them in 10 ms.
2.7 Performance
In this section we discuss Metal’s asymptotic efficiency and concrete efficiency, compare Metal
with PIR-MCORAM and AnonRAM-poly, and compare Metal with Primitive Metal to show how
Metal’s techniques improve the performance.
– Each server’s compute time is Oλ ((D + log2 Nfile ) log Nfile ) · ω(1).
– The client’s compute time is Oλ (D).
– The server-server communication (including the communication for SS-DOT and distributed
permutation) is Oλ ((D + log2 Nfile ) log Nfile ) · ω(1).
– The client-server communication is Oλ (D).
Cost for ReceiveCapability. ReceiveCapability mainly returns the user the requested part of the
broadcast list. At the end of each epoch, Server 1 shuffles the encrypted capabilities, incurring an
additional cost. Given that Nuser , Nfile , Nanonym are polynomially bounded by the security parameter
λ, we can write the asymptotic efficiency as follows:
– Server 1’s compute time is Oλ (Nlist log Nlist ) when shuffling.
– The client’s compute time is Oλ (Nlist ).
– The client-server communication is Oλ (Nlist ).
2.7.2 Implementation
We implemented Metal in C/C++. We use Obliv-C [124] for Yao’s protocol with the improved
half-gate garbling scheme for multi-instance security, as described in [125, 126], which provides
125-bit security. We use Absentminded Crypto Kit [127] for ORAM and OpenSSL for TLS.
For Metal-AC’s authenticated encryption, we use the EAX mode [128], which we deemed to
be the most efficient mode for our setting after an extensive search.
The rerandomizable encryption in Metal-ORAM is implemented using ElGamal encryption
over Curve25519-Ristretto group [106–108] with a constant-time encoding and a few optimiza-
tions. This scheme is about 80× faster than standard ElGamal encryption over a Schnorr group
[105] and 200× faster than standard Paillier encryption [114] for our setting.
Table 2.3: The latency of user-facing API functions, measured with and without Tor, for a store
of 220 64 KB files. The result is the average of one hundred measurements, with the confidence
interval under two-sided Student’s t distribution with 90% confidence.
4.0
3.5
3.0
Time (s)
4KB 64KB
2.5 16KB
2.0
1.5
Figure 2.10: File access latency vs. the number of files / file size. The result is the average of
one hundred measurements.
Metal-ORAM does not support parallel accesses since Circuit ORAM is not parallel. Thus, a
user who wants to access a file has to wait for previous accesses to be complete. This restriction
has the benefit of strong consistency. But, one who wants to make Metal-ORAM more paralleliz-
able can distribute the computation (described in Section 2.9) or extend our techniques to parallel
ORAM (e.g., Circuit OPRAM [130]).
Network I/O and the size of garbled circuits. We measured the inter-server network I/O and the
size of garbled circuits (the number of AND gates) in Table 2.5 for different ORAM implementa-
tions. We can see that the network I/O grows almost logarithmically to the number of files. The
circuit size, which represents the amount of computation in Yao’s protocol, does not grow with the
file size.
large, PIR-MCORAM has a high latency, especially the worst-case time. For 220 64 KB files, its
amortized time for file access is ≥ 500× Metal’s latency (of 3.62 s). Also, PIR-MCORAM leaks
user identities, which Metal hides.
• Storage overhead reduction. Table 2.5 shows that Primitive Metal soon runs out of memory
because the implementation has a storage size blowup of 128×. Instead, Metal stores the data
outside S2PC and therefore has a smaller blowup.
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 33
# Files Amortized time (s) Network I/O (MB) # ×106 AND gates Worst-case time (s)
12 16 20 12 16 20
File size 2 2 2 2 2 2 212 216 220 212 216 220
(This paper) Metal, as discussed in Section 2.7.4. This is the end-to-end benchmark including time for Metal-AC.
4 KB 1.34 1.43 1.61 25.7 39.0 55.2 1.43 2.19 3.16 ? ? ?
16 KB 1.66 1.82 2.05 32.0 46.7 64.4 1.43 2.19 3.16 ? ? ?
64 KB 2.85 3.16 3.62 60.7 81.4 105 1.43 2.19 3.16 ? ? ?
Primitive Metal using Circuit ORAM [100], as discussed in Section 2.7.7, considering only ORAM access time.
4 KB 3.56 4.46 † 430 508 † 13.5 16.0 † ? ? ?
16 KB 13.6 16.2 † 1690 1976 † 53.1 62.2 † ? ? ?
64 KB 55.5 66.8 † 6717 7844 † 212 247 † ? ? ?
Primitive Metal using SqORAM [101], as discussed in Section 2.7.7, considering only ORAM access time.
4 KB 3.10 14.7 † 319 1477 † 6.57 30.2 † 437 9810 †
16 KB † † † † † † † † † † † †
64 KB † † † † † † † † † † † †
Primitive Metal using Floram [102], as discussed in Section 2.7.7, considering only ORAM access time.
4 KB 3.62 4.55 9.76 100 129 290 2.77 2.77 2.77 4.04 9.33 88.0
16 KB 6.67 9.80 31.2 399 514 1152 11.0 11.0 11.0 7.54 30.1 342
64 KB 19.5 32.3 † 1592 2048 † 44.1 44.1 † 24.0 110 †
Table 2.5: Metal-ORAM’s file access latencies compared with Primitive Metal (? =
same as amortized, † = out-of-memory). Network I/O is measured using iftop. All results
are the average of (at least) one hundred ORAM write operations.
• Latency reduction. By extrapolating Table 2.5’s result, we estimate the file access latency for
Primitive Metal is ≥ 75 s for 220 64 KB storage (for Circuit ORAM [100]). Metal uses tree-based
ORAM, which has a poly-logarithmic worst-case complexity and significantly less computation.
In particular, Metal avoids the linear worst-case time as in SqrtORAM [101] and Floram [102].
• Network I/O reduction. Metal reduces the amortized network I/O because it no longer does
data-intensive computation in Yao’s protocol (as shown in the circuit size in Table 2.5) and only
transfers a few file data blocks per file access. If we extrapolate Table 2.5’s result, the amortized
network I/O of Primitive Metal is ≥ 1 GB accessing a 64 KB file in 220 files. In comparison, the
network I/O for Metal is about 105 MB, as Table 2.5 shows.
2.8.2 Simulator
The simulator Sim learns from FMetal-ORAM certain information about a request and knows the
system setup, such as the number of files supported by the servers. Sim works as follows:
Initialize. Run A and control A’s execution and network. Let A choose CompromisedSrvID and
forward it to FMetal-ORAM . Sample two ElGamal key pairs, one for each server. Send both public
keys and the compromised server’s private key to A. Merge the public keys into one global public
key. If CompromisedSrvID = 1, instantiate DataORAM.
Initiate a file access request. When A wants to send a request to the servers, forward the request
to FMetal-ORAM .
Forge the compromised server’s view. On receiving a message from FMetal-ORAM , simulate the
compromised server’s view and provide this view to A. In what follows, we describe the case when
A compromises Server 1, and we omit the case for Server 2, which is similar.
If the request is valid, parse the message from FMetal-ORAM as (NEW REQUEST, TargetData(1) , NewFileData(1) ,
P ,(1)
CF F ) and run as follows:
– invoke the simulator for Yao’s protocol for the capability check.
– simulate the view in which Server 1 checked the format of NewFileData(1) and exchanged the
results of the format check with Server 2.
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 35
– invoke the simulator for Yao’s protocol for ORAM access to a random path in IndexORAM and
for sharing a fake block location (denoted by i); this step corresponds to reading the file index
in Section 2.5.3.
– simulate the SS-DOT to act as if Server 2 would obtain the i-th block on that path (or a dummy
block), as follows:
– invoke the simulator of Yao’s protocol for the first step of SS-DOT, which, within S2PC,
reconstructs i, samples N = |stash| + 3 × h + 1 keys, and outputs these N keys to Server 1
and the i-th key to Server 2.
– simulate the view where Server 1 read blocks from the (fake) storage, encrypted and reran-
domized the blocks as the protocol specifies, and sent the encrypted blocks to Server 2.
– simulate the threshold decryption as follows:
– encrypt TargetData(1) with the global public key (the ciphertext is denoted by FakeReadData).
– simulate the view where Server 1 engaged in the threshold decryption of FakeReadData with
Server 2, obtained TargetData(1) , and sent TargetData(1) to the user.
– simulate the joint encryption of the user-provided new file data (in secret shares), as follows:
– encrypt NewFileData(1) provided by the user.
– simulate the view in which Server 1 received a random encrypted data block from Server 2
and homomorphically added the ciphertext together; the resultant ciphertext is denoted by
FakeNewData.
– simulate the distributed permutation as follows:
– sample a permutation σ (1) of the numbers {1, 2, ..., |stash| + 6 × h − 1}.
– invoke the simulator for Yao’s protocol for the ORAM eviction in IndexORAM and the per-
mutation generation inside S2PC, where Server 1 received σ (1) .
– simulate the view where Server 1 constructed an array of the size |stash| + 6 × h − 1, which
began with data blocks from the two paths selected by the reverse lexicographic order and
followed by FakeReadData and FakeNewData.
– simulate the view where Server 1 rerandomized and permuted the array according to σ (1) and
sent the array to Server 2.
– sample an array of |stash|+6×h−1 encrypted dummy data blocks, denoted by FakePermutedArray.
– simulate the view where Server 1 received from Server 2 FakePermutedArray and stored it in
the storage.
– provide Server 1’s view to A.
P ,(1)
If the request is invalid because CF F is invalid, proceed as follows:
– invoke the simulator for Yao’s protocol for the capability check, which fails.
– simulate the view where Server 1 responded to the user that the request was invalid.
– provide Server 1’s view to A.
P ,(1)
If the request is invalid because the data format is incorrect (though CF F is valid), proceed as
follows:
– invoke the simulator for Yao’s protocol for the capability check, which passes.
– simulate the view where Server 1 performed the format check of NewFileData(1) .
– simulate the view where Server 1 exchanged the format check results with Server 2 and re-
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 36
The last hybrid, Hq−1,7 , has the same distribution as the real world’s view. The hybrid arguments
show that the simulated view is computationally indistinguishable from the real world’s view.
Therefore, we have the following theorem:
Theorem 1. (informal) Assuming standard cryptographic assumptions and in the random oracle
model, Metal-ORAM’s protocol provides the claimed security guarantees.
2.9 Extensions
In this section we discuss certain extensions to Metal.
Parallel accesses. We can leverage a system technique called quorum consensus [134]. For ex-
ample, we can improve the read performance by having K pairs of Metal servers with the same
file data but independent ORAM store. They can load-balance the user’s read requests and are
very likely to improve the throughput by K×. The write performance will decrease because a user
needs to submit the write request to all K pairs of the servers. In systems where the write requests
happen very infrequently, such a design can be helpful in reducing the average latency. Note that
this direction to improve the performance often has to sacrifice the read/write indistinguishability.
Padding to hide timing and type of operation. The leakage of timing and type of operation
can be hidden by padding in time and computation. To do so, we first modify Metal server API
functions to support a dummy mode that does not make any actual change but exhibits the same
execution patterns. We will not discuss how to implement this dummy mode, but it will rely mostly
on general techniques. Then, we ask each user’s client to routinely call each server API function;
when a client is expected to call a server API function but has nothing to do, the client simply
invokes the function in the dummy mode. Nevertheless, such padding is very expensive (e.g., the
broadcast list will be lengthy).
can be treated as one user’s multiple clients [76–80, 148]. A number of works add the support
of asynchronous access [76–80] and improve the security against malicious servers [148]. Multi-
cloud ORAM [85, 149] uses multiple non-colluding servers to achieve a high throughput, but it
does not support malicious users using the same ORAM store.
(4) Multi-user oblivious storage systems. Multi-user oblivious storage systems are more chal-
lenging since every single user is not fully trusted. There are only a few works in this direction
[64–67, 150, 151]. We discuss them as follows.
Secret-write PANDA [64] is a multi-user oblivious storage that does not support data sharing,
and thus differs from Metal in terms of functionality. Another disadvantage is that it needs to
bound the number of malicious users—which is difficult for systems with open membership—and
the performance degrades linearly to this bound. If the number of malicious users is not bounded
sufficiently at the setup of the scheme, the scheme cannot provide the desired privacy guarantees.
In addition, secret-write PANDA runs expensive cryptography, and the performance is likely very
impractical.
AnonRAM-lin and AnonRAM-poly [65] enable many mutually distrusting users to use the
same ORAM storage anonymously, but these users cannot share files. AnonRAM-lin has a linear
overhead, the performance of which can be prohibitive. And though AnonRAM-poly has a poly-
logarithmic overhead, extending it with file sharing is hard: it reveals at which level the data
block is in the Goldreich-Ostrovsky ORAM (GO-ORAM) [68, 69, 152], which involves file access
history. This is not a problem in AnonRAM-poly because users do not share files. But, if we add
file sharing, a group of users sharing the same file will now learn information about one another’s
access patterns. Fixing this problem requires substantial changes. Moreover, AnonRAM-poly has
a linear worst-case overhead, which is undesirable for practical systems [75].
GORAM [66] is a multi-user oblivious storage system with anonymity and obliviousness
against servers. Its limitation is that GORAM does not provide obliviousness against malicious
users, which makes GORAM harder to be used for open systems like Dropbox [153] where any
user can sign up. In addition, GORAM does not hide the owner of a file.
PIR-MCORAM [67] is a multi-user oblivious file-sharing system that uses a single server and
hides a very large class of metadata, including file access patterns (except whether the operation
is reading or writing), but it reveals the user identities to the server when the user writes to a
file. Metal improves over PIR-MCORAM by avoiding the linear complexity and hides the user
identities in both reading and writing. Compared with Metal, PIR-MCORAM has the benefit of
using only one single server.
There are also some multi-user ORAM schemes that focus on multiple semi-honest users’
sharing files [150, 151].
(5) RAM-model secure computation. Primitive Metal builds on top of RAM-model secure com-
putation (RAM-SC) [84, 85, 100–102, 154]. With Primitive Metal being limited in functionality
and performance, Metal represents a comprehensive solution for file storage.
(6) Miscellaneous. Secure messaging [89–94, 96] also strives to hide metadata in user communi-
cation. Nevertheless, it does not store data persistently and usually requires users to stay online,
CHAPTER 2. METAL: A METADATA-HIDING FILE-SHARING SYSTEM 39
which is difficult in practice. Metadata-hiding storage can also be constructed using hardware
enclaves [155–157], but it requires additional hardware assumptions.
40
Chapter 3
End-to-end encrypted file-sharing systems enable users to share files without revealing the file
contents to the storage servers. However, the servers still learn metadata, including user identities
and access patterns. Prior work tried to remove such leakage but relied on strong assumptions.
Metal (NDSS ’20) is not secure against malicious servers. MCORAM (ASIACRYPT ’20) provides
confidentiality against malicious servers, but not integrity.
Titanium is a metadata-hiding file-sharing system that offers confidentiality and integrity against
malicious users and servers. Compared with MCORAM, which offers confidentiality against mali-
cious servers, Titanium also offers integrity. Experiments show that Titanium is 5× to 200× faster
or more than MCORAM.
3.1 Introduction
Many companies offer cloud storage with end-to-end encryption, such as BoxCryptor [158],
Icedrive [159], Keybase Filesystem [135], MEGA [160], pCloud [161], PreVeil [136], Sync [162],
and Tresorit [137]. The enthusiasm in end-to-end encryption stems from the public’s concerns
about how personal data is misused [163] and how hackers have stolen databases of large enter-
prises [164].
However, end-to-end encryption is not the end, because cloud servers still see metadata. Meta-
data such as whom the user shares files with is similar to communication privacy—the Stanford
MetaPhone study [165] found that phone call metadata is “densely interconnected, susceptible to
re-identification, and enables highly sensitive inferences”. A former NSA General Counsel said,
“Metadata absolutely tells you everything about somebody’s life” [46].
Extracting secrets from access patterns has been an important area of security research, with
much success. There are works that deanonymize users using social connections [49, 50, 52–55,
166–168], compromise encrypted databases with access patterns [61, 169–174], and break secure
CHAPTER 3. TITANIUM: MALICIOUSLY SECURE FILE SHARING 41
Figure 3.1: Comparison of security guarantees between end-to-end encrypted storage and
metadata-hiding file-sharing systems.
Security Function Server overhead
Scheme Malicious Malicious Corruption File Inter-server
Anonymity Comp.
users servers threshold sharing comm.
GORAM [66] No No No Yes polylog
PIR-MCORAM [67] No Yes No Yes linear
(1, 1) N/A
AnonRAM-lin [65] Yes Yes No No linear
FHE-MCORAM [177] Yes Yes Partial† Yes linear
AnonRAM-polylog [65] Yes Yes No (1, 2) No polylog polylog
Metal [36] Yes Yes No √ (1, 2) Yes polylog polylog
DPF-MCORAM [177] Yes Partial† Partial† ( N − 1, N ) ‡ Yes linear N/A
Titanium (this paper) Yes Yes Yes (N − 1, N ) Yes polylog polylog
hardware with memory access patterns [175, 176]. These attacks might also be applied to end-to-
end encrypted file-sharing systems.
To understand the impact of metadata leakage, consider an application (Figure 3.1) and how
it would benefit from metadata protection. A whistleblower, Alice, wants to report a company’s
scandal to a journalist. If they communicate via the end-to-end encrypted storage, the servers know
that Alice shares files with a journalist and when the files are accessed. If the servers collude with
the company, the company may find out the whistleblower. Moreover, a hacker or a malicious
employee of the cloud may already know the whistleblower’s identity.
Alice and the journalist need a storage system that hides metadata from the servers. This
system must have anonymity, so the server does not learn whom it is talking to. It must hide access
patterns, so the server cannot infer the user behaviors.
CHAPTER 3. TITANIUM: MALICIOUSLY SECURE FILE SHARING 42
Does such a metadata-hiding file-sharing system exist? In the last decade, researchers have
been trying to design practical metadata-hiding storage [36, 65–67, 177]. This is challenging be-
cause there is almost nothing to trust: both users and servers can be malicious. We need malicious
security.1
is a solid-state drive, it would take twelve minutes.2 Moreover, solid-state drives naturally cannot
sustain such massive write accesses [184, 185]. A common solid-state drive with a lifetime write
limit of 150 TB can only sustain 1000 such writes, and then be disposed as e-waste.
For efficiency, it is necessary to avoid linear passes. This requirement rules out the single-
server construction due to a lower bound by Maffei, Malavolta, Reinert, and Schröder [67]: in a
single-server file-sharing system, hiding file access patterns must incur a linear overhead. This
lower bound holds even for the semi-honest server, meaning that the server can simply look at the
trace of disk accesses and infer file access patterns unless linear passes over the entire storage are
used.
For this reason, our construction, named Titanium, distributes trust across multiple servers like
[36, 65, 177]. Titanium can tolerate up to N − 1 out of the N servers being maliciously corrupted.
This is the best we can achieve without being subject to the lower bound. Titanium avoids linear
passes by using a sublinear oblivious access algorithm on the multi-server model, Circuit ORAM
[100], and making improvements that reduce its eviction overhead by up to a half.
users …
a user receives an outdated file from malicious servers. In Section 3.2.2, we show that malicious
servers (or users) can break integrity in some prior semi-honest constructions.
• Approach: We want files to be written only by users who are authorized to write, and wants
all the authorized readers to see the latest version of the file. This requires some sort of message
authentication code (MAC), over the entire file storage. What is challenging is that such MACs
must not reveal user or file identities. Titanium uses authenticated secret sharing [188] to store the
data, which hides the MACs from all the parties and thus retains confidentiality. Moreover, at least
one of the servers is assumed to be honest. The MACs enable this server to detect if an incorrect
version of the file is sent to the user or another file that the user did not request, thereby ensuring
integrity, as shown in Figure 3.3.
servers …
integrity via input
consistency checking
users …
Figure 3.3: Providing integrity in Titanium for (1) data in the storage and (2) user inputs and
outputs.
Goal 3: integrity for user inputs and outputs. Though authenticated secret sharing provides
integrity for the data storage, it does not provide integrity for data sent to and received from the
user. If a malicious server can modify such data, a user may read another file, write data into
another file, or share a file with a stranger. Attaching a signature does not work because it is
not anonymous. An existing primitive designed for the client-server model, secret-sharing non-
interactive proofs (SNIP) proposed in Prio [73, 189, 190], does not work either because it does not
offer integrity against malicious servers.
• Approach: We design a maliciously secure input/output protocol between the servers and users,
so users can confirm that the proxy receives the correct inputs and the user receives the correct
CHAPTER 3. TITANIUM: MALICIOUSLY SECURE FILE SHARING 45
outputs from the proxy, as shown in Figure 3.3. This protocol also provides privacy, as the servers
do not see the inputs and outputs. We adopt a tool commonly used in cryptographic proof systems,
Schwartz-Zippel lemma [191–193], for this consistency checking.
Goal 4: efficient file access. As Table 3.1 shows, several prior works [65, 67, 177] have a linear
server overhead. Though linear-time protocols could sometimes be faster than sublinear protocols,
as shown by Floram [102], it is not the case when there are a lot of files. Linear-time protocols may
cause a long waiting time for the users and incur an unreasonable amount of cost for the servers.
• Approach: Titanium distributes the trust among N servers in a way that it tolerates up to N − 1
servers being corrupted. This model allows Titanium to avoid the linear lower bound in [67].
Then, Titanium uses an existing sublinear oblivious access protocol, Circuit ORAM [100], and
makes improvements to reduce its overhead, as shown in Table 3.2. Our improvement removes a
significant amount of unnecessary computation in Circuit ORAM, and is equivalent to the original
algorithm.
Table 3.2: Comparison with the eviction in Circuit ORAM [100] and our improved eviction.
The number of AND gates represents the cost of secure computation in boolean circuits.
(a) Metal encrypts the (b) A file access opera- (c) Server 1 can sub- (d) Server 2 can substi-
file’s data under two tion in Metal consists of stitute the ciphertext in tute the ciphertext in dis-
keys, where each server oblivious selection and oblivious selection and tributed decryption and
has one of the keys. distributed decryption. learns its plaintext. learns its plaintext.
Figure 3.4: A data confidentiality attack to Metal [36], in which a malicious server substitutes
ciphertexts in the protocol.
with Server 1. The user who colludes with Server 1 receives the decryption of C ∗ and forwards it
to Server 1, which concludes this attack.
(d) Server 2 can perform a similar attack as follows. Server 2 also sees a lot of ciphertexts in
Metal. If Server 2 wants to decrypt a specific ciphertext C ∗ , it colludes with a user and lets the user
initiate an access request. After the oblivious selection protocol, Server 2 simply ignores the result
of the selection and initiates a distributed decryption of C ∗ , as in Figure 3.4. The user receives the
decryption of C ∗ and forwards it to Server 2.
We stress that this attack is concerning because the malicious attacker will never be caught.
Since all the ciphertexts in Metal are re-randomized, they are indistinguishable from one another,
and the honest server will never know if the other server is malicious. This limitation may frustrate
users, as there is no deterrence for a server to become malicious.
observe whether the user receives the correct data or not (through side information). If the user
receives the incorrect data and behaves differently, it is considered a failure. Whether or not a
failure happens may depend on the metadata, so a malicious server can learn some metadata using
this attack. We now give two examples of selective-failure attacks in existing systems.
Selective-failure attack in Metal [36]. When Server 1 participates in oblivious selection in Fig-
ure 3.4, Server 1 can replace the first K blocks with dummy data. If a failure happens, it means
that the user is reading a file that has been accessed recently, which is a small metadata leakage.
This is because Metal uses a tree-based ORAM construction, where the top of the tree often stores
files that are accessed recently.
Selective-failure attack in PIR-MCORAM [67] and FHE-MCORAM [177]. In a single-server
construction that uses private information retrieval (PIR), a malicious server can perform the PIR
over a database in which a subset of the data is replaced with dummy. If a failure happens, it means
that the user is reading a file that belongs to the modified subset, which is a small metadata leakage.
This issue is common in single-server constructions based on PIR.
3.3 Overview
In this section, we define Titanium’s system model, threat model, and out-of-scope leakages
and assumptions.
server server
storage
– CreateAccount() → (uid, credential). A new user joins the file-sharing system by calling
this API. If the system has capacity for the new user, the user will be assigned a user ID and the
corresponding credential, which is used later by the proxy to authenticate the user.
– CreateFile(credential) → fid. Each user can create a new file by calling this API. If the
system has capacity, the proxy assigns a new file, and the user obtains the file ID and becomes
the owner of this file. The user can grant and revoke permission of the files to other users.
– Read(credential, fid) → data. A user can request the latest version of a file that the user
has read permission to by calling this API. The proxy checks if the user has permission using
the credential. If the user has permission, the proxy responds to the user with the file data.
– Write(credential, fid, data∗ ) → ⊥. A user can update a file with new data that the user has
write permission to by calling this API. The proxy updates the file accordingly.
– Grant(credential, fid, uid, perm) → ⊥. The owner of a file can grant permission (defined
as “read” and “write”) to another user, given that the owner knows the other user’s ID, by calling
this API. The proxy checks that the caller of the API is indeed the owner of the file and modifies
the access control policies of the file accordingly.
– Revoke(credential, fid, uid, perm) → ⊥. Similarly, the owner of a file can revoke permis-
sion previously granted to another user. The proxy checks the caller’s ownership of the file and
updates the file’s access control policies.
Toward more privacy. In Titanium, the user and file IDs are hidden to the servers and to any users
that the honest user does not interact with. However, the API above requires the owner to know the
recipient’s user ID before sharing, and a recipient of a file knows the file ID after being granted the
permission. For more privacy, the user and file IDs can be hidden from these users by replacing
these IDs with “randomized user ID” and “randomized file ID”. A user can have many randomized
user IDs that can be provided to a file owner to gain permission, while the owner cannot link this
randomized ID to the other ID that a user has. Similarly, the owner does not need to provide the
unique file ID to each other user who has access to the file, but a randomized file ID suffices.
Such randomization has been done and formalized in [36], where randomized user and file IDs
are called anonyms and capabilities, respectively. For ease of presentation, Titanium’s API does
not specify these IDs to be randomized, but Titanium can support it by adopting these primitives
(which are pretty lightweight) directly from [36].
CHAPTER 3. TITANIUM: MALICIOUSLY SECURE FILE SHARING 50
Definition 2. A protocol Π is said to securely realize FFileSharing in the presence of static malicious
adversaries that compromise up to N − 1 out of N servers, if, for every non-uniform probabilistic
polynomial time adversary A in the real world, there exists a non-uniform probabilistic polynomial
time simulator S in the ideal world, such that the outputs of the two worlds are computationally
indistinguishable.
Out-of-scope leakages and assumptions. In this paper, we make the following assumptions: (1)
DoS attacks are out-of-scope; (2) the size of a file is fixed, so there is no size leakage; (3) all the
requests are processed in sequential order. These are also standard assumptions in prior work [36,
100, 145, 148, 177, 201].
CHAPTER 3. TITANIUM: MALICIOUSLY SECURE FILE SHARING 51
There are some solutions to partially remove these assumptions. To mitigate DoS attacks from
users, anonymous payment or client puzzles can be used (see Section 3.11.4). For size leakage,
to our knowledge, there is no efficient way to prevent it without padding to the largest file size
(which is extremely costly), but there is mitigation including partial padding [202], differential
privacy, delayed accessing by downloading different chunks of the file at different times, or only
accessing part of the file that is needed. Finally, to our knowledge, it is unclear how to enable
parallel oblivious access without requiring a strong assumption [79, 203–205]. Thus, we leave it
as an open-research problem.
where x(i) is the share of x held by the i-th server. The secret-sharing of a field element x effectively
hides the value of x from the servers, thereby providing confidentiality.
Each field element is authenticated by a MAC m = α · x, where α is the MAC key. The MAC
is secret-shared among the N servers in a similar way. Each server has a share of m, and the sum
equals m, as illustrated below.
X
m(i) = m ∈ F, m = α · x ∈ F
i
The MAC key, α, is also secret-shared among the N servers. This allows them to perform a few
operations over these secret shares. For example, the N servers can work together to add, subtract,
or multiply two secret field elements that are represented in secret shares, and the computation
results are also in secret shares. The servers can also perform integrity checks on the computation
results. Therefore, when a malicious server manipulates the results of the computation, an honest
server among the N servers can detect such manipulation and refuse to release the incorrect results
to the user. As a result, when a user in Titanium receives the response from the N servers, the user
is assured that an honest server has checked the response.
In Titanium, the proxy performs two basic types of computation over the file storage. The first
is oblivious data selection, in which the proxy is given two field elements and wants to select one
CHAPTER 3. TITANIUM: MALICIOUSLY SECURE FILE SHARING 52
Initialize. Upon invocation, it sends (init) to Sim. FFileSharing maintains the following maps:
• a credential-user map C from credential to user ID uid
• a file-storage map D from fid to file data
• a file-permission map P from (fid, uid) to a permission attribute set p ⊆ {‘read’, ‘write’, ‘own’}.
CreateAccount. If the system has capacity for the new user, it creates a random credential, sets
C[credential] := uid, sends (uid, credential) to the user, and sends a signal (create-account)
to Sim.
CreateFile. If the system has capacity for the new file, it creates a new file with ID fid, assigns the user
with owner permission P[fid, uid] := {‘read’, ‘write’, ‘own’}, and sends a signal (create-file) to
Sim.
Read. If the user with ID uid and correct credential sends a request to read a file with ID fid, it checks if
‘read’ ∈ P(fid, uid). It returns the data D[fid] (or dummy if the user is not authorized) to the user and
a signal (access) to Sim.
Write. If the user with ID uid and correct credential wants to write new data to a file with ID fid, it checks
if ‘write’ ∈ P(fid, uid), and if so, it updates D[fid] and sends a signal (access) to Sim.
Grant. When the user with ID uid and correct credential wants to grant read or write permission of file
with ID fid to another user uid∗ , it first checks if ‘own’ ∈ P(fid, uid), and if so, adds the corresponding
permission to P(fid, uid∗ ) and sends a signal (grant) to Sim.
Revoke. When the user with ID uid and correct credential wants to revoke read or write permission of file
with ID fid to another user uid∗ , similarly, it first checks if ‘own’ ∈ P(fid, uid), and if so, drops the
corresponding permission from P(fid, uid∗ ) and sends a signal (revoke) to Sim.
of them in secure computation. The proxy performs such selection in an oblivious manner so that
the servers running the secure computation do not know which one is being chosen. Each selection
operation incurs an overhead, so for efficiency, we want to do as few selections as possible. This
is reflected in Titanium’s effort to reduce the overhead of Circuit ORAM in Section 3.8, which
minimizes the number of data selections.
The second is to compute a random linear combination of a (large) number of field elements,
which is used in our input/output checking protocol described in Section 3.6. This can be done
efficiently, which the input/output checking protocol leverages.
CHAPTER 3. TITANIUM: MALICIOUSLY SECURE FILE SHARING 53
eviction
stash
tree
Figure 3.7: A “small shopping cart” illustration of how the Circuit ORAM eviction works.
Circuit ORAM enables the proxy in Titanium to access the file storage, without revealing which
file is being accessed. To do so, Circuit ORAM assigns a random location for each file, and when
a file is being accessed, it is assigned to a new random location. As a result, for any sequence of
file accesses, the locations being accessed on the physical storage are random and do not depend
on which files are being accessed.
The challenge that Circuit ORAM faces is to securely and efficiently move the file to a new
location, after each access. First, the moving of the file must be done in a way that hides the
new location, otherwise, the servers can associate the old and new locations. Second, the moving
must be done efficiently, meaning that it should ideally access only a few locations on the physical
storage. A linear pass of the entire storage, in which security can be achieved trivially, is too
expensive.
The solution is to use layers of “write caches” for the storage, and instead of moving the file to
the new location, the file is first moved to the write cache. These caches are, during the subsequent
accesses to the storage, gradually being evicted to lower levels of caches, and eventually to the
actual locations where the file should reside. For this reason, when the proxy wants to read a file,
the proxy also needs to look at the write caches, as the file may have not yet been evicted out from
layers and layers of write caches.
We illustrate the write cache that Circuit ORAM uses in Figure 3.7, which follows a binary
tree structure, of k levels. The leaf layer of the tree contains 2k−1 buckets, where each bucket can
store Z files (often Z = 3). All the other layers, including the root, are write caches for their
descendants. An extra array, called stash, is the top level of the write caches. Readers who are
familiar with CPU architecture can consider the stash as the L1 cache, the root of the tree as the
L2 cache, and the layer immediately before the leaf layer as the L(k + 1) cache.
A problem that write caches must handle is space, since the stash and each bucket in the tree
has a limited size, files in the write cache must be relocated to lower layers of the cache, or the leaf
layer of the tree, to release some space for higher layers of the cache. Circuit ORAM provides an
eviction procedure for this purpose. Such eviction is in essence similar to cache replacement for
CPU.
This eviction procedure can be illustrated with “small shopping cart”, as in Figure 3.7. Circuit
CHAPTER 3. TITANIUM: MALICIOUSLY SECURE FILE SHARING 55
?
Old Old Old
? ? ? ? ? ? ?
? New New New
A B C A B C A B C
nothing happens drop an element pick up an element
Figure 3.8: Comparison of the eviction procedure in Circuit ORAM and the improved version.
Part 1: the simple cases.
Old Old
? ?
New New
A B C A B C
pick and drop an element pick and drop an element
in Circuit ORAM in the improved version
Circuit ORAM (6 operations) Improved version (3 operations)
cond set(new <= A, false) cond swap(A <=> old, false)
cond set(new <= B, true) cond swap(B <=> old, true)
cond set(new <= C, false) cond swap(C <=> old, false)
cond set(A <= old, true) new <= old
cond set(B <= old, false)
cond set(C <= old, false)
Table 3.3: Part 2: the case when pick and drop happen in the same level.
CHAPTER 3. TITANIUM: MALICIOUSLY SECURE FILE SHARING 56
ORAM chooses a random path of the tree, illustrated in a gray background in the figure, and does
a pass over all the caches on this path. The algorithm picks a file from the top level of the cache,
puts it into a “shopping cart” that is so small that it can only carry at most one file, and can choose
to pick or drop files along the way. A file can move to any write cache that is its ancestor. The
shopping cart is empty in the end, and write caches along the path are updated.
So far, Circuit ORAM sounds like an efficient algorithm, but in order to achieve oblivious-
ness, the shopping cart must update the buckets along the path, in a way that hides what kind of
movement is done. This requires the algorithm, running inside the proxy in secure computation,
to perform the same data operations regardless of the eviction plan, and therefore it needs to pad
the actual eviction plan with a lot of dummy data operations. As a result, it becomes the main
overhead of the entire oblivious file access operation.
Circuit ORAM, in order to reduce the amount of data operations, intentionally makes the evic-
tion a single pass along the path and makes the shopping cart small, to reduce the number of fake
operations used for padding. Circuit ORAM has been implemented in many libraries [101, 102,
210–217]. We now introduce an improved eviction subroutine that cuts the eviction overhead by
up to a half, and this approach has not been explored before in the literature or implemented in any
existing libraries.
improves Circuit ORAM in any setting, but the improvement is larger when file sizes are large.
The new procedure is equivalent to the original Circuit ORAM algorithm, thereby reusing its se-
curity analysis. We believe that existing implementations of Circuit ORAM should use this new
procedure.
Our observation is that Circuit ORAM (shown in Figure 3.10) is paying unnecessary overhead
due to its modular design. At each level, eviction consists of “pick” and “drop”. When drop-
ping, the original procedure invokes a general-purpose subroutine to conditionally insert the file.
However, such a modular design obscures an opportunity for optimization. There is a special-
ized subroutine, in which “pick” and “drop” do not need to be separate, and their conditional data
operations can be combined.
We formally present our eviction algorithm in Figure 3.11 and compare it with the original
Circuit ORAM algorithm in Figure 3.10. But we feel it is easier to understand by illustrating the
differences with the “small shopping cart” example again.
As shown in Figure 3.8 and Table 3.3, when the shopping cart arrives at a specific layer, it
interacts with the bucket that represents the write cache. We present the cart before the interaction
as “old” and the cart after as “new”. There are four cases: (1) nothing happens, (2) drop an
element, (3) pick up an element, and (4) pick and drop an element. In all these cases, Circuit
ORAM performs six conditional-set operations, which amount to six data selections. Especially,
in the most complicated case in Table 3.3, six seems necessary because “pick” and “drop” may
interact with different slots in the bucket, since Circuit ORAM always drops the element in the
first availability in each bucket.
Indeed, the first availability is not a requirement. As the slots in the bucket are equivalent, the
file in the old cart can be dropped to any empty slot in the bucket. It happens that after we pick up
the file, the place where we pick becomes empty, and is okay to drop the file simply at the location
CHAPTER 3. TITANIUM: MALICIOUSLY SECURE FILE SHARING 58
where we pick. With this observation, we can replace the six conditional-set operations with three
conditional-swap operations, while each conditional-swap can be efficiently implemented with one
conditional-set, for both secure computations based on boolean and arithmetic circuits, as we show
in Figure 3.9.
The new procedure also appears simpler than the original algorithm. As shown in Figure 3.11,
the swap conditions can be computed simply from two arrays isdeepest and isfirstempty, indicating
whether a slot is deepest and whether it is the first empty in the bucket, which are free byproducts
of prior steps in the computation of the eviction plan.
Now the user and the proxy want to check if they have the same data. There are many possible
ways to do so, such as evaluating a collision-resistant hash function over these field elements.
However, since these methods must be evaluated inside the secure computation, they would be
much slower than the one based on polynomial identity testing we now present. Titanium lets the
proxy and the user each construct a univariate degree-n polynomial using the data.
The user then chooses a random point x = β ∈ F and tells all the servers this point. If at least
one server is honest, the proxy can either receive the correct β or detect a malicious attack (and
terminate the protocol). Now, both the proxy and the user knows β, they evaluate this polynomial
over point β, and the proxy releases f (β) to all the servers.
Each server sends f (β) to the user. If at least one server is honest, the user can either receive
the correct f (β) or detect a malicious attack and terminate the protocol. The user checks if f (β) =
f 0 (β). If so, the Schwartz-Zippel lemma shows that, with a probability of 1 − n/|F|, the two
polynomials are the same: that is, si = s0i . We present the protocols in Figure 3.12.
Reducing the number of client-server rounds with Fiat-Shamir transform [218]. The proto-
cols in Figure 3.12 have two client-server rounds for input and output. It can be reduced to one
round, with some small amount of additional computation, if one uses Fiat-Shamir transform. In
the output protocol, the servers can first commit to the shares of r and {si }1,..,n they are going to
send to the user and broadcast these commitments to each other. The broadcast needs to be made
in a way that servers cannot change their messages after seeing someone else’s. This is done by
requiring the servers to commit to the message first and then open it. Then, they use a cryptograph-
ically secure hash function (modeled as a random oracle) to derive β from these commitments and
let the proxy compute f (β). So, each server now, in addition to sending the shares, also sends
the commitments that they receive from each other, the opening of their own commitments, as
well as β and f (β) to the user. If the user receives the same set of commitments from all the
servers, the user verifies that β is derived correctly, that commitments are opened correctly, and
that f 0 (β) = f (β). The input protocol, which uses the output protocol as a subroutine, also reduces
to one client-server round.
Comparison with prior works. Securing a client’s communication to an entity in secure compu-
tation has been explored before, by Jakobsen, Nielsen, and Orlandi [219] and Damgård, Damgård,
Nielsen, Nordholt, and Toft [220]. Compared with them, our protocol requires much fewer opera-
tions in secure computation, at the cost of one more round (a very minor cost in our use case), or
no additional round if Fiat-Shamir transform is used, as shown in Table 3.4.
Table 3.4: Comparison with prior works on input/output check. N : number of servers, n:
number of inputs/outputs.
Table 3.5: Summary of pros and cons of several access control methods that hide metadata.
no permission, read-only, write-only, read-and-write, and ownership. There are several ways to
implement this access control without leaking metadata, with different trade-offs, and one may be
more suitable than others sometimes. We summarize their pros and cons in Table 3.5.
Time (s)
102 107
77×
27 102 230×
15×
5× 8.4
101 5.4 6.3
101
7.2
4× 3× 3×
4× 1.6 2.1 2.7
1.3
0
10 100
220 221 222 223 224 220 221 222 223 224
Number of files (4KB) Number of files (16KB)
104 69632
20480 104
2900× 40000×
40000×
2900×
102 102 24 28
7.1 8.3 5× 4.5×
5× 4.5× 5.7 6.7
100 100
201.4 21 22 23
1.7 24 220 221 222 223 224
2 2 2 2 2
Number of files (4KB) Number of files (16KB)
Then the proxy checks if Alice has permission to write to the file, by looking up the access control
matrix (Section 3.7), from which the proxy knows Alice is the owner of the file. If so, the proxy
accesses the file storage (Section 3.4.1). The file access is followed by an eviction procedure using
our improved algorithm (Section 3.8). In the end, though this is a write request, the proxy still
returns a dummy file to make read and write indistinguishable from the servers and network. Alice
receives the dummy file using the output protocol (Section 3.6).
CHAPTER 3. TITANIUM: MALICIOUSLY SECURE FILE SHARING 63
Sharing the file. Alice obtains the journalist’s user ID through a reliable mechanism, such as
from an in-person meeting with the journalist. Alice uses the client software to invoke the API to
grant read permission to the journalist, through the input protocol (Section 3.6). The proxy, after
checking the integrity of the request and Alice’s ownership of the file, modifies the access control
matrix to grant the journalist read permission to the file. The journalist, who receives the file ID
from Alice in some way, such as through an anonymous broadcast service already shown in Metal
[36], can now read the file. To make this read request indistinguishable from a write request, the
journalist’s client software uploads a dummy file in the input protocol. The remaining operations
are similar to writing a file.
Revoking the permission. When the journalist receives the file and reports the scandal, Alice
can revoke the journalist’s access to the file, as a precaution in case the journalist’s account is
compromised. To do so, Alice uses the client software to communicate with the proxy and submit
the revocation API request using the input protocol (Section 3.6).
3.9 Evaluation
In this section, we answer the following questions:
1. What is the overhead of Titanium?
2. How does Titanium compare with the state-of-the-art?
3. What is the breakdown of the overhead of Titanium?
4. How does the improved ORAM eviction protocol in Section 3.8 compare with the original
Circuit ORAM algorithm?
5. If servers can do precomputation, what is the latency that a user in Titanium would experience?
3.9.1 Setup
We implemented Titanium and benchmarked its performance using standard libraries for se-
cure computation, including EMP-toolkit [221], SCALE-MAMBA [217], and MP-SPDZ [215].
Specifically, since MP-SPDZ has an efficient offline phase via LowGear, we used it to generate
Beaver triples for secure computation in arithmetic circuits. On the other hand, we used SCALE-
MAMBA for the online phase due to its support of mixed circuit. The field size for authenticated
secret sharing is 64 bits. Since the users simply interact with the API, our evaluation focuses on
the server overhead.
We used c4.8xlarge AWS instances for the servers, each with 36 CPU cores and 60 GB
RAM. We used Linux tc tool to limit the bandwidth of each server to 2 Gbps and added a network
round-trip latency of 20 ms between them.
We evaluate on a file storage with 220 to 224 files of size ranging from 4 KB to 16 KB, which
we
√ consider to be the practical region of Titanium. As for the access control matrix, we consider
224 = 212 users, the same as in [36].
We note that due to ORAM security, read and write requests in Titanium are provably indis-
tinguishable and incur the same overhead (i.e., memory usage, latency, network communication).
CHAPTER 3. TITANIUM: MALICIOUSLY SECURE FILE SHARING 64
In fact, the user who wants to read a file is also performing a dummy write to the storage and vice
versa (see Section 3.9.5).
Titanium N = 2 Titanium N = 3
Time (s) 15 Titanium N = 4 Titanium N = 5
10
0
220 221 222 223 224
Number of files
Figure 3.14: Overhead with 4KB files and varying number of servers.
increase the overhead linearly. To better distribute the trust among the servers, it is preferred to in-
crease the number of servers, but this would also increase the overhead. In practice, a user chooses
a specific Titanium system depending on the trade-off that the user would like to make.
Titanium is more scalable than DPF-MCORAM when increasing the number of servers√for
higher corruption tolerance. Remark that DPF-MCORAM needs N servers to tolerate t = N
corruptions while Titanium requires N servers for t = N − 1 corruptions. As shown in Table 3.6,
the cases of (t, N ) = (2, 9) and (3, 16) in DPF-MCORAM, which are less secure than the cases
of (t, N ) = (2, 3) and (3, 4) respectively in Titanium, are very expensive. This is due to the high
overhead of running DPF inside homomorphic secret sharing (which is commonly implemented
with leveled fully homomorphic encryption) over a large amount of data. We use Gentry, Halevi,
and Smart’s implementation [223] on running ciphers in homomorphic encryption to approximate
these numbers. Overall, compared with DPF-MCORAM, Titanium has the following advantages:
(1) Titanium provides integrity against malicious servers, (2) Titanium does not do linear passes,
(3)
√ with N servers, Titanium tolerates N − 1 corrupted servers, while DPF-MCORAM tolerates
N , (4) Titanium can support many servers, while DPF-MCORAM is restricted to N = 4, 9, 16.
Note that we did not compare Titanium against Metal in this experiment because Metal is
designed for the semi-honest setting and is restricted to the two-server model.
Table 3.7: Cost breakdown of Titanium per file request in storage with 220 files and file size of 4
KB. Read and write requests incur the same amount of processing overhead.
phase reads the file from the storage but ignores the results, while the eviction phase writes the file
with new data to the storage. Therefore, any file request in Titanium incurs the same processing
overhead regardless of whether the type of the request is read or write. The proxy decides whether
the user sees the file (in the case of “read”) and whether the user’s input becomes the new data of
the file (in the case of “write”) using oblivious selection over the request type indicated by the user.
As shown in Table 3.7, we can see that eviction is the most dominating part, especially in end-
to-end latency where it contributes more than 80% to the total cost. It is because the eviction needs
to compute a complicated eviction plan in secure computation and perform more data operations.
The inter-server communication and I/O costs of the eviction phase are also higher than that of the
retrieval phase. This is because the eviction in Circuit ORAM performs about twice the number of
operations on the files compared with the retrieval phase.
108 16
Our improved Titanium (4KB)
Original 14 Titanium (16KB)
online-only (4KB)
online-only (16KB)
Number of AND gates
12
Time (s)
10
107
8
106 2
0.5 KB 1 KB 2 KB 4 KB 8 KB 16 KB 220 221 222 223 224
Size of a file Number of files
Figure 3.15: (a) Our improved eviction vs. original one; (b) User waiting time in Titanium with
vs. without precomputation (b).
the file size is 16 KB. This is because when the file size is small, the network latency, which
precomputation does not help, contributes more to the user waiting time.
3.11.1 Definitions
We first describe the ideal world, the real world, and the simulator. Let FFileSharing and Sim
denote the ideal functionality and the simulator (i.e., the ideal-world adversary), respectively. Since
users are considered anonymous, and the only thing that identifies them is the credential and the
user ID. In the following discussion, we assume that adversary A can decide the requests that
clients make through the N servers. The N servers in the ideal world become dummy and simply
forward data between the client software and FFileSharing .
We say that the protocol securely realizes the ideal functionality if the output of the ideal world
is computationally indistinguishable from the output of the real world.
Ideal world:
• Initialization. FFileSharing creates a credential-user map, a file storage map, and a file permission
map.
• Create an account. Sim can instruct the client software to send a request to FFileSharing for a new
account, where the client software receives the user ID and a credential, which is then forwarded
to Sim
• Create a file. Sim can instruct the client software to send a request to FFileSharing for a new file,
using a user ID and credential. The client receives the file ID, which is then forwarded to Sim.
• Access a file. Sim can instruct the client software to send a file access request to FFileSharing ,
with a credential, a file ID, and the operation to perform. The client either receives the file data
or dummy data, which is then forwarded to Sim.
• Grant and revoke permission. Sim can instruct the client software to send a permission change
request to FFileSharing , with a credential, the file ID, the other user’s ID, and the change to make.
CHAPTER 3. TITANIUM: MALICIOUSLY SECURE FILE SHARING 70
• Output. In the end, Sim outputs the simulated views of the servers and simulated output of the
real adversary A.
Real world:
• Initialization. A chooses a number of servers to corrupt. We let A choose exactly N − 1
servers. The servers, following the protocol, initiate the secure computation of the proxy.
• Create an account. A can instruct the client software to send a request to create an account,
where the client software receives the user ID and a credential and forwards them to A.
• Create a file. A can instruct the client software to send a request to create a new file, using a
credential, where the client receives the file ID and forwards it to A.
• Access a file. A can instruct the client software to send a file access request, with a credential,
a file ID, and the operation to perform. The client either receives the file data or dummy data as
the response, which is then forwarded to A.
• Grant and revoke permission. A can instruct the client software to send a permission change
request, with a credential, the file ID, the other user’s ID, and the change to make.
• Output. In the end, the servers and A output their views.
The simulator:
• Initialization. We assume Sim has a black-box access to A. Sim asks A which servers to
corrupt and then simulates the transcript of corrupted servers in the initialization protocol to A,
by invoking the simulator for secure computation.
• Create an account. If A wants to create an account, Sim forwards this request to the dummy
servers and returns the simulated transcript of the corrupted servers to A, by invoking the simu-
lator for secure computation. Sim forwards the user ID and the credential to A.
• Create a file. When A wants to create a file, Sim forwards this request to the dummy servers
and returns the simulated transcript of the corrupted servers to A, by invoking the simulator for
secure computation and using random paths to simulate the Circuit ORAM traces.
• Access a file. When A wants to perform a file access operation, Sim forwards this request to the
dummy servers and returns the simulated transcript of the corrupted servers to A, by invoking
the simulator for secure computation and using random paths to simulate the Circuit ORAM
traces.
• Grant and revoke permission. When A wants to perform a permission change, Sim forwards
this request to the dummy servers and returns the simulated transcript of the corrupted servers
to A, by invoking the simulator for secure computation and using random paths to simulate the
Circuit ORAM traces, similar to the file access.
• Output. In the end, Sim outputs whatever A outputs.
abort the protocol, and no more operations can be done. The simulator for secure computation
can still simulate the transcript of the corrupted parties up to the aborting, without leaking secret
data.
• Case 2: Manipulating a user’s input or output. The user can verify the output from the servers
via the input/output protocol. Due to the Schwartz-Zippel lemma [191–193], the user can detect
if A manipulates the response with an overwhelming probability. The same applies to the user’s
input.
domly sampled paths in simulating the ORAM. Due to the security of Circuit ORAM and secure
computation, the simulated output is computationally indistinguishable from the real execution,
and therefore Ht ≈ Ht+1 .
• Grant or revoke permission. In Titanium, the access control matrix described in Section 3.7.1
is stored together with the file data. So, granting and revoking is similar to writing to a file, with
the difference that the modification is done on the access control matrix. Therefore, when Ht+1
replaces the simulated output with the real execution, for the same reasons, the simulated output
is computationally indistinguishable from the real execution, and therefore Ht ≈ Ht+1 .
Now, by hybrid arguments, we know H0 ≈ Hq , which means that when processing q requests, the
output of the ideal world and the output of the real world are computationally indistinguishable.
– Anonymous payment. Titanium can require a user to pay for each data access. Specifically, each
user deposits some money by doing a sender-anonymous payment to the servers, and the user
then proves this payment in zero knowledge to the servers. The servers then issue a number
of blind signatures [240] according to the paid amount, where one blind signature serves as a
“one-time token” for one data access. The user needs to present an unused blind signature to the
servers for each file access. Since the servers are “blinded”, the user anonymity is preserved.
– Proof-of-work. Titanium can deter a malicious user by asking this user to solve a cryptographic
puzzle [241–243]—also commonly known as proof of work—for each data access. This does
not fully prevent DoS attacks and could be expensive for resource-constrained users, but it can
limit the ability of the malicious attackers, and can be combined with other mechanisms.
73
Chapter 4
Many organizations need large amounts of high quality data for their applications, and one
way to acquire such data is to combine datasets from multiple parties. Since these organizations
often own sensitive data that cannot be shared in the clear with others due to policy regulation
and business competition, there is increased interest in utilizing secure multi-party computation
(MPC). MPC allows multiple parties to jointly compute a function without revealing their inputs to
each other. We present Cerebro, an end-to-end collaborative learning platform that enables parties
to compute learning tasks without sharing plaintext data. By taking an end-to-end approach to
the system design, Cerebro allows multiple parties with complex economic relationships to safely
collaborate on machine learning computation through the use of release policies and auditing,
while also enabling users to achieve good performance without manually navigating the complex
performance tradeoffs between MPC protocols.
4.1 Introduction
Recently, there has been increased interest in collaborative machine learning [244, 245], where
multiple organizations run a training or a prediction task over data collectively owned by all of
them. Collaboration is often advantageous for these organizations because it enables them to train
models on larger datasets than what is available to any one organization, leading to higher quality
models [246]. However, potential participants often own sensitive data that cannot be shared due
to privacy concerns, regulatory policies [247, 248], and/or business competition. For example,
many banks wish to detect money laundering by training models on customer transaction data, but
they are unwilling to share plaintext customer data with each other because they are also business
competitors.
Enabling these use cases requires more than a traditional centralized machine learning system,
since such a platform will require a single trusted centralized party to see all of the other parties’
plaintext data. Instead, the goal is to develop techniques through which participants can collabora-
CHAPTER 4. CEREBRO: MULTI-PARTY SECURE COLLABORATIVE LEARNING 74
Table 4.1: Comparison with prior work in categories on properties necessary for collaborative
learning. There are a number of works in specialized MPC protocols [71, 249–257], generic
MPC [82, 188, 206, 207, 258], and MPC compilers [210, 217, 259–268]. Since the work space
is so broad, we use “!/ %” to indicate that only some systems in this category support that
feature.
tively compute on their sensitive data without revealing this data to other participants. A promising
approach is to use secure multi-party computation (MPC) [82, 207], a cryptographic technique that
allows P parties to compute a function f on their private inputs {x1 , . . . , xP } in such a way that
the participants only learn f (x1 , . . . , xP ) and nothing else about each other’s inputs.
While there is a vast amount of prior work on MPC for collaborative learning, none take an
end-to-end approach, which is essential for addressing two major obstacles encountered by these
organizations. The first obstacle is the tussle between generality and performance. Many recent
papers on MPC for collaborative learning [71, 249–257] focus on hand-tuning MPC for specific
learning tasks. While these protocols are highly optimized, this approach is not generalizable for
a real world deployment because every new application would require extensive development by
experts. On the other hand, there exist generic MPC protocols [82, 188, 206, 207, 258] that can
execute arbitrary programs. However, there are many such protocols (most of which are further
divided into sub-protocols [269, 270]), and choosing the right combination of tools as well as
optimizations that result in an efficient secure execution is a difficult and daunting task for users
without a deep understanding of MPC.
The second obstacle lies in the tussle between privacy and transparency. The platform needs
to ensure that it addresses the organizations’ incentives and constraints for participating in the
collaborative learning process. Take the anti-money laundering use case as an example: while
MPC guarantees that nothing other than the final model is revealed, this privacy property is also
problematic because the banks effectively lose some control over the computation. They cannot
observe the inputs or the computation’s intermediate outputs before seeing the final result. In this
case, some banks may worry that releasing a jointly trained model will not increase accuracy over
their own models, but instead help their competitors. They may also have privacy concerns, such
as whether the model itself contains too much information about their sensitive data [271–276] or
whether the model is poisoned with backdoors [277].
In this paper, we present Cerebro, a platform for multi-party cryptographic collaborative learn-
ing using MPC. Cerebro’s goal is to address the above two obstacles via a holistic design of an
CHAPTER 4. CEREBRO: MULTI-PARTY SECURE COLLABORATIVE LEARNING 75
4.2 Background
Machine learning. Machine learning pipelines consist of two types of tasks: training and pre-
diction. Training takes in a dataset and uses a training algorithm to produce a model. Prediction
(or inference) takes in a model and a feature vector, and runs a prediction algorithm to make a
prediction.
Secure multi-party computation (MPC). In MPC, P parties compute a function f over their
private inputs xi∈[1...P ] , without revealing xi to any other parties. In this paper, we consider that the
final result is released in plaintext to every party.
CHAPTER 4. CEREBRO: MULTI-PARTY SECURE COLLABORATIVE LEARNING 76
Party 2
…
Party 1 Party N
DSL & Automated Multiple
ML API Program optimization backends Auditing
Optimized
- Custom learning Result
program
Agreement - Policies
phase Auditor
There are two main MPC paradigms for generic computations: arithmetic MPC [188, 206,
207] and boolean MPC (based on garbled circuits). In arithmetic MPC, data is represented as
finite field elements, and the main operations are addition and multiplication (called “gates”). In
boolean MPC, data is represented as boolean values, and the main operations are XOR and AND.
One interesting commonality in these two frameworks is that they can often be split into two
phases: preprocessing and online execution. At a high level, both frameworks use preprocess-
ing to improve the online execution time for certain gates. In arithmetic circuits, addition gates
can be computed locally without communication, while multiplication gates are more expensive
to compute. Similarly, in boolean circuits, XOR is fast to compute while AND is much slower.
The preprocessing phase for these frameworks pre-computes a majority part of executing multipli-
cation/AND gates. And the preprocessing phase can execute without knowing the input; it only
needs to know the functionality. The online execution for both arithmetic MPC and boolean MPC
requires the parties to input their private data. At the end of this phase, the MPC protocol releases
the output in plaintext to all the parties.
includes altering the computation and using inconsistent inputs. Cerebro can support both settings
by using different generic cryptographic backends. We believe that it is useful to support a flex-
ible threat model because different organizations’ use cases result in different assumptions about
the adversary. Moreover, as we show in Section 4.7, the semi-honest protocol can be 61-3300×
faster than the malicious counterpart, so the participants may not wish to sacrifice performance for
malicious security.
Recent work has described many attacks for machine learning. One category is data poison-
ing [277] where the parties inject malicious data into the training process. Another category is at-
tacks on the released result, where an attacker learns about the training dataset from the model [276,
278, 279] or steals model parameters from prediction results [272–275]. By definition, MPC does
not protect against such attacks, and Cerebro similarly cannot make formal guarantees about ma-
liciously constructed inputs or leakage from the result. However, we try to mitigate these issues
via an end-to-end design of the system, where Cerebro provides a platform for users to program
compute policies and add cryptographic auditing (explained in Section 4.5).
Cryptographic auditing. Even after the result is released, the learning life cycle is not finished.
Cerebro gives the parties the ability to audit each other’s inputs with a third-party auditor in a
post-processing phase (see Section 4.5.2).
functions and are useful for expressing training and inference algorithms. Figure 4.2 shows an
example program.
Data types. Each variable in a Cerebro program is automatically tagged with a type (integer, fixed-
point, etc.) and a security level. The security level indicates which parties can access the raw value
of the variable. Cerebro currently supports three security levels:
• Public: the value is visible to all parties
• Private: the value is visible to a single party
• Secret: the value is hidden from all parties
Our current implementation restricts that private variables are owned and visible to a single party,
and we represent a private value visible to the party i as private(i). The security level of vari-
ables is automatically upgraded based on type inference rules, described in Section 4.4.2. Programs
can explicitly downgrade security levels by calling reveal.
Functions. Our DSL provides a set of mathematical and logical operators to process tagged data.
Each operator can accept inputs with any security tag, and the output tag is determined using a
set of type inference rules (explained more in Section 4.4.2). Security annotations also play an
important role in enabling several of the optimizations employed by Cerebro.
Cerebro provides a variety of basic operators over data types including arithmetic operations
and comparisons. Users can compose these basic operators to implement user-defined learning
algorithms. Cerebro also provides a set of higher-level mathematical operators common to machine
learning tasks (e.g., linear algebra operators, sigmoid), a set of functions for efficiently indexing
into arrays or matrices, a set of branching operators, and a set of more complex fused operators.
Fused operators (explained in Section 4.4.2) provide Cerebro with more opportunities to optimize
complex code patterns.
using secure computation. The second optimization is operator fusion, where the compiler tries
to detect pre-defined compound code patterns in Q2 and transforms them to more efficient fused
operations.
Program splitting. Program splitting is a type of logical optimization that delegates part of the
secure computation to one party which computes locally in plaintext. We can illustrate this op-
timization by applying to sorting. If a program needs to sort training samples from all parties
(e.g., in decision tree training), then parties can instead pre-sort their data. In this way, MPC only
needs to merge pre-sorted data, providing a significant speedup over the naive solution in which it
executes the entire sorting algorithm in the secure computation.
In the semi-honest setting, Cerebro can automatically identify opportunities for local computa-
tion within the code. As explained in Section 4.4, users write their programs using Cerebro’s API,
and the compiler automatically tags their data using Cerebro’s secure types. Cerebro uses a set of
rules (see Table 4.2) to infer a function’s security level. If a function only has public input, then
the output should also be public since it can be inferred from inputs. This type of computation can
be executed in plaintext by any party. Similarly, if a function only takes input from a single party
i, party i can compute this function locally in plaintext. However, if a function’s input includes
private data from different parties or secret data, then the function needs to be executed using MPC,
and the output will also be tagged as secret.
However, in a malicious setting the criteria for secure local plaintext execution are more com-
plex because a compromised participant can arbitrarily deviate from the protocol and substitute
inconsistent/false data and/or compute a different function. Thus, we cannot assume that a party
will compute correct values locally. As in the sorting example, we cannot trust the parties to cor-
rectly pre-sort their inputs. Therefore, secure computation must add an extra step to ensure that the
input from each party is sorted.
In general, automatically finding efficient opportunities for local plaintext computation in the
malicious setting is challenging. In Cerebro, we approach this problem by designing pre-defined
APIs with this optimization in mind. If a user uses our API, Cerebro will apply program splitting
appropriately while guaranteeing security in the malicious threat model. For example, our sort
API will automatically group the inputs into private inputs from each party, followed by a local
plaintext sorting in plaintext at each party. However, since a malicious party can still try to input
unsorted data into the secure computation, the global sorting function will first check that the inputs
from each party are sorted.
This optimization allows Cerebro to automatically generate an efficient MPC protocol that
has similar benefits to prior specialized work. For example, in [255], one of the techniques is
to have the parties pre-compute the covariance matrix locally, then sum up these matrices using
linearly homomorphic encryption. While Cerebro’s underlying cryptography is quite different—
hence resulting in a very different overall protocol—we are able to automatically discover the same
local computation splitting as is used by a specialized system written for ridge regression. We note
that program splitting is compatible with cryptographic auditing mentioned in Section 4.5.2 by
committing to the precomputed local data instead of the original input data.
Fused operations. Recognizing compound code patterns is crucial in MPC, since many com-
CHAPTER 4. CEREBRO: MULTI-PARTY SECURE COLLABORATIVE LEARNING 81
Logical Physical
optimization planning
Global compute
Q
Q2
costa,pre
Fused Quadratic +
operations
Online costa,online
Q2’ Boolean Preprocessing costb,pre =
+ = costb costa
Online costb,online
Figure 4.3: Cerebro architecture, showing choices we can make under the semi-honest threat
model.
pound operations that are cheap in plaintext incur significant performance penalties when executed
securely. For example, plaintext array indexing under the RAM model has a constant cost. In
MPC, while array indexing using a public index has a constant cost, array indexing using a secret
variable takes time that is proportional to the length of the array. This is because when executing
secure computation, the structure of the function cannot depend on any private or secret value, oth-
erwise a party may infer the value from the structure of the computation. Therefore, it is impossible
to index an array using a secret value in constant time.
In Cerebro, as is common, we index arrays by linearly scanning the entire array, which is an
O(n) operation.1 Next, consider a compound code pattern that occurs in programs like decision
tree prediction (see Figure 4.2): an if/else statement that wraps around multiple secret accesses to
the same array. In a circuit-based MPC, all branches of an if/else statement need to be executed.
Therefore, conditionally accessing an index can require several scans through the same array.
For this scenario, Cerebro will combine the operators into a single fused operation represented
by secret index if that can be used to represent such conditional access and minimizes the
number of array scans required during computation. Fused operators in Cerebro play the same role
as level 2 and level 3 [280] operations in BLAS [281] and MKL [282], and fused operations gen-
erated by systems such as Weld [283]; i.e., they provide optimized implementations of frequently
recurring complex code patterns. Since operator fusion only happens on code expressed in MPC
and preserves the functionality, it works for both the semi-honest and the malicious settings.
1
Cerebro can be augmented to use oblivious RAM (ORAM) for secret indexing, which has O(polylogn) overhead
for an array of size n. Prior work has shown that for smaller arrays, linear scanning is faster [100] because ORAM
needs to keep a non-trivial amount of state.
CHAPTER 4. CEREBRO: MULTI-PARTY SECURE COLLABORATIVE LEARNING 82
Flat Hierarchical
Figure 4.4: Communication pattern for a single multiplication triple. Shaded nodes are coordi-
nators.
Given k regions, let Bij denote the bandwidth between regions i and j and let Bi denote the
bandwidth within region i. Let ni denote the number of triples Pk assigned to each party in region i
and Pi be the number of parties in region i. There, we have i=1 ni · Pi = Nm . The cost function
can now be formulated as C = L01 + L02 + L03 where the constants are analogous to those in the
previous example of two regions. We generalize the constants as follows:
P
nj ·Pj (Pi −1)
L01 = max i = 1, 2, ..., k,
j6=i Pi Bi
L02 = max ni ·(PBii−1) i = 1, 2, ..., k,
P
nj ·Pj
L03 = max j6=i Bij
i = 1, 2, ..., k
We solve this optimization problem in cvxpy [284] by transforming it into a linear program, de-
scribed in Section 4.9.3. As an example, a setting with five regions is solved in roughly 100
milliseconds on a standard laptop computer.
of this section, we give an overview of how users can use our system to encode policies and audit
cryptographically.
Xt,i and obtains an accuracy score. If this score is greater than τi , then the policy returns true. See
example code in Figure 4.5.
• Accuracy comparison with other parties. In this policy, party i’s decision to release depends
on how much its competitors’ test accuracy scores improve. Therefore, the inputs to this policy
are: the model w, every party’s test dataset Xt,j , every party’s local accuracy scores aj , and a
percentage x. The policy runs prediction on every party’s test dataset and obtains accuracy scores
bj . Then it checks bj against aj , and will only return true if bj − aj < x(bi − ai ) for all j 6= i.
Cross validation. Since the parties cannot see each other’s training data, it is difficult to know
whether a party has contributed enough to the training process. All parties may agree to implement
a policy such that if a party does not contribute enough to training, then it also does not receive the
final model. Such a party can be found by running cross validation, a common statistical technique
for assessing model quality. In this setting, Cerebro treats the different parties as different partitions
of the overall training dataset and takes out a different party every round. The training is executed
on the leftover P − 1 parties’ data, and an accuracy is obtained using everyone’s test data. At the
end of P rounds, the policy can find the round that results in the highest test accuracy. The party
that is not included in this round is identified as a party that contributed the least to collaborative
training.
Privacy policy. For training tasks, the secure computation needs to compute and release the model
in plaintext to the appropriate participants. Since the model is trained on everyone’s private input,
it must also embed some information about this private input. Recent attacks [276] have shown
that it is possible to infer information about the training data from the model itself. Even when
parties do not actively misbehave (applicable in the semi-honest setting), it is still possible to have
unintended leakage embedded in the model. Therefore, parties may wish to include privacy checks
to ensure that the final model is not embedding too much information about the training dataset.
We list some possible example policies that can be used to prevent leakage from the model.
• Differential privacy. Differential privacy [285] is a common technique for providing some
privacy guarantees in the scenario where a result has to be released to a semi-trusted party. There
are differential privacy techniques [286–288] for machine learning training, where some amount
of noise is added to the model before release. For example, one method requires sampling from
a public distribution and adding this noise directly to the weights. This can be implemented in
Cerebro by implementing the appropriate sampling algorithm and adding the noise to the model
before releasing it.
• Model memorization. Another possible method for dealing with leakage is to measure the
amount of training data memorization that may have occurred in a model. One particular method [271]
proposes injecting some randomness into the training dataset and measuring how much this ran-
domness is reflected in the final model. This technique can be implemented by altering the training
dataset Xi and programming the measurement function as a release policy.
CHAPTER 4. CEREBRO: MULTI-PARTY SECURE COLLABORATIVE LEARNING 87
audit procedure has access to the same inputs as were used in the original computation. Otherwise,
we run the risk of allowing a malicious participant to provide sanitized inputs during the audit,
thus avoiding detection. Cerebro enforces that the same input from the compute phase is used in
the auditing phase as well by using cryptographic commitments [289, 290], a cryptographic tool
that ties a user to their input values without revealing the actual input. A participant commits
to its input data by producing a randomized value that has two properties: binding and hiding.
Informally, binding means that a party who produces a commitment from its malicious dataset will
not be able to produce an alternate sanitized version later and claim that the commitment matches
this new dataset. At the same time, hiding ensures that the commitments do not reveal information
about the inputs.
• Auditing API. In order to abstract away the cryptographic complexity and to provide users with
an intuitive workflow, we design the following API:
• c, m = commit(X): returns c, the actual commitment, as well as m, the metadata used in
generation of the commitment. c is automatically published to every other party, while m is a
private output to the owner of X.
• audit(X, c, m): this function returns a boolean value showing whether the commitment
matches input data X.
• Handling malicious aborts. A serious concern during auditing is that a participant might cause
the secure computation to abort since maliciously secure MPC generally does not protect against
parties aborting computation. There are two types of aborts: a malicious party can refuse to pro-
ceed with the computation or can maliciously alter its input to MPC so that the computation will
fail. The first type of abort is easy to catch, but the second is sometimes impossible to detect. For
example, an arithmetic MPC that uses information theoretic MACs to check for protocol correct-
ness cannot distinguish which party incorrectly triggered a MAC check failure. Therefore, a party
can maliciously fail during the auditing phase and make it impossible to run an auditing function
to track accountability.
To resolve this challenge, we introduce a third-party auditor into our auditing workflow. We do
not believe this is an onerous requirement, since audit processes often already involve third-party
arbitrators, e.g., courts, who help decide when to audit and how to use audit results. We do not
require the third-party to be completely honest, but instead assume that it is honest-but-curious,
does not collude with any of the participants, and does not try to abort the computation. Under this
assumption, we enable the auditor to audit a party without forcing the party to release its data. This
means that the auditor will not see any party’s data in plaintext, since we still require the auditor to
run the auditing process using MPC. During auditing, we require all parties to be online, and any
party who is not online or aborts is identified as malicious.
• Auditing workflow. Let A denote a separate auditor entity, and let Pi denote the parties running
the collaborative computation. We construct the following auditing protocol.
1. Using the established PKI, Pi ’s have public keys corresponding to every participant in the secure
computation. Pi ’s agree on the same unique number qid.
2. Pi computes a commitment of its data. Let the commitment be ~ci . Pi hashes the commitments
hi = hash(~ci ) and generates a signature σi = sign(qid, hi ) using its secret key. Pi publishes
CHAPTER 4. CEREBRO: MULTI-PARTY SECURE COLLABORATIVE LEARNING 89
(~ci , σi ) to Pj6=i .
3. All Pi ’s run the secure computation, which encodes the original learning task and a preprocess-
ing stage that checks that Pi ’s input data indeed commits to the public commitments received by
every party from Pi . If the check fails, then the computation aborts. Note that we won’t know
who is cheating in this stage, but the parties also won’t get any result since the computation will
abort before any part of the learning task is executed.
4. During auditing, Pi will publish its signed commitments, along with the (~cj , σj ) received from
Pj , to A. A checks that all commitments received from Pj about Pi match. If they do not, then
Pi is detected as malicious.
5. A runs a two-party secure computation with each Pi separately. Pi inputs its data, and A checks
the data against the corresponding commitment. If there is a match, continue with the auditing
function. If this computation aborts, Pi is also detected as malicious. Since the auditing is in
secure computation, A will not directly see Pi ’s input data.
Using the same training example from above, we can see that any Pi who cheats by substituting
input can only avoid detection via a badly formulated auditing function. A cheating party will be
detected and identified by the auditor if it attempts to substitute an alternative copy of the input or
if it attempts to abort during auditing.
Commitment schemes. Our auditing protocol is generic enough to be implemented with any
commitment and MPC design. In practice, there are ways of constructing efficient commitments
that can also be easily verified in MPC. In this section, we describe some commitment schemes
that integrate well with MPC, and how to efficiently check these commitments.
• SIS-based commitment. Based on the short integer solution (SIS) problem in lattices, there is a
class of collision-resistant hash functions [291–296], from which we can instantiate commitment
schemes that are efficient in MPC. This has been used in zero-knowledge proof systems [297, 298].
• Pedersen commitment. In this section, we additionally provide a way of batch checking com-
mitments in MPC using a homomorphic commitment such as Pedersen [290]. We utilize the fact
that our arithmetic framework is reactive to construct such a scheme.
Denote com(x; r) as the Pedersen commitment. The protocol is as follows:
1. As before, each Pi commits and publishes its commitments.
2. Pi ’s start a SPDZ computation and input both their input data ~xi , as well as the randomness
used ~ri for the commitments.
3. Everyone releases a random P number s from SPDZ.
4. Each Pi computes c̃j = k s ⊗ ~cj [k] for every Pj .
k
offline generation can be more expensive. Of course, if the application already needs a larger
field size (e.g., more precision for fixed-point representation), then Pedersen commitments would
not have extra overhead. Additionally, Pedersen commitments require a reactive framework such
as SPDZ in order for the batching to work properly in the secure computation phase. Cerebro’s
planner takes these circumstances into account, and chooses the best plan accordingly.
4.6 Implementation
We implemented Cerebro’s compiler on top of SCALE-MAMBA [217], an open-source frame-
work for arithmetic MPC. Our DSL is inspired by and quite similar to that of SCALE-MAMBA,
though we have the notion of private types. In order to support both arithmetic and boolean MPC,
we added a boolean circuit generator based on EMP-toolkit [259]. Both of these circuit generators
are plugged into our DSL so that a user can write one program that can be compiled into different
secure computation representations.
Cerebro uses different cryptographic backends that support both semi-honest and malicious
security. We implemented Cerebro’s malicious cryptographic backend by using the two existing
state-of-the-art malicious frameworks—SPDZ [217] and AG-MPC [259]. Additionally, we imple-
mented Cerebro’s semi-honest cryptographic backend by modifying the two backends to support
semi-honest security.
4.7 Evaluation
We evaluate the effectiveness of Cerebro’s cryptographic compiler in terms of the performance
gained using our techniques. We use the two generic secure multiparty frameworks that Cerebro
uses as a baseline for evaluation, in both semi-honest and malicious settings. We compare to what
users would be doing today without our system, which is choosing a generic MPC framework and
implementing a learning task using it. Our goal is to show that, without Cerebro’s compiler, users
can experience orders of magnitude worse performance if they choose the wrong framework and/or
do not have our optimizations.
We also do not experimentally compare performance against a traditional centralized machine
learning system. Such a system can greatly outperform an MPC-based system because it can
operate directly on the parties’ plaintext training data, but is also insecure under our definition
because it requires a centralized party that sees all of the plaintext training data. Due to the lack of
security, the applications we are tackling cannot be realized with a centralized learning system.
avg # mult/s
150000 600000
# vectorized mult/s
# regular mult/s
800000 150000
60000
0
30000 400000 0 20 40 60 80 100
0 0
% of vectorized mult in 2Gbps network
2 4 6 8 10 12 2 4 6 8 10 12
# parties in 2Gbps network # parties in 2Gbps network
(c) Varying % of vectorized mult.
(a) Non-vectorized (2Gbps). (b) Vectorized (2Gbps). (P = 12).
Quadratic (n = 100) Linear
Quadratic (n = 10)
Linear Linear (model) Quadratic (n = 100) Linear 350000
Quadratic Quadratic (model) Quadratic (n = 10)
280000
1500000
avg # mult/s
35000
# vectorized mult/s
210000
1200000
# regular mult/s
28000
140000
21000 900000
600000 70000
14000
300000 0
7000 0 20 40 60 80 100
0 0 % of vectorized mult in 100Mbps network
2 4 6 8 10 12 2 4 6 8 10 12
# parties in 100Mbps network # parties in 100Mbps network
(f) Varying % of vectorized mult.
(d) Non-vectorized (100Mbps). (e) Vectorized (100Mbps). (P = 12).
Figure 4.6: Choosing linear vs. quadratic protocol for arithmetic MPC preprocessing; y-axis
shows triple generation throughput.
60000
40000
20000
0
200 400 600 800 1000 1200
cross-region bandwidth (Mbps)
Figure 4.7: Flat vs. two-level linear protocol for 9-party vs. 3-party bipartite network layout
with varied cross-region total bandwidth (2Gbps intra-region per-party bandwidth).
(RTT) is 80ms between any two instances. According to [299], this is roughly the RTT between
the east-coast servers and west-coast servers of EC2 in the U.S.
Planner-SH SH Arithmetic Planner-SH SH Arithmetic SH Arithmetic Mal Boolean Swap Use LC Not use LC (estimated)
SH Boolean No Swap Mal Arithmetic
SH Boolean SH Boolean Not use LC
Mal Boolean No Swap
45 106
108
30
36 107 105
total time (s)
time (s)
27 104
time (s)
20
15 105
18 103
10 104
9 102
5 103
0 0 102 101
2 4 6 8 10 12 2 4 6 8 10 12 0 6000 12000 18000 24000 30000 0 5 10 20 30 40
# complete tree layers in 2Gbps network # parties each in 2Gbps network Number of samples # features in the dataset
(a) Decision tree predic- (b) Decision tree predic- (c) Logistic regression (d) ADMM with/without
tion varying tree sizes. tion varying number of training in different local compute.
parties. dataset size.
three points of the graph and then extrapolate the results. The flat layout throughput scales linearly
to the cross-region total bandwidth.
To evaluate the hierarchical layout, we need to first determine the workload of each coordinator
using cvxpy. From the graph we can see that the hierarchical layout achieves a speed up of 4× to
4.5× over the flat layout.
Machine learning applications. In this section we evaluate Cerebro using decision tree prediction,
logistic regression training via SGD, and linear regression training via ADMM [250, 257, 300].
We estimate the network cost for the preprocessing phase of the arithmetic protocol using the
throughput gathered in the previous benchmarks.
Decision tree prediction. We implement decision tree prediction using Cerebro’s DSL, which
evaluates a complete h layer binary decision tree, where the ith layer has 2i−1 nodes. We evaluate
a scenario where there are P parties, one of which has the input feature vector and all P parties
secret-share a model. If P = 2, we assume that we are doing a two-party secure prediction, where
one party has the feature vector and the other has the model.
We show the prediction performance in the 2-party semi-honest setting in Figure 4.8a. In this
experiment, we varied the number of layers in the decision tree. We fit the data points involving
3, 6, 9 layers and then extrapolate the cost model to estimate the performance of our graphed points.
Cerebro always picks the protocol that has the lower estimated cost from our model. In the 2-
party scenario, Cerebro always chooses to use a boolean protocol since evaluating the decision
tree requires many comparisons and data selection. In a 12-layer tree, the semi-honest boolean
protocol takes 7.5× less time than the semi-honest arithmetic protocol. In Figure 4.8b, we vary
the number of parties, and plot the inference runtime for a 10 layer tree. We observe that the total
execution time for the boolean protocol grows linearly with number of parties, and sublinearly for
the arithmetic protocol. Therefore, with 9 or more parties, Cerebro chooses to use the arithmetic
protocol.
As noted previously, Cerebro also supports the malicious setting, and we exclude those results
for brevity.
• Logistic regression. We implemented and evaluated Cerebro on logistic regression training
using SGD. In this experiment, we evaluated training in both the semi-honest and the malicious
CHAPTER 4. CEREBRO: MULTI-PARTY SECURE COLLABORATIVE LEARNING 94
settings to show a difference in the performance for different variants of the protocols. For the
semi-honest and malicious boolean protocols, we ran logistic regression for one iteration of SGD
and extrapolated the remaining results. First, we compare the performance between the semi-
honest boolean and semi-honest arithmetic protocol in Figure 4.8c. We run one epoch over the
dataset in these experiments with a batch size of 128. As expected, the arithmetic protocol signif-
icantly outperforms the boolean protocol in this case, both because it is better suited for this task
and because it enables vectorization. Using these results we see that for a 27000 record training
set the arithmetic protocol is 67× faster than the boolean protocol, taking an hour instead of three
days.
However, in the malicious setting, the arithmetic protocol does not always perform better. The
amount of memory used by the malicious boolean protocol is linear in the number of parties and
the number of gates. As a result, we run out of memory when trying to benchmark larger circuits.
We estimate the malicious boolean protocol on machines with enough memory as well as on the
original machines with swap space to use as additional memory. As shown in Figure 4.8c, if the
machines have enough memory, then the malicious boolean protocol is 3× faster than the malicious
arithmetic protocol, but if swap space is used instead, then the malicious boolean protocol is 4×
slower than the malicious arithmetic protocol. Overall, the malicious boolean protocol is up to
61× slower than its semi-honest counterpart and the malicious arithmetic protocol is up to 3300×
slower than its semi-honest counterpart, indicating a significant tradeoff between performance and
security.
• ADMM. We evaluate ADMM in the semi-honest setting to show Cerebro’s automated planning
of local computation. Cerebro automatically detects that the parties can locally compute much
of the ADMM algorithm, thus minimizing the number of MPC operations required as described
previously in Section 4.4. We evaluate these benefits in Figure 4.8d and find that the use of local
computation allows Cerebro to improve ADMM performance by up to 700× when training a 40-
feature model using 10000 records per party for 6 parties. We estimate the preprocessing and run
the online phase for the first four data points, but estimate the fifth. Beyond this we also find
that the use of arithmetic circuits is beneficial here for the same reasons as in the case of logistic
regression, i.e., it allows vectorization and is better suited to expressing matrix operations.
maining 3000 records. We train the model using a subset of the training set and validate the trained
model using part of the validation set which is 10% the size of the used training set. From Ta-
ble 4.6, we can see that the validation time grows linearly to the used validation set. Compared
with training in logistic regression, the time taken by validation is equivalent to training another
10% of the training samples, which matches the training behavior of logistic regression.
to any learning task, hence obviating the need for users to consult an expert for every new func-
tionality. For experts who wish to hand-optimize a learning task, Cerebro’s compiled program can
also act as a starting point upon which more efficient MPC protocols can be built. We hope that
Cerebro can also act as a standard platform for researchers to continue to improve automatic MPC
optimization. One area for research is how an MPC compiler handles memory’s impact on perfor-
mance. Cerebro could easily be extended to model memory usage directly for MPC backends, or
work with runtime cost models with memory size as an input parameter.
# Training
D.P. time (s) Validation time (s)
samples
1000 1.192 14.19
5000 1.192 48.66
15000 1.192 140.34
25000 1.192 238.01
27000 1.192 257.05
similar to Cerebro’s optimizations at a very high level, but Cerebro additionally must consider the
effects of optimizing a cryptographic protocol. This means that Cerebro has different rules for
transformation and a very different cost model. The idea of “physical planning” is similar to prior
systems and database work [310–316]. The main difference is that we instantiate this idea to the
MPC setting and work closely with the underlying cryptography.
MPC compilers. Cerebro draws inspiration from a body of work on MPC compilers [210, 216,
217, 259–268, 317–324]. Compared to prior work, Cerebro’s compiler differs in two impor-
tant aspects. First, we provide n-party compilation supporting two MPC frameworks under dif-
ferent threat models. There is prior work providing n-party compilation supporting a single
framework [210, 217, 259, 260, 264–266] and two-party compilation supporting multiple frame-
works [262, 267, 317]. Second, Cerebro adds optimization in both the logical and the physical
layers, which allows us to consider a multitude of factors like computation type, network setup,
and others. Conclave [268] is a recent system that is similar to Cerebro because it handles multiple
frameworks and does optimization. However, it is designed for SQL, and does not consider physi-
cal planning or release policies. Finally, Cerebro itself is an end-to-end platform for collaborative
learning and supports policies and auditing.
Secure learning systems. There is prior work that uses hardware enclaves to execute generic
computation, analytics, or machine learning [325–330]. Compared with Cerebro, the threat model
is quite different. While hardware enclaves support arbitrary functionality, the parties have to put
trust in the hardware manufacturer. We have also seen that enclaves are prone to leakages [331–
334].
There has been much work on secure learning using cryptography, both in training and predic-
tion [71, 249–257, 335–366]. A few of these systems make advances in the N -party collaborative
learning setting, such as Abspoel et al. [353], Chase et al. [367], Chen et al. [348], Chen et
al. [361], CaPC [364], Helen [250], POSEIDON [350], and SPINDLE [335]. However, Cerebro
differs from these works in several aspects. First, they mostly focus on optimizing specific train-
ing/prediction algorithms and do not consider supporting an interface for programming generic
models. Second, they do not automatically navigate the tradeoffs of different physical setups.
Finally, these frameworks also do not take into account the incentive-driven nature of secure col-
laborative learning, while Cerebro supports policies and auditing.
CHAPTER 4. CEREBRO: MULTI-PARTY SECURE COLLABORATIVE LEARNING 98
Other related work. A recent paper by Frankle et. al. [368] leverages SNARKs, commitments,
and MPC for accountability. However, the objective is to make the government more accountable
to the public, so the setting and the design are both quite different from ours. Other papers [369–
371] explore identifying cheating parties in maliciously secure MPC. However, these papers are
either highly theoretical in nature, or require proof that each party behaved honestly during the en-
tire protocol execution, which can be quite expensive. Cerebro is mainly concerned with holding
the users accountable for their input data, and our scheme both works with multiple MPC frame-
works and does not need to require proof of honest behavior for the entire protocol execution. With
regards to the logical optimizations that Cerebro performs, there has been work [261] that also per-
forms partitioning of computation into local and secure modes. However, Cerebro does not require
the user to specify the mode of computation for every single operation and instead automatically
partitions the source code into local and secure components.
B1 is the intra-region bandwidth per party, while B2 is the total inter-region bandwidth between
the two regions. Therefore, the g1 and g2 terms capture the network cost. The f1 and f2 terms
correspond to the compute cost, where f1 captures ciphertext multiplication, and f2 captures the
other ciphertext operations. L1 –L4 are scaling factors that are functions of nL , nR , PL , and PR :
L1 = max nR · PR ·(PPL
L −1)
, nL · PL ·(PR −1)
PR
,
L2 = max (nL · (PL − 1), nR · (PR − 1)) ,
L3 = max (nL · PL , nR · PR ) , L4 = max (nL , nR ) .
The intra-region communication cost is captured by the g1 term. Because of hierarchical plan-
ning, each node needs to act as both an intra-region coordinator and an inter-region coordinator.
Without loss of generality, we analyze region L. The intra-region coordination load is nL ·(PL −1),
because each node receives from every other node in the region. The inter-region coordination
load can be derived by first summing the total number of triples that need to be partially aggre-
gated within L, which is equal to the total number of triples handled by region R: nR · PR . Since
there are PL parties, each party handles nR · PR /PL triples. Finally, since each party only needs
to receive from the other parties in L, the cost per party is nR · PR (PL − 1)/PL . The g2 term
captures the inter-region communication cost. Since we are doing partial aggregation, we found
CHAPTER 4. CEREBRO: MULTI-PARTY SECURE COLLABORATIVE LEARNING 100
that the best way to capture this cost is to sum up the total number of triples per region (see L3 )
and scale that according to the total inter-region bandwidth B2 . The f1 term captures the ciphertext
multiplication cost. Since that happens only once per triple at the intra-region coordinator, we have
the scaling in L4 . Finally, the rest of the ciphertext cost is attributed to ciphertext addition. This
can be similarly derived using the logic for deriving g1 , so we omit this due to space constraints.
Finally, for the k region case, we can transform the optimization problem described in Sec-
tion 4.4.3 into a linear program by moving the max into the constraints as follows:
Pk
min(L01 + L02 + L03 ) s.t. i=1 ni · Pi≥ Nm
0
P n ·P (P −1)
L1 ≥ j6=i j Pji Bii i = 1, 2, ..., k,
L02 ≥ ni ·(PBii−1) i = 1, 2, ..., k,
P n ·P
L03 ≥ j6=i Bj ij j i = 1, 2, ..., k
We loosen the first constraint to be an inequality rather than an exact equality to make it easier
to find feasible solutions since we require the ni ’s to be integral. Therefore, the equations above
formulate the linear program we solve to obtain the optimal assignment of triple generation tasks.
101
Chapter 5
Many organizations in healthcare, finance, law enforcement want to train a model over a large
amount of high-quality data, and one way to find such data is through a collaboration between
organizations in the same industry. Using secure multiparty computation (MPC), they can train the
model over the joint dataset without revealing the data to each other.
However, secure computation makes it difficult for organizations to assess the quality of each
other’s data. Without such an assessment, it is irresponsible and dangerous to deploy the model in
practice, especially in healthcare, finance, or law enforcement where humans can be significantly
affected by the model’s potentially biased decision. Regulations such as European Union’s General
Data Protection Regulation (GDPR) require organizations not only to take steps to prevent errors,
bias, and discrimination in such models but also to be legally responsible for the damage. How can
an organization take the risks of another organization’s data that is largely untested?
Hence, we believe that testing the quality of data is an indispensable step in secure collaborative
learning. The bottom line is that every organization should check if the datasets are biased or
severely unbalanced. However, performing such distribution testing is very expensive in MPC, as
MPC needs to hide the data by performing costly oblivious operations over encrypted data.
We present HOLMES, a protocol for performing distribution testing efficiently. In our exper-
iments, compared with a nontrivial baseline, HOLMES achieves a speedup of 270× for various
tests and up to 104 × for multidimensional tests. The core of HOLMES is a hybrid protocol that
integrates MPC with zero-knowledge proofs and a new ZK-friendly and naturally oblivious sketch-
ing algorithm for multidimensional tests, both with significantly lower computational complexity
and concrete costs.
5.1 Introduction
An article from MIT Technology Review, “AI is sending people to jail–and getting it wrong”
[372], again reminds us that machine learning models have not only been deployed everywhere
CHAPTER 5. HOLMES: EFFICIENT DISTRIBUTION TESTING 102
but also started to determine people’s fate. For example, AI models have been used to detect
traditionally unrecognized anxiety and depression from speech [373, 374] and diagnose attention
deficiency [375], in which accuracy is crucial for people to get the right treatment. Mortgage
approval is often decided by models, which have been shown to more likely deny loans to people
of color [376–378]. The most infamous example is probably COMPAS1 [379], a system that rates
people’s risk of future crime and decides if one should be held in jail before trial and the severity
of the sentences, has been shown to disproportionately target the low-income and minority [372].
Underlying data rather than the algorithm is most often the main source of the issue [380].
When the training data is inaccurate, skewed, or systemically biased (due to how data is collected,
for example), the model, which we train to fit the training data, becomes biased. This implies a
potential solution: to avoid a biased model, we should, at the very least, attempt to avoid learning
from unbalanced data [381].
In the machine learning community, there have been many approaches (e.g., [382–384]) to pro-
tect fairness, starting from detecting and removing unbalances from the training data. For example,
if one finds a dataset with an overwhelming number of negative records toward a protected group,
one can adjust the weight or reduce the number by subsampling. Yet, the situations with respect to
secure collaborative learning, where the model is trained in a way that none of the parties can see
the data, are very different.
In secure collaborative learning, many organizations train a model over their joint dataset using
MPC. If the data is of high-quality, by having more data, we expect the model to be better [385–
389], but we really do not know if the data is indeed of high quality. This is crucial because the
model may later be used to affect people. GDPR [247] requires organizations using such models
to prevent errors, bias, and discrimination and take liability of the models [390]. Due to MPC,
the organization that uses the model does not actually know the training data, but, however, the
organization is responsible for the mistakes of the model, which can be caused by unbalanced data
from another party in the collaborative learning. How can an organization take the (unknown) risk
for another organization’s untested data?
We believe that, in secure collaborative learning, different parties should not just focus on
data confidentiality and integrity, but also data quality. Specifically, we think the first step toward
this direction is to perform distribution testing over the data used in the collaborative learning, to
examine:
• One-dimensional distributions, such as histogram that describes the distributions of values in
one dimension (e.g., income), or as basic as whether data in the entry is in the right range (e.g.,
age should be ≤ 1000).
• Multidimensional distributions, such as whether the joint distributions of several dimensions
fit into a desired distribution, such as a balanced demographic composition.
Distribution testing has been used to understand data quality and bias in clinical trials. The NIH
Collaboratory [391] recommends comparing the distributions of different datasets to detect data
discrepancies. Such a useful tool is, however, missing in prior works in secure collaborative learn-
ing (e.g., [250, 337, 365, 392]), often left as an open problem. This is likely due to the extremely
1
Correctional Offender Management Profiling for Alternative Sanctions.
CHAPTER 5. HOLMES: EFFICIENT DISTRIBUTION TESTING 103
witness witness
high overhead of distribution testing. Checking if a number x is in a range [a, b], for example,
already requires a very complicated protocol in MPC [217].
We present HOLMES, a protocol that performs such distribution testing efficiently, often at
only a small fraction of the cost of secure collaborative learning. In our experiments, compared
with a nontrivial baseline that we describe below, HOLMES achieves a speedup of 270× for vari-
ous distribution tests and up to 104 × for multidimensional tests. The core of HOLMES is a hybrid
protocol that integrates MPC with zero-knowledge proofs and a new ZK-friendly, naturally oblivi-
ous sketching algorithm for multidimensional tests. HOLMES is already open-sourced in GitHub
(anonymously): https://github.com/holmes-anonymous-submission/
• In the worst case, each party requires a different distribution testing (assuming each is of over-
head C) to other parties, the amount of computation is ((N C) · N ). Running this in N -party
MPC leads to a wall-clock time of O(CN 3 ).
In this paper, we present a third computation model that reduces the wall-clock time to O(CN )
even in the worst case.
HOLMES: low-complexity via IZK. We make use of interactive zero-knowledge (IZK) proofs,
which involve a prover and a verifier as follows. Each party in the collaborative learning takes
turns to prove to and verify each other in respect to distribution testing. Concretely, each party
proves to (N − 1) parties and verifies (N − 1) parties. For a distribution testing of overhead C, the
wall-clock time for IZK is O(CN ). This applies to the worst case as well: a prover simply proves
different statements to different verifiers.
We can see that IZK immediately reduces the complexity as it avoids the penalty due to having
more parties in the MPC. In essence, the distribution testing is not a computation that requires
N -party data, it is about one party’s data, and it does not actually need N -party MPC. We feel that
many secure distribution testing would benefit from this model.
This new model leaves two questions: First, how can we ensure that the data in MPC is exactly
the same data proved in IZK? We present, in Section 5.3, a lightweight consistency checking proto-
col from DeMillo-Lipton-Schwartz–Zippel lemma [191–193] that solves this in O(N ) wall-clock
time and is concretely efficient. Second, is this low-complexity IZK also concretely efficient?
Thanks to the recent development of IZK from silent OT [394–400], the answer is yes. Our evalu-
ation in Figure 5.7 confirms these gaps in complexity and concrete costs.
Remark: why not NIZK?. A natural question is why we use IZK instead of non-interactive ZK
(NIZK), which can further reduce the wall-clock time to O(C + N ), if the NIZK is succinct and
holographic. The reason we choose not to use NIZK is due to their extremely high prover overhead.
IZK from silent OT, which cannot be NIZK by applying Fiat-Shamir transform [218] due to the
use of private coins, is much more efficient. This gap could be in fact inherent, as an IZK can often
reason about a statistical security parameter σ ≈ 240 , while NIZK needs a computational security
parameter λ ≈ 2128 . It is an open problem to find an NIZK that is concretely more efficient for our
setting.
Baseline: HOLMES:
Oblivious bucketing ZK-friendly sketching
Ideal functionality F
Running with N parties P1 , · · · , PN and a simulator Sim, F proceeds as follows: Upon receiving a
message (sid, Pi , inputi , testi ) from each of the N parties (or from Sim if that party is corrupted),
1. Abort: F awaits a message (deliver, sid) or (abort, sid) from Sim to decide whether the computation
should move forward. F proceeds to the next step if the message is (deliver, sid). Otherwise, F sends
(abort, sid) to each Pi and Sim, and halts.
2. Distribution tests: F runs the distribution tests specified in (test1 , . . . , testN ) with respect to the each
input (input1 , . . . , inputN ). For each distribution test, F sends either (accept, sid) or (reject, sid) to
each Pi and Sim, and halts.
pseudorandom function, such as SHA-256, is impractical. We also find that ZK-friendly hash func-
tions [409, 410] are still costly. Instead, we strive to find a tailored way to obtain pseudorandom-
ness for the specific random projection that we are performing. We call this overall construction
“ZK-friendly sketching”.
Finding a random function for random projection. The specific random projection that we are
performing requires a pseudorandom map with an one-bit output b ∈ {−1, 1}. Although we can
use any pseudorandom function and extract one bit from it through bit decomposition, this process
is costly in IZK. Instead, we identify that Legendre PRF, which has been studied recently [411–
414] and can be seen as a random universal one-way hash function (UOWHF) [415, 416] with a
one-bit extractor, is a natural fit, and is extremely cheap—it only requires 8 input or multiplication
gates.
With these techniques, QHOLMES’s multidimensional distribution testing only requires O(m log m)
computation (as long as i Di is not too large). We show, in our experiments, that this solution is
up to 104 × faster compared with the baseline.
• Implementation of HOLMES with well-known statistical tests including z-test, t-test, F -test,
and χ2 -test;
• Extensive experimental evaluation that uses diverse datasets such as a bank-marketing [417, 418]
dataset, a diabetes [419, 420] dataset, and an auctioning dataset [421].
5.2 Overview
We consider N parties who participate in a secure collaborative learning, as shown in Fig-
ure 5.4. In HOLMES, the parties perform two types of computation: MPC and IZK. All the N
parties run the same instance of MPC, which has loaded each party’s dataset. During the distri-
bution testing, the parties will run IZK in a pairwise and bidirectional manner, where each party
communicates with every other party, and both parties take turns as a prover and verifier to perform
distribution testing on each other’s individual dataset.
Tests. A distribution test is a predicate over a dataset or more than one datasets (from different
parties). Examples include well-known statistical tests, such as mean equality tests z-test (known
variance) and t-test (unknown variance), variance equality test F -test, and Pearson’s χ2 -test. All
these tests target the distances between two datasets, or between a dataset and a public distribution.
HOLMES implements various distribution test gadgets, as shown in Table 5.1.
Workflow. HOLMES is a protocol to perform distribution testing for secure collaborative learning
running in MPC, or in other words, a subroutine of the MPC that runs at the early stages of the
secure collaborative learning when all the parties have inputted their data to MPC. Now, right
before MPC starts to run the actual training algorithm, HOLMES is invoked to perform distribution
tests, as follows.
1. Loading the data to IZK: Each party inputs their data to IZK. This prevents the party from
changing the input adaptively after seeing the revealed distribution tests.
2. Revealing the distribution tests: After the data has been loaded, the parties reveal the distri-
bution tests that they want to perform over other parties’ datasets.
3. Consistency check: All parties perform the consistency check in Section 5.3 to check that the
inputs to IZK and MPC are equal. The parties abort if the check fails.
4. IZK verification: Every pair of parties take turns to be the prover and the verifier in IZK. The
prover proves the correct calculation of some specified statistics about the data, which is verified
by the verifier without seeing the data. The verifier aborts if IZK fails.
5. MPC finishing touch: For distribution tests that involve more than one party’s data (e.g., z,
t, F -tests), we need MPC to look at the statistics of each party’s data, compute the final test
statistic, and decide whether the data passes the test. Here, MPC only needs to compute over
statistics, which is small, and thus we call it the “finishing touch”.
When the distribution testing is done, the original MPC protocol continues with the secure collab-
orative learning.
CHAPTER 5. HOLMES: EFFICIENT DISTRIBUTION TESTING 108
Table 5.1: Distribution test gadgets in HOLMES (α denotes the significance level).
Gadget Description
check that values for an attribute attr in population S fall in the
range(hSi, attr, [a, b]) → {yes, no}
range [a, b]
count elements of S in D = n i=1 Di non-overlapping
Q
histogram(hSi, (attr1 , ..., attrn ),
−−−→ (multidimensional) buckets for attributes (attr1 , . . . , attrn )
([a1 , b1 ], . . . , [aD , bD ])) → count
mean(hSi, attr) → x mean of S for an attribute attr
variance(hSi, attr) → s 2
variance of S for an attribute attr
mean of elements in S belonging in the range [0, θ] for an
trimmedMean(hSi, attr, θ) → x
attribute attr
z-test for mean equality for an attribute attr of populations S1 and S2
zTest(hS1 i, hS2 i, attr, σ1 , σ2 , α) → {yes, no}
with standard deviations σ1 , σ2 , respectively
tTest(hS1 i, hS2 i, attr, α) → {yes, no} t-test for mean equality for an attribute attr of populations S1 and S2
FTest(hS1 i, hS2 i, attr, α) → {yes, no} F -test for variance equality for an attribute attr of populations S1 and S2
χ2 test for goodness-of-fit of attributes (attr1 , . . . , attrQd ) for
chiSquaredTest(hSi, (attr1 , . . . , attrn ), D= d
Di
([a1 , b1 ], . . . , [aD , bD ]), (p1 , . . . , pD ), α) → {yes, no} population S for multidimensional buckets [aj , bj ]j=1 i=1
and
public distribution (p1 , ..., pD )
ℙ, 𝕍
𝒫! 𝕍, ℙ 𝒫"
𝒫! 𝒫"
ℙ, 𝕍
𝒫" 𝕍, ℙ 𝒫#
ℙ, 𝕍
𝒫# 𝒫! 𝕍, ℙ 𝒫#
MPC IZK
Leakage from distribution tests. Note that any distribution testing leaks one-bit information—
passing or not passing the tests. We assume that, when each party reveals the distribution tests
it wants to enforce on other parties’ data, the other parties will refuse those tests that may leak
sensitive information.
More assumptions. Parties in the secure collaborative learning are responsible for specifying the
distribution tests, which are revealed after the same data is loaded to MPC and IZK. We informally
assume those tests are not predictable, and the parties cannot effectively tune the input data accord-
ingly before the distribution testing. In addition, parties can abort after knowing the distribution
tests (e.g., pretending that the network is down) and request to redo the distribution testing, so that
the parties can tune the data according to the tests. We assume that MPC can enforce that parties in
the second execution must use the same data as the first execution, which is commonly supported
in many MPC protocols.
mi
j=1 xMPC [i, j] · β for each party Pi and reveal the result.
j
CHAPTER 5. HOLMES: EFFICIENT DISTRIBUTION TESTING 110
Pmi
4. Let {xIZK [i, j]}m
j=1 be the data from Pi in IZK. Invoke the IZK oracle to compute ri +
i
j=1 xIZK [i, j]·
β for each party Pi and reveal the result in each of the (N −1) instances of IZK where Pi serves
j
as the prover.
5. CC outputs b = 1 if the results about each party’s data are all equal, or b = 0 otherwise.
Security. Completeness is straightforward, so we focus on soundness and zero-knowledge.
• Soundness: If the consistency check passes, by DeMillo-Lipton-Schwartz–Zippel lemma [191–
193] (which we include in Section 5.8), with probability 1 − maxi (mi )/|F|, the data in MPC and
IZK is the same.
• Zero-knowledge: Thanks to the random values ri , all values being opened in CC are masked
by ri . There is a simulator that samples random values as the results of linear combination and
invokes the MPC and IZK simulators to simulate the computation.
Cost analysis. The amount of work in MPC is O( N i=1 mi ), and, in many MPC protocols where
P
linear combination is a local operation that does not depend on the number of parties N , the wall-
clock time is indeed only O( N The wall-clock time in IZK is O(N maxi (mi )), and in
P
i=1 mi ).
many IZK protocols, linear combination is concretely very cheap.
~v is one-hot, meaning that it has exactly one “1”, and the rest are “0”. Next, P shows that the entry
belongs to the i-th bucket via a range check. This can be extended to the multidimensional case.
−−−→
The gadget histogram(hSi, (attr1 , ..., attrn ), ([a1 , b1 ], . . . , [aD , bD ])) → count works with with n
attributes (attr1 , ..., attrn ) and produces a multidimensional histogram.
Mean and variance. Mean and variance are essential in many tests, such as z-tests and t-tests.
Pmprove x is the mean of a population S over an attribute attr, the prover P shows that m · x ≈
To
i=1 xi . In practice, we want to keep a few decimal places for x (e.g., x = 12.34 with two decimal
places). This is done by defining xP 0
= 1234, a fixed-point representation of x, and P uses range
proofs to show that m · x ≤ 100 · m
0
i=1 xi < m · (x + 1). To prove the variance, P first proves
0
the calculation of the mean x and of the mean of the squares y. The variance can be verified by
checking s2 ≈ m−1 m
(y − x2 ).2 We provide two gadgets mean(hSi, attr) → x and variance(hSi,
attr) → s2 .
Trimmed mean. Trimmed mean is similar to mean, but it only considers entries with values
within a certain range [0, θ]. This statistic is useful as it can remove extreme values before com-
puting the mean. For each entry xi in the population, the prover P first proves the computa-
tion of a bit bi , which indicates whether the value falls in [0, θ], using range checks. Next, the
party PP proves that the number of entries with bi = 1 is nθ and that the sum of these entries
Sθ = i s.t. bi =1 xi . Finally, P can show the trimmed mean as Sθ /nθ . HOLMES implements it in
the gadget trimmedMean(hSi, attr, θ) → x.
where Tα,df is the critical value determined by the significance level α and the degree of freedom,
which, for the t-test, is defined as follows, which involves secret variables s21 and s22 .
2
s21 /m1 + s22 /m2
df = 2 2 ,
2 2
s1 /m1 /(m1 − 1) + s2 /m2 /(m2 − 1)
This can be computed in MPC with the help of a lookup table. In our implementation, we use a
lookup table for Tdf for df ranging from 1 to 100. When df > 100, Tdf almost converges, and we
can take Tdf = 1.645.
F -test. This distribution test checks whether the variances of populations S1 and S2 for the at-
tribute attr are close to each other. This requires the parties to provide the variances s21 and s22 . The
test checks if:
?
s21 / s22 ≤ Tα,m1 ,m2
where Tα,m1 ,m2 is determined by the significance level α, m1 , and m2 and can be computed outside
MPC.
Pearson’s χ2 -test. This distribution test checks whether the population S (which can be a combi-
nation of multiple parties’ input data) for the attribute attr follows some public distribution. Given
−−−→
the histogram count over the attributes attr which has D buckets, the test checks if:
PD ?
2
j=1 ( count[j] − mpj ) /(mpj ) ≤ Tα,D ,
where m is the number of entries and pj is the probability mass for the j-th bucket of the public
distribution →
−
p = (p1 , . . . , pD ). The critical value Tα,D is determined by the significance level α
and the number of buckets D.
• Pearson’s χ2 -test: O(D + log m) to compare the test statistics with the critical value. The cost
D is because there are D buckets to count. The count log m is for comparison.
Note that Q in the multidimensional case, which we will describe in Section 5.5, the number of
buckets is nj=1 Di where Di is the number of nominal values in the i-th attribute, the cost becomes
impractical for MPC and is not just a finishing touch. We will now show how to handle such
multidimensional case with very high D using a different algorithm.
Legendre PRF
1.bucketize 3. 𝜒 " test 3. 𝜒 " test
1. sketch
+0 +1 +0 +0 2. count 2. sum
… 91 111 234 … 56 17 -8 1 … -9 -1 1 1 … -1
𝐷! ×𝐷" …×𝐷# buckets a vector of length 𝐷! ×𝐷" …×𝐷# a vector of length r a vector of length r = 𝑂 log 𝑚
when the number of buckets D becomes very high. This often happens when there are many
dimensions.
• IZK: In the IZK, a multidimensional histogram needs to be computed. This histogram has
D = D1 × D2 × ... × Dn buckets. To count how many entries belong to each bucket in an
oblivious manner, linear scans are typically necessary, which have a cost of O(D log D) per
entry, where the term log D is for comparing the index of the bucket.3 Experiments show that
this becomes expensive when D is large.
• MPC: The MPC performs the final computation for Pearson’s χ2 -test, which involves the his-
−−−→
togram count of length D. Therefore, the cost in MPC is O(D).
The linear growth with respect to D is discouraging. In our experiments in Section 5.6.5, perform-
ing distribution testing over four attributes—age, jobs, marital status, and education—results in
D = 37, 500 and takes 105 seconds to compute.
Tool: unnormalized χ2 test. Before we describe HOLMES’s solution, we first describe an-
other test for closeness of distributions, called unnormalized χ2 test by Arias-Castro, Pelletier,
and Saligrama [426]. The test has a more complicated critical value, but it removes the division by
mpj from the per-bucket computation, as shown below:
where the critical value Tα,m,p1 ,p2 ,...,pD is computed from a variant of the generalized χ2 distribution
with parameters (mp1 , . . . , mpD ) [427–429]. We provide the statistical details in Section 5.10.
Since the parameters are public, Tα,m,p1 ,p2 ,...,pD can be computed outside MPC.
3
Another solution is ORAM [ORAM:goldreich1987towards, ORAM:goldreich1996software,
ORAM:RevisitedPinkas:2010, ORAM:Shi:2011, ORAM:Stefanov:TowardsPracticalORAM:2012,
ORAM:gentry2013optimizing, 186, 187] which has a sublinear complexity O(log D) per entry. Empirically
speaking, ORAM starts to beat the linear scan when D is roughly larger than 220 [102]. Note that initializing
the ORAM and reading the counts in the end from ORAM are still needed, and would incur one-time costs of
O(D log D).
CHAPTER 5. HOLMES: EFFICIENT DISTRIBUTION TESTING 115
HOLMES: ZK-friendly sketching. We find that there is another way to perform this distribution
testing with a much lower computational complexity. We now describe its overall workflow, which
is illustrated in Figure 5.5. Details will follow in the rest of this section.
• After the data is loaded to IZK and MPC and the consistency check passes, all the parties run a
coin toss protocol to sample r different keys for Legendre PRF, denoted by k1 , k2 , ..., kr .
• Sketching: The Legendre PRF is applied r times to each entry of the population S, each time
with a different key. This produces, for each entry, a vector of length r that consists of elements
from {−1, 1}. Here, r = O(log m) and does not grow with D (as long as D << p, where p is
the prime modulus of the field used in IZK and MPC).
• Summing: All these length-r vectors are summed together, which is done both in IZK and MPC.
IZK can verify the accumulation of these vectors from the prover and verify the single-party sum,
where MPC can accumulate the single-party sums from multiple parties, to produce the overall
sum, if the population S comes from multiple parties’ data.
• χ2 -test: Let − −→ denote the sum of all length-r vectors. The test can be rewritten as:
sum
Pr ?
j=1 ( sum[j] − q[j])2 ≤ r · Tα,m,p1 ,p2 ,...,pD ,
where vector → −q is constructed by multiplying a matrix A ∈ Fr×D to the length-D vector →−p =
(mp1 , mp2 , ..., mpD ), where Ai,j is the result of Legendre PRF with key ki over input j. This
vector →
−q can be computed publicly.
Cost analysis of the new approach. We will show why this sketching algorithm works in the
rest of the section, and now we focus on its cost. For a dataset of m entries, the cost in IZK is
O(m log m) for evaluating the Legendre PRF r = O(log m) times for each entry, and the cost in
MPC is O(r). There is some computation outside IZK and MPC, which is to compute → −p , and it
has a cost of O(D log m), including an unavoidable cost to at least parse the public distribution,
which already is O(D log m). In practice, computing → −p outside IZK and MPC is not the main
cost, and can be done beforehand. We will show in our experiments Section 5.6.4 that this new
approach can be 104 faster in a real-world dataset.
for sufficiently large r = O(log m). Now, our plan is to let IZK verify the computation of − −→
sum.
The test statistics can be computed in MPC (in the multiparty case) with O(r) given → −
q , and
→
− −−−→
q can be computed publicly. However, the cost is still high because verifying count still takes
O(mD log D).
Rewriting − −→ := A · −
sum
−−→ −−−→
count. To solve this problem, we must avoid the computation of count.
−−−→
Note that count stores the number of elements in each bucket. This means that we can rewrite
−−→ := A · −
sum
−−→
count as follows.
−−→ = A · −−−→
count = A · m
P →
− Pm →
−
sum i=1 σi = i=1 A · σi
where → −
σi is a one-hot vector (0, 0, ..., 0, 1, 0, ..., 0) of length D where the j-th element is “1” if
the i-th entry belongs to the j-th bucket, and all the remaining elements are “0”. We use I(i) to
represent the index of this bucket j for the i-th entry. Note that if we represent the matrix A by its
columns,
A = (→ a1 T →
− −a2 T · · · − a→ T
D )
A· → −
σ = − ia−→T I(i)
where the r different keys are K1 , K2 , ..., Kr . This allows us to rewrite −−→ := Pm −
sum −→
i=1 aI(i) in a
way that requires no lookup.
Pm
sum[j] := i=1 PRFKj ( I(i) ) j ∈ {1, 2, ..., r} .
4
Readers who are familiar with zero-knowledge proofs may immediately think about polynomial commitment,
which can make the lookup verification holographic, in that the verifier is very efficient. However, we want to remind
the readers that holography does not mean that the prover is efficient. Here, we want to find a solution that the prover’s
work, even if it is outside IZK, is small. In other words, we need some sort of double holography where the prover
also does not need to look at matrix A.
CHAPTER 5. HOLMES: EFFICIENT DISTRIBUTION TESTING 117
which only requires O(mr) computation in IZK, as long as D << p where p is the prime modulus
of the field F used in IZK and MPC. The only remaining question is how to instantiate this PRF
efficiently, which we discuss below.
Choice of r. The Johnson-Lindenstrauss lemma does not specify how to choose a concrete r. In
practice, r is often chosen empirically. Venkatasubramanian and Wang [431] shows that one can
conservatively choose r = 2 ln m/2 where is an error parameter. Our implementation follows
this method.
Amortized by r
Cost per entry
(best possible)
SHA-256 22272 · dr/256e 87
Rescue 384 · dr/42e + 186 · dr/21e 18
Poseidon 200 · dr/42e + 186 · dr/21e 13.62
Legendre 8·r 8
Table 5.2: Cost per entry for different PRFs when used in our setting where |p| = 62 bits,
counting the number of input gates and multiplication gates combined. We use hash functions
as a PRF by including the key as the prefix of the input, known as domain separation.
CHAPTER 5. HOLMES: EFFICIENT DISTRIBUTION TESTING 118
Time (s)
Time (s)
10
6
4 5 3
2
0 0 0
28 212 216 220 224 24 26 28 210 212 28 212 216 220 224
Range size Range size of each group Range size
(a) Range (HOLMES) (b) Histogram (HOLMES) (c) Trimmed mean (HOLMES)
250 360 140
m = 100k (Baseline) m = 100k, 10 groups (Baseline) N = 100k (Baseline)
300 120
200 m = 200k (Baseline) m = 100k, 10 groups (Baseline) N = 200k (Baseline)
m = 200k, 20 groups (Baseline) 100
240
Time (s)
Time (s)
Time (s)
150 80
180
100 60
120
40
50 60 20
0 0 0
28 212 216 220 224 24 26 28 210 212 28 212 216 220 224
Range size Range size of each group Range size
(d) Range (Baseline) (e) Histogram (Baseline) (f) Trimmed mean (Baseline)
Figure 5.6: Overhead of basic statistics for HOLMES and for the baseline.
each element. We also need to obtain the unique bit decomposition for a number in Fp , which
additionally requires a bit-by-bit comparison, and this leads to the cost of 124 per 21 bits. Finally,
it also requires an additional input of 64 bits by the prover.
Pd
• The Legendre PRF can be seen as a random universal one-way function
f k (x) = k 0 + i=1 ki x
i
of degree d (d = 3 in our setting) and a one-bit extractor b = fkp(x) ∈ {−1, 1}, which is the
Legendre symbol. To verify it, the prover inputs two elements and performs six multiplications.
We provide the details of Legendre PRF in Section 5.11.
We show the concrete costs for r = 10 and r = 40 in Table 5.3. In our experiment with a real-
world dataset of 41188 records, r = 40 is used for accuracy. We can see that Legendre PRF has
a lower costs compared with others. To sum up, the use of Legendre PRF makes our sketching
algorithm ZK-friendly. Our experiments show that this is up to 104 times faster than the baseline
based on oblivious bucketing.
CHAPTER 5. HOLMES: EFFICIENT DISTRIBUTION TESTING 119
5.6.1 Setup
We ran our experiments on AWS c5.9xlarge instances, each with 36 cores and 72 GB memory.
We limit each instance’s bandwidth to 2 Gbps and add a round-trip latency of 20 ms. HOLMES
and the baseline are implemented using state-of-the-art cryptographic libraries, as follows.
HOLMES. We use QuickSilver [394] for IZK. The version of QuickSilver we use has integrated
the latest techniques in Silver [433]. We use SCALE-MAMBA [217] and MP-SPDZ [215, 216]
for MPC, where the Low Gear protocol in MP-SPDZ is used for the offline phase of MPC due to
its efficiency, and SCALE-MAMBA is used for the online phase. IZK and MPC work on the same
prime field Fp where p = 262 − 216 + 1.
Baseline. The baseline runs the same checking algorithm in MPC, using SCALE-MAMBA and
MP-SPDZ.
5.6.2 Artifact
We implement all the tools of HOLMES described in the paper, which has been open-sourced
anonymously in GitHub. The implementation consists of three parts:
• Compute engine: The original QuickSilver is not compatible with many efficient MPC protocol
because it works on a very special prime field.5 We perform an extensive search for prime with
low Hamming weight and is compatible with such MPC preprocessing protocols, and we settle
down at p = 262 − 216 + 1. We contribute a fork of EMP-ZK, called EMP-ZK-HOLMES6 , which
includes a highly tuned, specialized implementation for modular reduction and learning-parity-
with-noise (LPN) map for this prime.
• Test gadgets: We implement and provide gadgets for range, histogram, mean, variance, trimmed
mean, z-test, t-test, F -test, and χ2 tests, including both oblivious bucketing and the ZK-friendly
sketching. Integration tests, unit tests, and individual benchmarks are also included in the code-
base.7
5
QuickSilver is restricted to a Mersenne prime p = 261 − 1. However, this prime is not compatible with MPC
preprocessing protocols based on ring learning-with-error (LWE) and would force the MPC to choose preprocessing
protocols based on oblivious transfer, which is slower.
6
https://github.com/holmes-anonymous-submission/emp-zk
7
https://github.com/holmes-anonymous-submission/holmes-library
CHAPTER 5. HOLMES: EFFICIENT DISTRIBUTION TESTING 120
• Examples and benchmarks: We assemble distribution tests for three real-world datasets (de-
scribed in Section 5.6.5) using the gadgets and benchmark their performance. We also include a
QuickSilver-to-SCALE-MAMBA source-to-source compiler and an online-only SCALE-MAMBA
for ease of benchmark with the baseline.
1200
50 50 Bank marketing (HOLMES)
m = 100k (HOLMES) m = 100k (HOLMES) 1000
40 40 Diabetes (HOLMES)
m = 200k (HOLMES) m = 200k (HOLMES) 800 Auctioning (HOLMES)
Time (s)
Time (s)
Time (s)
30 30
600
20 20 400
10 10 200
0 0 0
2 3 4 5 5 10 15 20 25 2 4 6 8 10
Number of attributes Number of individual labels in each attribute Number of parties
Time (s)
Time (s)
104 180000
104
120000
102
102 60000
100 100 0
2 3 4 5 5 10 15 20 25 2 4 6 8 10
Number of attributes Number of individual labels in each attribute Number of parties
Figure 5.7: Overhead of the multidimensional distribution testing and the three real-world
datasets in HOLMES and in the baseline.
Datasets
We evaluate HOLMES and the baseline on three real-world datasets. For each dataset, we
choose distribution tests that fit the common use case of such datasets.
Bank marketing. The dataset [417, 418] consists of telemarketing records for financial products.
CHAPTER 5. HOLMES: EFFICIENT DISTRIBUTION TESTING 122
Number of entries
82376
(41188 × 2)
Number of attributes 21
Total time 12.15 s
Average time per entry 0.15 ms
Loading the data to IZK 0.27 s
Range tests for all attributes 5.63 s
Histogram and χ2 test on age 0.86 s
Multidimensional χ2 test on
4.92 s
age, job, marital status, education
Mean, variance, and t test on
0.21 s
call duration
Consistency check < 0.01 s
Number of entries
203532
(101766 × 2) Number of entries
1134582
Number of attributes 49 (567291 × 2)
Total time 33.43 s Number of attributes 15
Average time per entry 0.16 ms Total time 103.49 s
Loading the data to IZK 1.59 s Average time per entry 0.09 ms
Range tests for all attributes 23.27 s Loading the data to IZK 2.59 s
Histogram and χ2 test on Range tests for all attributes 92.48 s
7.59 s
medical specialty Trimmed mean and z test
7.45 s
Mean, variance, t test on on total displays
0.23 s
number of lab procedures Consistency check < 0.01 s
Consistency check < 0.01 s
It includes client profile and call records. A set of banks may want to jointly train a classifier
to predict the success of the campaign. Before the training, though, they want to ensure that the
dataset has a balanced number of customers from different backgrounds. Therefore, banks can
consider the following distribution tests:
• Pearson’s χ2 -test over age grouped into the buckets 10–19, 20–29, · · · , 90–99 to ensure that the
dataset distribution is similar to the national census age distribution,
CHAPTER 5. HOLMES: EFFICIENT DISTRIBUTION TESTING 123
• Pearson’s χ2 -test over age, job, educational level, and marital status to check if the dataset is
balanced across customers with different backgrounds,
• t-test over the telemarketing call duration to check whether their telemarketing records are simi-
lar enough to train a model together, and
• range checks for all the attributes.
Diabetes. The dataset [419, 420] consists of admission records for patients with diabetes. It
includes of patient profile, treatment, and admission history. A use case is for hospitals to compare
the success rate of different treatments. Therefore, hospitals can consider the following checks:
• Pearson’s χ2 -test for the medical specialty of initial admissions,
• t-test on the number of lab procedures across hospitals, and
• range checks for all the attributes.
Auctioning. The dataset [421] consists of advertisement biding history. It includes the advertise-
ment location, its expected number of displays, and revenue. Bidders may want to train a model
that predict the number of displays. So, bidders can consider the following two tests:
• z-test on the number of displays that are lower than a specific threshold, which checks if the
bidding history between different parties is similar, excluding outliers, and
• range checks for all the attributes.
Results
We present our results in Section 5.6.4 and Section 5.6.4. We put them in separate graphs be-
cause the overhead is very different. For the three datasets, HOLMES’s approach outperforms the
baseline by 62× to 272×. The gap is larger as the number of parties increases. Recall the com-
plexity analysis in Section 5.1, we know that HOLMES’s overhead grows linearly to N , while the
baseline overhead grows quadratically to N . The results shown in Section 5.6.4 and Section 5.6.4
confirm this growth patterns.
Breakdown. To understand what contributes to this overhead, we present the breakdown of the
overhead in Table 5.4, Table 5.5, and Table 5.6. As shown in the tables, the average time per entry
varies between datasets because we perform different tests on them. In all three experiments, we
see that the range tests contributes to a large portion of the overhead. In contrast, multidimensional
testing is quite efficient. The consistency check between IZK and MPC also has a small overhead.
Zero-knowledge proofs. Zero-knowledge proofs [439] enable a party to prove a statement without
leaking any information. Recently, constructing practical ZK has gained much attention, especially
since succinct non-interactive proofs [440–444] have been used in blockchains. In HOLMES, we
require small proving time, so succinctness and non-interactivity are not important. Hence, we
use QuickSilver [394] due to the lower prover overhead. As new protocols for interactive zero-
knowledge proofs based on silent OT [394–400] are releasing, HOLMES may also change to these
newer protocols, such as line-point zero-knowledge (LPZK) [397].
Statistics and range checks. A line of works [445, 446] use MPC techniques for statistical tests.
In contrast to our protocol, they mostly focus on the two-party case and consider different threat
models. Also, range checks [73, 190, 441] are frequently used to limit the effect of misreported
values in secure computation. HOLMES uses range checks as a building block for performing
efficiently statistical test. As an example, Prio [73] (or Prio+ [190]) is a system that aggregates
statistics over multiple clients who wish to preserve the confidentiality of their individual data but
relies on the existence of non-colluding semi-honest servers, whereas HOLMES properly functions
even with a dishonest majority.
Secure collaborative computation systems. Multiple works build systems for data analytics
and machine learning against malicious adversaries [32, 71, 249–256, 348, 353, 361, 364, 367,
392]. HOLMES contributes to secure collaborative computation systems by providing an efficient
method for distribution testing.
Reducing bias in machine learning models. HOLMES is a useful tool for identifying bias in
datasets or machine learning models without compromising their privacy. Nevertheless, HOLMES
is just a protocol, and it does not specify what distribution tests should be done to mitigate such
bias. Robust statistics [447–449] focus on statistics that are resilient to biased input distributions.
A fascinating future direction is to augment HOLMES with robust statistics that not only detect
bias, but are able to make the model resilient to biased data.
Pn
where r = O(log m) and m = j=1 xj .
CHAPTER 5. HOLMES: EFFICIENT DISTRIBUTION TESTING 125
Proof sketch. We now discuss how to prove the security in the (FIZK , FSFE )-hybrid world, where
an interactive zero-knowledge proof ideal functionality FIZK models IZK, and a secure function
evaluation ideal functionality FSFE models MPC. We also need to invoke a random oracle for sub-
sampling, and/or an ideal cipher for our multidimensional distribution testing to model Legendre
PRF. For ease of presentation, we focus on the part involving (FIZK , FSFE ) in this proof sketch as
follows.
We assume that the adversary corrupts at least one party, otherwise the adversary does not even
know the list of statistical tests. For simplicity, we assume malicious parties do not abort in the
middle of the protocol. The simulator in the ideal world can simulate the transcripts of HOLMES’s
protocol, by invoking the corresponding simulators SimIZK and SimSFE , on the corresponding com-
putation as well as the consistency check. Note that, during the consistency check, the simulator
can easily compute the results at a random point z = β sampled by a simulated coin toss. There-
fore, the simulator is able to simulate the view of the hybrid world. We show that HOLMES’s
protocol securely realizes the ideal functionality F by a hybrid argument.
Let N (µ, σ 2 ) be the normal distribution with mean µ and variance σ 2 , then a sample from χ̃2 (p1 , . . . , pD )
is computed as follows:
Pn for2 j ∈ {1, . . . , D} sample Zj ←$ N (0, pj (1 − pj )) and E[Zi · Zj ] =
mpi pj , and output j=1 Zj . We can compute the critical value based on the public parameters
(p1 , . . . , pD ).
Now, we show that the test passes if and only if the dataset follows the public distribution. The
unnormalized χ2 -test says that if the data is close to the public distribution, then
m→∞
T = nj=1 (count[j] − mpj )2 −−−→ χ̃2 (p1 , . . . , pD ),
P
So, the test statistic is close to the expected value. When the dataset does not follow the public
distribution, then there is some bucket for which count[j] → mp0j 6= mpj . So, count[j] − mpj →
m(p0j − pj ) = ∞, and the test statistic will be larger than expected.
graphic assumptions, it has been conjectured, like other symmetric key primitives, to have such
a property. The pseudorandomness of Legendre PRF has been studied in many different aspects,
including linear complexity, collision, avalanche effect, and so on [455–457]. There is a recent
trend to study Legendre PRF as a MPC-friendly PRF function [412, 413, 450, 451, 458, 459].
Note that the Johnson-Lindenstrauss lemma does not require a high level of pseudorandomness—
hash functions with bounded independence already suffice [460, 461]. We only need to ensure that
the functions are chosen independently from the input, which is guaranteed by loading the data in
IZK and MPC before sampling the PRF keys.
Recently, there have been several works on key-recovery attacks on Legendre PRF [413, 450,
451], which are not relevant to our settings because our protocol never hides the Legendre PRF
keys. Our protocol only uses the Legendre PRF to generate a pseudorandom mapping. Still, in
HOLMES, we conservatively choose our parameters to be sufficient to resist key-recovery attacks,
so that we have some security margin against future attacks on pseudorandomness. Even with
state-of-the-arts attack techniques [462], there are no known PRF distinguishing attacks on the
Legendre PRF that are not based on key-recovery attacks [414]. Ethereum foundation currently
has an active bounty program [458] on this open problem.
128
Chapter 6
Ledger systems are applications run on peer-to-peer networks that provide strong integrity
guarantees. However, these systems often have high participation costs. For a server to join this
network, the bandwidth and computation costs grow linearly with the number of state transitions
processed; for a client to interact with a ledger system, it must either maintain the entire ledger
system state like a server or trust a server to correctly provide such information. In practice, these
substantial costs centralize trust in the hands of the relatively few parties with the resources to
maintain the entire ledger system state.
The notion of incrementally verifiable computation, introduced by Valiant (TCC ’08), has the
potential to significantly reduce such participation costs. While prior works have studied incre-
mental verification for basic payment systems, the study of incremental verification for a general
class of ledger systems remains in its infancy.
In this paper we initiate a systematic study of incremental verification for ledger systems, in-
cluding its foundations, implementation, and empirical evaluation. We formulate a cryptographic
primitive providing the functionality and security for this setting and then demonstrate how it
captures applications with privacy and user-defined computations. We build a system that en-
ables incremental verification for applications such as privacy-preserving payments with universal
(application-independent) setup. Finally, we show that incremental verification can reduce partici-
pation costs by orders of magnitude for a bare-bones version of Bitcoin.
6.1 Introduction
Ledger systems are applications running across many servers in peer-to-peer networks that
offer strong integrity guarantees. Cryptocurrencies, ranging from basic payments to rich smart
contracts, are notable examples. The strong integrity guarantees, however, come with high partici-
pation costs. In this paper we study how to reduce participation costs in ledger systems.
Participation costs. Servers (“full nodes”) in a ledger system maintain the entire application state
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 129
by performing a new state transition with each new transaction (or batch of transactions in a block),
according to some consensus protocol. New servers that join the network must download every
transaction and perform each state transition executed since the start of the system. The bandwidth
and computation costs increase linearly in the number of transactions and soon become substantial.
For example, the Bitcoin ledger is over 300GB; downloading and executing each transaction to
reach the latest state can take days, depending on the machine.
Moreover, clients wishing to interact with the application must either keep the entire appli-
cation state like a server or ask a server to answer queries about the current state (or even past
transactions). The first option requires clients to perform computations not relevant to them (e.g.,
process all payments in the system) and also excludes clients running on weak devices (e.g., smart-
phones). The second option requires clients to trust that servers answer queries correctly.1 Both
options are undesirable.
Consequently, while in theory ledger systems enable peer-to-peer applications, in practice high
participation costs centralize the trust in the hands of a few parties with the resources to maintain
the entire application state.
Avoiding re-execution via cryptographic proofs. Several works (reviewed in Section 6.8) have
studied systems that leverage cryptographic proofs to avoid re-executing transactions when check-
ing state transitions. Informally, cryptographic proofs enable anyone to produce a short string
attesting to the correctness of a computation, which can be verified exponentially faster than the
proved computation itself. Using this tool, for each state transition, one can generate a proof of
the transition’s correctness by referring to two short commitments that summarize the application
state before and after the transition. Now, validating the latest state only requires downloading all
state commitments and transition proofs (much less data than all transactions) and checking all
transition proofs (much less work than re-executing all transactions).
Transition proofs reduce participation costs for both servers and clients, but servers and clients
still have to process every transition proof. The costs to catch up with the latest state still grow
linearly with the number of state transitions that have occurred since the last “synchronization” (or
since the start of the system for a new participant). In particular, this is expensive for clients who
have spent long periods of time offline.2
This idea naturally extends to considering an untrusted operator that produces transition proofs
for batches of transactions gathered by the operator. This is a popular “layer-2 scaling solution”
that has been used in practice with concrete efficiency benefits (see Section 6.8). But the basic
idea, as well as the asymptotic complexity, remains essentially the same because batches cannot
be too large.
Can one reduce the participation costs further?
Incremental verification. Valiant [465] introduced incrementally verifiable computation (IVC) to
capture an everlasting computation whose every intermediate state is accompanied by an easy-to-
1
Simplified Payment Verification (SPV) [463], FlyClient [464], and other light client schemes offer the client
some security guarantees without storing the entire application state, but the client still has to trust that the current
state is a result of applying transactions correctly.
2
Additionally using a light client protocol can reduce synchronization costs, but this is at the cost of qualitatively
weaker security guarantees, because the client would have to trust that all transition proofs have been verified.
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 130
verify proof attesting to its correctness relative to the initial state (not the previous state). This ca-
pability is achievable via recursive composition of cryptographic proofs, i.e., by producing proofs
that (informally) certify both a state transition and the correctness of the prior proof. The exponen-
tial speedup of verification relative to execution ensures that the cost of producing each proof from
the previous proof does not depend on the number of past state transitions.
Incremental verification can dramatically reduce participation costs in ledger systems. Now,
validating the latest state requires downloading only the current state (or a short commitment to it)
and a short proof that attests to its correctness relative to the initial state.3
Towards fulfilling the potential. The blockchain community has recognized the potential of
incremental verification and has studied it for payment systems built on Nakamoto consensus [466]
and on proof-of-stake [467, 468]; the latter has been deployed as a cryptocurrency [469].
However, incremental verification for ledger systems remains in its infancy. First, applications
studied so far include simple user-to-user money transfers but not richer applications (e.g., with
privacy or smart contracts). Second, advances in cryptographic proofs [470–475] imply that incre-
mental verification can be based on proof systems that are better suited for deployment than those
used in [466, 468], namely, proof systems with a simple and universal setup. Both directions are
suggested as future work in [466, 468] and are being explored by practitioners [476].
Even more fundamentally, as we elaborate in Section 6.1.3, while definitions and constructions
of IVC have been studied in detail [297, 477, 478], prior work has only informally discussed the
specific needs beyond IVC that arise in ledger systems, and prior work also did not empirically
evaluate the benefits and drawbacks of incremental verification with respect to participation costs.
This paper. This paper aims to initiate a systematic study of incremental verification for ledger
systems and of its effectiveness in reducing participation costs. We now describe our theoretical
contributions (Section 6.1.1) and systems contributions (Section 6.1.2).
they left to the latest state. Third, ledger systems include clients who do not wish to store the entire
application state; rather, they wish to learn select information by querying servers that store the
entire state, with integrity guarantees.
Moreover, definitions proposed by prior work on incremental verification for ledger systems
[466, 468] have several limitations, which we discuss in Section 6.3.
To fill these gaps, we introduce a cryptographic primitive for transforming a ledger system
specified in a certain formalism into a corresponding incrementally verifiable ledger system (IVLS);
we call this an IVLS compiler and discuss it in Section 6.3. Then in Section 6.4 we explain how the
specific interfaces and security properties of our definition let us build peer-to-peer systems that,
via incremental verification, achieve low participation costs. An IVLS compiler can be obtained,
in a straightforward way, from IVC and collision-resistant hash functions.
(ii) Incrementally verifiable applications. We validate our modeling by showing how to make
several applications incrementally verifiable. By carefully designing the applications’ states, trans-
actions, and transition functions, we obtain IVLS for five applications: (i) UTXO-based payments
(“bare-bones” Bitcoin); (ii) account-based payments, the ledger application studied in prior works
on incremental verification [466, 468]; (iii) privacy-preserving payments, á la Zerocash [479];
(iv) privacy-preserving decentralized computation, á la Zexe [480]; and (v) key transparency [481],
a popular approach to public-key infrastructure.4 Our work shows how applications that involve
privacy and rich computations are compatible with incremental verification (see Section 6.5 and
Section 6.9). This provides solid theoretical foundations that can be used to study the security of
new architectures based on recursive proofs that are being explored for Zcash [482]. Subsequent
work on key transparency also falls within our IVLS model [483].
SNARK verifier can check the satisfiability of a given circuit in time that is exponentially fast by
using a short verifying key that was produced in an offline (preprocessing) phase. Prior work on
incremental verification [466, 468] uses SNARKs whose preprocessing is part of the SNARK’s
setup: the circuit to be proved/verified must be fixed once and for all when the public parameters
for the SNARK are sampled via a cryptographic ceremony [484–486]. This circuit-specific setup
is ill-suited for many applications where the circuits to be proved/verified are determined later on
by users once the ledger system is already running (e.g., as in Zexe [480]), or where circuits need
to be updated.
We give the first demonstration of efficient recursive proofs based on a pairing-based prepro-
cessing SNARK with universal setup. Here “universal setup” denotes the desirable property that
the SNARK’s public parameters do not depend on circuits to be proved/verified (but only on an
upper bound on their size). As we discuss shortly, this is helpful, or even necessary, for many
applications.
Our contribution is to implement and evaluate a (rank-1) constraint system for the verifier of
Marlin [470], a state-of-the-art preprocessing SNARK with universal setup and a simple setup cer-
emony. Our constraint system is less than ten times larger than a constraint system for the state of
the art with circuit-specific setup [487], which suffices for building incrementally verifiable ledger
systems. We discuss our implementation of the Marlin verifier’s constraint system in Section 6.6
and its evaluation in Section 6.7.1.
Other recent works study recursion of preprocessing SNARKs with a universal setup based on
other cryptographic tools (cyclic groups [472] or hash functions [473]), but their proof sizes are
markedly larger.
(2) Incremental verification for private payments. We provide the first realization of private
payments (á la Zerocash [479]) with incremental verification, and evaluate its concrete efficiency.
Prior works on incremental verification only considered basic public payments, while we show that
incremental verification for more complex applications is not only possible but also practical. Our
system prototype makes realizing private payments particularly simple: we only need to program
the compliance predicate outlined in Section 6.5 and Section 6.9. We describe our implementation
in Section 6.6 and evaluation in Section 6.7.3.
(3) Incremental verification reduces participation costs. We provide an evaluation that quan-
tifies how incremental verification reduces participation costs. Prior work on incremental verifi-
cation [466, 468] provided only microbenchmarks or network data about the Mina blockchain,
without studying how recursive proofs reduce network and computation costs for participants.
We evaluate the effect of IVLS on the participation costs of a ten-year simplified version of
Bitcoin (e.g., no scripts): recursive proofs reduce synchronization costs by orders of magnitude
when compared with not using proofs (that is, naive synchronization) or using per-block transition
proofs. Since our code facilitates swapping in different SNARKs over different curves, we evaluate
multiple configurations: (a) SNARKs with circuit-specific setup and with universal setup; and
(b) different MNT cycles (low-security and high-security levels).
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 133
• Synchronization costs: Both servers and clients may go offline and later “catch up” to the
current state of the system. (When servers or clients join, they start from the initial state.) Servers
and clients verify the current state’s integrity by checking that it is the correct result of a sequence
of transactions.
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 134
• Query costs: Clients only store a short state commitment and want to ensure that servers answer
their queries correctly relative to the corresponding state. Clients may also make queries to prior
application states, as the application may “forget” information that the client still cares about
(e.g., a transaction that is already spent in a UTXO-based payment system). If the client only
holds a commitment to the current state, it needs assurance that the prior state used to answer
that query is in the history of the current application state.
Below we discuss participation costs in ledger systems with: no proofs, transition proofs, and
recursive proofs (which underlie incremental verification). Figure 6.1 summarizes how these dif-
ferent options affect the computations required to synchronize; our experiments in Section 6.7.4
confirm this qualitative behavior in practice.
No Proofs
i client/server sync from Si to St
P2P Si+ 1 ← F(txi+ 1, Si)
network txi+ 1, …, txt Si+ 2 ← F(txi+ 2, Si+ 1)
⋮
St ← F(txt, St−1)
Recursive Proofs
cmt−1, St−1, πt−1, txt i server sync from (cmi, Si) to (cmt, St )
Proof P2P client sync from cmi to cmt
Maker cmt, St, πt network cmt, πt, πi→t VF(cmt, πt ) = 1 cmi = ℋ(Si)
VH (cmt, cmi, πi→t ) = 1 cmt = ℋ(St )
Figure 6.1: Synchronization costs in ledger systems with different proof types (see Section 6.4
for discussion of the proof maker). Proving that one state extends another (πi→t ) can be made
lightweight enough that it can be done by peer-to-peer networks without the proof maker. The
server synchronization includes the client synchronization.
No proofs. Without proofs, servers or clients who want to be confident in an application state
have no choice but to derive the application state themselves by downloading and executing each
transaction since they were last online, leading to high synchronization costs. This essentially
removes the distinction between clients and servers, as clients must hold a copy of the current
application state to check its validity. The query cost is thus the cost for the client to execute its
query over this local copy.
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 135
Transition proofs. Instead of executing every state transition, servers or clients can download,
for each state transition, a proof and a commitment to the next state. Servers also download the
current application state and check that the final commitment commits to the current state. As
clients no longer have the entire application state, query costs are different: clients now only use a
commitment to the state to verify query responses. Transition proofs are a significant improvement
over no proofs (Section 6.7.4), and batching can reduce costs even further [489, 490]. However,
synchronization costs remain linear in the number of state transitions and remain substantial for
servers and clients that were offline for a long time.
Recursive proofs. Recursive proofs further reduce synchronization costs for servers and clients
by removing costs linear in the number of state transitions. Servers and clients only have to verify
one proof that the current state is correct and possibly another lightweight proof that the current
state extends the prior state held by them. The prover can recursively compose prior proofs to
reduce proving cost.5 Query costs with recursive proofs match those of transition proofs; clients
must check that their queries were correctly executed using a commitment to the state.
This informal paradigm is the starting point of our work. In Section 6.3 we formulate a cryp-
tographic primitive that captures these capabilities, and in Section 6.4 we explain how to use the
primitive in a system.
summary of the current state. Our definitions distinguish between these, ensuring that clients can
interact with the system in a meaningful way with only a summary of the state.
Second, the definitions in [468] separate the application and the consensus protocol, which
complicates interfaces and introduces properties that only relate to consensus (e.g., chain growth).
More importantly, this is unnecessary: any consensus protocol compatible with incremental veri-
fication can be “folded” without loss of generality into the application itself. Designing consensus
protocols compatible with incremental verification is, of course, important but seems better left
to the details of the application. For example, our definitions can capture incremental verification
not only for traditional blockchain applications (e.g., simple payments and privacy-preserving pay-
ments) but also for applications like key transparency that maintain state via a different centralized
consensus (see Section 6.5). And, indeed, a subsequent work on verifiable key transparency [483]
specifically points out that their work falls under the general framework of IVLS.
Kattis and Bonneau [466] also describe a distributed payment system with incremental veri-
fication. They discuss the benefits of incremental verification at a high level, but do not provide
interfaces and associated security properties that the system needs to fulfill.
Our definitions. We present our definitions for IVLS; later in Section 6.4 we explain how these
abstract definitions apply to real systems and how our properties provide meaningful guarantees
to participants, and in Section 6.5 we exercise our definitions to show how to capture several
applications of interest, including privacy-preserving payments, privacy-preserving computation,
and key transparency (a direction left as future work by [466, 468]).7
A ledger system is a pair LS = (F, C) where F is a read-write program called the transition
function and C is a read-only program called the client function.
y1 y2 y3
⊥ F S1 F S2 F S3 ...
The transition function F specifies how transactions modify the state. That is, given as input a
transaction tx and query access to the current state S, F produces an output y and a state update ∆
(denoted by (y, ∆) := F S (tx)); the new state S 0 is obtained by applying the update ∆ to the old
state S (denoted by S 0 := S + ∆).
The client function C specifies the supported types of client queries over a state: given an input
query x and query access to a state S, C produces a query answer y (denoted by y := C S (x)).
For example, in a simple UTXO-based payment system, the application state contains the pool
of all unspent transactions, an incoming transaction consumes the outputs of prior transactions to
generate new outputs, and the state transition function accepts a new transaction if it consumes
7
We follow the standard game-based approach, and leave to future work a treatment in the universal composability
framework [491].
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 137
unspent outputs. The client function searches for unspent transactions that can be spent by a public
key. (See Section 6.5 for more examples.)
We wish to transform any ledger system into a ledger system that has the same functionality
and is incrementally verifiable. For this, we define an IVLS compiler: a tuple (Setup, MakeSF,
MakeC, History) that we require to fulfill certain syntax and properties. First, Setup is used to
sample public parameters pp; this is a one-time setup that can be used to transform any number
of ledger systems. Next, we separately discuss each of MakeSF, MakeC, History in the next three
subsections.
Remark 7 (extensions). Our definition of a ledger system assumes for simplicity that the initial
state is empty and that the transition function applies one transaction at a time. All discussions
in this paper extend, in a straightforward way, to the case of non-empty initial states and to the
case of transition functions that apply blocks of transactions. Moreover, we do not consider an
algorithm for validating transactions before they are processed by the transition function since the
transition function can check validity itself (and if not, return an error in its output and an empty
state update). In a real system, validating transactions separately is likely to be more convenient.
Remark 8 (deterministic vs. probabilistic). In the definitions of this section we assume that MakeSF
and MakeC are deterministic algorithms. This is the case in our construction (in Section 6.11) and
also simplifies many definitions because an adversary can compute (vS, vF) and vC from F and C,
respectively, by itself. All of our definitions naturally extend to the case where MakeSF and MakeC
can toss coins: the adversary needs to be given (vS, vF) and vC as an input at the right place in the
definitions.
Definition 9 (binding of vS). For every polynomial-size adversary A and sufficiently large security
parameter λ,
vS.VerifyCM(S1 , cm) = 1 λ
vS.VerifyCM(S2 , cm) = 1 pp ← Setup(1 )
Pr (F, S , S2 , cm) ← A(pp) ≥ 1 − negl(λ) .
1
↓
(vS, vF) ← MakeSF(pp, F )
S1 = S2
vF. The tuple vF = (Run, Verify) consists of efficient algorithms working as follows:
• vF.RunS,A (tx) → (y, ∆). Given oracle access to a state S and auxiliary state A, and given as
input a transaction tx, Run outputs a result y and a state update ∆ = (∆S , ∆A ) to modify S and
A. The result y and state update ∆S equal the output of the original transition function F (on
input tx and state S).
• vF.Verify(t, cm, πF ) → b. On input a state’s index t, commitment cm, and proof πF , Verify de-
cides if the commitment is consistent with a state resulting from applying the transition function
F on t transactions. We will assume vF.Verify(0, ⊥, ⊥) = 1.
We require two properties. Completeness (Definition 10) states that using vF.Run to apply a trans-
action to a valid state yields a new valid state that is consistent with the original transition function
F and a new auxiliary state that contains information passing all the relevant checks. Knowledge
soundness (Definition 11) states that if an efficient adversary outputs a state commitment and proof
that are valid according to vF.Verify, then an efficient extractor can output a sequence of transac-
tions that, via transition function F , lead to a state with the claimed commitment.
Definition 10 (completeness of vF). For every polynomial-size adversary A and security parameter
λ,
pp ← Setup(1λ )
vS.VerifyAll(S, A) = 1 (F, S, A, tx) ← A(pp)
↓
(vS, vF) ← MakeSF(pp, F )
vF.Verify(t, cm, π ) = 1
F S,A
Pr (t, cm, π ) ← vS.Info () =1 .
F
(y, ∆S ) = F S (tx) S,A
(y, (∆S , ∆A )) ← vF.Run (tx)
0
t =t+1
S 0 := S + ∆S , A0 := A + ∆A
0 0
vS.VerifyAll(S , A ) = 1 0 0
(t0 , cm0 , πF0 ) ← vS.InfoS ,A ()
Definition 11 (knowledge soundness of vF). For every polynomial-size adversary A there exists a
polynomial-size extractor E such that for every sufficiently large security parameter λ,
pp ← Setup(1λ )
vF.Verify(t, cm, πF ) = 1
↓ (F, t, cm, πF ) ← A(pp) ≥ 1 − negl(λ) .
Pr
S = F (tx1 , . . . , txt ) (tx1 , . . . , txt ) ← E(pp)
vS.VerifyCM(S, cm) = 1 (vS, vF) ← MakeSF(pp, F )
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 139
• vC.RunS,A (x) → (y, πC ). Given oracle access to a state S and auxiliary state A and input x, Run
produces an output y and a proof πC attesting that y = C S (x).
We require two properties. Completeness (Definition 12) states that outputs of vC.Run are accepted
by vC.Verify and are consistent with executions of the given client function C. Soundness (Defi-
nition 13) states that if an efficient adversary outputs (a valid state and auxiliary state and) a proof
that is accepted by vC.Verify for a given input and claimed output, then the claimed output equals
C’s output.
Definition 12 (completeness of vC). For every polynomial-size adversary A and security parameter
λ,
pp ← Setup(1λ )
vS.VerifyAll(S, A) = 1
(F, C, S, A, x) ← A(pp)
↓ (vS, vF) ← MakeSF(pp, F )
Pr =1 .
y = C S (x) vC ← MakeC(pp, C)
(y, πC ) ← vC.RunS,A (x)
vC.Verify(cm, x, y, πC ) = 1
(·, cm, ·) ← vS.InfoS,A ()
Definition 13 (soundness of vC). For every polynomial-size adversary A and sufficiently large
security parameter λ,
pp ← Setup(1λ )
vS.VerifyAll(S, A) = 1 (F, C, S, A, x, y, πC ) ← A(pp)
vC.Verify(cm, x, y, πC ) = 1
Pr (vS, vF) ← MakeSF(pp, F ) ≥ 1 − negl(λ) .
↓
vC ← MakeC(pp, C)
S
y = C (x)
(·, cm, ·) ← vS.InfoS,A ()
• History.ProveS,A (pp, t) → πH . Given oracle access to a state S and auxiliary state A, and given
as input public parameters pp and a previous state’s index t, Prove outputs a proof πH attest-
ing to the relationship between the t-th state commitment in the history and the current state
commitment. (If the current state has an index less than or equal to t, Prove outputs ⊥.)
• History.Verify(pp, cm, t, cmt , πH ) → b. On input public parameters pp, the current state’s com-
mitment cm, previous state’s index t and commitment cmt , and a proof πH , Verify determines if
cmt was the valid t-th state commitment in the history leading to cm.
We require two properties. Completeness (Definition 14) states that valid proofs can be generated
for any past prior state commitment, relative to the state’s index. Binding (Definition 15) states
that it is infeasible to find, for the same state commitment cm, two distinct commitments that are
valid for the same prior index t.
Definition 14 (completeness of History). For every polynomial-size adversary A and security pa-
rameter λ,
pp ← Setup(1λ )
(F, S, A, (tx1 , . . . , txn )) ← A(pp)
vS.VerifyAll(S, A) = 1 (vS, vF) ← MakeSF(pp, F )
↓ (t, cm, ·) ← vS.InfoS,A () = 1 .
Pr 0
t =t+n vF.Run(tx1 ,...,txn )
0 0
(S , A ) ←−−−−−−−−−− (S, A)
History.Verify(pp, cm0 , t, cm, π ) = 1
H 0 0
(t0 , cm0 , ·) ← vS.InfoS ,A ()
0 0
πH ← History.ProveS ,A (pp, t)
Above we use a shorthand for going from state (S, A) to state (S 0 , A0 ) via the transactions (tx1 ,
. . . , txn ).
Definition 15 (binding of History). For every polynomial-size adversary A and sufficiently large
security parameter λ,
History.Verify(pp, cm, t, cmt , πH ) = 1 λ
History.Verify(pp, cm, t, cm0t , πH0 ) = 1 pp ← Setup(1 )
Pr
cmt , πH ≥ 1 − negl(λ) .
↓ cm, t, 0 0 ← A(pp)
cm , π
cmt = cm0t t H
protocols integrate with this system architecture, and in Section 6.10.2 we discuss how privacy fits
into this system architecture. Recall from Section 6.2 that synchronization costs are incurred by
servers and clients who want to verify that the current state is derived from a past state correctly,
and query costs are incurred by clients who want to verify query responses.
The new system. Informally, servers use the new transition function vF instead of the original F ,
and clients use the new client function vC instead of the original C. We now discuss the different
operations.
State updates. Besides the application state S, each server maintains an auxiliary state A that
stores cryptographic information. A server processes a new transaction tx by computing (y, ∆) :=
vF.RunS,A (tx) and applying the state update ∆ to the augmented state (S, A). (For comparison, in
the original application, each server would compute (y, ∆S ) = F S (tx) and apply the state update
∆S to S.) Any server can run vS.InfoS,A to obtain the number t of transactions that have been
applied since the start of the system, a commitment cm to the current application state, and a proof
πF of correctness.
State validity. A server joining the system can simply download and verify the state and auxiliary
information (S, A) by checking the state proof πF and checking the consistency between S and
A using vS.VerifyAll(S, A). The new server does not need to itself apply the transition function
vF.Run for each prior transaction.
Client queries. vC enables a server to convince a client that it answered the client’s query correctly.
The client sends a query x to a server, the server computes and returns the answer and proof (y,
πC ) ← vC.RunS,A (x), and the client checks the answer by running vC.Verify(cm, x, y, πC ), where
cm is the commitment to S.
Relation between states. A server or client may be offline for a period of time and need a way
to establish that an old state commitment cmold and a new state commitment cmnew are not just
individually valid (as established via vF.Verify) but also belong to the same “timeline”. Moreover, a
client that has a current state commitment and wants to make a query about an old state needs to be
able to check that the current state was derived from the old state. Both tasks can be accomplished
via functionality offered by History, which enables skipping along this “timeline” of states using
only commitments. The server can prove that the state committed to by cmnew is reachable from a
state committed to by cmold by computing a history proof πH := History.ProveS,A (pp, told ) where
told is the old state’s index. The client checks this proof by running History.Verify(pp, cmnew , told ,
cmold , πH ).
Motivation for security properties. We discuss how the security properties presented in Sec-
tion 6.3 translate to the informal security desiderata we have discussed for synchronizing state and
executing queries.
Synchronization. vF’s knowledge soundness (Definition 11) states that every state commitment
accepted by vF.Verify implies a sequence of transactions that, via the transition function F , lead
to the committed state. The binding property of History (Definition 15) states that one cannot
find prior state commitments that contradict each other but are both accepted by History.Verify
for the current state commitment. Together these imply that the state committed to by prior state
commitments is valid.
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 142
Query execution. vC’s soundness (Definition 13) ensures that every query result over a valid state
accepted by vC.Verify implies that the result y is the output of running the client function C over
the state with the input x.
Reducing participation costs. The new system reduces synchronization costs and query costs.
Synchronization now only requires servers and clients to verify the latest state proof πF pro-
duced by vF.Run along with, if they have a past commitment, a history proof πH produced by
History.Prove. To verify the consistency between the state and the auxiliary state, the server addi-
tionally runs vS.VerifyAll. These are efficient checks, and our evaluation of synchronization costs
shows their practical benefits (see Section 6.7.4).
Query costs are simply the time for the client to verify the query proof πC produced by vC.Run,
which is much faster than executing the query itself on the state.
Integration with consensus protocols. For consensus-based ledger systems, the application’s
transition function F should be tasked with maintaining consensus information; in particular, the
consensus protocol should be compatible with incremental verification. (Otherwise, the overall
system would not be incrementally verifiable.) Prior works [466, 468] have designed consensus
protocols for incremental verification, which can be used here.
Who produces the proofs?. Introducing cryptographic proofs into a real-world system raises the
question of who is responsible for producing these proofs. We briefly summarize two approaches
described in prior work, which can be used in IVLS. Mina [468] introduces a new party that
makes proofs (a “snarker”) and is monetarily incentivized to produce proofs: block producers
ask snarkers to produce proofs for generated blocks, and the two parties agree on a fee in what
is essentially a lowest-price auction. Another approach is to directly embed producing proofs
into the cryptographic PoW puzzle, known as Proof of Necessary Work [466], which requires
the proof-computing process to satisfy amortization resistance (a property plausibly satisfied by
known pairing-based SNARKs on NP statements, incorporating nonces). We discuss and evaluate
proving costs in Section 6.7.5.
6.5 Applications
We describe how the formalism of ledger systems (see Section 6.3) can capture several appli-
cations of interest.8 By applying an IVLS compiler to these applications, one can make the appli-
cation incrementally verifiable, and hence significantly reduce participation costs for it. Overall,
we show that IVLS supports not only basic payment systems (the only ones studied in prior works
on incremental verifiability) but also systems with strong privacy or rich user-defined applications
(e.g., smart contracts).
We outline how to “program” ledger systems to express each application, with a focus on tran-
sition functions; for completeness, we provide formal details (and a discussion of client functions)
8
As we discuss in Section 6.3, the application must take consensus into account, where the consensus must be
incrementally verifiable. Since a consensus protocol can be viewed as an algorithm that can be folded into the appli-
cation, by suitably augmenting the application state and transition function, we do not discuss the details of consensus
in this section. We discuss integration with consensus protocols in more detail in Section 6.10.1.
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 143
in Section 6.9. We adopt two design principles for efficiency: (a) each transaction results in a small
number of reads/writes to the application state; (b) the application state contains the minimum in-
formation necessary for ensuring the application’s integrity. (Users are responsible for storing any
information specific to them.)
Basic payments. As a warmup, we first discuss basic payments (user-to-user transfers without
privacy guarantees), in the account-based and UTXO-based models.
In the account-based model (studied in [466, 468]), the application state is a map from public
keys to balances. The transition function takes as input a signed message, under the sender’s public
key, specifying the amount to be paid and the receiver’s public key. To prevent replaying a prior
transaction, the application state maintains a counter for each public key, which increases with
each payment; the signed message includes this counter. The application state’s size is linear in
the number of public keys.
In the UTXO-based model (think bare-bones Bitcoin with no scripts), the state maps public
keys to identifier-value pairs each representing a coin. The transition function takes as input a
sender public key; a list of existing coin identifiers all owned by the sender; and information for
receivers in the form of their public keys, new coin identifiers, and their values (whose total equals
that of the sender’s coins). All of this is signed under the sender’s public key. The identifiers of the
spent coins are removed from the application state.
Privacy-preserving payments. We discuss how to express payments with user privacy, as in
Zerocash [479]: user-to-user payments that reveal no information about the sender, receiver, or
transferred amount. While superficially such a system looks very different from other payment
systems, modeling it as a ledger system is not difficult, as explained below. Recall that each
Zerocash transaction contains the serial numbers of old (spent) coins and the commitments to new
(created) coins along with a zero-knowledge proof attesting that the old coins were created at some
point in the past and now have been spent by someone who knows their private keys, and that the
new coins were committed correctly and preserve the monetary value of the old coins.
The application state includes a list of all serial numbers and a list of all coin commitments.
(More precisely, the serial numbers are stored in a search tree and the coin commitments in a
Merkle tree.) The transition function validates a transaction by checking its zero-knowledge proof
and checking that its serial numbers do not already appear in the list of all serial numbers. If so, the
transition function adds the transaction’s serial numbers and coin commitments to the application
state. Crucially, the transition function here only makes a few accesses to the application state.
Clients must identify transactions where they are recipients. Naively, this requires a linear scan
over all transactions. This linear cost can be avoided via viewing keys, which allow the server
to identify transactions relevant to the client without the server being able to spend the client’s
funds. Viewing keys protect the clients’ funds but not privacy. To achieve privacy from the server,
light clients can leverage prior work using secure hardware [492–494] and/or private information
retrieval (PIR) [495], which can be directly applied to our setting.
We discuss the implementation and evaluation of incrementally verifiable privacy-preserving
payments in Section 6.6 and Section 6.7.3 respectively.
Privacy-preserving computation. Zexe [480] extends Zerocash to support privacy-preserving
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 144
general computation, as captured via a computation model that involves data units called records,
which contain scripts for how they can be created or consumed. Analogously, we extend the
previous design to privacy-preserving computation, by setting the application state to be a list
of all serial numbers and a list of all record commitments. Each transaction contains the serial
numbers of old (consumed) records and the commitments to new (created) records along with a
zero-knowledge proof attesting that scripts contained in all the records were correctly executed.
The transition function validates a transaction by checking its proof and by checking that its serial
numbers do not already appear in the list of all serial numbers; if so, it adds the serial numbers and
record commitments in the transaction to the application state.
Key transparency. We conclude with an application beyond cryptocurrencies: key transparency [481,
496], a public directory mapping usernames to public keys. Unlike previous applications, in key
transparency, a central server maintains the application state, and other parties verify that it does so
correctly. Users can publish their own public keys to a directory maintained by the central server,
query other users’ public keys, and check that the directory maintains this mapping correctly.
The application state is pairs of usernames and public keys. The transition function processes
two types of transactions: in the first type, a user can register a key by sending a new username
and public key; in the second type, a user can update an existing public key with a signature of the
new public key and the username under the old public key. While server participation costs are not
a concern (application state is maintained by a single central server), incremental verifiability does
reduce client participation costs. In the original design, a user must regularly query the central
server to check that it continuously maintains the mapping between their username and public
key. In our incrementally verifiable design, users only need to check a single proof that the entire
application state has been maintained correctly.
Figure 6.2: Diagram illustrating the relation between different components of our system. The
gray boxes denote components that exist in prior libraries, while the white boxes denote com-
ponents contributed in this work.
IVLS. The top-level interface is a collection of traits that closely follow the interface of an IVLS
compiler in Section 6.3. Its construction combines IVC and a Merkle tree via ideas that require
some care but are primarily standard; for reference, we provide the construction in Section 6.11
and its security proof in Section 6.12. The user specifies the transition function for the ledger
system by providing code for the native execution and also a (rank-1) constraint system for it. The
latter representation, known as R1CS, is a standard representation for NP statements that can be
viewed as a generalization of arithmetic circuits. We discuss the IVC scheme below. As for the
Merkle tree, like prior works in the SNARK literature [480, 498], we base it on a Pedersen hash
function over a suitable elliptic curve (a twisted Edwards curve), whose base field matches the field
over which the IVC scheme’s constraint system is defined, or on the Poseidon hash function [409].
This is for efficiency, as traditional hash functions such as SHA-256 are expensive in constraint
systems.
PCD. We provide a generic trait for a PCD scheme, which enables the user to specify transitions
whose incremental verification is desired, by giving an R1CS constraint system that checks their
validity. We provide a generic implementation of this trait from any pairing-based SNARK for
R1CS that comes equipped with a constraint system for its own verifier, by using the technique
of MNT cycles in [297].10 Our implementation works with both MNT cycles in arkworks (the
10
Informally, there are two pairing-friendly curves with matching parameters, and two pairing-based SNARKs
instantiated over these two curves. One SNARK verifies the other SNARK, and vice versa.
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 146
lower-security 298-bit cycle and the higher-security 753-bit cycle). In particular, we can base the
PCD scheme on pairing-based SNARKs for R1CS with a circuit-specific setup, already part of
arkworks (such as [487]), or with a universal setup that we contribute in this work ([470], as
described below). Though not part of this work, we anticipate it to be rather straightforward to
also implement the PCD scheme trait via hash-based (post-quantum) SNARKs for R1CS such as
[473]. Lastly, to support the Pedersen-based Merkle tree, we contribute twisted Edwards curves
suitable for the MNT cycles in arkworks that underlie PCD.
The IVC scheme that we use for IVLS is a special case of the PCD scheme above. We built
PCD because PCD can used to distribute proving work via proof trees (e.g., see “parallel scan
states” in [468]), and PCD is useful in security applications beyond IVLS [499–502].
Recursing a universal SNARK. We provide the first implementation of a constraint system for a
pairing-based SNARK for R1CS with universal setup [470]. Recall that this means that the trusted
generation of system parameters for the SNARK does not depend on the R1CS instance whose
satisfiability is proved (but only on some upper bound to it). This enables realizing PCD/IVC
based on the SNARK in [470] (and implemented in marlin [503]), so that the trusted generation
of the system parameters for the PCD/IVC scheme does not depend on the user’s choice of au-
tomaton. Our constraint system is a useful addition to existing constraint systems for other types
of SNARKs, such as pairing-based SNARKs with circuit-specific setup (starting with [297]) and
post-quantum SNARKs [473].
The universal SNARK in [470] is constructed via a general paradigm combining three ingre-
dients: a polynomial commitment scheme (PC scheme), an algebraic holographic proof (AHP),
and a cryptographic hash function for the Fiat–Shamir heuristic [218]. The SNARK verifier is as-
sembled from these ingredients, and our SNARK verifier constraint system reflects this structure,
which should facilitate the implementation of similar universal SNARKs in the future.
• PC scheme. We write a constraint system for the checks in the polynomial commitment scheme
of Kate et al. [504], which ensures that a sender has correctly opened a committed polynomial
at a desired point. Our constraint system supports degree enforcement and batching as described
in [470] and is implemented in poly-commit [505]. Our constraint system supports degree
enforcement and batching as described in [470]. This is the part of the verifier that checks a
pairing-product equation on a pairing-friendly curve.
Our implementation includes optimizations to reduce the number of constraints. For example,
to batch multiple polynomial commitments and pairing checks into one, we replace the linear
combination r, r2 , r3 , . . . used in [470] with the linear combination r1 , r2 , r3 , . . . as it is cheaper
to derive multiple challenges from the Poseidon sponge (for the Fiat–Shamir transformation)
instead of computing one challenge’s powers via non-native arithmetic.
• AHP. We write a constraint system for the AHP verifier described in [470]. This involves check-
ing polynomial equations, using values in the proof and values derived from the Poseidon sponge.
These operations are over the field exposed by the PC scheme above. As the latter is different
from the field of the constraint system (due to properties of pairing-friendly curves), we use
constraints for non-native field arithmetic (see below).
In [470], the verifier evaluates a few vanishing polynomials, which is expensive due to non-native
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 147
field arithmetic. To reduce the cost, we modify Marlin to have the prover convince the verifier
of the correct evaluation of the vanishing polynomials. This change also reduces the number of
verifier constraints from O(log N ) to O(1), where N is the number of constraints of the circuit
being verified in the constraint system.
• Hashing. For the cryptographic hash function we use an algebraic sponge (implemented in [473]
based on the Poseidon hash function). We set the field of the algebraic sponge to equal the field
of the constraint system. For our setting we wrote “adapters” to absorb into and squeeze out of
the algebraic sponge different types of inputs that arise in our SNARK verifier (commitments
from the PC scheme and non-native field elements).
Our modular design facilitates obtaining constraint systems for other SNARKs built via the
same paradigm in [470]. For example, by modifying the equations checked by the AHP, it would
be relatively straightforward to obtain a constraint system for the SNARK for arithmetic circuits in
[471].
Non-native field arithmetic. The constraint system of the verifier requires checking arithmetic
over a field Fq that is different from the field Fr of the constraint system. We provide a generic
implementation in arkworks that hides the differences between native and non-native from the
developers: one can program a constraint system with non-native field arithmetic as easily as if
it were native. Our implementation is based on [489, 506, 507], but we optimize it for lower
constraint weight (see below), which requires different parameter selection and multiplication.
Optimizing constraint weight. While the main efficiency metric of a constraint system is the num-
ber of constraints, a secondary efficiency metric is its weight, i.e., the number of non-zero entries
in the coefficient matrices. While for SNARKs with circuit-specific setup (such as [487]) weight
does not matter much, for all known SNARKs with universal setup (including [470]) efficiency also
depends on weight. To address this additional consideration, we extended the constraint-writing
framework arkworks [497] to enable weight-reducing optimizations. For example, we implement
an automatic procedure that builds a dependency graph over all the linear combinations of con-
straint system variables and rewrites the constraint system to avoid re-using the same the linear
combinations too many times (which greatly penalizes weight while saving few constraints). More
generally, throughout all of our constraint writing, we balance the two (sometimes competing)
goals of reducing number of constraints and reducing weight.
Privacy-preserving payments. Using our IVLS interface, implementing privacy-preserving pay-
ments is straightforward. We simply assembled the compliance predicate described in Section 6.5,
and our library produced an incrementally verifiable version for this application. To optimize
application memory for performance, we chose a Merkle tree layout that is suitable for coin com-
mitments and serial numbers. We evaluate our implementation in Section 6.7.3.
6.7 Evaluation
We measure the size of our constraint system for the verifier of Marlin [470], the costs of IVC
with universal setup vs. circuit-specific setup, and how incremental verification reduces partici-
pation costs. We establish that incremental verification based on preprocessing SNARKs with a
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 148
Table 6.2: Proving time per constraint, verification time, and proof size across preprocessing
SNARKs and curves.
universal setup incurs modest overheads compared with the case of circuit-specific setup. More-
over, incremental verification significantly reduces participation costs compared with systems with
no proofs or with transition proofs. While servers and clients greatly benefit from incremental
verification, proof makers pay a high cost to produce proofs; we discuss these costs as well as
techniques for reducing them in Section 6.7.5.
Our measurements are taken on a machine with an Intel Xeon 6136 CPU with a base frequency
of 3.00 GHz and 252 GB of memory using a single thread. All reported proving times can be
significantly reduced by using multiple threads (a capability that is already part of the codebase).
Below, we frequently refer to two state-of-the-art proof systems: (a) Groth16 [487], a prepro-
cessing SNARK with a circuit-specific setup; and (b) Marlin [470], a preprocessing SNARK with
a universal setup (the SNARK whose verifier we expressed as a constraint system).
Table 6.1: Cost of the Marlin verifier and its main sub-components, including both the number
and weight of constraints with K = 10 elements for public input.
BLS12-381 but only 80-bit security; MNT-753 has greater security at an increased cost.
– Proving time. The proving times in both proof systems are quasilinear in the number of con-
straints. But, for a large range of parameters, proving times approximately grow linearly, as prior
works show, and so we report proving time per constraint. Compared with Groth16, Marlin is
10× slower. Compared with BLS12-381, MNT-298 has a similar proving time, but MNT-753 is
10× slower.
– Verification time. Pairing-based preprocessing SNARKs typically have short verification times.
We measured the verification times for a constraint system with N = 216 constraints and K = 10
public inputs. All measurements are less than 100 ms. Compared with Groth16, Marlin is 2×
slower. Compared with BLS12-381, MNT-298 is 2× slower or less, and MNT-753 is 10× to
20× slower.
– Proof size. All proof sizes are less than three kilobytes. Compared with Groth16’s, Marlin’s
proof is about 5× larger. Proof sizes over BLS12-381 and MNT-298 are similar, while proof
sizes over MNT-753 are 2.5× larger.
Proof system
Hash function
Groth16 Marlin
Pedersen 1, 230, 478 1, 377, 884
Poseidon 218, 088 365, 494
Table 6.3: Number of constraints for incrementally verifiable privacy-preserving payments using
different hash functions and different proof systems on the MNT-298 cycle.
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 151
Table 6.4: Estimated synchronization costs. Sync time does not include the time to download
data. We use the time to verify two ECDSA signatures over the secp256k1 curve as a lower
bound for the time to verify a transaction. We assume that transition proofs and recursive proofs
use a Pedersen hash function to summarize the current state, and transition proofs are generated
for each block.
Table 6.5: Network cost for different light client schemes, for a ledger system modeled after a
10-year “bare-bones” Bitcoin (no scripts). Plumo uses the CP6 curve from Zexe [480].11
In terms of network cost, the most expensive recursive proofs (Marlin over MNT-753) are still
46M× lighter than no proofs and 57K× lighter than transition proofs. In terms of synchronization
time, the foregoing recursive proofs are 382K× faster than no proofs and 3K× faster than transition
proofs.
Comparison with other light client systems. Recursive proofs (from IVLS) make it possible
to construct a client that is extremely light, both in network cost and in synchronization time.
In Table 6.6, we show the differences in network cost and synchronization time between recursive
proofs and the following: (1) Bitcoin’s simplified payment verification (SPV), (2) FlyClient’s proof
of consensus [464], and (3) Plumo’s proof of consensus [511].
Compared with these prior schemes for light clients, recursive proofs (via IVLS) reduce client
network cost and synchronization time, at the cost of relying on sufficiently powerful proof makers,
as we discuss in Section 6.7.5. Moreover, recursive proofs provide a stronger security guarantee by
verifying the correctness of the application transitions as well as consensus transitions (as described
in Section 6.10.1).
[509]. Similar security losses also happen for SNARKs based on generic groups due to the security reduction [510],
and are typically ignored in practice.
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 153
Bitcoin’s simple payment verification (SPV), estimated with the parameters in Table 6.5, would
require downloading all the block headers of the blockchain—about 20 MB—which is at least
5, 000× larger than recursive proofs. Synchronization time is small since it mainly involves check-
ing the proof of work for every block. However, SPV provides only limited security and function-
ality: (1) Though SPV enables the client to check the consensus (proof of work), the client does
not check the correctness of the transitions. (2) With SPV, the client can check if a transaction is
present, but the client cannot check if the transaction is unspent; light clients of the same account
need to synchronize with one another.
FlyClient enables a client to efficiently check the consensus in proof-of-work protocols; rather
than downloading every block header as in SPV, FlyClient downloads a logarithmic number of
headers. Estimated with a flat proof-of-work difficulty and parameters in Table 6.6, a client needs
to download proofs of 204 KB, using the simulator in [512]. (We report a smaller proof size than
the FlyClient paper because we are measuring over our bare-bones Bitcoin rather than Ethereum,
which has larger block headers.) While both network cost and synchronization time are much better
than SPV, the network cost is still 50× larger than that of recursive proofs. Moreover, FlyClient
does not check the correctness of the transitions and cannot check if a transaction is unspent (as in
SPV).
Plumo provides efficient checking for changes in the consensus committee. If a proof is gen-
erated every six months (as suggested in [511]), the client needs to download at least 18 KB with
Groth16 or 54 KB with Marlin. In Table 6.5, we show that the network cost grows linearly with
the number of blocks, assuming a constant block rate. Synchronization time remains small due to
efficient verification. Similar to SPV and FlyClient, Plumo does not check the transitions. More-
over, Plumo does not fully verify the consensus, such as whether committee members are indeed
winners of the proof of stake. Plumo is also inefficient when a proof for recent transactions is
unavailable (a common case, as proofs are generated infrequently); in this case, the client needs
to download and verify these transactions. Making proof generation more frequent, or for a larger
period of time, would increase the cost for either proving or verification.
one million privacy-preserving transactions in nine hours. (The Mina cryptocurrency [469] uses
proof trees for this reason.) We leave a detailed study to future work (and real-world deployments),
and here only mention that proof trees should be straightforward to build given our PCD module.
We conclude by noting that recursive proofs are not much harder to produce than transition proofs,
as proving the state transition, not recursive verification, dominates the costs. This suggests that
moving from transition proofs to recursive proofs is generally a good choice.
Combining transition proofs with a light client protocol can reduce synchronization costs at
the server (via transition proofs) and client (via the light client protocol). Although such a solution
may have comparable or even better concrete efficiency compared to IVLS, it does not provide
the same security guarantees: the client does not verify transition proofs and so must trust that the
server state was reached by applying transactions correctly.
– A create transaction of the form (create, pk). If the state S already contains a tuple of the
form (pk, bal, ctr), the transition function F outputs the result y := error and empty state
update ∆S := ⊥. Otherwise, F outputs the result y := ok and the state update ∆S that inserts
the tuple (pk, 0, 0) into S.
– A deposit transaction of the form (deposit, pk, amt). If the state S does not contain a tuple of
the form (pk, bal, ctr), the transition function F outputs the result y := error and empty state
update ∆S := ⊥. Otherwise, F outputs the result y := ok and the state update ∆S that replaces
(pk, bal, ctr) with (pk, bal + amt, ctr).
– A transfer transaction of the form (transfer, pkfrom , pkto , amt, sig). The transition function F
checks that the state S contains tuples of the form (pkfrom , balfrom , ctrfrom ) and (pkto , balto , ctrto ),
that amt ≤ balfrom , and that SIG.Verify(pkfrom , (pkfrom , pkto , amt, ctrfrom ), sig) = 1. If any of
these checks fails, F outputs the result y := error and empty state update ∆S := ⊥. Otherwise,
F outputs the result y := ok and the state update ∆S that replaces (pkfrom , balfrom , ctrfrom ), (pkto ,
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 156
balto , ctrto ) with (pkfrom , balfrom − amt, ctrfrom + 1), (pkto , balto + amt, ctrto ). The counter is used
to prevent replaying a previous transaction.
i ]1 are coin identifiers of the inputs to tx and [cidj ]1 are coin identifiers of the outputs
where [cidin m out n
of tx. For each j ∈ [n], the value amtout j is the amount being sent to pkoutj . The value sig is a
signature over the transaction with respect to the public key pk . in
The transition function F looks up pkin in S in order to find tuples of the form {(cidin in
i , amti )}i∈[m]
belonging to pkin . Then it checks that m in n
j=1 amtj and that S does not contain any
out
P P
i=1 amti =
tuple of the form (cidout
j , ·) for pkj
out
for any j ∈ [n]. Moreover, F verifies that the signature for
this transaction is valid by checking
?
SIG.Verify pkin , ([cidin m out n out n out n
i ]1 , [cidj ]1 , [amtj ]1 , [pkj ]1 ), sig = 1 .
If any lookup or check fails, F outputs the result y := error and empty state update ∆S := ⊥.
Otherwise, F outputs the result y := ok and the state update ∆S that: (a) for every i ∈ [m]
removes (cidini , amti ) from the search tree of pk ; and (b) for every j ∈ [n] adds (cidj , amtj )
in in out out
– A mint transaction of the form tx = (mint, cm, v, πMINT ), which creates a coin of value v with
commitment cm. If VerifyZKP(tx) = 1, F outputs the result y := ok and the state update ∆S
that adds cm to the Merkle tree of commitments. Otherwise, F outputs the result y := error
and empty state update ∆S := ⊥.
– A pour transaction of the form tx = (pour, snin 1 , sn2 , cm1 , cm2 , e1 , e2 , πPOUR ). The values
in out out
1 , sn2 are the serial numbers of the old (spent) coins, while the values cm1 , cm2 are the
snin in out out
commitments of the new (created) coins. The values e1 , e2 are encryptions of the new coins
under public keys of the (unknown) receivers. The value πPOUR is a proof used to attest to the
validity of this transaction.
The transition function F checks that VerifyZKP(tx) = 1 and that the serial numbers snin 1 and
snin
2 do not appear in the list of serial numbers. If both checks pass, F outputs the result y := ok
and the state update ∆S that adds cm1 and cm2 to the Merkle tree of commitments, adds snin
out out
1
and snin
2 to the Merkle tree of serial numbers, and appends encrypted coins e1 and e2 to the list of
encrypted coins. Otherwise, F outputs the result y := error and empty state update ∆S := ⊥.
• Client function. The client function C enables a user’s client to find payments sent to the user.
The client function C takes as input a viewing key skview and checks which of the encrypted coins
in the state S belong to this user. This check can be done by scanning through all encrypted coins
and trying to decrypt each using skview . We can, by careful designs, further constrain skview to
only capable of testing whether the encrypted coins belong to the user but incapable of seeing the
underlying information.
• State. The state S comprises a Merkle tree of all record commitments appearing in all transac-
tions and a Merkle tree of serial numbers so far.
• Transition function. The transition function processes a transaction tx of the form ([snin N
i ]1 ,
i ]1 , π), which consumes records associated with serial numbers in [sni ]1 and generates
[cmout M in N
records associated with commitments in [cmi ]1 . The value π is a cryptographic proof that the
out M
computation is executed correctly. The transition function F checks that VerifyZKP(tx) = 1 and
that all the serial numbers [snin
i ]1 do not appear in the list of serial numbers in S. If the checks
N
pass, F outputs the result y := ok and the state update ∆ that adds [cmout i ]1 to the Merkle tree
M
of commitments and adds [snin i ]1 to the search tree of serial numbers. Otherwise, F outputs y :=
N
– A commitment query of the form (commitment, cm) that returns 1 if cm is in the Merkle tree of
commitments in S and 0 otherwise.
– A consumption query of the form (consumption, sn) that returns 1 if sn is in the search tree of
revealed serial numbers in S and 0 otherwise.
– A registration transaction of the form (new, u, pku ). If the tree in S already has a node for the
username u, F outputs the result y := error and empty state update ∆S := ⊥. Otherwise, F
outputs the result y := ok and the state update ∆S that adds (u, pku ) into the tree.
– An update transaction of the form (update, u, pknew u , sig). If the tree in S does not contain a
node with username u, F outputs the result y := error and empty state update ∆S := ⊥.
Otherwise, letting (u, pkold
u ) be the node for for u, F checks that Verify(pku , (u, pku ), sig) = 1
old new
updated, and anyone can correctly choose between different application states by selecting the one
with the highest cumulative work.
Ouroboros. As noted in [468], many proof-of-stake protocols are not incrementally updatable “off
the shelf” because their chain selection rules require reasoning about information arbitrarily in the
past to protect against long-range fork attacks. Bonneau et al. [468] construct a proof-of-stake
protocol called Ouroboros Samasika (based on Ouroboros Genesis [488]) whose chain selection
rule is incrementally updatable. Because chain selection is incrementally updatable, the IVLS
transition function can be augmented to support it efficiently.
Consensus with incremental updates. Given the value of incremental verifiability, we believe that
it would be valuable to see more research into consensus protocols that are suitable for incremental
verification. An informative first step would be to conduct a systematic study of which known
protocols based on proof of work (e.g., Bitcoin-NG [527], GHOST [528], Spectre [529], and
others) can be implemented via incremental updates to a small state; a similar study for proof-of-
stake protocols would be valuable. Moreover, future research in consensus protocols may want to
consider incremental updates to be one of the “standard” desiderata.
Secure hardware. Another approach is for the client to communicate with a piece of secure
hardware (e.g., using hardware enclaves [531, 532]) on the server’s machine, which will execute
the client’s query within certain secure boundaries. The privacy of the client would then depend
upon the threat model and security guarantees of the secure hardware used.
• Setup(1λ ) → ppARK : on input a security parameter 1λ , Setup samples ARK public parameters
ppARK .
xw x
• Prove(pkR , , ) → π: on input a proving key pkR , instance , and witness w, Prove outputs a
proof π.
x x
• Verify(vkR , , π) → b: on input a verification key vkR , instance , and proof π, Verify determines
w xw
if π is a convincing proof (of knowledge) for the statement “there exists such that ( , ) ∈ R”.
The completeness and knowledge soundness properties that we will assume for ARK are stated in
Section 6.12.3.
Incrementally verifiable computation. Incrementally verifiable computation (IVC) [465] is a
cryptographic primitive that augments multi-step automata computations with proofs attesting to
the correctness of the computation so far. There is an efficient procedure to move from a state of
the automaton and its proof to the new state of the automaton and a corresponding new proof. The
formalism for IVC that we use is drawn from the literature on proof-carrying data [297, 477, 478],
which extends IVC to more general settings of incrementally verifiable distributed computations.
In particular, the automata computations that we consider are non-deterministic: each transition
takes an old state and an auxiliary input to a new state.
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 162
An IVC scheme is a tuple of polynomial-time algorithms IVC = (Setup, KeyGen, Prove, Verify)
with the following syntax.
• Setup(1λ ) → ppIVC : on input a security parameter 1λ , Setup samples IVC public parameters
ppIVC .
• KeyGen(ppIVC , Π) → (pkΠ , vkΠ ): on input IVC public parameters ppIVC and a specification of
an IVC compliance predicate Π, KeyGen outputs a proving key pkΠ and a verification key vkΠ
for the predicate Π. A compliance predicate Π determines which transitions are valid: it receives
input a new message z new (a new “state”), local data w (an “auxiliary input”), and old message
z old (an old “state”), and outputs a bit indicating whether the transition from z old to z new is valid.
• Prove(pkΠ , z new , w, z old , π old ) → π new : on input a proving key pkΠ , new message z new , local
data w, and previous message z old with proof π old , Prove outputs a proof π new attesting that this
message transition is in compliance with the predicate Π. In the base case, one takes z old =
π old = ⊥.
• Verify(vkΠ , z, π) → b: on input a verification key vkΠ , message z, and proof π, Verify determines
if π is a valid proof attesting that z is the output of a Π-compliant transcript of computation.
The completeness and knowledge soundness properties that we will assume for IVC are stated in
Section 6.12.2.13
Merkle tree. A Merkle tree (MT) is an authenticated data structure with efficient lookups and up-
dates. We view it as a tuple of algorithms MT = (Setup, New, Root, Validate, Lookup, VerifyLookup,
Modify, VerifyModify) with the syntax specified below.
• RootT (ppMT ) → rh: on input MT public parameters ppMT , with oracle access to the tree T , Root
outputs the root hash value of the tree rh.
• Validate(ppMT , T ) → b: on input MT public parameters ppMT and the tree T , Validate deter-
mines if the Merkle tree is constructed correctly (e.g., the hashes of internal nodes correspond to
their children).
• LookupT (ppMT , [addri ]n1 ) → πlookup : on input MT public parameters ppMT and locations [addri ]n1 ,
with oracle access to the tree T , Lookup outputs a proof πlookup certifying the values at those
locations.
13
These definitions can be straightforwardly extended to oracle-based models in those cases where security must
hold in the presence of application-specific oracles (e.g., a signing oracle for a signature scheme), by following the
analogous case for argument systems in [533].
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 163
• VerifyLookup(ppMT , rh, [addri ]n1 , [datai ]n1 , πlookup ) → b: on input MT public parameters ppMT ,
the tree’s root hash rh, the queried locations [addri ]n1 , the data at those locations [datai ]n1 , and the
proof πlookup , VerifyLookup determines if the lookup result is valid.
• ModifyT (ppMT , [addri ]n1 , [datai ]n1 ) → (rh, ∆T , πmodify ): on input MT public parameters ppMT ,
the locations to be modified [addri ]n1 , and the new data [datai ]n1 , with oracle access to the tree T ,
Modify outputs the new root hash rh, the update to the tree ∆T , and a proof πmodify .
• VerifyModify(ppMT , rhold , rhnew , [addri ]n1 , [datai ]n1 , πmodify ) → b: on input MT public parameters
ppMT , the old tree’s root hash rhold , the new tree’s root hash rhnew , the modified locations [addri ]n1 ,
the new data [datai ]n1 , and the proof πmodify , VerifyModify determines if the modification is valid.
The completeness and security properties that we will assume for MT are stated in Section 6.12.5.
where: t records the current time (the number of transactions applied so far); Tstate is a Merkle
tree over S; Thistory is a Merkle tree over all state commitments so far, ordered chronologically; cm
is the current state commitment, and is defined as cm := (rhstate , rhhistory ) where rhstate is the root
hash of Tstate and rhhistory is the root hash of Thistory ; πF is a proof attesting that “cm commits to a
state obtained with t transactions”.
• Parse the new message z new as (tnew , cmnew ). Parse the commitment cmnew as (rhnew new
state , rhhistory ).
• Check that trans is a valid execution transcript of the transition function F on input tx, read queries
1 , corresponding read answers [rdatai ]1 , and output state update ∆S = ([waddri ]1 ,
[raddri ]N N M
M
[wdatai ]1 ).
• Otherwise (z old 6= ⊥), parsing the old message z old as (told , cmold ) and parsing cmold as (rhold
state ,
rhhistory ), check the following:
old
Construct and output the tuple vF = (Run, Verify) as defined below. Note that vF.Run hardcodes
(pkΠ , ppMT , F ), and vF.Verify hardcodes vkΠ .
MT.RootThistory (ppMT ).
– Otherwise (A 6=⊥):
* retrieve (t , cm , πF ) from the auxiliary state A;
old old old
– Compute (rhnewstate , ∆T
state
, πwrite ) := MT.ModifyTstate (ppMT , [waddri ]M 1 , [wdatai ]1 ), and add ∆T
M state
to ∆A .
– Set the new state index t := t + 1 and new state commitment cm := (rhstate , rhhistory ).
new old new new new
tion R if the following conditions hold: (a) trans is a valid execution transcript of C with input x,
read queries [raddri ]N 1 , read answers [rdatai ]1 , and output y; (b) if cm = ⊥, check that rdata =
N
Derive the ARK key pair (pkR , vkR ) ← ARK.KeyGen(ppARK , R). Construct and output the tuple
vC = (Run, Verify) as defined below. Note that vC.Run hardcodes (ppMT , C, pkR ) and vC.Verify
hardcodes vkR .
1 to the
– Simulate the client function as y = C S (x), obtaining the list of read queries [raddri ]N
state S and the corresponding read answers [rdatai ]1 . Also, denote by trans the execution
N
transcript of C.
– Retrieve the information (t, cm, πF ) from the auxiliary state A, and parse cm as (rhstate ,
rhhistory ).
– If t = 0, set πread := ⊥.
1 ) where Tstate is the state tree in
Otherwise, compute πread := MT.LookupTstate (ppMT , [raddri ]N
A.
– Set the NP instance x := (cm, x, y) and the NP witness w := (trans, [raddri ]N N
1 , [rdatai ]1 ,
πread ).
– Output (y, πC ) where the ARK proof is πC := ARK.Prove(pkR , , ). xw
• vC.Verify(cm, x, y, πC ):= ARK.Verify(vkR , (cm, x, y), πC ).
6.12 Security
Theorem 16. Our construction of an IVLS scheme in Section 6.11 satisfies the correctness and
security properties described in Section 6.3 (assuming that the building blocks IVC, ARK, and MT
that we use in our construction meet standard notions of correctness and security).
This section is dedicated to proving the above theorem, and is organized to mirror the desired
correctness and security properties in Section 6.3. For convenience we include, in the relevant
places, formal statements of the properties of IVC and ARK that we use. We separately provide in
Section 6.12.5 the (tedious but precise) list of properties of MT that we use.
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 167
6.12.1 Security of vS
Lemma 17. The construction of VerifyCM in Section 6.11.4 satisfies the binding property (Defi-
nition 9).
Proof. Suppose that A is an adversary that, given as input pp = (ppMT , ppIVC , ppARK ) ∈ Setup(1λ ),
outputs a transition function F , state commitment cm, and two states S1 and S2 such that vS.VerifyCM(S1 ,
cm) = 1 and vS.VerifyCM(S2 , cm) = 1 where vS is produced by MakeSF(pp, F ). We argue that
S1 = S2 except with negligible probability. We assume that cm 6= ⊥; otherwise we are done.
We use A to construct an adversary A0 that breaks the binding property of root hashes (Defini-
tion 33). On input ppMT ∈ MT.Setup(1λ ), A0 works as follows:
Note that if the two states S1 and S2 are distinct, then so are the corresponding (valid) Merkle trees
T1 and T2 . Recall that cm is a pair of root hashes (rhstate , rhhistory ). Note that vS.VerifyCM(S1 ,
cm) = 1 implies that the Merkle tree on S1 has root hash rhstate , and similarly the Merkle tree on
S2 has the same root hash rhstate . This means that whenever A outputs distinct states with the same
commitment, A0 outputs distinct Merkle trees with the same root hash, which can happen with at
most negligible probability.
6.12.2 Security of vF
The construction of vF appears in Section 6.11.4, and its two main subroutines are MT (a
Merkle tree) and IVC (incrementally verifiable computation). We state the properties of IVC that
we use (omitting the tuple prefix IVC), and then prove the security properties of vF. We remark
that the formalization of IVC that we use follows as a straightforward special case of definitions of
proof-carrying data [477, 478].
• An IVC predicate Π is an algorithm that takes as input the new step’s output z new , the new step’s
auxiliary input w, and the previous step’s output z old (⊥ if the new step is the first step) as input,
and outputs 1 or 0.
• An IVC transcript is a tuple T = ([wi ]n1 , [zi ]n1 ) where wi is the auxiliary input to the i-th step
and zi is the output after the i-th step. The output of T, denoted by out(T), is zn . We say that
T = ([wi ]n1 , [zi ]n1 ) is Π-compliant, denoted by Π(T) = 1, if Π(zi , wi , zi−1 ) = 1 for every i ∈ [n]
with z0 := ⊥.
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 168
Definition 18 (completeness of IVC). For every polynomial-size adversary A and security param-
eter λ,
old
(z = ⊥ ∨ Verify(vkΠ , z old , π old ) = 1) ppIVC ← Setup(1λ )
Π(z new , w, z old ) = 1 (Π, z new , w, z old , π old ) ← A(ppIVC )
Pr =1 .
↓ (pkΠ , vkΠ ) ← KeyGen(ppIVC , Π)
Verify(vkΠ , z new , π new ) = 1 π new ← Prove(pkΠ , z new , w, z old , π old )
Definition 19 (knowledge soundness of IVC). For every polynomial-size adversary A, there exists
a polynomial-size extractor E such that for every sufficiently large security parameter λ and every
auxiliary input aux ∈ {0, 1}poly(λ) ,
ppIVC ← Setup(1λ )
Verify(vkΠ , z, π) = 1
↓ (Π, z, π) ← A(ppIVC , aux) ≥ 1 − negl(λ) .
Pr out(T) = z T ← E(pp , aux)
IVC
Π(T) = 1 (pkΠ , vkΠ ) ← KeyGen(ppIVC , Π)
Lemma 20. The construction of vF in Section 6.11.4 satisfies the completeness property (Defini-
tion 10).
Proof. Our construction of vF.Run straightforwardly ensures that (y, ∆S ) = F S (tx) and t0 = t+1.
We are then only left to argue that vS.VerifyAll(S, A) = 1 implies vS.VerifyAll(S 0 , A0 ) = 1, where
(S 0 , A0 ) are the updated states. The discussion below assumes familiarity with our construction
of vS.VerifyAll. It suffices to argue the following points: (a) the IVC proof in A0 is valid; (b) the
Merkle trees in A0 are well-formed; (c) the commitment in A0 contains root hashes of the Merkle
trees; (d) the state Merkle tree is over S 0 .
(a) IVC proof is valid. We argue that IVC.Verify(vkΠ , (tnew , cmnew ), π new ) = 1 where (tnew , cmnew , π new )
are in the new auxiliary state A0 . Observe that the condition vS.VerifyAll(S, A) = 1 implies that
S = A = ⊥ or IVC.Verify(vkΠ , (told , cmold ), π old ) = 1 where (told , cmold , π old ) are in A. Therefore,
by the completeness property of IVC (Definition 18), we are left to argue that Π((tnew , cmnew ), w,
z old ) = 1 where z old = ⊥ if A = ⊥ or z old = (told , cmold ) if A 6= ⊥, for the local data w = (trans,
[raddri ]N 1 , [rdatai ]1 , πread , tx, [waddri ]1 , [wdatai ]1 , πwrite , πinsert ) supplied by vF.Run. We discuss
N M M
cm .
old
– (writes are performed) πwrite proves that Tstate is updated according to trans.
– (commitment is added to history) πinsert proves that Thistory now has cmold at position told .
– (commitment is correct) cmnew matches the updated Merkle trees.
(b) Merkle trees are well-formed. Completeness properties of Merkle trees (Definitions 28
and 30) ensure that changes from the old state S to the new state S 0 have been applied correctly to
the state tree in Tstate in A, and also that the insertion of the commitment to the history tree Thistory
has been applied correctly.
(c) State commitment contains correct root hashes. Our construction of vF.Run stores the new
commitment cmnew in the new auxiliary state A0 , so this condition holds.
(d) New state Merkle tree is over new state. The changes to the state S, ([waddri ]M M
1 , [wdatai ]1 ),
are converted into Merkle tree update ∆state T applied to A, so the new state Merkle tree is over the
new state.
Lemma 21. The construction of vF in Section 6.11.4 satisfies the knowledge soundness property
(Definition 11).
Proof. Let A be an adversary against the knowledge soundness of vF (Definition 11). This means
that on input public parameters pp ∈ Setup(1λ ), A outputs a tuple (F, t, cm, πF ). We assume that
t > 0; otherwise there is nothing to prove.
We construct an adversary A0 against the knowledge soundness of IVC (Definition 19), using
an auxiliary input aux that is interpreted as (ppMT , ppARK ), as follows:
A0 receives as input public parameters ppIVC ∈ IVC.Setup(1λ ) and the auxiliary input aux,
then it works as follows: (1) parse aux as (ppMT , ppARK ) and assemble pp = (ppMT , ppIVC ,
ppARK ); (2) compute (F, t, cm, πF ) := A(pp); (3) use (ppMT , F ) to create the IVC predicate
Π as in Section 6.11.4; (4) create the IVC message z := (t, cm); (5) create the IVC proof
π := πF ; (6) output (Π, z, π).
Recall that, for t > 0, vF.Verify(t, cm, πF ) = IVC.Verify(vkΠ , (t, cm), πF ) where vkΠ is hardcoded
in vF. This means that A0 produces an accepting output whenever A does.
Let E 0 be the extractor for A0 guaranteed by the knowledge soundness property of IVC (Defini-
tion 19). We construct an extractor E for A:
E receives as input public parameters pp ∈ Setup(1λ ) and then works as follows: (1) parse
pp = (ppMT , ppIVC , ppARK ); (2) set the auxiliary input aux := (ppMT , ppARK ); (3) compute
the IVC transcript T = ([wi ]n1 , [zi ]n1 ) := E 0 (ppIVC , aux); (4) for each i, find in the local data wi
a transaction txi (in the execution transcript of F contained in wi ); (5) output all transactions
[txi ]n1 .
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 170
6.12.3 Security of vC
The construction of vC appears in Section 6.11.5, and its two main subroutines are MT (a
Merkle tree) and ARK (a non-interactive argument of knowledge). We state the properties of ARK
that we use (omitting the tuple prefix ARK), and then prove the security properties of vC.
Definition 22 (completeness of ARK). For every polynomial-size adversary A and security param-
eter λ,
xw ppARK ← Setup(1λ )
Pr
( , )∈R
↓
xw
(R, , ) ← A(ppARK ) =1 .
x (pkR , vkR ) ← KeyGen(ppARK , R)
Verify(vkR , , π) = 1
π ← Prove(pkR , , ) xw
Definition 23 (knowledge soundness of ARK). For every polynomial-size adversary A there exists
a polynomial-size extractor E such that for every sufficiently large security parameter λ,
x ppARK ← Setup(1λ )
Verify(vkR , , π) = 1 x
(R, , π) ← A(ppARK )
w
Pr ↓ ≥ 1 − negl(λ) .
xw ← E(ppARK )
( , )∈R
(pkR , vkR ) ← KeyGen(ppARK , R)
Lemma 24. The construction of vC in Section 6.11.5 satisfies the completeness property (Defini-
tion 12).
Proof. First note that vC.Run produces the output y by running C on input x with state S, and so
clearly the condition y = C S (x) holds. Next we argue that, if the auxiliary state A is such that
vS.VerifyAll(S, A) = 1, then the proof πC produced by vC.Run will be accepted by vC.Verify. Since
the proof πC is produced and validated using the prover and verifier of ARK, by the completeness
of ARK (Definition 22), it suffices to argue that the instance-witness pair constructed by vC.Run is
in the NP relation R.
w x
To see this, recall that R checks that the witness for an instance = (cm, x, y) contains
a valid execution transcript of a computation of C on input x leading to output y, with read
queries and read answers authenticated against the state root hash contained in the state com-
mitment cm = (rhstate , rhhistory ) (if any). The condition vS.VerifyAll(S, A) = 1 in the completeness
property ensures that Tstate in A is a Merkle tree over the state S, and cm = (rhstate , rhhistory ) in
A is such that rhstate is the root of this Merkle tree. This means that the read queries and read
answers are consistent with the state S, and the Merkle tree lookup proof placed in the witness w
by vC.Run is valid (by the completeness of Merkle tree lookups, Definition 29).
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 171
Lemma 25. The construction of vC in Section 6.11.5 satisfies the soundness property (Defini-
tion 13).
Proof. Suppose that an adversary outputs (S, A) such that vS.VerifyAll(S, A) = 1 and also (x, y, πC )
such that, for the state commitment cm in A, it holds that vC.Verify(cm, x, y, πC ) = 1. By con-
x
struction, we know that the verifier of ARK accepts the instance = (cm, x, y) for the NP relation
R.
By the knowledge soundness of ARK (Definition 23), there exists a corresponding extractor
w x
that outputs a valid witness for , which contains a valid execution transcript of a computation
of C on input x leading to output y, with read queries and read answers authenticated against the
state root hash contained in the state commitment cm = (rhstate , rhhistory ) (if any). But we know
from VerifyAll(S, A) that rhstate is the root of a Merkle tree over the state S and so, by the soundness
of Merkle tree lookup proofs (Definition 34), we know that the read queries and read answers are
consistent with S, and conclude that y = C S (x).
Proof. Suppose that an adversary outputs (S, A) such that vS.VerifyAll(S, A) = 1 and also trans-
actions (tx1 , . . . , txn ). Let t be the state index and cmt the state commitment contained in the
auxiliary state A. The condition vS.VerifyAll(S, A) = 1 implies that the history Merkle tree Thistory
in A is well-formed, and its root is stored in cmt .
When vF.Run is invoked to apply the first of these transactions, cmt will be placed at location t
in the history Merkle tree. When vF.Run is invoked to apply each of the other transactions, the t-th
location in the history Merkle tree continues to store cmt (while subsequent locations in the history
Merkle tree are allocated to store the subsequent commitments). This is due to the completeness
of Merkle tree modifications (Definitions 31 and 32).
This means that History.Verify will accept the history proof. Indeed, History.Prove produces a
history proof πH for a state index t by authenticating cmt as being at location t in the current history
Merkle tree, and History.Verify validates a history proof by checking this authentication against
the history root hash in the current state commitment. The completeness property of Merkle tree
lookups (Definition 29) implies that History.Verify accepts.
Lemma 27. The construction of History in Section 6.11.6 satisfies the soundness property (Defi-
nition 15).
Proof. Suppose that an adversary outputs a state commitment cm, state index t, two state com-
mitments cmt and cm0t , and two history proofs πH and πH0 such that History.Verify(pp, cm, t, cmt ,
πH ) = 1 and History.Verify(pp, cm, t, cm0t , πH0 ) = 1. We argue that, except with negligible proba-
bility, cmt = cm0t .
CHAPTER 6. INCREMENTAL VERIFICATION FOR LEDGER SYSTEMS 172
If t = 0, then we know by construction of History.Verify that it is always the case that cmt =
cm0t = ⊥.
If t > 0, History.Verify parses cm as a tuple (rhstate , rhhistory ) and checks that the history proof
authenticates the past state commitment as being at location t of a Merkle tree with root rhhistory .
This means that the adversary has output proofs πH and πH0 that respectively authenticate cmt and
cm0t for the same location t of a Merkle tree with the same root rhhistory . By the binding property
(Definition 33) and soundness of lookups (Definition 34) of Merkle trees, we know that cmt = cm0t
except with negligible probability.
where “addrq is up-to-date” means that the highest index 1 ≤ j ≤ N such that addrj = addrq in
[addri ]n1 satisfies that dataj in [datai ]n1 matches the value at addrq in T new .
Definition 33 (binding of root hash). For every polynomial-size adversary A and sufficiently large
security parameter λ,
Validate(ppMT , T1 ) = 1
Validate(pp , T ) = 1
MT 2
RootT1 (ppMT ) = rh ppMT ← Setup(1λ )
Pr ≥ 1 − negl(λ) .
RootT2 (ppMT ) = rh (T1 , T2 , rh) ← A(ppMT )
↓
T1 = T2
ppMT ← Setup(1λ )
Validate(ppMT , T ) = 1
b=1 (T, [addri ]n1 , [datai ]n1 , π) ← A(ppMT ) ≥ 1−negl(λ) .
Pr
↓ rh ← RootT (ppMT )
(addri , datai ) ∈ T for i ∈ [n] b ← VerifyLookup(ppMT , rh, [addri ]n1 , [datai ]n1 , π)
Chapter 7
Decentralizing trust is a fundamental principle in the design of end-to-end encryption and cryp-
tocurrency systems. A common issue in these applications is that users possess critical secrets. If
these secrets are lost, users can lose precious data or assets. This issue remains a pain point in the
adoption of these systems. Existing approaches such as backing up user secrets through a central-
ized service or distributing them across N mutually distrusting servers to preserve decentralized
trust are either introducing a central point of attack or face usability issues by requiring users to
authenticate N times, once to each of the N servers.
We present N-for-1-Auth, a system that preserves distributed trust by enabling a user to au-
thenticate to N servers independently, with the work of only one authentication, thereby offering
the same user experience as in a typical centralized system.
7.1 Introduction
Decentralizing trust is a fundamental principle in designing modern security applications. For
example, there is a proliferation of end-to-end encrypted systems and cryptocurrencies, which aim
to remove a central point of trust [136, 463, 534–542]. In these applications, users find themselves
owning critical secrets, such as the secret keys to decrypt end-to-end encrypted data or the secret
keys to spend digital assets. If these secrets are lost, the user permanently loses access to his/her
precious data or assets.
To explain the problem that N-for-1-Auth addresses, let us take the example of Alice, a user of
an end-to-end encryption application denoted as the “E2EE App” (or similarly, a cryptocurrency
system). For such an E2EE App, Alice installs an E2EE App Client on her device, such as her
cell phone. The client holds her secret key to decrypt her data. For the sake of usability and
adoption, Alice should not have to deal with backing up the key herself. We are concerned with
the situation when Alice loses her cell phone. Though she can get a new SIM card by contacting the
provider, she loses the secret keys stored on the phone. With WhatsApp [536] and Line [539], end-
CHAPTER 7. N-WISE DECENTRALIZED AUTHENTICATION 175
Server 1 Server 2 Server 3 Server 1 Server 2 Server 3 Server 1 Server 2 Server 3 Server 1 Server 2 Server 3
User secret Auth factors User secret Auth factors User secret Auth factors User secret Auth factors
(a) Servers authenticate (b) The user secret- (a) Servers authenticate (b) The user reconstructs
the user through authen- shares the user secret the user via authentica- the secret from shares.
tication factors. among the servers. tion factors.
to-end encrypted chat applications, Alice can use centralized services such as Google Drive and
iCloud to backup her chat history. However, such a strategy jeopardizes the end-to-end encryption
guarantees of these systems because users’ chats become accessible to services that are central
points of attack. This is further reaffirmed by Telegram’s CEO Pavel Durov who said in a blog
post: “(Centralized backup) invalidates end-to-end encryption for 99% of private conversations”.
To preserve decentralized trust, many companies [136, 543–547] and academic works [548–551]
have proposed to secret-share the user’s secrets across N servers, so that compromising some of
the servers does not reveal her secrets.
However, a significant issue with this approach is the burden of authentication. After Alice
loses her cell phone with all her secrets for the E2EE App, she can only authenticate with other
factors, such as email, short message services (SMS), universal second-factor (U2F), and security
questions. How does Alice authenticate to the N servers to retrieve her secret? If Alice authen-
ticates to only one server and the other servers trust this server, the first server now becomes a
central point of attack. To avoid centralized trust, as the N servers cannot trust each other, Alice
has to authenticate to each server separately. For email verification, Alice has to perform N times
the work—reading N emails. To avoid a central point of attack, the E2EE App should require
multiple factors, which further multiplies Alice’s effort.
One might think that doing N times the work, albeit undesirable for the user, is acceptable in
catastrophic situations such as losing one’s devices. The issue here is that Alice has to perform
this work not only when she is recovering her secrets, but also when she is joining the system,
because her key’s secret shares must be registered with the N servers using the multiple factors
of authentication, and those servers must check that Alice indeed is the person controlling those
factors. Even for N = 2 in which there is only one additional email and text message, it is a
completely different user experience that adds friction to a space already plagued by usability
issues (e.g., “Why Johnny can’t encrypt?” [552, 553]). Many academic works [554, 555] reaffirm
the importance of the consistency of user experience and minimizing user effort for better adoption.
CHAPTER 7. N-WISE DECENTRALIZED AUTHENTICATION 176
Therefore, this initial bar of entry is a deterrent against widespread adoption. To validate that
this is an important and recurring problem, we presented N-for-1-Auth to prominent companies
in the end-to-end encryption and cryptocurrency custody spaces, who supported our thesis. We
summarize their feedback in Section 7.1.2.
A few strawman designs seem to address this burden for Alice but are actually unviable. One
strawman is to build a client app that automatically performs the N authentications for Alice. In the
case of email/SMS authentication, the client app parses the emails or text messages Alice receives
from the N servers. However, this either requires the client app to have intrusive permissions
(e.g., reading Alice’s email) that can affect the security of other applications Alice uses or requires
very specific APIs available on the email/SMS server side (e.g., Gmail offering such APIs), which
do not exist today for major providers and we find unreasonable. Another strawman [548–551,
556] is to have Alice possess or remember a master secret and then authenticate to each of the N
servers by deriving a unique secret to each server, thereby avoiding the issue of having to do the
work surrounding email/SMS authentication. However, Alice has to then safeguard this secret, as
losing it could lead to an attacker impersonating her to the N servers. In this case, we return to the
original problem of Alice needing a reliable way to store this authentication secret.
7.1.1 N-for-1-Auth
We present N-for-1-Auth, which alleviates this burden by enabling a user to authenticate to
N servers independently by doing only the work of authenticating with one, as illustrated in Fig-
ures 7.1 and 7.2. This matches the usual experience of authenticating to an application with cen-
tralized trust.
N-for-1-Auth supports many authentication factors that users are accustomed to, including
email, SMS, U2F, and security questions, as discussed in Section 7.4. Specifically, N-for-1-Auth
requires no changes to the protocols of these forms of authentication.
N-for-1-Auth offers the same security properties as the underlying authentication protocols
even in the presence of a malicious adversary that can compromise up to N − 1 of the N servers.
N-for-1-Auth additionally offers relevant privacy properties for the users. Users of authentica-
tion factors may want to hide their email address, phone number, and security questions from the
authentication servers. This is difficult to achieve in traditional (centralized) authentication. We
discuss the concrete privacy properties of N-for-1-Auth for each factor in Section 7.4.
N-for-1-Auth provides an efficient implementation for several factors and is 8× faster than a
naive implementation without our application-specific optimizations. For example, when N = 5,
our email authentication protocol takes 1.38 seconds to perform the TLS handshake and takes an
additional 0.43 seconds to send the email payload, which is efficient enough to avoid a TLS timeout
and successfully communicate with an unmodified TLS email server.
• Many companies mentioned the need for fault tolerance, which can be addressed in two steps.
First, N-for-1-Auth can incorporate threshold secret-sharing, as discussed in Section 7.8, which
enables a subset of servers to recover the secret. Second, each server can set up backup machines
within their trust domain/cloud.
• Some companies mentioned the need for more authentication factors, e.g., TOTP (time-based
one-time passcodes) and SSO (single sign-on) [557, 558], which can be integrated into N-for-1-
Auth in similar ways—TOTP follows a similar format to security questions in which the client
stores the TOTP key, and SSO can be integrated using N-for-1-Auth’s TLS-in-SMPC protocol.
• Some companies mentioned the need to hide user contact information from the other servers,
which we address in Section 7.4.
Overall, we hope that N-for-1-Auth can provide practical value to this space of distributed trust.
Unmodified
N-for-1-Auth TLS TLS Server
SMPC Endpoint
Server 2 Server 3
The user’s email server, which is unmodified and runs an unmodified version of the TLS server
protocol, then decrypts the traffic produced by the TLS-in-SMPC protocol and receives the email.
The email is then seen by the user, who can enter the passcode into a client app to authenticate to
the N servers, thereby completing N-for-1-Auth’s email authentication.
Support for different authentication factors. Beyond email, N-for-1-Auth supports SMS, U2F,
and security questions. In addition, due to the generality of N-for-1-Auth’s TLS-in-SMPC con-
struct, N-for-1-Auth can also support any web-based authentication such as OAuth [558], which
we discuss how to incorporate in Section 7.7. However, we focus on the aforementioned factors
in this work. Each factor has its unique challenges for N-for-1-Auth, particularly in ensuring N-
for-1-Auth does not reduce the security of these factors. More specifically, replay attacks are a
common threat to authentication protocols. In our system, when a malicious server receives a
response from the user, this server may attempt to use the response to impersonate the user and
authenticate with the other servers. We systematically discuss how to defend against such replay
attacks in Section 7.4.
End-to-end implementation for TLS-in-SMPC. TLS is an intricate protocol that involves many
cryptographic operations. If we run the TLS endpoint using a maliciously secure SMPC library off
the shelf, our experiments in Section 7.6.5 show that it would be at least 8× more expensive than
our protocol. We designed our TLS-in-SMPC protocol and optimized its efficiency with a number
of insights based on the TLS protocol itself, and integrated it with the wolfSSL library.
point of attack. The user holds a secret that they wish to distribute among the N servers. Based on
our discussion with companies in Section 7.1.2, these companies wished that one of the N servers
be the actual server of the application, and the other N − 1 servers be other helper servers. This is
natural because the app server is providing the service, and importantly, the app server is reassured
that if it behaves well, the N − 1 helper servers cannot affect security. Each user can download
a stateless client application or use a web client to participate in these protocols. This minimalist
client app does not retain secrets or demand intrusive permissions to data in other applications
such as a user’s emails or text messages; it simply serves as an interface between the user and the
servers. We place such limitations on the client app since we assume the device hosting the app
can be lost or stolen, and we want to hide the user’s sensitive data from our client app.
Workflow. The system consists of two phases:
– Enrollment (Figure 7.1). When the user wants to store a secret on the servers, the user provides
the servers with a number of authentication factors, which the servers verify using N-for-1-
Auth’s authentication protocols described in Section 7.4. Then, after authenticating with these
factors, the client secret-shares the secret and distributes the shares across the servers.
– Authentication (Figure 7.2). The user runs the N-for-1-Auth protocols for the authentication
factors. Once the user is authenticated, the N servers can perform computation over the secret
for the user, which is application-specific, as we describe in Section 7.5.
Though in use cases such as key recovery, the authentication phase only occurs in catastrophic
situations, users must enroll their factors when joining the system, which typically requires N
times the effort and is a different user experience from enrolling to a centralized system.
N-for-1 Authentications. We describe N-for-1-Auth’s authentication protocols for several factors
in Section 7.4.
– Email: The N servers jointly send one email to the user’s email address with a passcode. During
authentication, the servers expect the user to enter this passcode.
– SMS: The N servers jointly send one message to the user’s phone number with a passcode.
During authentication, the servers expect the user to enter this passcode.
– U2F: The N servers jointly initiate one request to a U2F device. During authentication, the
servers expect a signature, signed by the U2F device, over this request.
– Security questions: The user initially provides a series of questions and answers to the servers.
During authentication, the servers ask the user these questions and expect answers consistent
with those that are set initially. Passwords are a special case of security questions and can also
be verified using this protocol.
Applications. We describe how N-for-1-Auth supports two common applications in Section 7.5 ,
but N-for-1-Auth can also be used in other systems with decentralized trust.
– Key recovery: The user can backup critical secrets by secret-sharing them among the N servers.
Upon successful authentication, the user can then retrieve these secrets from the servers.
CHAPTER 7. N-WISE DECENTRALIZED AUTHENTICATION 180
– Digital signatures: The user can backup a signing key (e.g., secret key in Bitcoin) by secret-
sharing it among the N servers. Upon successful authentication, the servers can sign a signature
over a message the user provides, such as a Bitcoin transaction.
Example. We illustrate how to use N-for-1-Auth with a simple example. Alice enrolls into N-
for-1-Auth through the client app. She provides three authentication factors: her email address,
her phone number, and her U2F token. The client app then contacts the N servers and enrolls
these factors. The N servers then send one email and one text message, both containing a random
passcode, and one request to Alice’s U2F device. Alice then enters the passcodes on the client app
and confirms on her U2F device. When all the N servers have verified Alice, the client app then
secret-shares the key with the servers, and the servers store the shares. Alice performs the same
authentication when she wants to recover the secrets.
=
Impersonates the user
Server 1 Server 2 Server 3
Figure 7.4: N-for-1-Auth’s threat model. The red area indicates a group of malicious parties
who collude with one another.
where ~x denotes all parties’ input, z denotes an auxiliary input for the adversary A, IDEALFTLS ,I,S(z) (~x)
denotes the joint output of S and the honest parties, and REALΠ,I,A (~x) denotes the joint output of
A and the honest parties.
We present our TLS-in-SMPC protocol in Section 7.3, and we prove that it securely realizes FTLS
in Section 7.9.
7.3.1 Overview
In TLS-in-SMPC, N servers jointly participate in a TLS connection with an unmodified TLS
server. Since these N servers do not trust each other, any one of them must not be able to decrypt
the traffic sent over the TLS connection. Therefore, the insight is for these N servers to jointly
CHAPTER 7. N-WISE DECENTRALIZED AUTHENTICATION 182
create a TLS client endpoint within SMPC that can communicate with the TLS server over a TLS
connection.
As Figure 7.3 shows, the N servers run a TLS client within SMPC, which establishes a TLS
connection with the unmodified TLS server. The TLS session keys are only known by the TLS
server and the TLS client within SMPC. Hence, the N servers must work together to participate in
this TLS connection.
All packets are forwarded between the SMPC and the unmodified TLS server via one of the
servers. The specific server that forwards the packets does not affect security since none of the
servers know the TLS session keys. That is, none of the servers can decrypt the packets being
forwarded or inject valid packets into the TLS connection. The TLS-in-SMPC protocol consists of
two phases:
• TLS connection establishment: The N servers jointly generate the client-side secret for Diffie-
Hellman key exchange. After receiving the server-side secret, they derive the TLS session keys
inside SMPC.
• Data exchange: The N servers, within SMPC, use the session keys to encrypt or decrypt a
message.
3. The TLS client and server compute αβ·G and—with other information—derive the TLS session
keys, as specified in the TLS standards [562, 563].
CHAPTER 7. N-WISE DECENTRALIZED AUTHENTICATION 183
1. For all servers, the i-th server Pi samples αi ←$ Z+ p and broadcasts αi · G, by first committing
to αi · G and then revealing it.
increase the cost of computing the GCM power series. Formally, to encrypt message of N bytes
with AES (the block size is 16 bytes), we find L that minimizes the overall encryption cost:
(L − 1) · 16384 + 1280 + 5120
Lopt = argminL .
+M · 5120 + d N 16
+M
e · 5120
where M = d 16·(L−2)−1
N
e is the number of data packets in the TLS layer.1 For example, for
N = 512, choosing L = N/16 = 32 is 2.3× the cost compared with Lopt = 5.
Circuit implementation. We synthesize the circuit files in TLS-in-SMPC using Synopsys’s De-
sign Compiler and tools in TinyGarble [260], SCALE-MAMBA [217], and ZKCSP [432]. The
circuits have been open-sourced here.
https://github.com/n-for-1-auth/circuits
– The client replies with a response to each server, which will be different for each server.
Depending on the application, users may want to change their authentication factors, in which they
would need to authenticate with the servers beforehand.
Preventing replay attacks. The client needs to provide each server a different response to defend
against replay attacks. If the user sends the same response to different servers, a malicious server
who receives the response can attempt to beat the user to the honest servers. The honest servers
will expect the same message that the malicious server sends, and if the malicious server’s request
reaches the honest servers first, the honest servers will consider the malicious server authenticated
instead of the honest user. Since up to N − 1 of the servers can collude with one another, in this
scenario, the malicious server can reconstruct the shares and obtain the secret.
To prevent replay attacks, we designed the authentication protocols in a way such that no
efficient attacker, knowing N − 1 out of the N responses from an honest user, can output the
remaining response correctly with a non-negligible probability.
1
Besides the actual payload data, the GCM hash also adds on two additional blocks (record header and the data
size) and one byte (TLS record content type), which explains the term 16 · (L − 2) − 1.
CHAPTER 7. N-WISE DECENTRALIZED AUTHENTICATION 186
setting, the E2EE App Server delivers packets to the TLS server. Based on our interaction with
companies, the E2EE App Server does not want to reveal Alice’s contact information to the other
helper servers. To achieve this, for N-for-1-Auth’s email authentication protocol, Alice’s email
address is secret-shared among these N servers, and the E2EE App Server maintains a mapping
from Alice’s email address to the index at which the shares are stored. During authentication, the
E2EE App Server provides this index to the other helper servers. In addition, the helper servers
only need to know the email provider’s mail gateway address instead of the full email address.
This is because the N servers verify the TLS server certificate outside of SMPC for efficiency
reasons and therefore the email provider’s mail gateway address is revealed.2 For example, many
companies use Google or Microsoft for email service on their domains. In this case, for a user with
email address [email protected], the helper servers know neither A nor B.com, but only which email service
provider is used by B.com. This property is useful in the case of data breaches as compromising
the helper servers does not reveal Alice’s email. We note that for the E2EE App Server to maintain
the mapping, they only need to have the full information of only one of the user’s second-factors,
such as their email or phone number, whereas the information for their other registered factors can
be secret-shared and hidden from the E2EE App Server as well.
Background: U2F. A U2F device attests to a user’s identity by generating a signature on a chal-
lenge requested by a server under a public key that the server knows. The U2F protocol consists
of an enrollment phase and an authentication phase, described as follows.
In the enrollment phase, the U2F device generates an application-specific keypair and sends a
key handle and the public key to the server. The server stores the key handle and the public key.
In the authentication phase, as Figure 7.5 shows, the server generates a random challenge and
sends over the key handle, the application identifier (appId), and a challenge to a U2F interface
such as a client app, which is then, along with the origin name of the server, forwarded to the U2F
device. Then, upon the user’s confirmation, such as tapping a button on the device [579, 580], the
U2F device generates a signature over the request. The signature also includes a monotonic counter
to discover cloning attacks. The server receives the signature and verifies it using the public key
stored in the enrollment phase.
To avoid the user having to perform a U2F authentication for each server, an intuitive approach
is to have the servers generate a joint challenge which is then signed by the U2F device. The client
can secret-share the signature, and the servers can then reconstruct and verify the signature within
SMPC. However, signature verification in SMPC can be prohibitively expensive.
An insecure strawman. We now describe an insecure strawman, which will be our starting point
in designing the secure protocol. Let the N servers jointly generate a random challenge. The
strawman lets the client obtain a signature over this challenge from U2F and sends the signature to
each server. Then, each server verifies the signature, and the servers consider the user authenticated
if the verification passes for each server.
This approach suffers from the replay attack described in Section 7.4. When a malicious server
receives the signature from the client, this server can impersonate the honest user by sending this
signature to the other servers.
N-for-1-Auth U2F’s protocol. Assuming server Pi chooses a random challenge value si , our
protocol must satisfy two requirements: (1) the challenge signed by the U2F device is generated
using all the servers’ randomness s1 , s2 , ..., sN ; and (2) the client can prove to server Pi that the
signed challenge uses si without revealing information about other parties’ randomness.
We identify that aggregating the servers’ randomness via a Merkle tree combined with crypto-
graphic commitments, as Figure 7.6 shows, satisfies these requirements. We now briefly describe
these two building blocks.
CHAPTER 7. N-WISE DECENTRALIZED AUTHENTICATION 189
ℋ ℋ
In a Merkle tree, if the client places the servers’ randomness s1 , s2 , ..., sN into the leaf nodes, as
Figure 7.6 shows, then the root hash value is a collision-resistant representation of all the servers’
randomness, which we will use as the challenge for the U2F device to sign over.
However, Merkle trees are not guaranteed to hide the leaf nodes’ values. To satisfy the second
requirement, as Figure 7.6 shows, we use cryptographic commitments ci = Commit(si ; ri ) instead
of si as the leaf nodes’ values, in which ri is a random string chosen by the client. The commit-
ments provide two guarantees: (1) the server, from the commitment ci , does not learn si and (2)
the client cannot open ci to a different s0i 6= si .
Next, the client obtains the signature of the root hash from U2F and sends each server the
following response: (1) the signature, (2) a Merkle tree lookup proof that the i-th leaf node has
value ci , and (3) commitment opening secrets ri and si . Here, only the client and the i-th server
know the server randomness si .
The detailed authentication protocol is as follows:
1. Each server opens a TLS connection with the client and sends over a random value si .
2. The client builds a Merkle tree as described above and in Figure 7.6 and obtains the root hash.
The client requests the U2F device to sign the root hash as the challenge, as Figure 7.5 shows,
following the U2F protocol.
3. The user then operates on the U2F device once, which produces a signature over the root hash.
The client app then sends the signature, the Merkle tree lookup proof, and the commitment
opening information to each server.
4. Each server verifies the signature, opens the commitment, verifies that the commitment is indeed
over the initial value si provided by server Pi , and checks the Merkle tree lookup proof. If
everything is verified, then Pi considers the user authenticated.
This protocol prevents replay attacks as described above since the client’s response to Pi contains
the opening secret si ; other servers cannot determine this value with a non-negligible probability.
Enrollment. The enrollment protocol is as follows:
1. The client and the servers engage in the standard U2F enrollment protocol [578], in which the
servers obtain the key handle and the public key.
CHAPTER 7. N-WISE DECENTRALIZED AUTHENTICATION 190
1.5
20
0 0.0 0.0
2 3 4 5 2 3 4 5 2 3 4 5
Number of Parties N Number of Parties N Number of Parties N
(a) Offline phase latency. (b) Online phase latency. (c) Garbled circuit size.
Figure 7.7: The overall online/offline phase latencies and the garbled circuit size of the TLS-in-
SMPC protocol for N = 2, 3, 4, 5 servers when sending an email with passcode (the mail body
is 34 bytes).
2. The client and the servers run N-for-1-Auth’s U2F authentication protocol as described above.
Privacy. The U2F protocol already provides measures to hide a device’s identity [581], which
N-for-1-Auth leverages to provide privacy for the user.
Table 7.1: Breakdown of the TLS-in-SMPC latencies for sending an email with passcode (the
mail body is 34 bytes).
the user correctly answers less sensitive questions. Furthermore, to mitigate online brute force
attacks, in addition to standard rate-limiting mechanisms which N-for-1-Auth supports, they can
set other authentication factors as prerequisites. That is, only when the user authenticates against
prerequisite factors can the user even see the security questions.
7.5 Applications
Once the N servers have authenticated the user, they can perform some operations for the user
using their secret that is secret-shared during enrollment, such as key recovery as in our motivating
example. To show the usefulness of N-for-1-Auth, we now describe two applications that can
benefit from N-for-1-Auth.
Key recovery. The user can backup a key by secret-sharing it as the user secret during the
enrollment phase. When the user needs to recover the key, the servers can send the shares back to
the user, who can then reconstruct the key from the shares. Key recovery is widely used in end-to-
end encrypted messaging apps, end-to-end encrypted file sharing apps, and cryptocurrencies.
Digital signatures. Sometimes, it is preferred to obtain a signature under a secret key, rather
than retrieving the key and performing a signing operation with it. This has wide applications
in cryptocurrencies, in which the user may not want to reconstruct the key and have it in the
clear. Instead, the user delegates the key to several servers, who sign a transaction only when
the user is authenticated. The user can also place certain restrictions on transactions, such as the
maximum amount of payment per day, which can be enforced by the N servers within SMPC. In
N-for-1-Auth, the user secret-shares the signing key in the enrollment phase. Before performing
a transaction, the user authenticates with the servers. Once authenticated, the user presents a
transaction to the N servers, who then sign it using a multi-party ECDSA protocol [587–591]. An
alternative solution is to use multisignatures [592], which N-for-1-Auth can also support, but this
option in unavailable in certain cryptocurrencies [535] and may produce very long transactions
when N is large.
CHAPTER 7. N-WISE DECENTRALIZED AUTHENTICATION 192
7.6 Evaluation
In this section we discuss N-for-1-Auth’s performance by answering the following questions:
1. Is N-for-1-Auth’s TLS-in-SMPC protocol practical? Can it meet the TLS handshake timeout?
(Section 7.6.3)
2. How efficient are N-for-1-Auth’s authentication protocols? (Section 7.6.4)
3. How does N-for-1-Auth compare with baseline implementations and prior work? (Section 7.6.5
and Section 7.6.6)
7.6.1 Implementation
We use MP-SPDZ [215], emp-toolkit [259, 437] and wolfSSL [593] to implement N-for-1-
Auth’s TLS-in-SMPC protocol. We implemented the online phase of elliptic-curve point additions
within SMPC from scratch in C++.
7.6.2 Setup
We ran our experiments on c5n.2xlarge instances on EC2, each equipped with a 3.0 GHz
8-core CPU and 21 GB memory. To model a cross-state setup, we set a 20 ms round-trip time and
a bandwidth of 2 Gbit/s between servers (including the TLS server) and 100 Mbit/s between clients
and servers.
Table 7.2: Latencies of N-for-1-Auth (N = 3). Numbers in parentheses are the cost given an
established TLS connection.
the shelf that does not precompute the offline phase, from Table 7.1 we see that for N = 5, the key
exchange has a latency of 14.83 s and cannot meet a TLS handshake timeout of 10 s.
We see from Table 7.1 that the latency for establishing the TLS connection dominates. How-
ever, N-for-1-Auth can create a persistent connection with the email receiving gateway server,
allowing this to be a one-time cost, which is particularly useful for popular email service providers
like Gmail. With an established connection, sending an email with N = 5 only takes 3.69 s in
the offline phase and 0.43 s in the online phase, which is drastically smaller. To maintain this
connection, N-for-1-Auth servers can send SMTP heartbeats (a NOOP command). Our experiment
with Gmail show that one heartbeat per 120 s is sufficient to maintain a long-term connection for
at least 30 minutes.
N-for-1-Auth. With N = 5 servers, the overall latency is at least 8× slower compared with N-for-
1-Auth’s TLS-in-SMPC implementation. This is because computing αβ · G involves expensive
prime field operations, which use 107 AND gates. With N = 5 servers, this step already takes
150 s in the offline phase and 8.6 s in the online phase.
Decentralized storage of secrets. In industry, there are many companies that use decentralized
trust to store user secrets, such as Curv [543], Partisia [605], Sepior [546], Unbound Tech [544],
and Keyless [547]. These companies use SMPC to store, reconstruct, and apply user secrets in a
secure decentralized manner. However, in principle a user still needs to authenticate with each of
these company’s servers since theses servers do not trust each other. Therefore, in these settings
a user still needs to do N times the work in order to access their secret. N-for-1-Auth’s proto-
cols can assist these commercial decentralized solutions to minimize the work of their users in
authentication.
TLS and SMPC. There are works using TLS with secure two-party computation (S2PC), but
in a prover-verifier setting in which the prover proves statements about information on the web.
BlindCA [572] uses S2PC to inject packets in a TLS connection to allow the prover to prove to
the certificate authority that they own a certain email address. However, it issue is that the prover
possesses all of the secrets of the TLS connection, and all of their traffic sent to the server must go
through a proxy owned by the verifier. DECO [566] uses TLS within S2PC, but its approach also
gives the prover the TLS encryption key, which our setting does not allow. Overall, both of these
works are restricted to two parties based on their intended settings, while N-for-1-Auth supports
an arbitrary number of parties.
In addition, a concurrent work [567] also enables running TLS in secure multiparty computa-
tion, and their technical design in this module is similar to ours3 , but [567] does not propose or
contribute authentication protocols for distributed trust settings and their applications. N-for-1-
Auth offers contributions beyond the TLS-in-SMPC module, proposing the idea of performing N
authentications with the work of one, showing how this can be achieved by running inside SMPC
the SMTP protocol or the HTTP protocol in addition to TLS, to support authentication factors, and
demonstrating applications in the end-to-end encryption and cryptocurrency space. In addition,
within the TLS-in-SMPC protocol, we provide an end-to-end implementation compatible with an
existing TLS library, wolfSSL, and show that it works for N-for-1-Auth’s authentication proto-
cols. Specifically, [567] emulated certain parts of the TLS protocol, and they only evaluated the
online phase and did not measure the offline cost, which is important for real-world deployment.
In contrast, we also benchmark the offline phase of our protocol.
OAuth. OAuth [558] is a standard protocol used for access delegation, which allows users to
grant access to applications without giving out their passwords. While OAuth has several desirable
properties, it does not work for all of N-for-1-Auth’s second factors, notably SMS text messages
and email service providers that do not support OAuth, and is therefore less general and flexible
than N-for-1-Auth. In addition, if a user authenticates through OAuth and wants distributed trust,
they have to perform the authorization N times, once for each server. N-for-1-Auth can incorporate
OAuth as a separate authentication factor—the N servers can secret-share the OAuth client secret
and then, using TLS-in-SMPC, obtain the identity information through the OAuth API.
3
We implemented additional optimizations in AES and GCM.
CHAPTER 7. N-WISE DECENTRALIZED AUTHENTICATION 196
7.8 Discussion
Handling denial-of-service attacks. In this paper, we consider denial-of-service attacks by the
servers to be out of scope, as discussed in Section 7.2.1. There are some defenses against these
types of attacks, as follows:
– Threshold secret sharing. A malicious server can refuse to provide its share of the secret to
prevent the user from recovering it. To handle this, the user can share the secret in a threshold
manner with a threshold parameter t which will allow the user’s secret to be recoverable as
long as t servers provide their shares. This approach has a small cost, as a boolean circuit for
Shamir secret sharing only takes 10240 AND gates by using characteristic-2 fields for efficient
computation.
– Identifiable abort. Some new SMPC protocols allow for identifiable abort, in which parties who
perform DoS attacks by aborting the SMPC protocol can be identified [370, 606]. N-for-1-Auth
can support identifiable abort by incorporating these SMPC protocols and standard identification
techniques in its authentication protocols.
7.9.1 Overview
We model the security in the real-ideal paradigm [200], which considers the following two
worlds:
• In the real world, the N servers run protocol Π, N-for-1-Auth’s TLS-in-SMPC protocol, which
establishes, inside SMPC, a TLS client endpoint that connects to an unmodified, trusted TLS
server. The adversary A can statically compromise up to N − 1 out of the N servers and can
eavesdrop and modify the messages being transmitted in the network, although some of these
messages are encrypted.
• In the ideal world, the honest servers, including the TLS server, hand over their information to
the ideal functionality FTLS . The simulator S obtains the input of the compromised parties in
~x and can communicate with FTLS . FTLS executes the TLS 1.3 protocol, which is assumed to
provide a secure communication channel.
We then prove the security in the {FSMPC , FrpRO }-hybrid model, in which we abstract the SPDZ
protocol and the AG-MPC protocol as one ideal functionality FSMPC and abstract the random
oracle used in commitments with an ideal functionality for a restricted programmable random
oracle FrpRO , which is formalized in [607, 608].
CHAPTER 7. N-WISE DECENTRALIZED AUTHENTICATION 197
Remark: revealing the server handshake key is safe. In the key exchange protocol described in
Section 7.3.2, the protocol reveals the server handshake key and IV to all the N-for-1-Auth servers
after they have received and acknowledged the handshake messages. This has benefits for both
simplicity and efficiency as TLS-in-SMPC does not need to validate a certificate inside SMPC,
which would be expensive.
Informally, revealing the server handshake key is secure because these keys are designed only
to hide the server’s identity [562], which is a new property of TLS 1.3 that does not exist in TLS
1.2. This property is unnecessary in our setting in which the identity of the unmodified TLS server
is known.
Several works have formally studied this problem and show that revealing the keys does not
affect other guarantees of TLS [565–568]. Interested readers can refer to these works for more
information.
1. To start, all the N servers must first provide their parts of the TLS client input ~x to FTLS .
2. For each session id sid, FTLS launches the TLS client with input ~x and establishes the connec-
tion between the TLS client and the TLS server.
3. The adversary can ask FTLS to proceed to the next TLS message by sending a (Proceed, sid)
message. Then, FTLS generates the next message by continuing the TLS protocol and sends this
message to the adversary for examination. The message is in the format of a backdoor message
(Sent, sid, S, R, m) where S and R denote the sender and receiver. When the adversary replies
with (ok, sid, m0 , R0 ), FTLS sends out this message m0 to the receiver R0 .
4. The adversary can send (GetHandshakeKeys, sid) to FTLS for the server handshake key and
IV after the server’s handshake response has been delivered. This is secure as discussed in
Section 7.9.4. FTLS responds with (reveal, sid, skey, siv, ckey, civ) where skey and siv are
the server handshake key and IV, and ckey and civ are the client handshake key and IV.
5. If any one of the TLS client and server exits, either because there is an error due to invalid
messages or because the TLS session ends normally, FTLS considers the session with session
ID sid ended and no longer handles requests for this sid.
Multiparty computation functionality. In the hybrid model, we abstract SPDZ and AG-MPC
as an ideal functionality FSMPC , which provides the functionality of multiparty computation with
abort. We require FSMPC to be reactive, meaning that it can take some input and reveal some output
midway through execution, as specified in the function f being computed. A reactive SMPC can
be constructed from a non-reactive SMPC scheme by secret-sharing the internal state among the
N parties in a non-malleable manner, as discussed in [609]. FSMPC works as follows:
1. For each session sid, FSMPC waits for party Pi to send (input, sid, i, xi , f ), in which sid is the
session ID, i is the party ID, xi is the party’s input, and f is the function to be executed.
2. Once FSMPC receives all the N inputs, it checks if all parties agree on the same f , if so, it com-
putes the function f (x1 , x2 , ..., xN ) → (y1 , y2 , ..., yN ) and sends (output, sid, i, yi ) to party Pi .
Otherwise, it terminates this session and sends (abort, sid) to all the N parties.
3. If FSMPC receives (Abort, sid) from any of the N parties, it sends (abort, sid) to all the N
parties.
4. FSMPC ignores other inputs and messages.
Restricted programmable random oracle. We use commitments in Section 7.3.2 to ensure that
in Diffie-Hellman key exchange, the challenge α · G is a random element. This is difficult to do
without commitments Pbecause the adversary can control up to N − 1 parties to intentionally affect
the result of α · G = N i=1 αi · G. In our security proof, we leverage a restricted programmable
random oracle [607, 608], which is described as follows:
1. FrpRO maintains an initially empty list of (m, h) for each session, identified by session ID sid,
where m is the message, and h is the digest.
2. Any party can send a query message (Query, sid, m) to FrpRO to ask for the digest of mes-
sage m. If there exists h such that (m, h) is already in the list for session sid, FrpRO returns
(result, sid, m, h) to this party. Otherwise, it samples h from random, stores (m, h) in the list
for sid, and returns (result, sid, m, h).
3. Both the simulator S and the real-world adversary A can send a message (Program, m, h) to
FrpRO to program the random oracle at an unspecified point h, meaning that there does not exist
m such that (m, h) is on the list.
4. In the real world, all the parties can check if a hash is programmed, which means that if A
programs a point, other parties would discover. However, in the ideal world, only S can perform
such a check, and thus S can forge the adversary’s state as if no point had been programmed.
7.9.3 Simulator
We now describe the simulator S. Without loss of generality, we assume the attacker com-
promises exactly N − 1 servers and does not abort the protocol, and we also assume that A does
CHAPTER 7. N-WISE DECENTRALIZED AUTHENTICATION 199
not program the random oracle, since in the real world, any parties can detect that and can then
abort. We now follow the TLS workflow to do simulation. As follows, we use I to denote the set
of identifiers of the compromised servers.
1. Simulator S provides the inputs of the compromised servers to FTLS , which would start the TLS
protocol.
2. S lets FTLS proceed in the TLS protocol and obtains the ClientHello message, which contains
a random α · G. Now, S simulates the distributed generation of α · G as follows:
a) S samples a random h in the digest domain, pretends that it is the honest party’s commit-
ment, and generates the commitments of αi · G for i ∈ I.
b) S sends (Program, r||(α · G − i∈I αi · G), h) to FrpRO , where r is the randomness used
P
for making a commitment, and || is concatenation. As a result, S can open the commitment
h to be α · G − i∈I αi · G.
P
c) S continues with the TLS-in-SMPC protocol, in which the N parties open the commitments
and construct α · G as the client challenge.
3. S lets FTLS proceed in the TLS protocol and obtains the messages from ServerHello to
ClientFinished, which contain β · G and ciphertexts of the server’s certificate, the server’s
signature of β · G, and the server verification data. Now S needs to simulate the rest of the key
exchange.
a) S sends (GetHandshakeKeys, sid) to FTLS to obtain the server/client handshake key and
IV.
b) S simulates the computation of the handshake keys in SMPC by pretending that the SMPC
output is the handshake keys. Note: we already assume that without loss of generality, the
compromised servers provide the correct αβ · G. If they provide incorrect values, S would
have detected this and can replace the output with an incorrect key.
c) S then simulates the remaining operations of key exchange in SMPC, which checks the
server verification data and produces the client verification data.
4. S simulates the message encryption and decryption of the application messages by simply pre-
tending the SMPC output is exactly the ciphertexts taken from actual TLS messages, also pro-
vided by FTLS .
5. In the end, S outputs whatever the adversary A would output in the real world.
2. For the remaining operations, the main difference is that the SMPC is simulated without the
honest party’s secret (in the real-world protocol Π, such secret is a share of the internal SMPC
state that contains the TLS session keys). The properties of SMPC show that such simulation is
computationally indistinguishable.
Theorem 37. Assuming secure multiparty computation, random oracle, and other standard cryp-
tographic assumptions, the TLS-in-SMPC protocol Π with N parties securely realizes the TLS
client ideal functionality FTLS in the presence of a malicious attacker that statically compromises
up to N − 1 out of the N parties.
201
Bibliography
[1] CVS health faces data breach, 1b search records exposed, https://healthitsecurity.
com / news / cvs - health - faces - data - breach1b - search - records -
exposed.
[2] Phish leads to breach at Calif. State Controller, https://krebsonsecurity.com/
2021/03/phish-leads-to-breach-at-calif-state-controller/.
[3] Enterprise software developer exposed 82 million logging records, among them Amazon-
owned company, https://cooltechzone.com/leaks/enterprise-software-
developer - exposed - millions - of - logging - records - of - amazon -
owned-company.
[4] Geico admits fraudsters stole customers’ driver’s license numbers for months, https:
//techcrunch.com/2021/04/19/geico- driver- license- numbers-
scraped/.
[5] Data breach warning after California DMV contractor hit by file-stealing ransomware,
https://techcrunch.com/2021/02/18/california-motor-vehicles-
afts-ransomware/.
[6] Another data leak for Experian; credit scores of americans were available to anyone due
to api security issue, https : / / www . cpomagazine . com / cyber - security /
another-data-leak-for-experian-credit-scores-of-americans-
were-available-to-anyone-due-to-api-security-issue/.
[7] Facebook data on 533 million users posted online, https : / / www . zdnet . com /
article/facebook-data-on-533-million-users-posted-online/.
[8] Microsoft: These Exchange Server zero-day flaws are being used by hackers, so update
now, https://www.zdnet.com/article/update-immediately-microsoft-
rushes-out-patches-for-exchange-server-zero-day-attacks/.
[9] Another 500 million accounts have leaked online, and LinkedIn’s in the hot seat, https:
/ / www . theverge . com / 2021 / 4 / 8 / 22374464 / linkedin - data - leak -
500-million-accounts-scraped-microsoft.
[10] Hackers breach U.S. cellular customer database after scamming employees, https://
www.forbes.com/sites/leemathews/2021/01/30/hackers- breach-
us-cellular-customer-database-after-scamming-employees/.
BIBLIOGRAPHY 202
[11] Clubhouse data leak: 1.3 million scraped user records leaked online for free, https :
//cybernews.com/security/clubhouse- data- leak- 1- 3- million-
user-records-leaked-for-free-online/.
[12] Volkswagen, Audi notify 3.3 million of data breach, https://www.bankinfosecurity.
com/volkswagen-audi-notify-33-million-people-data-breach-a-
16875.
[13] Check your permissions: Default settings in Microsoft tool exposes 38 million user records
online, https://www.theverge.com/2021/8/24/22639106/microsoft-
power-apps-default-permissions-settings-user-records-exposed-
38-million-upgard.
[14] Annual number of data breaches and exposed records in the United States from 2005 to
2020, https://www.statista.com/statistics/273550/data-breaches-
recorded - in - the - united - states - by - number - of - breaches - and -
records-exposed/.
[15] 6 times when hackers forced companies to go bankrupt and shut down, https : / /
privacysavvy.com/security/business/6- times- hackers- forced-
companies-to-go-bankrupt-shut-down/.
[16] Cimcor: 60 percent of small companies close within 6 months of being hacked: Small
to mid-sized companies should be monitoring networks for suspicious activity, https:
//cybersecurityventures.com/60- percent- of- small- companies-
close-within-6-months-of-being-hacked/.
[17] 2021 cyber security statistics: The ultimate list of stats, data & trends, https : / /
purplesec.us/resources/cyber-security-statistics/.
[18] Survey: Phishing & ransomware attacks are top concerns, https://www.trendmicro.
com/en_us/research/21/g/survey-phishing-ransomware-attacks-
are-top-concerns.html.
[19] The rise of ransomware during COVID-19, https://home.kpmg/xx/en/home/
insights/2020/05/rise-of-ransomware-during-covid-19.html.
[20] Why ransomware attacks are on the rise–and what can be done to stop them, https :
//www.pbs.org/newshour/nation/why- ransomware- attacks- are-
on-the-rise-and-what-can-be-done-to-stop-them.
[21] DHS, FBI say Russian hackers targeting US state and local systems, https://thehill.
com/policy/cybersecurity/522368-dhs-fbi-say-russian-hackers-
targeting-us-state-and-local-systems.
[22] The U.S. government spent billions on a system for detecting hacks: The Russians out-
smarted it, https : / / www . washingtonpost . com / national - security /
ruusian-hackers-outsmarted-us-defenses/2020/12/15/3deed840-
3f11-11eb-9453-fc36ba051781_story.html.
BIBLIOGRAPHY 203
[23] The state of consumer data privacy laws in the US (and why it matters), https://www.
nytimes.com/wirecutter/blog/state-of-privacy-laws-in-us/.
[24] Securing the defense industrial base: CMMC 2.0, https://www.acq.osd.mil/
cmmc/.
[25] Sp 800-171 rev. 2: Protecting controlled unclassified information in nonfederal systems and
organizations, https://csrc.nist.gov/publications/detail/sp/800-
171/rev-2/final.
[26] Federal information security modernization act, https://www.cisa.gov/federal-
information-security-modernization-act.
[27] The federal risk and authorization management program (FedRAMP), https://www.
fedramp.gov/.
[28] Post-quantum cryptography, https : / / csrc . nist . gov / projects / post -
quantum-cryptography.
[29] ZKProof standards, https://zkproof.org/.
[30] 18 new cybersecurity bills introduced as us congressional interest heats up, https :
//www.csoonline.com/article/3626908/18- new- cybersecurity-
bills-introduced-as-us-congressional-interest-heats-up.html.
[31] Infrastructure bill includes $1.9 billion for cybersecurity, https://www.csoonline.
com/article/3639019/whats-next-in-congress-for-cybersecurity-
after-enactment-of-the-infrastructure-bill.html.
[32] W. Zheng, R. Deng, W. Chen, R. A. Popa, A. Panda, and I. Stoica, “Cerebro: A platform
for multi-party cryptographic collaborative learning,” in SEC ’21.
[33] W. Chen, K. Sotiraki, I. Chang, M. Kantarcioglu, and R. A. Popa, “HOLMES: A plat-
form for detecting malicious inputs in secure collaborative computation,” in IACR ePrint
2021/1517.
[34] W. Chen, A. Chiesa, E. Dauterman, and N. P. Ward, “Reducing participation costs via
incremental verification for ledger systems,” in IACR ePrint 2020/1522.
[35] Aleo: Where applications become private, https://aleo.org/.
[36] W. Chen and R. A. Popa, “Metal: A metadata-hiding file-sharing system,” in NDSS ’20.
[37] W. Chen, R. Deng, and R. A. Popa, “N-for-1 auth: N-wise decentralized authentication via
one authentication,” in IACR ePrint 2021/342.
[38] W. Chen, T. Hoang, J. Guajardo, and A. A. Yavuz, “Titanium: A metadata-hiding file-
sharing system with malicious security,” in NDSS ’22.
[39] E.-J. Goh, H. Shacham, N. Modadugu, and D. Boneh, “SiRiUS: Securing remote untrusted
storage,” in NDSS’03.
[40] M. Kallahalla, E. Riedel, R. Swaminathan, Q. Wang, and K. Fu, “Plutus: Scalable secure
file sharing on untrusted storage,” in FAST ’03.
BIBLIOGRAPHY 204
[41] A. Bessani, M. Correia, B. Quaresma, F. André, and P. Sousa, “DepSky: Dependable and
secure storage in a cloud-of-clouds,” in EuroSys ’11.
[42] R. A. Popa, E. Stark, S. Valdez, J. Helfer, N. Zeldovich, and H. Balakrishnan, “Building
web applications on top of encrypted data using Mylar,” in NSDI ’14.
[43] W. He, D. Akhawe, S. Jain, E. Shi, and D. Song, “ShadowCrypt: Encrypted web applica-
tions for everyone,” in CCS ’14.
[44] B. Lau, S. Chung, C. Song, Y. Jang, W. Lee, and A. Boldyreva, “Mimesis Aegis: A mimicry
privacy shield–a system’s approach to data privacy on public cloud,” in SEC ’14, 2014.
[45] F. Wang, J. Mickens, N. Zeldovich, and V. Vaikuntanathan, “Sieve: Cryptographically en-
forced access control for user data in untrusted clouds,” in NSDI ’16.
[46] A. Rusbridger, “The Snowden leaks and the public,” in The New York Review of Books—
NYR Daily November 21, 2013.
[47] D. Cole, “We kill people based on metadata,” in The New York Review of Books—NYR
Daily May 10, 2014.
[48] World health organization (WHO): Health statistics and information systems, https :
//www.who.int/healthinfo/en/.
[49] C. C. Aggarwal, “On k-anonymity and the curse of dimensionality,” in VLDB ’05.
[50] L. Backstrom and J. Dwork Cynthia and Kleinberg, “Wherefore art thou r3579x?: Anonymized
social networks, hidden patterns, and structural steganography,” in WWW ’07.
[51] A. Narayanan and V. Shmatikov, “Robust de-anonymization of large sparse datasets,” in
S&P ’08.
[52] G. Wondracek, T. Holz, E. Kirda, and C. Kruegel, “A practical attack to de-anonymize
social network users,” in S&P ’10.
[53] S. Nilizadeh, A. Kapadia, and Y.-Y. Ahn, “Community-enhanced de-anonymization of on-
line social networks,” in CCS ’14.
[54] S. Ji, W. Li, P. Mittal, X. Hu, and R. Beyah, “SecGraph: A uniform and open-source eval-
uation system for graph data anonymization and de-anonymization,” in SEC ’15.
[55] S. Ji, W. Li, N. Z. Gong, P. Mittal, and R. Beyah, “On your social network de-anonymizablity:
Quantification and large scale evaluation with seed knowledge,” in NDSS’15.
[56] P. Grubbs, R. McPherson, M. Naveed, T. Ristenpart, and V. Shmatikov, “Breaking web
applications built on top of encrypted data,” in CCS ’16.
[57] M. Islam, M. Kuzu, and M. Kantarcioglu, “Access pattern disclosure on searchable encryp-
tion: Ramification, attack and mitigation,” in NDSS ’12.
[58] D. Cash, P. Grubbs, J. Perry, and T. Ristenpart, “Leakage-abuse attacks against searchable
encryption,” in CCS ’15.
BIBLIOGRAPHY 205
[59] Y. Zhang, J. Katz, and C. Papamanthou, “All your queries are [sic] belong to us: The power
of file-injection attacks on searchable encryption,” in SEC ’16.
[60] L. Wang, P. Grubbs, J. Lu, V. Bindschaedler, D. Cash, and T. Ristenpart, “Side-channel
attacks on shared search indexes,” in S&P ’17.
[61] M.-S. Lacharité, B. Minaud, and K. G. Paterson, “Improved reconstruction attacks on en-
crypted data using range query leakage,” in S&P ’18.
[62] P. Grubbs, M.-S. Lacharité, B. Minaud, and K. G. Paterson, “Pump up the volume: Practical
database reconstruction from volume leakage on range queries,” in CCS ’18.
[63] P. Grubbs, M.-S. Lacharité, B. Minaud, and K. G. Paterson, “Learning to reconstruct: Sta-
tistical learning theory and encrypted database attacks,” in S&P ’19.
[64] A. Hamlin, R. Ostrovsky, M. Weiss, and D. Wichs, “Private anonymous data access,” in
EUROCRYPT ’19.
[65] M. Backes, A. Herzberg, A. Kate, and I. Pryvalov, “Anonymous RAM,” in ESORICS ’16.
[66] M. Maffei, G. Malavolta, M. Reinert, and D. Schröder, “Privacy and access control for
outsourced personal records,” in S&P ’15.
[67] M. Maffei, G. Malavolta, M. Reinert, and D. Schröder, “Maliciously secure multi-client
ORAM,” in ACNS ’17.
[68] O. Goldreich, “Towards a theory of software protection and simulation by oblivious RAMs,”
in STOC ’87.
[69] R. Ostrovsky, “Efficient computation on oblivious RAMs,” in STOC ’90.
[70] E. Stefanov, M. van Dijk, E. Shi, C. Fletcher, L. Ren, X. Yu, and S. Devadas, “Path ORAM:
An extremely simple oblivious RAM protocol,” in CCS ’13.
[71] P. Mohassel and Y. Zhang, “SecureML: A system for scalable privacy-preserving machine
learning,” in S&P ’17.
[72] F. Wang, C. Yun, S. Goldwasser, V. Vaikuntanathan, and M. Zaharia, “Splinter: Practical
private queries on public data,” in NSDI’17, 2017.
[73] H. Corrigan-Gibbs and D. Boneh, “Prio: Private, robust, and scalable computation of ag-
gregate statistics,” in NSDI ’17.
[74] N. Kilbertus, A. Gascón, M. Kusner, M. Veale, K. Gummadi, and A. Weller, “Blind Justice:
Fairness with encrypted sensitive attributes,” in ICML ’18.
[75] E. Shi, T. H. H. Chan, E. Stefanov, and M. Li, “Oblivious RAM with O((logN )3 ) worst-
case cost,” in ASIACRYPT ’11.
[76] P. Williams, R. Sion, and A. Tomescu, “PrivateFS: A parallel oblivious file system,” in
CCS ’12.
[77] E. Stefanov and E. Shi, “ObliviStore: High performance oblivious cloud storage,” in S&P ’13.
BIBLIOGRAPHY 206
[78] V. Bindschaedler, M. Naveed, X. Pan, X. Wang, and Y. Huang, “Practicing oblivious access
on cloud storage: The gap, the fallacy, and the new way forward,” in CCS ’15.
[79] C. Sahin, V. Zakhary, A. El Abbadi, H. Lin, and S. Tessaro, “TaoStore: Overcoming asyn-
chronicity in oblivious data storage,” in S&P ’16.
[80] A. Chakraborti and R. Sion, “ConcurORAM: High-throughput stateless parallel multi-
client ORAM,” in NDSS ’19.
[81] A. C.-C. Yao, “How to generate and exchange secrets,” in FOCS’86.
[82] O. Goldreich, S. Micali, and A. Wigderson, “How to play any mental game: A complete-
ness theorem for protocols with honest majority,” in STOC ’87.
[83] D. Beaver, S. Micali, and P. Rogaway, “The round complexity of secure protocols,” in
STOC’90.
[84] S. D. Gordon, J. Katz, V. Kolesnikov, F. Krell, T. Malkin, M. Raykova, and Y. Vahlis,
“Secure two-party computation in sublinear (amortized) time,” in CCS ’12.
[85] S. Lu and R. Ostrovsky, “Distributed oblivious RAM for secure two-party computation,”
in TCC ’13.
[86] J. B. Nielsen and S. Ranellucci, “Reactive garbling: Foundation, instantiation, application,”
in ASIACRYPT ’16.
[87] J. B. Dennis and E. C. Van Horn, “Programming semantics for multiprogrammed compu-
tations,” in CACM ’66.
[88] R. Dingledine, N. Mathewson, and P. Syverson, “Tor: The second-generation onion router,”
in SEC ’04.
[89] H. Corrigan-Gibbs, D. Boneh, and D. Mazières, “Riposte: An anonymous messaging sys-
tem handling millions of users,” in S&P ’15.
[90] J. van den Hooff, D. Lazar, M. Zaharia, and N. Zeldovich, “Vuvuzela: Scalable private
messaging resistant to traffic analysis,” in SOSP ’15.
[91] S. Angel and S. Setty, “Unobservable communication over fully untrusted infrastructure,”
in OSDI’16.
[92] N. Tyagi, Y. Gilad, D. Leung, M. Zaharia, and N. Zeldovich, “Stadium: A distributed
metadata-private messaging system,” in SOSP ’17.
[93] A. Kwon, H. Corrigan-Gibbs, S. Devadas, and B. Ford, “Atom: Horizontally scaling strong
anonymity,” in SOSP ’17.
[94] A. M. Piotrowska, J. Hayes, T. Elahi, S. Meiser, and G. Danezis, “The Loopix anonymity
system,” in SEC ’17.
[95] S. Angel, H. Chen, K. Laine, and S. Setty, “PIR with compressed queries and amortized
query processing,” in S&P ’18.
BIBLIOGRAPHY 207
[96] A. Kwon, D. Lu, and S. Devadas, “XRD: Scalable messaging system with cryptographic
privacy,” in NSDI ’20.
[97] V. Kolesnikov and T. Schneider, “Improved garbled circuit: Free XOR gates and applica-
tions,” in ICALP ’08.
[98] M. Bellare, V. T. Hoang, S. Keelveedhi, and P. Rogaway, “Efficient garbling from a fixed-
key blockcipher,” in S&P ’13.
[99] S. Zahur, M. Rosulek, and D. Evans, “Two halves make a whole: Reducing data transfer
in garbled circuits using half gates,” in EUROCRYPT ’15.
[100] X. Wang, H. Chan, and E. Shi, “Circuit ORAM: On tightness of the Goldreich-Ostrovsky
lower bound,” in CCS ’15.
[101] S. Zahur, X. Wang, M. Raykova, A. Gascón, J. Doerner, D. Evans, and J. Katz, “Revisiting
square-root ORAM: Efficient random access in multi-party computation,” in S&P ’16.
[102] J. Doerner and A. Shelat, “Scaling ORAM for secure computation,” in CCS ’17.
[103] E. Stefanov, E. Shi, and D. Song, “Towards practical oblivious RAM,” in NDSS ’12.
[104] C. Gentry, K. A. Goldman, S. Halevi, C. Julta, M. Raykova, and D. Wichs, “Optimizing
ORAM and using it efficiently for secure computation,” in PETS ’13.
[105] T. ElGamal, “A public key cryptosystem and a signature scheme based on discrete loga-
rithms,” in CRYPTO ’84.
[106] D. J. Bernstein, “Curve25519: New Diffie-Hellman speed records,” in PKC ’06.
[107] M. Hamburg, “Decaf: Eliminating cofactors through point compression,” in CRYPTO ’15.
[108] The Ristretto group, https://ristretto.group/ristretto.html.
[109] D. S. Roche, A. Aviv, and S. G. Choi, “A practical oblivious map data structure with secure
deletion and history independence,” in S&P ’16.
[110] M. O. Rabin, “How to exchange secrets with oblivious transfer,” in Technical Report TR-
81, Aiken Computation Lab, Harvard University ’81.
[111] S. Even, O. Goldreich, and A. Lempel, “A randomized protocol for signing contracts,” in
CACM ’85.
[112] E. V. Mangipudi, K. Rao, J. Clark, and A. Kate, “Towards automatically penalizing multi-
media breaches,” in EuroS&PW ’19.
[113] S. Devadas, M. van Dijk, C. W. Fletcher, L. Ren, E. Shi, and D. Wichs, “Onion ORAM: A
constant bandwidth blowup oblivious RAM,” in TCC ’16.
[114] P. Paillier, “Public-key cryptosystems based on composite degree residuosity classes,” in
EUROCRYPT ’99.
[115] S. Goldwasser and S. Micali, “Probabilistic encryption & how to play mental poker keeping
secret all partial information,” in STOC’82.
BIBLIOGRAPHY 208
[136] Preveil: Encrypted email and file sharing for the enterprise, https://www.preveil.
com/.
[137] Tresorit: Secure file sharing & content collaboration with encryption, https://tresorit.
com/secure-file-sharing.
[138] R. Anderson, “The Eternity service,” in PRAGOCRYPT ’96.
[139] M. Waldman, A. D. Rubin, and L. F. Cranor, “Publius: A robust, tamper-evident, censorship-
resistant web publishing system,” in SEC ’00.
[140] I. Clarke, O. Sandberg, B. Wiley, and T. W. Hong, “Freenet: A distributed anonymous
information storage and retrieval system,” in International Workshop on Designing Privacy
Enhancing Technologies ’01.
[141] R. Dingledine, M. J. Freedman, and D. Molnar, “The Free Haven Project: Distributed
anonymous storage service,” in PET ’01.
[142] Mojo Nation, https://sourceforge.net/projects/mojonation/.
[143] B. Pinkas and T. Reinman, “Oblivious RAM revisited,” in CRYPTO ’10.
[144] M. T. Goodrich and M. Mitzenmacher, “Privacy-preserving access of outsourced data via
oblivious RAM simulation,” in ICALP ’11.
[145] M. Maas, E. Love, E. Stefanov, M. Tiwari, E. Shi, K. Asanovic, J. Kubiatowicz, and D.
Song, “PHANTOM: Practical oblivious computation in a secure processor,” in CCS ’13.
[146] J. Dautrich, E. Stefanov, and E. Shi, “Burst ORAM: Minimizing ORAM response times
for bursty access patterns,” in SEC ’14.
[147] L. Ren, C. Fletcher, A. Kwon, E. Stefanov, E. Shi, M. van Dijk, and S. Devadas, “Constants
count: Practical improvements to oblivious RAM,” in SEC ’15.
[148] E.-O. Blass, T. Mayberry, and G. Noubir, “Multi-client oblivious RAM secure against
malicious servers,” in ACNS ’17.
[149] E. Stefanov and E. Shi, “Multi-cloud oblivious storage,” in CCS ’13.
[150] J. Zhang, W. Zhang, and D. Qiao, “MU-ORAM: Dealing with stealthy privacy attacks in
multi-user data outsourcing services,” in IACR ePrint 2016/073.
[151] N. P. Karvelas, A. Peter, and S. Katzenbeisser, “Using oblivious RAM in genomic studies,”
in Data Privacy Management, Cryptocurrencies and Blockchain Technology ’17.
[152] O. Goldreich and R. Ostrovsky, “Software protection and simulation on oblivious RAMs,”
in JACM ’96.
[153] Dropbox, https://www.dropbox.com/.
[154] X. Wang, Y. Huang, T.-H. H. Chan, A. shelat, and E. Shi, “SCORAM: Oblivious RAM for
secure computation,” in CCS ’14.
[155] P. Mishra, R. Poddar, J. Chen, A. Chiesa, and R. A. Popa, “Oblix: An efficient oblivious
search index,” in S&P ’18.
BIBLIOGRAPHY 210
[156] A. Ahmad, K. Kim, M. I. Sarfaraz, and B. Lee, “OBLIVIATE: A data oblivious file system
for Intel SGX,” in NDSS’18.
[157] S. Sasy, S. Gorbunov, and C. W. Fletcher, “ZeroTrace: Oblivious memory primitives from
Intel SGX,” in NDSS ’18.
[158] Boxcryptor: No. 1 cloud encryption made in Germany, https://www.boxcryptor.
com/en/.
[159] Icedrive: Secure encrypted cloud storage, https://icedrive.net/encrypted-
cloud-storage.
[160] Mega: Secure cloud storage and communication, https://mega.io/.
[161] pCloud encryption: Best secure encrypted cloud storage, https : / / www . pcloud .
com/encrypted-cloud-storage.html.
[162] Sync: Secure cloud storage, privacy guaranteed, https://www.sync.com/.
[163] B. Auxier, L. Rainie, M. Anderson, A. Perrin, M. Kumar, and E. Turner, Americans and
privacy: Concerned, confused and feeling lack of control over their personal information,
Pew Research Center (2019).
[164] R. Brandom, G. Blackmon, and W. Joel, Ten years of breaches in one image: Nearly 8 bil-
lion usernames have leaked since june 2011, Available at https://www.theverge.
com/22518557/data-breach-infographic-leaked-passwords-have-
i-been-pwned.
[165] J. Mayer, P. Mutchler, and J. C. Mitchell, “Evaluating the privacy properties of telephone
metadata,” in PNAS ’16.
[166] A. Narayanan and V. Shmatikov, “Robust de-anonymization of large sparse datasets,” in
S&P ’08.
[167] G. G. Gulyás, B. Simon, and S. Imre, “An efficient and robust social network de-anonymization
attack,” in WPES ’16.
[168] J. Feng, M. Zhang, H. Wang, Z. Yang, C. Zhang, Y. Li, and D. Jin, “DPLink: User identity
linkage via deep neural network from heterogeneous mobility data,” in WWW ’19.
[169] M. S. Islam, M. Kuzu, and M. Kantarcioglu, “Access pattern disclosure on searchable
encryption: Ramification, attack and mitigation,” in NDSS ’12.
[170] M. S. Islam, M. Kuzu, and M. Kantarcioglu, “Inference attack against encrypted range
queries on outsourced databases,” in CODASPY ’14.
[171] D. Cash, P. Grubbs, J. Perry, and T. Ristenpart, “Leakage-abuse attacks against searchable
encryption,” in CCS ’15.
[172] G. Kellaris, G. Kollios, K. Nissim, and A. O’neill, “Generic attacks on secure outsourced
databases,” in CCS ’16.
[173] C. V. Rompay, R. Molva, and M. Önen, “A leakage-abuse attack against multi-user search-
able encryption,” in PETS ’17.
BIBLIOGRAPHY 211
[174] L. Blackstone, S. Kamara, and T. Moataz, “Revisiting leakage abuse attacks,” in NDSS ’20.
[175] X. Zhuang, T. Zhang, and S. Pande, “HIDE: An infrastructure for efficiently protecting
information leakage on the address bus,” in ACM SIGOPS Operating Systems Review ’04.
[176] T. M. John, S. K. Haider, H. Omar, and M. Van Dijk, “Connecting the dots: Privacy leakage
via write-access patterns to the main memory,” in IEEE TDSC ’17.
[177] S. S. Chow, K. Fech, R. W. Lai, and G. Malavolta, “Multi-client oblivious RAM with
poly-logarithmic communication,” in ASIACRYPT ’20.
[178] D. Mazières and D. Shasha, “Building secure file systems out of Byzantine storage,” in
PODC ’02.
[179] J. Li, M. Krohn, D. Mazières, and D. Shasha, “Secure untrusted data repository (SUNDR),”
in OSDI ’04.
[180] A. J. Feldman, W. P. Zeller, M. J. Freedman, and E. W. Felten, “SPORC: Group collabo-
ration using untrusted cloud resources,” in OSDI ’10.
[181] N. Karapanos, A. Filios, R. A. Popa, and S. Capkun, “Verena: End-to-end integrity protec-
tion for web applications,” in S&P ’16.
[182] A. Tomescu and S. Devadas, “Catena: Efficient non-equivocation via Bitcoin,” in S&P ’17.
[183] Y. Hu, S. Kumar, and R. A. Popa, “Ghostor: Toward a secure data-sharing system from
decentralized trust,” in NSDI ’20.
[184] F. Chen, T. Luo, and X. Zhang, “CAFTL: A content-aware flash translation layer enhancing
the lifespan of flash memory based solid state drives,” in FAST ’11.
[185] C. Li, P. Shilane, F. Douglis, H. Shim, S. Smaldone, and G. Wallace, “Nitro: A capacity-
optimized SSD cache for primary storage,” in ATC ’14.
[186] O. Goldreich, “Towards a theory of software protection,” in CRYPTO ’86.
[187] E. Stefanov, M. Van Dijk, E. Shi, C. Fletcher, L. Ren, X. Yu, and S. Devadas, “Path ORAM:
An extremely simple oblivious RAM protocol,” in CCS ’13.
[188] I. Damgård, M. Keller, E. Larraia, V. Pastro, P. Scholl, and N. P. Smart, “Practical covertly
secure MPC for dishonest majority – or: Breaking the SPDZ limits,” in ESORICS ’13.
[189] D. Boneh, E. Boyle, H. Corrigan-Gibbs, N. Gilboa, and Y. Ishai, “Zero-knowledge proofs
on secret-shared data via fully linear PCPs,” in CRYPTO ’19.
[190] S. Addanki, K. Garbe, E. Jaffe, R. Ostrovsky, and A. Polychroniadou, “Prio+: Privacy
preserving aggregate statistics via Boolean shares,” in IACR ePrint 2021/576.
[191] J. T. Schwartz, “Fast probabilistic algorithms for verification of polynomial identities,” in
JACM ’80.
[192] R. Zippel, “Probabilistic algorithms for sparse polynomials,” in EUROSAM ’79.
[193] R. A. Demillo and R. J. Lipton, “A probabilistic remark on algebraic program testing,” in
Information Processing Letters ’78.
BIBLIOGRAPHY 212
[194] E. Boyle, N. Gilboa, and Y. Ishai, “Function secret sharing: Improvements and extensions,”
in CCS ’16.
[195] J. Kilian, “Founding cryptography on oblivious transfer,” in STOC ’88.
[196] M. Naor and B. Pinkas, “Oblivious transfer with adaptive queries,” in CRYPTO ’99.
[197] C. Dwork, M. Naor, O. Reingold, and L. Stockmeyer, “Magic functions,” in FOCS ’99.
[198] J. Camenisch, G. Neven, and A. Shelat, “Simulatable adaptive oblivious transfer,” in EU-
ROCRYPT ’07.
[199] Y. Lindell and B. Pinkas, “Secure two-party computation via cut-and-choose oblivious
transfer,” in TCC ’11.
[200] Y. Lindel, “How to simulate it: A tutorial on the simulation proof technique,” in Tutorials
on the Foundations of Cryptography: Dedicated to Oded Goldreich. 2017.
[201] T. Hoang, J. Guajardo, and A. A. Yavuz, “MACAO: A maliciously-secure and client-
efficient active ORAM framework,” in NDSS ’20.
[202] T. Hoang, M. O. Ozmen, Y. Jang, and A. A. Yavuz, “Hardware-supported ORAM in effect:
Practical oblivious search and update on very large dataset,” in PETS ’19.
[203] T. Hoang, R. Behnia, Y. Jang, and A. A. Yavuz, “MOSE: Practical multi-user oblivious
storage via secure enclaves,” in CODASPY ’20.
[204] E. Boyle, K.-M. Chung, and R. Pass, “Oblivious parallel RAM and applications,” in TCC ’16-
A.
[205] B. Chen, H. Lin, and S. Tessaro, “Oblivious parallel RAM: Improved efficiency and generic
constructions,” in TCC ’16-A.
[206] I. Damgård, V. Pastro, N. Smart, and S. Zakarias, “Multiparty computation from somewhat
homomorphic encryption,” in CRYPTO ’12.
[207] M. Ben-Or, S. Goldwasser, and A. Wigderson, “Completeness theorems for non-cryptographic
fault-tolerant distributed computation,” in STOC ’88.
[208] D. Chaum, C. Crépeau, and I. Damgård, “Multiparty unconditionally secure protocols,” in
STOC ’88.
[209] D. Beaver, S. Micali, and P. Rogaway, “The round complexity of secure protocols,” in
STOC ’90.
[210] C. Liu, X. Wang, K. Nayak, Y. Huang, and E. Shi, “ObliVM: A programming framework
for secure computation,” in S&P ’15.
[211] ObliVMGC: The garbled circuit backend for the ObliVM framework, https://github.
com/oblivm/ObliVMGC.
[212] FlexSC: A flexible efficient secure computation backend, https : / / github . com /
wangxiao1254/FlexSC.
[213] ORAM library for Obliv-C, https://github.com/samee/sqrtOram.
BIBLIOGRAPHY 213
[233] T.-H. H. Chan, K.-M. Chung, and E. Shi, “On the depth of oblivious parallel RAM,” in
ASIACRYPT ’17.
[234] J. R. Lorch, B. Parno, J. Mickens, M. Raykova, and J. Schiffman, “Shroud: Ensuring private
access to large-scale data in the data center,” in FAST ’13.
[235] S. Eskandarian and M. Zaharia, “ObliDB: Oblivious query processing for secure databases,”
in VLDB ’19.
[236] A. Ahmad, K. Kim, M. I. Sarfaraz, and B. Lee, “Obliviate: A data oblivious filesystem for
Intel SGX,” in NDSS ’18.
[237] C. Bao and A. Srivastava, “Exploring timing side-channel attacks on Path-ORAMs,” in
HOST ’17.
[238] C. W. Fletcher, L. Ren, X. Yu, M. Van Dijk, O. Khan, and S. Devadas, “Suppressing the
oblivious RAM timing channel while making information leakage and program efficiency
trade-offs,” in HPCA ’14.
[239] D. Lazar and N. Zeldovich, “Alpenhorn: Bootstrapping secure communication without
leaking metadata,” in OSDI ’16.
[240] D. Chaum, “Blind signatures for untraceable payments,” in CRYPTO ’82.
[241] C. Dwork and M. Naor, “Pricing via processing or combatting junk mail,” in CRYPTO ’92,
1992.
[242] M. Jakobsson and A. Juels, “Proofs of work and bread pudding protocols,” in CMS’99,
1999.
[243] A. Juels and J. Brainard, “Client puzzles: A cryptographic defense against connection de-
pletion attacks,” in NDSS’99, 1999.
[244] TensorFlow, Federated learning, https://www.tensorflow.org/federated/
federated_learning.
[245] S. Bhattacharya, The new dawn of AI: Federated learning, https://towardsdatascience.
com/the-new-dawn-of-ai-federated-learning-8ccd9ed7fc3a, 2019.
[246] A. Halevy, P. Norvig, and F. Pereira, “The unreasonable effectiveness of data,” in IEEE
Intelligent Systems ’09.
[247] GDPR, Official Journal of the European Union ’16.
[248] California Consumer Privacy Act (CCPA) 2018, https://oag.ca.gov/privacy/
ccpa, 2018.
[249] I. Giacomelli, S. Jha, M. Joye, C. D. Page, and K. Yoon, “Privacy-preserving ridge regres-
sion with only linearly-homomorphic encryption,” in ACNS ’18.
[250] W. Zheng, R. A. Popa, J. Gonzalez, and I. Stoica, “Helen: Maliciously secure coopetitive
learning for linear models,” in S&P ’19.
BIBLIOGRAPHY 215
[251] J. Liu, M. Juuti, Y. Lu, and N. Asokan, “Oblivious neural network predictions via Min-
iONN transformations,” in CCS ’17.
[252] C. Juvekar, V. Vaikuntanathan, and A. Chandrakasan, “GAZELLE: A low latency frame-
work for secure neural network inference,” in SEC ’18.
[253] M. S. Riazi, M. Samragh, H. Chen, K. Laine, K. Lauter, and F. Koushanfar, “XONN:
XNOR-based oblivious deep neural network inference,” in SEC ’19.
[254] A. Tueno, F. Kerschbaum, and S. Katzenbeisser, “Private evaluation of decision trees using
sublinear cost,” in PETS ’19.
[255] V. Nikolaenko, U. Weinsberg, S. Ioannidis, M. Joye, D. Boneh, and N. Taft, “Privacy-
preserving ridge regression on hundreds of millions of records,” in S&P ’13.
[256] A. Gascón, P. Schoppmann, B. Balle, M. Raykova, J. Doerner, S. Zahur, and D. Evans,
“Privacy-preserving distributed linear regression on high-dimensional data.,” in PETS ’17.
[257] A. B. Alexandru, K. Gatsis, Y. Shoukry, S. A. Seshia, P. Tabuada, and G. J. Pappas, “Cloud-
based quadratic optimization with partially homomorphic encryption,” in IEEE Transac-
tions on Automatic Control ’20.
[258] X. Wang, S. Ranellucci, and J. Katz, “Global-scale secure multiparty computation,” in
CCS ’17.
[259] Emp-toolkit: Efficient multiparty computation toolkit. https://github.com/emp-
toolkit.
[260] E. M. Songhori, S. U. Hussain, A.-R. Sadeghi, T. Schneider, and F. Koushanfar, “TinyGar-
ble: Highly compressed and scalable sequential garbled circuits,” in S&P ’15.
[261] A. Rastogi, M. A. Hammer, and M. Hicks, “Wysteria: A programming language for generic,
mixed-mode multiparty computations,” in S&P ’14.
[262] N. Chandran, D. Gupta, A. Rastogi, R. Sharma, and S. Tripathi, “EzPC: Programmable, ef-
ficient, and scalable secure two-party computation for machine learning,” in EuroS&P ’19.
[263] N. Büscher, D. Demmler, S. Katzenbeisser, D. Kretzmer, and T. Schneider, “HyCC: Com-
pilation of hybrid protocols for practical secure computation,” in CCS ’18.
[264] Y. Zhang, A. Steele, and M. Blanton, “PICCO: A general-purpose compiler for private
distributed computation,” in CCS ’13.
[265] B. Mood, D. Gupta, H. Carter, K. Butler, and P. Traynor, “Frigate: A validated, extensible,
and efficient compiler and interpreter for secure computation,” in EuroS&P ’16.
[266] M. Franz, A. Holzer, S. Katzenbeisser, C. Schallhart, and H. Veith, “CBMC-GC: An ANSI
C compiler for secure two-party computations,” in CC ’14.
[267] D. Demmler, T. Schneider, and M. Zohner, “ABY: A framework for efficient mixed-
protocol secure two-party computation,” in NDSS ’15.
[268] N. Volgushev, M. Schwarzkopf, B. Getchell, M. Varia, A. Lapets, and A. Bestavros, “Con-
clave: Secure multi-party computation on big data,” in EuroSys ’19.
BIBLIOGRAPHY 216
[269] M. Keller, E. Orsini, and P. Scholl, “MASCOT: Faster malicious arithmetic secure compu-
tation with oblivious transfer,” in CCS ’16.
[270] M. Keller, V. Pastro, and D. Rotaru, “Overdrive: Making SPDZ great again,” in EURO-
CRYPT ’18.
[271] N. Carlini, C. Liu, Ú. Erlingsson, J. Kos, and D. Song, “The secret sharer: Evaluating and
testing unintended memorization in neural networks,” in SEC ’19.
[272] F. Tramèr, F. Zhang, A. Juels, M. K. Reiter, and T. Ristenpart, “Stealing machine learning
models via prediction APIs,” in SEC ’16.
[273] M. Fredrikson, E. Lantz, S. Jha, S. Lin, D. Page, and T. Ristenpart, “Privacy in pharmaco-
genetics: An end-to-end case study of personalized warfarin dosing,” in SEC ’14.
[274] M. Fredrikson, S. Jha, and T. Ristenpart, “Model inversion attacks that exploit confidence
information and basic countermeasures,” in CCS ’15.
[275] X. Wu, M. Fredrikson, S. Jha, and J. F. Naughton, “A methodology for formalizing model-
inversion attacks,” in CSF ’16.
[276] R. Shokri, M. Stronati, C. Song, and V. Shmatikov, “Membership inference attacks against
machine learning models,” in S&P ’17.
[277] X. Chen, C. Liu, B. Li, K. Lu, and D. Song, “Targeted backdoor attacks on deep learning
systems using data poisoning,” in ArXiv 1712.05526.
[278] C. Song, T. Ristenpart, and V. Shmatikov, “Machine learning models that remember too
much,” in CCS ’17.
[279] Y. Long, V. Bindschaedler, L. Wang, D. Bu, X. Wang, H. Tang, C. A. Gunter, and K. Chen,
“Understanding membership inferences on well-generalized learning models,” in ArXiv
1802.04889.
[280] J. J. Dongarra, J. D. Croz, S. Hammarling, and I. S. Duff, “A set of level 3 basic linear
algebra subprograms,” in ACM Transactions on Mathematical Software ’90.
[281] BLAS (Basic Linear Algebra Subprograms), http://www.netlib.org/blas/.
[282] Intel Math Kernel Library, https://software.intel.com/en-us/mkl.
[283] S. Palkar, J. J. Thomas, D. Narayanan, P. Thaker, R. Palamuttam, P. Negi, A. Shanbhag,
M. Schwarzkopf, H. Pirk, S. P. Amarasinghe, S. Madden, and M. A. Zaharia, “Evaluating
end-to-end optimization for data analytics applications in Weld,” in VLDB ’18.
[284] S. Diamond and S. Boyd, “CVXPY: A Python-embedded modeling language for convex
optimization,” in Journal of Machine Learning Research ’16.
[285] C. Dwork, “Differential privacy,” in ICALP ’06.
[286] K. Chaudhuri and C. Monteleoni, “Privacy-preserving logistic regression,” in NeurIPS ’09.
[287] X. Wu, F. Li, A. Kumar, K. Chaudhuri, S. Jha, and J. Naughton, “Bolt-on differential
privacy for scalable stochastic gradient descent-based analytics,” in SIGMOD ’17.
BIBLIOGRAPHY 217
[288] R. Iyengar, J. P. Near, D. Song, O. Thakkar, A. Thakurta, and L. Wang, “Towards practical
differentially private convex optimization,” in S&P ’19.
[289] G. Brassard, D. Chaum, and C. Crépeau, “Minimum disclosure proofs of knowledge,” in
Journal of Computer and System Sciences ’88.
[290] T. P. Pedersen, “Non-interactive and information-theoretic secure verifiable secret sharing,”
in CRYPTO ’91.
[291] M. Ajtai, “Generating hard instances of lattice problems,” in STOC ’96.
[292] O. Goldreich, S. Goldwasser, and S. Halevi, “Collision-free hashing from lattice prob-
lems,” in IACR ePrint 1996/9.
[293] J.-Y. Cai and A. Nerurkar, “An improved worst-case to average-case connection for lattice
problems,” in FOCS ’97.
[294] D. Micciancio, “Generalized compact knapsacks, cyclic lattices, and efficient one-way
functions from worst-case complexity assumptions,” in FOCS ’02.
[295] D. Micciancio and O. Regev, “Worst-case to average-case reductions based on Gaussian
measures,” in FOCS ’04.
[296] C. Peikert and A. Rosen, “Efficient collision-resistant hashing from worst-case assump-
tions on cyclic lattices,” in TCC ’06.
[297] E. Ben-Sasson, A. Chiesa, E. Tromer, and M. Virza, “Scalable zero knowledge via cycles
of elliptic curves,” in CRYPTO ’14.
[298] J. Camenisch, S. Krenn, and V. Shoup, “A framework for practical universally composable
zero-knowledge protocols,” in ASIACRYPT ’11.
[299] AWS inter-region ping, https://www.cloudping.co.
[300] S. Boyd, N. Parikh, E. Chu, B. Peleato, and J. Eckstein, “Distributed optimization and
statistical learning via the alternating direction method of multipliers,” in Foundations and
Trends in Machine Learning ’10.
[301] Z. Qian, X. Chen, N. Kang, M. Chen, Y. Yu, T. Moscibroda, and Z. Zhang, “MadLINQ:
Large-scale distributed matrix computation for the cloud,” in EuroSys ’12.
[302] G. Bosilca, A. Bouteiller, A. Danalis, M. Faverge, A. Haidar, T. Herault, J. Kurzak, J.
Langou, P. Lemarinier, H. Ltaief, et al., “Flexible development of dense linear algebra
algorithms on massively parallel architectures with DPLASMA,” in IPDPSW ’11.
[303] A. Ghoting, R. Krishnamurthy, E. Pednault, B. Reinwald, V. Sindhwani, S. Tatikonda, Y.
Tian, and S. Vaithyanathan, “SystemML: Declarative machine learning on MapReduce,”
in ICDE ’11.
[304] T. Chen, M. Li, Y. Li, M. Lin, N. Wang, M. Wang, T. Xiao, B. Xu, C. Zhang, and Z. Zhang,
“MXNet: A flexible and efficient machine learning library for heterogeneous distributed
systems,” in NeurIPS Workshop on Machine Learning Systems ’15.
BIBLIOGRAPHY 218
[323] P. Mohassel and P. Rindal, “Aby3: A mixed protocol framework for machine learning,” in
CCS ’18.
[324] M. S. Riazi, C. Weinert, O. Tkachenko, E. M. Songhori, T. Schneider, and F. Koushanfar,
“Chameleon: A hybrid secure computation framework for machine learning applications,”
in ASIACCS ’18.
[325] A. Baumann, M. Peinado, and G. Hunt, “Shielding applications from an untrusted cloud
with Haven,” OSDI ’14,
[326] T. Hunt, Z. Zhu, Y. Xu, S. Peter, and E. Witchel, “Ryoan: A distributed sandbox for un-
trusted computation on secret data,” in OSDI ’15.
[327] W. Zheng, A. Dave, J. G. Beekman, R. A. Popa, J. E. Gonzalez, and I. Stoica, “Opaque:
An oblivious and encrypted distributed analytics platform,” in NSDI ’17.
[328] T. Hunt, C. Song, R. Shokri, V. Shmatikov, and E. Witchel, “Chiron: Privacy-preserving
machine learning as a service,” in ArXiv 1803.05961.
[329] O. Ohrimenko, F. Schuster, C. Fournet, A. Mehta, S. Nowozin, K. Vaswani, and M. Costa,
“Oblivious multi-party machine learning on trusted processors,” in SEC ’16.
[330] K. Grover, S. Tople, S. Shinde, R. Bhagwan, and R. Ramjee, “Privado: Practical and secure
DNN inference with enclaves,” in ArXiv 1810.00602.
[331] Y. Xu, W. Cui, and M. Peinado, “Controlled-channel attacks: Deterministic side channels
for untrusted operating systems,” in S&P ’15.
[332] F. Brasser, U. Müller, A. Dmitrienko, K. Kostiainen, S. Capkun, and A.-R. Sadeghi, “Soft-
ware grand exposure: SGX cache attacks are practical,” in WOOT ’17.
[333] O. Ohrimenko, M. Costa, C. Fournet, C. Gkantsidis, M. Kohlweiss, and D. Sharma, “Ob-
serving and preventing leakage in MapReduce,” in CCS ’15.
[334] P. Kocher, J. Horn, A. Fogh, D. Genkin, D. Gruss, W. Haas, M. Hamburg, M. Lipp, S.
Mangard, T. Prescher, M. Schwarz, and Y. Yarom, “Spectre attacks: Exploiting speculative
execution,” in S&P ’19.
[335] D. Froelicher, J. R. Troncoso-Pastoriza, A. Pyrgelis, S. Sav, J. S. Sousa, J.-P. Bossuat, and
J.-P. Hubaux, “Scalable privacy-preserving distributed learning,” in PETS ’21.
[336] S. Tan, B. Knott, Y. Tian, and D. J. Wu, “CryptGPU: Fast privacy-preserving machine
learning on the GPU,” in S&P ’21.
[337] S. Wagh, D. Gupta, and N. Chandran, “SecureNN: 3-party secure computation for neural
network training,” in PETS ’19.
[338] C. Zhang, S. Li, J. Xia, W. Wang, F. Yan, and Y. Liu, “BatchCrypt: Efficient homomorphic
encryption for cross-silo federated learning,” in ATC ’20.
[339] P. Mishra, R. Lehmkuhl, A. Srinivasan, W. Zheng, and R. A. Popa, “Delphi: A crypto-
graphic inference service for neural networks,” in SEC ’20.
BIBLIOGRAPHY 220
[357] S. Li, K. Xue, B. Zhu, C. Ding, X. Gao, D. Wei, and T. Wan, “FALCON: A Fourier
transform based approach for fast and secure convolutional neural network predictions,”
in CVPR ’20.
[358] A. Dalskov, D. Escudero, and M. Keller, “Fantastic four: Honest-majority four-party secure
computation with malicious security,” in SEC ’21.
[359] K. Mandal and G. Gong, “PrivFL: Practical privacy-preserving federated regressions on
high-dimensional data over mobile networks,” in CCSW ’19.
[360] S. Bian, T. Wang, M. Hiromoto, Y. Shi, and T. Sato, “ENSEI: Efficient secure inference via
frequency-domain homomorphic convolution for privacy-preserving visual recognition,” in
CVPR ’20.
[361] H. Chen, M. Kim, I. Razenshteyn, D. Rotaru, Y. Song, and S. Wagh, “Maliciously secure
matrix multiplication with applications to private deep learning,” in ASIACRYPT ’20.
[362] P. Mohassel, M. Rosulek, and N. Trieu, “Practical privacy-preserving k-means clustering,”
in PETS ’20.
[363] R. Lehmkuhl, P. Mishra, A. Srinivasan, and R. A. Popa, “Muse: Secure inference resilient
to malicious clients,” in SEC ’21.
[364] C. A. Choquette-Choo, N. Dullerud, A. Dziedzic, Y. Zhang, S. Jha, N. Papernot, and X.
Wang, “CaPC learning: Confidential and private collaborative learning,” in ICLR ’21.
[365] S. Wagh, S. Tople, F. Benhamouda, E. Kushilevitz, P. Mittal, and T. Rabin, “Falcon:
Honest-majority maliciously secure framework for private deep learning,” in PETS ’21.
[366] X. Jiang, M. Kim, K. Lauter, and Y. Song, “Secure outsourced matrix computation and
application to neural networks,” in CCS ’18.
[367] M. Chase, R. Gilad-Bachrach, K. Laine, K. E. Lauter, and P. Rindal, “Private collaborative
neural network learning,” in IACR ePrint 2017/762.
[368] J. Frankle, S. Park, D. Shaar, S. Goldwasser, and D. Weitzner, “Practical accountability of
secret processes,” in SEC ’18.
[369] Y. Ishai, R. Ostrovsky, and H. Seyalioglu, “Identifying cheaters without an honest major-
ity,” in TCC ’12.
[370] Y. Ishai, R. Ostrovsky, and V. Zikas, “Secure multi-party computation with identifiable
abort,” in CRYPTO ’14.
[371] C. Baum, B. David, and R. Dowsley, “Insured MPC: Efficient secure computation with
financial penalties,” in FC ’20.
[372] K. Hao, AI is sending people to jail—and getting it wrong, https://www.technologyreview.
com/2019/01/21/137783/algorithms-criminal-justice-ai/.
[373] G. Kesari, AI can now detect depression from your voice, and it’s twice as accurate as
human practitioners, https://bit.ly/32HdcUQ.
BIBLIOGRAPHY 222
[413] D. Khovratovich, “Key recovery attacks on the Legendre PRFs within the birthday bound,”
in IACR ePrint 2019/862.
[414] A. May and F. Zweydinger, “Legendre PRF (multiple) key attacks and the power of pre-
processing,” in IACR ePrint 2021/645.
[415] M. N. Wegman and J. L. Carter, “New hash functions and their use in authentication and
set equality,” in JCSS ’81.
[416] M. Naor and M. Yung, “Universal one-way hash functions and their cryptographic appli-
cations,” in STOC ’89.
[417] S. Moro, P. Cortez, and P. Ritaa, “A data-driven approach to predict the success of bank
telemarketing,” in Decision Support Systems ’14.
[418] “Bank marketing data set,” in https://archive.ics.uci.edu/ml/datasets/
Bank+Marketing.
[419] B. Strack, J. P. DeShazo, C. Gennings, J. L. Olmo, S. Ventura, K. J. Cios, and J. N. Clore,
“Impact of HbA1c measurement on hospital readmission rates: Analysis of 70,000 clinical
database patient records,” in BioMed Research International ’14.
[420] “Diabetes 130-US hospitals for years 1999-2008 data set,” in https : / / archive .
ics . uci . edu / ml / datasets / Diabetes + 130 - US + hospitals + for +
years+1999-2008.
[421] “Real time advertiser’s auction,” in https://www.kaggle.com/saurav9786/
real-time-advertisers-auction.
[422] R. Canetti, Y. Lindell, R. Ostrovsky, and A. Sahai, “Universally composable two-party and
multi-party secure computation,” in STOC ’02.
[423] D. Evans, V. Kolesnikov, and M. Rosulek, “Defining multi-party computation,” in A Prag-
matic Introduction to Secure Multi-Party Computation, 2018.
[424] M. Blum, “Coin flipping by telephone a protocol for solving impossible problems,” in ACM
SIGACT News ’83.
[425] C. F. Gauss, “Theoria combinationis obsevationum erroribus minimis obnoxiae,” in Carl
Friedrich Gauss Werke, 1823.
[426] E. Arias-Castro, B. Pelletier, and V. Saligrama, “Remember the curse of dimensionality:
The case of goodness-of-fit testing in arbitrary dimension,” in Journal of Nonparametric
Statistics ’18.
[427] R. B. Davies, “Algorithm as 155: The distribution of a linear combination of chi-squared
random variables,” Applied Statistics, pp. 323–333, 1980.
[428] J. Sheil and I. O’Muircheartaigh, “Algorithm as 106: The distribution of non-negative
quadratic forms in normal variables,” Journal of the Royal Statistical Society. Series C
(Applied Statistics), vol. 26, no. 1, pp. 92–98, 1977.
BIBLIOGRAPHY 225
[429] J.-P. Imhof, “Computing the distribution of quadratic forms in normal variables,” Biometrika,
vol. 48, no. 3/4, pp. 419–426, 1961.
[430] D. Achlioptas, “Database-friendly random projections: Johnson-Lindenstrauss with binary
coins,” in Journal of Computer and System Sciences ’03.
[431] S. Venkatasubramanian and Q. Wang, “The Johnson-Lindenstrauss transform: An empiri-
cal study,” in Workshop on Algorithm Engineering and Experiments (ALENEX) ’11.
[432] M. Campanelli, R. Gennaro, S. Goldfeder, and L. Nizzardo, “Zero-knowledge contingent
payments revisited: Attacks and payments for services,” in CCS ’17.
[433] G. Couteau, P. Rindal, and S. Raghuraman, “Silver: Silent VOLE and oblivious transfer
from hardness of decoding structured LDPC codes,” in CRYPTO ’21.
[434] A. C.-C. Yao, “Protocols for secure computations,” in FOCS ’82.
[435] X. Wang, S. Ranellucci, and J. Katz, “Authenticated garbling and efficient maliciously
secure two-party computation,” in CCS ’17.
[436] C. Hazay, P. Scholl, and E. Soria-Vazquez, “Low cost constant round MPC combining
BMR and oblivious transfer,” in ASIACRYPT ’17.
[437] K. Yang, X. Wang, and J. Zhang, “More efficient MPC from improved triple generation
and authenticated garbling,” in CCS ’20.
[438] K. Yang, C. Weng, X. Lan, J. Zhang, and X. Wang, “Ferret: Fast extension for correlated
OT with small communication,” in CCS ’20.
[439] S. Goldwasser, S. Micali, and C. Rackoff, “The knowledge complexity of interactive proof-
systems,” in STOC ’85.
[440] J. Bootle, A. Cerulli, P. Chaidos, J. Groth, and C. Petit, “Efficient zero-knowledge argu-
ments for arithmetic circuits in the discrete log setting,” in EUROCRYPT ’16.
[441] B. Bünz, J. Bootle, D. Boneh, A. Poelstra, P. Wuille, and G. Maxwell, “Bulletproofs: Short
proofs for confidential transactions and more,” in S&P ’18.
[442] T. Xie, J. Zhang, Y. Zhang, C. Papamanthou, and D. Song, “Libra: Succinct zero-knowledge
proofs with optimal prover computation,” in CRYPTO ’19.
[443] J. Zhang, T. Xie, Y. Zhang, and D. Song, “Transparent polynomial delegation and its ap-
plications to zero knowledge proof,” in S&P ’20.
[444] S. Setty, “Spartan: Efficient and general-purpose zkSNARKs without trusted setup,” in
CRYPTO ’20.
[445] A. Andoni, T. Malkin, and N. S. Nosatzki, “Two party distribution testing: Communication
and security,” in NeurIPS PPML Workshop ’18.
[446] V. Narayanan, M. Mishra, and V. M. Prabhakaran, “Private two-terminal hypothesis test-
ing,” in ISIT ’20.
BIBLIOGRAPHY 226
[485] S. Bowe, A. Gabizon, and M. Green, “A multi-party protocol for constructing the public
parameters of the Pinocchio zk-SNARK,” in IACR ePrint 2017/602.
[486] S. Bowe, A. Gabizon, and I. Miers, “Scalable multi-party computation for zk-SNARK
parameters in the random beacon model,” in IACR ePrint 2017/1050.
[487] J. Groth, “On the size of pairing-based non-interactive arguments,” in EUROCRYPT ’16.
[488] C. Badertscher, P. Gaži, A. Kiayias, A. Russell, and V. Zikas, “Ouroboros Genesis: Com-
posable proof-of-stake blockchains with dynamic availability,” in CCS ’18.
[489] A. Ozdemir, R. S. Wahby, B. Whitehat, and D. Boneh, “Scaling verifiable computation
using efficient set accumulators,” in SEC ’20.
[490] J. Lee, K. Nikitin, and S. Setty, “Replicated state machines without replicated execution,”
in S&P ’20.
[491] R. Canetti, “Universally composable security: A new paradigm for cryptographic proto-
cols,” in FOCS ’01.
[492] K. Wüst, S. Matetic, M. Schneider, I. Miers, K. Kostiainen, and S. Čapkun, “ZLiTE:
Lightweight clients for shielded Zcash transactions using trusted execution,” in FC ’19.
[493] S. Matetic, K. Wüst, M. Schneider, K. Kostiainen, G. Karame, and S. Capkun, “BITE:
Bitcoin lightweight client privacy using trusted execution,” in SEC ’19.
[494] D. V. Le, L. T. Hurtado, A. Ahmad, M. Minaei, B. Lee, and A. Kate, “A tale of two trees:
One writes, and other reads: Optimized oblivious accesses to Bitcoin and other UTXO-
based blockchains,” in PETS ’20.
[495] K. Qin, H. Hadass, A. Gervais, and J. Reardon, “Applying private information retrieval to
lightweight Bitcoin clients,” in CVCBT ’19.
[496] A. Tomescu, V. Bhupatiraju, D. Papadopoulos, C. Papamanthou, N. Triandopoulos, and
S. Devadas, “Transparency logs via append-only authenticated dictionaries,” in CCS ’19,
2019.
[497] arkworks, A Rust ecosystem for developing and programming with zkSNARKs, https:
//arkworks.rs.
[498] D. Hopwood, S. Bowe, T. Hornby, and N. Wilcox, Zcash protocol specification, https:
//github.com/zcash/zips/blob/master/protocol/protocol.pdf,
2018.
[499] A. Naveh and E. Tromer, “PhotoProof: Cryptographic image authentication for any set of
permissible transformations,” in S&P ’16.
[500] A. Chiesa, E. Tromer, and M. Virza, “Cluster computing in zero knowledge,” in EURO-
CRYPT ’15.
[501] S. Chong, E. Tromer, and J. A. Vaughan, “Enforcing language semantics using proof-
carrying data,” in IACR ePrint 2013/513.
BIBLIOGRAPHY 229
√
[502] E. Boyle, R. Cohen, and A. Goel, “Breaking the O( n)-bits barrier: Balanced Byzantine
agreement with polylog bits per-party,” in PODC ’21.
[503] marlin, A Rust library for the Marlin preprocessing zkSNARK, https : / / github .
com/arkworks-rs/marlin.
[504] A. Kate, G. M. Zaverucha, and I. Goldberg, “Constant-size commitments to polynomials
and their applications,” in ASIACRYPT ’10.
[505] poly-commit, A Rust library for polynomial commitments, https://github.com/
arkworks-rs/poly-commit.
[506] A. Delignat-Lavaud, C. Fournet, M. Kohlweiss, and B. Parno, “Cinderella: Turning shabby
X.509 certificates into elegant anonymous credentials with the magic of verifiable compu-
tation,” in S&P ’16.
[507] A. E. Kosba, C. Papamanthou, and E. Shi, “xJsnark: A framework for efficient verifiable
computation,” in S&P ’18.
[508] Faster variable-base scalar multiplication in zk-SNARK circuits, https://github.
com/zcash/zcash/issues/3924.
[509] J. H. Cheon, “Security analysis of the strong Diffie–Hellman problem,” in EUROCRYPT ’06.
[510] J. Jaeger and S. Tessaro, “Expected-time cryptography: Generic techniques and applica-
tions to concrete soundness,” in TCC ’20.
[511] A. Gabizon, K. Gurkan, P. Jovanovic, G. Konstantopoulos, A. Oines, M. Olszewski, M.
Straka, E. Tromer, and P. Vesely, Plumo: Towards scalable interoperable blockchains
using ultra light validation systems, https : / / docs . zkproof . org / pages /
standards/accepted-workshop3/proposal-plumo_celolightclient.
pdf, 2020.
[512] P. Weißkirchner, Evaluation and improvement of Ethereum light clients, Technische Uni-
versität Wien, Diplomarbeit. http://repositum.tuwien.ac.at/obvutwhs/
content/titleinfo/4671631, 2020.
[513] H. Wu, W. Zheng, A. Chiesa, R. A. Popa, and I. Stoica, “DIZK: A distributed zero knowl-
edge proof system,” in SEC ’18.
[514] A. Gluchowski, World’s first practical hardware for zero-knowledge proofs acceleration,
https : / / medium . com / matter - labs / worlds - first - practical -
hardware-for-zero-knowledge-proofs-acceleration-72bf974f8d6e,
2020.
[515] StarkWare, Brining STARKs to Ethereum, https://www.starkdex.io/.
[516] StarkWare, When Lightning STARKs, https://medium.com/starkware/when-
lightning-starks-a90819be37ba.
[517] B. Whitehat, Roll up: Scale Ethereum with SNARKs, https://github.com/barryWhiteHat/
roll_up, 2018.
BIBLIOGRAPHY 230
This work may be used in accordance with the terms of the Creative Commons license
or other rights statement, as indicated in the copyright statement or in the metadata
associated with this work. Unless otherwise specified in the copyright statement
or the metadata, all rights are reserved by the copyright holder.
ProQuest LLC
789 East Eisenhower Parkway
P.O. Box 1346
Ann Arbor, MI 48106 - 1346 USA