Natknąłem się na dyskusję, w której dowiedziałem się, że to, co robię, nie jest w rzeczywistości soleniem haseł, ale ich pieprzeniem, i od tego czasu zacząłem robić obie funkcje takie jak:
hash_function($salt.hash_function($pepper.$password)) [multiple iterations]
Ignorując wybrany algorytm skrótu (chcę, aby było to omówienie soli i papryki, a nie konkretnych algorytmów, ale używam bezpiecznego), czy jest to bezpieczna opcja, czy powinienem robić coś innego? Dla osób niezaznajomionych z terminami:
Sól jest losowo wygenerowaną wartość zwykle przechowywane z napisu w bazie zaprojektowany tak, by nie dało się korzystać tabele mieszania do łamania haseł. Ponieważ każde hasło ma swoją własną sól, wszystkie muszą być brutalnie wymuszone indywidualnie, aby je złamać; Jednak ponieważ sól jest przechowywana w bazie danych wraz ze skrótem hasła, naruszenie bezpieczeństwa bazy danych oznacza utratę obu.
Pieprz jest wartością statyczną całej witrynie przechowywane oddzielnie od bazy (zwykle zakodowane w kodzie źródłowym aplikacji), które ma być tajne. Jest używany po to, aby włamanie do bazy danych nie spowodowało, że cała tabela haseł aplikacji była brutalnie wymuszona.
Czy jest coś, czego mi brakuje i czy podlewanie i pieprzanie moich haseł jest najlepszą opcją ochrony bezpieczeństwa mojego użytkownika? Czy istnieje potencjalna luka w zabezpieczeniach, aby zrobić to w ten sposób?
Uwaga: Załóżmy na potrzeby dyskusji, że aplikacja i baza danych są przechowywane na oddzielnych komputerach, nie udostępniaj haseł itp., Więc naruszenie serwera bazy danych nie oznacza automatycznie naruszenia serwera aplikacji.