Skip to main content

Dual-Verifiable Framework for Federated Learning using Zero-Knowledge Proofs

Project description

๐Ÿ” Secure FL: Zero-Knowledge Federated Learning

A dual-verifiable framework for federated learning using zero-knowledge proofs to ensure training integrity and aggregation correctness.

๐ŸŽฏ Core Features

  • Dual ZKP Verification: Client-side zk-STARKs + Server-side zk-SNARKs
  • FedJSCM Aggregation: Momentum-based federated optimization
  • Dynamic Proof Rigor: Adaptive proof complexity based on training stability
  • Parameter Quantization: ZKP-compatible weight compression

๐Ÿ—๏ธ Architecture

Client Training + zk-STARK Proof โ†’ FL Server + zk-SNARK Proof โ†’ Verified Model

The system provides dual verification:

  1. Clients generate zk-STARK proofs of correct local training
  2. Server generates zk-SNARK proofs of correct aggregation

๐Ÿš€ Quick Start

Installation

# Install the package with uv (recommended)
uv pip install secure-fl

# Or install from source with uv
git clone https://github.com/krishantt/secure-fl
cd secure-fl
uv pip install -e .

# For development with all dependencies
uv sync --all-extras

ZKP Prerequisites

Install zero-knowledge proof tools:

# Automated setup with make (recommended)
make setup-zkp

# Or manual setup:
# 1. Install Rust
curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

# 2. Install Circom
git clone https://github.com/iden3/circom.git
cd circom && cargo install --path circom

# 3. Install SnarkJS
npm install -g snarkjs

# Verify setup
uv run secure-fl check-zkp

Basic Usage

Server

from secure_fl import SecureFlowerServer, create_server_strategy
import torch.nn as nn

# Define model
class SimpleModel(nn.Module):
    def __init__(self):
        super().__init__()
        self.fc = nn.Linear(784, 10)
    
    def forward(self, x):
        return self.fc(x.view(-1, 784))

# Create server with ZKP verification
strategy = create_server_strategy(
    model_fn=SimpleModel,
    enable_zkp=True,
    proof_rigor="high"
)

server = SecureFlowerServer(strategy=strategy)
server.start(num_rounds=10)

Configuration

Create and use a configuration file:

# Create example config
uv run secure-fl create-config

# Edit config.yaml as needed
# Then use it:

Client

from secure_fl import create_client, start_client
from torchvision import datasets, transforms

# Load data
transform = transforms.Compose([transforms.ToTensor()])
dataset = datasets.MNIST('./data', train=True, transform=transform)

# Create secure client
client = create_client(
    client_id="client_1",
    model_fn=SimpleModel,
    train_data=dataset,
    enable_zkp=True
)

# Connect to server
start_client(client, "localhost:8080")

CLI Interface

# Start server
uv run secure-fl-server --config config.yaml

# Start client  
uv run secure-fl-client --server localhost:8080 --dataset mnist --client-id client_1

# Check system status
uv run secure-fl check-zkp

๐Ÿ”ฌ Technical Details

Zero-Knowledge Proofs

  • Client-side (zk-STARKs): Prove correct SGD computation using Cairo circuits
  • Server-side (zk-SNARKs): Prove correct FedJSCM aggregation using Circom circuits

FedJSCM Aggregation

Momentum-based federated averaging:

w_{t+1} = w_t - ฮท_g * (ฮฒ * m_t + (1-ฮฒ) * โˆ‡F_t)

where โˆ‡F_t is the federated gradient and m_t is the momentum buffer.

Dynamic Proof Rigor

Automatically adjusts ZKP complexity based on training stability:

  • High stability: Reduced proof complexity for efficiency
  • Low stability: Increased proof rigor for security

๐Ÿ“Š Configuration

Create a config.yaml:

server:
  host: "localhost"
  port: 8080
  num_rounds: 10

strategy:
  min_fit_clients: 2
  fraction_fit: 1.0
  momentum: 0.9

zkp:
  enable_zkp: true
  proof_rigor: "high"
  quantize_weights: true
  quantization_bits: 8

๐Ÿ”ง Development

Setup Development Environment

git clone https://github.com/krishantt/secure-fl
cd secure-fl

# Complete development setup
make dev

