Vlákno názorů k článku
Počet iterací KDF v Bitwardenu není u některých účtů dostatečný od Waldauf - Mohl bych požádat někoho znalého o popis, o...

  • Článek je starý, nové názory již nelze přidávat.
  • 24. 1. 2023 20:57

    Waldauf

    Mohl bych požádat někoho znalého o popis, o co přesně jde? Do budoucna jsem si plánoval nasadit Vaultwarden pro správu hesel a moc se zde nechytám. Děkuji.

  • 24. 1. 2023 21:14

    Jan Hrach
    Stříbrný podporovatel

    Pro symetrické šifrování potřebuješ klíč dlouhý tak jak je dlouhý klíč symetrické šifry, typicky tedy 128 nebo 256 bitů. Ale uživatel zadává heslo. Naivní způsob heslo doplnit nulama (nebo naopak oříznout pokud je delší než 128 bitů = 16 znaků) není moc dobrý protože se lidem líbí když klíče jsou „náhodné“ a přímo do AESu nevstupuje jako klíč něco co má moc nul a opakující se hodnoty.

    První věc co se s tím dá udělat je heslo zahashovat a jako klíč použít výsledek.

    Standardní kryptografické hashovací funkce jako třeba SHA-256 jsou „rychlé“, takže když někdo dostane zašifrovaný soubor, může hesla hádat podle slovníku nebo i hrubou silou a je to rychlé a snadno paralelizovatelné.

    Proto se začalo dělat to, že se hashovací funkce aplikuje hodněkrát po sobě. Například SHA256(SHA256­(SHA256(SHA256(hes­lo)))) (v praxi tam asi bude ještě nějaký mezikrok kdy se výsledek nějak zpracovává). Těch opakování je, třeba v případě ze zprávičky, 100k, 350k, nebo 600k. Abys získal z hesla klíč pro symetrickou šifru a mohl zkusit soubor rozšifrovat (nebo nějak jinak ověřit že heslo bylo správné), musíš tak provést tu „rychlou“ hashovací funkci mnohotisíckrát, a tak si nemůžeš dovolit hesla zkoušet příliš rychle.

    Nicméně tyto funkce jako SHA-256 mají ještě jednu „vadu“, stačí jim málo paměti a používají ji tak, že se to snadno paralelizuje na GPU. V praxi je pak zkoušení hesel na GPU o dost rychlejší než „legitimní“ používání na CPU (kde si pak nemůžeme dovolit nastavit víc než třeba milion iterací, protože by pak rozšifrování souboru trvalo hrozně dlouho). Proto existují speciální funkce, například Argon2, což jsou „hashovací funkce“ navržené aby nešly moc dobře počítat paralelně, typicky tak, že potřebují hodně paměti (takže se na GPU nevejde příliš mnoho paralelních instancí) a náhodně do ní přistupují (takže se propustnost paměti zabije na tom že to nejde cachovat).

  • 25. 1. 2023 19:37

    lukastesar

    Mě jenom k tomu napadá: je nějaký důvod PROTI používání těchto "paralelizaci odolných" hashovacích algoritmů? Nebo prostě proč nejsou první volba všech, kdo pracují s PBKDF?

    25. 1. 2023, 19:37 editováno autorem komentáře

  • 26. 1. 2023 8:29

    JVr
    Důvody jsou asi 3 (možná někdo doplní další)
    prvním důvodem který může a nemusí být proti je prověřenost algoritmu, ono totiž potvrdit, že hash je kryptograficky správně a nebude snadné najít kolize popř. hash jako takovou prolomit není zpravidla úplně triviální, a tak se určitou blíže nespecifikovanou dobu po uvedení nové funkce čeká, jestli někdo nepřijde s tím že je to slabé. S čímž zpravidla někdo přijde až po té co to začne část programů používat, protože do té doby nemá smysl se tím zabývat ;)
    druhým důvodem je podpora v frameworku/jazyku, který se pro vývoj používá. Programátor si zpravidla toto sám nenapíše, a tak buď jeho framework nebo „spolehlivé“ dostupné knihovny toto obsahují a nebo neobsahují. Sám si to psát nebude a pochybné knihovny také nezvolí, to se prostě u kryptografických funkcí nedělá.
    třetím důvodem je výkon, každá ta funkce se iteruje X krát, což při přihlašování "sežere" určitý výkon na mašině, která to dělá. Pokud se to vše dělá na serveru, což je celkem standard pro vzdálená připojení typu RDP, SSH a bohužel často i prohlížeče... tak pokud se vám zároveň má přihlašovat třeba i 500 lidí, tak iterované přihlášení, co sežere třeba i 0,4 s výkonu jednoho jádra může způsobit problém, protože některým lidem pak může trvat přihlášení i desítky sekund a to nemluvím o tom, co to může sežrat paměti a CPU na tom serveru (tady jde hodně o druh funkce, výkon serveru a také o to co tam má běžet krom toho přihlašování - běžně to tolik nevadí).
  • 26. 1. 2023 12:06

    Filip Jirsák
    Stříbrný podporovatel

    Já bych ten první důvod nepodceňoval. SHA-[123] jsou výsledkem soutěže NSA, už v rámci výběru se ty algoritmy prověřují. Argon2 je alespoň výsledek komunitní soutěže, takže se mu snad do nějaké míry věřit dá, i když není zdaleka tak prověřená, jako SHA. PBKDF2 je podle mne jenom přidání iterací s vírou „co by se mohlo stát špatného“, mám silné pochybnosti o tom, zda to někdy vůbec někdo kryptograficky seriozně zkoumal.

    Třetí důvod pak má zajímavé důsledky v praxi. Pak vám někdo vykládá, jak zjistili, že je to pomalé a uživatelé si stěžují, tak na to mají mašiny v cloudu, které to hashují a škálují je podle počtu uživatelů, kteří se přihlašují. No a proč by to nemohl úplně stejně na víc počítačů v cloudu rozdistribuovat útočník?