Skrót i szum, zamiast hasła

0

Stworzyłem skrypt, który pozwala się logować inną metodą niż hasła - hash-em z szumem. Zachęcam do przeczytania o mojej metodzie.

http://www.dobreprogramy.pl/Hashe-z-soli-i-szyfr-cezara,Blog,68274.html

Dodatkowo metoda wykorzystuje szyfr cezara. Szyfr cezara można złamać metodą statystyczną, ale ponieważ szyfr cezara wykorzystuje się w odpowiedzi, a w zapytaniu, jak i w odpowiedzi wykorzystywany jest szum, to mnie zastanawia, jak szybko uda się złamać.

Od jutra, codziennie będę publikować po trzy zapytania i trzy poprawne odpowiedzi na te zapytanie. Chodzi o odgadnięcie klucza. Nagrodą jest satysfakcja, że jest się dobrym matematykiem.

0

Nie wygląda to dobrze.

  1. Szyfr Cezara nazywa się szyfrem tylko ze względów historycznych. Dzisiaj można go bardzo łatwo złamać.
  2. nie widać dokładnie co kto komu przesyła
  3. opisujesz 3 strony wymiany: komputer, serwer, klient. Trochę to mylące
  4. nie analizowałem dokładnie, ale trochę to wygląda jak zwykły challenge-response, który jest znany od wielu lat (hasła: SCRAM, CRAM, OCRA, RFC 6287)
0

Za wikipedią, challange-response jest również zwyczajne hasło, a więc porównywanie wydaje mi się bez sensu. Jest to z pewnością challange-response, ale lepsze porównanie to captcha.

Swój wpis blogowy podzieliłem na dwie części - generowanie zapytania, a także kroki, jakie musi wykonać użytkownik.

PS: Czy są gdzieś wykorzystywane podane przez Ciebie przykłady podobnych rozwiązań? Ja chcę stworzyć serwis OpenID lub podobnego rozwiązania i oczywiście połączyć moją metodę z hasłem, by klucz był szyfrowany dodatkowo hasłem(w pierwszym kroku byłoby przesyłane hasło, a następnie generowane byłoby zapytanie).

Nie interesowałem się zbytnio challenge-response, ale moja metoda polega na tym, że serwer, jak i klient wykonują podobne operacje. Klient musi dodatkowo jednak przetłumaczyć cyfry.

0

Powiedz mi jakie widzisz wady w zapisywaniu hasła metodą salt + hash (którą btw nie Ty wymyśliłeś, a jest znana od dawna) i dlaczego tak kombinujesz. Poza tym "szyfruje ją szyfrem cezara" to jakaś straszne tragedia jest.

0

Zapisywanie hasła metodą salt + hash dotyczy umieszczania haseł w bazie danych(o to Ci chodzi?), a mój pomysł trochę pomaga chronić hasło przed keylogerami. Oczywiście, że są portfele, ale nawet z portfela można wykraść hasło, a do portfela trzeba wprowadzić hasło.

Na kryptografii się słabo znam, a z matmy jestem taki sobie. Po prostu potrzebowałem takiego rozwiązania, więc je stworzyłem - nie rozpoznawałem obecnych metod. Po prostu nigdzie nie ma serwisu, który pozwalałby na stosowanie podobnej metody, a moją metodę można nauczyć się w godzinkę.

Z powodu braku wiedzy, to najpierw spytałem na forum.

Racja. Niefajne jest również to, że sól ma chyba dwa znaczenia:

  1. Liczba przekazana do generatora pseudolosowego - użyłem tego znaczenia
  2. Coś, co się dopina do hasła - tutaj użyłem przedrostek(przed czymś), wrost(między), końcówka(na końcu).

Przedrostek(w moim przypadku), to coś, co jest pomijane z początku zapytania
Wzrost, to coś, co jest pomijane ze środka zapytania
Końcówka, to coś, co jest pomijane z końca zapytania

W tym poście użyłem pojęcie zapytanie w sensie zapytanie generowane przez serwer do użytkownika(a nie do oprogramowania). Z zapytania użytkownik musi "wygenerować" odpowiedź, którą ma wprowadzić.

