Облачные сервисы по-разному подходят к шифрованию данных на своём хостинге. В некоторых случаях это шифрование не удовлетворяет требованиям безопасности, поэтому приходится брать задачу в свои руки и шифровать файлы самостоятельно.
▍ Криптография в облаке
Посмотрим, как шифруются данные на разных хостингах. Для примера возьмём популярный облачный сервис AWS. Он предлагает ряд услуг по шифрованию, однако у инструментов и сервисов непонятные названия и неочевидные сценарии использования. Неудивительно, что многие пользователи не знают о них.
Примерно такой же набор инструментов есть и на других облачных сервисах.
Облачную криптографию можно разделить на две категории: криптосервисы и клиентское ПО. Вторая категория подразумевает, что служба работает у клиента (даже если клиент находится на виртуальной машине), хотя некоторые продукты стирают грань между двумя категориями, как AWS Cryptographic Computing for Clean Rooms (C3R): инструмент на стороне клиента, тесно интегрированный в сервис AWS Clean Rooms. Или Secrets Manager, который работает на стороне клиента, но является собственным сервисом AWS.
Один из бывших разработчиков AWS составил краткое руководство по криптографическим инструментам AWS:
▍ Криптографические сервисы
-
AWS CloudHSM (аппаратный модуль безопасности HSM в облачном окружении). Этот сервис рекомендуется использовать в том случае, если государственные регуляторы предъявляют такое конкретное требование, иначе лучше предпочесть KMS.
-
AWS KMS можно рассматривать как удобную обёртку вокруг HSM. Здесь цифровые подписи, симметричный HMAC и возможности шифрования/дешифрования с ключами внутри HSM. Но KMS предназначен для работы внутри облака с «обёрнутыми» ключами (envelope encryption), а не для реального шифрования/дешифрования данных. То есть сначала пользователь должен самостоятельно локально зашифровать данные с помощью ключа DEK (data encryption key), а в облаке этот ключ шифруется другим ключом KEK (key encryption key) и используется на втором уровне шифрования, отсюда и название «шифрование в конверте» (envelope encryption).
Пример шифрования и дешифрования данных типа envelope encryption в Google Cloud, источник
Эта схема шифрования работает в связке с клиентским программным обеспечением (см. ниже).
Недавно KMS добавила поддержку внешних хранилищ ключей, так что сервис может обращаться к постороннему HSM, который находится в дата-центре у клиента. Это нужно для соответствия требованиям «суверенитета данных» в некоторых странах, из-за чего придётся пожертвовать надёжностью и производительностью.
▍ Криптографический клиентский софт
- Утилита AWS Encryption SDK используется для шифрования произвольных данных в облачных приложениях на клиентских инстансах. Функциональность может быть минимальной (просто указать на факт использования KMS) или очень продвинутой вроде иерархического управления ключами для минимизации сетевых обращений к KMS в системе с несколькими ключами (multi-keyring).
AWS Encryption SDK в заголовке зашифрованного сообщения хранит контекст шифрования, переданный KMS. В случае использования алгоритма ECDSA, для каждого сообщения генерируется эфемерная пара ключей, а открытый ключ хранится в контексте шифрования.
Есть функция кэширования ключей данных, чтобы сократить количество вызовов KMS и уменьшить задержку в облачных приложениях.
- AWS Database Encryption SDK — аналогичный сервис, но для СУБД. В предыдущей инкарнации назывался DynamoDB Encryption Client.
▍ Другие библиотеки и сервисы
-
AWS Secrets Manager, менеджер паролей вроде 1Password, только для облачных приложений. В отличие от обычных парольных менеджеров, здесь модель безопасности основана на учётных данных AWS, а не на мастер-пароле или другом секрете. Кроме того, секреты версионируются, чтобы избежать проблем при ротации.
Secrets Manager можно настроить на автоматическую ротацию некоторых паролей через регулярные промежутки времени.
AWS Secrets Manager можно использовать также для ключей API и других конфиденциальных данных, чтобы не выкладывать их в открытом виде в исходном коде и т. д.
- AWS Cryptographic Computing for Clean Rooms (C3R) позволяет нескольким сторонам определить общие записи в их базах данных и сравнить их, не раскрывая друг другу содержимого.
▍ Apple E2E для бэкапов
Компания Apple начиная с версий iOS 16.2, iPadOS 16.2 и macOS 13.1 представила продвинутые опции шифрования в облаке (Advanced Data Protection for iCloud) — сквозное E2E-шифрование для 25-ти категорий данных (ранее было 15), в котором ключи хранятся на устройстве пользователя, а не на сервере Apple.
Таким образом, с декабря 2022 года сквозное шифрование на устройствах Apple стало доступно для бэкапов.
На случай потери доступа к аккаунту желательно установить контакт для восстановления данных:
▍ Веб-шифрование
Если под рукой нет инструментов командной строки, а в наличии только браузер и нужно однократно выполнить некую операцию, можно использовать CyberChef — простое, интуитивно понятное веб-приложение для всевозможных шифровальных нужд. Среди операций:
- простое кодирование и декодирование (например, XOR и Base64),
- более сложное шифрование (например, AES, DES и Blowfish),
- создание бинарных и шестнадцатеричных дампов, перевод данных из шестнадцатеричного и бинарного форматов в исходный текст,
- сжатие и декомпрессия данных,
- вычисление хэшей и контрольных сумм,
- парсинг адресов IPv6 и X.509,
- изменение кодировок символов,
- перевод даты и времени между разными часовыми поясами,
- и многое другое.
Инструмент разработан, чтобы специалисты, а также менее технически подкованные пользователи могли выполнять сложные манипуляции с данными без необходимости изучать профессиональные инструменты и алгоритмы. CyberChef распознаёт несколько вложенных уровней шифрования друг поверх друга.
Автор программы предупреждает, что разработка ещё не закончена, в программе могут быть баги, и на неё нельзя полагаться в продакшне, это ещё экспериментальный проект, хотя и выпущена уже десятая версия.
Доступно полнофункциональное онлайн-демо, где можно шифровать файлы или обрабатывать тексты:
Поле ввода — в правом верхнем углу. Туда можно вставить текст или файл, с которым нужно выполнить операцию. В правом нижнем углу отображается результат обработки. Слева находится список операций, которые может выполнить программа, распределённые по категориям, с поиском. В центре — область рецептов, куда можно перетащить операции, указать аргументы и параметры.
CyberChef можно установить локально на своём сервере в контейнере. Вариант самостоятельной сборки:
docker build --tag cyberchef --ulimit nofile=10000 .
docker run -it -p 8080:80 cyberchef
Установка из готового образа:
docker run -it -p 8080:80 ghcr.io/gchq/cyberchef:latest
В конце концов, можно просто скачать ZIP-файл (44,2 МБ) и просто запустить веб-приложение на ПК или сервере. Это актуально для шифрования чувствительных данных, которые не хочется передавать по сети:
Скачиваем файл, разархивируем файлы в отдельную папку и просто открываем файл
CyberChef_v10.19.2.html
из корневой папки (на данный момент последняя версия 10.19.2), и веб-приложение запускается локально в браузере.В нём можно шифровать файлы до 2 ГБ, в зависимости от браузера, но некоторые операции на больших файлах могут занять длительное время. Поддерживаются все возможные алгоритмы шифрования, список шифров слева:
▍ Самостоятельное шифрование
Шифрование поддерживается стандартными программами для резервного копирования, такими как restic, rsync+gocryptfs (баш-скрипт) и др.
Gocryptfs — это утилита для шифрования файлов перед отправкой по rsync. Файловое шифрование реализовано в виде монтируемой файловой системы FUSE. На скриншоте вверху показана смонтированная файловая система
gocryptfs
(слева) и зашифрованные файлы (справа). Каждому зашифрованному файлу gocryptfs
соответствует один исходный файл.Зашифрованные файлы могут храниться в любой папке на жёстком диске, на USB-накопителе или на удалённом сервере. Одно из преимуществ шифрования на основе файлов диска заключается в том, что зашифрованные файлы удобно синхронизировать с помощью стандартных инструментов, таких как упомянутый
rsync
. Схема шифрования включает хэширование паролей scrypt, шифрование GCM для всего содержимого файлов, широкоблочное шифрование EME имён файлов каждого каталога:
Проект создан по образцу EncFS с целью исправить его проблемы безопасности, обеспечивая при этом хорошую производительность.
Изначально программа написана под Linux (и MacOS), но есть сторонние реализации для Windows (cppcryptfs), Android (DroidFS) и Python (gocryptfs-inspect).
Кроме названных, есть и другие инструменты для шифрования файлов перед загрузкой в облако, например, Cryptomator:
Cryptomator интегрируется с облачным хранилищем, так что со стороны пользователя все файлы всегда доступны, хотя и хранятся на удалённом диске в зашифрованном виде.
В общем, хотя облачные сервисы и хостинги предлагают различные инструменты шифрования, для надёжности лучше делать это самостоятельно на локальной машине перед тем, как отправить данные в облако.
© 2024 ООО «МТ ФИНАНС»
Telegram-канал со скидками, розыгрышами призов и новостями IT ?
Комментарии (6)
Shpankov
14.10.2024 09:07Мы подошли к решению проблемы иначе. Всё шифрование происходит в браузере пользователя, с его собственным уникальным ключом шифрования, а в облако не сервер синхронизации уходит бесформенный массив данных. Таким образом, даже при утечке данных с серверов расшифровать их будет очень проблематично, что нивелирует весь смысл взлома сервера. Учитывая, что и сами серверы хорошо защищены, данные синхронизации сохраняются достаточно надёжно.
К слову, аналогично на машине пользователя работает и блокировщик: списки блокировки обновляются каждый день при запуске браузера, и в процессе работы при попытке открыть URL проверка осуществляется непосредственно в браузере, никакие данные никуда не отправляются на сверку со списками.
ss-nopol
14.10.2024 09:07А если нужен совместный доступ к файлу?
Shpankov
14.10.2024 09:07Ну, у нас не предусмотрено такого функционала - всё-таки это браузер и все данные в нём относятся к персональным. Но если есть такая необходимость - вы можете включить, например, только синхронизацию заметок на любом количестве машин в браузере, и у всех участников обмена файл заметки будет обновляться синхронно. Правда, это не очень подходит для коллабораций - есть некоторый временной лаг в синхронизации, это происходит не мгновенно.
supercat1337
14.10.2024 09:07Интересно. Если не секрет, а в каком проекте вы это используете? Файлообменник? Получается, что поиск по серверу будет недоступен?
Shpankov
14.10.2024 09:07Да, поиск по серверу недоступен, т.к. не нужен - все данные с сервера в актуальном состоянии находятся в браузере пользователя. Достаточно осуществлять поиск локально, чтобы найти нужную информацию.
Да, проект - браузер Vivaldi.
CrazyAlex25
Всё есть в rclone (https://rclone.org/crypt/)