Istnieje wiele witryn w Internecie, które wymagają danych logowania, a jedynym sposobem ochrony przed ponownym użyciem hasła jest „obietnica”, że hasła są mieszane na serwerze, co nie zawsze jest prawdziwe.
Zastanawiam się więc, jak trudno jest stworzyć stronę internetową, która haszy hasła na komputerze klienckim (z Javascriptem), zanim wyśle je na serwer, gdzie zostaną ponownie zakodowane? Teoretycznie nie daje to żadnego dodatkowego bezpieczeństwa, ale w praktyce można to wykorzystać do ochrony przed „nieuczciwymi witrynami”, które nie mieszają hasła na serwerze.
javascript
security
client-relations
hashing
client-side
Martín Fixman
źródło
źródło
clear
, jest to w tym momencie matematyczna masturbacja. Musiałem naprawić odziedziczony przeze mnie system, który został zaprojektowany dokładnie tak, jak Ty i OP, ciągle go hakują nastolatkowie z Wireshark. Zablokowaliśmy go tylko wtedy, gdy wprowadziliśmyREAL
szyfrowanie oraz zaszyfrowaliśmy i podpisaliśmy wszystkie ładunki do i z serwera, manipulacja kontem zatrzymała się i nigdy więcej się nie powtórzyła.Odpowiedzi:
Dlaczego nie jest używany? Ponieważ jest to dużo dodatkowej pracy dla zerowego wzmocnienia. Taki system nie byłby bardziej bezpieczny. Może być nawet mniej bezpieczny, ponieważ daje fałszywe wrażenie, że jest bardziej bezpieczny, co prowadzi użytkowników do stosowania mniej bezpiecznych praktyk (takich jak ponowne użycie hasła, hasła do słownika itp.).
źródło
Jak dokładnie to chroni? Wygląda na to, że wszystko, co chcesz zrobić, to haszować hashowane hasło, które jest w pewnym sensie bezcelowe. Ponieważ zaszyfrowane hasło stanie się wówczas hasłem.
Co powiesz na nieużywanie tego samego hasła do więcej niż jednej witryny? Powodem, dla którego witryny haszują hasło w teorii, jest uniemożliwienie dostępu do konta, jeśli zostaną one naruszone. Używanie tego samego hasła do wielu stron jest po prostu głupie.
Jeśli używałeś javascript, wszystko, co „haker” musiałby zrobić, to użyć tej samej metody na hash-hashed-passwords. Po uzyskaniu informacji o haszowaniu obliczenie hasła-> tego samego skrótu w bazie danych zajmuje tylko chwilę, co jest czynnikiem uniemożliwiającym dostęp do konta.
źródło
Ponieważ niewiele by to dodało do żadnej wartości. Przyczyną haszowania jest to, że jeśli baza danych zostanie zhakowana, haker nie będzie miał listy prawidłowych haseł, a jedynie hasze. Dlatego nie mogli podszywać się pod żadnego użytkownika. Twój system nie zna hasła.
Bezpieczne pochodzi z certyfikatów SSL oraz pewnej formy uwierzytelnienia. Chcę, aby moi użytkownicy podali hasło, dzięki czemu mogę obliczyć z niego skrót.
Ponadto algorytm mieszający znajduje się na serwerze w bezpieczniejszym obszarze. Umieszczając go na kliencie, dość łatwo jest uzyskać kod źródłowy dla Javascript, nawet jeśli jest to ukryty plik skryptów z odnośnikami.
źródło
Rozwiązanie jest prostsze niż to. Certyfikaty klienta. Tworzę certyfikat klienta na moim komputerze. Kiedy rejestruję się na stronie internetowej, uzgadniamy z wykorzystaniem mojego certyfikatu klienta i certyfikatu serwera.
Żadne hasła nie są wymieniane, a nawet jeśli ktoś włamie się do bazy danych, będzie miał tylko klucz publiczny mojego certyfikatu klienta (który powinien zostać zasolony i zaszyfrowany przez serwer, aby zwiększyć poziom bezpieczeństwa).
Certyfikat klienta może być przechowywany na karcie inteligentnej (i przesyłany do bezpiecznego skarbca online za pomocą hasła głównego).
Piękno tego wszystkiego polega na tym, że usuwa się pojęcie phishingu ... nigdy nie wpisujesz hasła do strony internetowej, po prostu uzgadniasz tę stronę. Otrzymują tylko Twój klucz publiczny, który jest bezużyteczny bez klucza prywatnego. Jedyną podatnością jest znalezienie kolizji podczas uzgadniania, co zadziałałoby tylko raz na jednej stronie internetowej.
Microsoft próbował dostarczyć coś takiego w systemie Windows za pomocą Cardspace, a później podał go jako otwarty standard. OAuth jest nieco podobny, ale opiera się na pośredniczącej „stronie wydającej”. Z drugiej strony karty informacyjne mogą być wydawane samodzielnie. To jest prawdziwe rozwiązanie problemu z hasłem ... całkowite usunięcie hasła.
OAuth jest jednak krokiem we właściwym kierunku.
źródło
wydaje się, że większość odpowiedzi całkowicie pomija punkt haszowania hasła po stronie klienta.
chodzi o to, aby nie zabezpieczyć dostępu do serwera, na który się logujesz, ponieważ przechwycenie skrótu nie jest bardziej bezpieczne niż przechwycenie hasła w postaci zwykłego tekstu.
chodzi o to, aby zabezpieczyć hasło użytkownika , które jest zwykle o wiele cenniejsze niż dostęp do indywidualnej strony logowania, ponieważ większość użytkowników ponownie użyje hasła do wielu witryn (nie powinni, ale w rzeczywistości to robią, więc nie należy ich wymachiwać) ).
ssl doskonale nadaje się do ochrony przed atakami mitm, ale jeśli aplikacja logowania zostanie przejęta na serwerze, ssl nie ochroni twoich użytkowników. jeśli ktoś złośliwie uzyska dostęp do serwera WWW, prawdopodobnie będzie w stanie przechwycić hasła w postaci zwykłego tekstu, ponieważ w większości przypadków hasła są mieszane tylko przez skrypt na serwerze. wtedy atakujący może wypróbować te hasła w innych (zwykle bardziej wartościowych) witrynach przy użyciu podobnych nazw użytkowników.
bezpieczeństwo to głęboka obrona, a haszowanie po stronie klienta po prostu dodaje kolejną warstwę. pamiętaj, że chociaż ochrona dostępu do własnej witryny jest ważna, ochrona poufności haseł użytkowników jest znacznie ważniejsza ze względu na ponowne użycie hasła w innych witrynach.
źródło
Jest to zdecydowanie możliwe, a właściwie nie trzeba czekać na stronę internetową.
Spójrz na SuperGenPass . To jest bookmarklet.
Po prostu rozpoznaje pola haseł, łączy to, co wpisujesz z domeną witryny, haszuje je, modyfikuje w taki sposób, aby uzyskać tylko „dozwolone” znaki w haśle, i dopiero wtedy twoje hashowane hasło jest wysyłane przewodowo.
Korzystając z domeny witryny w tym procesie, otrzymujesz unikalne hasło dla każdej witryny, nawet jeśli zawsze użyjesz tego samego hasła.
Nie jest to bardzo bezpieczne (base64-MD5), ale jeśli chcesz, doskonale rozpowszechniasz implementację opartą na sha-2.
Jedynym minusem jest zmiana domeny. W takim przypadku musisz poprosić witrynę o zresetowanie hasła, ponieważ nie będziesz w stanie samodzielnie go odzyskać ... jednak nie zdarza się to często, więc uważam to za akceptowalny kompromis.
źródło
password
i / lub SHA-256password
z jakąś solą znaną klientowi, mężczyzna w środku załącznika może go przechwycić.Podoba mi się odpowiedź X4u, ale moim zdaniem coś takiego powinno być zintegrowane ze specyfikacją przeglądarki / HTML - ponieważ w tej chwili jest to tylko połowa odpowiedzi.
Oto problem, który mam jako użytkownik - nie mam pojęcia, czy moje hasło zostanie zaszyfrowane na drugim końcu, gdy będzie przechowywane w bazie danych. Linie między mną a serwerem mogą być zaszyfrowane, ale nie mam pojęcia, co stanie się z moim hasłem, gdy dotrze do miejsca docelowego - może być zapisane jako zwykły tekst. Administrator bazy danych może sprzedać bazę danych i zanim się zorientujesz, cały świat zna twoje hasło.
Większość użytkowników ponownie wykorzystuje hasła. Ludzie nietechniczni, ponieważ nie wiedzą nic lepszego. Techniczni ludzie, ponieważ po dotarciu do 15. hasła większość osób nie ma szans na ich zapamiętanie, chyba że je zanotuje (co wszyscy wiemy, że to zły pomysł).
Jeśli Chrome, IE lub cokolwiek, z czego korzystam, może powiedzieć mi, że pole hasła zostanie natychmiast zakodowane po stronie klienta przy użyciu soli wygenerowanej przez serwer i skutecznie piaskownicy samego hasła - to wiedziałbym, że jako użytkownik mógłbym ponownie użyć hasło o mniejszym ryzyku. Nadal chciałbym zaszyfrowanych kanałów, a także nie chcę, aby podczas transmisji dochodziło do opadania okapów.
Użytkownik musi wiedzieć, że jego hasło nie jest nawet dostępne do wysłania na serwer - tylko skrót. Obecnie nawet korzystając z rozwiązania X4U, nie mają możliwości dowiedzenia się, że tak jest, ponieważ nie wiadomo, czy ta technologia jest używana.
źródło
Myślę, że jest to dobra metoda do użycia podczas budowania czegoś takiego jak framework, CMS, oprogramowanie forum itp., Gdzie nie kontrolujesz serwerów, na których może być zainstalowany. Oznacza to, że TAK, zawsze powinieneś zalecać używanie SSL do logowania i aktywności w logowaniu, ale niektóre strony używające twojego frameworka / cms nie będą go miały, więc nadal mogą z tego skorzystać.
Jak zauważyli inni, korzyścią tutaj jest NIE to, że atak MITM nie mógł pozwolić komuś innemu na zalogowanie się do tej konkretnej witryny tak jak Ty, ale raczej, że atakujący nie byłby wtedy w stanie użyć tej samej kombinacji nazwy użytkownika / hasła, aby zaloguj się na dziesiątki innych witryn, na których możesz mieć konta.
Taki schemat powinien zawierać sól losową lub kombinację soli specyficznych dla witryny i nazwy użytkownika, aby ktoś, kto uzyska hasło, nie mógł użyć go dla tej samej nazwy użytkownika w innych witrynach (nawet w witrynach korzystających z tego samego schematu mieszania ) ani przeciwko innym użytkownikom witryny, którzy mogą mieć to samo hasło.
Inni sugerują, że użytkownicy powinni tworzyć unikalne hasła dla każdej używanej witryny lub używać menedżerów haseł. Chociaż teoretycznie jest to dobra rada, wszyscy wiemy, że w prawdziwym świecie można polegać na szaleństwach. Odsetek użytkowników, którzy robią jedną z tych rzeczy, jest niewielki i wątpię, aby to się zmieniło w najbliższym czasie.
Tak więc program do zamykania haseł javascript jest co najmniej tym, co programista frameworku / cms może zrobić, aby ograniczyć szkody osób przechwytujących hasła w transporcie (co obecnie jest łatwe w sieciach Wi-Fi), jeśli zarówno właściciel witryny, jak i użytkownicy końcowi są zaniedbywani o bezpieczeństwie (którym prawdopodobnie są).
źródło