RE UP: Chodzi o sól do generatora pseudolosowego. Każdy użytkownik ma inną liczbę przekazywaną do generatora pseudolosowego. Jest to podyktowane tym, by utrudnić ataki na taki generator.

0

Zanim zacznie się pisać o czymś taki to powinno się pogooglać znaleźć inne artykuły i poczytać jak ludzie razwiązują takie problemy.
Odkryłbyś, że szyfr cezara to odległa przeszłość.
Poczytaj np to: http://crypto.stanford.edu/PwdHash/pwdhash.pdf
albo jeszcze lepiej https://tools.ietf.org/html/rfc2617 (logowanie hasłem bez przekazania hasła przez sieć).

0

RE UP: Wiem, że szyfr cezara można złamać metodami statystycznymi, ale ja go trochę umocniłem(prefix, infix, sufix). Co do logowania kodem na komórkę, to wg. mnie jest to nie do końca bezpieczne, a poza tym, to mało ludzi to stosuje. Są też specjalne chipy, które generują hasło po wprowadzeniu zapytania, ale taki chip można ukraść. Komórkę też można ukraść.

1037 9586 1800 5756 4663 19
http://www.twójid.pl/bogacz.php?action=super&answer=015859

1463 7840 1600 4698 4143 48
http://www.twójid.pl/bogacz.php?action=super&answer=013560195786962

9903 2404 0637 4300 7178 0731 2167 3
http://www.twójid.pl/bogacz.php?action=super&answer=00361013613211081029495

Co do pwdhash, to do hasła dodawana jest sól, jak w bazach danych. Czy sól jest zmienna? Zresztą, to chcę bronić użytkownika przed keylogerami i wścibskimi osobami, a nie chronić przesyłane dane. Poczytam dalej o Pwdhash.

Mój błąd - przyznaję się. W generatorach pseudolosowych nie jest wykorzystywana sól, a ziarno.

1

Z kim pan tak dyskutuje jak można zapytać?

0

Ty nie masz pojęcia o tych sprawach. Naprawdę zanim zaczniesz pisać artykuły poczytaj coś poważnego na ten temat.
Ty ty sypiesz tylko frazesami, których nie rozumiesz.
Sam się na tym nie znam, ale wiem na tyle by powiedzieć ci wprost: skasuj ten artykuł, obecnie nie masz wiedzy ani umiejętności by o tym pisać.
Przeczytaj od dechy do dechy https://tools.ietf.org/html/rfc2617 (basic authentication możesz zignorować) i postaraj się to zrozumieć. To jest już metoda przestarzała, ale i tak o wiele lepsza od jakiekolwiek formy szyfru cezara.

0
MarekR22 napisał(a):

To jest już metoda przestarzała, ale i tak o wiele lepsza od jakiekolwiek formy szyfru cezara.

Ja rozumiem, żę szyfr cezara jest przestarzały, ale chodziło mi o coś, z czym poradzi sobie użytkownik.

Na pytanie kogoś innego, z kim dyskutuję, to ludzie edytują posty i dopiski do postów, a ja nie mogę, bo nie jestem zarejestrowany. Wiem, że wygląda to śmiesznie, ale cóż.

Chciałbym napisać, że wężyk w systemach mobilnych nie jest bezpieczniejszy od hasła, a mimo wszystko się przyjął.

PS: To, że nie znam się na kryptografii nie oznacza, że całkowicie nie mam pojęcia o czym piszę. Moja metoda miała chronić przed keylogerami i trochę spełnia te zadanie. Istnienie lepszych metod nie oznacza jeszcze, że nie mam pojęcia, o czym piszę.

0

8219 7677 0518 0012 3683 1390 24
http://www.twójid.pl/bogacz.php?action=super&answer=091425829271

8294 0191 8001 6942 1984
http://www.twójid.pl/bogacz.php?action=super&answer=01676497

1425 1894 7013 0075 7681 1484 4
http://www.twójid.pl/bogacz.php?action=super&answer=01401920309689968

Chyba kończę publikować kolejne pytania i odpowiedzi. Nie ma licznika odwiedzin na stronie, ale na tym forum brak jest odzewu.

2

Moja metoda to zmodyfikowany szyfr cezara. I tutaj rodzi się pytanie - ile podejrzeń komunikacji wystarczy, by odszyfrować klucz? Tego nie wiem, więc zwracam się z prośbą do was, byście złamali moją metodę, ale o tym na forum.

