Назад | Перейти на главную страницу

Как хэш пароля закодирован в файле теневого пароля?

Я изучаю безопасность паролей Linux (больше любопытство, чем что-либо полезное), и я понимаю, что настоящий пароль хешируется и хранится в файле теневых паролей. В чем я не уверен и не смог найти в моем кратком поиске в Google, так это то, какая кодировка используется для кодирования хешированного значения (и значения соли). Очевидно, это не шестнадцатеричный код, и это явно текст, за исключением : персонаж. Может ли кто-нибудь здесь сказать мне, что это за кодировка?

Редактировать: Я понимаю хеширование (MD5, SHA-X), соль и спецификатор хеширования. Я ищу метод преобразования результатов хеширования (байтовый массив (byte [])) в последовательность символов, которые я вижу в файле, то есть: кодировку.

В случае MD5 crypt () соль - это просто случайная строка длиной до 8 символов из [a-zA-Z0-9./].

Затем соль и пароль хешируются вместе, передаются через функцию усиления, а затем кодируются с использованием варианта на Base64:

  • состояние MD5 (128 бит) перетасовывается и разбивается на 6 групп, каждая из которых содержит 3 байта (последняя группа включает 2 байта нулевого заполнения)
  • каждая группа из 3 байтов затем разбивается на 4 блока по 6 бит в каждом
  • наконец, каждая 6-битная группа отображается на символ в диапазоне [a-zA-Z0-9./]

Если вы хотите знать только, как закодирован пароль, crypt () использует специальный тип кодирования Base64.

Кодировка Base64 использует следующую кодировку: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /

В то время кодировка crypt () использует эту кодировку: ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Кроме того, в отличие от Base64, здесь нет заполнения "=".

С другой стороны, реализации crypt () MD5, SHA-X и т. Д. Делают больше, чем просто генерируют случайную соль, запускают хеш-функцию и кодируют ее с использованием прежней кодировки.

Я рекомендую прочитать эти два замечательных поста: «Хеширование паролей с помощью MD5-крипты по отношению к MD5» и «Реализация SHA512-crypt vs MD5-crypt», для более полного объяснения.

Первая часть хэша между знаками $ указывает, какой алгоритм используется.

Проверять, выписываться http://en.wikipedia.org/wiki/Crypt_%28Unix%29 для списка того, что означают разные значения.

Вы ищете используемый алгоритм?

Традиционно Unix и ранние варианты Linux использовали ослабленный DES, основанный на пароле длиной не более 8 символов. Большинство современных установок Linux используют хеши MD5 для паролей, а некоторые поддерживают SHA. Кроме того, появилась более модульная поддержка дополнительных алгоритмов, включая Blowfish. GNU libc, используемая большинством Linux, поддерживает DES, MD5 и SHA, что дает вам несколько вариантов.

Конкретный тип используемого алгоритма хеширования указывается в начале пароля как $ DIGIT $. Например, 1 доллар - это MD5.

Вы можете получить более подробную информацию из Википедии (см. Страницу на Crypt_ (Unix)) или Google для 'crypt unix' или 'crypt linux'.