SPRING + MySQL szyfrowane hasła

SPRING + MySQL szyfrowane hasła
W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
1

Hej, póki co przechowuję jawnie hasła użytkowników w swojej bazie danych, chciałabym to zmienić. (restowe API)
Do zalogowania w URL przesyłam całe niezaszyfrowane hasło i trochę słabo to wygląda.
Jakim szyfrowaniem powinnam się zainteresować ? A może spring ma już coś wbudowanego ?
Co jest aktualnie najlepsze/najpopularniejsze ? Prosze o nakierowanie :)

edytowany 1x, ostatnio: wioletta90
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
2

"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

W tym linku pokazane jest, jak otrzymane jawne hasło zapisać do bazy danych zahashowane. Ale gdy hashowanie mam już po stronie klienta(aplikacja mobilna), to mogę przy rejestracji bezpośrednio wysłać do bazy danych ten hash od klienta jako string ?
A później przy logowaniu wysyłac w URL ten hash ? W takim razie passwordEncoder nie jest potrzebny ? Czegoś tu nie rozumiem.

masterO
Jezeli bys tak wyslala bez HTTPS juz zahasowane haslo to dalbys wszystkim mozliwosc go przechwycenai i probe odkodowania metoda brute force. Tak nie powinno sie robic. Poza tym jak zmienisz hash z MD5 na BCrypt muisalbys zmienic w kazdej aplikacji a nie kazdy zrobi update i ten co nie zrobi nie zaloguje sie
KK
  • Rejestracja:prawie 17 lat
  • Ostatnio:16 dni
1

Ja bym tak nie robil. Po co klient ma widzieć w jaki sposób hashujesz hasło? Lepiej hashować po stronie serwera. Przesyłać do backendu możesz otwartym tekstem, ale tylko i wyłącznie po httpsie.


masterO
Racja tak powinno być mimo , ze nie w sumie ma znaczenia czy klient wie czy nie i tak nie zrobisz bruteforce jeśli haslo bedzie odpwoiednio długie
masterO
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 5 lat
  • Postów:1025
1

Trzeba odróżnić hashowanie od szyfrowania. Zatem tak. Hasło z aplikacji przesyłasz szyfrowane SSL (HTTPS) Szyfrowanie oznacza, że możesz je odszyfrować czyli cały Request z aplikacji jest szyfrowany i twoje API dostaje czysty text już odszyfrowany. Wtedy dopiero używasz HASHOWANIA wbudowanej funkcji w MYSQL np md5() czy tam MD6 czy BCrypte. Nie ma znaczenia czego użyjesz

edytowany 1x, ostatnio: masterO
Zobacz pozostały 1 komentarz
masterO
Moze u ciebie bo u mnie dziala :D
Burdzi0
Korzystanie z MD5 nie jest wskazane, jak wyciekną hashe haseł to za pomocą kolizji bez problemu ktoś przejmie konta. https://www.quora.com/Is-it-true-that-md5-isnt-safe-enough-for-web-applications
masterO
ok 2334E175322D4DA54FA084C37C8BDDBD masz i rozkoduj :D
Burdzi0
@masterO: fpi5d00, dokładnie to co wyżej
W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

a później przy logowaniu tez wysyłam niezahashowane i serwer sobie sam poradzi z odhashowaniem ?

KK
Tak jak pisał @masterO wyżej, musisz odróżnić hashowanie od szyfrowania. Zaszyfrowane dane można odszyfrować. Nie ma natomiast czegoś takiego jak odhashowanie. Trzymasz hash hasła użytkownika, potem pobierasz wpisane przez niego hasło, hashujesz tak samo i porównujesz te hashe.
masterO
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 5 lat
  • Postów:1025
1

Przy Logowaniu wysyłasz tak samo tylko szyfrujesz HTTPS i do api wpada czysty text. dopiero serwer robi

Kopiuj
IF ( md5(haslo_z_aplikacji_logowania) == haslo_wyciagniete_z_bazy_ktore_jest_juz_zahaszowane) {
    oba sa rowne mozna sie logowac
} else {
    hasla sie roznia wywal klienta
}

Dlatego niektore aplikacje jak robimy lokalnie musza miec wylaczone przesylanie HTTPS poniewaz domyslnei sa wlaczone a jesli nie masz certyfikatu na lokalnym kompie to aplikacja sie nie polaczy z twoim lokalnym serverm

edytowany 3x, ostatnio: masterO
W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
0

Ciekawe co piszecie, brałam udział póki co w 3 projektach i w każdym było kodowane i odkodowywane po stronie aplikacji mobilnej, ale za każdym razem przychodziłam na gotowe i nie było już osób za to odpowiedzialnych żeby zapytać dlaczego własnie tak to wygląda.