Zadanie wygląda na ciekawe (łamałbym :P. Chociażby żeby pokazać że ta metoda to zły pomysł), ale masz może przykładową implementację tego algorytmu? Brak odezwu może się brać stąd, że trudno powiedzieć jak dokładnie działa Twoja metoda, bo opis na dobrychprogramach jest chaotyczny (moim zdaniem), a żeby próbować ją atakować trzeba wiedzieć dokładnie co się tam dzieje.

Na pytanie kogoś innego, z kim dyskutuję, to ludzie edytują posty i dopiski do postów, a ja nie mogę, bo nie jestem zarejestrowany. Wiem, że wygląda to śmiesznie, ale cóż.

Sugestia: zarejestruj się.

0

Ok. W takim razie opublikuję źródła. Co do domeny: twójid.pl ze skryptem bogacz.php . Odpowiedź podaje się następująco:

twójid.pl/bogacz.php?action=super&answer=<odpowiedź>

Opublikowałem źródła (link na stronie bogacz.php).

1

Ten twój kod sprawdzający to jest jeden wielki WTF i if oriented programming. W zasadzie nie bardzo wiadomo co ty tam chcesz walidować. To jest celowa obfuskacja czy po prostu napisałeś to po 2 dniach czytania kursu PHP? Generalnie twój opis to niezrozumiały bełkot (przykro mi, tak jest) a kod jest jeszcze gorszy. Nikt tego raczej nie tknie nawet kijem, nie dlatego że to super mocny algorytm, tylko ze strachu że się czymś zarazi...

Poza tym mam pewne wątpliwości co do jakiejkolwiek użyteczności tego algorytmu. W kodzie widzę że serwer generuje sobie losową liczbę segmentów a także losowe rozmiary tych paddingów. A w twoim opisie napisałeś że:
Zliczamy liczbę cyfr otrzymanego ciągu i odejmujemy od niej długość wrostu, przedrostku i końcówki. Wynik dzielimy przez dwa i dodajemy następnie do niego liczbę cyfr przedrostku. Więc skąd user zna te rozmiary paddingów? User zna przecież tylko i wyłącznie swoje hasło. Więc skąd ma wiedzieć ile wynosi ten infix, prefix i suffix w takim razie? Odnoszę wrażenie że nawet user znający hasło nie będzie sie w stanie tam zalogować :D Chyba ze jednak zakładasz że user zna i pamięta także te pozostałe wartości?

A tak BTW to to całe dodawanie paddingów przy generacji hasha jest bez sensu i mozesz je równie dobrze w ogóle wyrzucić. Bo co to niby daje że zamieniasz ciąg
abcd na 3XXXab4XXXXcd5XXXXX skoro wiadomo gdzie umieszczasz padding i że jego rozmiar jest tam zapisany? Jedyny efekt to zmniejszenie czytelności kodu, bo żadnego utrudnienia w łamaniu to nie dodaje.

0

Użytkownik zna rozmiar przedrostku, wrostu i końcówki, ale oczywiście, że nie zna ich wartości - są one generowane.

Ten padding nie jest wcale znany, bo po wylosowaniu liczby jest zamieniany przez szyfr.

Przypuśćmy, że 3 => 2, 2 => 4, 1 => 5.
Serwer wypluł coś takiego

332323135678

Tak więc wygląda to tak, jeżeli chodzi o zainteresowanie - x oznacza śmieć
3xx3231xxxxx
Użytkownik może dać natomiast taką odpowiedź
134567342
Może również dać taką odpowiedź
319342

Gdybyśmy zdefiniowali, że 5 => 1, to poniższa odpowiedź będzie również poprawna
1245675432352
Braliśmy pod uwagę, że infix =0, sufix = 0, prefix = 0

1

@nintyfan ja mam propozycje. Napisz to nam po ludzku, normalnym, technicznym językiem, daj przykład i będzie wszystko wiadomo.

0

ja chyba powoli wyczuwam perełkę

0

Już teraz bym założył jakiś skrypt do dostarczania tożsamości OpenID lub czegoś podobnego, zintegrowanego z tym, co stworzyłem, ale bym chyba najpierw musiał się skomunikować z jakimś prawnikiem - trzeba ustalić regulamin.

