Список каталогов сначала для не-GNU ls
:
ls -l | sort
Отметьте, это перечислит весь набор другого странного материала как символьные ссылки, сокеты и каналы также (соответственно сгруппированный, конечно), но полагая, что материал довольно редок, который не должен быть проблемой. Иначе фильтр был бы ls -l | grep '^(-|d)' | sort
Формат LUKS имеет несколько ключевых слотов, каждый может содержать зашифрованный главный ключ, который используется для шифрования данных. Этот главный ключ шифруется с помощью другого ключа, который получен из пароля.
Используя плоскость hash_function(passphrase)
генерировать ключ было бы немым, поскольку хеши, такие как sha1 могут быть вычислены быстро (SHA-1 является примером алгоритма MAC, для аутентификации сообщения, чтобы не использоваться в качестве плоскости для пароля).
Для шифрования данных на основе пароля Вы хотите, чтобы функция не спешила мешать атакам перебором. С этой целью PBKDF2 (основанная на пароле ключевая функция деривации) используется (см. превосходные ответы на этой Секунде. Вопрос о SE для мотиваций и других примеров).
derivedKey = PBKDF2(hash_function, passphrase, salt, iterations, derivedKeyLen)
hash_function для моей установки является sha1, в как показывают cryptsetup --help
:
Default compiled-in key and passphrase parameters:
Maximum keyfile size: 8192kB, Maximum interactive passphrase length 512 (characters)
Default PBKDF2 iteration time for LUKS: 1000 (ms)
Default compiled-in device cipher parameters:
loop-AES: aes, Key 256 bits
plain: aes-cbc-essiv:sha256, Key: 256 bits, Password hashing: ripemd160
LUKS1: aes-xts-plain64, Key: 256 bits, LUKS header hashing: sha1, RNG: /dev/urandom
Полученная длина ключа зависит от шифра, используемого для шифрования данных. Количество повторений зависит от Вашей скорости процессора.
Эти детали могут быть найдены в странице руководства cryptsetup (pbkdf2, должен позвонить в звонок). Для других деталей безопасности посмотрите FAQ cryptsetup.
Вы правы, хранить учетные данные для шифрования и хранение учетных данных для аутентификации являются двумя различными проблемами.
Когда пользователь входит в систему, операционная система должна иметь ссылочную копию его пароля для сравнения с паролем, который вводит пользователь. Если введенный пароль идентичен ссылочному паролю, аутентификация успешно выполняется. Для создания восстановления пароля трудным система не хранит пароль, но хеш его (медленный, соленый хеш для предпринятия попыток грубой силы предположить более трудный пароль).
Шифрование работает по-другому. Цель состоит в том, чтобы защитить от взломщика, у которого есть доступ к устройству хранения данных, таким образом, не должно быть возможно извлечь ключ шифрования из того, что хранится на одном только устройстве. Следовательно ключ не хранится на устройстве, но создается из информации, хранившей на устройстве, объединенном с информацией, предоставленной пользователем. Как правило, ключ сгенерирован от соли, сохраненной на устройстве, объединенном с паролем, предоставленным пользователем. Снова, для замедления попыток грубой силы процесс для объединения тех значений должен быть медленным, и процесс использует значение для каждого устройства (соль) в дополнение к паролю пользователя так, чтобы использование того же пароля не приводило к тому же ключу.
Оказывается, что, криптографически говоря, медленный хэш пароля и медленная ключевая функция деривации являются той же проблемой, известной как ключевое протяжение. LUKS использует PBKDF2, одну из фактических стандартных ключевых функций протяжения (хотя технологический прогресс взламывания пароля делает bcrypt или сценарий предпочтительными). Современные системы Unix используют подобный механизм для хеширования пароля (“MD5”, или “SHA-512” на самом деле выполнены с помощью итераций, подобны в конструкции к PBKDF2),
Если пользователь предоставляет неправильный пароль, то дешифрование мусора возвратов данных.
Как большинство других механизмов шифрования, LUKS не использует ключ, полученный из пароля как ключ шифрования для данных. Вместо этого ключ шифрования данных сгенерирован случайным образом, когда устройство создается, но не хранится непосредственно. LUKS хранит копии этого ключа, зашифрованного с каждым из полученных из пароля ключей. В терминологии LUKS каждый полученный из пароля ключ занимает слот в заголовке объема; каждый слот соответствует одному паролю. Можно прочитать газету TKS1 для деталей схемы шифрования с двумя слоями.