![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 322 Pomógł: 15 Dołączył: 29.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam, krążę właśnie nad zabezpieczeniem mojej strony za pomocą szyfrowania haseł solą. Dużo się o niej wspomina, jakie ma wady i zalety, ale nigdzie konkretnie nie znalazłem jakichś porad w jaki sposób mogę zastosować to szyfrowanie.
Znalazłem skrypt na openwall, pobrałem go razem z dokumentacją, ale jest ona tylko i wyłącznie w języku eng. Dogadać to się dogadam, ale czytać to już nie za bardzo ![]() Znajdzie się jakaś dobra dusza, która pomoże mi z tym problemem. P.S. Aktualnie szyfruje hasła za pomocą md5. Czytałem że na dzień dzisiejszy nie jest to dobre zabezpieczenie (brutal force i te sprawy), jednak pomyślałem żeby przy logowaniu zastosować recaptcha od google. Myślę że w jakiś sposób zatrzymało by to próbę b-f. Drugim moim pomysłem jest zrobienie warunków. Jeżeli hasło zaczyna się na np. literkę na to ma szyfrować za pomocą md5, a na przykład jak zaczyna się na b to już za pomocą SH1. Wiem że jest to łopatologiczne rozwiązanie, ale myślę że było by skuteczne ![]() To na początek wrzuce przykładowy skrypt logowania
Pozdrawiam |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Sól to przeważnie ciąg znaków dopisywany do hasła. Sam decydujesz, czy sól dopiszesz do hasła już zakodowanego i później zakodujesz je ponownie, czy dopiszesz ją do do hasła podanego przez użytkownika i zakodujesz jednokrotnie. Sól może być wspólna dla wszystkich użytkowników, a może być też unikalna dla każdego z osobna i wtedy przechowujesz ją w bazie danych obok pozostałych danych do logowania.
Zamiast md5 używaj sha1. Nie powinieneś sprawdzać, czy pierwszym znakiem hasła jest cyfra, czy litera, a tym bardziej jaka to litera, czy cyfra - hasło to prywatna sprawa użytkownika. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 322 Pomógł: 15 Dołączył: 29.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Czyli nie ma jednego genialnego skryptu, który będzie mi kodował hasła z solą. Muszę użyć tutaj swojej wyobraźni
![]() Tylko mam pytanie. Mogę losowo kodować hasła algorytmem md5 bądź sh1. Jednak jak zrobić żeby podczas logowania skrypt wiedział że hasło dla konkretnego loginu zostało zakodowane np. za pomocą md5 a nie sh1. A dobrym sposobem jest do hasła dołączanie np. początek loginu? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Im bardziej "niestandardowy" skrypt hashujący, tym lepiej. Gdyby był jeden genialny, to by już przestał być genialny, bo pod niego by pisano łamacze
![]() Możesz losowo wybierać metodę. Przykładowo gdy ktoś wpisuje login i hasło, sprawdzasz obecność loginu w bazie. Gdy jest, pobierasz rekord i dane z nim związane. Mogą one zawierać informacje o indywidualnej soli, typie algorytmu hashującego czy wszelkich ustawionych dla danego konta rzeczach niestandardowych. Na ich podstawie sobie ustawiasz co idzie do algorytmu hashującego i jego wyjście porównujesz z hashem zapisanym w bazie. -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Trzymanie haseł w bazie w formie zaszyfrowanej ma służyć temu by w razie wycieku rekordów nie znane było hasło oraz po to by nie wykorzystywać takiego hasła w innych serwisach (przy założeniu, że użytkownik ma takie samo hasło na przykład na poczcie, w banku i w naszym portalu znając jego hasło można nieźle namieszać).
Używanie "soli" jest jak najbardziej wskazane jak i korzystanie z dłuższego sha1. Ale czy jest sens w przechowywaniu w bazie w rekordzie user'a danych dotyczących "soli" albo jej samej? To w sumie nic nie daje poza tym, że podpowiada włamywaczowi jak łamać hasło. Ja zawsze trzymam SALT gdzieś głęboko w kodzie - wszędzie jest jednakowy i nie za krótki (przynajmniej z 256 znaków). Zastanówmy się nad taką sytuacją w 3 podejściach: 1. Bez soli Ktoś zdobywa hasło usera z bazy. User ma hasło numeryczne na przykład 123456 - przelecenie przez wszystkie kombinacje numeryczne md5 lub sha1 nie trwa tak strasznie długo - pyk - mamy hasło 2. Z solą w bazie Ktoś zdobywa hasło usera i salt usera - ta sama opcja hasło nuemryczne - do każdego dodajemy salt przed lub za i testujemy - trochę dłużej to potrwa ale i tak pewnie znajdziemy to hasło. 3. Z solą poza bazą Ktoś zdobywa hasło usera i.... no właśnie i co? ![]() ![]() Podsumowując IMHO nie ma sensu bawić się w przypiswanie saltów indywidualnych dla userów, rotacji sha1/md5... wystarczy sha1, mocny i dobrze ukryty salt i po srpawie ![]() I popieram @Thek'a - własny algorytm (przemyślany) to też dobre rozwiązanie ![]() Ten post edytował Sephirus 27.12.2011, 12:36:11 -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 322 Pomógł: 15 Dołączył: 29.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Czyli tutaj już muszę użyć swojej kreatywności
![]() A co powiecie na ten pomysł z recaptcha ? |
|
|
![]()
Post
#7
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
@Sephirus... SALT jedynie w bazie to za mało. Najlepiej mieć zarówno salt indywidulany dla usera i jeden ogólny dla serwisu a stosować oba jednocześnie. Czemu? Gdy Ci podwędzą kod serwisu to znają SALT hasła z serwisu i algorytm, ale nie znają soli indywidualnych, więc hasła są teoretycznie dalej trudne do ustalenia. Jeśli podwędzą bazę, to nie znają ani algorytmu, ani hasha serwisu, więc też zgaduj-zgadula nadal. Muszą mieć oba te komponenty naraz, aby ustalić hasła, a i tak dla każdego usera musza one być indywidualnie z użyciem "rainbow tables" (o brute force zapomnij
![]() ![]() a) kod serwisu, ![]() c) autoryzacja dla serwera zewnętrznego. -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
@up no tak tak - absolutnie masz rację - to jeszcze lepsze - ja pisałem jedynie o tym by nie dawać salta "tylko" w bazie
![]() ![]() ![]() Czyli dochodzimy do wniosku: 1. salt indywidualny (dla każdego usera w bazie) 2. salt globalny (kod) szyfrogram to efekt hashowania hasła poprzez 1 a następnie poprzez 2 ![]() IMHO ReCaptcha - to zuo - zmusza ludzi do robienia czegoś czego nie chcą i zajmuje wbrew pozorom sporo czasu :/ Dodatkowo poza właśnie google'owską reCaptchą to reszta jest już pozłamywana. - Są inne sposoby na spam, brute force itd. -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 322 Pomógł: 15 Dołączył: 29.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ok, to recaptcha zostawię w spokoju, skupie się lepiej na dobrym algorytmie kodowania hasła. Dziękuje za informację i temat do zamknięcia.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 28.04.2025 - 06:52 |