Чтение оставшегося бюджета шума зашифрованных текстов без секретного ключа

Я использую 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 без секретного ключа? Эти ситуации важны, когда я или кто-то другой выполняет некоторые вычисления с внешне сохраненными зашифрованными текстами, например в облачной базе данных и необходимо проверить серверную часть бюджета шума, не раскрывая секретный ключ.


person TalG    schedule 10.10.2018    source источник


Ответы (1)


Класс Simulation предназначен для оценки потребления бюджета шума при различных операциях, так что эти операции фактически не должны выполняться с реальными данными. Более того, он использует эвристическую оценку верхних границ для потребления шума, т.е., скорее всего, он переоценивает потребление шума, и этот эффект становится более выраженным, когда вычисления более сложны, что иногда приводит к огромным завышенным оценкам потребления шума. Конечно, идея состоит в том, что вычисления гарантированно работают, если они работают в соответствии с симулятором. Типичное использование Simulation будет через ChooserPoly (и связанные) классы; это продемонстрировано в одном из примеров в SEALExamples/main.cpp для SEAL версии ‹3.0.

Невозможно узнать или оценить шум в зашифрованном тексте, не зная, как этот зашифрованный текст был создан. Поэтому, если я дам вам зашифрованный текст, ничего не сообщая (кроме параметра шифрования), вы не сможете ничего знать о бюджете шума, если не знаете секретный ключ. Я согласен с тем, что в некоторых случаях для кого-то может быть важно сразу узнать, действительно ли зашифрованный текст для дальнейших вычислений, но это невозможно без какого-либо внешнего механизма.

person Kim Laine    schedule 18.10.2018