Interested Article - Crypt (C)
- 2021-02-01
- 1
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 используется отдельная система для своих хешей.
Примечания
- 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"
- ↑ от 9 сентября 2017 на Wayback Machine .
- . Дата обращения: 21 марта 2016. 11 июня 2018 года.
- . Дата обращения: 21 марта 2016. 16 апреля 2018 года.
- . Дата обращения: 21 марта 2016. 16 апреля 2018 года.
- . Дата обращения: 9 февраля 2013. Архивировано из 2 октября 2012 года.
- . Дата обращения: 21 марта 2016. 26 октября 2012 года.
- . Дата обращения: 21 марта 2016. 3 октября 2011 года.
- . Дата обращения: 21 марта 2016. 27 января 2017 года.
- . Дата обращения: 21 марта 2016. 7 июля 2017 года.
- . Дата обращения: 21 марта 2016. 7 июля 2017 года.
- . Дата обращения: 21 марта 2016. 17 апреля 2018 года.
Ссылки
- из седьмой редакции Unix систем (реализующий DES)
- (недоступная ссылка)
- 2021-02-01
- 1