crypt je funkce knihovny, která se používá k výpočtu hash hesla , který lze použít k uložení hesel uživatelských účtů a zároveň je udržet relativně skrytá (v souboru passwd ). Výstupem funkce není jen hash, ale řetězec textu, který také obsahuje salt , použitý hashovací algoritmus a parametry, se kterými byl hash generován, jako je počet kol a další možnosti. Tento výstupní řetězec pak může být uložen v prostém textovém souboru.
Formálněji, crypt poskytuje funkce generování kryptografických klíčů pro ověření hesla a uložení na unixových systémech .
Operační systémy UNIX mají obslužný program stejného jména, crypt , který je často zaměňován s funkcí knihovny C. Pro rozlišení mezi těmito dvěma se obvykle nazývá systémový nástroj jako crypt(1) , protože je zdokumentován v části 1 UNIX manuál a kryptografický hash funguje jako krypta (3) , jak je zdokumentováno v části 3.
Stejná funkce kryptování se používá jak pro generování nového hashe pro uložení, tak pro výpočet hashe ověřovaného hesla, s písemnou solí pro srovnání.
Moderní implementace Unix crypt(3) podporují různá hashovací schémata. Hašovací algoritmus může být určen zejména jedinečným identifikátorem z předpony ve výsledném hašovacím textu, který se de facto řídí standardem nazývaným Modular Crypt Format (MCF) [1] [2] [3] .
Knihovní funkce je crypt() také obsažena v programovacích jazycích Perl [4] , PHP [5] , Pike [6] , Python [7] a Ruby [8] .
Postupem času byly zavedeny různé algoritmy. Aby byla zachována zpětná kompatibilita , autoři začali používat konvence serializace v heslech hesel , která byla později nazvána Modular Crypt Format (MCF) [2] . Protože v první řadě neexistoval žádný standard, staré haše krypt(3) se mohou lišit schéma od schématu. Během soutěže Password Hashing Competition vznikl následující formát, který představuje střední formu [9] :
$<id>[$<param>=<value>(,<param>=<value>)*][$<salt>[$<hash>]]
kde
Bohužel tento standard nebyl vyvinut okamžitě a ne všechna schémata se jí řídí.
Systém | Algoritmus | Příklad |
---|---|---|
DES | Kyq4bCxAXJkbg | |
_ | BSDi | _EQ0.jzhSVeUyoSqLupI |
jeden | MD5 | $1$etNnh7FA$OlM7eljE/B7F1J4XYNnk81 |
2, 2a, 2x, 2r | bcrypt | $2a$10$VIhIOofSMqgdGlL4wzE//e.77dAQGqntF/1dT7bqCrVtquInWy2qi |
3 | NTHASH | $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 s SHA-1 | $sha1$40000$jtNX3nZ2$hBNaIXkt4wBI2o5rsi8KejSjNqIq |
ID schématu | Systém | linux | FreeBSD | NetBSD | OpenBSD | Solaris | Operační Systém Mac |
---|---|---|---|---|---|---|---|
DES | y | y | y | y | y | y | |
_ | BSDi | y | y | y | y | ||
jeden | MD5 | y | y | y | y | y | |
2, 2a, 2x, 2r | 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 s SHA1 | y |
BigCrypt je modifikace DES používaná HP-UX , Digital Unix a OSF/1. Hlavní rozdíl oproti DES je v tom, že BigCrypt používá všechny znaky hesla, nejen prvních 8, a má tedy jinou délku hash [10] .
Crypt16 je mírná modifikace DES, která podporuje hesla dlouhá až 16 znaků. Používá se v Ultrix a Tru64 [11] .
Standardní knihovna C , kterou používají téměř všechny distribuce Linuxu , poskytuje implementaci funkce crypt , která podporuje DES, MD5 a (od verze 2.7) rodinu hashovacích algoritmů SHA-2. Ulrich Drepper, správce glibc, odmítl podporu pro bcrypt, protože nebyl schválen NIST [12] .
Na MacOS X poskytuje nativní crypt()omezenou funkčnost a podporuje pouze DES a BSDi. OS X používá pro své hashe samostatný systém.