Работа с шифрованными текстами 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);,

Теперь скажем, что другой человек хочет:

  1. Делать расчеты на Ciphertexts хранится мной.
  2. Загрузите несколько новых зашифрованных 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 ответ

Решение

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

Другие вопросы по тегам