Высокопроизводительные вычисления (High Performance Computing, HPC) стали сегодня неотъемлемой частью технологического процесса, однако суперкомпьютеры — достаточно дорогие устройства, требующие соответствующего обслуживания и штата квалифицированных специалистов, что далеко не всегда доступно компаниям и организациям. С другой стороны, в образовательных учреждениях имеется множество высокопроизводительных вычислительных систем, которые часто недозагружены. Альтернативой покупке и построению собственной системы HPC может стать аренда машинного времени в облаке, однако далеко не все компании и организации готовы отдать свои конфиденциальные данные для обработки на стороне. В этой ситуации единственный выход — шифрование исходных данных и результатов — например, путем реализации гомоморфной схемы шифрования, позволяющей производить действия с зашифрованным текстом и получать зашифрованный результат, соответствующий результату операций, выполняемых с открытым текстом. В этой схеме шифрование и дешифрование производятся на стороне заказчика и данные в открытом виде не попадают в «чужие руки».

Работа над подобной схемой ведется около 30 лет, и лишь недавно была доказана ее принципиальная осуществимость [1], однако предлагаемые до сих пор схемы требуют больших вычислительных затрат и непригодны для практической реализации [2]. Существуют промежуточные решения (применяемые, например, Amazon [3]), когда в суперкомпьютере создается шифрованный раздел с входными данными и результатами расчета, что обеспечивает защиту от несанкционированного доступа со стороны посторонних лиц, но не со стороны администраторов ЦОД.

Дополнительно безопасность может быть повышена с помощью схем, подобных Trusted Computing [4], использующих аппаратные решения. Другой альтернативой может стать использование грид-системы, которая строится в предположении, что каждый из географических доменов администрируется автономно. Это подразумевает разделение данных и ресурсов между административными доменами и увеличивает число администраторов, которые не являются доверенными лицами для заказчиков. Кроме того, ввиду гетерогенной природы аппаратно-программного обеспечения грид-узлов необходимо поддерживать единые требования к компонентам и среде их функционирования, проводить мониторинг их соответствия для обеспечения конфиденциальности, целостности и доступности, а также контролировать внешний информационный обмен и минимизировать риски, связанные с внешними нарушителями, на транспортном уровне взаимодействия между узлами грид-сети [5]. Все это затрудняет создание системы расчетов, оперирующих конфиденциальными данными.

Наиболее перспективным, на наш взгляд, является расширение решения, применяемого компанией Amazon, — данные шифруются существующими проверенными алгоритмами и расшифровываются только на время вычислений, при этом ключ шифрования динамически запрашивается у заказчика во время расчетов. В этом случае предполагается, что из скомпилированной программы очень сложно извлечь многоуровневую хеш-функцию шифрования. Данное решение предполагает наличие встраиваемой в приложение программной библиотеки, осуществляющей функции потокового шифрованного ввода-вывода (то есть частично реализующей функциональность шифрованной файловой системы). Таким образом, решение может быть применено к любой вычислительной программе — скорость вычислений при этом не меняется, хотя возрастает время ввода-вывода.

Для реализации такого решения требуется построить схему, обеспечивающую сохранность данных пользователя при удаленном запуске программы, причем допускается, что высокопроизводительная система может находиться вне пределов контроля, связь осуществляется по открытым каналам, а облачный ЦОД управляется администраторами, которые не обязаны быть доверенными лицами заказчика. Защита данных производится в предположении, что затраты на их извлечение из оперативной памяти и декомпилирование программных компонентов гораздо выше, чем ценность данных заказчика.

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

Библиотека шифрования может подключаться при компиляции, причем сама вычислительная программа не должна использовать динамически подключаемые библиотеки. В противном случае библиотеки могут быть подменены на стороне ЦОД и данные, которые проходят через библиотечные функции, могут быть скомпрометированы. Необходимо также защититься от подмены кода программы. Для этого ключ шифрования строится не только по предключу, но и по бинарному коду расчетной программы.

Предложенная схема позволяет заказчику зарегистрировать время первого доступа к своим данным и полностью исключает случайную их утечку.

