\section{Hash} \begin{frame}{Mi az a hash?} \begin{block}{Definíció} Tetszőleges hosszúságú bemenetet rögzített méretű lenyomattá alakít. \end{block} \begin{itemize} \item Egyirányű függvény (nem visszafejthető) \item Gyorsan számolható \item Kis változás teljesen más hasht eredményez \end{itemize} \begin{alertblock}{Fontos} Hash $\neq$ titkosítás: nem visszafejthető! \end{alertblock} \end{frame} \begin{frame}{Hash tulajdonságok} \begin{itemize} \item \textbf{Deterministic}: azonos bemenet = azonos kimenet \item \textbf{Preimage resistance}: nehéz visszafejteni \item \textbf{Second preimage}: nehéz másik bemenetet találni \item \textbf{Collision resistance}: nehéz két különböző bemenetet találni azonos hash-sel \end{itemize} \begin{exampleblock}{Példa} \texttt{hash("jelszo") = 5f4dcc3b5aa765d61d8327deb882cf99} \end{exampleblock} \end{frame} \begin{frame}{Gyenge vs. erős hash} \begin{columns} \begin{column}{0.48\textwidth} \begin{block}{Gyenge hash} \begin{itemize} \item MD5, SHA1 (elavult) \item Gyors → brute force könnyebb \item Ütközések ismertek \end{itemize} \end{block} \end{column} \begin{column}{0.48\textwidth} \begin{block}{Erős hash} \begin{itemize} \item bcrypt, Argon2, scrypt \item Lassú, konfigurálható \item Salt + work factor támogatás \end{itemize} \end{block} \end{column} \end{columns} \vspace{0.4cm} \begin{alertblock}{Jelszavakhoz} Soha ne használj általános hash-t (MD5, SHA1) jelszavak tárolásához! \end{alertblock} \end{frame} \begin{frame}{Salt és Pepper} \begin{block}{Miért fontos?} \textbf{Salt:} véletlen érték, amit a jelszóhoz adunk hash előtt. \end{block} \begin{itemize} \item Védelem rainbow table ellen \item Minden jelszónál egyedi salt \item Salt-et tárolhatjuk adatbázisban \end{itemize} \begin{exampleblock}{Pepper} Közös titkos kulcs, szerver konfigban tárolva. \end{exampleblock} \end{frame} \begin{frame}{Password hashing algoritmusok} \begin{itemize} \item \textbf{bcrypt} \begin{itemize} \item Beépített salt és work factor \end{itemize} \item \textbf{scrypt} \begin{itemize} \item Memória-igényes → GPU támadások ellen jobb \end{itemize} \item \textbf{Argon2} \begin{itemize} \item Modern szabvány (PHC winner) \item Paraméterezhető (time, memory, parallelism) \end{itemize} \end{itemize} \end{frame} \begin{frame}[fragile,shrink=10]{bcrypt használat (Node.js)} \begin{exampleblock}{Hash készítés} \tiny \begin{verbatim} const bcrypt = require('bcrypt'); const saltRounds = 12; const hashPassword = async (password) => { const salt = await bcrypt.genSalt(saltRounds); return bcrypt.hash(password, salt); }; \end{verbatim} \end{exampleblock} \begin{exampleblock}{Ellenőrzés} \tiny \begin{verbatim} const isValid = await bcrypt.compare(password, storedHash); \end{verbatim} \end{exampleblock} \end{frame} \begin{frame}{Hash-elés felhasználása} \begin{itemize} \item Jelszó tárolás \item Fájl integritás ellenőrzés \item Digitális aláírások \item Cache kulcsok \end{itemize} \begin{alertblock}{Megjegyzés} Authentikációban: jelszó soha ne legyen visszaolvasható. \end{alertblock} \end{frame} \begin{frame}{Hash Best Practices} \begin{itemize} \item Jelszhoz \textbf{bcrypt/Argon2/scrypt} \item Egyedi salt minden jelszóhoz \item Work factor beállítása (pl. bcrypt 10-12) \item Soha ne plain text \item Rate limiting + lockout \end{itemize} \end{frame} \begin{frame}{Összefoglalás - Hash} \begin{itemize} \item Hash = egyirányú lenyomat \item Jelszavakhoz speciális algoritmus kell \item Salt és pepper növeli a biztonságot \item Argon2 a legajánlottabb modern választás \item Hash nem titkosítás! \end{itemize} \vspace{0.5cm} \end{frame}