Modyfikacja pola hashed-text związana z soleniem haseł

Zacząłem mieć wątpliwości dotyczące tego pola, bo jego nazwa sugeruje, że można też w nim przechowywać hasze, które nie muszą być kryptograficznie zabezpieczone, we sensie, że to po prostu jest jakieś sha1, md5 itd.

Obecnie jest tak, że niezależnie od intencji developera, wartość jest przepuszczana przez PBKDF2, który jest powolny by design, a takie spowolnienie nie zawsze jest potrzebne. W związku z tym sugerowałbym przy okazji T936 nad którym pracuję dać możliwość przekazania jakiegoś parametru, który decyduje czy hash ma być secure czy nie.

Dodatkowo warto rozważyć przechowywanie w bazie danych parametrów haszowania wraz z haszem, bo to daje nam elastyczność aktualizacji funkcji haszującej i jej parametrów w dowolnym momencie.

Brzmi sensownie? Jakieś inne pomysły?

1 Like

Myślę, że najsensowniej będzie zmienić nazwę pola na “password” i zawsze używać PBKDF2 :slight_smile:

@Michal czy są jakieś przeciwwskazania do trzymania informacji o tym, jaka funkcja haszująca została użyta (oraz innych parametrów haszowania poza solą) przy danym haśle?

To też jest dobre rozwiązanie. Tak zrobię.

Nie jestem tutaj takim fachowcem jak @Michal, natomiast intuicja mi podpowiada, że nie powinno być to przeciwskazaniem (security through obscurity).

1 Like

Krótko: Nie.
Dłużej: Trochę, ale olać to!
Jeszcze dłużej: Tak. Bo utajnianie parametrów zwiększa siłę systemu, zupełnie tak jak przedłużenie klucza, przy założeniu, że atakujący tych parametrów nie odkryje, a taki scenariusz, choć mało prawdopodobny, można sobie jednak wyobrazić. Obscurity w istocie zwiększa security (a powiedzenie “security through obscurity” ma sugerować, że security jest osiągane tylko dzięki obscurity i trwa jedynie póki obscurity zostaje zachowane) ale w tym przypadku prawdziwe bezpieczeństwo leży gdzie indziej, więc się nie należy przejmować. To długie tłumaczenie zostaje tu w ogóle udzielone tylko dlatego, że, po pierwsze, interpretuję pytanie literalnie (no co - przeciwwskazania istnieją…), a po drugie, z racji profesji, czuję niezwykłą odpowiedzialność za słowa (i radość, że się mogę do czegoś przydać nawet takim wymiataczom). W praktyce należy kierować się odpowiedzią krótką.

Nie widzę T936 - czy tam trzeba jakieś konto i prawa dostępu?

@piotr-ptaszynski Zwracam uwagę, że PBKDF2 ma powolność (liczbę iteracji) zadaną przez użytkownika. Jestem zdecydowanie przeciwny dawaniu deweloperowi możliwości wyłączenia bezpieczeństwa w ogóle, bo deweloperzy są głupi i należy ich trzymać krótko praktyka wykazuje, że dawanie takich opcji powoduje potem płacz i zgrzytanie zębów, a kombinacja “możliwe późniejsze wspieranie różnych opcji” i “jedna z opcji to brak bezpieczeństwa” jest szczególnie groźna i wiele protokołów się na tym przejechało - ten przykład jest szczególnie śmieszny (tak, wiem że przechowywanie skrótów to zupełnie coś innego).

(Edit: dlaczego ten przykład jest dla mnie szczególnie śmieszny, bo to może nie być od razu oczywiste - negocjacja uwierzytelniania w niektórych implementacjach VNC przebiegała mniej więcej tak:
Klient: chciałbym się połączyć.
Serwer: nie ma sprawy, wspieram następujące metody uwierzytelniania: kryptografia kwantowa, kryptografia nie do złamania, uwierzytelnianie wieloskładnikowe, no i ostatecznie zwykłe hasło.
Klient: to ja z tych opcji wybieram “brak uwierzytelnienia”.
Serwer: spoko, wchodź!)

4 Likes

Dzieki za szczegółową odpowiedź!

Life goal achieved: być nazwanymi “wymiataczami” przez @Michal :smiley:

O ile ten task całkowicie może być publiczny (właśnie go opubliczniłem), o tyle domyślnym ustawieniem widoczności obiektów w Sealhubie jest udostępnianie ich tylko zalogowanym użytkownikom z określonej grupy. Załóż konto na Sealhubie i daj mi znać, dodam Cię tak, abyś widział wszystko :slight_smile: