У меня есть эти настройки печати
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
выполнить evaluator.add()
на моем Ciphertexts
или он может создать новый раз для этой цели?
Для варианта 2 второй человек должен иметь доступ к моему хранилищу public_key
потому что создание new_public_key
, new_secret_key
набор не позволит мне расшифровать любые данные, зашифрованные с new_public_key
правильно, верно?
Теперь, чтобы сделать вещи более запутанными 🙂 скажем, второй человек создал свой собственный new_public_key
, new_secret_key
и загрузил свой Ciphertexts
в какой-то другой таблице в той же базе данных. Теперь я хочу выполнить некоторые перекрестные вычисления, используя его и мой Ciphertexts
, Есть ли способ, чтобы это сработало, или это никогда не сработает, потому что каждый из нас использовал разные public_key
для шифрования?
Для варианта 1 второму человеку нужны только мои сохраненные пармы для выполнения
valuator.add () в моих зашифрованных текстах или он может создать новый один раз для этого
цель?
Другая сторона должна знать, каковы ваши параметры шифрования. Более того, EncryptionParameters
Объект зависит только от этих параметров: вы можете передать его в сериализованном (двоичном) формате, используя EncryptionParameters::save
а также load
или дайте им знать другим способом, чтобы они могли создавать свои собственные EncryptionParameters
объект, и это будет работать.
Для варианта 2 второй человек должен иметь доступ к моему хранилищу
public_key, потому что создание new_public_key, набора new_secret_key будет
не позволяет мне расшифровывать любые данные, зашифрованные с помощью new_public_key
правильно, верно?
Чтобы второму человеку для шифрования данных вам понадобилось расшифровать, ему нужен ваш открытый ключ. Да, это должен быть тот же открытый ключ, который вы сохранили. Теоретически было бы возможно создать несколько открытых ключей, соответствующих одному и тому же секретному ключу, но SEAL 2.3.1 не поддерживает это.
Теперь, чтобы сделать вещи более запутанными 🙂 скажем, второй человек имеет
создал свой собственный new_public_key, new_secret_key и загрузил свой собственный
Зашифруйте в другой таблице в той же базе данных. Теперь хочу
выполнить некоторые перекрестные вычисления, используя его и мои шифротексты. Есть
способ для этого работать, или он никогда не может работать, потому что каждый из нас использовал
разные public_key для шифрования?
Это не может работать; вам нужно будет расшифровать с секретным ключом, соответствующим открытому ключу, который использовался для шифрования. В этих сценариях можно настроить службу переключения ключей, введя не сговорчивую третью сторону, единственной задачей которой является получение шифротекстов, зашифрованных под одним ключом, переключение их на использование другого ключа с использованием некоторого ключа и пересылка их нужному получателю. , SEAL 2.3.1 не поддерживает такие общие ключевые ключи. В качестве альтернативы, существуют некоторые многоключевые схемы FHE, которые теоретически допускают такого рода поведение (обе стороны должны помочь в расшифровке), но в настоящее время они не очень эффективны и не реализованы ни в одной из известных мне библиотек.
Других решений пока нет …