Шифрование базы данных

Из Википедии, бесплатной энциклопедии

Шифрование базы данных — использование технологии шифрования для преобразования информации, хранящейся в базе данных (БД), в шифротекст, что делает её прочтение невозможным для лиц, не обладающих ключами шифрования[1].

Классификация подходов к шифрованию. А) Шифрование на уровне хранилища. Б) Шифрование на уровне базы данных. В) Шифрование на уровне приложения. DBMS — англ. DataBase Management System, система управления базой данных. DATA — часть данных, относящиеся к запросу.

Основные подходы можно классифицировать по тому, на каком уровне происходит шифрование[1][2]:

  1. Шифрование на уровне хранилища,
  2. Шифрование на уровне базы данных,
  3. Шифрование на уровне приложения.

Шифрование на уровне хранилища[править | править код]

Также называемое «прозрачным» (англ. Transparent Database Encryption, TDE). Данная технология, применяется, например, в продуктах Microsoft и Oracle для шифрования и дешифрования ввода-вывода файлов БД. Данные шифруются перед записью на диск и дешифруются во время чтения в память, что решает проблему защиты «неактивных» данных, но не обеспечивает сохранность информации при передаче по каналам связи или во время использования. Преимуществом TDE является то, что шифрование и дешифрование выполняются прозрачно для приложений, то есть их модификация не требуется[3][4][5].

Реализация Microsoft[править | править код]

TDE применяется для файлов БД и журнала транзакций на уровне страниц. Страницы шифруются с помощью специального симметричного ключа шифрования базы данных (англ. Database Encryption Key), защищённого сертификатом, который хранится в БД master и шифруется её главным ключом, или асимметричным ключом, защищённым модулем расширенного управления ключами (англ. Extensible Key Manager, EKM). Применение TDE не увеличивает размер зашифрованной БД, а влияние на производительность незначительно[3].

Реализация Oracle[править | править код]

TDE применяется для файлов БД на уровне столбцов. Для таблицы, содержащей выбранные к шифрованию столбцы, создаётся симметричный ключ шифрования, защищённый главным ключом, который хранится в безопасном месте за пределами БД, называемом бумажником (англ. Wallet). Зашифрованные ключи таблиц содержатся в словаре данных (англ. Data Dictionary)[4].

Шифрование файловой системы[править | править код]

Важно отметить, что традиционные методы шифрования баз данных обычно шифруют и дешифруют содержимое БД, администрирование которой обеспечивается системой управления базами данных, работающей поверх операционной системы[6]. Это уменьшает защищённость информации, так как зашифрованная БД может быть запущена на открытой или потенциально уязвимой операционной системе. Например, Microsoft использует технологию шифрования файловой системы (англ. Encrypting File System, EFS), которая обеспечивает шифрование на уровне файлов. Каждый объект шифруется с помощью уникального ключа шифрования файлов (англ. File Encryption Key), защищённого сертификатом пользователя. Этот сертификат может быть составным, что даёт возможность получить доступ к файлу больше чем одному пользователю. Из-за расширения сферы шифрования, использование EFS может снизить производительность и усложнить администрирование, так как системному администратору требуется доступ к операционной системе для использования EFS[7][8].

Шифрование на уровне базы данных[править | править код]

Одним из примеров шифрования на уровне базы данных является шифрование на уровне столбцов (англ. Column-Level Encryption), которое записывает в базу данных уже зашифрованные данные, а саму базу данных — без дальнейшего шифрования — в хранилище. Особенностью шифрования на уровне столбцов является использование единого ключа при обработке данных одного столбца. Ключи могут быть назначены пользователям и защищены паролем для предотвращения автоматической расшифровки, однако это усложняет администрирование БД. При использовании шифрования на уровне столбцов необходимо внесение изменений в клиентские приложения. Помимо этого уменьшается производительность БД[4][7].

Шифрование на уровне приложений[править | править код]

В шифровании на уровне приложений процесс шифрования осуществляется приложением, которое создаёт или изменяет данные, то есть он происходит перед записью в базу данных. Этот подход является более гибким, так как приложению известны роли или права доступа пользователей, а также информация о том, какие данные являются конфиденциальными[8][9].

Преимущества[править | править код]

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

Недостатки[править | править код]

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

