Шифропанкам посвящается. Мы собрали тулкит из популярных программ (преимущественно с симметричным шифрованием), которые помогут защитить личные данные от несанкционированного доступа и попросили исследователя криптографии из компании «Криптонит» прокомментировать наш выбор.
Под катом безопасные решения для шифрования файлов при помощи браузера, для быстрой защиты, пересылки, загрузки в облако шифрованных данных, криптографические контейнеры с двойным дном, десяток консольных инструментов для криптографии и комбайн, объединяющий их под единым графическим интерфейсом. А еще ответы на животрепещущие вопросы, например: «Что лучше AES, Кузнечик, Serpent или Twofish»?
Штатное полнодисковое шифрование
Для начала коротко о стандартных решениях, интегрированных в операционные системы.
В современных смартфонах довольно надежная реализация полнодискового шифрования, по крайней мере, если судить по стоимости эксплоитов на черном рынке. Если вы используете пароль, а не пин-код, отключили биометрию, не трогали загрузчик, то рядовой злоумышленник вряд ли доберется до данных. С настольными операционными системами ситуация сложнее.
Apple использует в macOS технологию FileVault на базе алгоритма XTS-AES-128 с длиной ключа 256 бит и криптографический чип T2 для работы с ключами. Это решение близко по надежности к шифрованию IPhone. В то же время Windows предлагает BitLocker, который шифрует систему при помощи 128- или 256-битного алгоритма AES и Encrypting File System для шифрования отдельных файлов, однако эти функции недоступны в Windows 10/11 Home. Они работают в профессиональных редакциях операционной системы.
Для Linux существует общий «стандартный» метод шифрования LUKS, но его реализации отличаются от дистрибутива к дистрибутиву. Обычно используется шифрование AES с 256-битными ключами, но LUKS работает с разными шифрами (Serpent, Twofish, CAST-128, CAST-256) и хеш-функциями (SHA-1, SHA-256, SHA-512, RIPEMD160, WHIRLPOOL). В итоге получается зоопарк, которому нельзя дать единую однозначную оценку.
Так что наличие штатного шифрования не мешает существовать ряду альтернативных решений с открытым исходным кодом. Они предназначены для куда более разнообразных сценариев использования. Пойдем от простого к сложному.
Простое файловое шифрование
Hat.sh и Cloaker
Веб-приложения, которые обеспечивают локальное шифрование отдельных файлов в браузере с использованием известной библиотеки libsodium и криптографических алгоритмов:
- XChaCha20-Poly1305 — для симметричного шифрования.
- Argon2id — для получения ключа на основе пароля.
- X25519 — для обмена ключами.
XChaCha20-Poly1305 — ARX-шифр, который выполняет аутентифицированное шифрование, то есть помимо собственно шифрования обеспечивает целостность данных. Алгоритм достаточно быстр, надежен и проверен практикой.
Здесь и далее комментирует Степан Давыдов, старший специалист-исследователь лаборатории криптографии компании «Криптонит».
Hat.sh и Cloaker — простые решения, не требующие предварительной настройки. Hat.sh лучше подходит для шифрования больших файлов, а Cloaker оптимизирован для работы на мобильных устройствах и имеет десктопную версию. Из-за выбранного алгоритма шифрования и браузерного исполнения лучшее их применение — скорее защита файлов перед передачей по незащищенным каналам, чем долговременное хранение информации.
Picocrypt
Windows, macOS и Linux
Крошечная, весом 2MB, но функциональная утилита, которая не требует установки и прав администратора. Обычно использует XChaCha20 и функцию формирования ключа Argon2 для создания криптоконтейнеров. В «режиме паранойи» использует каскадное шифрование — последовательно шифрует данные при помощи XChaCha20 и Serpent, и использует HMAC-SHA3 вместо BLAKE2b для аутентификации. Все используемые в Picocrypt криптографические примитивы взяты из модуля golang.org/x/crypto.
С точки зрения криптографии использование одного алгоритма шифрования уже надежно защищает данные. Повторное шифрование другим алгоритмом не увеличит стойкость, но при этом возрастают используемые ресурсы и время работы.
Кроме того, Picocrypt может:
- защищать от повреждений шифрованные контейнеры ценой небольшого увеличения размера при помощи кодов Рида-Соломона, способных исправлять ошибки;
- разбивать контейнеры на части;
- сжимать файлы при упаковке;
- использовать ключевые файлы как дополнительный (или единственный) метод защиты криптоконтейнеров.
Шифрование файлов перед загрузкой в облако
Cryptomator
Windows, macOS, Linux, iOS, Android
Cryptomator не заменяет клиенты для облачных хранилищ, однако он предназначен специально для шифрования каталогов, которые будут синхронизированы с их помощью. Эта программа скрывает структуру каталогов, шифрует файлы и их имена с помощью AES и 256-битного ключа, генерируемого на основе пароля при помощи scrypt.
AES выбран на конкурсной основе в качестве, де-факто, международного стандарта. AES один из наиболее популярных и подробно исследованных шифров. Это не значит, что у него нет недостатков, например, разработан теоретический способ снизить стойкость AES на 2 бита ключа, однако с 1997 года не найдено ни одной практически полезной атаки.
Впрочем, алгоритм шифрования, это еще не все. Важно заметить, что Cryptomator не скрывает метаданные: метки времени доступа, модификации и создания файлов, а также количество, размер файлов и папок.
Документация Cryptomator подробно описывает архитектуру безопасности. Некоторые криптографические библиотеки Cryptomator (cryptolib, cryptofs, siv-mode и cryptomator-objc-cryptor) прошли аудит Cure53. Исключение составляет cryptolib-swift — библиотека, используемая в Cryptomator для iOS. К тому же, исходный код мобильных приложений не опубликован.
Duplicati
Windows, macOS, Linux
Специализированное решение для безопасного резервного копирования файлов в облачные хранилища. Оно использует AES-256 для защиты данных средствами SharpAESCrypt или GnuPG.
Duplicati поддерживает инкрементное резервное копирование, то есть сначала загружает полную резервную копию, а затем сохраняет небольшие добавочные обновления. Кроме того, эта утилита позволяет создавать резервные копии открытых или заблокированных файлов с помощью службы моментальных снимков тома (VSS) Windows или диспетчера логических томов (LVM) в Linux.
RClone
Windows, macOS, Linux, .deb, .rpm, FreeBSD, Plan9, Solaris
Это универсальный инструмент для управления данными в облаке, который может: перемещать, копировать, синхронизировать, монтировать, проверять, удалять, дедуплицировать и, конечно, шифровать.
Для криптографической защиты файлов в RClone используется 256-битный ключ и соль, создаваемые на основе пары разных пользовательских паролей.
Кстати, о паролях. Учитывая то, какие обширные словари и базы доступны злоумышленникам, наиболее безопасным вариантом и для криптоконтейнеров и любых других целей, будут пароли длиной от 16 символов. Либо полностью случайные, либо пароли, в которых часть случайная, а часть — ваша парольная фраза. Для их генерации и хранения можно пользоваться менеджерами, например, KeePass Password Safe.
В RClone шифрование выполняется с помощью NaCl SecretBox, при помощи алгоритмов XSalsa20 и Poly1305, которые также обеспечивают целостность файлов. Имена файлов и каталогов также по умолчанию шифруются. Структура и размер файлов и другие метаданные не шифруются.
В отличие от Cryptomator, RClone подключается к облакам напрямую. Он поддерживает двустороннюю синхронизацию (пока что в качестве экспериментальной функции), поэтому он подходит для автоматической синхронизации файлов между устройствами в сценарии, когда на файлы шифруются перед загрузкой в облако, а на компьютере хранятся в расшифрованном виде. Правда, для настройки такой конфигурации придется повозиться с консолью. RClone имеет лишь базовый веб-интерфейс, настройка шифрования производится при помощи текстовых команд.
Создание шифрованных архивов, контейнеров и томов
VeraCrypt
Windows, macOS, Linux, FreeBSD, Raspberry Pi
Известное решение для создания защищенных файловых контейнеров с длинной историей, репутацией, регулярными обновлениями и обширными функциями. VeraCrypt позволяет создавать скрытые тома и каскадное шифрование, обеспечивает правдоподобное отрицание. Поддерживает полнодисковое шифрование, составляя конкуренцию BitLocker.
По умолчанию эта утилита использует 256-битное шифрование AES, но поддерживает и другие шифры: Camellia, Кузнечик, Serpent и Twofish с 256-битным ключем и различные их сочетания.
Все эти алгоритмы являются блочными (подаваемые на вход данные обрабатываются блоками) и симметричными (для зашифрования и расшифрования сообщений используется один и тот же ключ). В них применяются идентичные линейные и нелинейные операции, различающиеся лишь длинами и значениями параметров. Криптостойкость блочных шифров принимается аксиоматически и подтверждается отсутствием найденных атак. Можно даже сказать, что количеством неудачных попыток их найти.
Наиболее надежными являются российский стандарт Кузнечик, а также международные стандарты ISO/IEC AES и Camellia при использовании с 256-битными ключами. Алгоритмы Serpent и Twofish не имеют известных уязвимостей, однако их анализу уделялось существенно меньше внимания.
zuluCrypt
Linux
Эта программа фактически является графическим интерфейсом для работы с cryptsetup. Она задействует возможности криптографического API ядра Linux для создания и монтирования томов PLAIN dm-crypt, LUKS, контейнеров TrueCrypt, VeraCrypt и BitLocker. Не позволяет создавать разделы BitLocker, только просматривать их содержимое, но в остальном универсальна.
Kryptor
Windows, macOS, Linux
Консольный инструмент для шифрования и подписи файлов, который разрабатывается, как замена age и Minisign, а также современная альтернатива GPG. Использует алгоритм XChaCha20-Poly1305 для защиты файлов, argon2id для получения ключа на основе пароля, BLAKE2b для хеширования, X25519 для обмена ключами и Ed25519 для цифровых подписей. Все они реализованы при помощи библиотеки libsodium. Хорошо документирован.
Kryptor скрывает метаданные и имена файлов и поддерживает асимметричные ключи, так что позволяет наладить обмен файлами с проверкой подлинности отправителя по заведомо небезопасным каналам.
Dexios
Linux, Windows, MacOS, FreeBSD (запускается на Android через Termux)
Еще один консольный инструмент шифрования. Написан на языке Rust и способен шифровать как отдельные файлы, так и каталоги. Как и Kryptor, снабжен подробной документацией.
Dexios поддерживает AES-256-GCM и ChaCha20-Poly1305 для шифрования файлов, а также BLAKE3-Balloon и argon2id для формирования ключа. Все криптографические примитивы взяты из набора RustCrypto. А еще, в 2022 году Dexios прошел проверку NCC без существенных замечаний (отчет по AES и отчет по ChaCha20-Poly1305).
Tomb
Linux
Командная оболочка для криптографического API ядра Linux. Tomb служит для управления cryptsetup и LUKS. По умолчанию применяет для защиты файлов и каталогов алгоритм AES-256 (XTS plain), однако может использовать все доступные в Linux криптографические примитивы.
По концепции эта утилита напоминает zuluCrypt, но Tomb позволяет хранить криптографические ключи отдельно, например, на флеш-накопителе, и поддерживает стеганографию (сокрытие ключей в текстах и JPEG-файлах).
Подобные аудиты — важная вещь.
Несмотря на все городские легенды о закладках в популярных алгоритмах шифрования, отечественных и зарубежных, ни одного такого свидетельства нет. Все перечисленные в статье алгоритмы известны криптографическому сообществу долгое время, по каждому из них проведен неоднократный анализ и ни одной атаки, сколько-нибудь близкой к практической, не найдено. Наилучший результат, полученный российскими криптоаналитиками для стандартизованных современных криптомеханизмов, относится к алгоритму генерации ключа MQ-DRBG. Авторам исследования удалось снизить криптостойкость с 256 до 153 бит, тем не менее практические атаки не найдены, а наличие закладки не доказано.
Однако, одно дело алгоритм сам по себе, другое — реализация шифрования в конкретной программе. На этом уровне многое может пойти не так. Периодические независимые проверки криптографических инструментов очень важны. Дальше будет описан хороший пример.
SiriKali
Windows, macOS, Linux
Решение в стиле «все в одном» — комбайн с графическим интерфейсом на Qt/C++, который управляет зашифрованными папками при помощи ряда инструментов.
В Linux в качестве бэкенда SiriKali выступают:
В Windows SiriKali работает с:
- Securefs,
- Cppcryptfs,
- Cryfs,
- Encfs,
- Sshfs.
В macOS к утилите подключаются:
Все это консольные инструменты, которые можно использовать и отдельно от SiriKali. Достаточно широкий выбор, однако, не все они одинаково полезны. Так, во время аудита в 2014 году в EncFS были найдены уязвимости, которые до сих пор не исправлены. Проект не обновлялся с 2018 года и прямо скажем, устарел.
В противовес выделим Gocryptfs (прошла аудит и была доработана по итогам), cppcryptfs, и Securefs, которые служат для создания и управления каталогами-контейнерами, основанными на файловой системе FUSE (Filesystem in Userspace) на базе AES256-GCM.
Эти решения концептуально занимают промежуточное место между криптографичекими контейнерами и пофайловым шифрованием. Утилиты для работы с FUSE на логическом уровне манипулируют контейнерами, но каждый файл в контейнере хранится отдельно. Такой подход лучше подходит для работы с облачными хранилищами — изменение одного файла не означает повторную загрузку всего контейнера, однако Filesystem in Userspace не скрывает структуру каталогов и размеры файлов.
Что касается CryFS, то эта консольная утилита создана для использования вместе с Dropbox или другими облачными сервисами. В ней для криптографии используется библиотека Crypto++. Ее архитектура описана в магистерской диссертации и научной статье, опубликованной на DBSec 2017. В основе шифр AES-256.
CryFS предоставляет зашифрованную файловую систему иного типа. Она дробит файлы на шифрованные блоки, которые хранятся в базовом каталоге с использованием случайного идентификатора в качестве имени файла. Таким образом, помимо сокрытия содержимого файла, CryFS скрывает метаданные и структуру каталогов.
У подхода есть минус — множество отдельных файлов, которые генерирует программа. В некоторых облачных сервисах можно быстро столкнуться с ограничением на максимальное число файлов. К тому же, при шифровании файлов, размером менее нескольких МБ, CryFS увеличивает занимаемое ими место, из-за фиксированного размера шифрованного блока. Но главный недостаток утилиты заключается в том, что она все еще находится в стадии бета-тестирования.
Как видите, Open Source-сообщество создало и поддерживает много интересных и полезных программ для шифрования, но, если говорить о решениях, которые используют в повседневной жизни эксперты-криптографы, то обычно это все-таки VeraCrypt.
Степан Давыдов, старший специалист-исследователь лаборатории криптографии компании «Криптонит».
Комментарии (25)
aborouhin
19.01.2023 14:09Для шифрования файлов, которые хранятся в S3-совместимом объектном хранилище, и одновременно доступа к этому хранилищу как виртуальной ФС, использую s3ql. Замечательный софт, несколько Тб и десятки миллионов файлов с активным доступом, несколько сотен Гб локального кэша, - и всё это работает как часы (тьфу-тьфу-тьфу). Но, увы, автор прекратил развитие проекта, репозиторий на Github заморожен и живых форков пока не появилось :( Придётся искать замену, видимо, совместив несколько разных решений для шифрования отдельно и для S3 отдельно.
anzay911
19.01.2023 16:38А в каких используется нарезка блока на чанки? Интересует с целью подгрузки в облако на небыстром интернете.
SantrY Автор
19.01.2023 16:54+2В Duplicati есть возможность выбрать размер чанка и в rclone. Там эта фича на стадии бета-тестирования. Еще кажется, так умеет CryFS, но могу ошибаться.
Alexey2005
19.01.2023 18:46+1Проблема большинства всего этого криптософта - оно создаёт некий сторонний ключ, который надо где-то хранить. Чаще всего ещё и суёт его куда-то в недра дистрибутива, откуда его ещё забэкапь попробуй.
В итоге если система на основном диске навернулась - всё, криптоконтейнеры превращаются в белый шум.
Где бы найти такой криптософт, чтобы я мог создать криптоконтейнер на флешке, потом вставить эту флешку в другую машину - и мне не потребовалось бы для доступа к данным больше ничего кроме пароля, который хранится в моей собственной памяти и который я просто введу с клавиатуры.
Вся эта криптохрень переусложнена настолько, что ей попросту невозможно пользоваться без риска продолбать все свои данные.blackarrow
20.01.2023 00:49+2Можно установить portable версию VeraCrypt на флешку. Есть настройки Traveler Disk.
vassabi
20.01.2023 04:08+1+ 1 к VeraCrypt - у нее есть даже клиент для андроида https://f-droid.org/en/packages/com.sovworks.edslite/ (он же есть и в гуглосторе, в аппловом аппсторе - не смотрел, но тоже должно что-то быть).
Отлично читает и модифицирует криптоконтейнеры с флешки, созданные в десктопной версии.
iShrimp
19.01.2023 18:54Подскажите, чем отличается по надёжности "Шифрование устройства" в Windows 10/11 Home от "Шифрования Bitlocker" в старших версиях? Вроде бы и тут, и там раздел шифруется AES 128 и недоступен с другой системы без ключа.
garwall
Ээ. Извините пожалуйста, но где gpg?
SantrY Автор
Замечательная вещь, хотя может быть не всегда удобная. Была мысль ее вынести в отдельный пункт, возможно, действительно стоило. Логика была такая, что это все же больше решение для переписки и цифровых подписей. Да, можно шифровать файлы, но алгоритм все-таки асимметричный. Несколько иной фокус, чем заявлено в посте. Так что оставили только Kryptor и одно упоминание GPG.
garwall
Можно и симметрично. gpg -c yourfile
Tarakanator
а чем плохо ассимметричное шифрование? Я вот сейчас приглядываюсь к шифрованию бэкапа. Удобно, можно всем раздать открытый ключ и не парится что он куда-то утечёт, а закрытый хранить в блокнотике(бумажном) и доставать только по надобности.
SantrY Автор
Подчеркну нигде не говорил, что оно чем то лучше или хуже. Просто надо было выбрать какие то критерии, чтобы отобрать ПО для подборки, и это был один из них. Если Хабр сочтет пост полезным, отдельно поговорим про решения на базе асимметричных алгоритмов. Там и сфера возможных применений шире.
andreymal
Шифрую свои бэкапы с помощью age - тоже асимметричное шифрование, но проще для понимания чем gpg
suurtoll
Например, медленнее в 100-1000 раз.
iig
Ну так никто и не использует его для шифрования больших обьемов информации.
Dofmen
Использую gpg под Linux для симметричного шифрования: gpg -- symmetric --cipher-algo AES256 имя_файла