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

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

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

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

Современные реализации Unix crypt(3) поддерживают различные схемы хеширования. В частности, хеш-алгоритм может быть определён по уникальному идентификатору из префикса в результирующем тексте хеша, который следует де-факто стандарту называемому Modular Crypt Format (MCF)Simson Garfinkel, Alan Schwartz, Gene Spafford. "Practical Unix & Internet Security" . 2003. section "4.3.2.3 crypt16( ), DES Extended, and Modular Crypt Format" . "The Modular Crypt Format (MCF) specifies an extensible scheme for formatting encrypted passwords. MCF is one of the most popular formats for encrypted passwords""Modular Crypt Format: or, a side note about a standard that isn’t" ..

Библиотечная функция 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-подобно закодированный результат хеширования пароля и соли.

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

СхемаАлгоритмПримерDESKyq4bCxAXJkbg_BSDi_EQ0.jzhSVeUyoSqLupI1MD5$1$etNnh7FA$OlM7eljE/B7F1J4XYNnk812, 2a, 2x, 2ybcrypt$2a$10$VIhIOofSMqgdGlL4wzE//e.77dAQGqntF/1dT7bqCrVtquInWy2qi3NTHASH$3$$8846f7eaee8fb117ad06bdd830b7586c5SHA-256$5$9ks3nNEqv31FX.F$gdEoLFsCRsn/WRN3wxUnzfeZLoooVlzeF4WjLomTRFD6SHA-512$6$qoE2letU$wWPRl.PVczjzeMVgjiA8LLy2nOyZbf7Amj3qLIL978o18gbMySdKZ7uepq9tmMQXxyTIrS12Pln.2Q/6Xscao0md5Solaris MD5$md5,rounds=5000$GUBv0xjJ$$mSwgIswdjlTY0YxV7HBVm0sha1PBKDF1 с SHA-1$sha1$40000$jtNX3nZ2$hBNaIXkt4wBI2o5rsi8KejSjNqIq

Поддержка в операционных системах Scheme idSchemeLinuxFreeBSDNetBSDOpenBSDSolarisMacOSDESyyyyyy_BSDiyyyy1MD5yyyyy2, 2a, 2x, 2ybcryptyyyy3NTHASHy5SHA-2562.7+8.3+y6SHA-5122.7+8.3+ymd5Solaris MD5ysha1PBKDF1 with SHA1y

Архаичные 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 используется отдельная система для своих хешей.

Примечания

Ссылки Исходный код crypt(3) из седьмой редакции Unix систем (реализующий DES) Пример использования Онлайн генерация glibc2 совместимого crypt(3) Реализация для .NET

Категория:Криптографические хеш-функции