Работа с шифрованными текстами SEAL для нескольких пользователей - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть эти настройки 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 Ответ

0 голосов
/ 20 сентября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...