Krypto (C)

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 .

Relation till Unix-kryptverktyget

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.

Detaljer

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] .

Nyckelgenereringsfunktioner som stöds

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

Stöd i operativsystem

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

Arkaiska Unix-scheman

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] .

Linux

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] .

Mac OS

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.

Anteckningar

  1. Simson Garfinkel, Alan Schwartz, Gene Spafford. "Praktisk Unix & Internetsäkerhet" Arkiverad 31 juli 2020 på Wayback Machine . 2003. avsnitt "4.3.2.3 crypt16( ), DES Extended och Modular Crypt Format" Arkiverad 18 juni 2018 på Wayback Machine . "Modular Crypt Format (MCF) specificerar ett utökbart schema för formatering av krypterade lösenord. MCF är ett av de mest populära formaten för krypterade lösenord."
  2. ↑ 1 2 "Modular Crypt Format: eller, en sidoanteckning om en standard som inte är" Arkiverad 9 september 2017 på Wayback Machine .
  3. "Binärt modulärt kryptformat" . Hämtad 21 mars 2016. Arkiverad från originalet 11 juni 2018.
  4. crypt - perldoc.perl.org . Hämtad 21 mars 2016. Arkiverad från originalet 16 april 2018.
  5. PHP: krypta - Manual . Hämtad 21 mars 2016. Arkiverad från originalet 16 april 2018.
  6. アーカイブされたコピー(inte tillgänglig länk) . Datum för åtkomst: 9 februari 2013. Arkiverad från originalet den 2 oktober 2012. 
  7. 36.5. crypt - Funktion för att kontrollera Unix-lösenord - Python 2.7.11 dokumentation . Hämtad 21 mars 2016. Arkiverad från originalet 26 oktober 2012.
  8. Klass: String (Ruby 2.3.0) . Hämtad 21 mars 2016. Arkiverad från originalet 3 oktober 2011.
  9. Lösenord Hash Competition strängformat . Hämtad 21 mars 2016. Arkiverad från originalet 27 januari 2017.
  10. passlib.hash.bigcrypt - BigCrypt - Passlib v1.6.5 Dokumentation . Hämtad 21 mars 2016. Arkiverad från originalet 7 juli 2017.
  11. passlib.hash.crypt16 - Crypt16 - Passlib v1.6.5 Dokumentation . Hämtad 21 mars 2016. Arkiverad från originalet 7 juli 2017.
  12. bcrypt-stöd för lösenord i /etc/shadow - Red Hat Customer Portal . Hämtad 21 mars 2016. Arkiverad från originalet 17 april 2018.

Länkar