Шифрование дискет
Похоже что для шифрования дискет LUKS не подходит, т.к. его заголовок больше доступного дискового пространства 1.44 МБ. cryptsetup luksFormat работает без предупреждений, но luksOpen выдаёт сообщение о нехватке места. Можно ли уменьшить размер заголовка? Среди штатных опций такой возможности не обнаружил.
Если LUKS не подходит, какие другие варианты лучше соответствуют – EncFS, ecryptfs, loop-aes? В идеале безсигнатурное шифрование, хотя сомневаюсь что существует удобное решение, поэтому такое условие не обязательно.
Ссылки
[link1] https://ru.wikipedia.org/wiki/Дискета
[link2] http://www.pgpru.com/comment91433
[link3] https://packages.debian.org/wheezy/hashalot
[link4] http://www.pgpru.com/comment79707
[link5] http://www.pgpru.com/comment82492
[link6] http://www.pgpru.com/comment86705
[link7] http://www.pgpru.com/comment59119
[link8] http://www.pgpru.com/comment58602
[link9] http://www.pgpru.com/comment73503
[link10] http://www.pgpru.com/comment79306
[link11] http://www.pgpru.com/comment82462
[link12] http://www.pgpru.com/comment73746
[link13] http://www.pgpru.com/comment73786
[link14] https://en.wikipedia.org/wiki/Anonymous_named_pipe
[link15] http://www.pgpru.com/comment91564
[link16] http://www.pgpru.com/comment91580
[link17] http://www.pgpru.com/comment91425
[link18] http://www.pgpru.com/comment90990
[link19] http://www.pgpru.com/comment91149
[link20] http://www.pgpru.com/comment91522
[link21] http://www.pgpru.com/comment91567
[link22] http://www.pgpru.com/comment91659
[link23] http://www.pgpru.com/comment91464
[link24] http://www.pgpru.com/biblioteka/rukovodstva/zaschitadiska/tailsotricaemoehraneniedannyh
[link25] http://www.pgpru.com/comment48087
[link26] https://en.wikipedia.org/wiki/SHA-3
[link27] http://comments.gmane.org/gmane.linux.kernel.device-mapper.dm-crypt/5545
[link28] https://gitlab.com/cryptsetup/cryptsetup/issues/155
[link29] https://www.kernel.org/pub/linux/utils/cryptsetup/v1.6/v1.6.7-ReleaseNotes
[link30] http://upstream.rosalinux.ru/changelogs/libcryptsetup/current/changelog.html
[link31] https://skrilnetz.net/bullet-proof-data-encryption-with-luks-and-a-detached-header/
[link32] http://www.pgpru.com/comment91448
[link33] http://www.pgpru.com/comment94040
[link34] http://www.pgpru.com/comment86820
[link35] http://www.pgpru.com/comment94043
LUKS принципиально не подходит не только из-за ёмкости, но и из-за ненадёжности носителя: малейшее повреждение ключевых слотов заголовка — и контейнер уже не открыть. Можно использовать cryptsetup без LUKS-расширений. Только очень внимательно читайте документацию, чтоб не прострелить себе ногу.
А что, где-то в дикой природе
кроме армиидискеты ещё встречаются? Я рабочий дисковод видел последний раз, наверное, лет 15 назад.Тогда нужно брать откуда-то 256-битный ключ, не запоминать же его. Можно в качестве ключа пароль подавать, но его битность заведомо ниже, т.к. KDF в таком варианте не используется.
Дискеты это дешёвый способ хранения небольших объёмов информации. В этом случае дискеты имеют преимущества
1. Дешевизна – для хранения нескольких десятков килобайт лучше купить дискету за 20-30 рублей, чем гигабайтную флешку за 1 т.р.
2. Надёжность стирания информации – в дискете негде спрятать закладки, а также отсутствует труднодоступные логические слои. Достаточно пройтись рандомом десяток раз чтобы уничтожить следы предыдуших данных. Для флешки это не так. В случае чего дискету и выбросить не так жалко, опять же благодаря её дешевизне.
По данным Википедии[link1] дискеты активно используются в администрации президента и правительстве США.
Дисководы до сих продаются, стоят в районе 200 рублей (если по USB, то в несколько раз дороже).
[юмор]
Используйте отделяемый заголовок и носите его на флэшке.
[/юмор]
Используйте бессигнатурный cryptsetup без LUKS:
Всего около 64 алфавитно-цифровых символов, что соответствует 6 бит/символ в пароле. Т.е. 256 битному ключу соответствует без PBKFD 43-символьный пароль – последовательность случайных символов. Проблема cryptsetup без LUKS именно в этом – нет KDF хотя бы для частичной компенсации малой (по сравнению с ключом) битности пароля. А миллион итераций это 20 дополнительных бит.
Была бы какая-нибудь стандартная утилита расширения ключа, используемая в канале перед cryptsetup, то бессигнатурный вариант был бы идеален.
Заверните в простой скрипт: https://www.dlitz.net/software/python-pbkdf2/
Скрипты видел на Perl и на Python, но на C производительность наверное заметно выше будет, что в данном случае существенно.
Не вижу причин, почему скрипт нельзя преобразовать в C-код тем же Cython'ом.
Она исторически примерно для этого и была и пока ещё есть. Называется hashalot[link3]. Но PBKDF не умеет, разве что пропатчить.
Гигабайтную флешку за 1000р.. С Вами все в порядке?
300р флешка стоит. 8гб – 500р.
TrueCrypt для этого может подойти, если сделать файл-контейнер на дискете объемом 1400КБ.
Не проще использовать SD карту? Ее уничтожить не сложнее наверно просто физически.
И где вообще продают дискеты сейчас?
Можно еще форматировать на 2.88 :DDD Или найти LS-120 или ZIP на каком-нибудь заброшенном складе :DDDDD
Извиняюсь, забыл вопрос поставить, хотел спросить: – TrueCrypt для этого может подойти, если сделать файл-контейнер на дискете объемом 1400КБ?
TrueCrypt – программа
дискета объемом 1400КБ – носитель.
Могу выслать наложенным платежом )
Когда cryptsetup был shell-скриптом, а не C-программой, уже тогда напрямую вызывать hashalot не требовалось, т.к. они с dmsetup автоматически вызывались из скрипта. Современные версии cryptsetup тоже умеют читать пароль с терминала и хешировать.
Возник лишь вопрос – если по умолчанию используется ripemd160 или sha1, как 160-битный хеш дополняется до 256-битного ключа.
Представляется что cryptsetup стал слишком сложным, как минимум с недостатками
1. Невозможность использования заголовка для носителей малой ёмкости. При том что одного 512-байтного сектора более чем достаточно для всей его информации.
2. Отсутствие алгоритма расширения ключа при бессигнатурном шифровании. Кроме PBKDF2 не предусмострено более продвинутых алгоритмов как scrypt, не уязвимых к распараллеливанию.
3. Ключ хранится в хрупком виде, размазанный по мегабайтному заголовку, что увеличивает уязвимость к дефектам диска, повышая вероятность утери ключа. Мастер-ключ вообще дублируется в заголовке?
Про навороты со слотами даже не упоминаю и зачем нужен весь этот enterprise.
Назревает необходимость в лайт-версии, устраняющей эти пункты, более универсальной и надёжной. Включающей также промежуточное решение с шифрованием LUKS заголовка для бессигнатурного применения. Сначала расшифровывается заголовок, а потом уже сам диск. Параметры шифрования заголовка можно жёстко задать в опциях компиляции или заголовочном файле исходника, с возможностью их автоматического определения путём перебора возможных вариантов (их не так много). Пусть промежуточное шифрование заголовка будет слабей, но это лучше чем его полное отсутствие.
Давно не видел в продаже флешек на 1 ГБ. В основном продаются 16 ГБ за 1-1.5 т.р. Даже если бы были, всё равно стоили бы в десять раз дороже дискет и без гарантии затирания данных.
Историческая справка: hashalot остался с тех времён, когда для дискового шифрования ещё не было создано cryptsetup/dmcrypt, а был только losetup с непродвинутой реализацией криптографии.
Пишите форк для себя, под эти свои узкие потребности, сами его поддерживайте. Маловероятно, что вам удасться убедить разработчиков в штатной необходимости всего этого.
Могли бы оставить возможность отключить её когда не нужна.
Опции тоже не нужны. "There is only one mode and it secure". ©
По идее — да. Если бы там зафиксировали на данный момент, как самый оптимальный из безопасных вариантов -c aes-xts-plain64 -s 512 -h sha512. Но даже то, что там стоит дефолтное и не самое актуальное — вполне секьюрно.
Запоминать[link4], запоминать[link5]. Заодно отпадает необходимость использовать KDF.
Выше уже написали, но всё-таки добавлю: почитайте man cryptsetup на предмет того, как там организована plain mode, и обратите внимание на опцию -h. Если -h указано, то ключ будет хэшем пароля.
Я бы не был столь категоричен, но с основной мыслью согласен: дискета дешёвая и уничтожается легко (например, выбрасыванием в печь). Я не знаю, как с надёжностью записи на дискеты. По-моему, слишком не очень, даже если дискета чистая или писали на неё мало. Сколько было проблем, когда дискета не читается вообще или на каком-то конкретном дисководе — не счесть.
Unknown, как всегда, палится на мелочах. «--create /dev/mapper[шифрустройство]» работать не будет. Во-первых, create — команда, а не опция, поэтому пишется без двойного минуса. Во-вторых, аргументом create выступает имя нового устройства, а не имя вместе с полным путём к нему, поэтому я сомневаюсь, что полный путь будет принят и правильно понят. В конце комментария[link6] есть правильные команды.
Всё-таки 39[link7], а не 43.
Если пароль сам по себе достаточно стойкий, то хэширования достаточно. В plain mode cryptsetup'а оно есть.
Абсолютно несущественно. KDF запускается лишь один раз перед открытием контейнера, чтобы получить мастер-ключ из пароля. Отработает этот KDF за секунду или за доли секунды — разницы нет. Вот если бы вы брутер писали к контейнеру с забытым паролем, было бы другое дело.
Как быстро уничтожить пластмасску с влитой в неё электроникой? Вспомнилось[link8]:
В организациях, где технику не списывают и вовремя весь парк компьютеров не обновляют, дисководы будут существовать ещё 15 лет.
+1
Эти вопросы тут обсуждались[link9] ранее, готового ответа у меня нет. Возможно, если режим требует строго 256 бит ключа, а в качестве хэша указан тот, который даёт меньше, cryptsetup будет выдавать ошибку (но это всё надо проверять). В мануале есть тумманный намёк
но он касается случая, когда хэширование не используется вообще. Может быть, и при хэшировании недостаток просто заполняется нулями. У меня у самого был вопрос[link10] на подобную тему, который так и остался неотвеченным:
Я так и не понял, как printable-хэши превращаются в бинарные ключи. Для хэшей предусмотрена перекодировка в бинарный вывод с алфавитом длиной 256 символов? Не все из них печатные ASCII-символы.
Заголовок можно руками сделать. В plain mode указываете первые сколько-то байт блочного устройства как отображаемые шифрованием в нечто иное. Вроде это должно делаться добавлением одной-единственной опции: отобразить расшифрованием только первые 512 байт — это -b 1, судя по man cryptsetup. Далее отображённое расшифрованное устройство можно использовать как ключ для расшифрования остальной его части. Мне лень тщательно это обдумывать и перепроверять, поэтому могут быть ошибки. Команды примерно такие:
Как зачем? Чтобы менять пассфразы[link11] на криптотом без его перешифровки, а также безопасно и быстро удалять с него информацию, затирая шифрованный мастер-ключ (luksKillSlot).
У меня есть подозрение, что это легко делается простейшим скриптом, используя некоторые опции cryptsetup (наподобие того, как я написал это выше). Это не будет в полной мере отрицаемым шифрованием в том смысле, в каком оно могло бы быть, но, тем не менее. Если вас интересуют эти вопросы, читайте разбор полётов[link12] с предложением в конце, которое было признано[link13] даже unknown'ом.
Ради дополнительных нескольких символов пароля усложнять действительно не стоит. Но KDF всё-равно была бы полезной.
Приемлемо, зависит ещё от качества и производителя дискеты. Хранить данные на дискетах нужно хотя бы в двух экземплярах.
Ошибку не выдаёт, а дополняет хеш чем-то до нужной длины, и это не нули. Например, в случае sha1 первые 20 символов ключа совпадают с выводом sha1sum пароля, но происхождение оставшихся 12 симоволов неясно.
Насколько понял, хеш при выводе раскаповывает двоичную строку в hex-код, cryptsetup заполняет им соответствующее поле таблицы, составляемой для dmsetup, а последний обратно упаковывает в двоичный код при передаче модулю ядра.
Для этого достаточно одного слота.
В припципе, да, такое поведение было бы логичным. Благодаря вашему пояснению до меня только сейчас дошло, почему вывод хэша именно в шестнадцатеричном формате идёт — это же по сути и есть побайтовый вывод вида «два символа на байт». В связи с тем, что новые хэши очень длинные, было бы удобно конвертировать этот вывод в алфавит из печатных ASCII-символов, чтобы он стал покороче, и сравнивать было проще.
Да, но это смотря как менять. В том случае, который описан по ссылке, нужно минимум 2 слота: тот, который хранит старый пароль и тот, который хранит новый. Когда новый надёжно запомнился, старый можно уничтожать.
Обычно вручную это никто не сравнивает:
Если у меня на диске откуда-то взялись (возможно) одинаковые файлы, которые я хочу проверить на предмет идентичности, как это правильно делать? Можно вручную не сравнивать, но это опять грозит скриптомесевом же.
Впрочем, возможно, вот этого достаточно:
Дискета-то точно с гарантией.. даже тогда когда это не нужно.
Не работает:
Выше по треду автору именно это и хотели тактично сказать, но он ответил, что двух дискет (с одной копией т.е.) достаточно.
Недостаточно. Оно было бы так, если б файл file.sha512 формировался откуда-то извне. А в этом случае ответ будет всегда ОК, и это тривиально.
Хотелось бы проверять как-то удобно типа
Работает:
Честно говоря, я вообще не понимаю вашу команду. `cut -d' ' -f1` — что это такое? Откуда cut возьмёт аргумент, по-вашему? Из пайпа он не читает, имя файла тоже не указано. Я не понимаю, как это вообще может у вас работать. Всё, что в ` `, выполняется во внутреннем шелле.
Простите, но сфигали?
UPD: Ответ найден. В bash и в sh работает, в zsh — нет. Но я так и не понял, почему это работает в bash/sh.
Я не понимаю, почему echo `command` и command эквивалентны. Как это следует из документации? Например, «| `command`» в этом случае не работает, как и должно быть.
Смысл команд понятен (почему они отрабатывают), но почему это следует из логики/документации шелла — неясно. Смысл сводится к этому (проще и наглядней, чем ваши извраты):
Кода, который полагается на такое поведение — горы. Я скорее не понимаю, почему zsh ведёт себя иначе.
Почитайте man bash, Command Substitution. Я не вижу, почему из этого должно следовать что-то другое.
Ох лол.
В соревнование башистов врывается команда Anonymous named pipe's[link14]:
Можно
грабитьписать альяс на аргументы $1 и $2 вместо имён файлов.И с разгромным счётом одерживает победу unknown.
Победителю — приз: дырка от 3-дюймовой дискеты. Вручается удалённо, посредством исполнения анонимного
ритуалапротокола.ЭЭЭ, а зачем хэши-то считать, если надо просто два файла сравнить на предмет совпадения/несовпадения? cmp чем-то не устраивает?
Недостаточно криптогиково!
Дырка от дискеты переходит вам. Можно ещё дырок от перфокарт добавить.
Zsh не полностью POSIX-compliant, вроде был такой факт. Т.е. он где-то сбросил с себя legacy и пошёл дальше, а остальные продолжают насиловать bug2bug-compatibility from 1970s.
В этой секции ни в man bash, ни в man sh, ни в man zsh поведение потоков (откуда они берут инпут и берут ли) вообще не оговаривается.
Ну так правда же. Вы берёте вывод sha512sum file1, заменяете в нём имя файла и скармливаете получившуюся строку на проверку команде sha512sum -c. Логично эту замену и записать той программой, которая делает замены — потоковым редактором (stream editor).
Круто, спасибо за ссылку, не знал про такие тонкости.
Вопрос был в том, что работает быстрее: побайтовое сравнение или хэшевое. Наверно, раз для вычисления хэша всё равно надо все байты прочитать, быстрее не будет, так что правда ваша: сравнивать хэши не нужно. Даже без cmp выше была приведена команда diff, с её помощью можно и бинари сравнивать, работает быстро:
И весь этот оффтоп здесь только ради того, чтобы долго и упорно искать лучшие способы, неопровержимо демонстрирующие изначальную бредовость утверждения:
Вместо того, чтобы ограничиться бездоказательным:
И успокоиться на этом.
Есть случаи, когда файлы лежат на разных компьютерах, и копировать их в одно место только для того, чтобы сравнить, было бы глупым. В этом случае как раз чаще проще вычислить хэши, а потом визуально их сравнить.
А скопировать сами хэши и сравнить их диффом невизуально?
Копируются обычно мышкой. Скопировал, открыл один файл, вставил. Скоприровал с другого места, открыл файл, вставил (или, если локально, записал в файл через редирект). Выполнил diff. ← много лишних действий.
Непонятно, на самом деле, ещё вот что. md5 — короткий хэш, его сравнивать легко и визуально. Современные хэши длинные. С одной стороны, вы долго и агрессивно утверждали, что длина хэша не имеет отношения к его коллизионной стойкости. Типа если обрезанный хэш даёт коллизии, то надо хэш лечить, а не удлиннять его. Тем не менее, по дефолту хэши становятся всё длиннее и длиннее. SHA-1 на 8 цифр длиннее, чем MD5. Что есть SHA-2 — сам не знаю. Семейство sha{224,256,384,512}sum? А какой вывод у SHA-3? Длинной до Луны?
Вы сейчас троллите или как? Хэши должны быть защищены не только от перебора, но и от атак на основе парадокса дней рождений, что требует делать их вывод вдвое больше длины ключей шифров для обеспечения эквивалентной стойкости к брутфорсу.
Да.
Похоже, что жирно как обычно. Задача данного тролля — развести на трату времени и сил на доказывание чего-либо в как можно более пустых обсуждениях. А раз обсуждения технические, то и придраться не к чему — это же не оффтопик, в тематику ресурса укладывается.
Никакого троллинга. Спрашиваю то, что не понимаю.
MD5 был создан не так давно. Его длина вывода — 32 символа, это 128 бит. Значит, он эквивалентен ключам длиной 64 бита. Времена DES что ли? SHA-1 — 40 символов, т.е. 160 бит ⇒ SHA-1 эквивалентен 80-ти битам шифра. Почему не 128-ми? Во времена SHA-1 требования иметь хотя бы 128 бит для гарантированной стойкости не было?
Когда вы начнёте задавать вопросы такого же уровня глупости по квантАм, натыкаю вас в ваш же пост.
А я и не начну, в этом всё и отличие. Или начну в форме: глупый я, как спрашивающий, by default; если есть время и желание — можете снизойти и популярно объяснить не отправляя читать
маныАаронсона и Нильсена с Чангом, а нет — так нет. Раз Чангов не читал — о чём со мной таким неосилятором вообще говорить то? Кроме как о «делайте по стндартам и не лезьте со своими понятиями».А ваша задача — газировать лужи[link17] то там[link18], то тут[link19], в каждом треде. Когда ловят — орать про «придирки»[link20]. Ваш «калькулятор» вылез уже минимум в трёх тредах, где вы с умном видом пишете чушь и делаете вид, что так и нужно. А вот взять тред, грамотно проработать и ответить на все вопросы, хотя бы как я это сделал тут[link21] — кишка тонка.
А я в какой форме начал? Что в этом[link22] комментарии не так? Я опирался на то, что вы же сами здесь на форуме и писали.
маныАаронсона и Нильсена с Чангом.Хороший пример. Вам впадлу прочитать вводные главы Н&Ч, а я никогда не осиливал даже Шнайера, и все мои познания про крипто ограничены этим форумом. Прекратим х*и мериться, может быть?
Форум — не справочник, расписывать каждый пост хотя бы как вики-документ я не умею. И я считаю ресурсы (время, силы) на коммуникацию. Если она неоптимальна и неприоритетна, то и ресурсов тратится минимум. Можете считать это недостатком, могу вообще на всякие неясные и гипотетические темы благоразумно помалкивать, отсылая только к проверенному и известному.
Вопрос чисто исторический. Принимайте во внимание контекст (речь идёт о начале
лихих90-х) и тот факт, что до AES (конец 90-х) никакого публичного конкурсного процесса стандартизации не было, SHA-1 спустили из АНБ.Ну, и поработайте над манерой ведения дискуссий. Когда вопрос формулируется подобным образом, хочется в худшем случае снести пост как флеймогенерирующий, а в лучшем — просто пройти мимо.
Ну и прекрасно. А зачем тогда меня в троллинге обвинять? Мне, чтобы на последнее грамотно ответить, пришлось тут пару ночей посидеть. И, извините, мои посты были самыми содержательными по качеству и наполнению среди всех ваших. Теперь захожу в тред и читаю, что я, оказывается, сюда прихожу лишь бы «толсто потроллить». Ещё когда писал коммент[link23], хотел добавить «прочитал комменты в треде, и сразу чувствуется, как просел уровень ответов; автор пишет чушь — его не поправляют; кто-то спрашивает о конкретной вещи, которая имеет конкретное решение, а ему предлагают какую-то ерунду; сразу чувствуется, что меня в треде не было, развлекались unknown и SATtva, всё без придирок было»... но воздержался. Сейчас вот из-за моих «придорок» выяснится, что --skip позарез где-то нужен. А все спецы, которые переносили, правили и комментировали документ[link24], внимания на эту тонкость не только не обратили, но даже не намекнули на существовании такой проблемы.
Кстати, вот нифига не троллинг. 1024[link25] бита. У меня один вопрос:
нахрена?зачем? 512 бит недостаточно? Это как увеличивать размер ключа больше, чем на 256 бит — зачем это делать? Я правда не понимаю. И, да, я помню оценки на затраты энергии на полный перебор 2255. Как теперь это всё соотнести?А здесь[link26] пишут, что максимум по стандарту — 512 бит, а 1024 бит — размер состояния. 1024 бит в выводе хэша тоже было, просто не пошло под стандарт?
spinore, не воспринимайте всерьез, вы просто себе такую репутацию создали – тролль троллей. Ваш вклад ощутим и оценен. Делайте сноски, акцентируя внимание на том, что вы не троллите. Не всегда понятен ваш тон.
Идея проста и понятна: LUKS-том состоит из заголовка и данных. Заголовок можно бессигнатурно (plain mode) зашифровать тем же самым паролем, что и сам LUKS, тогда сигнатур не будет вообще. При смене пароля нужно будет расшифровать заголовок, поменять LUKS-ключ в слотах на новый, а потом им же (т.е. тем же паролем) перешифровать заголовок LUKS'а (затереть, потом из бэкапа восстановить правильный заголовок, но уже на новый пароль в бессигнатурном шифровании). Этим достигается решение задачи, где есть всё:
Минус в том, что
Все эти затеи могут оказаться ненужными, потому что проще хранить заголовок LUKS'а в каком-то третьем устройстве в файле, тогда бессигнатурность будет иметься изначально и штатно, а подключаться такие тома будут одной простой командой.
На каком-то уровне протестированный пример:
Всему виной, как всегда, баги:
В версии 1.6.6 ненужный оффсет можно удалить таким хаком:
Не самый тривиальный момент (и плохо описанный в документации) — то, что аргументом luksFormat является внешнее устройство (или файл) для хидера, а не то целевое блочное устройство, которое мы будем шифровать. Последнее вообще в этом случае не указывается в luksFormat-команде. Т.е. luksFormat создаёт только заголовок LUKS'а на чём-то (по сути — метод выведения мастер-ключа), а потом этот заголовок можно будет применять к любому блочному устройству для его шифрования. Т.е. не нужно писать --header {устройство,файл} в luksFormat-команде. man cryptsetup:
Первая фраза противоречит второй. Т.е. нет такой опции --header у luksFormat — это будет ошибкой синтаксиса, если указать.
Общие замечания:
P.S. Ещё одна[link31] полезная заметка на тему внешних хидеров.
Ввиду предыдущего комментария мотивация вполне ясна. Более-менее рабочие оттестированные варианты (применение — на свой страх и риск):
Количество слотов «кустарного LUKS'а» сейчас 8, это заголовок размером 4KB (у аутентичного LUKS — 4k секторов, т.е. 2 MB), но можно поставить один или два, тогда оверхед будет, соответственно, 0.5KB или 1KB. Правда, при этом mkfs.ext4 будет ругаться на выравнивание и грозиться проблемами со скоростью работы:
чего нет при 8-ми слотах.
Открытие устройства — по сути, три команды, не требующие каких-то вычисляемых переменных, как в примере с LUKS, т.е. их легко ввести без скрипта вручную. Что ещё хорошо — для plain mode поддерживается --shared, которым не воспользоваться c LUKS (поэтому там понадобилась дополнительная команда — хак с отображением пространства с помощью dmsetup).
Для удобной смены пассфразы[link11] нужно минимум 2 слота. Пример с добавлением второго слота выше приведён (смысл понятен), но закомменчен. Т.е. расшированное содержимое всех использованных слотов-секторов одинаково (оно и есть мастер-ключ), но они зашифрованы разными пассфразами. Может возникнуть ошибка, когда в разных слотах используется одинаковая пассфраза (к примеру, в первом и во втором), тогда шифрованное содержимое у них будет одинаковым, что разрушит бессигнатурность/отрицаемость. Для этого применён трюк -o 1 -p 1 вместо просто -o 1 для второго слота. В этом случае даже при одинаковых пассфразах шифртексты будут разными. Это соответствует[link33] в точности тому, как если бы сразу расшифровали два первых слота-сектора одной пассфразой (-b 2 -o 0 -p 0) и увидели совпадение содержимого первого расшифрованного сектора со вторым на открывшемся (крипто)устройстве. Т.е. «бессигнатурный криптораздел» для второго слота-сектора состоит не из него самого, а из него + первый сектор, поэтому мы делаем отступ (-p 1) — пропускаем первый сектор, чтобы расшифровать только второй.
Возможно, есть ещё какие-то нетривиальные уязвимости схемы, но пока их не вижу. Непосредственное хранение мастер-ключа на диске (пусть и шифрованное) тоже немного смущает:
UPD: Поскольку мастер-ключи разных криптоустройств генерятся случайным образом и всегда будут разными, plain-текст, зашифрованный в «слотах», тоже всегда будет разным (т.е. два разных криптоустройства с одинаковым мастер-ключом недопустимы). Следовательно, можно использовать одинаковые пассфразы для разных криптоустройств — ключами, выводимыми из этих пассфраз, всегда будут шифроваться разные мастер-ключи. Т.е. это[link34] предупреждение* неактуально для слотов в силу специфики их содержимого.
Кстати, в варианте с LUKS'ом[link35] какое-то частичное совпадение plain-текстов в слотах всё равно будет (хотя бы из-за общих метаданных и сигнатур), поэтому там предупреждение[link34] остаётся в силе, т.е. нельзя использовать одинаковые пассфразы для бессигнатурного слоя разных устройств.
* В plain mode одинаковые пассфразы ведут к одинаковым ключам, а одинаковые ключи на одинаковых plain-текстах дадут одинаковые шифртексты.