Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Bezpieczeństwo haseł przy użyciu soli
nexis
post
Post #1





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

Ostrzeżenie: (0%)
-----


Zwykle, dla bezpieczeństwa, trzymamy w bazie danych skrót hasła, utworzony za pomocą md5() bądź sha1(). Z myślą o tęczowych tablicach dopisujemy zwykle dodatkowo tzw. sól, która jest trzymana poza bazą danych, zwykle na serwerze.

Chciałbym jednak zwiększyć bezpieczeństwo również po stronie użytkownika i zastosować mechanizm znany z banków internetowych, czyli odpytywanie użytkownika o wybrane znaki hasła. Aby zastosować taki mechanizm jestem jednak zmuszony zapamiętać każdy znak hasła osobno. Powiedzmy, że w tym celu narzucę maksymalną długość hasła na 16 znaków i stworzę w tabeli bazy danych 16 dodatkowych pól (po 1 dla każdego znaku). Jak ma się jednak w/w sposób do tej sytuacji? Sam skrót to praktycznie żadne zabezpieczenie. Zastosowanie soli już bardziej, ale jest to wciąż bardzo słaby mechanizm. Co zrobić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




To przemyśl co da hasło abababab skoro dla każdej litery jest ta sama sól zawsze. Bo jeśli dobrze zrozumiałem Twoje rozumowanie, to "każdy user ma swój hash i każda litera ma swój hash". W wyniku dostaniemy:
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól2 + b)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól2 + b)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól2 + b)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól2 + b)
Sól główna jest stała, a każda litera ma swoją własną sól. Przy czym można wnioskować, że sole dla całego zakresu znaków są stałe, niezależnie od tego u jakiego usera. W moim pomyśle nawet wystąpienie kilkukrotne tej samej litery wprowadziło by różne skróty dla nich w wyniku. Poza tym w takim wypadku jak ja Cię zrozumiałem niepotrzebne jest używanie znaku na końcu, gdyż i tak jego hash jest identyczny. Nie robi więc różnicy czy użyję "sól+jego_znak" czy samo "sól" w funkcji skrótu, gdyż i tak w wyniku dostanę tak czy inaczej przy każdym powtórzeniu ten sam hash. Czy więc użycie 'mambaA' i 'mamba' da coś więcej poza innym nieco hashem. To i tak nieistotne dopóki będzie się za każdym razem dostawać ten sam. Mi bardziej zależy na tym, by algorytm generował inny hash dla 'mamba' w zależności od tego na jakiej pozycji jest litera do weryfikacji, bo może się okazać, że wtedy do funkcji skrótu nie trafi mamba ale 'mbaca' co zmieni już wynik hashowania, mimo że zostały wywołane dla tej samej litery. Zresztą czy zastanawiałeś się nad tym, gdzie przechowywać sole dla zakresu (odpada jeśli sa generowane w locie).
Jeśli jednak planowałeś generować dla każdego usera jego własne sole dla całego zakresu to gdzieś też musiałbyś je przechowywać do porównania.

EDIT: Pozwól że rozpiszę przykład aaaaaaaa

Twój kod:
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól1 + a)

Mój kod:
sha1(sól_główna + sól_generowana_dla_znaku_na_pozycji_1_modulo_długość_ciągu_w_jakiejś_danej_tekst
owej)
sha1(sól_główna + sól_generowana_dla_znaku_na_pozycji_2_modulo_długość_ciągu_w_jakiejś_danej_tekst
owej)
sha1(sól_główna + sól_generowana_dla_znaku_na_pozycji_3_modulo_długość_ciągu_w_jakiejś_danej_tekst
owej)
sha1(sól_główna + sól_generowana_dla_znaku_na_pozycji_4_modulo_długość_ciągu_w_jakiejś_danej_tekst
owej)
sha1(sól_główna + sól_generowana_dla_znaku_na_pozycji_5_modulo_długość_ciągu_w_jakiejś_danej_tekst
owej)
sha1(sól_główna + sól_generowana_dla_znaku_na_pozycji_6_modulo_długość_ciągu_w_jakiejś_danej_tekst
owej)
sha1(sól_główna + sól_generowana_dla_znaku_na_pozycji_7_modulo_długość_ciągu_w_jakiejś_danej_tekst
owej)
sha1(sól_główna + sól_generowana_dla_znaku_na_pozycji_8_modulo_długość_ciągu_w_jakiejś_danej_tekst
owej)

Problemem jest teraz u Ciebie powtarzanie się hashy. U mnie pewne mogą się powtórzyć, ale jest to o wiele mniej prawdopodobne, gdyż musiałoby dojść do sytuacji, że ciąg musiałby mieć na tych samych pozycjach te same znaki. i byłoby to jednoznaczne choćby z ciągiem 'cccccccccccccc'.
Ale użycie dowolnego innego jak 'dowolny_ciąg' dałoby te same znaki tylko dla litery 'o'. Choć więc hasło jest z samych literek 'a' to każda z nich niemal ma inny hash po przejściu funkcji ;)

Ten post edytował thek 4.09.2009, 13:40:24
Go to the top of the page
+Quote Post
nexis
post
Post #3





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

Ostrzeżenie: (0%)
-----


Cytat(thek @ 4.09.2009, 14:21:41 ) *
Twój kod:
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól1 + a)
sha1(sól_główna + sól1 + a)

Niestety źle mnie zrozumiałeś. Mam na myśli coś tego typu:

Sól systemowa: 6R$fr2Ga

