Шифрование отдельных файлов с помощью cryptsetup/LUKS
> можно вспомнить про ... cryptsetup/LUKS, которыми тоже в принципе можно шифровать файлы, причём с помощью LUKS в plain mode ... с нужными параметрами и правильно сгенерённым паролем вроде как это будет надёжно бессигнатурно.
Разобрался, как шифровать отдельные файлы с помощью openssl:
(Если есть ошибки, прошу указать.)
Просьба подсказать, как подобное осущеcтвить с помощью cryptsetup или LUKS. Интересует не столько бессигнатурность, сколько простота действий. Конкретно, хотелось бы шифровать по паролю без использования асимметрики. Многократное чтение man cryptsetup и гугление, в том числе на pgpru.com, не помогли.
offset эквивалентен dmsetup linear. Это можно проверить экспериментально:
--skip, как я понял, нужен при создании «частичных» крипторазделов. Допустим, нужно адресовать часть криптораздела, отступив от его начала на 8 секторов. Пусть сам криптораздел расположен по оффсету S. Если сделаем --offset S+8, у нас будет неправильный IV, поэтому надо делать --offset S+8 --skip 8. Т.е.
Таким образом, в plain mode не указывать --skip равносильно указанию --skip 0. Можно указывать, если есть сомнения. Задание опции --offset никак не влияет на IV.
UPD: Когда мы skip не задаём (P=0), IV равен «исходному» для сектора S. Смысл указания skip в том, что мы читаем те же самые сектора, что и без skip (это самое нетривиальное!), но с другим IV. Следовательно, нужно сначала сместиться на P секторов «назад» относительно оффсета, образовать криптомаппинг с «исходным» IV, а затем сместиться вперед на те же P секторов. Отсюда сначала S-P, затем P. В итоге получается, что при указании --offset S --skip P криптомаппинг охватывает сектора начиная с S (!), однако, IV устроен так, как будто мы «пропустили» с начала P секторов (отсюда и название «skip»).
Спасибо за исследование.
Пожалуйста. Если соотнести эти факты с тем, что unknown писал на предыдущих двух страницах, вырисовывается примерно такая картина:
Всё это выглядит так, что IV, в любом случае, вычисляется автоматически по заданным правилам, а опция skip лишь корректирует параметры. Судя по man cryptsetup, сам юзер непосредственно вмешаться в выбор IV (к примеру, задать руками) не может вообще (опция skip — это как выбор значения счётчика для заранее предпопределённого правила вычисления IV).
UPD: Когда --skip не указывается, он по умолчанию равен нулю для plain mode. Да, при этом IV получается, как если бы не было никакого оффсета (это легко проверяется экспериментом с dmsetup linear). Вообще, есть некий базовый режим cryptsetup plain, а offset и skip на него накладываются линейными сдвигами до и после. Опция --skip не меняет адресацию секторов, а исключительно расчет IV. Поэтому в LUKS его вообще нет, о чем ман и говорит нам:
комментариев: 511 документов: 2 редакций: 70
Вместо тысячи слов, которые всё равно будет едва ли возможно понять, весь смысл одной картинкой:
комментариев: 511 документов: 2 редакций: 70
LUKS — это просто чёрный ящик, на входе которого пассфраза, а на выходе — мастер-ключ. Ничего более в нём нет. Метод, как шифровать блочное устройство, определяется задаваемым шифром и режимом, а откуда взялся мастер-ключ — вывели с LUKS'а, задали вручную или получили в plain mode — не играет никакой роли. По крайней мере, на самом шифртексте это не скажется никак. Показываю PoC — подключение LUKS-тома в plain mode:
Создание LUKS-тома
Подключение LUKS-тома в plain mode
Мораль: