Реаринаризация одного зашифрованного текста в SEAL

Допустим, я рассчитал прибавление или же умножение из 2 Ciphertexts и сохранил результат в третьем. Если я хочу выполнить дополнительные математические операции с моим результатом Ciphertext (место назначения Chipertext), целесообразно ли использовать evaluator.relinearize() на это, прежде чем сделать это? Потому что, если я правильно понял, некоторые операции на Ciphertext вызвать результат Ciphertext размер должен быть больше 2. Если да, то будет ли это хорошим подходом для повторной линеаризации Ciphertext?

  • EvaluationKeys ev_keys;
  • int size = result.size();
  • keygen.generate_evaluation_keys(size - 2, ev_keys); // We need size - 2 ev_keys for performing this relinearization.
  • evaluator.relinearize(result, ev_keys);

1

Решение

Только Evaluator::multiply увеличит размер вашего зашифрованного текста. Каждый зашифрованный текст имеет размер не менее 2 (свежие шифры имеют размер 2), а умножение зашифрованных текстов размера a и b приводит к получению зашифрованного текста размера a + b-1. Таким образом, умножив два зашифрованных текста размера 2, вы получите зашифрованный текст размера 3. Почти во всех случаях вы захотите перелинейзировать на этом этапе, чтобы уменьшить размер до 2, поскольку дальнейшие операции с зашифрованным текстом размера 3 могут значительно дороже в вычислительном отношении.

Из этого правила есть некоторые исключения: скажем, вы хотите вычислить сумму многих продуктов. В этом случае вам может потребоваться перераспределить только конечную сумму, а не отдельные слагаемые, поскольку вычисление сумм шифротекстов размера 3 все еще очень быстро.

Чтобы сделать возможной линеаризацию, сторона, которая генерирует ключи, должна также генерировать ключи оценки следующим образом:

EvaluationKeys ev_keys;
keygen.generate_evaluation_keys(60, ev_keys);

Позже оценивающая сторона может использовать их как:

evaluator.relinearize(result, ev_keys);

Здесь я использовал 60 как decomposition_bit_count в generate_evaluation_keys, который является самым быстрым и чаще всего лучшим выбором. Вы, вероятно, никогда не должны использовать int count параметр, отличный от 1 (по умолчанию) в generate_evaluation_keys, Это предназначено для случаев использования, когда вы позволяете вашим зашифрованным текстам увеличиваться в размере больше 3, и вам необходимо сократить их, например, с. размер 4 или 5 до 2.

1

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

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

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