crypt är en biblioteksfunktion som används för att beräkna en lösenordshash som kan användas för att lagra användarkontolösenord samtidigt som de hålls relativt dolda (i passwd -filen). Utdata från funktionen är inte bara en hash, utan en textsträng som också innehåller saltet , hashalgoritmen som används och parametrarna som hashen genererades med, såsom antalet rundor och andra alternativ. Denna utdatasträng kan sedan lagras i en vanlig textfil.
Mer formellt tillhandahåller krypto kryptografiska nyckelgenereringsfunktioner för lösenordsverifiering och lagring på Unix- system .
UNIX- operativsystem har ett verktyg med samma namn, crypt , som ofta förväxlas med biblioteksfunktionen C. För att skilja mellan de två brukar man referera till systemverktyget som crypt (1) eftersom det finns dokumenterat i avsnitt 1 i UNIX-manualen, och till den kryptografiska hashfunktionen som krypt (3) som det är dokumenterat i avsnitt 3.
Samma krypteringsfunktion används både för att generera en ny hash för lagring och för att beräkna hash för lösenordet som verifieras, med ett skriftligt salt för jämförelse.
Moderna implementeringar av Unix crypt(3) stöder olika hash-scheman. I synnerhet kan en hashalgoritm bestämmas av en unik identifierare från ett prefix i den resulterande hashtexten, som följer en de facto- standard som kallas Modular Crypt Format (MCF) [1] [2] [3] .
Biblioteksfunktionen ingår crypt() också i programmeringsspråken Perl [4] , PHP [5] , Pike [6] , Python [7] och Ruby [8] .
Med tiden har olika algoritmer introducerats. För att upprätthålla bakåtkompatibilitet började författarna använda serialiseringskonventioner i lösenordshashar , som senare kallades Modular Crypt Format (MCF) [2] . Eftersom det inte fanns någon standard i första hand, kan gamla crypt(3)-hashar skilja sig från schema till schema. Under Password Hashing Competition bildades följande format, som representerar mellanformen [9] :
$<id>[$<param>=<value>(,<param>=<value>)*][$<salt>[$<hash>]]
var
Tyvärr utvecklades inte denna standard omedelbart och inte alla system följer den.
Schema | Algoritm | Exempel |
---|---|---|
DES | Kyq4bCxAXJkbg | |
_ | BSDi | _EQ0.jzhSVeUyoSqLupI |
ett | MD5 | $1$etNnh7FA$OlM7eljE/B7F1J4XYNnk81 |
2, 2a, 2x, 2y | 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 med SHA-1 | $sha1$40000$jtNX3nZ2$hBNaIXkt4wBI2o5rsi8KejSjNqIq |
Schema-id | Schema | linux | FreeBSD | NetBSD | OpenBSD | Solaris | Mac OS |
---|---|---|---|---|---|---|---|
DES | y | y | y | y | y | y | |
_ | BSDi | y | y | y | y | ||
ett | 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 med SHA1 | y |
BigCrypt är en modifiering av DES som används av HP-UX , Digital Unix och OSF/1. Den största skillnaden med DES är att BigCrypt använder alla tecken i lösenordet, inte bara de första 8, och därför har en annan hashlängd [10] .
Crypt16 är en liten modifiering av DES som stöder lösenord upp till 16 tecken långa. Används i Ultrix och Tru64 [11] .
C-standardbiblioteket , som används av nästan alla Linux- distributioner , tillhandahåller en implementering av krypteringsfunktionen som stöder DES, MD5 och (sedan version 2.7) SHA-2-familjen av hashalgoritmer. Ulrich Drepper, underhållare av glibc, har avvisat stöd för bcrypt eftersom det inte har godkänts av NIST [12] .
På MacOS X ger native crypt()begränsad funktionalitet och stöder endast DES och BSDi. OS X använder ett separat system för sina hash.