Najlepsze praktyki: solenie i pieprzenie haseł?

Natknąłem się na dyskusję, w której dowiedziałem się, że to, co robiłem, nie było 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ę, żeby była to dyskusja na temat 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:

A Sól to losowo generowana wartość zwykle przechowywana z łańcuchem w bazie danych, która uniemożliwia użycie tablic mieszających do łamania haseł. Ponieważ każde hasło ma własną sól, wszystkie muszą być brutalnie wymuszane indywidualnie, aby je złamać; jednak, ponieważ sól jest przechowywana w bazie danych z hashem hash, kompromis bazy danych oznacza utratę obu.

A pieprz to statyczna wartość całej witryny przechowywana oddzielnie od bazy danych (zwykle zapisana w kodzie źródłowym aplikacji), która ma być tajna. Jest on używany, aby kompromis bazy danych nie powodował, że tabela haseł całej aplikacji była brutalnie wymuszalna.

Czy brakuje mi czegoś i czy solenie i wklejanie haseł jest najlepszym sposobem ochrony bezpieczeństwa mojego użytkownika? Czy istnieje potencjalna luka w zabezpieczeniach, aby zrobić to w ten sposób?

Uwaga: Załóżmy, że dla celów dyskusji aplikacja i baza danych są przechowywane na osobnych komputerach, nie udostępniają haseł itp., Więc naruszenie serwera bazy danych nie oznacza automatycznie naruszenia serwera aplikacji.

questionAnswers(4)

yourAnswerToTheQuestion