Przemyślenia architekta IT

Menu
  • Strona główna
  • O mnie
  • Co czytam
  • Czego się uczę
Menu

Bezpieczne przechowywanie haseł – sprawdź czy robisz to dobrze

Posted on 24 stycznia 202524 stycznia 2025 by Tomasz Sokół

Bezpieczne przechowywanie haseł to jeden z fundamentów bezpieczeństwa każdej aplikacji webowej. Mimo że temat może wydawać się dobrze znany, to błędy w implementacji wciąż zdarzają się zaskakująco często. W tym artykule przyjrzymy się bliżej funkcjom skrótu, ich ewolucji oraz aktualnym rekomendacjom OWASP.

Dlaczego algorytmy funkcji skrótu?

Dlaczego używamy funkcji skrótu do przechowywania haseł

Przechowywanie haseł w formie jawnej (tzw. „plain text”) to kardynalny błąd, który może prowadzić do katastrofalnych skutków w przypadku wycieku danych. Funkcje skrótu pozwalają na przekształcenie hasła w unikalny, stałej długości ciąg znaków, którego nie da się łatwo odwrócić. Zastosowanie funkcji skrótu zapewnia:

  • Bezpieczeństwo: Nawet w przypadku wycieku bazy danych, przechowywane skróty są trudniejsze do wykorzystania przez atakujących.
  • Uniwersalność: Funkcje skrótu mogą być używane niezależnie od długości hasła.
  • Efektywność: Operacje na funkcjach skrótu są szybkie i stosunkowo mało zasobożerne.

Jednak nie wszystkie funkcje skrótu nadają się do przechowywania haseł. Kluczowym wymaganiem jest odporność na ataki brute-force i rainbow tables. Dlatego wybór odpowiedniej funkcji skrótu ma krytyczne znaczenie.

Chronologiczny rozwój algorytmów funkcji skrótu

  1. MD5 (1991)
    • Na początku uznawany za szybki i bezpieczny.
    • Już w 1996 roku wykryto pierwsze poważne słabości kryptograficzne.
    • Obecnie MD5 jest uznawany za zbyt słaby i niezalecany do jakichkolwiek zastosowań bezpieczeństwa.
  2. SHA-1 (1995)
    • Przez wiele lat stanowił standard w kryptografii.
    • W 2005 roku odkryto pierwsze podatności.
    • W 2017 roku pokazano praktyczny atak na SHA-1, co ostatecznie wykluczyło ten algorytm z bezpiecznego użycia.
  3. SHA-256 i SHA-3
    • SHA-256 (należy do rodziny SHA-2) został wprowadzony w 2001 roku jako bezpieczniejsza alternatywa dla SHA-1.
    • SHA-3 został ogłoszony w 2015 roku i oferuje dodatkowe mechanizmy ochrony, jednak ze względu na brak znaczących podatności w SHA-256, jest stosowany rzadziej.
  4. Algorytmy dedykowane do haseł
    • W miarę jak zrozumiano, że uniwersalne funkcje skrótu (np. MD5, SHA-1) nie są optymalne dla haseł, zaczęto rozwijać algorytmy takie jak bcrypt, scrypt czy Argon2.

Aktualne rekomendacje OWASP

OWASP (Open Web Application Security Project) jest jednym z najważniejszych źródeł najlepszych praktyk w dziedzinie bezpieczeństwa aplikacji. Według aktualnych rekomendacji, zalecane algorytmy do przechowywania haseł to:

Argon2

  • Wybrany jako zwycięzca konkursu Password Hashing Competition (PHC) w 2015 roku.
  • Posiada trzy warianty: Argon2d (odporny na ataki GPU), Argon2i (odporny na ataki side-channel) i Argon2id (hybryda obu).
  • Jest aktualnie uznawany za najbezpieczniejszy algorytm do przechowywania haseł.

scrypt

  • Wprowadzony w 2009 roku, zaprojektowany tak, aby było kosztowne nie tylko obliczeniowo, ale także pamięciowo.
  • Dzięki temu trudniej go zaimplementować w układach ASIC, co utrudnia ataki brute-force.
  • Według OWASP powinien być drugim wyborem, tylko jeśli z Argon2 nie może być użyty z przyczyn od nas niezależnych

bcrypt

  • Powstał w 1999 roku i od tego czasu jest szeroko stosowany.
  • Wykorzystuje adaptacyjną funkcję skrótu, co oznacza, że można regulować jego koszt obliczeniowy.
  • Według OWASP nadal dopuszczalny w systemach legacy
  • Nie powinien być wybierany dla nowych systemów

Dobre praktyki

  • Używaj soli (salt): Każde hasło powinno być hashowane z unikalnym losowym salt, aby zapobiec atakom rainbow tables.
  • Ustaw odpowiedni koszt obliczeniowy: Zarówno bcrypt, scrypt, jak i Argon2 pozwalają na regulację kosztu obliczeniowego. Powinien on być na tyle wysoki, aby utrudnić ataki brute-force, ale jednocześnie akceptowalny dla użytkownika.
  • Regularnie aktualizuj algorytm: Monitoruj rekomendacje OWASP i w miarę potrzeby migruj na bezpieczniejsze algorytmy.

Bezpieczne przechowywanie haseł to nie tylko wybór odpowiedniego algorytmu, ale także jego prawidłowa implementacja. Stosuj się do najlepszych praktyk i unikaj skrótów, które mogą narazić Twoją aplikację na poważne ryzyko.

Jeśli podobają Ci się treści na moim blogu zostaw swój email. Będę Cię informował o nowych artykułach. Zero spamu same konkrety.

* pola wymagane

Chcesz dostawać powiadomienia o nowych artykułach? Zostaw swój email.

Ostatnie wpisy

  • Bezpieczne przechowywanie haseł – Argon2id i jego implementacja w Spring
  • Bezpieczne przechowywanie haseł – sprawdź czy robisz to dobrze
  • Wzorzec Post/Redirect/Get plus twierdzenie CAP jako recepta na problem
  • 7 kroków do przejęcia systemu od innego dostawcy
  • Młody programisto! 7 porad od starszego kolegi

Kategorie

  • Architektura
  • Procesy
  • Web security
  • Zespół
Polityka prywatności
©2025 Przemyślenia architekta IT | WordPress Theme by SuperbThemes
Serwis wykorzystuje pliki cookies. Korzystając ze strony wyrażasz zgodę na wykorzystywanie plików cookies.Tak. Zgadzam się Reject Dowiedz się
Privacy & Cookies Policy

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.
Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these cookies, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may have an effect on your browsing experience.

Necessary Always Enabled

Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.

Non-necessary

Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.