Гомоморфное шифрование в базах данных
А.М. Щелкунов, М.Л. Глухарев Петербургский государственный университет путей сообщения Императора Александра 1
Санкт-Петербург, Россия a_shchelkunov@mail.ru, mlgluharev@yandex.ru
Аннотация. Гомоморфное шифрование представляет собой криптографический примитив, который имеет большое прикладное значение, а также интересен с математической точки зрения. Несмотря на многолетние исследования в этой области, основные проблемы остаются нерешенными. В статье описываются основные особенности организации защищенных вычислений криптографическим примитивом на основе гомоморфного шифрования. Обсуждается проведение защищенных вычислений над данными клиента, хранящимися на удаленном недоверенном сервере в базе данных. Рассматривается пример защищенного сервера с облачной базой данных. Приводится описание экспериментального приложения на языке программирования Python для оценки производительности и пригодности алгоритмов, реализующих гомоморфную криптосистему с возможностью сложения и умножения зашифрованных данных в кольце Zn. Обсуждаются результаты численных экспериментов с параметрами: уровень защищенности, типы выполняемых операций, максимальная длина операндов и время работы приложения.
Ключевые слова: гомоморфная криптография, гомоморфное шифрование, матричные полиномы, криптографические вычисления, защита баз данных, защищенные вычисления.
Введение
Одна из наиболее важных задач, стоящих перед современной криптографией, - проведение вычислений над зашифрованными данными без их расшифровки. Вопрос о возможности таких вычислений долгое время оставался открытым, и авторы схемы шифрования RSA полагали, что такие вычисления невозможны. Раздел криптографии, посвящённый схемам, допускающим вычисления над шифротекстами (шифртекстами), принято называть гомоморфной криптографией, а соответствующие схемы - гомоморфными. Различают полностью гомоморфные и частично гомоморфные схемы шифрования. В полностью гомоморфной схеме шифрования операции сложения и умножения шифротекстов являются гомоморфными, т. е. выполняются следующие соотношения:
D(E(m1)E(m2)) = m1m2; (1)
D (E (m1 ) + E (m2 )) = m1 + m2, (2)
где E() - функция шифрования, а D() - функция дешифрования.
Если в некоторой схеме шифрования выполняется одно (любое) из двух условий, то эта схема называется частично гомоморфной. Примеров частично гомоморфных шифровальных схем очень много. Например, схема RSA является гомоморфной относительно операции умножения, как и схема Эль-Гамаля. Схема RSA и схема Эль-Гамаля являются частично гомоморфными, а именно гомоморфными относительно операции умножения шифротекстов. Описания и разъяснения этих схем можно посмотреть в [1; 2].
В данной статье рассматриваются некоторые модели гомоморфных схем шифрования, полезные с практической точки зрения. Одной из интересных и практически ценных схем шифрования является предложенная в [3] схема, основанная на матричных полиномах. Преимущество этой модели в том, что все вычисления, проводимые над зашифрованными данными, сводятся к сложению и перемножению матриц, а эти операции, как известно, допускают широкое распараллеливание. Возможность распараллеливания вычислений повышает практическую значимость схемы шифрования.
Защищенные вычисления
Одним из самых естественных приложений гомоморфного шифрования является проведение защищенных вычислений над данными клиента, хранящимися на удаленном недоверенном сервере в базе данных. Поясним более подробно, что под этим подразумевается.
Допустим, клиент зашифровал данные стандартным шифром и разместил их на удалённом сервере. В случае необходимости их изменения клиент может доверить серверу свой секретный ключ, для того чтобы сервер расшифровал данные и внёс нужные клиенту изменения, а затем зашифровал данные снова. Но в этом случае сервер сможет прочитать все данные клиента. Также возможен перехват ключа при передаче его серверу по каналу, в результате чего данные клиента могут стать доступными некоему третьему лицу. Также клиент может скачать свои данные из сервера на свой компьютер, расшифровать, провести над ними нужное вычисление, при необходимости зашифровать этот результат и загрузить его на сервер в базу данных. Однако это потребует много времени и вычислительных ресурсов, которыми клиент, возможно, не располагает.
Из сказанного выше вытекают несколько конкретных требований к безопасному (защищенному) серверу. Во-первых, данные клиента должны храниться в таком виде, чтобы при их чтении невозможно было понять, что это за данные (данные необходимо шифровать). Причем данные должны поступать на сервер уже зашифрованными. Следовательно, шифрование должно проводиться на стороне клиента. Во-вторых, должна быть возможность обрабатывать эти данные, не расшифровывая. Иначе сервер с базой данных становится всего лишь безопасным хранилищем. А для каждой операции над данными потребуется пересылать их на сторону клиента.
В настоящее время существующие базы данных не являются полностью защищенными. В лучшем случае есть возможность лишь зашифровать данные на стороне пользователя, но это бывает крайне редко. Довольно часто данные зашифрованы ключом, который хранится на сервере вместе с базой данных.
Перейдем к рассмотрению конкретного примера защищенного сервера с базой данных. Речь пойдет об организации защищенной облачной базы данных. Задача будет следующей: Есть организация, которая обладает достаточными ресурсами для хранения и обработки своей базы данных. Серверу организация не доверяет. Поэтому все данные шифруются перед отправкой на сервер. Клиенты, обращающиеся к базе данных, являются программами, запущенными на машинах, находящихся во владении организации. Все клиенты доверяют друг другу, и ключ расшифрования у них является общим. Далее рассмотрим как эту задачу возможно решить с помощью симметричного гомоморфного шифрования.
Модель базы данных
Современная реляционная база данных является набором прямоугольных таблиц. Предположим, что таблица только одна. Таблица имеет т атрибутов ai, ..., am и по сути представляет из себя набор записей {R }™j, где
Rj = {ц j }m=i,vij - значение записи R, для атрибута Oj.
Также еще договоримся, что aj, j и номера записей i Е {1, ..., w} являются элементами некоторого большого конечного поля Fq. Клиенту необходимо делать простые SQL-запросы к базе данных, такие как:
SELECT * FROM db WHERE (fl^ = Ц ) OR...OR (flz = U* ) ; (3)
SELECT * FROM db WHERE (a^ = Ц ) AND...AND (@z = U* ). (4)
Запросы типа (3) будем называть дизъюнктивными, а запросы типа (4) - конъюнктивными.
Обратимся теперь к модели клиент-сервер. Наш сервер
S хранит db = {R }*=, принадлежащую клиенту К. Периодически наш клиент К обращается с запросами к серверу S. В результате запросов клиент К должен получить все
записи в db, удовлетворяющие условию WHERE. При
*
этом S ничего не должен узнать о значениях ц , 1 < i < t,
участвующих в запросе, а также о том, какие записи в db соответствуют запросу.
Данный подход к решению этой задачи заключается в том, что обработка запроса проходит в две стадии.
Сначала К получает номера ¿1, ..., ы 6 {1, ...,ы} записей,
который соответствуют условиям в 80Ь запросе. Этот
*
этап нужно организовать так, чтобы 5 не узнал иг ,
1 < I < £ и ¿1, ..., ¿п. Клиент К по очереди извлекает из db записи с индексами ¿1, ..., ¿п. При этом 5 не должен узнать ¿1, ..., ¿п.
Эта последовательность действий использовалась, например, в [4]. Отметим, что в [4] рассматривалась немного другая задача. Предполагалось, что база данных принадлежит 5 и, как следствие, она хранилась на 5 в открытом виде. Мы же рассматриваем случай, когда база данных принадлежит клиенту К. Поэтому 5 хранит не
М = КаМ = {ЕЛ(ииЩ^, где Е - отображение шифрования, Бк - секретный ключ, принадлежащий клиенту К.
Поочередно рассмотрим, как два этапа обработки запроса можно организовать при условии, что для шифрования VI,] используется криптосистема с гомоморфными свойствами.
Защищенное получение индексов
*
Поскольку клиент К хочет скрыть » , 1 < I < С, ему необходимо их зашифровать. На сервер 5 он передает пары (а7к , Е(»)), 1 < I < £. В свою очередь 5 должен для
каждой записи ^ = {Е(иг ] )}™=1, I = 1.^, провести следующее вычисление:
для V ^ = сервер 5 должен вычислить
ек = /(Е(» ч, Е(и* )) , где / - функция, осуществляющая проверку на равенство и к , и и* гомоморфно. То
есть ек = Е(0), если ц, ^и*к, и ек = Е(1), если
*
и =ик.
1,2к к
Далее в зависимости от типа запроса 5 должен сделать следующее:
- конъюнктивный запрос: нужно вычислить
е] = Нот AND (ev..et)
(3)
где Ношаго - функция, осуществляющая вычисление побитовой конъюнкции нижележащих открытых текстов.
Ясно, что если е{ = Е(1), то соответствует запросу, а если е{ = Е(0), то не соответствует. Отметим, что выполняется ИотЛЫО(е1,...,) = е1 •... • ; - дизъюнктиный запрос: нужно вычислить
е = HomXoR (ei...et),
(4)
где HomxoR - функция, вычисляющая побитовый XOR нижележащих открытых текстов.
Сервер S отправляет вектор шифртекстов
Re s = (el,..., e^) клиенту К.
Расшифровав компоненты вектора Re s, клиент К узнает индексы U, ..., in записей, соответствующих его SQL-запросу. Отметим, что в общем представленное решение пока не очень эффективно, так как для того, чтобы получить индексы, К должен обработать объем информации в размере по сути одного столбца таблицы db. Вопрос о том, как его сократить, требует дальнейшей проработки.
Ясно, что для реализации описанного подхода можно использовать симметричную гомоморфную криптосистему.
Для извлечения записей из базы данных по их индексам наш клиент К может воспользоваться стандартным протоколом секретного получения информации [5; 6].
Реализация гомоморфного шифрования
В качестве практического этапа исследования разработано экспериментальное приложение на языке Python для оценки производительности и пригодности алгоритмов, реализующее полностью гомоморфную криптосистему с возможностью сложения и умножения над зашифрованными данными в кольце Zn.
Алгоритм, реализованный в работе [7], предполагает расширение кольца Z2 на кольцо Zn, где n - некоторое достаточно большое натуральное число. Возможности языка Python позволяют задавать значение n произвольно большим, практически ограничивая его значение лишь размером доступной оперативной памяти машины.
Данное требование, связанное с вычислениями в кольце Zn, означает, что операнды вычислений должны быть также неотрицательными числами, не превосходящими n.
Кроме того, для корректности вычислений, сумма и произведение двух чисел не должны превосходить значение n. Это требование кажется сложно выполняемым, так как заранее нельзя ограничивать размер чисел, получаемых в результате умножения произвольных операндов. Но у нас есть возможность выбрать модуль n заведомо достаточно большим.
Алгоритм безопасных вычислений
Алгоритм с использованием гомоморфного шифрования может быть описан следующим образом:
1) генерация публичного и приватного ключей;
2) шифрование операндов;
3) применение к операндам одной из допустимых функций (сложение или умножение);
4) дешифрование полученного на предыдущем шаге результата.
Рассмотрим этот процесс более детально. В качестве открытого ключа будем использовать некоторое число p,
взаимно простое с числом n и с порядком группы Zn. Таким образом, выбираем p такое, что наибольший общий делитель p и порядка группы равнялся единице.
Процесс шифрования определяется соотношением вида:
c = z + pq = m + n * r + pq. (5)
Для процесса дешифрования соотношение имеет вид:
m = (c mod p) mod n. (6)
Процесс шифрования требует от пользователя еще двух дополнительных значений: r и q. Отталкиваясь от этой потребности в качестве публичного ключа, будем использовать массив PublicKey из 100 элементов, где i-й элемент задан следующим способом:
PublicKey [i] = p * randomValue + n * r. (7)
Здесь randomValue - случайное значение, n - порядок группы, r - случайное число в диапазоне (10, 100).
Видоизменим формулу шифрования следующим образом:
c = m + X PublicKey *. (8)
Здесь X PublicKey* - сумма некоторого случайного набора приватных ключей, разный для каждого из операндов. Случайность данных наборов обусловливает различие констант шифрования.
Нетрудно проверить, что данный выбор удовлетворяет приведенным выше формулам для шифрования и дешифрования.
На рисунке 1 представлен пример шифрования двух целых чисел и выполнения операций сложения над ними. Данные отображаются в hex-формате и в виде символов таблицы ASCII.
Для исследования эффективности реализации системы гомоморфного шифрования был проведен эксперимент, параметрами которого являлись уровень защищенности, типы выполняемых операций, максимальная длина операндов и время работы. Уровень защищенности - характеристика, определяющая значение модуля группы и длину используемых ключей шифрования. В эксперименте использовались модуль и ключи, длина которых составляла от 5 до 8000 десятичных цифр. используемые операции -шифрование и дешифрование операндов, умножение и сложение операндов. Данные получены для двух значений максимальной длины операндов - 1е10 и 1е20, т. е. для 10-значных и 20-значных десятичных чисел.
Оценки получены при 1000-кратном повторении вычислений с заданными параметрами на компьютере класса Intel(R) CORE (TM) i3-2728 CPU @ 2.20 GHz RAM 4 GB [6].
Результаты эксперимента приведены в таблице и на рисунке 2.
Рис. 1. Пример визуализации работы алгоритма безопасных вычислений
ТАБЛИЦА. Характеристики реализации гомоморфного шифрования
Уровень защищенности (макс. кол-во цифр ключа) Макс. длина операндов = 1010 Макс. длина операндов = 1020
Шифрование, дешифрование, сложение, с Шифрование, дешифрование, умножение, с Шифрование, дешифрование, сложение, с Шифрование, дешифрование, умножение, с
5 0,92 0,85 1,07 0,86
10 0,93 0,84 1,04 1,09
20 0,93 0,84 1,03 0,93
50 0,94 0,85 1,04 0,94
100 0,94 0,86 1,04 0,95
200 0,94 0,90 1,04 0,99
500 1,00 1,06 1,11 1,18
1000 1,14 1,52 1,27 1,66
2000 1,59 3,12 1,76 3,68
4000 3,21 8,90 3,64 10,68
8000 9,89 31,57 11,31 35,38
Legend • add, 1010 ■--mult, Ю10 — add,10м - - - mult, 10м в .........Л * *
..........;.....Л-.- Ф s ✓
. * ; * " /
. ' у : / / - ✓
—« . * ^
О 100 0 2000 3000 4000 500 0 600 0 7000 800 0
digits in key
Рис. 2. Зависимости времени реализации алгоритма от параметров шифрования
Проведенный эксперимент подтвердил эффективность использования рассматриваемого подхода к организации безопасных вычислений. Выбор достаточно большого по сравнению со значениями используемых операндов модуля позволяет корректно решать проблему однозначности вычислений. Операции вычитания и деления на целое число, наличие которых необходимо для организации полноценных вычислений, могут быть реализованы через операции сложения и умножения на обратное число (в этом случае модуль группы должен быть простым числом).
Заключение
К сожалению, в настоящее время авторам не известна ни одна реализация гомоморфного шифрования, полностью готовая к внедрению в реальные системы.
Для того чтобы гомоморфное шифрование было эффективно применимо, должна быть реализация, удовлетворяющая как минимум следующим требованиям:
1. Поддерживаемые математические функции должны покрывать нужды программистов.
2. Диапазоны значений чисел должны покрывать по крайней мере стандартные типы данных, а вычисления, производимые над зашифрованными данными, соответствующие такому размеру чисел, - иметь приемлемую производительность.
3. Точность и скорость вычислений не должны уменьшаться или ухудшаться во время вычислений.
4. Количество разнообразных ключей должно быть достаточным, чтобы исключить атаку полным перебором.
Тем не менее гомоморфное шифрование является одним из самых мощных математических аппаратов для сохранности данных в различных прикладных средах. Но только полностью гомоморфное шифрование способно исключить необходимость хотя бы частичной расшифровки данных для произведения вычислений над ними. Впрочем и оно не способно вытеснить любые другие виды криптографической защиты, поскольку любое подобное шифрование принципиально уязвимо для атаки с подобранным текстом. Для примера отметим, что современные результаты, касающиеся способов шифрования с открытыми ключами и блочного шифрования, рассматриваются в статьях [10; 11].
Литература
1. Rivest R. L, Adleman L., Dertouzos M. L. On data banks and privacy homomorphisms // Foundations of secure computation, 1978. Vol. 32, no. 4, p. 169-178.
2. ElGamal encryption [Elektronnyy resurs] / Vikipediya. Rezhim dostupa: https://en.wikipedia.org/wiki/ ElGamal_ encryption. Data dostupa: 29.05.2018.
3. Буртыка Ф. Б. Симметричное полностью гомоморфное шифрование с использованием неприводимых матричных полиномов // Изв. ЮФУ. Техн. науки. - 2014. -С. 107-122.
4. Song D., Wagner D., Perrig A. Practical techniques for searches on encrypted data // SP '00 Proc. 2000 IEEE Symp. Security and Privacy. - Berkeley: Univ. California, 2000.
5. Boneh D., Gentry C., Halevi S., Wang D., Wu D.J. Private database queries using somewhat homomorphic encryption // Applied cryptography and network security Springer, 2013, p. 102-118.
6. Boneh D., Gentry C., Halevi S., Wang F., Wu D.J. Private database queries using somewhat homomorphic encryption // Applied Cryptography and Network Security: 11th Int. Conf., ACNS 2013, Banff, AB, Canada, June 25-28, 2013. Proc. / M. Jacobson, M. Locasto, P. Mohassel, and R. Safavi-Naini, eds. - Berlin: Springer, 2013. - (Lect. Notes Comp. Sci. Security Cryptology; Vol. 7954). - P. 102-118.
7. Gasarch W. A survey on private information retrieval // Bulletin of the eatcs Citeseer, 2004.
8. Варновский Н.П. Гомоморфное шифрование / Н.П. Варновский, А. В. Шокуров // Труды Института ситемного программирования. Т. 12 ; под ред. В. П. Иванникова. - М. : ИСП РАН, 2006. - C. 27-36.
9. Gentry C. A Fully Homomorphic Encryption Scheme: Ph. D. thesis. - Stanford Univ., 2009.
10. Молдовян Н.А., Вайчикаускас М.А. Генерация степенных сравнений как способ открытого шифрования и протокол отрицаемого шифрования // Интеллектуальные технологии на транспорте. 2018. № 1(13). - C. 32-37. -http://www.itt-pgups.ru.
11. Молдовян А. А., Татчина Я. А. Способы псевдовероятностного блочного шифрования // Интеллектуальные технологии на транспорте. - 2018. № 1(13). - C. 25-31. -http://www.itt-pgups.ru.
Homomorphic Encryption in Databases
A.M. Shcelkunov, ML. Glukharev Emperor Alexander I St. Petersburg State Transport University St. Petersburg, Russia a_shchelkunov@mail.ru, mlgluharev@yandex.ru
Abstract. Homomorphic encryption is a cryptographic primitive. It has a large application value, and is also interesting from a mathematical point of view. Despite years of research in this field, the main problems remain unresolved. The article describes the main features of the organization of protected computing by a cryptographic primitive based on homomorphic encryption. It is discussed how to perform secure calculations on client data stored on a remote, untrusted server in the database. An example of a secure server with a cloud database is considered. The description of the experimental application in the programming language Python for evaluating the performance and suitability of algorithms that implement a homomorphic cryptosystem with the possibility of addition and multiplication over encrypted data in the Zn ring is described. The results of numerical experiments with parameters are discussed: the level of security, the types of performed operations, the maximum length of the operands, and the running time of the application.
Keywords: homomorphic cryptography, homomorphic encryption, matrix polynomials, cryptographic calculations, data protection, secure computing, computer security.
References
1. Rivest R. L, Adleman L., Dertouzos M. L. On data banks and privacy homomorphisms // Foundations of secure computation, 1978. Vol. 32, no. 4, p. 169-178.
2. ElGamal encryption [Elektronnyy resurs] / Vikipediya. Rezhim dostupa: https://en.wikipedia.org/ wiki/ElGamal_ encryption. Data dostupa: 01.04.2016.
3. Burtyka F. B. Simmetrichnoe polnost'yu gomomorfnoe shifrovanie s ispol'zovaniem neprivodimykh matrich-nykh polinomov // Izv. YuFU. Tekhn. nauki. - 2014. p. 107-122.
4. Song D., Wagner D., Perrig A. Practical techniques for searches on encrypted data // SP '00 Proc. 2000 IEEE Symp. Security and Privacy-Berkeley: Univ. California, 2000.
5. Boneh D., Gentry C., Halevi S., Wang D., Wu D. J. Private database queries using somewhat homomorphic encryption // Applied cryptography and network security Springer, 2013, p. 102-118.
6. Boneh D., Gentry C., Halevi S., Wang F., Wu D. J. Private database queries using somewhat homomorphic encryption // Applied Cryptography and Network Security: 11th Int. Conf., ACNS 2013, Banff, AB, Canada, June 25-28, 2013. Proc. / M. Jacobson, M. Locasto, P. Mohassel, and R. Safavi-Naini, eds. - Berlin : Springer, 2013. - (Lect. Notes Comp. Sci. Security Cryptology; Vol. 7954). - P. 102-118.
7. Gasarch W.. A survey on private information retrieval // Bulletin of the eatcs Citeseer, 2004.
8. Varnovskiy, N.P. Gomomorfnoe shifrovanie / N.P. Varnovskiy, A.V. Shokurov // Trudy Instituta Sitemnogo pro-grammirovaniya: Tom 12. (pod red. V. P. Ivannikova). - M. : ISP RAN, 2006, c. 27-36.
9. Gentry C. A Fully Homomorphic Encryption Scheme: Ph. D. thesis.-Stanford Univ., 2009.
10. Moldovyan N. A., Vaychikauskas M. A. Generatsiya stepennykh sravneniy kak sposob otkrytogo shifrovaniya i protokol otritsaemogo shifrovaniya // Intellek-tual'nye tekhnologii na transporte. - 2018. - No 1(13). - P. 32-37. -http://www.itt-pgups.ru.
11. Moldovyan A. A., Tatchina Ya. A. Sposoby psevdove-royatnostnogo blochnogo shifrovaniya // Intellektual'nye tekhnologii na transporte. - 2018. - No 1(13). - P. 25-31. -http://www.itt-pgups.ru.