2013-07-09 13 views
6

Zajmuję się wykonywaniem uwierzytelniania w naszej aplikacji sieciowej .Net MVC 4 i uderzyłem w hasło dotyczące haszowania hasła, przechowywania i uwierzytelniania.Gdzie przechowywać sól do haseł i jak ją zdobyć?

Planuje się obecnie korzystać z 2 soli, 1 dynamicznego (na użytkownika) i 1 statycznego (stała aplikacja internetowa) i silnej funkcji mieszania.

Biorąc pod uwagę prostą tabelę użytkownika, który zawiera nazwę użytkownika i hasło:

  • wolno przechowywać na sól użytkownika w kolumnie w tabeli użytkownika?

Moje zmartwienia polegają na tym, że będę musiał pobrać użytkownika z bazy danych w pamięci aplikacji internetowych z jego nazwą użytkownika. Czy jest jakiś atak, w którym może to być problematyczne? Idealnie chciałbym mieć to jeden krok/jedno uwierzytelnienie żądania SQL.

Czy martwię się za dużo? Czy istnieje alternatywa dla soli "Na użytkownika", w której wciąż mogę wykonać uwierzytelnianie w jednym kroku?

+0

też podobieństwo: http://stackoverflow.com/questions/1219899/where-do-you-store-your-salt-strings – user956584

Odpowiedz

3

Sól można przechowywać razem z hasłem-hash, dzięki czemu można utworzyć sól na hasło zamiast na użytkownika. Jest to powszechna praktyka w przypadku funkcji mieszania haseł (funkcja powolnego wyprowadzania kluczowego, np. BCrypt lub PBKDF2), aby zwracać tekst jawny jako część hash hash, co oznacza, że ​​można przechowywać sól i hash razem w jednym polu bazy danych.

Aby zweryfikować wprowadzone hasło, należy najpierw wyszukać hasło-hash (za pomocą nazwy użytkownika lub adresu e-mail), a następnie funkcja może wyodrębnić użytą sól z zapisanego hasła-hash i użyć go do porównania wartości skrótu . To powinno właściwie odpowiedzieć na twoje pytanie, bazy danych zwykle nie mają odpowiednich funkcji do haszowania haseł, więc nie możesz wykonać weryfikacji w zapytaniu SQL, weryfikacja zostanie wykonana w kodzie.

Druga sól jest w rzeczywistości nazywana pieprzem, najlepszym sposobem dodania tego sekretu po stronie serwera jest zaszyfrowanie już zakodowanego hasła za pomocą tego tajnego klucza. W przeciwieństwie do skrótu, będzie to dwukierunkowe szyfrowanie, które pozwala na wymianę klucza, jeśli to konieczne.

+0

dzięki. Użyłem biblioteki SimpleCrypto.Net do metod mieszania PBKDF2. Będę dalej zaglądać do papryki. – Alexandre

1

Nie potrzebujesz do tego zewnętrznej biblioteki. Struktura ma wbudowaną implementację PBKDF2. Wolę przechowywanie soli w oddzielnym polu w bazie danych, ale to chyba tylko kwestia gustu. pisałem moje myśli o hasło mieszaja here

Powiązane problemy