Hashe z ziarna i szyfr cezara
19.11.2015 | aktual.: 23.11.2015 09:25
Od pewnego czasu postanowiłem wymyślić coś, co utrudni kradzież hasła. Problem jest taki, że np. keyloger może wykraść hasło lub ktoś może je podpatrzeć/nagrać na dyktafon podczas wpisywania. By rozwiązać ten problem postanowiłem... pozbyć się haseł.
O problemie
Na rynku są już rozwiązania, ale wszystkie one zawodzą. Pamięć USB może ktoś wykraść, a są też metody przypominające moją, jak choćby wprowadzanie symboli otrzymanych ze strony i konieczność wpisania odpowiedzi, wygenerowanej przez specjalny chip, ale karta z chipem też może być skradziona.
Rozwiązanie
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.
Moja metoda polega na tym, że komputer generuje zapytanie i przesyła je do klienta, a klient musi w głowie obliczyć skrót zapytania i go przesłać do serwera.
Zapytanie
Serwer wykorzystuje następujące zmienne podczas generowania zapytania:
- [Ziarno zapisaną w bazie danych(potrzeba do generatora liczb pseudolosowych)
- Klucz zapisany w bazie danych
- Przedrostek, wrost, i końcówkę
W przyszłości planuję również dodać hasło, które będzie wykorzystywane jako klucz do zaszyfrowania tych danych. W przyszłości ograniczę także próbę błędnych logowań do trzech - po tym zmieniane będzie ziarno.
Działa to w następujący sposób, że serwer odczytuje ziarno użytkownika i oddaje ją generatorowi liczb pseudolosowych. Następnie generuję ilość segmentów. Dla każdego segmentu generuje co najmniej dwie liczby: liczbę cyfr szumu i liczbę cyfr właściwych. Dodaje liczbę cyfr szumu do zapytania, a następnie szyfruje ją szyfrem cezara. Dla liczby cyfr szumu po zaszyfrowaniu generuje odpowiedni szum. To samo się dzieje z cyframi właściwymi i liczbą cyfr właściwych.
Odpowiedź
Odpowiedź generuje się następująco.
[numlist] [item]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[/item][item]Wyrzucamy z otrzymanego ciągu ilość cyfr wrostu, począwszy od otrzymanego wyniku z przesunięciem w prawo o 1, a jeśli liczba cyfr wyniku w pkt. 1 jest nieparzysta, to o 2.[/item][item]Zaczynamy od cyfry przesuniętej o liczbę cyfr przedrostku plus 1[/item][item]Dopóki nie dotrzemy do końcówki, to
- Podajemy zaszyfrowaną odwrotnym kluczem liczbę kolejnych cyfr do pominięcia z naszej odpowiedzi
- Podajemy tyle szyfr szumu, co zaszyfrowana cyfra, którą podaliśmy
- Podajemy zaszyfrowaną odwrotnym kluczem liczbę kolejnych cyfr do przetworzenia z naszej odpowiedzi
- Szyfrujemy obecną cyfrę
- Pomijamy n cyfr wyniku z poprzedniego punktu
- Przesuwamy się o jeden w prawo
- Szyfrujemy obecną cyfrę
- Szyfrujemy n cyfr, gdzie n zostało obliczone w poprzednim punkcie, lecz nie więcej niż liczba cyfr do przetworzenia
[/item][/numlist]
To już wszystko na dzisiaj!
Zapraszam na stronę www.twójid.pl/bogacz.php
Wynik należy podać metodą get, jako action ciąg super, a odpowiedź w zmiennej answer.
=== EDYCJA === Oto kolejne zapytania i odpowiedzi: 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
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=superr&answer=01401920309689968
7439 6927 6293 0090 3411 3457 96 http://www.twójid.pl/bogacz.php?action=super&answer=0194054727014992630
7621 2394 9140 0099 6166 2774 http://www.twójid.pl/bogacz.php?action=super&answer=014796177
7170 0024 9 http://www.twójid.pl/bogacz.php?action=super&answer=0104 Bardzo fajna jest ostatnia para - może coś z tego odkryjecie.
8552 8290 9420 0262 6145 8681 http://twójid.pl/bogacz.php?action=super&answer=0191764454
7462 3531 2900 0922 1210 71 http://twójid.pl/bogacz.php?action=super&answer=2241327174
2878 6238 5247 0015 5691 7814 73 http://twójid.pl/bogacz.php?action=super&answer=5241854283460
PS: Czy bierze ktoś w tym udział?