W pracy mamy dwie konkurencyjne teorie dotyczące soli. Produkty, nad którymi pracuję, używają czegoś takiego jak nazwa użytkownika lub numer telefonu, aby posolić hash. Zasadniczo coś, co jest różne dla każdego użytkownika, ale jest dla nas łatwo dostępne. Drugi produkt losowo generuje sól dla każdego użytkownika i zmienia się za każdym razem, gdy użytkownik zmienia hasło. Sól jest następnie szyfrowana w bazie danych.
Moje pytanie brzmi, czy drugie podejście jest naprawdę konieczne? Rozumiem z czysto teoretycznej perspektywy, że jest to bezpieczniejsze niż pierwsze podejście, ale z praktycznego punktu widzenia. W tej chwili, aby uwierzytelnić użytkownika, sól musi być niezaszyfrowana i zastosowana do informacji logowania.
Po przemyśleniu tego po prostu nie widzę rzeczywistego zwiększenia bezpieczeństwa w wyniku takiego podejścia. Zmiana typu „sól” z konta na konto nadal bardzo utrudnia komuś próbę brutalnego wymuszenia algorytmu mieszającego, nawet jeśli osoba atakująca była świadoma, jak szybko określić, co to było dla każdego konta. Odbywa się to przy założeniu, że hasła są wystarczająco silne. (Oczywiście znalezienie poprawnego skrótu dla zestawu haseł, w którym wszystkie mają dwie cyfry, jest znacznie łatwiejsze niż znalezienie prawidłowego skrótu haseł składających się z 8 cyfr). Czy moja logika jest niepoprawna, czy jest coś, czego mi brakuje?
EDYCJA: OK, więc oto powód, dla którego myślę, że szyfrowanie soli jest naprawdę dyskusyjne. (daj mi znać, czy jestem na dobrej drodze).
W poniższym wyjaśnieniu zakładamy, że hasła mają zawsze 8 znaków, a sól to 5, a wszystkie hasła składają się z małych liter (to po prostu ułatwia obliczenia).
Posiadanie innej soli dla każdego wpisu oznacza, że nie mogę używać tego samego stołu tęczowego (właściwie technicznie bym mógł, gdybym miał jeden o wystarczającej wielkości, ale na razie zignorujmy to). To jest prawdziwy klucz do soli z tego, co rozumiem, ponieważ aby złamać każde konto, muszę wymyślić koło na nowo dla każdego. Teraz, jeśli wiem, jak zastosować poprawną sól do hasła, aby wygenerować hash, zrobiłbym to, ponieważ sól tak naprawdę zwiększa długość / złożoność zahaszowanej frazy. Więc ograniczyłbym liczbę możliwych kombinacji, które musiałbym wygenerować, aby "wiedzieć" Mam hasło + sól z 13 ^ 26 do 8 ^ 26, ponieważ wiem, co to jest sól. Teraz jest to łatwiejsze, ale nadal bardzo trudne.
A więc do zaszyfrowania soli. Gdybym wiedział, że sól jest zaszyfrowana, nie próbowałbym jej najpierw odszyfrować (zakładając, że wiem, że ma wystarczający poziom szyfrowania). Zignorowałbym to. Zamiast zastanawiać się, jak to odszyfrować, wracając do poprzedniego przykładu, wygenerowałbym po prostu większą tęczową tabelę zawierającą wszystkie klucze dla 13 ^ 26. Brak znajomości soli na pewno by mnie spowolnił, ale nie sądzę, że dodałoby to monumentalne zadanie polegające na próbie złamania najpierw szyfrowania soli. Dlatego uważam, że nie warto. Myśli?
Oto link opisujący, jak długo hasła będą przechowywane podczas ataku siłowego: http://www.lockdown.co.uk/?pg=combi