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