CryptDB[править | править код]

Серым цветом выделены элементы, добавленные к стандартному решению без шифрования. Все, что находится правее вертикальной черты, может находится на отдалённом сервере, поэтому соединение между прокси-сервером и системой управления БД, выделено пунктиром — оно предполагается небезопасным.
Принципиальная схема CryptDB. Серым цветом выделены элементы, добавленные к стандартному решению без шифрования. Все, что находится правее вертикальной черты, может находиться на отдалённом сервере, поэтому соединение между прокси-сервером и системой управления БД, выделено пунктиром — оно предполагается небезопасным.


Является одним из примеров шифрования на уровне приложения. В архитектуре можно выделить[10]: прокси-сервер, к которому есть защищённый доступ с приложения, сервер с SQL базой данных, в которой зашифрованы столбцы. Запросы с прокси-сервера идут на этот сервер с базой данных (англ. DBMS server) по каналу, который предполагается незащищённым. Отличие от вышеупомянутого шифрования на уровне столбцов состоит в следующем: сервер не расшифровывает данные столбцов, более того, прокси-сервер не посылает ключи или иную информацию, позволяющую серверу расшифровать столбцы. С точки зрения сервера с базой данных запросы с прокси-сервера выглядят, как обыкновенные команды работы с SQL базой данных. Поэтому на сервере может стоять готовое решение, например, в виде использованной авторами CryptDB MySQL. Поскольку DBMS сервер может выполнять функции только над зашифрованными данными, то задачей прокси-сервера является трансляция запросов пользователя в эквивалентные запросы и операции, действующие над шифрованными данными. Эта задача решается при помощи различных классов шифров, общая черта которых — сохранение некоторого свойства открытых текстов. Некоторые из них перечислены далее.[10]

Пример действия DET шифра на столбец имен.

Класс DET[править | править код]

Детерминированные шифры, с английского deterministic encryption. Его составляют все шифры, обладающие следующим свойством: при одинаковом ключе одинаковые открытые тексты шифруются также одинаково.

Следовательно, если все данные в столбце зашифрованы таким шифром, то операции над столбцом открытых данных, требующие сравнения двух значений, эквивалентны таковым над столбцом зашифрованных данных. Например, если пользователь хочет посчитать количество строк с значением в столбце Имя, равным «Алиса», то прокси-сервер заменяет в запросе пользователя только параметры, но не операторы. «Алиса» — на соответствующий шифротекст. Этот класс шифров позволяет выполнять запросы, содержащие среди прочих: COUNT, GROUP BY, DISTINCT и SELECT с предикатом равенства или неравенства. Примером детерминированного шифра может служить блочный шифр с фиксированным вектором начального состояния (англ. IV, initialization vector)[11].

Класс HOM[править | править код]

Гомоморфные шифры, с английского homomorphic encryption. Этот класс состоит из шифров, которые[12] преобразуют значения в столбцах так, чтобы операции над ними однозначно соответствовала, возможно другая, операция над шифротекстами. В архитектуре CryptDB используется криптографическая система Пэйе, которая позволяет вычислить шифротекст суммы значений, если известен шифротекст каждого из них, именно:

Стало быть, если столбец зашифрован гомоморфным шифрованием, сумму выбранных значений, можно посчитать, если расшифровать произведение соответствующих шифротекстов. Поэтому, прокси-сервер транслирует запрос SUM пользователя в произведение (выражается через EXP, LOG), а потом, имея ответ от сервера базы данных, расшифровывает его и выдаёт пользователю.

Пример действия OPE шифра на столбец возрастов

Класс OPE[править | править код]

Сохраняющие упорядоченность шифры, с английского order preserving encryption. Шифр из этого класса действует на данные в столбце так, что .

Поэтому, если столбец зашифрован шифром класса OPE, то обращение ORDER BY выполненное над открытым текстом столбца эквивалентно такому над зашифрованным столбцом. Для таких данных доступны операции над диапазоном значений, BETWEEN, a также MIN, MAX, RANK. Примером такого шифрования может быть отображение целого числа p в число с, которое есть сумма p псевдослучайных положительных чисел[13].

Устойчивость к криптоатакам[править | править код]

