7.3 Ukládání hesel

Hesla jsou obvykle uložena v souborové databázi obsahující minimálně uživatelská jména a jejich zahashované hodnoty.

Proces vytvoření hesla
  1. Uživatel zadá heslo.
  2. Hodnota hesla je zahashována (prohnána hashovací funkcí).
  3. Hodnota hashe je uložena v databázi.
  4. Při ověřování se zadané heslo znovu zahashuje a porovná se s uloženou hodnotou hashe.

Pro tyto účely je nutná kryptograficky bezpečná hashovací funkce. Slabá funkce (jako třeba obyčejná suma nebo parita) by usnadnila zjištění hesla.

Linuxový systém (/etc/passwd a /etc/shadow)

Formát souboru /etc/shadow

Obsahuje zahashovaná hesla uživatelů a nastavení jejich platnosti.

Formát hashe je typicky: $id$salt$hashed

  • $1$: MD5
  • $2a$, $2y$: Blowfish
  • $5$: SHA-256
  • $6$: SHA-512

Za hashem navazuje např. počet dní od poslední změny hesla a expirace.

Použití takzvané soli (salt) brání proti útokům pomocí předpočítaných hashů, protože každé heslo je před zahašováním osoleno unikátní náhodnou hodnotou.

Windows Hashování (LM a NTLM)

LM (LAN Manager) Hash

Způsob, jakým Windows ukládaly hesla před verzí NT. Kvůli zpětné kompatibilitě (SMB) jej podporoval i systém Windows NT.

  • Uživatelské heslo je omezeno na maximálně 14 znaků.
  • Heslo je převedeno na velká písmena.
  • Je doplněno nulovými bajty na 14 bajtů.
  • Poté je rozděleno na dvě sedmibajtové poloviny.
  • Tyto hodnoty se použijí pro vytvoření dvou DES klíčů (ECB), kterými se zašifruje konstantní ASCII řetězec KGS!@#$%.
  • Dvě získané šifrované hodnoty tvoří 16bajtový LM hash.

LM hash nevyužívá sůl (salt protection) a je tedy velmi náchylný k útokům pomocí duhových tabulek.

NTLM Hash

Novější verze. NTLM hash = MD4(UTF-16-LE(password))

Windows Security Account Manager (SAM)

Databázový soubor hesel, cesta: %SystemRoot%/system32/config/SAM