This repository includes implementations of DeCart, DeCart*, and multiple baseline schemes (CCS23/Server/Offline/SecPQ), along with experiment runners and paper plotting scripts.
schemes/: Core scheme implementations (DeCart, DeCart*, AI model abstraction)entities/: Participant entities (owner, querier, server, curator)core/: Finite field, bilinear pairing, homomorphic encryption, and other core modulesexperiments/: Runners for each scheme, dataset loaders, model training, and comparison plottingtests/: Basic functional and scheme comparison testsdata/: MNIST/UCI HAR dataset directory
- Python 3.10 or 3.11 (recommended)
- Windows / Linux / macOS
- A virtual environment is recommended
Run in the project root:
python -m venv .venv
# Windows
.venv\Scripts\activate
# Linux/macOS
# source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install numpy sympy bn256 tenseal phe pycryptodome cryptography loguru matplotlib torch torchvision scikit-learn scipyNotes:
- If you only run core schemes (no training or plotting), you may skip
torch/torchvision/matplotlib/scikit-learn/scipy. tensealmay require a compatible build environment. Check Python and platform compatibility if installation fails.
python tests/test_schemes_comparison.pypython -m experiments.our_decart.runner --N 10000 --n 32 --num-records 32 --record-dim 32 --policy-size 32 --num-runs 3python -m experiments.our_decart_star.runner --N 10000 --n 32 --num-records 32 --record-dim 32 --policy-size 32 --num-runs 3Common arguments:
--dataset {synthetic,mnist,uci_har}--model-source {synthetic,trained}--model-types dot decision_tree neural_network--no-save(do not persist results)--results-dir <path>(custom output directory)
synthetic:record_dimis configurablemnist:record_dimmust be784uci_har:record_dimmust be561
It is recommended to start with the synthetic dataset.
python -m experiments.our_decart.runner --dataset synthetic --record-dim 32 --num-records 32 --policy-size 32 --num-runs 3
python -m experiments.our_decart_star.runner --dataset synthetic --record-dim 32 --num-records 32 --policy-size 32 --num-runs 3To switch to real datasets:
python -m experiments.our_decart.runner --dataset mnist --record-dim 784 --num-records 128 --mnist-data-dir data
python -m experiments.our_decart_star.runner --dataset uci_har --record-dim 561 --num-records 128 --mnist-data-dir datapython -m experiments.models.train_models --dataset mnist --data-dir data
python -m experiments.models.train_models --dataset uci_har --data-dir dataTrained models are saved to:
experiments/models/trained/
Use them with the runner:
python -m experiments.our_decart.runner --dataset mnist --record-dim 784 --model-source trained --trained-models-dir experiments/models/trainedFor fair comparison, use a unified parameter set across schemes:
N=10000n=32num_records=32record_dim=32policy_size=32num_runs=3dataset=synthetic
python -m experiments.our_decart.runner --dataset synthetic --N 10000 --n 32 --num-records 32 --record-dim 32 --policy-size 32 --num-runs 3
python -m experiments.our_decart_star.runner --dataset synthetic --N 10000 --n 32 --num-records 32 --record-dim 32 --policy-size 32 --num-runs 3python -m experiments.scheme1_ccs23.runner --dataset synthetic --N 10000 --n 32 --num-records 32 --record-dim 32 --policy-size 32 --num-runs 3
python -m experiments.scheme2_server.runner --dataset synthetic --N 10000 --n 32 --num-records 32 --record-dim 32 --policy-size 32 --num-runs 3
python -m experiments.scheme3_offline.runner --dataset synthetic --N 10000 --n 32 --num-records 32 --record-dim 32 --policy-size 32 --num-runs 3
python -m experiments.secpq.runner --dataset synthetic --N 10000 --n 32 --num-records 32 --record-dim 32 --policy-size 32 --num-runs 3 --model-types decision_treepython -m experiments.revoke.runner --scheme decart --model-type decision_tree --N 10000 --n 32 --num-records 10 --record-dim 10 --policy-size 32 --num-runs 3
python -m experiments.revoke.runner --scheme decart_star --model-type decision_tree --N 10000 --n 32 --num-records 10 --record-dim 10 --policy-size 32 --num-runs 3By default, experiment results are stored in scheme-specific subdirectories under experiments/results/ (or override with --results-dir).
Typical directories:
experiments/results/our_decart/experiments/results/our_decart_star/experiments/results/scheme1_ccs23/experiments/results/scheme2_server/experiments/results/scheme3_offline/experiments/results/secpq/experiments/results/revoke/
Plot-generation scripts are located in the image output directory experiments/results/pic_new/ and can be run directly from the project root:
python experiments/results/pic_new/communication/generate_communication_charts.py
python experiments/results/pic_new/computation/generate_computation_charts.py
python experiments/results/pic_new/size/generate_size_charts.pyCorresponding output directories:
experiments/results/pic_new/communication/experiments/results/pic_new/computation/experiments/results/pic_new/size/
- It is recommended to always run experiments with Python from your virtual environment.
- If PowerShell output redirection causes encoding errors, set:
$env:PYTHONIOENCODING = "utf-8"- Create a virtual environment and install dependencies.
- Run
tests/test_schemes_comparison.pyas a basic sanity check. - Run small-scale checks for
our_decartandour_decart_starfirst. - Run other baseline schemes and revoke experiments.
- Finally, run the plotting scripts to generate paper figures.