153 lines
4.1 KiB
TeX
153 lines
4.1 KiB
TeX
\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} |