@gitbejbe,
Na początku zaznaczę dla pewności, że pisałem o zapisywaniu każdej litery hasła oddzielnie, jako osobny hash.
Cytat(gitbejbe @ 18.07.2013, 07:33:51 )

Stwierdzenie w pkt.1b, że losowy token dla każdego hasła jest jeszcze łatwiejszy do złamania od stałego, sparaliżowało mi chęć odpisania na to do końca dnia
Bardzo chętnie dowiem się dlaczego. Jak dla mnie, jeśli token jest losowy i zapisany w bazie (nie generowany z niczego - ten przypadek opisałem w punkcie 1.c), to masz wręcz trywialną sytuację. Do sprawdzenia wszystkie jednoznakowe możliwości dla jednego hasha. Na standardowej klawiaturze możesz wprowadzić 98 znaków, więc na złamanie każdego hasha potrzeba max 98 prób. IMO średnia będzie oscylowała w okolicach 50.
Jeśli coś opisałem nielogicznie/niejasno to bardzo chętnie wyjaśnię Ci mój punk widzenia.
Cytat(gitbejbe @ 18.07.2013, 07:33:51 )

Co do Twojego pomysłu w pkt 2a, nie wiem, nie rozumiem, czytam któryś raz i jedyne czego jestem pewien to to, że sam wymieniłeś więcej wad niż zalet takiego rozwiązania ; )
Opisałem to trochę dokładniej tutaj: http://forum.php.pl/index.php?s=&showt...t&p=1056210 Sorry, źle przeczytałem.
Jeśli bierzesz pod uwagę
liczbę wad i zalet, a nie zwracasz uwagi jakie one są, to sorry. Wady to skomplikowana implementacja i czas generowania, a zalety to (przynajmniej moim zdaniem) bezpieczeństwo. Jeśli komuś bardzo zależy na bezpieczeństwie, to ta zaleta przebija wszystkie wady. Czaisz?
Wytłumaczę to na przykładzie.
Załóżmy, że masz 5-znakowe hasło: abcde
Załóżmy, że musisz wpisać co najmniej 3 znaki hasła przy logowaniu. Wobec tego będą takie kombinacje ciągu przychodzącego od usera:
Kod
1. abcde
2. _bcde
3. a_cde
4. ab_de
5. abc_e
6. abcd_
7. __cde
8. _b_de
8. _bc_e
...
26. abc__
Dla każdej z takich kombinacji tworzysz w bazie hash (oczywiście dla 20-znakowego hasła, z którego musisz wpisać co najmniej 10 znaków, kombinacje nie będą tak trywialne, ale też będzie ich więcej). Dzięki temu złamać pojedynczy hash nie będzie tak łatwo (duża ilość znaków szukanego ciągu), każdy hash będzie miał swoją losową sól zapisaną w bazie. O wadach i zaletach pisałem już wcześniej.
Cytat(gitbejbe @ 18.07.2013, 07:33:51 )

Jak dla mnie, najprościej i najbezpieczniej jest dla każdego znaku w haśle zrobić losowy token, przemieszać go ze stałym tokenem (+ jakieś inne dowolne stałe, np data założenia konta - ba,można zrobic i tak, że dla znaku 1 bedzie to data rejestracji, dla 2 będzie to login, dla 3 jeszcze coś innego)
To jest metoda, którą opisałem w punkcie 1.c.
Cytat(gitbejbe @ 18.07.2013, 07:33:51 )

dodatkowo wszystkie te zaszyfrowane znaki połączyć jako całość i znowu przemieszać.
Tutaj rozwaliłeś mnie po raz pierwszy. Pomieszaj, pomieszaj i poproś swój skrypt logujący, żeby później to magicznie odmieszał i sprawdził poprawność wpisanych literek. Tak jak pisałem już wcześniej - zaciemnianie != poprawa bezpieczeństwa.
Cytat(gitbejbe @ 18.07.2013, 07:33:51 )

Wątpie aby autor wątku pisał system bankowy. Jeśli chce mieć niespotykane logowanie to fajnie, ale nie popadajmy w paranoje. To w zupełności wystarczy
Ale to nie ma nic do rzeczy. Dyskutujemy tutaj na temat jak najbezpieczniej rozwiązać problem. Może ktoś z nas w przyszłości będzie robił podobne logowanie, gdzie nacisk będzie położony na bezpieczeństwo i będzie musiał zmierzyć się z tym?
Cytat(gitbejbe @ 18.07.2013, 07:33:51 )

Przy logowaniu - 3 nieudane próby i captcha po 10 próbach ban.
Najlepsze zostawiłem sobie na koniec. Wyjaśnij mi, proszę, co ma captcha i ban bo łamania haseł w wykradzionej bazie danych, a stawiam browara.