Kryptoměna (C)

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 .

Vztah k unixovému šifrovacímu nástroji

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.

Podrobnosti

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

Podporované funkce generování klíčů

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

Podpora v operačních systémech

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

Archaická Unixová schémata

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

Linux

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

Mac OS

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.

Poznámky

  1. Simson Garfinkel, Alan Schwartz, Gene Spafford. "Praktický Unix & Internet Security" Archivováno 31. července 2020 na Wayback Machine . 2003. sekce "4.3.2.3 crypt16(), DES Extended a Modular Crypt Format" Archivováno 18. června 2018 na Wayback Machine . "Modular Crypt Format (MCF) specifikuje rozšiřitelné schéma pro formátování šifrovaných hesel. MCF je jedním z nejpopulárnějších formátů pro šifrovaná hesla."
  2. ↑ 1 2 „Modular Crypt Format: aneb vedlejší poznámka o standardu, který není“ Archivováno 9. září 2017 na Wayback Machine .
  3. "Binární modulární kryptografický formát" . Získáno 21. března 2016. Archivováno z originálu 11. června 2018.
  4. crypt - perldoc.perl.org . Získáno 21. března 2016. Archivováno z originálu 16. dubna 2018.
  5. PHP: crypt - Manual . Získáno 21. března 2016. Archivováno z originálu 16. dubna 2018.
  6. アーカイブされたコピー(nedostupný odkaz) . Datum přístupu: 9. února 2013. Archivováno z originálu 2. října 2012. 
  7. 36.5. crypt - Funkce pro kontrolu unixových hesel - dokumentace Pythonu 2.7.11 . Získáno 21. března 2016. Archivováno z originálu dne 26. října 2012.
  8. Třída: Řetězec (Ruby 2.3.0) . Získáno 21. března 2016. Archivováno z originálu 3. října 2011.
  9. Heslo Hash Soutěžní formát řetězce . Získáno 21. března 2016. Archivováno z originálu 27. ledna 2017.
  10. passlib.hash.bigcrypt - BigCrypt - Passlib v1.6.5 Dokumentace . Získáno 21. března 2016. Archivováno z originálu 7. července 2017.
  11. passlib.hash.crypt16 - Crypt16 - Dokumentace Passlib v1.6.5 . Získáno 21. března 2016. Archivováno z originálu 7. července 2017.
  12. bcrypt podpora pro hesla v /etc/shadow - Zákaznický portál Red Hat . Získáno 21. března 2016. Archivováno z originálu 17. dubna 2018.

Odkazy