Nazwa użytkownika: adam
Hasło: abcd1234
Skróty w bazie danych:
sha1(6R$fr2Ga + CRu6$wRu + a)
sha1(6R$fr2Ga + cuthA3=R + b)
sha1(6R$fr2Ga + th$PhE3u + c)
sha1(6R$fr2Ga + +RUt*uF2 + d)
sha1(6R$fr2Ga + =r9cH6!u + 1)
sha1(6R$fr2Ga + F7ecR-ph + 2)
sha1(6R$fr2Ga + _EKa73@w + 3)
sha1(6R$fr2Ga + p@$VE96u + 4)

Nazwa użytkownika: ewa
Hasło: abcd1234 (takie samo jak użytkownika "adam")
Skróty w bazie danych:
sha1(6R$fr2Ga + R$ga@AdU + a)
sha1(6R$fr2Ga + 9e-r*sAs + b)
sha1(6R$fr2Ga + gE*ekUp7 + c)
sha1(6R$fr2Ga + H#wru3at + d)
sha1(6R$fr2Ga + z2=U7Huf + 1)
sha1(6R$fr2Ga + jeD+ut4C + 2)
sha1(6R$fr2Ga + du6*aPag + 3)
sha1(6R$fr2Ga + 2?_tE3Ra + 4)

Sól systemowa i poszczególne sole będą trzymane po stronie serwera ze skryptami (poza bazą danych). Czy jest możliwość złamania tego? Bo tylko wtedy widzę potrzebę jakichkolwiek dodatkowych kombinacji.

Sole mogą, a nawet powinny, być bardziej złożone (> 32 znaków), ale podałem krótsze dla zwiększenia czytelności.

Ten post edytował nexis 4.09.2009, 21:32:08
Go to the top of the page
+Quote Post

Posty w temacie
- nexis   Bezpieczeństwo haseł przy użyciu soli   3.09.2009, 15:36:42
- - thek   Osobiście nigdy tak nie podchodziłem do sprawy bez...   3.09.2009, 16:16:21
- - sztosz   Akurat dwukierunkowość szyfrowania to nie jest dob...   3.09.2009, 19:17:52
- - blooregard   CytatAkurat dwukierunkowość szyfrowania to nie jes...   3.09.2009, 19:41:13
|- - phpion   Cytat(blooregard @ 3.09.2009, 20:41:1...   3.09.2009, 20:43:13
- - sztosz   Masz hasło x znaków, haszujesz każdy znak, hasz m...   3.09.2009, 20:48:40
- - nexis   Póki co przyszło mi na myśl stosowanie bardzo złoż...   3.09.2009, 20:57:38
- - blooregard   CytatRównie dobrze można trzymać hashe poszczególn...   3.09.2009, 21:04:11
|- - nexis   Cytat(blooregard @ 3.09.2009, 22:04:1...   3.09.2009, 21:08:24
- - blooregard   CytatChodzi o to, żeby sposób był bezpieczny nawet...   3.09.2009, 21:22:00
|- - nexis   Cytat(blooregard @ 3.09.2009, 22:22:0...   3.09.2009, 21:26:31
- - blooregard   CytatEfekt ma być taki, że po przejęciu kontroli n...   3.09.2009, 21:32:38
|- - nexis   Cytat(blooregard @ 3.09.2009, 22:32:3...   3.09.2009, 21:42:52
- - blooregard   CytatWidzi ktoś wady takiego rozwiązania? No nie, ...   3.09.2009, 21:57:03
- - thek   Zastanawiałem się Nexis nad algorytmem, który dawa...   4.09.2009, 09:34:43
|- - nexis   Cytat(thek @ 4.09.2009, 10:34:43 ) Dl...   4.09.2009, 10:40:56
- - thek   Może i tak, ale indywidualna sól dla każdego użytk...   4.09.2009, 12:22:43
- - nexis   Wciąż nie widzę w czym zaprezentowana przez ciebie...   4.09.2009, 12:40:32
- - thek   To przemyśl co da hasło abababab skoro dla każdej ...   4.09.2009, 13:21:41
|- - nexis   Cytat(thek @ 4.09.2009, 14:21:41 ) Tw...   4.09.2009, 21:31:05
- - blooregard   CytatBo jeśli dobrze zrozumiałem Twoje rozumowanie...   4.09.2009, 13:34:11
- - thek   Po przeczytaniu posta odnosi się wrażenie, że nie ...   4.09.2009, 14:02:30
- - thek   Ok... Pomińmy więc w dalszych rozważaniach sól sys...   4.09.2009, 22:07:25
|- - nexis   Cytat(thek @ 4.09.2009, 23:07:25 ) st...   4.09.2009, 22:38:16
- - thek   CytatPodstaw sobie dowolne hasło pod podany przeze...   5.09.2009, 00:05:41
|- - nexis   Cytat(thek @ 5.09.2009, 01:05:41 ) Te...   5.09.2009, 05:51:09
- - thek   Wczoraj w chwili przerwy przejrzałem nasze wypowie...   6.09.2009, 09:45:29
|- - nexis   Cytat(thek @ 6.09.2009, 10:45:29 ) Wc...   7.09.2009, 23:14:48
- - thek   Wersja skrócona: Problem: Algorytm się minimalnie ...   8.09.2009, 21:59:11
- - nexis   Ale po co miałbym kiedykolwiek zmieniać sól dla uż...   8.09.2009, 22:48:50
- - thek   Chodzi mi o sytuacje gdy, przykładowo, zauważyłeś ...   9.09.2009, 09:23:47
- - nexis   Algorytm opracowuje się raz i dobrze. Cała jego id...   9.09.2009, 09:26:42
- - thek   Wiem, że algorytm powinien być napisany raz a dobr...   9.09.2009, 13:04:35


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 01:32