【问题标题】:Working on SEAL Ciphertexts with multiple users与多个用户一起处理 SEAL 密文
【发布时间】: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_keysecret_keyparms 保存到文件中以备后用。我使用public_key 加密一些数据并将其存储在数据库中。我使用服务器上保存的parms 和数据库对存储的Ciphertexts 执行一些数学运算,例如evaluator.add(stored_ciphertext1, stored_ciphertext2, result_ciphertext3);.

现在假设另一个人想要:

  1. 对我存储的Ciphertexts进行计算。
  2. 将一些新的加密Ciphertexts 上传到我旁边的数据库中。

对于选项 1,第二个人只需要我存储的 parms 即可在我的 Ciphertexts 上执行 evaluator.add(),或者他可以为此创建一次新的吗?

对于选项 2,第二个人必须有权访问我存储的 public_key,因为创建 new_public_keynew_secret_key 集将不允许我正确解密使用 new_public_key 加密的任何数据,对吗?

现在让事情变得更加混乱 :-) 假设第二个人创建了自己的 new_public_keynew_secret_key 并将自己的 Ciphertexts 上传到同一数据库的其他表中。现在我想使用他和我的Ciphertexts 执行一些交叉计算。有没有办法让它工作,或者它永远无法工作,因为我们每个人都使用不同的public_key 进行加密?

【问题讨论】:

  • 这是出于学术原因还是生产代码?
  • @tadman 出于学术原因。

标签: c++ seal


【解决方案1】:

对于选项 1,第二个人只需要我存储的参数即可执行 evaluator.add() 在我的密文上,或者他可以为此创建一个新的 目的?

对方需要知道你的加密参数是什么。此外,EncryptionParameters 对象仅取决于这些参数:您可以使用EncryptionParameters::saveload 以序列化(二进制)格式将其提供给它们,或者以其他方式让它们知道,以便它们可以创建自己的@ 987654324@ 对象,它将起作用。

对于选项 2,第二个人必须有权访问我存储的 public_key 因为创建 new_public_key,new_secret_key 设置将 不允许我解密任何用 new_public_key 加密的数据 没错吧?

第二个人加密数据供您解密,他们需要您的公钥。是的,它必须与您存储的公钥相同。理论上,可以创建对应于同一个密钥的多个公钥,但 SEAL 2.3.1 不支持这一点。

现在让事情变得更加混乱 :-) 假设第二个人有 创建了自己的 new_public_key、new_secret_key 并上传了自己的 同一数据库上某个其他表中的密文。现在我想 使用他和我的密文执行一些交叉计算。在那儿 一种使它起作用的方法,否则它永远不会起作用,因为我们每个人都使用过 不同的公钥加密?

这行不通;您需要使用与用于加密的公钥对应的密钥进行解密。在这些场景中,可以通过引入非共谋第三方来设置密钥交换服务,该第三方的唯一任务是接收在一个密钥下加密的密文,使用某个密钥将它们切换为使用另一个密钥,然后将它们转发给正确的接收者.但 SEAL 2.3.1 不支持此类通用按键开关。或者,有一些多密钥 FHE 方案理论上允许这种行为(双方都需要帮助解密),但目前它们效率不高,并且在我所知道的任何库中都没有实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-22
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2023-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多