Techniky autentifikace

Lol Phirae

Re:Techniky autentifikace
« Odpověď #30 kdy: 13. 08. 2018, 18:55:23 »
Takže jste se tady zmohli jen na to se vysmát a přesměrovat na existující framework. Bez jakéhokoliv hlubšího vhledu do problematiky.

ja ti navrhuju reseni bez frameworku)) daj email adresu))

nemůžu ti dát email, já jsem anonym. Napiš to tady.

to by pak sifrovani postradalo smysl)) pointa source code je mit ho uzamcene na webservru))

Aha. Tak to je určitě úžasné šifrování, když ho nejde zveřejnit, protože by přestalo fungovat. Odkazovaný znovuvynálezce solení asi bude o několik levelů výš.

 ::) ::) ::)


Re:Techniky autentifikace
« Odpověď #31 kdy: 13. 08. 2018, 19:37:18 »
@anonym:

Pokud se rozhodnete řešit na webu autentizaci pomocí hesel, tak byste měl řešit následující problémy:

1) Čitelnost hesel v databázi
Pokud unikne databáze, uživatele nepotěší, že si útočník jejich hesla rovnou přečte. Hashovací funkce se používají proto, aby čitelná podoba hesla (kterou je třeba dát serveru pro přihlášení) nebyla z databáze zjistitelná. Je dobré zvolit nějakou hashovací funkci považovanou dnes za bezpečnou (naptř. z rodiny SHA-2, tedy SHA224/256/384/512).
Princip je takový, že server přijaté heslo zahashuje a výsledek porovná s tím, co má uložené v databázi.

2) "duhové" tabulky (rainbow tables)

Problém je, že si každý může hashe pro různá hesla předpočítat dopředu, vytvořit si jakousi tabulku dvojic (hash,heslo), tedy vlastně funkci "inverzní" k hashovací. Tím se zahashované heslo uživatele stává čitelné, jakmile se objeví v takové "duhové" tabulce, a tedy jsme v zásadě na začátku (nelze spoléhat, že si uživatelé budou volit hesla, která v předpočítané tabulce nikdy nebudou). A ano, takových tabulek předpočítaných dvojic (hash,heslo) lze najít hromadu, stačí mít jen dostatek diskového prostoru.

Pro vyřešení tohoto problému byla zavedena sůl (salt), tedy náhodně vypadající řetězec (generovaný ideálně náhodně), který se k heslu před hashováním přidá. To znamená, že útočník si nemůže dopředu předpočítat "duhovou" tabulku, protože pro výpočet hashe potřebuje znát sůl.

Další výhoda použití soli spočívá v tom, že uživatelé se stejným heslem budou mít rozdílný hash (pokud budou mít rozdílnou sůl).

Sůl není tajný parametr, takže ji můžete ukládat klidně v databázi. Jen to jen věc přidávající na náhodnosti. Měla by být ale dostatečně náhodná.

3) Vysoký výkon počítačů

I když útočník nemůže využít (díky soli) nějaké již hotové "duhové" tabulky, stále může po nahlédnutí do databáze použít hrubou sílu a pro dvojici (salt, hash) najít vstupní heslo. Samozřejmě za předpokladu, že zná algoritmus hashování a aplikace soli, ale utajování těchto věcí je proti principům dnešní kryptografie (tajné jsou klíče/hesla, ne postupy).

Řešení tohoto problému je v celku přímočaré; použít hashovací funkci, jejíž výpočet trvá velmi velmi dlouho. Uživatel její výpočet pocítí pouze při přihlášení, takže nárůst náročnosti pro něj nepředstavuje problém, i kdyby ten výpočet trval vteřinu. Nejjednodušším způsob, jak zvýšit výpočetní náročnost hashovací funkce, je její iterativní použití (tzn. ji na výsledek používat opakovaně). Stačí jen zvolit vhodný počet iterací (tisíce-statisíce nebudou problém).

--------------

Tak, to bychom měli vhled do problematiky.

--------------

Weby nedělám, ale přijde mi, že v dnešní javascriptové době by se dalo autentizovat i pomocí privátních/veřejných klíčů. Privátní klíč by se mohl generovat z uživatelova jména, hesla (a bhůvíčeho) a mezi serverem a klientem by se pak vyměnila jenom challenge (náhodná data) a response (podpis challenge). Ale určitě už takové věci existují.

chirman

Re:Techniky autentifikace
« Odpověď #32 kdy: 13. 08. 2018, 20:05:52 »
A preco si vobec v dnesnej dobe chcete robit vlastnu autentifikaciu. Urobit ju bezpecne nie je jednoduche: 2FA, OTP, ... Najjednoduchsie je nasadit SSO (OAuth, pripadne SAML pre enterprise). Pokial nechcete/nemozete pouzit public IdPs (Google, Github, LI, ...) tak si nasadte Keycloak, ktory ma vela moznosti na auth/pouzite flows/....

