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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]