Как найти алгоритм хеширования, используемый для хеширования паролей?

11

У меня есть рабочий пароль и я вижу хеш (/ etc / passwd). Как найти алгоритм хеширования, используемый для хеширования пароля, не пытаясь вручную использовать разные алгоритмы, пока не найду совпадение?

Дорин Ботан
источник
1
Какой вариант Unix вы используете?
Кусалананда
3
Я очень удивлен , что вы можете увидеть хэш в /etc/passwd. Я думал, что все варианты Unix / Linux разделились с /etc/shadowгодами назад. (Я знаю, что такие системы по-прежнему поддерживают хеши, passwdно я не знаю ни одной утилиты, которая бы их там помещала. Возможно, встроенная система?
roaima
Это OpenWrt Backfire 10.03. Хеши все еще хранятся /etc/passwdздесь. Это, однако, не меняет сути вопроса. Является ли?
Дорин Ботан
1
Для справки: в BSD есть два файла Berkeley DB, roaima. Это все еще разделено, но это не так, /etc/shadowи у них нет файла с таким именем.
JdeBP

Ответы:

27

Это отражено в crypt(3)«странице руководства сек , которые вы можете найти с помощью shadow(5)«s страница руководства , или passwd(5)«s . Эти ссылки подходят для современных систем на основе Linux; описание там есть:

Если соль - это строка символов, начинающаяся с символов «$ id $», за которыми следует строка, необязательно оканчивающаяся на «$», тогда результат имеет вид:

$id$salt$encrypted

id определяет метод шифрования, используемый вместо DES, а затем определяет, как интерпретируется остальная часть строки пароля. Поддерживаются следующие значения id:

ID  | Method
─────────────────────────────────────────────────────────
1   | MD5
2a  | Blowfish (not in mainline glibc; added in some
    | Linux distributions)
5   | SHA-256 (since glibc 2.7)
6   | SHA-512 (since glibc 2.7)

Blowfish, также известный как bcrypt, также определен префиксами 2, 2b, 2xи 2y(см документации PassLib в ).

Таким образом, если хешированный пароль хранится в вышеуказанном формате, вы можете найти используемый алгоритм, посмотрев на идентификатор ; в противном случае это cryptалгоритм DES по умолчанию (с 13-символьным хешем), или «большой» cryptDES (расширенный для поддержки 128-символьных паролей, с длиной до 178 символов), или BSDI с расширенным DES (с _префиксом за которым следует 19-символьный хэш).

Некоторые дистрибутивы используют libxcrypt, который поддерживает и документирует еще несколько методов:

  • y: yescrypt
  • gy: gost-yescrypt
  • 7: scrypt
  • sha1: sha1crypt
  • md5: SunMD5

Другие платформы поддерживают другие алгоритмы, поэтому проверьте cryptстраницу руководства там. Например, OpenBSDcrypt(3) поддерживает только Blowfish, который он идентифицирует, используя идентификатор «2b».

Стивен Китт
источник
2
Пароли, основанные на DES, всегда имеют длину 13 символов и состоят из буквенно-цифровых символов, а также .и /. Первые 2 символа - это соль, а остальные 11 - это хэш-значение (вроде). И это единственный из поддерживаемых алгоритмов, cryptкоторый настолько слаб, что вы не можете компенсировать это, выбрав более надежный пароль.
Касперд