在没有密钥的情况下读取密文的剩余噪声预算

时间:2018-10-10 17:48:14

标签: c++ seal

我使用SEAL 2.3.1,这是我的参数设置:

seal::EncryptionParameters parms;
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

seal::SEALContext context(parms);

还有一些Ciphertext encrypted1;持有数字5。该手册说,人们可以使用seal :: Simulator类来读取噪声预算而无需密钥。我唯一发现的是simulator.h文件中的内容。

/**
Creates a simulation of a ciphertext encrypted with the specified encryption 
parameters and given invariant noise budget. The given noise budget must be 
at least zero, and at most the significant bit count of the coefficient 
modulus minus two.

@param[in] parms The encryption parameters
@param[in] noise_budget The invariant noise budget of the created ciphertext
@param[in] ciphertext_size The size of the created ciphertext
@throws std::invalid_argument if ciphertext_size is less than 2
@throws std::invalid_argument if noise_budget is not in the valid range
*/
Simulation(const EncryptionParameters &parms, int ciphertext_size, 
            int noise_budget);

我可以使用其他Ciphertext encrypted2进行设置:

seal::Simulation(parms, encrypted2.size(), (context.total_coeff_modulus().significant_bit_count() - log2(context.poly_modulus().coeff_count() - 1) - log2(context.plain_modulus().value()));

但是,使用此方法只能创建模拟的密文,而与实际的encrypted1密文噪声预算没有任何实际联系。

是否有一种方法可以在没有密钥的情况下近似encrypted1的噪声预算?当我或其他人对外部存储的密文进行一些计算时,例如这种情况很重要。在云数据库中,并且需要检查噪声预算服务器端而不显示秘密密钥。

1 个答案:

答案 0 :(得分:1)

Simulation类用于估计各种操作中的噪声预算消耗,因此这些操作实际上不必在真实数据上执行。而且,它使用启发式上限估计法来估计噪声消耗,即最有可能过高估计了噪声消耗,并且当计算更加复杂时,这种影响变得更加明显,有时会导致对噪声消耗的高估。当然,其思想是,如果计算能够根据模拟器进行,则可以保证计算能够正常进行。 Simulation的典型用法是通过ChooserPoly(及相关)类。 SEALExamples/main.cpp中针对SEAL版本<3.0的示例之一对此进行了证明。

在不知道密文是如何产生的情况下,不可能知道或估计密文中的噪声。因此,如果我给您一个密文而没有告诉您任何其他信息(加密参数除外),那么除非您知道秘密密钥,否则您应该不了解任何有关噪声预算的信息。我同意,在某些情况下,对于某人而言,立即了解密文是否仍可用于进一步的计算仍然很重要,但是没有某种外部机制是不可能的。