2009-06-18 13 views
5

Czy użytkownicy mogą zażądać, aby ich hasło zostało wysłane pocztą e-mail, jeśli hasło zostanie zapisane jako wartość skrótu?Pobieranie hasła po zapisaniu hasła jako wartości mieszania

Czy istnieje sposób przekonwertowania wartości mieszania na wartość czystego tekstu z odpowiednimi informacjami (& jakich informacji potrzebowałbyś)?

Jeśli użytkownik ma tę samą wartość hash hasła przechowywaną w dwóch witrynach, ich hasło będzie takie samo dla obu witryn?

Odpowiedz

28

Jeśli przechowujesz tylko skrót hasła, to nie. ... i tak powinieneś tylko przechowywać poprawnie posypany hash swojego hasła.

Mechanizmy resetowania hasła są właściwą alternatywą.

+6

+1 za przypomnienie użycia SALT ... –

+1

Zobacz poniżej odpowiedź na prawidłowe użycie soli ... magazynowanie soli pokonuje cel użycia .. – jrista

+11

Celem salt jest pokonanie tablic odnośników, tak aby nie było możliwe zahaczenie dużej liczby prawdopodobnych haseł i poszukiwanie ich wartości skrótu. To nie polega na utrzymywaniu tajemnicy soli. Co więcej, jeśli go nie przechowujesz, w jaki sposób sprawdzasz hasło? –

7

W skrócie, nie. W przypadku większości algorytmów mieszania możesz mieć wiele wejść z tym samym wyjściem. Często lepiej jest zaoferować opcję resetowania hasła.

10

Hashowane hasła nie mogą być pobierane w ogóle (zależy to od funkcji skrótu, nie można pobrać bezpiecznych skrótów). Jeśli mają one ten sam skrót w dwóch witrynach, mogą mieć to samo hasło, to zależy od soli hash używanych przez witryny, jakiej metody itp.

Jeśli twoje hasło jest bezpiecznie przechowywane w dobrym systemie mieszającym, dostawca nigdy nie powinno być w stanie wysłać ci swojego hasła, musisz zresetować hasło, jeśli je zapomnisz.

3

Istnieją różne rodzaje algorytmów mieszania. Niektóre są bardziej bezpieczne niż inne. MD5 jest popularny, ale niezabezpieczony. Rodzina SHA to kolejny bezpieczniejszy zestaw algorytmów.

Z definicji hash jest funkcją jednokierunkową. Nie można go odwrócić.

http://en.wikipedia.org/wiki/Sha-1

+0

Zwykły SHA-1/2 to zły pomysł. Potrzebujesz soli i czegoś, co spowolni spieszanie. PBKDF2, bcrypt, scrypt to standardowe opcje. – CodesInChaos

+0

Zgoda, ja zwykle używam tylko bcrypt w tych dniach, ale tak czy inaczej, pytanie dotyczyło cofnięcia hasza, co jest niemożliwe. (Używanie tablic przeglądowych znanych skrótów nie jest tym samym, co odwracanie wartości skrótu.) –

3

Jeśli nie było w prosty sposób odzyskać hasło zwykłego tekstu, nie byłoby sensu mieszania haseł na początku. W tym momencie możesz równie dobrze bazować na 64 lub ROT13. (nie rób tego!)

Jak wspomniano, użyj innych metod odzyskiwania hasła. Naprawdę nigdy nie ma dobrego powodu, aby mieć dostęp do czystych tekstów.

Jeśli mieszanie w dwóch witrynach jest takie samo, użytkownik najprawdopodobniej ma to samo hasło na obu. Nie jest jednak w 100% gwarantowane, może wystąpić kolizja hash, ale jest to bardzo nieprawdopodobne.

+2

I bardziej prawdopodobne jest, że żadna strona nie dodała soli. –

-1

Ogólną zasadą przechowywania skrótu hasła jest zapewnienie, że hasła są bezpieczne ... nawet dla tych, którzy mają dostęp do bazy danych. Zaufanie nigdy nie jest ukryte. Hash jest algorytmem jednokierunkowym, więc nie ma sposobu na wyprowadzenie oryginalnego hasła z hashcode. Zwykle, gdy użytkownik musi odzyskać swoje hasło, które było przechowywane jako skrót, powinieneś zadać mu tajne pytanie i wysłać do niego pocztą elektroniczną swoje tymczasowe hasło lub wysłać im tymczasowy link, w którym mogą zmienić swoje hasło. Gwarantuje to, że hasło nigdy nie jest przechowywane w czystym tekście i jest bezpieczne od wszystkich ciekawskich oczu, nawet tych, które mogą być uznane za godne zaufania.

+6

"a także magazynowanie soli, to przede wszystkim pokonujesz cel posiadania soli." - to jest niepoprawne. Musisz przechowywać sól, a jeśli nie, nie możesz potwierdzić hasha. Nie ma zagrożenia dla bezpieczeństwa przechowywania soli - tylko tam, aby pokonać ataki wyszukiwania. – frankodwyer

+2

Nie zgadzam się z twoją uwagą, że listwy powinny być natychmiast odrzucone. w twoim przykładzie wymiany haseł, to tak, sól jest jednorazowa i powinna zostać odrzucona. , ale w uwierzytelnianiu użytkownika należy użyć soli na użytkownika i przechowywać ją z hasłem, aby była możliwa do użycia. na przykład, zasalenie hasła przy użyciu nazwy użytkownika zapobiega wstępnie obliczonym atakom słownikowym, ponieważ słownik jest wymagany dla każdego użytkownika. – longneck

+0

Praktycznie większość programistów nie umieszcza soli w bazie danych, ponieważ jeśli ktoś uzyska dostęp do bazy danych i ma skróty, będzie miał również sól. Sole często żyją w kodzie aplikacji. Innym pomysłem jest użycie obliczonych soli, takich jak solenie w oparciu o to, kiedy użytkownik dołączył. – marr75

2

nie ma sposobu, aby odwrócić powszechnie stosowanych skrótów. Mogą być brutalnie (próbują każdego możliwego hasła) lub możesz użyć listy słów (używając listy często używanych haseł) w połączeniu z brutalną siłą, aby przyspieszyć niektóre, ale wciąż jest to proces bardzo powolny i wymagający dużej mocy obliczeniowej.

Najlepszym sposobem, którego używa wiele stron, jest utworzenie przycisku "Resetowanie hasła", w którym podajesz swoją nazwę użytkownika i adres e-mail, a jeśli pasują, wysyła losowe hasło i podaje link do strony logowania i możesz zalogować się za pomocą losowego hasła i zmienić hasło.

0

Aby to zrobić trzeba mieć model z pól:

Hashed_password 
Salt 

A trzeba wiedzieć użytkownikowi metody hash hasła (Tutaj używam SHA1) Następnie można zdefiniować w kontrolerze:

def self.encrypted_password(password, salt) 
    string_to_hash = password + "wibble" + salt 
    Digest::SHA1.hexdigest(string_to_hash) 
end 

Następnie można porównać:

user.Hashed_password == encrypted_password(password, user.salt) 

prawda oznacza tha t "hasło" to hasło dla użytkownika "użytkownik"