К недостаткам выше описанных классов шифров и архитектуры в частности следует отнести уязвимость для некоторых известных типов атак. В работе Naveed, 2015 рассматривается атакующая сторона, которой доступны шифротексты и некоторое априорное знание о распределение открытого текста. Предположение имеет соответствие в реальной жизни, например, в базе данных может содержаться информация медицинского характера, а атакующая сторона, помимо непосредственно доступа к зашифрованной базе данных, может владеть информацией из переписи населения или из аналогичных учреждений. То есть, знать распределение, например, групп крови. Основываясь на предположении, что именно доступно атакующей стороне, авторы предлагают несколько методов восстановления данных в столбцах, зашифрованных, как DET шифром, так OPE шифром. Поскольку детерминированный шифр одному и тому же значению в столбце сопоставит одинаковый шифротекст, то частотное распределение данных в зашифрованном столбце будет совпадать с таковым открытого текста. Классический частотный анализ имеет сложность , где N — размер всего множества открытых текстов. Значит, такая атака эффективна, если N невелико. К столбцу с шифрованием, сохраняющим упорядоченность, применима атака, похожая на частотный анализ, но вместо конкретных значений частот сопоставляются ранг в множестве шифротекстов столбца и ранг слова в множестве открытых текстов. Атака, как отмечается, наиболее эффективна для столбцов, где множество возможных открытых текстов представлено наиболее полно[14].

Также разработаны метод атаки на основе эмпирической функции распределения (англ. ECDF), более подходящий для атаки на столбец с неравномерно представленными шифротекстами, и метод, который рассматривает информацию из нескольких столбцов, а также их корреляцию[15]. Помимо этого в работе Minaud, 2019 представлена схема частичного восстановления данных в OPE столбце, при наличии информации единственно о всех запросах. Алгоритм, в отличие от предыдущих предложенных, масштабируется, поскольку в оценке его сложности не входит N[14].

Кроме того, ни DET, ни OPE шифры, как и все детерминированные шифры, не обладают свойством неразличимости. Действительно, чтобы понять, является ли данный шифротекст зашифрованным сообщением или атакующей стороне достаточно запросить шифротексты для обоих сообщений — что реализуемо, если используется открытое шифрование, и сравнить с данным шифротекстом H[14].

Симметричное и асимметричное шифрование базы данных[править | править код]

Существует два основных способа шифрования информации: симметричный и асимметричный. Главным принципом в них является то, что передатчик и приёмник заранее знают алгоритм шифрования и ключ к сообщению, без знания которых информация представляет собой бессмысленный набор символов[8][16].

Симметричное шифрование[править | править код]

Симметричное шифрование (шифрование с закрытым ключом) является самым старым и известным методом. В контексте баз данных он включает в себя закрытый ключ, применяемый для шифрования и дешифрования информации, хранящейся в БД и вызываемой из неё. Этот ключ изменяет данные таким образом, что их прочтение без расшифровки становится невозможным. Явным недостатком этого метода является то, что может произойти утечка конфиденциальной информации, если ключ окажется у лиц, которые не должны иметь доступ к данным. Однако использование всего лишь одного ключа в процессе шифрования даёт преимущество в виде скорости и простоты применения данной технологии[8][16][17].

Асимметричное шифрование[править | править код]

Проблема попадания секретного ключа в чужие руки при передаче по каналам связи, которой обладает шифрование с закрытым ключом, решена в асимметричном шифровании (шифровании с открытым ключом), в котором есть два связанных между собой ключа — это пара ключей. Открытый ключ известен всем и может передаваться по незащищённому каналу связи. В то время как второй, закрытый ключ, хранится в секрете и является уникальным для каждого пользователя. Открытый ключ используется для шифрования данных, а закрытый — для расшифрования. Асимметричное шифрование является более безопасным, по сравнению с симметричным, но в то же время оно существенно медленнее[8][16]. Из прочих недостатков можно отметить то, что детерминированное асимметричное шифрование, которое используется в базах данных, в которых шифрование происходит на уровне приложений (см. CryptDB), уязвимо для атаки на основе подобранного открытого текста[18].

См. также[править | править код]

