tldr:
- In the project root ./: A rust toolkit for implementing decentralized protocols.
- In examples/: Implementation of DISPERS (Bouganim et al, 2023), for running privacy-preserving queries across a decentralized network.
Overview:
data-wallet-prototype
is a testbed for running decentralised protocols that support collaborative computations across many nodes, whilst preserving the privacy of individual nodes.
The purpose of a 'data wallet' in a more general sense is to:
- Allow users (holders) to securely store their data locally, with the assurance that it will never be transmitted or revealed outside of their device in a way that compromises the privacy of the invidual (using various cryptographic measures).
- Allow organisations to query/perform computations on multiple data wallets in aggregate, without compromising privacy requirements of the holders (using protocols designed to achieve this).
This particular project has the added constraint that it must operate in a fully decentralised manner, with no requirement to trust external organisations. This is in contrast to other solutions that rely on third parties, such as cloud providers, to store information and perform computations.
As such, the repository can be considered to be split into two parts:
- The core rust library
data_wallet_lib
, that provides all the basic functionality (storing data, networking, etc.) - Codebases constructed on top of the library, that are implementations of protocols found in literature, chiefly the DISPERS (2023) algorithm, that enable the distributed computation requirements of the project.
Future goals of the project include:
- Demonstrating the deployment and use of the library on Android, to validate its use in a more real-world setting on personal devices.
- Using hardware security features, such as Trusted Execution Environments (TEE) when available to support cryptography and data storage functions.
Network
Various connectors for communicating with peers over both local channels and TCP sockets are available, each with different trade-offs.
Store
The store interface provides a way to put and retrieve binary blobs related to your application on the local filesystem. It designed to abstract away any platform differences between MacOS, Linux and Android whilst providing straightforward control over the level of security measures used.
Secure
This module wraps up and provides a clean interface to any encryption functionality your application may need. This includes
- Shamir's Secret Sharing Scheme
- File Encryption
- Symmetric Key Encryption
Usage
Easiest setup is to clone the repo (with --recurse-submodules
), and then point your Config.toml
to it.
[dependencies]
data-wallet-prototype = { path = "path/to/data-wallet-prototype" }
Now you are linked to it, use it as needed:
use data_wallet_lib::{network, secure, store};
Documentation
cargo doc
will work as expected if you would like to understand method signatures and types. A hosted version is available here.
Tests
Unit tests have been employed throughout the project, and can be triggered using cargo test
.
Integration tests that examine more complex functionality, such as behaviour between wallets across a network environment, belong in tests/
, for example:
cd data-wallet-prototype
tests/tcp_network_test/run.sh
Appendix
This library was developed under the SOTERIA h2020 project.