Yacl简介
YACL: Yet Another Common Crypto Library
YACL 是一个 C++ 库,包含了隐语 SecretFlow 代码所依赖的常见加密、网络和 IO 模块。YACL 中的加密模块实现了许多最先进的安全计算协议,包括 OT、VOLE、TPRE 等原语,以及 PRG、RO 等工具。查看 ALGORITHMS.md 文件中 YACL 支持的完整算法列表。
支持的平台
平台 | Linux x86_64 | Linux aarch64 | macOS x86_64 | macOS Apple Silicon | Windows x86_64 | Windows WSL2 x86_64 |
支持情况 | 是 | 是 | 是~ | 是 | 否 | 是~ |
~.YACL 尚未在这些平台上进行全面测试。
代码库结构
-
base: 一些基本类型和实用工具。
-
crypto: 不包含链接的加密算法。
-
kernel: 包含多线程支持的加密内核,包括 OT、DPF。
-
io: 一个简单的基于流的 IO 库。
-
link: 一个简单的基于 RPC 的 MPI 框架,提供 SPMD 并行编程能力。
先决条件
-
bazel: .bazelversion 文件描述了推荐的 bazel 版本。我们建议使用官方的 bazelisk 来管理 bazel 版本。
-
gcc >= 10.3
-
cmake
-
ninja/ninja-build
-
带有核心模块的 Perl 5(OpenSSL 必需)
快速入门
YACL 使用 bazel 构建系统,您可以使用以下代码来构建和测试 YACL 模块。有关如何在 YACL 上进行加密研究、使用 YACL 自带的加密工具或将 YACL 集成到您的系统中的更多指南,请查看快速入门指南。
Yacl在隐语开源框架中的定位
Yacl的Repo结构设计
Yacl的安全性
业务安全需求 - 我们的某个业务需要安全的隐私计算系统。
-
PSI协议可以满足业务需求
密码协议安全需求 - 我们需要一个安全的PSI协议
-
例如KKRT-PSI论文:Efficient Batched Oblivious PRF with Applications to Private Set Intersecttion, CCS' 16
-
理论假设:Correlation-Robust Hash Function
密码理论工具的安全需求 - 我们需要一个安全的CR-Hash实现。
-
使用Fixed-Key AES实现CR-Hash:Efficient and Secure Multiparty Computation from Fixed-Key Block Ciphers,知名学者论文
密码学基础算法实现的安全需求 - 我们需要一个安全的AES
-
OpenSSL、EMP-Toolkit(知名开源库)的AES实现
-
VASA: Vector AES Instructions for Security Applications, ACSAC'21
Yacl实现流程示例-IKNP OT Extension
参考资料
https://github.com/secretflow/yacl
https://www.bilibili.com/video/BV1RC4y127zn
https://www.bilibili.com/video/BV1CN411z7Cu