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/
โ”œโ”€โ”€ src/secure_fl/       # Main package
โ”‚   โ”œโ”€โ”€ federation/      # FL clients, server, and aggregation strategy
โ”‚   โ”œโ”€โ”€ zkp/             # ZKP managers and quantization
โ”‚   โ”œโ”€โ”€ models/          # Model definitions (MNIST/CIFAR/ResNet/MLP)
โ”‚   โ”œโ”€โ”€ core/            # Types, config, exceptions, versioning
โ”‚   โ”œโ”€โ”€ cli/             # CLI commands and setup helpers
โ”‚   โ””โ”€โ”€ utils/           # Logging and helper 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.20.dev2.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.20.dev2-py3-none-any.whl (78.4 kB view details)

Uploaded Python 3

File details

Details for the file secure_fl-2026.2.20.dev2.tar.gz.

File metadata

  • Download URL: secure_fl-2026.2.20.dev2.tar.gz
  • Upload date:
  • Size: 4.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","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.20.dev2.tar.gz
Algorithm Hash digest
SHA256 62f76e15132006d6dec55316b5a08542a9d0467c2979e002d183a035f8634533
MD5 432b9c21bf780d3d9048698119bab723
BLAKE2b-256 4a9b001796fca57f78bb04d98e7dedf2b1baa3624df6059a635f4295e7bb1fe1

See more details on using hashes here.

File details

Details for the file secure_fl-2026.2.20.dev2-py3-none-any.whl.

File metadata

  • Download URL: secure_fl-2026.2.20.dev2-py3-none-any.whl
  • Upload date:
  • Size: 78.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","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.20.dev2-py3-none-any.whl
Algorithm Hash digest
SHA256 54cdc6181be86e0ee90dc26c429c943f807cdef75d305aab09da2bcac343386e
MD5 c3236ee83733f06bb6bcdddf85f85a59
BLAKE2b-256 91e820307c81550109be213399e9021197715b8f171fcb862a5bf631fe7c2d3c

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