TFHE-rs
TFHE-rs作为TFHE的继承者,是开发非常活跃的一个全同态密码库。
TFHE-rs的构建系统由Makefile定义,所有可用的benchmark包括:
$ grep -o -e '^bench_[^(web)]\w\+' Makefile
bench_integer
bench_signed_integer
bench_integer_gpu
bench_signed_integer_gpu
bench_integer_hpu
bench_integer_compression
bench_integer_compression_gpu
bench_integer_compression_128b_gpu
bench_integer_zk_gpu
bench_integer_aes_gpu
bench_integer_aes256_gpu
bench_integer_multi_bit
bench_signed_integer_multi_bit
bench_integer_multi_bit_gpu
bench_signed_integer_multi_bit_gpu
bench_integer_zk
bench_shortint
bench_shortint_oprf
bench_ks
bench_ks_gpu
bench_pbs
bench_pbs_gpu
bench_ks_pbs
bench_ks_pbs_gpu
bench_pbs128
bench_pbs128_gpu
bench_hlapi
bench_hlapi_gpu
bench_hlapi_hpu
bench_hlapi_erc20
bench_hlapi_erc20_gpu
bench_hlapi_erc20_gpu_classical
bench_hlapi_dex
bench_hlapi_dex_gpu
bench_hlapi_dex_gpu_classical
bench_hlapi_erc20_hpu
bench_tfhe_zk_pok
bench_hlapi_noise_squash
bench_hlapi_noise_squash_gpu
bench_custom
bench_fft
bench_ntt上面包含gpu和hpu的benchmark需要启用CUDA和HPU支持。如果没有相应的机器可用,也可以从官方的CI任务中查看相关的数据,如benchmark_cpu、benchmark_gpu和benchmark_hpu。
或者运行单个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磁盘空间。
TFHE-rs支持Nvidia的GPU作为执行后端之一。默认情况下,需要启用gpu特性。编译期将包含GPU后端代码,在链接期从/usr/local/cuda/lib64查找CUDA运行时库。
cargo bench --no-default-features \
--features=integer,gpu,internal-keycache,pbs-stats \
-p tfhe-benchmark \
--profile release_lto_off \
--bench integerLTO确实能改善性能,但启用LTO会极大增加rustc的编译时间和内存占用。一般仅推荐构建最终发布版本才启用LTO。
通过启用release_lto_off配置,可以关闭LTO,但会牺牲一些性能。
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-benchmarkMicrosoft SEAL
如果没有CMake,根据官方网站下载安装CMake。
配置构建,CMake自动下载缺少的依赖:
mkdir build
cmake -B build -DSEAL_BUILD_BENCH=ON -S .编译项目和性能测试程序:
cmake --build build编译完成后,进入build目录,运行性能测试程序:
cd build
bin/seal_benchLattigo
运行所有测试:
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