Wpis z mikrobloga

Cześć,
Kolejna zagadka z bezpieczeństwa.
Miało być co tydzień, ale wyszło rzadziej. Może po sezonie urlopowym będzie bardziej regularnie.
Zasady są proste:
- co tydzień publikuję nową zagadkę (na grafice)
- odpowiedz w komentarzu
- przed odpowiedzią nie podglądaj odpowiedzi innych (nie czytaj komentarzy)
- po 3 dniach napiszę rozwiązanie

#zagadkibezpieczenstwa #bezpieczenstwo #programowanie #programista15k #security #hasla #zagadka #it
suvroc - Cześć,
Kolejna zagadka z bezpieczeństwa.
Miało być co tydzień, ale wyszło ...

źródło: comment_159714492326uoQ9vI8MfAvBA8zAmBsu.jpg

Pobierz
  • 15
@suvroc: Uwaga odpowiadam. Jedyna słuszna opcja to prośba o ustanowienie nowego hasła poprzez email z unikalnym dla każdego usera linkiem.

Można się bawić w migracje rozciągane w czasie, tzn przez jakiś czas hasła #!$%@? do nowego pola w bazie i po pewnym czasie wysyłasz maila tylko do tych co się przez ten okres nie logowali.

Czyli ogólnie sprowadza się to do odpowiedzi na pytanie jak bezpieczny jest twoja skrzynka email (
@bmLq: Nie jestem ekspertem, ale jeśli zakładamy, że za zmianą algorytmu #!$%@?ącego ma iść lepsze security (trudniejszy do zhackowania) to opcja numer 1 odpada bo zawiera w sobie wady algorytmu nr 1.
Jeśli atakujący wie jaki jest nowy algorytm hashowania to wracamy do poziomu bezpieczeństwa algorytmu nr 1 ( ͡° ͜ʖ ͡°)

Wydaję mi się, że wiedza na temat sposobu hashowania nie powinna wpływać na bezpieczeństwo (wszyscy
@suvroc:
1. Wymuszamy wszystkim ponowne zalogowanie z wpisaniem hasła.
2. przy następnym logowaniu hasło jest hashowane po nowemu po stronie klienta równolegle do starego mechanizmu logowania.
3. Weryfikujemy starą metodą czy hasło jest poprawne i jak tak zapisujemy świeżo wyliczony hash do bazy i ustawiamy flagę żeby dezaktywować temu użytkownikowi logowanie legacy.
4. Jak się wszyscy zmigrują ustawiamy flagę wyłączającą stary hash globalnie.
@suvroc: Jeżeli kontrolujesz kod aplikacji to podczas logowania użytkownika:
1. Weryfikujesz czy używa on starej czy nowej funkcji skrótu.
2. Porównujesz hasło względem nowej lub starej funkcji skrótu (zależnie której użytkownik używa)
3. Jeżeli używa starej funkcji skrótu i hasło jest poprawne zapisujesz nowy skrót.
Na początku do tabeli z hasłami do każdego hasła dopisujesz jakiś znak na początku/na końcu np '_' jako znak że jest to stary hash. Modyfikujesz swoją porównywarkę aby przy sprawdzaniu hasła ze starego algorytmu uwzględniała ten znak.

Na wejściu przy logowaniu sprawdzasz hasło starym a potem nowym algorytmem. Jak stary pasuje to #!$%@? hasło nowym algorytmem i nadpisujesz bazę (już bez specjalnego znaku). Jak stary hash nie działa a nowy tak, to
@suvroc: poszerzam tabelę o kolumnę z miejscem na nowy hasz i wymuszam zmianę hasła użytkowników

Zmiana hasła powoduje stworzenie nowego hasz'a i usunięcie starego.

Funkcja logująca sprawdza, który hasz istnieje i tak sprawdza poprawność hasła.
dodajesz obsługę nowego hasha i starego na raz. Przy "pierwszym" logowaniu sprawdzasz stary hash żeby się zalogował, ale jednocześnie liczysz nowy żeby zapisać go do bazy nową funkcją skrótu.

Po jakimś czasie do nieaktywnych użytkowników wysyłasz jakieś emaile żeby się zalogowali, promocyjne itp. Jak masz spinę to pozostałych zachęcasz do logowania przypominając o terminie wygaśnięcia konta, albo w akcie desperacji blokując konto i prosząc o odzyskanie hasła (ustawienie nowego).
POPRAWNA ODPOWIEDŹ
Możliwości są następujące:
1. Wymusić na wszystkich użytkownikach zmianę hasła poprzez zablokowanie dostępu do kont
2. Przechowywanie 2 hashy haseł: starego i nowego hasha. Następnie przy każdym nowym logowaniu uzupełnianie nowego hasha i kasowanie starego.
Sporo osób znało odpowiedź. Następnym razem muszę wymyślić coś trudniejszego