black3r

Re:Techniky autentifikace
« Odpověď #33 kdy: 13. 08. 2018, 20:39:06 »
S bezpecnostou sa nesranduje, nevymysla sa koleso a neoplati sa spoliehat sa na nazory anonymnych ludi z nahodneho fora, ktora objavite, ktore by sa tou tematikou mohlo zaoberat.

Oplati sa doverovat autoritam, ktore sa bezpecnostou zaoberaju.., napr. na kurzoch pocitacovej bezpecnosti na FMFI UK sa vseobecne spominaju nariadenia od americkeho NIST, alebo nemeckeho uradu pre bezpecnost BSI, poziadavky na certifikaciu FIPS, pripadne bezpecnost webov celkom kvalitne a podrobne riesi projekt OWASP.

OWASP o hashovani hesiel: https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet#Do_not_limit_the_character_set_and_set_long_max_lengths_for_credentials

NIST o roznych druhoch overovania identity:
https://pages.nist.gov/800-63-3/sp800-63b.html

Zhrnutie: Odporuca sa pouzivat hashovacie metody, ktore su povazovane za bezpecne, s rozumnou (nastavitelnou) cenou vypoctu, aby sa nedali pri brute-forcovani odskusat tisicky hesiel za sekundu. Take su napr. Argon2, PBKDF2, scrypt, bcrypt. Vsetky by mali mat overenu implementaciu pre bezne programovacie jazyky (napr. PHP ma aj Argon2 ako sucast standardnej kniznice, pre Python existuje passlib) a rozumne implementacie zvyknu salt generovat pri hashovani nahodne a ukladat ho ku hashu do jedneho "hash stringu", takze ho vacsinou netreba navyse riesit vo vlastnom kode (ale toto si treba overit samozrejme)

anonym

Re:Techniky autentifikace
« Odpověď #34 kdy: 13. 08. 2018, 23:56:15 »
To je prostě jak se zabezpečením domu. Můžeš koupit Jablotron alarm, dát to všudemožně, ale když tě bude chtít vykrást profík, protože doma máš v trezoru růžový diamant velký jako vejce, tak tě stejně vykrade.

Ale kdo z náš tohle doma má? Nikdo. Tak pro by k vám někdo takový chodil - to je to nejlepší zabezpěčení. Proto první úroveň zabezpěčení je zámek na dvěře. S tím se spokojí 70% bytů. 98% bytů se pak spokojí s nějakým obyč jablotronem, který si dají do obýváku a do garáže. Je jasné, že jinou úroveň zabezpěčení potřebuje třeba bank, kde i tohle by bylo málo.

Ale to neznamená, že když si chci zabezpěčit svůj dům, musím mít řešení jako banka a trezory jako banka. To je to, co se mi tu někteří trotli typu Lol Phierae snaží vnutit.

Takže mi bohatě stačí řešení pro 9 z 10 případů užití. Potřebuju jen vědět, jakým algoritmem zahashovat heslo, které si odchytnu na restu, a jestli mi stačí dát na server HTTPS aby se to heslo nedalo odposlechnout cestou na server. A udělat obojí co nejjednodušeji.

Prolomit se dá stejně všechno.


Lol Phirae

Re:Techniky autentifikace
« Odpověď #35 kdy: 14. 08. 2018, 00:06:03 »
Potřebuju jen vědět, jakým algoritmem zahashovat heslo

ROT11

Jenda

Re:Techniky autentifikace
« Odpověď #36 kdy: 14. 08. 2018, 07:26:59 »
Potřebuju jen vědět, jakým algoritmem zahashovat heslo

PBKDF2/scrypt/bcrypt/argon2 (ty jsou nejlepší, o tom, který konkrétně z nich, se budou lidi hádat -- PBKDF2 se dá dobře akcelerovat na GPU/FPGA, což nechceme, ale zase používá „standardní“ HMAC-SHA, zatímco ty zbylé tři jsou méně standardní a člověk si tak může naběhnout) nebo iterovaná SHA2.

a jestli mi stačí dát na server HTTPS aby se to heslo nedalo odposlechnout cestou na server

Ještě je potřeba dát si pozor, abys nelinkoval obsah z HTTP (zejména javascripty, protože přes ty může někdo vyčíst to formulářové pole s heslem -- btw. u JS se dá dát do kódu hash a pak linkovat cizí JS a nejde podvrhnout, ale to je asi moc opruz dělat. Možná to stojí za zvážení pokud používáš nějakou CDN), a nastavit HSTS, aby nešly udělat downgrade útoky. Osobně po nastavení ověřuji HTTPS na https://www.ssllabs.com/ssltest/.