Пароль не нужен. Разбиение файла на зашифрованные фрагменты по схеме Шамира
После того как Google отказалась от паролей и перешла на Passkey по умолчанию создаётся впечатление, что концепция текстовых паролей (парольных фраз) сама по себе устарела. И действительно, в некоторых случаях можно добиться достаточного уровня безопасности без паролей вообще.
Например, простенькая утилита horcrux (крестраж*) разбивает файл на несколько зашифрованных частей (например, пять), причём для дешифровки и восстановления исходного текста не нужен пароль, а нужно найти и соединить несколько из этих частей (например, три). Предполагается, что сами отдельные части хранятся у разных людей в разных местах и/или надёжно спрятаны, например, в разных местах дома, сейфах, банковских ячейках и т. д.
*Крестраж — волшебный артефакт, созданный с помощью тёмной магии, из вселенной Гарри Поттера.
Общий принцип программы показан на КДПВ. В программе horcrux
две команды: split
и bind
для разбиения файла и соединения частей (крестражей). Как несложно догадаться, здесь используется схема разделения секрета Шамира.
Например, если в текущем каталоге есть файл с названием habr.txt
, то можно запустить команду разбиения на части:
$ horcrux split habr.txt
Утилита спросит, сколько крестражей создать и сколько их потребуется для восстановления исходного файла. Если мы хотим пять и три, то указываем эти цифры — и программа создаёт файлы следующим образом:
habr_1_of_5.horcrux
habr_2_of_5.horcrux
...
Как вариант, можно сразу указать эти параметры в командной строке:
$ horcrux -t 3 -n 5 split habr.txt
Результат будет идентичным.
Как видим, каждый из зашифрованных файлов по размеру больше исходного:
Это указывает на то, что по схеме Шамира разделяется не сам файл, а ключ для дешифрования. В реальности каждый из фрагментов хранит всю исходную информацию.
Остаётся лишь разбросать крестражи по дому на USB-флэшках или на разных хостингах в интернете.
Для восстановления исходного файла теперь нужно вспомнить не пароль, а места, где спрятаны крестражи. Это тоже может быть сложной задачей, особенно если артефакты очень хорошо спрятаны, например, закопаны в необитаемой местности без опознавательных знаков.
Восстановление оригинального файла при наличии зашифрованных частей осуществляется командой bind
с указанием папки, где находятся файлы:
$ horcrux bind d:\secrets\
Исходный файл будет воссоздан.
Теоретически, эта программа может заменить или дополнить классическое шифрование (с паролем) в следующих случаях:
- для долговременного хранения конфиденциальной информации в течение десятилетий, когда человек не чувствует уверенности в том, что сохранит или запомнит пароль;
- для передачи конфиденциальной информации по открытым каналам, чтобы минимизировать риск перехвата.
Нужно добавить, что шифрование крестражей не отменяет возможности шифрования открытого текста перед его разбиением на части. То есть можно зашифровать (или заархивировать) файл с использованием пароля —, а потом разбивать на части. Это обеспечит дополнительный уровень защиты.
Установка программы под Linux:
curl https://api.github.com/repos/jesseduffield/horcrux/releases/latest | \
jq '.assets[] | select(.browser_download_url | endswith("_Linux_x86_64.tar.gz")) | .browser_download_url' | \
xargs curl -Lo /tmp/horcrux.tar.gz && \
tar xfz /tmp/horcrux.tar.gz -C /tmp && \
rm /tmp/horcrux.tar.gz && \
sudo mv /tmp/horcrux /usr/local/bin/horcrux
Установка под Windows через консольный инсталлятор Scoop:
Только сначала нужно установить Scoop следующими командами в консоли:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser # Optional: Needed to run a remote script the first time
irm get.scoop.sh | iex
Если запускаете консоль из-под админа, то Scoop устанавливается такой командой:
iex "& {$(irm get.scoop.sh)} -RunAsAdmin"
Кстати, есть похожий инструмент paperback, он тоже разделяет по схеме Шамира ключ для дешифрования, причём распечатывает его в бумажном виде (генерирует PDF). Пароль тоже помнить необязательно, главное собрать части ключа на бумаге. Ниже примеры.
Основной документ:
Часть ключа:
Предостережение о блочных шифрах
Программа horcrux
использует шифр AES в режиме OFB.
Режим обратной связи по выходу (output feedback, OFB) превращает блочный шифр в синхронный потоковый шифр. В процессе шифрования генерируются блоки потока ключа. Для получения шифротекста они соединяются с блоками открытого текста.
Благодаря симметрии XOR шифрование и дешифрование выполняются одинаково:
Шифрование и дешифрование в режиме OFB происходит по одинаковой схеме
Нужно заметить, что это не самый надёжный вариант с точки зрения безопасности. Если упростить вышеприведённую схему, то потоковый шифр работает следующим образом (через XOR):
шифротекст = открытый_текст ^ сгенерированный_поток_ключа(ключ) открытый_текст = шифротекст ^ сгенерированный_поток_ключа(ключ)
Проблема здесь довольно очевидна, и она общая для всех шифров такого класса. Как и в других потоковых шифрах, замена одного бита в шифротексте приводит к замене бита в открытом тексте в том же месте. Это свойство позволяет нормально функционировать многим кодам с коррекцией ошибок даже при их применении до шифрования.
С другой стороны, это даёт потенциальным злоумышленникам возможности для «порчи» зашифрованных файлов.
Очень часто злоумышленнику известно содержимое части открытого текста — например, это могут быть стандартные заголовки файлов определённого формата. Имея исходный текст и результат шифрования, он может выполнить вычисления — и заменить конкретные байты шифротекста на такие значения, которые дадут нужный результат после расшифровки. То есть он может подменить фрагменты зашифрованного файла, не зная ключа. Эту особенность следует всегда иметь в виду, когда работаешь с блочными шифрами.