跳到主要内容

扩展安全协议和算法

如何开发一个安全协议

提示

👨‍🎓 本文档面向安全协议开发和算法开发的工程师

🕗 适用于PrimiHub v1.0 版本

如何开发一个新的多方安全计算协议

要继承实现的类

  1. 算子( Envaluator) 用于计算共享数据,以乘法举例
sf64Matrix<D> Envaluator::mul(const sf64Matrix<D>& left, const sf64Matrix<D>& right);
  1. 密文数据表示 (Encryptor) 使用通信子与参与方交换数据,表示为本地数据。以int数据为例
// 本地i64类型转换为共享的si64类型数据,comm用于数据已经与其他参与方共享通信使用
si64 Sh3Encryptor::localInt(CommPkg & comm, i64 val);


// 从通信子获取一个si64类型的共享数据
si64 Sh3Encryptor::remoteInt(CommPkg & comm);

// 使用异步回调任务的方式将本地的i64类型数据转换为共享的si64类型数据
Sh3Task Sh3Encryptor::localInt(Sh3Task dep, i64 val, si64 & dest);

// 使用异步回调任务的方式从通信子获取一个si64类型的共享数据
Sh3Task Sh3Encryptor::remoteInt(Sh3Task dep, si64 & dest)
  1. 通信子 (CommPkg) 管理若干个参与方的通信信道,用于交换密文数据,需要根据协议模型定义参与方的通信子中的通信信道以及getter方法。

(4) Share随机数生成和交换( ShareGen) 用于协议生成SecretShare随机数

使用的类

  • 运行时 (Runtime):管理用于通信子执行的异步任务列表,在算子( Envaluator)和密文数据表示 (Encryptor)中需要传入唯一的Runtime对象引用。
  • ShareOT:不经意传输工具,会使用通信子。可以根据需要继承实现ShareOT的变种。
  • 本地数据类型 :数fp、矩阵fpMatrix,具体见代码type包
  • 共享数据类型:浮点共享sf64、整型共享si64、矩阵si64Matrix/sf64Matrix,具体见代码type包

算法开发

算法在安全协议之上开发,使用协议中的定义的

  • 算子( Envaluator)
  • 密文数据表示 (Encryptor)
  • 通信子 (CommPkg)
  • Share随机数生成和交换( ShareGen)

算法对象初始化过程如下伪代码:

// 创建通信子
CommPkg comm (party0_channel, party1_channel, ...)

// 创建并从初始化 runtime,并指定runtime使用的通信子
runtime = CreateRunTimeObject(partyIdx)
runtime.init(partyIdx, comm)

// 初始化算子 Envaluator)和密文数据表示 (Encryptor)对象
env = Envaluator(partyIdx, comm)
enc = Encryptor(partyIdx, comm)

算法根据需要实现自己的MPC计算方法,如:mul、add、sort等等,可以参考aby3ML类的实现。

此页面是否有帮助?

Happy React is loading...