KK
Mam nadzieję, że nie korzystam z tej aplikacji i nie zna ona mojego hasła :)
masterO
Kojot czasem lepiej nie wiedziec . XD
W9
jest duża szansa :) 2 mln unikalnych polskich kont, zmieniajcie hasła :)
masterO
Wietto prosze nas nie straszyc xD
masterO
  • Rejestracja:ponad 18 lat
  • Ostatnio:ponad 5 lat
  • Postów:1025
1
wioletta90 napisał(a):

Ciekawe co piszecie, brałam udział póki co w 3 projektach i w każdym było kodowane i odkodowywane po stronie aplikacji mobilnej, ale za każdym razem przychodziłam na gotowe i nie było już osób za to odpowiedzialnych żeby zapytać dlaczego własnie tak to wygląda.

A to nie wiem. Przeanalizujmy:
Klient otwiera aplikacje i się rejestruje i pytanie twoje było:

Ale gdy hashowanie mam już po stronie klienta(aplikacja mobilna), to mogę przy rejestracji bezpośrednio wysłać do bazy danych ten hash od klienta jako string ?

Jeżeli masz hashowanie przy rejestracji to co będziesz trzymać w polu hasło uzytkownika ? Czysty text ? nie ma jak bo nie odhaszujesz. Zakodowany hash? no to jak przeslesz bez HTTPS zwykly hash przy logowaniu to kazdy kto go przechwyci bez odkodowania sie zaloguje.

Przypadek nr 2:
Jezeli masz czyste hasla w bazie i masz 100 klientow i nagle w aplikacji dodasz hasowanie MD5 to do serwera do logowania trafi porownanie
MD5 z aplikacji == haslo z bazy ktore pobierzesz i zakodujesz MD5 i bedzie wtedy OK tak? bo sie zaloguje user

Przypadek nr: 3
Zmieniasz w aplikacji MD5 na BCrypt
Teraz logujac sie sprawdzasz czy haslo wyslane z apliacji BCrypt == haslo z bazy ktore raz zakodujesz md5 jesli nie to bcrypt bo nie wiesz ktory klient zaktualizowal aplikacje i uzywa nowego bcrypt a ktory md5. co zwieksza ci ilosc operacji na serwerze ale zadziala

Pytanie zasadnicze skad wezmiesz przy rejestracji czyste haslo jesli wyslesz je zahashowane ?

edytowany 1x, ostatnio: masterO
W9
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 3 lata
  • Postów:132
1

Właśnie to mi się nie zgadzało :) Dzięki za wyjasnienie, czyli wszystko po stronie serwera :)

masterO
Tak. Raz że nie przewidzimy co zrobi klient a dwa, że im wiecej po stronie serwera tym łatwiej nam tym zarzadzać i miec kontrole
  • Rejestracja:około 6 lat
  • Ostatnio:ponad rok
1

Ale gdy hashowanie mam już po stronie klienta

Narażasz się na atak typu pass the hash.

Jezeli bys tak wyslala bez HTTPS juz zahasowane haslo to dalbys wszystkim mozliwosc go przechwycenai i probe odkodowania metoda brute force.

Atakującemu wystarczy sam hash.

Also, nie jestem fanem bcrypt. Cechuje go kilka problemów:
a) klucz nie powinien być dłuższy niż 56 bajtów
b) implementacje przycinają klucz do 72 bajtów (te, które tego nie robią, podatne są na atak DoS)
c) implementacje przycinają klucz na bajcie zerowym

edytowany 1x, ostatnio: Mózg
Zobacz pozostałe 2 komentarze
masterO
Ta jasne, dobrze ze ty rozumiesz to chociaz uratujesz swiat :) To pinki jest i mózg, mózg, mózg, mózg ta ta ta ta ta, taaaa , TA TAM . to ja ci dam moj hash a ty go odgadnij hahaha masz: $2y$12$uM5kEXrBs7VpYbJ6Zqva8enw09yU3jECXRl4aUwoQvjl2YK52VoJK
Shalom
@masterO: ty jesteś serio upośledzony czy udajesz? Jeśli server oczekuje ze dostanie już hasha (bo hash jest robiony po stronie klienta) to można zrobić wspomniane już pass the hash. Nie trzeba niczego łamać. Po prostu wysyłam do serwera twój hash i tyle.
masterO
No przeciez to samo napisalem jej wyzej ze wystarczy hash
Shalom
Napisałeś wyżej to ja ci dam moj hash a ty go odgadnij hahaha, podczas gdy dyskusja dotyczyła sytuacji kiedy wysyłamy sam hash, wiec niczego odgadywać nie trzeba. Sam zresztą wcześniej pisałeś no to jak przeslesz bez HTTPS zwykly hash przy logowaniu to kazdy kto go przechwyci bez odkodowania sie zaloguje więc chyba jednak rozumiałeś istotę problemu. Schizofrenia?
masterO
Jak czytalem twoja odpowiedz to nie czytalem cytowanego kawalka i myslalem ze dotyczy to osobnego watku. Moj blad

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.