Sól (kryptografia)

Sól (ang. salt) lub ciąg zaburzający – dane losowe dodawane do hasła podczas obliczania funkcji skrótu przechowywanej w systemach informatycznych. Celem soli jest ochrona systemowej bazy haseł przed atakami słownikowymi. Jako że sól jest przechowywana jawnie, nie ma ona znaczenia względem ataków brute-force. Podobne znaczenie i zastosowanie ma wektor inicjujący.

Przyczyny stosowania

edytuj

Podczas tworzenia skrótów

edytuj

Podczas tworzenia skrótów, które mają być trudne do podrobienia (tzn. trudno ustalić dane, które będą dawały dany skrót), stosuje się sól w celu powiększenia rozmiaru danych będących argumentem funkcji skrótu bez potrzeby rzeczywistego zwiększenia rozmiarów danych. Ma to zastosowanie przy zapisywaniu skrótów np. haseł, gdy nie możemy zmusić użytkowników do wydłużenia hasła.

Podczas sprawdzania skrótu (np. weryfikacji hasła przy logowaniu) należy dodać sól w tym samym miejscu, w którym została dodana podczas tworzenia skrótu (np. przy zakładaniu konta), do którego porównujemy.

Przykład obrony przez zwiększenie liczby kombinacji

edytuj

Załóżmy, że mamy 3-znakowe hasło. Wiedząc, że znaków możliwych do wprowadzenia ze standardowej klawiatury jest 94 (ASCII), obliczmy liczbę prób potrzebnych do złamania tego hasła (zakładając, że jedyną metodą łamania jest brute force):

 

Otrzymujemy względnie niewiele możliwości, około 830 tysięcy (co przy tak krótkim haśle było do przewidzenia). Jednak po dodaniu soli w postaci 32 bitów liczba możliwości powiększy się   razy. Jednakże należy pamiętać, że wzrost liczby możliwości nie dotyczy prób podawania błędnego hasła poprzez standardowy interfejs logowania - atakujący i tak będzie się posługiwał hasłami 3-znakowymi, których liczba nie uległa zmianie. Z kolei dodanie soli zapisanej otwartym tekstem do hasła utrudnia jedynie złamanie pierwszego hasła z bazy, gdyż przy następnych wiadomym jest sposób dodania soli (z przodu hasła, z tyłu, lub jeszcze inaczej), a więc w dalszym ciągu do złamania hasła potrzeba tyle prób, co przy zwykłym haśle 3-znakowym. Niemożliwe jest jednak przygotowanie a priori zestawu zakodowanych haseł (czyli de facto tęczowych tablic).

Przykład obrony przed stosowaniem tęczowych tablic

edytuj

Biorąc pod uwagę, że złodziej haseł może posłużyć się tęczowymi tablicami, możemy powiększyć dane do takiego rozmiaru, przy którym używanie tęczowych tablic przestanie mieć sens. Np. gdy tęczowe tablice nadają się do łamania skrótów, które powstały od danych mających od 1 do 8 bajtów, wystarczy dodać 8 bajtów soli, aby uniemożliwić ich stosowanie. Nawet jeśli złodziej zna sól, nie będzie w stanie jej ominąć.

Przy tym zastosowaniu można za każdym razem generować nową sól i zapisywać ją razem ze skrótem, gdyż jej znajomość przez atakującego nie ma wpływu na bezpieczeństwo.

Podczas szyfrowania odwracalnego

edytuj

Podczas szyfrowania symetrycznego i asymetrycznego sól może być dodawana do klucza. Dzięki temu zwiększa się bezpieczeństwo, ponieważ im dłuższy klucz, tym bezpieczniejszy. Jednak wzrost bezpieczeństwa jest mniejszy niż w przypadku użycia całkowicie losowego klucza o tej długości.

Przykłady

edytuj

Sól 4-bajtowa: a5876558

Sól 8-bajtowa: 8d667324ee9e54d8

Sól 16-bajtowa: 6b5cce5e6f6dfe928d8d774557b4646e

Sól 32-bajtowa: fbc5729abc24bff3caffed44f9ca6f988faae53bcf4fc88b7ee2a483b6a6ebcc