Почему LUKS должен генерировать значения хэш-функции?

Список каталогов сначала для не-GNU ls:

ls -l | sort

Отметьте, это перечислит весь набор другого странного материала как символьные ссылки, сокеты и каналы также (соответственно сгруппированный, конечно), но полагая, что материал довольно редок, который не должен быть проблемой. Иначе фильтр был бы ls -l | grep '^(-|d)' | sort

5
13.04.2017, 15:36
2 ответа

Формат 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.

5
27.01.2020, 20:37
  • 1
    Правда, но это действительно не объясняет, что продолжается. PBKDF2 является медленным хешем вместо быстрого хеша и что? –  Gilles 'SO- stop being evil' 16.11.2013, 23:30
  • 2
    @Gilles, который я разъяснил, почему PBKDF2 делает и как результат используется. В основном sha1 быстр, полезен для того, чтобы быстро проверить подлинность сообщения. Главный ключ должен быть зашифрован хорошо. Сам пароль не достаточно безопасен как ключ, потому что он может быть вынужден скотами "быстро". Путем замедления ключевой функции к ± 1 секунда, это все еще практично для использования, в то время как это делает "в лоб" намного тяжелее. –  Lekensteyn 17.11.2013, 01:42
  • 3
    ответа Все это применяется одинаково к хэшам пароля. На самом деле хэши пароля и основанная на пароле ключевая деривация являются в основном той же проблемой, криптографически говоря. Однако для аутентификации, система хранит хеш, тогда как для шифрования, система не хранит хеш; Вы не объясняете, что часть, и это - то, о чем этот вопрос. –  Gilles 'SO- stop being evil' 18.11.2013, 02:14
  • 4
    Между прочим, SHA-1 не является MAC, это - криптографический хеш (но не медленный криптографический хеш, который делает его неподходящим как хэш пароля). Хеш, такой как SHA-1 может использоваться для проверки целостности, не для аутентификации. Хеш может быть стандартным блоком MAC в конструкции HMAC, например, HMAC-SHA-1 является MAC. –  Gilles 'SO- stop being evil' 18.11.2013, 02:15

Вы правы, хранить учетные данные для шифрования и хранение учетных данных для аутентификации являются двумя различными проблемами.

Когда пользователь входит в систему, операционная система должна иметь ссылочную копию его пароля для сравнения с паролем, который вводит пользователь. Если введенный пароль идентичен ссылочному паролю, аутентификация успешно выполняется. Для создания восстановления пароля трудным система не хранит пароль, но хеш его (медленный, соленый хеш для предпринятия попыток грубой силы предположить более трудный пароль).

Шифрование работает по-другому. Цель состоит в том, чтобы защитить от взломщика, у которого есть доступ к устройству хранения данных, таким образом, не должно быть возможно извлечь ключ шифрования из того, что хранится на одном только устройстве. Следовательно ключ не хранится на устройстве, но создается из информации, хранившей на устройстве, объединенном с информацией, предоставленной пользователем. Как правило, ключ сгенерирован от соли, сохраненной на устройстве, объединенном с паролем, предоставленным пользователем. Снова, для замедления попыток грубой силы процесс для объединения тех значений должен быть медленным, и процесс использует значение для каждого устройства (соль) в дополнение к паролю пользователя так, чтобы использование того же пароля не приводило к тому же ключу.

Оказывается, что, криптографически говоря, медленный хэш пароля и медленная ключевая функция деривации являются той же проблемой, известной как ключевое протяжение. LUKS использует PBKDF2, одну из фактических стандартных ключевых функций протяжения (хотя технологический прогресс взламывания пароля делает bcrypt или сценарий предпочтительными). Современные системы Unix используют подобный механизм для хеширования пароля (“MD5”, или “SHA-512” на самом деле выполнены с помощью итераций, подобны в конструкции к PBKDF2),

Если пользователь предоставляет неправильный пароль, то дешифрование мусора возвратов данных.

Как большинство других механизмов шифрования, LUKS не использует ключ, полученный из пароля как ключ шифрования для данных. Вместо этого ключ шифрования данных сгенерирован случайным образом, когда устройство создается, но не хранится непосредственно. LUKS хранит копии этого ключа, зашифрованного с каждым из полученных из пароля ключей. В терминологии LUKS каждый полученный из пароля ключ занимает слот в заголовке объема; каждый слот соответствует одному паролю. Можно прочитать газету TKS1 для деталей схемы шифрования с двумя слоями.

3
27.01.2020, 20:37
  • 1
    Несмотря на значительное разъяснение Вашего ответа, я полагаю, что исходный вопрос в OP все еще стоит, если переведено в этих терминах: где (одни или несколько) копии зашифрованного сохраненного главного ключа? Бумага TKS1 довольно прозрачна, что зашифрованный главный ключ получен от хранения ключей, затем дешифровал посредством ключа шифрования, полученного через PBKDF2 и состояния несколько раз, это расположено на диске (кроме того, где еще это могло быть)? Я также предполагаю, что это скрыто, но Вы, оказывается, знаете как и где? –  MariusMatutiae 11.04.2016, 19:30
  • 2
    @MariusMatutiae я сожалею, я не понимаю то, что Вы думаете, отсутствует. Как я объясняю, никакая копия главного ключа не хранится в простом тексте. Копии главного ключа хранятся в каждом слоте, каждый зашифрованный с ключом, полученным из соответствующего пароля с помощью PBKDF2. Слоты являются частью заголовок LUKS в начале раздела в месте, где Вы ожидали бы находить метаданные, они не “скрыты” в так или иначе. –  Gilles 'SO- stop being evil' 11.04.2016, 20:32
  • 3
    Это - то, что я хотел знать, спасибо: где slots . –  MariusMatutiae 11.04.2016, 21:12

Теги

Похожие вопросы