Поточное блочное шифрование файлов реализовано на исходных кодах криптографической файловой системы EncFS, а функции шифрования основаны на библиотеке crypto из пакета OpenSSL. Защищенное сетевое соединение для получения предключа устанавливается с помощью библиотеки сетевого взаимодействия libcurl проекта cURL. Функции ввода-вывода с блочным дешифрованием/шифрованием на лету реализуют шифрование, инициируя получение ключа при запуске вычислительной программы. Цель состоит в том, чтобы исключить попадание входных или выходных данных на суперкомпьютер ЦОД в дешифрованном виде.

Решение должно быть достаточно универсальным, чтобы для его использования не требовалось переписывать вычислительную программу. Поэтому на основе поточного блочного шифрования файлов криптографической файловой системы EncFS были реализованы аналоги stdio-функций стандартной библиотеки libc. Каждая из них работает с шифрованными файлами, вызывая оригинальную функцию в случае отсутствия необходимости шифрования. Данные хранятся зашифрованными блоками. При чтении хотя бы одного байта из зашифрованного файла расшифровывается весь блок. Также при записи блок сначала расшифровывается целиком, изменяется в памяти, зашифровывается обратно и записывается на свое место. Последний рабочий блок кэшируется. Маленький размер блока шифрования уменьшает время произвольного доступа, но увеличивает число запросов при чтении/записи больших фрагментов файлов. В ходе шифрования блоков используется алгоритм AES, причем можно переключаться на любой другой алгоритм шифрования из состава пакета OpenSSL. Соединение между вычислительной программой и проверяющей утилитой осуществляется по протоколу HTTPS со взаимной проверкой: сертификаты обеих сторон должны быть подписаны сертификатом заказчика.

Программный комплекс реализован и протестирован для платформы Linux при выполнении расчетов зашифрованных моделей реальных нефтяных месторождений с помощью гидродинамического пакета моделирования tNavigator. Тестирование было проведено на кластере МГУ «Ломоносов». В расчетах была задействована трехфазная модель месторождения с 21,8 млн активных блоков, описывающих историю на протяжении 10 лет. Зашифрованная версия модели была успешно рассчитана на 512 узлах (Xeon 5570 Nehalem, два процессора по четыре ядра, 8 Гбайт оперативной памяти). Конфигурация кластера «Ломоносов» не позволяет отдельным узлам выходить в Сеть, поэтому запуск проводился по упрощенной схеме, в которой предключ передавался в зашифрованном виде вместе с входными данными. Злоумышленнику в этом случае понадобилось бы  заполучить  одну хеш-функцию из библиотеки, а не две; время доступа к данным не было зафиксировано на стороне заказчика. В зависимости от числа узлов кластера, на которых запускался расчет, замедление инициализации (чтения) составило от 45 до 60%.

***

В проекте была реализована криптографическая схема для защиты входных и выходных данных при запуске вычислительных приложений на удаленной недоверенной вычислительной системе, находящейся в облачном ЦОД. Предложенная схема расширяет подход, примененный в Amazon, не увеличивая при этом продолжительность основного расчета, позволяет регистрировать момент доступа к данным и полностью исключает их случайную утечку.

Литература

  1. Gentry Craig. A fully homomorphic encryption scheme. Ph.D. thesis: Stanford University. 2009. URL: http://crypto.stanford.edu/craig (дата обращения: 20.10.2014).
  2. Schneier Bruce. Homomorphic Encryption Breakthrough. 2009. URL: https://www.schneier.com/blog/archives/2009/07/homomorphic_enc.html (дата обращения: 20.10.2014).
  3. Morgan Timothy Prickett. Maersk Oil Tests Reservoir Simulations On AWS. 2014. URL: http://www.enterprisetech.com/2014/04/10/maersk-oil-tests-reservoir-simulations-aws (дата обращения: 20.10.2014).
  4. Trusted Computing Group. Solutions. URL: http://www.trustedcomputinggroup.org/solutions (дата обращения: 20.10.2014).
  5. Владимир Заборовский, Алексей Лукашин. Высокопроизводительная защищенная облачная среда // Открытые системы.СУБД. — 2013. — № 6. — С. 10–13. URL: http://www.osp.ru/os/2013/06/13036845 (дата обращения: 20.10.2014).

Кирилл Богачев (bogachev@mech.math.msu.su) — доцент, Евгений Попеленский (popelensky@gmail.com) — аспирант, Андрей Волков (avolk07@mail.ru) — аспирант, кафедра вычислительной математики, мехмат МГУ.