Шифрование отдельных файлов с помощью cryptsetup/LUKS
> можно вспомнить про ... cryptsetup/LUKS, которыми тоже в принципе можно шифровать файлы, причём с помощью LUKS в plain mode ... с нужными параметрами и правильно сгенерённым паролем вроде как это будет надёжно бессигнатурно.
Разобрался, как шифровать отдельные файлы с помощью openssl:
(Если есть ошибки, прошу указать.)
Просьба подсказать, как подобное осущеcтвить с помощью cryptsetup или LUKS. Интересует не столько бессигнатурность, сколько простота действий. Конкретно, хотелось бы шифровать по паролю без использования асимметрики. Многократное чтение man cryptsetup и гугление, в том числе на pgpru.com, не помогли.
А там по ссылке трюки как раз для того и используются, что и соль есть, и помнить ничего не надо. Более того, ваш пример, судя по комментарию unknown'а крайне не рекомендуется к использованию (также см. /comment39340). Там же объяснено, почему вот так:
делать не надо. И, кстати, вот ещё комментарий в тему этого обсуждения.
openssl вообще не умеет AES-256? Тут aes-256-cbc указано опцией.
Вот именно поэтому там сказана оговорка:
Я поначалу ошибочно подумал, что шифрованный файл надо собирать из кусков. В этом случае эта проблема бы вылезла.
Всё хуже. Поидее надо заполнять не нулями, а рандомом (уж во всяком случае в вашем примере — точно). В моём примере, может быть, это будет избыточным, но это надо анализировать. Если шифрование поблочное/посекторное, а размер устройства в точности совпадает с заполняемым, то неизменяемых блоков/секторов не будет. Правда, если размер файла равен целому числу блоков, то в приведённом скрипте в последний сектор ничего так и не будет записано, а это уже какая-никакая дополнительная информация о размере файла. В общем, похоже, если всё так, то надо либо для гарантии тоже забивать всё рандомом, либо фиксить последний сектор.
Тогда зачем (см. эту цитату выше) в man cryptsetup это написано?
Плюсы и минусы mcrypt
Помимо замечания в /comment91478 у меня сложилось впечатление, что с mcrypt всё не очень хорошо, не очень надёжно, а его использование не очень рекомендуется. Возможно, всё эти представления ошибочны, когда идёт речь именно о бессигнатурном шифровании, но всё же. Сейчас прогуглил все его упоминания за время существования форума, и вот такая картина получается:
Т.е. вопрос в том, что лучше для бессигнатурности: создать контейнер в plain mode или использовать mcrypt? Мне первый вариант интуитивно кажется более доверяемым, т.к. это всё-таки стандартный и всюду используемый cryptsetup, написанный со знанием дела.
комментариев: 11558 документов: 1036 редакций: 4118
AES != Rijndael. У первого размер блока (не ключа) строго равен 128 битам, у второго есть вариант со 128- и 256-битовым блоком.
В AES-256 размер блока 128 бит, как тут уже ответили.
Наверно для именения нумерации блоков, используемой ESSIV при генерации IV. В plain mode (без заголовка) пароль не шифруется, поэтому соль не нужна.
На мой взгляд для шифрования одного файла лучше mcrypt, чем велосипеды с cryptsetup. Лично для меня проще стандартное действие – скачать и скомпилировать программу, чем возиться со скриптами. Если шифруется бэкап c ФС, тогда удобнее cryptsetup. По большому счёту особой разницы нет.
Так зачем пользователям cryptsetup лезть в эти тонкости криптографии? Где и зачем это может быть нужно? Может быть, Unknown опцию --skip прокомментирует? В man'е я вижу только это:
Когда реализуется случай «did not use it in IV sector calculations»?
комментариев: 9796 документов: 488 редакций: 5664
Так подробно же про skip написано:
Для начала, я не знаю, что такое вектор инициализации, и чему равен его размер. Для меня, как для простого юзера, это просто внутренний параметр для шифра, который всегда как-то вычисляется автоматически и правильно. Почему вдруг в какой-то момент я должен выяснять, как он вычисляется — уже само по себе большой вопрос.
Почему negative-то? Если речь о сдвиге сектора, который будет использоваться для вычисления IV, то сдвиг как раз positive. И как из содержимого сектора вычисляется IV?
Нетривиально. Ключ вычисляется из пассфразы. Offset — это просто начиная с какого сектор блочного устройства его отмаппить в шифрованное. Как отсюда следует, что IV оказывается равным нулю?
Вроде IV=0 — это плохо. И как тогда надо делать, когда шифрование происходит не с начала устройства? Надо каждый раз писать --offset n --skip n? А когда эти параметры стоит делать разными? Или лучше делать --offset $((n+1)) --skip n? Я ничего не понял.
комментариев: 9796 документов: 488 редакций: 5664
Это параметр режима шифрования, а не шифра.
До тех пор пока вы не хотите странного. Если хотите — то можете простреливать себе ногу. Вам дана такая возможность. В случае с крипто и отрицаемостью — такое самопростреливание ещё и незаметно до поры до времени, внешне всё работать будет.
Смотря для чего.
Если вы — простой юзер и не понимаете в векторах и режимах, то не пытайтесь сделать нечто нештатное. Пока не изобрели стандартизированный и внедрённый в доверяемые утилиты протокол бессигнатурного шифрования из коробки, то не пытайтесь нагородить его самопальными костылями.
Бессигнатурное шифрование достигается добавлением пары опций, ничего сильно нестандартного тут нет. То, что вы лично и для себя считаете это ненужным — это ваши личные проблемы.
Для cryptsetup, где устройство шифруется не с первого сектора. Здесь в четвёртом и седьмом пунктах оффсет указан, а скип нет. Это правильно или надо фиксить?
комментариев: 9796 документов: 488 редакций: 5664
Всецело с этим согласен.
Так это надо подумать над тем, что я считаю ненужным. И много чего написать, где это может вылезти. Попытка эмулировать скрытые разделы со смещение — первое, что приходит в голову. Я ограничиваюсь только недоказанным предупреждением, что здесь может возникнуть проблема.
Будьте добры, что означает "эмулировать стрытый раздел со смещением"? Понятен смысл выражения "создать", но не понятен "эмулировать".
комментариев: 9796 документов: 488 редакций: 5664
Попытка эмулировать фичи скрытых разделов, которые были в truecrypt, путём манипулирования оффсетами cryptsetup при неаккуратном обращении с векторами инициализации могут (?) привести к фэйлам. Утверждение бездоказательное, подробно не разбирал.
Насчёт скриптов. Исхожу из возможной ситуации когда система со скриптами и настройками утрачена, остались только шифрованные диски с бэкапами и пароль в голове. Нужно получить к ним доступ для восстановления системы с наменьшими затратами. Нешифрованных устройств с информацией о настройках нет в принципе, т.к. обнаружение скриптов свидетельствует об использовании шифрования, его опциях и во многом обесценивает затраты на бессигнатурность. В таком случае любое усложнение может приводить к серьёзным затратам, впоть до утери всей информации. Сразу становится понятным преимущества стандартных средств. Не нужно помнить логику скриптов, достаточно
1. Уметь установить программу (mcrypt или cryptsetup)
2. Помнить режим шифрования (для бессигнатурного варианта).
3. Помнить пароль
После расшифровки и доступа к скриптам можно уже получить доступ к устройствам, зашифрованным экзотическими способами (со сдвигом блоков и т.п.)
комментариев: 9796 документов: 488 редакций: 5664
Насчёт mcrypt не скажу, а для cryptsetup скачиваете любой инсталляционный образ любого Linux'a, в котором можно что-то запускать с флэшки в rescue-режиме, криптсетапите и монтируете, что нужно. Cryptsetup и GnupG — штуки штатные, на них столько всего завязано, что они уже никуда не денутся.
На данный момент оптимальнее так:
Кстати, не такой уж и большой оверхед при двойном шифровании с разными паролями: слой без LUKS, а внутри слой с LUKS.
Как-то стрёмно использовать cryptsetup c офсетами после таких пояснений. Я не удивлюсь, если там внутри критично напортачили, а в случае обнаружения баги скажут, что это опции неприоритетные, за них никто не ручался.
Разве эта опция — не такая простая вещь для владеющих темой?
А в обычном plain mode без смещения (-c aes-xts-plain64 -s 512 -h sha512) не может возникнуть? Чем это отличается от:
- С помощью dmsetup отмаппливаем сектора с n'ого до последнего.
- К отмаппленному устройству применяем обычный cryptsetup (plain mode) без всяких смещений, т.е. без --skip и без --offset
Ы? По-моему, это совершенно эквивалентно. Если всё так плохо и непросто, как вы описываете, то поидее проблема должна в любом plain mode вылезать.Наверно, не предыдущие, а последующие.
Вы проверяли? Это работает? Я вам уже написал, что здесь /dev/mapper лишнее.
(проблема выеденого яйца не стоит)
(вообще непонятно, что они там хотели этим сказать)
Простите, на какую из этих двух ваших реплик теперь ориентироваться?