CryptDB — проект по обеспечению надежного шифрования данных в СУБД
20 декабря 2011 года
Исследователи из Массачусетского технологического института представили проект CryptDB, в рамках которого предпринята попытка решения проблемы безопасного хранения данных в БД, обслуживаемых в облачных сервисах и других неподконтрольных системах. Основная проблема при хранении важной информации в неподконтрольных СУБД связана с возможностью утечки данных в процессе взлома сервиса или в результате неправомерных действий администраторов. Для решения этой проблемы в CryptDB обеспечена поддержка шифрования, при которой данные на стороне СУБД никогда не фигурируют в открытом виде, а все передаваемые в CУБД запросы содержат только зашифрованные данные, в том числе в условных блоках.
При использовании CryptDB, в процессе выполнения SQL-запросов все действия производятся только с зашифрованными данными, т.е. пользователь может отправить SQL-запрос к СУБД и получить результат без расшифровки информации на стороне сервера (данные будут расшифрованы на оборудовании клиента). Для обеспечения сохранения конфиденциальности информации используется многоуровневая система шифрования, при которой разные данные размещаются на разных вложенных криптографических уровнях, каждый из уровней имеет свой ключ и поддерживает ограниченный набор простейших операций над зашифрованными данными. Для скрытия данных на каждом уровне используются свои методы гомоморфного шифрования, при которых данные необратимо искажаются, но сохраняется возможность совершения определённых математических операций, которые дадут аналогичные результаты, что и операции над исходными данными (можно использовать зашифрованные данные для сравнения, сортировки, сложения и т.д. без предварительной расшифровки, например, выполняется условие decrypt(crypt(A) + crypt(B)) = A + B).
Манипуляции над зашифрованными данными накладывают ограничения на возможность выполнения вычислений внутри запроса (невозможны операции сравнения для вычисляемых значений, например, нельзя использовать "salary age*2+10", но можно "salary age" или "salary 10"), тем не менее поддерживаются большинство агрегатных функций и стандартных типов данных, таких как integer и varchar/text. CryptDB реализован в виде прокси, не требующего модификации кода СУБД. Для выполнения криптографических операций на стороне СУБД используется набор дополнительных функций (UDF, user-defined functions). Прокси состоит из двух частей: специальной библиотеки на языке С++ и модуля на языке Lua. Библиотека содержит реализацию парсера запросов и системы шифрования/расшифровки запросов, которые видоизменяют транзитный запрос, зашифровывая или расшифровывая данные и подставляя UDF-функции для выполнения вычислений и сравнений. Lua-модуль служит для прозрачной передачи запросов и приёма результатов от библиотеки на C++.
CryptDB поддерживает связывание по цепочке ключей шифрования и паролей пользователей СУБД. При такой схеме работы доступ к данным могут получить только пользователи, пароли которых привязаны к ключам шифрования. Администратор СУБД, даже получив каким-то образом ключи шифрования, которые на фигурируют на сервере, не сможет получить доступ данным, не зная паролей владельцев этих данных. Использование привязки ключей к паролям пользователей требует наличия в базе 11-13 уникальных аннотаций схем данных для защиты содержимого около 20 полей, а также правки 2-7 строк кода в web-приложении. В отличие от других подобных разработок, разработчикам CryptDB удалось обеспечить неплохую производительность: по сравнению с обычным MySQL использование CryptDB повышает нагрузку всего на 15-26%. При работе phpBB скорость выполнения операций замедлилась всего на 14.5%, при выполнении тестового набора TPC-C скорость замедлилось на 26%. Размер хранимых на диске данных при этом вырос примерно на 20%.
CryptDB выполнен в роли надстройки, способной работать с любыми СУБД MySQL 5.1 и PostgreSQL 9, не требуя модификации кода СУБД. Код CryptDB доступен через Git-репозиторий проекта (git clone -b public git://g.csail.mit.edu/cryptdb).
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.