Lattigo是一个Go模块,实现了基于全RNS环-带误差学习(Ring-Learning-With-Errors)的同态加密原语和基于多方同态加密的安全协议。该库具有以下特点:
Lattigo旨在支持分布式系统和微服务架构中的同态加密,而Go语言因其天然的并发模型和可移植性成为这些系统的常见选择。
Lattigo是一个严格层次化的库,其包形成了一个从低级算术功能到高级同态电路的线性依赖链。上图展示了Lattigo包的组织结构。
lattigo/ring:最底层是ring包,提供RNS基多项式的模运算,包括:RNS基扩展;RNS重缩放;数论变换(NTT);均匀、高斯和三元采样。
lattigo/core:此包实现了库的核心密码学功能,直接基于ring包提供的算术功能:
rlwe:通用RLWE基同态加密的公共基 础。提供所有同态功能并定义了非方案特定的所有结构。包括明文、密文、密钥生成、加密、解密和密钥切换,以及其他更高级的原语,如RLWE重打包。
rgsw:环GSW密文和外部乘积的全RNS变体。
lattigo/schemes:RLWE基同态加密方案的实现位于schemes包中:
bfv:Brakerski-Fan-Vercauteren尺度不变同态加密方案的全RNS变体。通过bgv方案的包装器实例化。提供整数上的模运算。
bgv:Brakerski-Fan-Vercauteren尺度不变(BFV)和Brakerski-Gentry-Vaikuntanathan(BGV)同态加密方案的全RNS泛化。提供整数上的模运算。
ckks:近似数字算术同态加密(HEAAN,又称CKKS)方案的全RNS实现。在其经典变体中提供复数上的定点近似算术,在其共轭不变变体中提供实数上的定点近似算术。
lattigo/circuits:circuits包为bgv和ckks密码系统提供了一系列选定的同态电路实现:
bgv/lintrans,ckks/lintrans:bgv和ckks的任意线性变换和槽置换。方案通用对象和函数位于common/lintrans中。
bgv/polynomial,ckks/polynomial:bgv和ckks的多项式求值电路。方案通用对象和函数位于common/polynomial中。
ckks/minimax:ckks的极小极大复合多项式求值器。
ckks/comparison:ckks方案的基于比较的同态电路,如sign、max和step。
ckks/inverse:ckks的同态逆运算电路。
ckks/mod1