Русская Википедия:Алгоритм слепого индексирования

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Алгоритм слепого индексирования — подраздел методов шифрования, позволяющих с помощью слепого индекса выполнять поиск по зашифрованным данным (файлам, документам и т. д.), не расшифровывая их.

Слепой индекс (Шаблон:Lang-en) — структура данных, которая хранится вместе с набором документов и поддерживает эффективный поиск по ключевым словам. То есть при наличии ключевого слова индекс возвращает указатель на документы, которые содержат это ключевое слово.[1]

Происхождение

Идея индексного «ослепления» пришла Ян-Ченг Чангу и Шаблон:Iw при исследовании модели Ind-cka. Модель описывает интуитивное предположение, что злоумышленник не может получить никакой информации из индексов, кроме как результаты предыдущих запросов. Суть модели заключается в том, что если есть документ <math>D</math>, содержащий <math>n</math> слов, из которых <math>m</math> штук уже знает злоумышленник, а множество оставшихся слов <math>n-m</math> задается <math>W</math>[2]. То в этом случае противник не сможет взломать оставшуюся часть документа, хоть и знает все пары индекс-документ и может получить значение односторонней функции с потайным входом всех известных ему слов. Для обеспечения такой безопасности, два зашифрованных документа одинакового размера должны иметь индексы, содержащие одинаковое количество ключевых слов. Чанг и Митценмахер расширили методы модели Ind-cka, создав собственную Ind2-ckamodel. Теперь она более безопасна, может обрабатывать слова переменной длины, но имеет ряд недостатков:

  1. Она вычислительно менее эффективна. Когда алгоритм построения индекса z-ind требует <math>O(n)</math> времени, их схема строится <math>3n+2^{d+1}</math>, где <math>2^d</math> — размер словаря. (Для многих шифров <math>2^d\gg n</math>)
  2. Неспособность обрабатывать произвольные обновления: их схемы используют предварительно построенные словари, где размер и содержание словаря фиксируются, когда словарь и индексы создаются для набора документов. Поскольку трудно предвидеть все возможные слова, которые должны быть проиндексированы, справедливо сказать, что их схемы не могут эффективно обрабатывать произвольные обновления.
  3. Относительно большие индексы фиксированного размера: независимо от размера документа, их индексы должны быть длиной <math>2^d</math> бит. Для небольших документов их индекс может быть во много раз больше, чем документ.[3]

Общая модель применения

Изначально есть база данных <math>DB = (M_1, ..., M_n)</math>, состоящая из <math>n</math> файлов, некоторые данные <math>W = (w_1,...,w_n)</math>. Из них извлекаются ключевые слова <math>w_j</math> и шифруются под действием ключа <math>K</math> клиента с помощью алгоритма <math>BuildIndex</math>. Часто требуется зашифровать и документ, но уже под действием ключа <math>K'\neq K</math>. В данном описании алгоритм шифровки документа обозначается <math>Enc</math>. Тогда база данных примет вид:

<math>I = BuildIndex_K(DB = (M_1,...,M_n), W = (w_1,...,w_n)); C=Enc_{K'}(M_1,...,M_n).</math>

Файл:Модель использования слепого индекса.png
Общая модель схемы шифрования на основе слепого индекса

Для самого поиска клиент создает функцию одностороннюю функцию с потайным входом <math>T = Trapdoor_K(f)</math>, где <math>f</math> — предикат для <math>w_j</math>. Используя <math>T</math> сервер может выполнить поиск по индексу алгоритмом <math>Search</math> и вернуть клиенту те документы, в которых содержится зашифрованное слово[3].

Безопасность

Любая схема шифрования с возможностью поиска имеет утечку информации, которая делится на 3 группы: метаданных слепого индекса, шаблона поиска и шаблона доступа. Где метаданными слепого индекса называется информация о ключевых словах, содержащихся в слепом индексе. Утечка происходит из сохраненного шифротекста или слепого индекса. Эта информация может включать в себя количество ключевых слов, содержащихся в каждом документе, длину и количество документов. Чтобы уменьшить вероятность утечки и увеличить криптостойкость системы, часто используется подход усеченного слепого индекса. В таком случае индекс урезается до заданного числа битов, и может быть рассмотрен в качестве фильтра Блума. Тогда вместо точного ответа на запрос, содержится ли какое-то слово в файле, клиент будет получать вероятность вхождения слова в файл. Важной особенностью этого фильтра является отсутствие ложноотрицательных срабатываний. Фильтр Блума может утверждать, что элемент является частью набора, когда он не был вставлен, но никогда не сообщит о том, что вставленный элемент отсутствует в наборе.

Но даже в таком случае возможна утечка данных. Поэтому важно знать точную формулу определения безопасной верхней границы объёма информации, которая может безопасно утечь, не раскрывая повторяющиеся открытые тексты: <math>C = R / 2^{-s}</math>,

где <math>S = \textstyle \sum_{0}^n \displaystyle min (L_i, K_i),</math> <math>n</math> — число слепых индексов, <math>L_i</math> — длина слепого индекса (в битах), <math>K_i</math> — длина ключа (в битах), <math>R </math> — ряд зашифрованных файлов, которые используют эти слепые индексы.

Параметры должны быть подобраны так, чтобы <math>2\leqslant C < \surd R </math>. Если <math>C < 2 </math>, то злоумышленник сможет сделать выводы, что некоторые тексты идентичны, что нарушает стандартное понятие безопасной схемы. В противном случае, если <math>C>\surd R </math>, то будет случаться слишком много коллизий, что сильно повлияет на производительность алгоритма.[4]

Пример (Acra Searchable Encryption)

В современном мире большинство эффективных схем SE имеют одну общую проблему. У них есть утечка шаблона поиска, который показывает, были ли выполнены 2 поисковых запроса для одного и того же ключевого слова. Подвергая себя дополнительному риску быть вскрытыми статистическим анализом (то есть злоумышленник узнает о ключевых словах открытого текста). Acra Database Security Suite решает эту проблему, используя метод слепого индексирования. Так же для увеличения безопасности алгоритма Acra использует усечение слепого индекса, что приводит ложным срабатываниям и к коллизиям. Тогда вводится AcraServer (расположенный между клиентом и базой данных), фильтрующий нерелеватные записи из ответа, и приложение получает только соответствующие расшифрованные данные.[4]

Примечания

Шаблон:Примечания

Ссылки