【发布时间】:2020-05-13 22:09:11
【问题描述】:
我的 SEAL v2.3.1 中有这些 SEAL 设置:
seal::EncryptionParameters parms;
parms.set_poly_modulus("1x^2048 + 1");
parms.set_coeff_modulus(seal::coeff_modulus_128(2048));
parms.set_plain_modulus(1 << 8);
seal::SEALContext context(parms);
seal::IntegerEncoder encoder(context.plain_modulus());
seal::KeyGenerator keygen(context);
seal::PublicKey public_key = keygen.public_key();
seal::SecretKey secret_key = keygen.secret_key();
seal::Encryptor encryptor(context, public_key);
seal::Evaluator evaluator(context);
seal::Decryptor decryptor(context, secret_key);
我已将public_key、secret_key 和parms 保存到文件中以备后用。我使用public_key 加密一些数据并将其存储在数据库中。我使用服务器上保存的parms 和数据库对存储的Ciphertexts 执行一些数学运算,例如evaluator.add(stored_ciphertext1, stored_ciphertext2, result_ciphertext3);.
现在假设另一个人想要:
- 对我存储的
Ciphertexts进行计算。 - 将一些新的加密
Ciphertexts上传到我旁边的数据库中。
对于选项 1,第二个人只需要我存储的 parms 即可在我的 Ciphertexts 上执行 evaluator.add(),或者他可以为此创建一次新的吗?
对于选项 2,第二个人必须有权访问我存储的 public_key,因为创建 new_public_key、new_secret_key 集将不允许我正确解密使用 new_public_key 加密的任何数据,对吗?
现在让事情变得更加混乱 :-) 假设第二个人创建了自己的 new_public_key、new_secret_key 并将自己的 Ciphertexts 上传到同一数据库的其他表中。现在我想使用他和我的Ciphertexts 执行一些交叉计算。有没有办法让它工作,或者它永远无法工作,因为我们每个人都使用不同的public_key 进行加密?
【问题讨论】:
-
这是出于学术原因还是生产代码?
-
@tadman 出于学术原因。