Searchable Encryption: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
дополнение, источники, уточнение
Строка 1: Строка 1:
'''Шифрование с возможностью поиска''' ({{lang-en|Searchable Encryption}}) — класс [[Криптография|криптографических]] [[Шифрование|алгоритмов шифрования]], в которых существует возможность осуществлять поиск по зашифрованным данным (файлам, записям базы данных и т.д.). Областью применения является предоставление приватности данных, хранимых на недоверенном удалённом ресурсе.
'''Шифрование с возможностью поиска''' ({{lang-en|Searchable Encryption}}) — класс [[Криптография|криптографических]] [[Шифрование|алгоритмов шифрования]], в которых существует возможность осуществлять поиск по зашифрованным данным (файлам, записям базы данных и т.д.). Областью применения является предоставление приватности данных, хранимых на недоверенном удалённом ресурсе.


В общем случае, в основе такого шифрования могут лежать как [[Симметричные_криптосистемы|симметричные]], так и [[Криптосистема_с_открытым_ключом|ассимметриичные]] шифры. Однако, так как практические задачи предполагают шифрование большого количества данных, чаще встречается использование симметричного шифрования с поиском (соответственно, {{lang-en|Searchable Symmetric Encryption}} или сокращённо '''''SSE''''').
В общем случае, в основе такого шифрования могут лежать как [[Симметричные_криптосистемы|симметричные]], так и [[Криптосистема_с_открытым_ключом|асимметричные]] шифры. Однако, так как практические задачи предполагают шифрование большого количества данных, чаще встречается использование симметричного шифрования с поиском (соответственно, {{lang-en|Searchable Symmetric Encryption}} или сокращённо '''''SSE'''''). Большинство асимметричных подходов основаны на шифровании по открытому ключу с поиском по ключевым словам ({{Lang-en|Public Key Encryption with Keyword Search}}, сокращённо '''''PEKS''''')<ref name=":3">{{Статья|автор=Christoph Bösch, Pieter Hartel, Willem Jonker, Andreas Peter|заглавие=A Survey of Provably Secure Searchable Encryption|ссылка=https://research.utwente.nl/en/publications/a-survey-of-provably-secure-searchable-encryption|язык=Undefined|издание=ACM Computing Surveys|год=2014/08|том=47|выпуск=2|страницы=1–51|issn=0360-0300|doi=10.1145/2636328}}</ref>.


== История ==
== История ==
Строка 12: Строка 12:
Первая работа в направлении поиска по шифрованным данным была изложена в 2000-м году Dawn Xiaodong Song, David Wagner и Adrian Perrig. Их алгоритм предполагал поиск по шифротексту с точным совпадением<ref name=":1">{{Статья|автор=Dawn Xiaoding Song, D. Wagner, A. Perrig|заглавие=Practical techniques for searches on encrypted data|ссылка=http://ieeexplore.ieee.org/document/848445/|язык=|издание=Proceeding 2000 IEEE Symposium on Security and Privacy. S P 2000|тип=|год=2000|месяц=|число=|том=|номер=|страницы=44–55|issn=|doi=10.1109/secpri.2000.848445|ref=Song et al}}</ref>.
Первая работа в направлении поиска по шифрованным данным была изложена в 2000-м году Dawn Xiaodong Song, David Wagner и Adrian Perrig. Их алгоритм предполагал поиск по шифротексту с точным совпадением<ref name=":1">{{Статья|автор=Dawn Xiaoding Song, D. Wagner, A. Perrig|заглавие=Practical techniques for searches on encrypted data|ссылка=http://ieeexplore.ieee.org/document/848445/|язык=|издание=Proceeding 2000 IEEE Symposium on Security and Privacy. S P 2000|тип=|год=2000|месяц=|число=|том=|номер=|страницы=44–55|issn=|doi=10.1109/secpri.2000.848445|ref=Song et al}}</ref>.


В то время, как алгоритм SWP00 строил метод шифрования, где поиск производится по самому шифротексту, большинство дальнейших реализаций предполагают построение зашифрованного индекса<ref name=":3" />, поиск по которому занимает [[Временная сложность алгоритма|меньше времени]]<ref name=":4">{{Статья|автор=Eu-Jin Goh|заглавие=Secure Indexes|ссылка=http://eprint.iacr.org/2003/216|год=2003|номер=216}}</ref><ref name=":2">{{Статья|автор=Reza Curtmola, Juan Garay, Seny Kamara, Rafail Ostrovsky|заглавие=Searchable symmetric encryption: Improved definitions and efficient constructions|ссылка=http://www.medra.org/servlet/aliasResolver?alias=iospress&doi=10.3233/JCS-2011-0426|язык=en|издание=Journal of Computer Security|тип=|год=2011-01-01|месяц=|число=|том=19|выпуск=5|номер=|страницы=895–934|issn=0926-227X|doi=10.3233/jcs-2011-0426|ref=Curtmola et al}}</ref>, позволяет обновлять данные на сервере (dynamic SSE)<ref>{{Статья|автор=Seny Kamara, Charalampos Papamanthou, Tom Roeder|заглавие=Dynamic Searchable Symmetric Encryption|ссылка=http://doi.acm.org/10.1145/2382196.2382298|издание=Proceedings of the 2012 ACM Conference on Computer and Communications Security|место=New York, NY, USA|издательство=ACM|год=2012|страницы=965–976|isbn=9781450316514|doi=10.1145/2382196.2382298}}</ref>, или использовать [[:en:Web search query#Structured queries|расширенный поиск]]<ref>{{Статья|автор=David Cash, Stanislaw Jarecki, Charanjit Jutla, Hugo Krawczyk, Marcel-Cătălin Roşu|заглавие=Highly-Scalable Searchable Symmetric Encryption with Support for Boolean Queries|ссылка=https://link.springer.com/chapter/10.1007/978-3-642-40041-4_20|язык=en|издание=Advances in Cryptology – CRYPTO 2013|издательство=Springer, Berlin, Heidelberg|год=2013|страницы=353–373|isbn=9783642400407, 9783642400414|doi=10.1007/978-3-642-40041-4_20}}</ref><ref name=":5">{{Статья|автор=Emily Shen, Elaine Shi, Brent Waters|заглавие=Predicate Privacy in Encryption Systems|ссылка=https://link.springer.com/chapter/10.1007/978-3-642-00457-5_27|язык=en|издание=Theory of Cryptography|издательство=Springer, Berlin, Heidelberg|год=2009-03-15|страницы=457–473|isbn=9783642004568, 9783642004575|doi=10.1007/978-3-642-00457-5_27}}</ref>. Платой за это является увеличение размера шифрованных данных и повышение риска утечек.
Возможность поиска предполагает возможное наличие утечек информации с каждым поисковым запросом. Они могут быть связанны с детерминированностью этапов шифрования, ограничениями входных данных и т.д. В качестве возможного решения рассматривалось использование [[:en:Oblivious ram|en:Oblivious_RAM]] для скрытия работы сервера и уменьшения утечек<ref>{{Статья|автор=Raphael Bost|заглавие=∑OφOς: Forward Secure Searchable Encryption|ссылка=http://doi.acm.org/10.1145/2976749.2978303|язык=|издание=Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security|тип=|место=New York, NY, USA|издательство=ACM|год=2016|месяц=|число=|том=|номер=|страницы=1143–1154|isbn=9781450341394|issn=|doi=10.1145/2976749.2978303}}</ref>, но этот метод также и критиковался<ref>{{Статья|автор=Muhammad Naveed|заглавие=The Fallacy of Composition of Oblivious RAM and Searchable Encryption|ссылка=https://eprint.iacr.org/2015/668|год=2015|номер=668}}</ref>.


В статье Eu-Jin Goh 2003-го года<ref name=":4" /> впервые был предложен поиск по шифрованному индексу, который предполагал поиск точного совпадения. А в 2009-ом в статье Emily Shen, Elaine Shi и Brent Waters - приватный [[Предикат|предикативный]] поиск<ref name=":5" />.
В последствии было представлено множество алгоритмов, использующих для подтверждения [[Криптографическая стойкость|криптостойкости]] определения, данные в статье Reza Curtmola, Juan Garay, Seny Kamara и Rafail Ostrovsky<ref name=":2">{{Статья|автор=Reza Curtmola, Juan Garay, Seny Kamara, Rafail Ostrovsky|заглавие=Searchable symmetric encryption: Improved definitions and efficient constructions|ссылка=http://www.medra.org/servlet/aliasResolver?alias=iospress&doi=10.3233/JCS-2011-0426|язык=en|издание=Journal of Computer Security|тип=|год=2011-01-01|месяц=|число=|том=19|выпуск=5|номер=|страницы=895–934|issn=0926-227X|doi=10.3233/jcs-2011-0426|ref=Curtmola et al}}</ref>.

В направлении PEKS первый результат представлен в статье 2004-го за авторством Dan Boneh, Giovanni Di Crescenzo, Rafail Ostrovsky и Giuseppe Persiano<ref name=":0" />.

Изначально, при проверке новых алгоритмов на защищённость, проверялись только общие требования к криптографическим системам. Определения [[Криптографическая стойкость|криптостойкости]] для SE, учитывающие особенности возможных новых видов утечек, были даны в статье 2006-го года от Reza Curtmola, Juan Garay, Seny Kamara и Rafail Ostrovsky<ref name=":2" />.

Возможность поиска предполагает возможное наличие утечек информации с каждым поисковым запросом. Они могут быть связанны с детерминированностью этапов шифрования, ограничениями входных данных и т.д. В качестве возможного решения рассматривалось использование [[:en:Oblivious ram|en:Oblivious_RAM]] для скрытия работы сервера и уменьшения утечек<ref>{{Статья|автор=Raphael Bost|заглавие=∑OφOς: Forward Secure Searchable Encryption|ссылка=http://doi.acm.org/10.1145/2976749.2978303|язык=|издание=Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security|тип=|место=New York, NY, USA|издательство=ACM|год=2016|месяц=|число=|том=|номер=|страницы=1143–1154|isbn=9781450341394|issn=|doi=10.1145/2976749.2978303}}</ref>, но этот метод также и критиковался<ref>{{Статья|автор=Muhammad Naveed|заглавие=The Fallacy of Composition of Oblivious RAM and Searchable Encryption|ссылка=https://eprint.iacr.org/2015/668|год=2015|номер=668}}</ref>.


== Описание принципа ==
== Описание принципа ==


Для удовлетворения потребности в поиске, первым был предложен алгоритм Сонг-Вагнера-Перрига, при котором пользователь делает поисковые запросы на [[файловый сервер]] с зашифрованными данными, но при этом не раскрывает ему ни содержимого файлов, ни самого поискового запроса. Шифрование заключается в выполнении обратимой операции (например, [[Сложение по модулю 2|XOR]]) с псевдослучайной последовательностью, а ключом, соответственно, является зерно ГПСП. Такая схема выполняет поиск за линейное от размера шифротекста время, а её надёжность зависит от качества псевдослучайной последовательности и прешифрования<ref name=":1" />.
Для удовлетворения потребности в поиске, первым был предложен алгоритм Сонг-Вагнера-Перрига, при котором пользователь делает поисковые запросы на [[файловый сервер]] с зашифрованными данными, но при этом не раскрывает ему ни содержимого файлов, ни самого поискового запроса. Шифрование заключается в выполнении обратимой операции (например, [[Сложение по модулю 2|XOR]]) с псевдослучайной последовательностью, а ключом, соответственно, является зерно ГПСП. Такая схема выполняет поиск за линейное от размера шифротекста время, а её надёжность зависит от качества псевдослучайной последовательности и прешифрования<ref name=":1" />.

Вместо использования самого документа для поиска, предлагались схемы с составлением индекса, поиск по которому занимает [[Временная сложность алгоритма|меньше времени]]<ref name=":2" />, позволяет обновлять данные на сервере (dynamic SSE)<ref>{{Статья|автор=Seny Kamara, Charalampos Papamanthou, Tom Roeder|заглавие=Dynamic Searchable Symmetric Encryption|ссылка=http://doi.acm.org/10.1145/2382196.2382298|издание=Proceedings of the 2012 ACM Conference on Computer and Communications Security|место=New York, NY, USA|издательство=ACM|год=2012|страницы=965–976|isbn=9781450316514|doi=10.1145/2382196.2382298}}</ref>, или использовать [[:en:Web search query#Structured queries|расширенный поиск]]<ref>{{Статья|автор=David Cash, Stanislaw Jarecki, Charanjit Jutla, Hugo Krawczyk, Marcel-Cătălin Roşu|заглавие=Highly-Scalable Searchable Symmetric Encryption with Support for Boolean Queries|ссылка=https://link.springer.com/chapter/10.1007/978-3-642-40041-4_20|язык=en|издание=Advances in Cryptology – CRYPTO 2013|издательство=Springer, Berlin, Heidelberg|год=2013|страницы=353–373|isbn=9783642400407, 9783642400414|doi=10.1007/978-3-642-40041-4_20}}</ref>. Платой за это является увеличение размера шифрованных данных и повышение риска утечек.


Кроме методов с основой из симметричного шифрования, своё место имеют алгоритмы с использованием открытого ключа. Например, [[Электронная почта|электронные письма]] могут шифроваться для адресата его открытым ключом. Адресат может пожелать хранить их на удалённом почтовом сервере, но сохранить возможность поиска. Либо, схема может быть рассчитана на то, что из зашифрованного сообщения почтовый сервер сможет понять, что в нём, например, содержится ключевое слово ("важно") и составит маршрут или установит приоритет пересылки письма соответствующим образом, но не узнает ничего кроме этого слова<ref name=":0" /><ref>{{Статья|автор=Mihir Bellare, Alexandra Boldyreva, Adam O'Neill|заглавие=Deterministic and Efficiently Searchable Encryption|ссылка=http://eprint.iacr.org/2006/186|год=2006|номер=186}}</ref>.
Кроме методов с основой из симметричного шифрования, своё место имеют алгоритмы с использованием открытого ключа. Например, [[Электронная почта|электронные письма]] могут шифроваться для адресата его открытым ключом. Адресат может пожелать хранить их на удалённом почтовом сервере, но сохранить возможность поиска. Либо, схема может быть рассчитана на то, что из зашифрованного сообщения почтовый сервер сможет понять, что в нём, например, содержится ключевое слово ("важно") и составит маршрут или установит приоритет пересылки письма соответствующим образом, но не узнает ничего кроме этого слова<ref name=":0" /><ref>{{Статья|автор=Mihir Bellare, Alexandra Boldyreva, Adam O'Neill|заглавие=Deterministic and Efficiently Searchable Encryption|ссылка=http://eprint.iacr.org/2006/186|год=2006|номер=186}}</ref>.


== Классификация ==
===Пример (алгоритм SWP00) ===
SE основана на наличии клиент-серверной архитектуры. Как следствие, различные подходы к созданию алгоритмов могут различаться по количеству клиентов, имеющих доступ к данным. Могут быть один или несколько клиентов с правом размещать данные на сервере (записывающие), и один или несколько клиентов с правом производить поиск (читающие). Таким образом, выделяются 4 класса алгоритмов<ref name=":3" />:
Рассмотрим сначала пример, демонстрирующий основную идею. Пусть пользователь Алиса хочет зашифровать документ из слов <math display="inline">W_1, W_2, ..., W_l</math>. Её цель - произвести обратимую операцию XOR над каждым из слов с каким-то секретным значением<ref name=":1" />.
* один пишущий/один читающий (S/S)
* один пишущий/много читающих (S/M)
* много пишущих/один читающий (M/S)
* много пишущих/много читающих (M/M)
К классу S/S относятся, в большей степени, алгоритмы симметричного шифрования, так как хозяин информации будет хранить у себя единственный ключ. Алгоритмы класса M/S предполагают наличие множества клиентов, шифрующих данные для единственного получателя. Так, например, устроена система [[Электронная почта#Шифрование почты|шифрованной электронной почты]]. Стоит отметить, что алгоритмы этого класса можно тривиальным образом превратить в S/S алгоритмы, если читающий клиент не будет распространять открытый ключ<ref name=":3" />.

В обзорной статье 2016-го года<ref name=":3" /> приводятся статистика наличия исследований в различных классах SE:
{| class="wikitable"
|+Исследования в области SE
!Архитектура
!S/S
!S/M
!M/S
!M/M
|-
|точное совпадение
|✓
|✓
|✓
|✓
|-
|конъюнкция
|✓
| -
|✓
|✓
|-
|сравнение
| -
| -
|✓
| -
|-
|поднабор
|(✓)
| -
|✓
| -
|-
|диапозон
|(✓)
| -
|✓
| -
|-
|wildcard
| -
| -
|✓
| -
|-
|fuzzy
|✓
| -
| -
| -
|-
|Количество схем
|28
|2
|19
|9
|-
|Количество реализаций
|6
|1
|0
|2
|-
|Временной промежуток
|2000–2013
|2009–2011
|2004–2011
|2007–2008
|}

==Пример (алгоритм SWP00) ==
Алгоритм Song-Wagner-Perrig был предложен в статье 2000-го года и является разновидностью симметричного шифрования с поиском<ref name=":1" />. Он работает за линейное от размеров шифруемых данных время и использует простые [[Криптография#Криптографические примитивы|криптографические примитивы]], что делает его удобным для рассмотрения.

===== Базовая идея =====
Для простоты, рассмотрим сначала пример, демонстрирующий основную идею, в ущерб некоторой приватности.

Пусть пользователь Алиса хочет зашифровать документ из слов <math display="inline">W_1, W_2, ..., W_l</math>. Её цель - произвести обратимую операцию XOR над каждым из слов с каким-то секретным значением<ref name=":1" />.


Для этого ей понадобятся<ref name=":1" />:
Для этого ей понадобятся<ref name=":1" />:


* [[Генератор_псевдослучайных_чисел|псевдослучайный генератор]] G с зерном k, используется для создания [[Псевдослучайная_последовательность|последовательности]] S, и k является частью её секретного ключа
* [[Генератор_псевдослучайных_чисел|псевдослучайный генератор]] ''G'' с зерном ''k'', используется для создания [[Псевдослучайная_последовательность|последовательности]] ''S'', и ''k'' является частью её секретного ключа


* псевдослучайная функция F с ключами <math display="inline">k_i</math>, необходимая для расширения элементов последовательности S до длинны слов (возвращает m-битные значения)
* псевдослучайная функция ''F'' с ключами <math display="inline">k_i</math>, необходимая для расширения элементов последовательности ''S'' до длинны слов (возвращает ''m''-битные значения)


* псевдослучайная функция f с ключом <math display="inline">k'</math>, для генерации ключей <math display="inline">k_i</math>
* псевдослучайная функция ''f'' с ключом <math display="inline">k'</math>, для генерации ключей <math display="inline">k_i</math>


* [[Случайные_перестановки|псевдослучайная перестановка]] E с ключом <math display="inline">k_s</math>, для прешифрования
* [[Случайные_перестановки|псевдослучайная перестановка]] ''E'' с ключом <math display="inline">k_s</math>, для прешифрования


Алгоритм шифрования<ref name=":1" />:
Алгоритм шифрования<ref name=":1" />:


# Сначала Алиса генерирует последовательность <math display="inline">S_1, S_2, ..., S_l</math>.
# Сначала Алиса генерирует последовательность <math display="inline">S_1, S_2, ..., S_l</math>.
# Чтобы зашифровать очередное слово <math display="inline">W_i</math> длинны n бит, расположенное на позиции i, генерируется <math display="inline">S_i</math> длинны n-m бит.
# Чтобы зашифровать очередное слово <math display="inline">W_i</math> длинны ''n'' бит, расположенное на позиции ''i'', генерируется <math display="inline">S_i</math> длинны ''n-m'' бит.
# Вычисляется <math display="inline">T_i</math> как конкатенация <math display="inline">S_i</math> и <math display="inline">F_{k_i}(S_i)</math><br /><math display="inline">T_i = <S_i, F_{k_i}(S_i)></math>.
# Вычисляется <math display="inline">T_i</math> как конкатенация <math display="inline">S_i</math> и <math display="inline">F_{k_i}(S_i)</math><br /><math display="inline">T_i = <S_i, F_{k_i}(S_i)></math>.
# Результатом шифрования будет <math display="inline">C_i = W_i + T_i</math>.
# Результатом шифрования будет <math display="inline">C_i = W_i + T_i</math>.
Строка 48: Строка 135:
Так построенная схема позволяет проводить поиск по шифротексту следующим образом<ref name=":1" />:
Так построенная схема позволяет проводить поиск по шифротексту следующим образом<ref name=":1" />:


Пусть зашифрованный документ Алисы хранится у Боба. Алиса хочет отыскать слово W, поэтому отправляет его вместе с набором ключей <math display="inline">k_i</math> к таким позициям ''i'', где может находиться ''W''. Тогда Боб проверяет, представима ли сумма по модулю очередного шифрослова с образцом в виде<ref name=":1" />:
Пусть зашифрованный документ Алисы хранится у Боба. Алиса хочет отыскать слово ''W'', поэтому отправляет его вместе с набором ключей <math display="inline">k_i</math> к таким позициям ''i'', где может находиться ''W''. Тогда Боб проверяет, представима ли сумма по модулю очередного шифрослова с образцом в виде<ref name=":1" />:


<math display="inline">C_i + W = <s,F_{k_i}(s)></math>
<math display="inline">C_i + W = <s,F_{k_i}(s)></math>


Если такое условие выполняется, то Алисе возвращается подтверждение совпадения и позиция i. Если же для какой-то из позиций ключ не передавался, то Боб ничего не узнаёт об этом слове<ref name=":1" />.
Если такое условие выполняется, то Алисе возвращается подтверждение совпадения и позиция ''i''. Если же для какой-то из позиций ключ не передавался, то Боб ничего не узнаёт об этом слове<ref name=":1" />.


Такой алгоритм поиска имеет линейную сложность. Недостатками базовой схемы является то, что Боб знает содержимое запроса, и при удачном поиске узнаёт содержимое как самого документа, так и ключей, использованных при шифровании<ref name=":1" />.
Такой алгоритм поиска имеет линейную сложность. Недостатками базовой схемы является то, что Боб знает содержимое запроса, и при удачном поиске узнаёт содержимое как самого документа, так и ключей, использованных при шифровании<ref name=":1" />.
Строка 62: Строка 149:
==== Скрытие открытого текста ====
==== Скрытие открытого текста ====


Чтобы Боб не получал доступ к открытым данным, их следует предварительно шифровать. То есть предварительно следует получить прешифрованный документ из <math display="inline">X_1, X_2, ..., X_l</math>, где <math display="inline">X_i = E_{k^s}(W_i)</math>. Стоит отметить, что шифрование E не должно зависеть от позиции слова (одинаковые слова в разных частях документа породят одинаковый шифротекст)<ref name=":1" />.
Чтобы Боб не получал доступ к открытым данным, их следует предварительно шифровать. То есть предварительно следует получить прешифрованный документ из <math display="inline">X_1, X_2, ..., X_l</math>, где <math display="inline">X_i = E_{k^s}(W_i)</math>. Стоит отметить, что шифрование ''E'' не должно зависеть от позиции слова (одинаковые слова в разных частях документа породят одинаковый шифротекст)<ref name=":1" />.


Для поиска, Алиса отправляет Бобу зашифрованное слово <math display="inline">X=E_{k^s}(W)</math> и ключ к нему <math display="inline">k_i = f_{k'}(X_i)</math>. Боб сможет осуществить поиск, не имея доступа к открытому тексту<ref name=":1" />.
Для поиска, Алиса отправляет Бобу зашифрованное слово <math display="inline">X=E_{k^s}(W)</math> и ключ к нему <math display="inline">k_i = f_{k'}(X_i)</math>. Боб сможет осуществить поиск, не имея доступа к открытому тексту<ref name=":1" />.


Однако в этой схеме проявляется новый недостаток. Из одного только шифротекста Алиса не сможет получить исходный текст, если она не знает, что там было. То есть ей необходимо знать <math display="inline">E(W_i)</math> (или, хотя бы, последние m бит) чтобы из <math display="inline">C_i</math> восстановить <math display="inline">W_i</math><ref name=":1" />.
Однако в этой схеме проявляется новый недостаток. Из одного только шифротекста Алиса не сможет получить исходный текст, если она не знает, что там было. То есть ей необходимо знать <math display="inline">E(W_i)</math> (или, хотя бы, последние ''m'' бит) чтобы из <math display="inline">C_i</math> восстановить <math display="inline">W_i</math><ref name=":1" />.


==== Финальный вариант ====
==== Окончательный вариант ====


Конечная форма алгоритма Сонг-Вагнера-Перрига выглядит следующим образом<ref name=":1" />:
Конечная форма алгоритма Сонг-Вагнера-Перрига выглядит следующим образом<ref name=":1" />:


# Над словом <math display="inline">W_i</math> выполняется пре-шифрация: <math display="inline">X_i=E_{k^s}(W_i)</math>.
# Над словом <math display="inline">W_i</math> выполняется пре-шифрация: <math display="inline">X_i=E_{k^s}(W_i)</math>.
# <math display="inline">X_i</math> делится на две части - <math display="inline">L_i</math> длинны n-m бит и <math display="inline">R_i</math> длинны m бит.
# <math display="inline">X_i</math> делится на две части - <math display="inline">L_i</math> длинны ''n-m'' бит и <math display="inline">R_i</math> длинны m бит.
# Из <math display="inline">L_i</math> генерируется ключ <math display="inline">k_i=f_{k'}(L_i)</math>.
# Из <math display="inline">L_i</math> генерируется ключ <math display="inline">k_i=f_{k'}(L_i)</math>.
# Генератором G с ключом k генерируется (n-m)-битный член последовательности <math display="inline">S_i</math>.
# Генератором ''G'' с ключом ''k'' генерируется (n-m)-битный член последовательности <math display="inline">S_i</math>.
# <math display="inline">S_i</math> расширяется до n-битного <math display="inline">T_i=<S_i,F_{k_i}(S_i)></math>.
# <math display="inline">S_i</math> расширяется до ''n''-битного <math display="inline">T_i=<S_i,F_{k_i}(S_i)></math>.
# Наконец шифротекст вычисляется как <math display="inline">C_i=T_i+X_i</math>.
# Наконец шифротекст вычисляется как <math display="inline">C_i=T_i+X_i</math>.


Поиск на стороне Боба происходит как описано ранее, используя <math display="inline">(X,k_i)</math><ref name=":1" />.
Поиск на стороне Боба происходит как описано ранее, используя <math display="inline">(X,k_i)</math><ref name=":1" />.


В этой схеме Алиса (или кто-либо ещё) может расшифровать данные, имея ключи <math display="inline">k,k'</math> и <math display="inline">k^s</math> и зная положение слова i. Для этого<ref name=":1" />:
В этой схеме Алиса (или кто-либо ещё) может расшифровать данные, имея ключи <math display="inline">k,k'</math> и <math display="inline">k^s</math> и зная положение слова ''i''. Для этого<ref name=":1" />:


# Алиса получает при помощи зерна ''k'' элемент <math display="inline">S_i</math>.
# Алиса получает при помощи зерна ''k'' элемент <math display="inline">S_i</math>.
# <math display="inline">L_i</math> считается сложением по модулю 2 старших n-m бит <math display="inline">C_i</math> c <math display="inline">S_i</math>.
# <math display="inline">L_i</math> считается сложением по модулю 2 старших ''n-m'' бит <math display="inline">C_i</math> c <math display="inline">S_i</math>.
# Восстанавливается <math display="inline">T_i=<S_i,F_{k_i}(S_i)></math>.
# Восстанавливается <math display="inline">T_i=<S_i,F_{k_i}(S_i)></math>.
# Исходный текст находится как <math display="inline">W_i=E^{-1}_{k^s}(C_i+T_i)</math>.
# Исходный текст находится как <math display="inline">W_i=E^{-1}_{k^s}(C_i+T_i)</math>.

Версия от 01:48, 24 декабря 2017

Шифрование с возможностью поиска (англ. Searchable Encryption) — класс криптографических алгоритмов шифрования, в которых существует возможность осуществлять поиск по зашифрованным данным (файлам, записям базы данных и т.д.). Областью применения является предоставление приватности данных, хранимых на недоверенном удалённом ресурсе.

В общем случае, в основе такого шифрования могут лежать как симметричные, так и асимметричные шифры. Однако, так как практические задачи предполагают шифрование большого количества данных, чаще встречается использование симметричного шифрования с поиском (соответственно, англ. Searchable Symmetric Encryption или сокращённо SSE). Большинство асимметричных подходов основаны на шифровании по открытому ключу с поиском по ключевым словам (англ. Public Key Encryption with Keyword Search, сокращённо PEKS)[1].

История

Идея поиска по шифротексту стала актуальна на фоне введения облачных хранилищ данных. Данные пользователей хранятся на удалённых ресурсах, которые, в общем говоря, не являются доверенными. Для обеспечения приватности в этом случае, к данным применяется шифрование. Однако, при обычном шифровании для выполнения поиска по этим данным пользователь должен был либо выкачать весь набор данных и расшифровать его, либо же предоставить серверу средства для расшифровки, что противоречит изначальной цели шифрования[2].

Первыми попытками обеспечить приватность пользователя при работе с сервером можно считать работы 1990-х годов по oRAM, когда от сервера скрывался паттерн доступа к памяти при обработке запроса пользователя[3].

Первая работа в направлении поиска по шифрованным данным была изложена в 2000-м году Dawn Xiaodong Song, David Wagner и Adrian Perrig. Их алгоритм предполагал поиск по шифротексту с точным совпадением[4].

В то время, как алгоритм SWP00 строил метод шифрования, где поиск производится по самому шифротексту, большинство дальнейших реализаций предполагают построение зашифрованного индекса[1], поиск по которому занимает меньше времени[5][6], позволяет обновлять данные на сервере (dynamic SSE)[7], или использовать расширенный поиск[8][9]. Платой за это является увеличение размера шифрованных данных и повышение риска утечек.

В статье Eu-Jin Goh 2003-го года[5] впервые был предложен поиск по шифрованному индексу, который предполагал поиск точного совпадения. А в 2009-ом в статье Emily Shen, Elaine Shi и Brent Waters - приватный предикативный поиск[9].

В направлении PEKS первый результат представлен в статье 2004-го за авторством Dan Boneh, Giovanni Di Crescenzo, Rafail Ostrovsky и Giuseppe Persiano[3].

Изначально, при проверке новых алгоритмов на защищённость, проверялись только общие требования к криптографическим системам. Определения криптостойкости для SE, учитывающие особенности возможных новых видов утечек, были даны в статье 2006-го года от Reza Curtmola, Juan Garay, Seny Kamara и Rafail Ostrovsky[6].

Возможность поиска предполагает возможное наличие утечек информации с каждым поисковым запросом. Они могут быть связанны с детерминированностью этапов шифрования, ограничениями входных данных и т.д. В качестве возможного решения рассматривалось использование en:Oblivious_RAM для скрытия работы сервера и уменьшения утечек[10], но этот метод также и критиковался[11].

Описание принципа

Для удовлетворения потребности в поиске, первым был предложен алгоритм Сонг-Вагнера-Перрига, при котором пользователь делает поисковые запросы на файловый сервер с зашифрованными данными, но при этом не раскрывает ему ни содержимого файлов, ни самого поискового запроса. Шифрование заключается в выполнении обратимой операции (например, XOR) с псевдослучайной последовательностью, а ключом, соответственно, является зерно ГПСП. Такая схема выполняет поиск за линейное от размера шифротекста время, а её надёжность зависит от качества псевдослучайной последовательности и прешифрования[4].

Кроме методов с основой из симметричного шифрования, своё место имеют алгоритмы с использованием открытого ключа. Например, электронные письма могут шифроваться для адресата его открытым ключом. Адресат может пожелать хранить их на удалённом почтовом сервере, но сохранить возможность поиска. Либо, схема может быть рассчитана на то, что из зашифрованного сообщения почтовый сервер сможет понять, что в нём, например, содержится ключевое слово ("важно") и составит маршрут или установит приоритет пересылки письма соответствующим образом, но не узнает ничего кроме этого слова[3][12].

Классификация

SE основана на наличии клиент-серверной архитектуры. Как следствие, различные подходы к созданию алгоритмов могут различаться по количеству клиентов, имеющих доступ к данным. Могут быть один или несколько клиентов с правом размещать данные на сервере (записывающие), и один или несколько клиентов с правом производить поиск (читающие). Таким образом, выделяются 4 класса алгоритмов[1]:

  • один пишущий/один читающий (S/S)
  • один пишущий/много читающих (S/M)
  • много пишущих/один читающий (M/S)
  • много пишущих/много читающих (M/M)

К классу S/S относятся, в большей степени, алгоритмы симметричного шифрования, так как хозяин информации будет хранить у себя единственный ключ. Алгоритмы класса M/S предполагают наличие множества клиентов, шифрующих данные для единственного получателя. Так, например, устроена система шифрованной электронной почты. Стоит отметить, что алгоритмы этого класса можно тривиальным образом превратить в S/S алгоритмы, если читающий клиент не будет распространять открытый ключ[1].

В обзорной статье 2016-го года[1] приводятся статистика наличия исследований в различных классах SE:

Исследования в области SE
Архитектура S/S S/M M/S M/M
точное совпадение
конъюнкция -
сравнение - - -
поднабор (✓) - -
диапозон (✓) - -
wildcard - - -
fuzzy - - -
Количество схем 28 2 19 9
Количество реализаций 6 1 0 2
Временной промежуток 2000–2013 2009–2011 2004–2011 2007–2008

Пример (алгоритм SWP00)

Алгоритм Song-Wagner-Perrig был предложен в статье 2000-го года и является разновидностью симметричного шифрования с поиском[4]. Он работает за линейное от размеров шифруемых данных время и использует простые криптографические примитивы, что делает его удобным для рассмотрения.

Базовая идея

Для простоты, рассмотрим сначала пример, демонстрирующий основную идею, в ущерб некоторой приватности.

Пусть пользователь Алиса хочет зашифровать документ из слов . Её цель - произвести обратимую операцию XOR над каждым из слов с каким-то секретным значением[4].

Для этого ей понадобятся[4]:

  • псевдослучайная функция F с ключами , необходимая для расширения элементов последовательности S до длинны слов (возвращает m-битные значения)
  • псевдослучайная функция f с ключом , для генерации ключей

Алгоритм шифрования[4]:

  1. Сначала Алиса генерирует последовательность .
  2. Чтобы зашифровать очередное слово длинны n бит, расположенное на позиции i, генерируется длинны n-m бит.
  3. Вычисляется как конкатенация и
    .
  4. Результатом шифрования будет .

При этом последовательность ключей может быть выбрана разными способами (например, использовать один и тот же ключ или какой-то набор ключей)[4].

Так построенная схема позволяет проводить поиск по шифротексту следующим образом[4]:

Пусть зашифрованный документ Алисы хранится у Боба. Алиса хочет отыскать слово W, поэтому отправляет его вместе с набором ключей к таким позициям i, где может находиться W. Тогда Боб проверяет, представима ли сумма по модулю очередного шифрослова с образцом в виде[4]:

Если такое условие выполняется, то Алисе возвращается подтверждение совпадения и позиция i. Если же для какой-то из позиций ключ не передавался, то Боб ничего не узнаёт об этом слове[4].

Такой алгоритм поиска имеет линейную сложность. Недостатками базовой схемы является то, что Боб знает содержимое запроса, и при удачном поиске узнаёт содержимое как самого документа, так и ключей, использованных при шифровании[4].

Скрытие ключей

Чтобы повысить гибкость поиска и приватность шифрованных данных можно использовать дополнительный генератор для ключей с отдельным ключом для него. Тогда для каждого слова, и вместо раскрытия группы ключей, Алиса будет прикладывать к поисковому запросу только необходимый[4].

Скрытие открытого текста

Чтобы Боб не получал доступ к открытым данным, их следует предварительно шифровать. То есть предварительно следует получить прешифрованный документ из , где . Стоит отметить, что шифрование E не должно зависеть от позиции слова (одинаковые слова в разных частях документа породят одинаковый шифротекст)[4].

Для поиска, Алиса отправляет Бобу зашифрованное слово и ключ к нему . Боб сможет осуществить поиск, не имея доступа к открытому тексту[4].

Однако в этой схеме проявляется новый недостаток. Из одного только шифротекста Алиса не сможет получить исходный текст, если она не знает, что там было. То есть ей необходимо знать (или, хотя бы, последние m бит) чтобы из восстановить [4].

Окончательный вариант

Конечная форма алгоритма Сонг-Вагнера-Перрига выглядит следующим образом[4]:

  1. Над словом выполняется пре-шифрация: .
  2. делится на две части - длинны n-m бит и длинны m бит.
  3. Из генерируется ключ .
  4. Генератором G с ключом k генерируется (n-m)-битный член последовательности .
  5. расширяется до n-битного .
  6. Наконец шифротекст вычисляется как .

Поиск на стороне Боба происходит как описано ранее, используя [4].

В этой схеме Алиса (или кто-либо ещё) может расшифровать данные, имея ключи и и зная положение слова i. Для этого[4]:

  1. Алиса получает при помощи зерна k элемент .
  2. считается сложением по модулю 2 старших n-m бит c .
  3. Восстанавливается .
  4. Исходный текст находится как .

Применение

До закрытия Google Desktop предполагалось, что он будет ярким примером использования SSE[6].

Однако на текущий момент реализации алгоритмов (например, открытая реализация OpenSSE) имеют скорее исследовательский, а не практический характер [1].

Примечания

  1. 1 2 3 4 5 Christoph Bösch, Pieter Hartel, Willem Jonker, Andreas Peter. A Survey of Provably Secure Searchable Encryption (Undefined) // ACM Computing Surveys. — 2014/08. — Т. 47, вып. 2. — С. 1–51. — ISSN 0360-0300. — doi:10.1145/2636328.
  2. Md Iftekhar Salam, Wei-Chuen Yau, Ji-Jian Chin, Swee-Huay Heng, Huo-Chong Ling. Implementation of searchable symmetric encryption for privacy-preserving keyword search on cloud storage // Human-centric Computing and Information Sciences. — 2015-07-17. — Т. 5. — С. 19. — ISSN 2192-1962. — doi:10.1186/s13673-015-0039-9.
  3. 1 2 3 Dan Boneh, Giovanni Di Crescenzo, Rafail Ostrovsky, Giuseppe Persiano. Public Key Encryption with Keyword Search (англ.) // Advances in Cryptology - EUROCRYPT 2004. — Springer, Berlin, Heidelberg, 2004-05-02. — P. 506–522. — ISBN 9783540219354, 9783540246763. — doi:10.1007/978-3-540-24676-3_30.
  4. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Dawn Xiaoding Song, D. Wagner, A. Perrig. Practical techniques for searches on encrypted data // Proceeding 2000 IEEE Symposium on Security and Privacy. S P 2000. — 2000. — С. 44–55. — doi:10.1109/secpri.2000.848445.
  5. 1 2 Eu-Jin Goh. Secure Indexes. — 2003. — № 216.
  6. 1 2 3 Reza Curtmola, Juan Garay, Seny Kamara, Rafail Ostrovsky. Searchable symmetric encryption: Improved definitions and efficient constructions (англ.) // Journal of Computer Security. — 2011-01-01. — Vol. 19, iss. 5. — P. 895–934. — ISSN 0926-227X. — doi:10.3233/jcs-2011-0426.
  7. Seny Kamara, Charalampos Papamanthou, Tom Roeder. Dynamic Searchable Symmetric Encryption // Proceedings of the 2012 ACM Conference on Computer and Communications Security. — New York, NY, USA: ACM, 2012. — С. 965–976. — ISBN 9781450316514. — doi:10.1145/2382196.2382298.
  8. David Cash, Stanislaw Jarecki, Charanjit Jutla, Hugo Krawczyk, Marcel-Cătălin Roşu. Highly-Scalable Searchable Symmetric Encryption with Support for Boolean Queries (англ.) // Advances in Cryptology – CRYPTO 2013. — Springer, Berlin, Heidelberg, 2013. — P. 353–373. — ISBN 9783642400407, 9783642400414. — doi:10.1007/978-3-642-40041-4_20.
  9. 1 2 Emily Shen, Elaine Shi, Brent Waters. Predicate Privacy in Encryption Systems (англ.) // Theory of Cryptography. — Springer, Berlin, Heidelberg, 2009-03-15. — P. 457–473. — ISBN 9783642004568, 9783642004575. — doi:10.1007/978-3-642-00457-5_27.
  10. Raphael Bost. ∑OφOς: Forward Secure Searchable Encryption // Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. — New York, NY, USA: ACM, 2016. — С. 1143–1154. — ISBN 9781450341394. — doi:10.1145/2976749.2978303.
  11. Muhammad Naveed. The Fallacy of Composition of Oblivious RAM and Searchable Encryption. — 2015. — № 668.
  12. Mihir Bellare, Alexandra Boldyreva, Adam O'Neill. Deterministic and Efficiently Searchable Encryption. — 2006. — № 186.