Примечания[править | править код]

  1. 1 2 Luc Bouganim, Yanli Guo. Database Encryption // Encyclopedia of Cryptography and Security : [арх. 22 декабря 2019] / Ed. by Henk C. A. van Tilborg and Sushil Jajodia. — Springer, 2011. — P. 307—312. — ISBN 978-1-4419-5906-5.
  2. Types of Database Encryption Methods (англ.). Solarwinds MSP (10 мая 2019). Дата обращения: 25 декабря 2019. Архивировано 25 декабря 2019 года.
  3. 1 2 Прозрачное шифрование данных (TDE). microsoft.com. Дата обращения: 2 декабря 2016. Архивировано 24 марта 2017 года.
  4. 1 2 3 Transparent Data Encryption. oracle.com. Дата обращения: 2 декабря 2016. Архивировано 9 апреля 2018 года.
  5. Postgres and Transparent Data Encryption (TDE). enterprisedb.com. Дата обращения: 15 декабря 2016. Архивировано 28 ноября 2016 года.
  6. Дейт, 2005.
  7. 1 2 Database Encryption in SQL Server 2008 Enterprise Edition. microsoft.com. Дата обращения: 2 декабря 2016. Архивировано 8 декабря 2017 года.
  8. 1 2 3 4 5 6 7 Baccam, Tanya Transparent Data Encryption: New Technologies and Best Practices for Database Encryption. Sans.org. SANS Institute (апрель 2010). Дата обращения: 25 октября 2015. Архивировано из оригинала 12 апреля 2018 года.
  9. 1 2 3 Шифрование на уровне приложений. thales-esecurity.com. Дата обращения: 14 декабря 2016. Архивировано из оригинала 3 августа 2016 года.
  10. 1 2 Raluca Ada Popa, Catherine M. S. Redfield, Nickolai Zeldovich, Hari Balakrishnan. CryptDB: processing queries on an encrypted database (англ.) // Communications of the ACM. — 2012-09-01. — Vol. 55, iss. 9. — P. 103. — doi:10.1145/2330667.2330691.
  11. Linda A. Bertram, Gunther van Dooble. Nomenclatura - Encyclopedia of modern Cryptography and Internet Security: From AutoCrypt and Exponential Encryption to Zero-Knowledge-Proof Keys. — ISBN 3749461686.
  12. Yi, Xun (College teacher),. Chapter 2 // Homomorphic encryption and applications. — Cham. — 1 online resource (xii, 126 pages) с. — ISBN 978-3-319-12229-8, 3-319-12229-0.
  13. Rakesh Agrawal, Jerry Kiernan, Ramakrishnan Srikant, Yirong Xu. Order preserving encryption for numeric data (англ.) // Proceedings of the 2004 ACM SIGMOD international conference on Management of data - SIGMOD '04. — Paris, France: ACM Press, 2004. — P. 563. — ISBN 978-1-58113-859-7. — doi:10.1145/1007568.1007632. Архивировано 17 мая 2011 года.
  14. 1 2 3 Attack of the week: searchable encryption and the ever-expanding leakage function. Дата обращения: 17 декабря 2019. Архивировано 26 декабря 2019 года.
  15. F. Betül Durak, Thomas M. DuBuisson, David Cash. What Else is Revealed by Order-Revealing Encryption? (англ.) // Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security - CCS'16. — Vienna, Austria: ACM Press, 2016. — P. 1155—1166. — ISBN 978-1-4503-4139-4. — doi:10.1145/2976749.2978379.
  16. 1 2 3 Description of Symmetric and Asymmetric Encryption. microsoft.com. Дата обращения: 2 декабря 2016. Архивировано 13 сентября 2016 года.
  17. Коробейников, 2004, с. 56.
  18. Alexandra Boldyreva, Nathan Chenette, Younho Lee, Adam O’Neill. Order-Preserving Symmetric Encryption // Advances in Cryptology - EUROCRYPT 2009 / Antoine Joux. — Berlin, Heidelberg: Springer Berlin Heidelberg, 2009. — Т. 5479. — С. 224–241. — ISBN 978-3-642-01000-2, 978-3-642-01001-9. — doi:10.1007/978-3-642-01001-9_13.

Литература[править | править код]


Ссылки[править | править код]

  • Robert Morris, Ken Thompson. Password security: a case history (англ.) // Communications of the ACM : журнал. — ACM New York, NY, USA, 1979. — Vol. 22, no. 11. — P. 594—597.