secretflow / heu

A high-performance homomorphic encryption algorithm library.
https://www.secretflow.org.cn/docs/heu/en/
Apache License 2.0
91 stars 41 forks source link

隐语半同态zpaillier方案做两浮点数乘,如何确保精度并正确解密解码? #84

Closed zhouhansheng closed 1 year ago

zhouhansheng commented 1 year ago

image 对于方式一,如果明文数据是整数,解密解码后结果是正确的,但如果明文也是浮点数,则没法保证解码后结果精度; 对于方式二,如果执行完乘之后,还需要执行密文加,则加运算的操作数在编码时的scale应该要变成scale*scale吧,若执行多次密文乘明文,然后再执行加,似乎需要时刻关注操作数的scale,请问这边有更方便的操作或是其他的处理吗?

usafchn commented 1 year ago

是的,现在没有更好的方法,方式一明文得是整数,方式二 scale 的倍数需要用户自行记录。

如果从整个 secretflow 的角度看,还有第三种方法,就是把 heu数据 to 到spu,在spu 中做 truncation,再 to 回 heu,但是中间涉及 he -> ss; ss -> he 转换以及网络传输,性能比较低的

usafchn commented 1 year ago

是的,现在没有更好的方法,方式一明文得是整数,方式二 scale 的倍数需要用户自行记录。

如果从整个 secretflow 的角度看,还有第三种方法,就是把 heu数据 to 到spu,在spu 中做 truncation,再 to 回 heu,但是中间涉及 he -> ss; ss -> he 转换以及网络传输,性能比较低的

其中方法三 HESS-LR 中有个例子 https://github.com/secretflow/secretflow/blob/main/secretflow/ml/linear/hess_sgd/model.py#L210

zhouhansheng commented 1 year ago

是的,现在没有更好的方法,方式一明文得是整数,方式二 scale 的倍数需要用户自行记录。 如果从整个 secretflow 的角度看,还有第三种方法,就是把 heu数据 to 到spu,在spu 中做 truncation,再 to 回 heu,但是中间涉及 he -> ss; ss -> he 转换以及网络传输,性能比较低的

其中方法三 HESS-LR 中有个例子 https://github.com/secretflow/secretflow/blob/main/secretflow/ml/linear/hess_sgd/model.py#L210

了解了,感谢回复!