0

zawsze jak czytam takie tematy mysle
"kurde nic nie rozumiem. Czytam trzeci raz i nadal zero... chyba jestem za glupi"
Oczywiscie mysle tak bo nie znam sie na temacie wiec nie wchodze w szczegoly za bardzo.
Ale jak prawie zawsze (99% przypadkow) to autor pisze tak, ze on chyba sam siebie nie rozumie...

0
  1. Odczytujemy ziarno z bazy danych i je ustawiamy - każdy użytkownik ma własne ziarno - nie wiem czy to bezpieczne czy mniej bezpieczne - chodzi o wyeliminowanie ataków na generator liczb pseudolosowych
  2. Na początku generowana jest liczba segmentów
  3. Ustawiamy liczbę cyfr w ciągu na 0
  4. Pętla:
    3.1 Sprawdzamy czy liczba cyfr w ciągu nie przekracza pewnej ustalonej wartości
    3.1.1 tak: przechodzimy do 4
    3.2. Losowana jest liczba ilości(cyfra) cyfr nieistotnych dla obecnego segmentu
    3.3. Wylosowana ilość jest tłumaczona kluczem zapisanym w bazie danych
    3.4. Generowanych jest tyle cyfr, ile wynosi przetłumaczona cyfra
    3.5. Zwiększamy liczbę cyfr w ciągu o liczbę wygenerowanych cyfr w pkt. 3.4
    3.6. Wykonujemy kroki od 3.1 do 3.5, jednak dla cyfr istotnych
    3.7. Jeżeli nie wygenerowaliśmy wszystkich wymaganych segmentów, to przechodzimy do 3.1
  5. Mamy już ciąg do porównania - zapamiętujemy go
  6. Doklejamy z przodu tzw. prefix(odpowiednią liczbę cyfr wygenerowanych losowo - liczba ta przechowywana jest w bazie danych)
  7. Doklejamy z tyłu tzw. sufix(odpowiednią liczbę cyfr wygenerowanych losowo - liczba ta przechowywana jest w bazie danych)
  8. Doklejamy do środka tzw. infix(odpowiednią liczbę cyfr wygenerowanych losowo - liczba ta przechowywana jest w bazie danych)
  9. Oczywiście, że w punktach 5,6,7 generujemy te ciągi
  10. Prezentujemy ciąg uzyskany w punkcie 7 użytkownikowi

Tak wygląda generowanie ciągu zwróconego przez serwer(do przetransformowania przez użytkownika). Jutro opiszę, co musi zrobić użytkownik.

0
  1. Użytkownik zlicza liczbę cyfr w ciągu zwróconym przez serwer
  2. Odejmuje od wyniku długość infiksu, sufiksu i prefiksu(nie chodzi o porządek czy drzewa oczywiście)
  3. Dzieli to przez dwa
  4. Jeżeli jest reszta z dzielenia, to dodaje jeden
  5. Dodaje długość prefiksu
  6. Dodaje jeden
  7. Odlicza ilość cyfr wyniku od lewej, zahaczając n wyrzucając n cyfr infiksu od odliczonej pozycji
  8. Zaczynamy od lewej strony, przesuwając się o x cyfr prefiksu
    9. Teraz pobieramy pierwszą cyfrę i tłumaczymy ją, otrzymując liczbę cyfr do przeskoczenia
  9. Przeskakujemy taką liczbę cyfr
  10. Następnie pobieramy kolejną cyfrę, otrzymując liczbę cyfr to przetłumaczenia
  11. Wybieramy losową cyfrę, tłumacząc ją otrzymujemy liczbę cyfr szumu, jaką musimy podać
  12. Podajemy liczbę cyfr prawidłowych przed przetłumaczeniem(możemy także skorzystać z bardziej wyrafinowanego algorytmu, podając mniejszą liczbę cyfr, ale dla uproszczenia przyjąłem, że będzie to pobrana cyfra)
  13. Tłumaczymy y cyfr, gdzie y to pobrana liczba
  14. Przechodzimy do punktuj 9, jeżeli nie ma cyfr z prawej nie należących do sufiksu

1 użytkowników online, w tym zalogowanych: 0, gości: 1