Рейтинг:0

Безопасность криптосистемы Пайлера

флаг cn

Я работаю над системой, которая может рассчитать среднюю зарплату для разных должностей в крупных компаниях. Я хочу использовать схему pailler для такого расчета.

У меня есть 3 поля, которые я хочу зашифровать: Название компании, должность, стаж работы и зарплата

Допустим, у меня есть 3 разные компании, которые хотят рассчитать среднюю зарплату по разным должностям, но не хотят обмениваться данными между собой. У нас есть такой набор данных

ИМЯ НАЗВАНИЕ РАБОТЫ Старшинство Зарплата
КОМПАНИЯ МЕНЕДЖЕР 2 10000
КОМПАНИЯ МЕНЕДЖЕР 3 15000
КОМПАНИЯ разработчик 1 18000
КОМПАНИЯ разработчик 5 11000
ИМЯ НАЗВАНИЕ РАБОТЫ Старшинство Зарплата
КОМПАНИЯ МЕНЕДЖЕР 2 12000
КОМПАНИЯ МЕНЕДЖЕР 3 15000
КОМПАНИЯ разработчик 1 8000
КОМПАНИЯ разработчик 5 15000

Компании A, B и C перед отправкой данных в мою систему шифруют их с помощью Pailler (все они используют один и тот же ключ), а затем отправляют их в мою систему. Моя система знает только открытый ключ, поэтому она может рассчитать среднюю заработную плату для конкретной должности, после чего моя система может отправить зашифрованный результат всем компаниям, а затем они могут расшифровать его с помощью закрытого ключа и проверить, какова средняя заработная плата на определенных должностях с учетом заработной платы в другие компании.

Чтобы избежать частотной атаки, я хочу также зашифровать текстовые данные (название компании и должность) с помощью pailler. Могу предположить, что название компании и должность не длиннее 20 байт. Теперь мой вопрос: Как вы думаете, эта система безопасна? Моя система хранит всю информацию в зашифрованном виде, но не знает закрытого ключа, поэтому не может его расшифровать. Допустим, в моей системе произошла утечка данных, и у кого-то есть вся информация в зашифрованном виде (закрытый ключ не скомпрометирован), как вы думаете, он может провести какую-либо атаку для расшифровки данных? Названия должностей в основном представляют собой словарные данные. Зарплата и трудовой стаж — это узкий диапазон чисел. Что вы думаете? Спасибо заранее за любые данные!

Рейтинг:0
флаг my

Моя система знает только открытый ключ, поэтому она может рассчитать среднюю зарплату для конкретной должности.

На самом деле, вы можете вычислить сумму; вычисление среднего, то есть значения $\text{Encrypt}_k( \lfloor sum / n \rfloor )$ довольно хитрая (и операция пола необходима, если $сумма$ не обязательно кратно $n$ количество значений).

Это может быть обработано либо вычислением $\text{Зашифровать}_k(сумма)$, и отправив это и значение $n$ в компанию А, В, С (которые могут расшифровать и потом разделить). Или, заставив каждую компанию неявно умножать каждую зарплату, которую они зашифровали, на $к!$ (за разумную стоимость $к$); тогда (при условии $n$ не слишком велико), мы можем вычислить $\text{Зашифровать}_k( n^{-1} \cdot сумма)$, что было бы значением, которое мы хотим (с подразумеваемым коэффициентом масштабирования).

Чтобы избежать частотной атаки, я хочу также зашифровать текстовые данные (название компании и должность) с помощью pailler.

Компании будут шифровать название должности или вы? Если бы они зашифровали его, у вас не было бы доступа к нему, и поэтому вы бы не знали, что суммировать.

С другой стороны, если бы они предоставили названия должностей в открытом виде, а вы их зашифровали, это было бы нормально (хотя, на мой взгляд, немного бессмысленно).

Тем не менее, ваш вопрос действительно был:

Допустим, в моей системе произошла утечка данных, и у кого-то есть вся информация в зашифрованном виде (закрытый ключ не скомпрометирован), как вы думаете, он может провести какую-либо атаку для расшифровки данных?

Все будет в порядке — с Пайе злоумышленник не может извлечь никакой информации из зашифрованного текста (при условии, что закрытый ключ и случайные значения, используемые в процессе шифрования, безопасны); даже если бы он знал, что открытый текст является одним из двух значений, он все равно не мог бы определить, какое именно.

Рейтинг:0
флаг cn

Что касается среднего, я думал о том, чтобы умножить каждую запись на $2$ чтобы убедиться, что это даже. В моем сервисе известно количество всех элементов, поэтому я могу разделить зашифрованные числа на незашифрованные значения. Затем зашифрованные результаты могут быть отправлены всем компаниям, и они могут разделить его на $2$ чтобы получить окончательный результат, как вы думаете, это нормально?

Что касается второго пункта, я забыл, что я не смогу узнать, равны ли две должности, используя Pailler. Раньше я думал о хранении хэшей, но это будет легко атаковать, потому что количество различных имен заданий ограничено. Я должен найти лучший алгоритм для этого.

poncho avatar
флаг my
"o я могу разделить зашифрованное число на незашифрованное значение"; У Пайе нет гомоморфной операции деления. Вы можете умножить на инверсию «незашифрованного значения»; однако, если только зашифрованное число не окажется кратным, это приведет к очень большому значению.
sorror avatar
флаг cn
Под делением я подразумеваю умножение на инверсию N (количество элементов). Каждая запись до этого будет умножаться на 2, а окончательный результат на стороне клиента будет делиться на 2. Я думаю, что это будет работать для всех чисел, я прав?
poncho avatar
флаг my
Нет, это не сработает, если N=3 и SUM=100...
sorror avatar
флаг cn
Ах точно! Теперь я понял вашу точку зрения с k! для к=3! я бы никогда не получил сумму = 100 (у меня может быть 96 или 102) это хорошо, но, вероятно, у меня будет много записей, так что k! это не то, что я хочу. Похоже, лучшее решение — отправить зашифрованную сумму и незашифрованное значение n. Спасибо за вашу помощь!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.