The Solid Aggregation Service allows for the computation of aggregate values over many user pods. Researchers can submit an aggregation request to the system (e.g. "what is the average age of ..."). Users can then submit encrypted values (e.g. their age, their height) to studies via an online interface. A third party computes an aggregate, but through the use of homomorphic encryption, learns nothing about the users' data (not even the aggregate result). Finally, the researcher will be given an encrypted aggregate result that only they can decrypt, without learning anything else about the users.
The Solid Aggregation Service is comprised of three main repositories:
- Users visit the deployed
cory2067/node-solid-server
, register for a pod, and upload some private.ttl
files. - Researcher visits the
solid-aggregator
web interface (or uses thesolid-researcher
CLI) and registers a new study - Users visit the
solid-aggregator
web interface, and consent to studies, inputting URIs of files they permit the aggregator to extract data from. - Researcher uses
solid-researcher
CLI to request an aggregate, and receives an encrypted result can be decrypted by the researcher's private key.
To enable the use of homomorphic encryption, these programs use Microsoft's SEAL library. Since SEAL runs in C++, but the Solid Aggregation code is written JavaScript, I created a (feature-incomplete) JavaScript wrapper, seal.js.
cory2067/node-solid-server
is currently deployed at https://pods.solid-aggregator.xyz. Feel free to create an account.solid-aggregator
is currently deployed at https://solid-aggregator.xyz.- You can download and run the
solid-researcher
CLI
- Only integer values can be aggregated over.
- When requesting
average
orratio
, the researcher can determine the number of users participating in the study - With very large number of participants, an aggregate result may overflow. To resolve this, the plaintext modulus used by SEAL must be manually increased.
- Submit a new study as a researcher
- Participate in an ongoing study
- Request an aggregate once users have submitted data
Please visit the individual repos for additional documentation.
Cory Lynch