Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add rfc for paillier optimization #245

Merged
merged 1 commit into from
Sep 5, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 37 additions & 0 deletions rfcs/PaddleDTX/paillier_opt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# 标题

标题如:PaddleDTX/crypto 中 Paillier 算法优化方案
| 项目 | 描述 |
|---|---|
|提交作者 | 王瑞凯 |
|提交时间 | 2022-09-05 |
|版本号 | V1.0 |
|依赖飞桨版本 | PaddleDTX master |
|文件名 | paillier_opt.md |


# 一、概述

## 1、意义
PaddleDTX 当前实现了两类纵向联邦学习算法,均采用 Paillier 同态进行加密参数传输,在训练的迭代过程中需多次进行同态加解密运算,因此 Paiilier 算法的性能会大大影响分布式AI的整体性能。

# 二、飞桨现状
PaddleDTX 基于 Go 语言本身的大数计算库 big 实现了 Paillier 密钥生成、加密、解密、密文加法等算法,大量依赖 big 库中的 Exp 和 Mod 操作,这些操作本身的计算时间比较长,存在一定的优化空间。

# 三、设计思路与实现方案

## 优化方案

1. 整体梳理算法实现使用的运算,对可以降低操作数数量级的操作进行修正,对可以进行预计算的操作进行预计算处理,删除不必要的计算。
2. 尝试使用密码学常用优化手段,通过密码学分析实现 GCD、模乘、求幂等算法的加速。
3. 尝试使用 uint64 数组实现计算,提高计算效率,同时减少对 big 库实现的依赖。

# 六、测试和验收的考量
完成功能实现、单测、性能测试。

# 七、可行性分析和排期规划
| 时间点 | key results |
| --- | --- |
| 2022-09-05 | 提案提交 |
| 2022-09-12 | 实现优化方案前两条 |
| 2022-09-18 | 实现优化方案最后一条并提交 PR |