c++ - 带有 CKKS 的 Microsoft SEAL 中的矢量点积
问题描述
我目前正在尝试使用 Microsoft SEAL 库实现矩阵乘法方法。我创建了一个vector<vector<double>>
作为输入矩阵并用CKKSEncoder
. 然而,编码器将整个向量打包成一个向量,Plaintext
所以我只有一个vector<Plaintext>
,这让我失去了 2D 结构(当然我会有一个vector<Ciphertext>
后加密)。拥有一维向量允许我完全访问行而不访问列。
我设法在编码之前转置矩阵。这允许我将第一个矩阵的行和第二个矩阵的列(转置形式的行)按分量相乘,但我无法将结果向量的元素加在一起,因为它被打包成一个密文。我只需要弄清楚如何使向量点积在 SEAL 中工作以执行矩阵乘法。我错过了什么还是我的方法错了?
解决方案
KyoohyungHan 在问题中建议:https ://github.com/microsoft/SEAL/issues/138可以通过旋转输出向量并重复求和来解决旋转问题。
例如:
// my_output_vector is the Ciphertext output
vector<Ciphertext> rotations_output(my_output_vector.size());
for(int steps = 0; steps < my_output_vector.size(); steps++)
{
evaluator.rotate_vector(my_output_vector, steps, galois_keys, rotations_output[steps]);
}
Ciphertext sum_output;
evaluator.add_many(rotations_output, sum_output);
推荐阅读
- python - PyLint:模块“main_app”中没有名称“新文件”
- mysql - Spring Boot JPA:如何将字段映射到数据类型不固定的列
- java - 如何使用 java selenium 从显示无元素中获取文本
- regex - 如何使用正则表达式选择包含特定 XML 标记和内部特定文本的 XML 标记?
- android-studio - org.gradle.internal.exceptions.LocationAwareException:, org.gradle.api.ProjectConfigurationException:, AndroidStudio3.5.3
- android - TextWatcher 的数据绑定在 Android 上不起作用
- python - 使用 python 脚本发送带有多个嵌入图像的 html 电子邮件
- apache-camel - 使用 REST API 向 IBM MQ 生成消息。阿帕奇骆驼
- django - 在测试用例期间出现 mongodb 连接错误?
- kubernetes - 如何在 Kubernetes 中列出服务后面的流量的所有 Pod 的名称