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

▍ Криптография в облаке


Посмотрим, как шифруются данные на разных хостингах. Для примера возьмём популярный облачный сервис 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 ?

Комментарии (3)


  1. CrazyAlex25
    14.10.2024 09:07

    Всё есть в rclone (https://rclone.org/crypt/)


  1. Shpankov
    14.10.2024 09:07

    Мы подошли к решению проблемы иначе. Всё шифрование происходит в браузере пользователя, с его собственным уникальным ключом шифрования, а в облако не сервер синхронизации уходит бесформенный массив данных. Таким образом, даже при утечке данных с серверов расшифровать их будет очень проблематично, что нивелирует весь смысл взлома сервера. Учитывая, что и сами серверы хорошо защищены, данные синхронизации сохраняются достаточно надёжно.

    К слову, аналогично на машине пользователя работает и блокировщик: списки блокировки обновляются каждый день при запуске браузера, и в процессе работы при попытке открыть URL проверка осуществляется непосредственно в браузере, никакие данные никуда не отправляются на сверку со списками.


    1. ss-nopol
      14.10.2024 09:07

      А если нужен совместный доступ к файлу?