全同态加密

主要全同态密码库的性能测试

Chuck Chen
 · 
分类: [密码学]

TFHE-rs

TFHE-rs作为TFHE的继承者,是开发非常活跃的一个全同态密码库。

运行所有的benchmark:

cargo bench --no-default-features \
  --features=boolean,shortint,integer,internal-keycache,zk-pok,pbs-stats \
  -p tfhe-benchmark

上面的参数--no-default-features避免启用CUDA和HPU支持,而通过--features显式指定需要启用的特性。如果需要编译CUDA版本,可以去掉。如果及其支持最新的AVX512指令集,也可以增加特性avx512

或者运行单个benchmark:

cargo bench --no-default-features \
  --features=boolean,shortint,integer,internal-keycache,zk-pok,pbs-stats \
  -p tfhe-benchmark \
  --bench boolean
cargo bench --no-default-features \
  --features=boolean,shortint,integer,internal-keycache,zk-pok,pbs-stats \
  -p tfhe-benchmark \
  --bench integer
cargo bench --no-default-features \
  --features=boolean,shortint,integer,internal-keycache,zk-pok,pbs-stats \
  -p tfhe-benchmark \
  --bench shortint

--bench后可用的benchmark参见./tfhe-benchmark/Cargo.toml中的bench字段定义的列表。

需要注意的是,8位的shortint支持无限次密文操作,但需要先生成大的密钥文件,运行后可能占用超过15GB磁盘空间。

OpenFHE

配置构建目录:

cmake -S . -B build -DBUILD_BENCHMARKS=ON -DHAVE_POSIX_REGEX=1

编译Release版本:

cmake --build build --config Release

编译完成后,进入build目录,运行性能测试程序:

cd build
bin/benchmark/bfv-mult-method-benchmark

Microsoft SEAL

如果没有CMake,根据官方网站下载安装CMake

配置构建,CMake自动下载缺少的依赖:

mkdir build
cmake -B build -DSEAL_BUILD_BENCH=ON -S .

编译项目和性能测试程序:

cmake --build build

编译完成后,进入build目录,运行性能测试程序:

cd build
bin/seal_bench

Lattigo

运行所有测试:

go test -bench=. ./...

排除默认的测试,只运行benchmark,且防止测试超时:

go test -run=^$ -bench=. -benchmem -timeout=0s ./...

Swift Homomorphic Encryption

苹果官方开源的Swift Homomorphic Encryption实现了BFV同态密码算法。编译运行需要Swift环境,安装参见官方文档

项目通过Swift Package Manager管理依赖。但package-benchmark依赖需要事先安装jemalloc,可以通过系统软件包管理器或Homebrew安装。通过设置BENCHMARK_DISABLE_JEMALLOC=1环境变量也可以仅用jemalloc,但可能对最终的性能测试有影响。

可以直接运行测试:

# RlweBenchmark
SWIFT_HOMOMORPHIC_ENCRYPTION_ENABLE_BENCHMARKING=1 \
  swift package -c release benchmark --target RlweBenchmark
# PolyBenchmark
SWIFT_HOMOMORPHIC_ENCRYPTION_ENABLE_BENCHMARKING=1 \
  swift package -c release benchmark --target PolyBenchmark
# PIRBenchmark
SWIFT_HOMOMORPHIC_ENCRYPTION_ENABLE_BENCHMARKING=1 \
  swift package -c release benchmark --target PIRBenchmark
# PNNSBenchmark
SWIFT_HOMOMORPHIC_ENCRYPTION_ENABLE_BENCHMARKING=1 \
  swift package -c release benchmark --target PNNSBenchmark

通过-c release使用发布配置编译,能避免默认的调试编译带来的性能损失。

如果遇到问题,也可以通过swift package clean清理构建目录,或swift package reset重置目录。然后尝试自行构建。

SWIFT_HOMOMORPHIC_ENCRYPTION_ENABLE_BENCHMARKING=1 swift build -c release --product RlweBenchmark

编译通过后,直接运行

.build/arm64-apple-macosx/release/RlweBenchmark