Niekompetencja: długość hasła

2014-04-23

„Hasło: wartość jest dłuższa niż dopuszczalne 10 znaków”. Nie pierwszy raz widzę podobny komunikat. Zastanówmy się jakie mogą być techniczne powody ograniczenia długości hasła:

  • Transmisja danych przez sieć: czy dodatkowe kilkadziesiąt znaków zrobi różnicę?
  • Przetwarzanie haseł w pamięci: czy dodatkowe kilkadziesiąt bajtów w RAM zrobi różnicę?
  • Przechowywanie haseł w bazie (na dysku): tu (mam nadzieję?) i tak nie są trzymane same hasła, więc zajmowane miejsce jest takie samo dla każdego hasła, niezależnie od ilości znaków.
  • Obliczanie funkcji KDF (lub skrótu) z haseł: czy naprawdę kilkadziesiąt dodatkowych znaków zrobi różnicę?

Nie ma żadnego racjonalnego powodu dla narzucania takich ograniczeń na długość hasła. Tego typu limity są wynikiem czyjejś bezmyślności: ot, łatwiej było wpisać wyssaną z palca liczbę (10 znaków), niż zastanowić się jak to ograniczenie faktycznie powinno wyglądać.

Czasy, gdy pojedynczy człowiek używał tylko kilku serwisów w sieci i był w stanie pamiętać hasła do nich, już dawno minęły. Teraz każdy albo używa tego samego hasła w wielu serwisach (błąd), albo używa narzędzi zarządzających hasłami. Mój 1Password pamięta 717 loginów — niemal wszystkie hasła mam automatycznie generowane. Długość generowanego hasła ustawia się suwakiem: chciałbym nie schodzić poniżej 16 znaków, a najchętniej wszędzie mieć 30.

Następnym więc razem gdy przyjdzie pora na zaprogramowanie limitu długości hasła, wpisz drogi Programisto taki limit, jaki faktycznie ma sens, żeby np. uniknąć możliwości ataków typu denial-of-service. Sto znaków, 255 znaków, 1024 znaki — wiele wartości może mieć tu sens. Na pewno jednak nie 10.