c++ - 在 SEAL 2.3.1 中设置 FractionalEncoder
问题描述
我正在使用这个参数设置:
parms.set_poly_modulus("1x^2048 + 1"); // n = 2048
parms.set_coeff_modulus(coeff_modulus_128(2048)); // q = 54-bit prime
parms.set_plain_modulus(1 << 8); // t = 256
使用此编码FractionalEncoder encoder(context.plain_modulus(), context.poly_modulus(), A, B, C);
器A=512, B=128
和C=2
如果我理解正确,那么A和B的设置取决于n的大小,这意味着 A + B <= 2048 必须成立,对吗?
使用上面的poly_modulus、coeff_modulis和plain_modulus设置决定A和B的大小时,一般规则是什么?由于选择较小的值并没有充分利用明文大小的潜力。我的猜测是A应该增加,因为B仅用于小数部分的精度。
解决方案
A 和 B 取决于您需要多少精度以及计算的复杂程度:更大的 A 和 B 会使加密更精确,它们也会使允许的乘法深度更小。后者是分数编码器表现不佳的原因之一。根据您的任务,您可能希望继续关注并使用包含新编码方法的下一个版本 (SEAL 3.0)。
推荐阅读
- python - 基于数据框列值的底图散点图颜色
- html - Bootstrap 4 搜索导航栏未显示在移动设备上
- r - 将列表存储在R中for循环内的列表中
- python-3.x - 是什么导致python IDE报告“在'function'中找不到引用'['”
- r - 如何在 R 中重新排列 x 轴上的条形
- javascript - Ngstyle 随机选择项目
- android - Android Intent Whatsapp
- python - keras 风格转移示例有一个无法解释的常数
- python - Matplotlib/SNS:绘制直方图,但在 y 轴上有另一个变量的平均值
- reactjs - React,如何使用单独文件中的菜单来调用 api 并将数据返回到主文件的不同部分