# Or manually with uv
uv sync --all-extras
make setup-zkp

Development Commands

# Run tests
make test
make test-quick      # Fast tests with early exit
make test-cov        # With coverage report

# Code quality
make lint           # Check with ruff
make format         # Format code
make type-check     # Run mypy
make check          # All quality checks

# Development workflow
make demo           # Run demonstration
make clean          # Clean artifacts

๐Ÿ“ˆ Experiments

Run benchmarks and experiments:

# Basic demo
make demo
# or: uv run python experiments/demo.py

# Performance benchmark  
uv run python experiments/benchmark.py

# Custom training
uv run python experiments/train.py --config experiments/config.yaml

# Check environment
make env-info

๐Ÿท๏ธ Repository Structure

secure-fl/
โ”œโ”€โ”€ secure_fl/           # Main package
โ”‚   โ”œโ”€โ”€ client.py        # FL client with zk-STARK proofs
โ”‚   โ”œโ”€โ”€ server.py        # FL server with zk-SNARK proofs
โ”‚   โ”œโ”€โ”€ aggregation.py   # FedJSCM algorithm
โ”‚   โ”œโ”€โ”€ proof_manager.py # ZKP generation/verification
โ”‚   โ”œโ”€โ”€ quantization.py  # Parameter compression
โ”‚   โ””โ”€โ”€ utils.py         # Utilities
โ”œโ”€โ”€ proofs/              # ZKP circuits
โ”‚   โ”œโ”€โ”€ client_circuits/ # zk-STARK (Cairo)
โ”‚   โ””โ”€โ”€ server/          # zk-SNARK (Circom)
โ”œโ”€โ”€ experiments/         # Research experiments
โ”œโ”€โ”€ tests/               # Test suite
โ””โ”€โ”€ docs/                # Documentation

๐Ÿค Contributing

  1. Fork the repository
  2. Set up development environment: make dev
  3. Create a feature branch
  4. Make your changes with proper type hints
  5. Add tests and ensure coverage
  6. Run quality checks: make check
  7. Test your changes: make test
  8. Submit a pull request

Code Style

  • Use type hints throughout
  • Follow the established error handling patterns
  • Add proper logging with context
  • Write tests for new functionality
  • Update documentation as needed

๐Ÿ“„ License

MIT License - see LICENSE for details.

๐Ÿ“š Citation

@misc{timilsina2024secure,
  title={Secure FL: Dual-Verifiable Framework for Federated Learning using Zero-Knowledge Proofs},
  author={Timilsina, Krishant and Paudel, Bindu},
  year={2024},
  url={https://github.com/krishantt/secure-fl}
}

๐Ÿ™ Acknowledgments

  • Flower framework for federated learning infrastructure
  • Circom and Cairo for zero-knowledge proof systems
  • The federated learning and cryptography research communities

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

secure_fl-2026.2.9.dev1.tar.gz (4.9 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

secure_fl-2026.2.9.dev1-py3-none-any.whl (76.6 kB view details)

Uploaded Python 3

File details

Details for the file secure_fl-2026.2.9.dev1.tar.gz.

File metadata

  • Download URL: secure_fl-2026.2.9.dev1.tar.gz
  • Upload date:
  • Size: 4.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for secure_fl-2026.2.9.dev1.tar.gz
Algorithm Hash digest
SHA256 933b9662846dedb50b441bc9e03c32b6e489685170a9a2f1f38c5e5e95ed541f
MD5 993823bd76a95d6e9c7d9e0c59118a2e
BLAKE2b-256 4ce1277a06712b4244cc73401c81953033490ae7a7b3a64cccba2852be97fa07

See more details on using hashes here.

File details

Details for the file secure_fl-2026.2.9.dev1-py3-none-any.whl.

File metadata

  • Download URL: secure_fl-2026.2.9.dev1-py3-none-any.whl
  • Upload date:
  • Size: 76.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for secure_fl-2026.2.9.dev1-py3-none-any.whl
Algorithm Hash digest
SHA256 159fa926589476748cdd21566fd80560c3adb4d429daa34fdc140c59948e3bee
MD5 1231cb367612a66a62b379de935f7ed7
BLAKE2b-256 e36e22e17708aa44cd2d0c36692c2811d256e0f43621cb991c820b9c2e469dc4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page