Рейтинг:0

Поиск в криптосистеме Пайе

флаг us

Я внедрил криптосистему Пайе. Допустим, у меня есть зашифрованный массив E(x) = [2,4,5,10,0,20], и я хочу найти его, если в этом массиве существует 0. Из-за ограничений криптосистемы Пайе я не могу умножить два зашифрованных текста. Есть ли другой способ найти его?

fgrieu avatar
флаг ng
Что-то не так с расшифровкой массива и выяснением? Конечно, для этого требуется закрытый ключ, но тогда для вывода чего-либо об открытом тексте (кроме его длины) из зашифрованного текста обязательно потребуется закрытый ключ. Таким образом, если это простое решение неудовлетворительно, то в постановке задачи чего-то не хватает. Пока мы пытаемся изменить постановку задачи, означает ли «У меня есть зашифрованный массив», что вы не можете изменить способ кодирования данных перед их шифрованием?
Haroon Malik avatar
флаг us
Я хотел получить одно зашифрованное значение из массива E(x), которое при расшифровке указывает на наличие/отсутствие нуля. Я не могу расшифровать массив, так как моя задача - искать 0 в зашифрованных данных. Я не хочу возвращать полный массив человеку, у которого есть закрытый ключ.
Рейтинг:1
флаг ng

Paillier — это CPA-безопасный шифр, поэтому все, что мы можем вывести из зашифрованных текстов, требует закрытого ключа. Таким образом, «я хочу найти…» требует, чтобы «у меня» был закрытый ключ, а затем «у меня есть зашифрованный массив» подразумевает, что «я» могу расшифровать каждый из зашифрованных текстов, что делает поставленный вопрос спорным.

Поэтому мы изменим постановку задачи на: у нас есть не более $к$ небольшое целое число $m_i\in[0,\ell)$ (в рассматриваемой задаче мы хотим $k\ge6$, и $\ell>20$); и мы хотим, чтобы общедоступный метод выражал эти $m_i$ зашифрован как $c_i$ используя криптосистему Пайе, и объединить $c_i$ в один $с$ как у нас в Пайе. Это делает продукт по модулю $n$ принадлежащий $c_i$, и, возможно, умножить по модулю $n$ зашифрованным текстом для $0$ чтобы еще больше замаскировать результат. Мы хотим, чтобы человек, владеющий закрытым ключом, мог определить из $с$ если $0$ присутствовал в исходном наборе данных $m_i$. Это меняет две важные вещи в исходной постановке задачи:

  • Есть такое понятие объединения зашифрованных текстов $c_i$ в $с$, с $c_i$ недоступен для владельца закрытого ключа.
  • У нас нет «зашифрованного массива». Мы хотим иметь его, но можем свободно определять, как он будет сделан, если он использует шифрование, использующее Пайе. Без такой свободы решения нет, потому что расшифровка Пайе позволит получить только $m=(\sum m_i)\bmod n$ и нет никакого способа узнать из этого, если $m_i$ был $0$.

Вот то, о чем мы не только узнаем, если $0$ присутствовал в $m_i$, мы также узнаем, сколько раз каждое целое число в $[0,\ell)$ присутствовал в исходном массиве.

Для этого кодируем $m_i$ в $m'_i=(k+1)^{m_i}$ перед применением шифрования Пайе. Пайе позволит нам комбинировать зашифрованные тексты $c_i$ тогда расшифруй комбинацию $с$ в $m'=(\sum m'_i)\bmod n$. От $м'$ мы можем вывести, сколько раз каждое целое число в $[0,\ell)$ присутствовал в $m_i$, так долго как $к(к+1)^{\ell-1}<n$, выражая $м'$ в базе $к+1$ и глядя на цифры/конечности. Я пропущу алгебру о том, как это сделать, и воспользуюсь примером в десятичном виде (таким образом $к=9$). $m_0=2$, $m_1=4$, $m_2=5$, $m_3=10$, $m_4=0$, $m_5=20$ кодирует в $m'_0=100$, $m'_1=10000$, $m'_2=100000$, $m'_3=10000000000$, $m'_4=1$, $m'_5=0$, $m'_6=1000000000000000000000$ в десятичной системе. мы получим $m'=1000000000010000110101$, из чего мы можем сказать, что было ровно по одному каждому из $0$, $2$, $4$, $5$, $10$, $20$ в исходном массиве $m_i$, посмотрев на положение ненулевых цифр и увидев, что они $1$. Если $20$ был изменен на $0$, результат будет $m'=10000110102$ и мы бы знали, что было два $m_i=0$, потому что крайняя правая цифра $2$.


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

Для этого мы можем закодировать каждый $m_i\ne0$ к $m'_i=0$, и каждый $m_i=0$ к некоторому целому числу $m'_i$ в $[1,\lэтаж n/k\rэтаж)$ выбираются случайным образом с распределением, сильно смещенным в сторону низких значений. Когда расшифровка комбинации равна нулю, известно, что нуля в коде не было. $m_i$, и ничего больше. В противном случае известно, что был ноль, и утекло мало информации о том, сколько. Распределение может быть оптимизировано для минимизации этой утечки, это остается читателю в качестве упражнения.

Можно усовершенствовать вещи так, чтобы один с закрытым ключом и $c_i$ могу найти $m_i$, но (как указано выше) один с закрытым ключом и $с$ может получить мало информации о $m_i$, кроме этого $0$. Я не буду детализировать, потому что этого нет в постановке задачи.


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

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

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