Interested Article - Crypt (C)

crypt — библиотечная функция, которая используется для вычисления хеша пароля , который может быть использован для хранения паролей учетных записей пользователей, сохраняя при этом их относительно скрытыми (в passwd файле). На выходе функции не просто хеш, а строка текста, которая также содержит соль , используемый хеш-алгоритм и параметры, с которыми был получен хеш, такие, как количество раундов и другие опции. Эту выходную строку затем можно хранить в простом текстовом файле.

Более формально, crypt предоставляет криптографические функции формирования ключа для проверки пароля и хранения в системах Unix .

Отношение к Unix утилите crypt

В операционных системах UNIX есть одноимённая утилита crypt , которую часто путают с библиотечной функцией C. Чтобы различать их, обычно ссылаются на системную утилиту как crypt(1) , так как она документирована в разделе 1 руководства UNIX, а на криптографическую хеш-функцию как crypt(3) , так как она документирована в секции 3.

Детали

Одна и та же функция crypt используется как для генерирования нового хеша для хранения, так и для вычисления хеша проверяемого пароля с записанной солью для сравнения.

Современные реализации Unix crypt(3) поддерживают различные схемы хеширования. В частности, хеш-алгоритм может быть определён по уникальному идентификатору из префикса в результирующем тексте хеша, который следует де-факто стандарту называемому Modular Crypt Format (MCF) .

Библиотечная функция crypt() также включена в языки программирования Perl , PHP , Pike , Python и Ruby .

Поддерживаемые функции формирования ключа

С течением времени вводятся различные алгоритмы. Чтобы поддерживать обратную совместимость , авторы начали использовать конвенции по сериализации в хешах паролей , который позже был назван Modular Crypt Format (MCF) . Поскольку никакого стандарта изначально не было, старые crypt(3) хеши могут отличаться от схемы к схеме. Во время был сформирован следующий формат, который представляет среднюю форму :

$<id>[$<param>=<value>(,<param>=<value>)*][$<salt>[$<hash>]]

где

  • id идентификатор схемы хеширования, которая отображает алгоритм (например, 1 для схемы с алгоритмом MD5 , 5 для SHA-256 и т.д.)
  • param имя параметра и value его значение — параметры сложности, например число раундов
  • salt Base64 -подобно закодированная соль
  • hash Base64 -подобно закодированный результат хеширования пароля и соли.

К сожалению, этот стандарт выработался не сразу и не все схемы следуют ему.

Схема Алгоритм Пример
DES Kyq4bCxAXJkbg
_ _EQ0.jzhSVeUyoSqLupI
1 MD5 $1$etNnh7FA$OlM7eljE/B7F1J4XYNnk81
2, 2a, 2x, 2y bcrypt $2a$10$VIhIOofSMqgdGlL4wzE//e.77dAQGqntF/1dT7bqCrVtquInWy2qi
3 $3$$8846f7eaee8fb117ad06bdd830b7586c
5 SHA-256 $5$9ks3nNEqv31FX.F$gdEoLFsCRsn/WRN3wxUnzfeZLoooVlzeF4WjLomTRFD
6 SHA-512 $6$qoE2letU$wWPRl.PVczjzeMVgjiA8LLy2nOyZbf7Amj3qLIL978o18gbMySdKZ7uepq9tmMQXxyTIrS12Pln.2Q/6Xscao0
md5 Solaris MD5 $md5,rounds=5000$GUBv0xjJ$$mSwgIswdjlTY0YxV7HBVm0
sha1 PBKDF1 с SHA-1 $sha1$40000$jtNX3nZ2$hBNaIXkt4wBI2o5rsi8KejSjNqIq

Поддержка в операционных системах

Scheme id Scheme Linux FreeBSD NetBSD OpenBSD Solaris MacOS
DES y y y y y y
_ BSDi y y y y
1 MD5 y y y y y
2, 2a, 2x, 2y bcrypt y y y y
3 NTHASH y
5 SHA-256 2.7+ 8.3+ y
6 SHA-512 2.7+ 8.3+ y
md5 Solaris MD5 y
sha1 PBKDF1 with SHA1 y

Архаичные Unix-схемы

BigCrypt — это модификация DES, используемая в HP-UX , Digital Unix , и OSF/1. Главное различие с DES в том, что BigCrypt использует все символы пароля, а не только первые 8 и поэтому имеет хеш различной длины .

Crypt16 — это небольшая модификация DES, которая поддерживает пароли до 16 символов. Использовалась в Ultrix и Tru64 .

Linux

Стандартная библиотека языка Си , используемая почти во всех дистрибутивах Linux , предоставляет реализацию функции crypt , которая поддерживает DES, MD5 и (начиная с версии 2.7) семейство алгоритмов хеширования SHA-2. Ulrich Drepper, сопровождающий glibc, отклонил поддержку bcrypt, поскольку он не был одобрен NIST .

Mac OS

В MacOS X нативная crypt() предоставляет ограниченную функциональность, поддерживая только DES и BSDi. В OS X используется отдельная система для своих хешей.

Примечания

  1. Simson Garfinkel, Alan Schwartz, Gene Spafford. от 31 июля 2020 на Wayback Machine . 2003. от 18 июня 2018 на Wayback Machine . "The Modular Crypt Format (MCF) specifies an extensible scheme for formatting encrypted passwords. MCF is one of the most popular formats for encrypted passwords"
  2. от 9 сентября 2017 на Wayback Machine .
  3. . Дата обращения: 21 марта 2016. 11 июня 2018 года.
  4. . Дата обращения: 21 марта 2016. 16 апреля 2018 года.
  5. . Дата обращения: 21 марта 2016. 16 апреля 2018 года.
  6. . Дата обращения: 9 февраля 2013. Архивировано из 2 октября 2012 года.
  7. . Дата обращения: 21 марта 2016. 26 октября 2012 года.
  8. . Дата обращения: 21 марта 2016. 3 октября 2011 года.
  9. . Дата обращения: 21 марта 2016. 27 января 2017 года.
  10. . Дата обращения: 21 марта 2016. 7 июля 2017 года.
  11. . Дата обращения: 21 марта 2016. 7 июля 2017 года.
  12. . Дата обращения: 21 марта 2016. 17 апреля 2018 года.

Ссылки

  • из седьмой редакции Unix систем (реализующий DES)
  • (недоступная ссылка)
Источник —

Same as Crypt (C)