idea164-bexproof-verifiable.../bexproof/privacy.py

26 lines
798 B
Python

"""Privacy-preserving statistics utilities.
This module provides a simple differential-privacy-friendly aggregate function
by adding Laplace noise to the sum. The actual privacy guarantees are simplified
for MVP purposes and should be upgraded for production.
"""
from __future__ import annotations
import random
import math
def laplace_noise(scale: float) -> float:
# Inverse transform sampling for Laplace(0, scale)
u = random.uniform(-0.5, 0.5)
return scale * math.copysign(1.0, u) * math.log(1 - 2 * abs(u))
def privacy_aggregate(values, epsilon: float) -> float:
if not values:
return 0.0
true_sum = sum(values)
# Simple Laplace mechanism; scale = 1/epsilon
scale = 1.0 / max(epsilon, 1e-9)
noise = laplace_noise(scale)
return true_sum + noise