| | Temat wykladu: |
| | Kryptografia: Jednokierunkowe funkcje skrótu i autoryzacja (by jaboja, 2007-09-05) @ wyklady.net |
20:30 | JaBoJa | Witam was na kolejnym wykladzie o kryptografii. |
20:31 | JaBoJa | Dzisiejszy poswiecony bedzie dosc przydatnej kwestii czyli autoryzacji |
20:31 | JaBoJa | Pokaze tez przykladowy skrypt PHP+JS do logowania bez potrzeby wysylania hasla do serwera |
20:32 | JaBoJa | Przejdzmy jednak do rzeczy |
20:32 | JaBoJa | W temacie uzyty zostal termin "jednokierunkowa funkcja skrotu" |
20:32 | JaBoJa | Takimi funkcjami sa na przyklad MD5 i SHA1, ktore omowie pozniej |
20:33 | JaBoJa | Generalnie idea jednokierunkowej funkcji skrotu zasadza sie na tym, aby z dosc dlugiego tekstu (czy mowiac ogolniej ciagu bitow) otrzymac skrot o stalej dlugosci, |
20:34 | JaBoJa | taki, ze na podstawie skrotu nie mozna odtworzyc ani oryginalnego tekstu, ani zadnego innego dajacego identyczny skrot |
20:35 | JaBoJa | jest to bardzo uzyteczne tam gdzie chcemy w jakis sposob umiescic odwolania do danych (np. hasla) w bazie danych, nie ujawniajac ich |
20:35 | JaBoJa | Zeby pokazac jak reaizuje sie takie funkcje w praktyce mniejwiecej przedstawie wam algorytm MD5 |
20:36 | JaBoJa | Daje on skrot o dlogosci 16 bajtow (w praktyce sa to 32 znaki ASCII stanowiace liczbe w systemie hexadecymalnym) |
20:36 | JaBoJa | Jest to 512 bitow |
20:37 | JaBoJa | I dlatego na poczatku uzupelniamy wiadomosc tak, aby jej dlugosc byla wielokrotnoscia 512 bez 64 bitow |
20:38 | JaBoJa | te 64 bity zawieraja informacje o dlugosci wiadomosci (aby ciagi z dopisanymi na koncu zerami mialy inne skroty niz te bez nich) |
20:38 | JaBoJa | tak powstaly ciag jest potem traktowany jako pewna ilosc 512 bitowych blokow podzielonych na 16 podblokow, ktore sa potem niezaleznie przetwarzane |
20:39 | JaBoJa | szczegoly tu pomine, jak ktos chce zaimplementowac algorytm znajdzie je w internecie |
20:39 | JaBoJa | wazne natomiast ze w trakcie przetwarzania tych blokow uzywane sa 4 nieliniowe funkcje, z ktorych dla przyklady podam jedna: |
20:40 | JaBoJa | F(X, Y, Z) = (X ^ Y) v (~X) ^ Z |
20:41 | JaBoJa | Dane sa przetwarzane z uzyciem tych funkcji i ostatecznie trudnosc odwrocenia funkcji jest tak duza, ze wymaga |
20:41 | JaBoJa | komputera z paroma gigabajtami pamieci, ktory odwraca ciag (nie pamietam ilo znakowy) w ok. 8 godzin |
20:42 | JaBoJa | (przy uzyciu Rainbow Tables) |
20:42 | JaBoJa | w internecie oczywiscie sa gotowe bazy danych skrotow, wiec skroty slow ze slownika znajdziemy bez problemu |
20:44 | JaBoJa | (dlatego jako hasla na np. forach nalezy w miare mozliwosci stosowac ciagi losowe, i to najlepiej z cyframi i liczbami) |
20:44 | JaBoJa | (zwykle slowa, nawet po polsku, w dostepnych w internecie bazach danych sa) |
20:44 | darkjames | ;e MD5 szybko sie lamie. |
20:45 | JaBoJa | niestety nie pamietam strony ktora pozwalala szukac tych skrotow |
20:45 | darkjames | On 18 March 2006, Klima published an algorithm[5] that can find a collision within one minute on a single notebook computer, using a method he calls tunneling. |
20:45 | JaBoJa | nawet nie wiedzialem |
20:45 | darkjames | (wikipedia) |
20:45 | JaBoJa | ale wlasnie ze wzgledu na ta lamliwosc MD5 w przykladzie ktory pokaze uzyte bedzie SHA1 |
20:46 | JaBoJa | Samego algorytmu SHA1 pokazywac nie bede, bo opiera sie na podobnej koncepcji jak MD5, tylko sposob "mieszania" danych jest nieco lepszy, no i daje dluzszy skrot |
20:47 | darkjames | ale imo sha1 tez za nie dlugo zlamia, sha512 nalezy uzywac ;) |
20:48 | JaBoJa | Wszystko da sie zlamac ;) |
20:48 | JaBoJa | To kwestia czasu |
20:48 | JaBoJa | Ale cos trzeba wybrac a SHA1 jest wbudowane w PHP :P |
20:48 | JaBoJa | W kazdym razie SHA1 daje skrot 20 bajtowy, a MD5 tylko 16 |
20:48 | JaBoJa | Co tez jest pewna zaleta |
20:50 | JaBoJa | Pierwotna wersja SHA byla ponadto szybsza od MD5, SHA1 juz niestety nie jest, ale i tak je polecam bardziej, bo jest bezpieczniejsze. |
20:51 | michu | http://forum.php.pl/index.php?showtopic=26365&hl=z%B3amane tu jest napisane ze SHA-1 jest zlamane |
20:51 | michu | czy to prawda?? |
20:52 | JaBoJa | Najwyrazniej tak |
20:52 | darkjames | no, sa ataki. ale dla przecietnego pcta nadal 2^69 to duzo. |
20:53 | JaBoJa | Pozatym czegos jakby nie bylo trzeba uzyc |
20:53 | michu | chyba Ĺźe mamy dobrego shela ktĂłry pracuje caly czas |
20:53 | JaBoJa | I nie ma moim zdaniem sensu marnowac czasu na implementowanie niewiadomo czego jesli zabezpieczamy strone na ktora wlamywac sie beda tylko domorosli hakerzy ktorzy wynalezli w internecie strone lamiacam MD5 |
20:54 | JaBoJa | Ale jak ktos chce to moze uzyc innej funkcji |
20:54 | JaBoJa | Chcialym teraz przejsc do samego algorytmu autoryzacji |
20:55 | JaBoJa | Uzywa on funkcji skrotu, ale moze to byc dowolna funkcja, to jakiej uzyjemy ma znaczenie dopiero na etapie implementacji (wielkosc pola w bazie danych etc.) |
20:56 | JaBoJa | Przyklad takiego systemu w dzialaniu znajduje sie pod adresem http://jagiello.dyndns.org/ (Firefox only) |
20:56 | JaBoJa | login: admin |
20:56 | JaBoJa | haslo: test |
20:57 | JaBoJa | Najpierw jednak przesledzmy algorytm logowania stosowany min. przez phpBB: |
20:58 | JaBoJa | 1. Serwer wysyla do uzytkownika HTMLowy formularz z polem loginu i hasla |
20:58 | JaBoJa | 2. Uzytkownik wysyla do serwera niezaszyfrowany login i haslo |
20:59 | JaBoJa | 3. Serwer tworzy skrot MD5 hasla i porownuje go ze skrotem znajdujacym sie w bazie danych w rekordzie z zadanym loginem |
20:59 | JaBoJa | 4. Jesli sie zgadzaja serwer aktoryzuje uzytkownika i ustawia mu stosowne ciasteczka pamietajace sesje |
21:00 | JaBoJa | Ja chcialbym wam zaproponowac algorytm ktory przenosi generacje skrotu hasla na komputer uzytkownika |
21:01 | JaBoJa | Cos podobnego uzyte jest na Epulsie, acz nie analizowalem go zbyt dokladnie (w kazdym razie szyfruje dane po stronie przegladarki) |
21:01 | JaBoJa | Algorytm wzorowany jet na algorytmie SKID2 ktory jest nastepujacy: |
21:02 | JaBoJa | 1. Uzytkownik A generuje liczbe losowa Ra i wysyla ja do uzytkownika B |
21:03 | JaBoJa | 2. Uzytkownik B generuje liczbe losowa Rb i wysyla ja do A, wraz z wartoscia jednokierunkowej funkcji MAK z polaczonych Ra, Rb i nazwy uzytkownika B |
21:03 | JaBoJa | 3. Uzytkownik A generuje podobny skrot i porownuje go z tym otrzymanym |
21:05 | michu | mam pytanie czy to jest bezpieczne? |
21:06 | michu | czy uĹźytkownik moĹźe przejÄ?Ä? w jakiĹ? sposĂłb algorytm szyfrujÄ?cy? |
21:06 | JaBoJa | to mu nic nie da |
21:06 | JaBoJa | bo moze zaszyfrowac, ale nie moze zdeszyfrowac |
21:06 | michu | aha |
21:06 | JaBoJa | ale rozwazmy to w zmodyfikowanej formie jakiej uzylem: |
21:08 | JaBoJa | 1. Serwer przesyla formularz z polem loginu, polem hasla (ktore nie jest przesylane), ukrytym polem hasla (ktore jest wypelniane przez JS przed przeslaniem) i ciasteczko zawierajace liczbe losowa SSID |
21:09 | mulander | a nie lepiej cala transakcje po https przeprowadzic? |
21:09 | JaBoJa | lepiej ;) |
21:09 | mulander | pozatym jezeli ciebie dobrze zrozumialem |
21:09 | mulander | to potrzebujesz 2 userow online, by zalogowac jednego |
21:09 | JaBoJa | Nie |
21:09 | JaBoJa | uzytkownik A to serwer, uzytkownik B to przegladarka |
21:09 | mulander | ah :) |
21:10 | JaBoJa | 2. Przegladarka generuje SHA1(SSID.login.SHA1(haslo)) i wypelnia ta wartoscia ukryte pole hasla |
21:12 | michu | a SSID jak rozumiem przesyĹ?ane jest przez cookies |
21:12 | JaBoJa | 3. Serwer otrzymuje od przegladarki: login, SSID (w ciastku) i wczesniej wygenerowany skrot |
21:12 | JaBoJa | ;) |
21:12 | JaBoJa | 4. Serwer oblicza ten sam skrot i porownuje go z tym co otrzymal |
21:13 | mulander | imho to jest bieganie w kolko dalej, jezeli ktos jest w stanie przechwycic wymiane w plain text, to przechwyci rowniez dane przesylane przez obie strony. Wiec jaki jest tego cel? |
21:13 | JaBoJa | i co mu da ze przechwyci? |
21:13 | JaBoJa | hasla nie odczyta |
21:13 | mulander | uzyska autoryzacje. |
21:13 | JaBoJa | jak? |
21:13 | mulander | mitm |
21:13 | darkjames | mulander, to jest autoryzacja na to 1 polaczenie. |
21:14 | JaBoJa | legalny uzytkownik zostanie zalogowany, SSID straci waznosc |
21:14 | JaBoJa | nie uzyje go po raz drugi |
21:14 | JaBoJa | (to nie jest do konca u mnie zaimplementowane bo tylko zasade dzialania chcialem pokazac) |
21:14 | mulander | ok inaczej browser <----- intruz -----> server |
21:15 | michu | to moĹźe byÄ? tak tylko przy lanie |
21:15 | JaBoJa | jasne, jesli intruz bedzie sie podawal za serwer to trudna sprawa |
21:15 | michu | niezabezpieczonym |
21:15 | JaBoJa | trzeba uzyc podpisow elektronicznych, ale to juz zbyt skomplikowane do stosowania na zwyklych stronach WWW |
21:15 | Armandesu | michu, niekoniecznie... mozesz oszukiwac serwery dns.... |
21:15 | Armandesu | i intruz moze sie podac za serwer |
21:16 | michu | no ale to wyĹźsza szkoĹ?a jazdy ja tego nie umiem |
21:16 | JaBoJa | w kazdym razie hasla nie uzyska nawet jak poda sie za serwer |
21:16 | JaBoJa | moze co najwyzej przechwycic to konkretne polaczenie |
21:17 | JaBoJa | Chcialbym przejsc do implementacji, wiec jesli cos jeszcze jest niejasne to pytajcie |
21:17 | mulander | all clear, keep going |
21:17 | michu | a co z rejestracja |
21:17 | michu | bo to logowanie |
21:17 | JaBoJa | rejestracji nie uwzglednialem, bo wyklad mial byc o autoryzacji |
21:18 | michu | aha ok |
21:18 | JaBoJa | jesli zrobisz ja plaintekst przez neta, to intruz moze se wykrasc haslo i buszowac |
21:18 | Armandesu | to w tym wypadku intruz jedynie moze przejac dana sesje |
21:18 | Armandesu | mam na mysli goscia posrodku |
21:19 | JaBoJa | tak |
21:19 | Armandesu | man in midle czy jakos tak... |
21:19 | JaBoJa | ano |
21:19 | Armandesu | ok... ale hasla nie pozna |
21:19 | mulander | caly sens w hasle to ograniczenie dostepu panowie :) |
21:20 | JaBoJa | wiesz, jesli chcemy aby logowanie bylo mozliwe z kazdego komputera (np. w kafejce, w szkole) to uniknac man in the middle praktycznie sie nie da |
21:20 | mulander | wiec troche mnie to dziwi czemu uwazacie ze przejecie sesji jest nie grozne? |
21:20 | Armandesu | ok, mi sie podoba |
21:20 | Armandesu | sesje moze przejac... zmiana hasla aby przejac konto wymaga podania hasla |
21:20 | JaBoJa | nawet HTTPS nic nie da bo MIM moze sobie postawic serwer na HTTPS a jak uzytkownik wchodzi w danym miejscu na ta strone pierwszy raz to nie kapnie sie ze jest inny klucz |
21:20 | Armandesu | starego i nowego a go nie zna |
21:21 | darkjames | JaBoJa, po to jest fingerprint, i sie porownuje. |
21:21 | mulander | Armandesu: ale dalej drazysz haslo. |
21:21 | mulander | Armandesu: a nie bierzesz pod uwage innych elementow do ktorych moze uzyskac dostep po przejeciu sesji. |
21:21 | mulander | :) |
21:22 | Armandesu | mulander: to zalezy do czego gosc ma dostep |
21:22 | Armandesu | mulander: admin raczej z kafejki sie nie bedzie logowac |
21:22 | mulander | Armandesu: ok, przejmujac sesje zalozmy na allegro - musze znac haslo by uznac to za grozna sytuacje? :) |
21:23 | JaBoJa | na man in the middle jest tez sposob, acz trzeba by sie troche w AJAXa pobawic |
21:23 | JaBoJa | vide: |
21:23 | Armandesu | mulander: dlatego nie robimy tego z nieznanych kompow |
21:23 | mulander | mulander: na swoich uzytkownikow nie masz wplywu. |
21:23 | mulander | tfu |
21:23 | mulander | Armandesu mialo byc |
21:24 | darkjames | umiecie krasc strumienie szyfrowane? |
21:24 | JaBoJa | serwer przesyla parzyste bity obrazka ktorego zawartosc jest znana userowi, uzytkownik przesyla parzyste bity jakiegos powiedzmy kolejnego skrotu hasla, potem serwer przesyla nieparzyste bity, uzytkownik nieparzyste i jesli jest MIM to cos musi sie nie zgadzac |
21:24 | Armandesu | fakt... innymi slowy MIM nas rozwali |
21:25 | darkjames | JaBoJa, to to samo co https, tylko ze w brzydszym opakowaniu. |
21:25 | JaBoJa | no nie do konca, bo w HTTPS jest to robione automatycznie, a co za tym idzie, jesli glupi uzytkownik pojdzie do kafejki to sie nie kapnie ze ktos jest posrodku |
21:26 | JaBoJa | a tak to na wlasne oczy widzi ze cos sie nie zgadza |
21:26 | JaBoJa | ale zostawmy to, czas na impelmentacje tego logowania: |
21:26 | JaBoJa | Najpierw struktura bazy danych ktorej uzylem: |
21:26 | JaBoJa | dwie tabele: login i users |
21:26 | JaBoJa | login zawiera pola: |
21:27 | JaBoJa | SSID: BINARY(16) |
21:27 | JaBoJa | IP: int(10) |
21:27 | JaBoJa | time: int(11) |
21:27 | JaBoJa | uid: smallint |
21:28 | JaBoJa | IP przechowuje w formie binarnej aby zajmowalo mniej miejsca |
21:28 | JaBoJa | tabela users: |
21:29 | JaBoJa | uid: smallint (klucz) |
21:29 | JaBoJa | name: varchar(64) (UTF-8) |
21:29 | JaBoJa | pwd: binary(40) (czyli tyle ile zajmuje SHA1 w formie ASCII) |
21:31 | JaBoJa | W PHP mam klase db ktora w konstruktorze loguje sie do bazy MySQL |
21:32 | JaBoJa | i ma dwie metody: query($q) (zwraca tablice bedaca wynikiem zapytania) oraz escape($s) dodajaca sekwencje ucieczki uwzgledniajac kodowanie znakow danego polaczenia z MySQL |
21:32 | JaBoJa | kody zrodlowe sa w pliku dolaczonym do tematu na forum: |
21:32 | JaBoJa | widac to w pliku |
21:32 | JaBoJa | http://forum.wyklady.net/index.php?topic=116.0 |
21:33 | Annihilator | <@JaBoJa> IP przechowuje w formie binarnej aby zajmowalo mniej miejsca - szkoda, że przy >10 000 może rzutować na procesor to rozkminianie tej binarności :) |
21:33 | Annihilator | Liczba, którą podałem, to liczba userów jednocześnie :> |
21:33 | darkjames | Annihilator, what? |
21:34 | JaBoJa | no to sobie mozesz uzyc w varchar |
21:34 | JaBoJa | no nie czepiajmy sie pierdol |
21:34 | Annihilator | No tylko mowie, widziałem serwis o większej odwiedzialności i kazda pierdoła MA znaczenie, nie tylko taka |
21:34 | Annihilator | :-) |
21:35 | darkjames | Annihilator, porownanie liczby 4 bajtowej, to jest jedna operacja w asmie. |
21:35 | darkjames | porownanie 15 znakowego chara to juz jest wiecej. |
21:35 | JaBoJa | ale z drugiej strony na darmowych serwerach zdazaja sie drakonskie limity wielkosci bazy |
21:35 | JaBoJa | zalezy gdzie ma trafic skrypt |
21:36 | Annihilator | darkjames, mówię, że widziałem taki serwis - epuls.pl, gdzie jest pare baz z jedną tabelą - tam po przeformatowaniu jest zapisane WSZYSTKO, by było jak najwydajniejsze |
21:36 | darkjames | nie wiem jak w pehape, ale pewnie tez tam jest taniej porownac inta, niz chara. |
21:37 | Annihilator | Zależy kto to jeszcze porówna - jak baza to już w ogóle cześć gitara ( a najlepiej zwalić wszystko na bazę, po to ona jest ) |
21:37 | Annihilator | Przy ogromnych serwisach oszczędza się na wszystkim, na czym tylko się da :) |
21:38 | JaBoJa | ok, idzmy dalej :) |
21:38 | Annihilator | Ok ;-) |
21:38 | JaBoJa | mam w skrypcie kolejna klase sha1_login |
21:39 | JaBoJa | w konstruktorze zapamietuje ona IP, wywoluje metode sprawdzajaca cookie i w razie czego generuje nowy SSID |
21:40 | JaBoJa | (tu nalezaloby jeszcze zastanowic sie co z SSID po zalogowaniu, ale poniewaz moj skrypt po zalogowania tylko pisze ze zalogowano, wiec to olalem) |
21:41 | JaBoJa | sprawdzanie ciasteczka z SSID wyglada nastepujaco: |
21:42 | JaBoJa | 1. Sprawdzamy czy wogole jest, jesli nie to rzecz jasna return false |
21:42 | JaBoJa | 2. Sprawdzamy czy dlugosc sie zgadza (u mnie jest to 16 przechowywane w stalej "len") |
21:43 | JaBoJa | 3. Kasujemy z tabeli `login` te sesje ktore przekroczyly limit czasu |
21:44 | JaBoJa | 4. Sprawdzamy czy istnieje taka gdzie SSID i IP sie zgadzaja z tymi ktore dostalismy od uzytkownika |
21:45 | JaBoJa | jesli wszystko jest ok funkcja zwraca SSID, inaczej konstruktor dostaje false i wywoluje metode ssid() generujaca nowe ciasteczko |
21:45 | JaBoJa | metoda ta najsampierw wywoluje metode generujaca losowy ciag znakow ASCII o zadanej dlugosci: |
21:46 | JaBoJa | protected function randomStr($len) { |
21:46 | JaBoJa | $s = ''; |
21:46 | JaBoJa | for ($i=0; $i<$len; ++$i) |
21:46 | JaBoJa | $s .= chr(mt_rand(32, 126)); |
21:46 | JaBoJa | return $s; |
21:46 | JaBoJa | } |
21:47 | JaBoJa | Potem wsadzamy SSID do bazy wraz z IP i znacznikiem czasu + dlugosc sesji (u mnie jest to 500 sekund przechowywane w stalej "ttl") |
21:47 | JaBoJa | no i ustawiamy ciastko z taka sama data waznosci jak ta dodana do bazy |
21:49 | JaBoJa | wazne ze jesli nawet uzytkownik cos zacznie kombinowac z waznoscia ciastka to w bazie mamy date ktora zapewni ze nie zostanie uzyte jakies stare przechwycone przez kogos kto akurat wszedl do kafejki internetowej i znalazl sobie w temporary internet files |
21:49 | JaBoJa | w praktyce jeszcze lepiej niz ciastko nadal by sie tu pewnie AJAX, bo mozna by pobrac SSID w momencie naciskamnia przycisku wysylajacego formularz a czas waznosci zredukowac do paru sekund |
21:51 | JaBoJa | Gdy skrypt wykryje ze dostal przez $_POST dane do zalogowania wywoluje w omawianej klasie metode auth(login, haslo) |
21:52 | JaBoJa | (to sie nazywa u mnie odpowiednio $name i $hash) |
21:52 | JaBoJa | Co sie dzieje w tej funkcji: |
21:53 | JaBoJa | 1. Pobieramy z bazy danych SHA1 z hasla (samo haslo nie jest tam przechowywane) |
21:53 | JaBoJa | przy okazji w tym kroku mozemy odrzucic niepoprawne loginy, bo zapytanie zwroci false |
21:54 | JaBoJa | 2. Obliczamy sha1("{$name}.{$pwd}.{$this->ssid}") |
21:54 | JaBoJa | $name - login, $pwd - to co odczytalismy z bazy, ssid - to co bylo w ciastku (lub zostalo wygenerowane, ale wtedy na pewno nie bedzie sie zgadzac) |
21:55 | JaBoJa | 3. Ostatecznie sprawdzamy czy to co wygenerowalismy pokrywa sie z tym co wygenerowal uzytkownik |
21:56 | JaBoJa | I to by bylo na tyle. Jesli wszystko poszlo dobrze (uzytkownik nie uzywal IE i podal poprawny login i haslo zanim wygasla mu sesja) uzytkownik dostaje komunikat informujacy ze jest zalogowany |
21:57 | JaBoJa | Pozostaje jeszcze kwestia JavaScript: |
21:58 | JaBoJa | uzylem tu funkcji obliczajacej SHA1 zaczerpnietej ze strony: |
21:58 | JaBoJa | http://www.movable-type.co.uk/scripts/sha1.html |
21:58 | JaBoJa | funkcje odczytujaca ciasteczka tez wzialem z internetu: |
21:58 | JaBoJa | http://www.quirksmode.org/js/cookies.html |
21:59 | JaBoJa | poza tym jest jeszcze funkcja wywolywana w onsubmit formularza ktora generuje sha1(name + '.' + pwd + '.' + ssid) |
22:00 | JaBoJa | i bawi sie polami formularza w tym celu (warte uwagi jest tylko czyszczenie pola hasla, tak na wszelki wypadek) |
22:03 | JaBoJa | I to byla by juz kompletna implementacja tego przykladu. |
22:03 | JaBoJa | Oczywiscie mozna to ulepszac (rzekl bym ze nawet trzeba) |
22:04 | Armandesu | JaBoJa: przewidujesz dalsza czesc wykladu tj. po zalogowaniu? |
22:04 | JaBoJa | Chcialem pokazac jednak ze standardowe niewielkie bezp. logowania da sie poprawic, nawet jesli nie mamy dostepu do SHA1 |
22:04 | JaBoJa | Nie |
22:04 | Armandesu | szkoda |
22:04 | JaBoJa | Wlasciwie to potem trzeba wygenerowac nowy identyfikator sesji |
22:04 | JaBoJa | Wyslac go w ciastku i zapisac w bazie |
22:05 | JaBoJa | Wszelkie wazne dane pamietamy na serwerze |
22:05 | Armandesu | a proba zmiany hasla? |
22:05 | Armandesu | jak by miala wygladac, da sie jakos to ukryc? |
22:05 | JaBoJa | Trzeba by stworzyc cos podobnego jak tu, tyle ze na serwer musi trafic jeszcze SHA1 z nowego hasla |
22:06 | JaBoJa | Mamy natomiast do dyspozycji SHA1 ze starego, wiec mozemy zrobic XOR obu |
22:06 | JaBoJa | i go przeslac |
22:07 | JaBoJa | serwer ma w bazie SHA1 starego hasla wiec zdekoduje ten XOR |
22:07 | JaBoJa | osoba podsluchujaca niestety skrotu hasla nie zna, wiec nic to jej nie da |
22:07 | Armandesu | ok |
22:07 | JaBoJa | no chyba ze zainstalowala trojana, ale to inna sprawa, bo jak trojan ma key-loggera, to mozemy sie bawic... |
22:08 | Armandesu | podejscie mi sie podoba |
22:09 | Armandesu | mam nadzieje ze jakis jeszcze ciekawy wyklad poprowadzisz |
22:10 | Armandesu | rownie ciekawy |
22:10 | JaBoJa | a wracajac do man in the middle, to jak pomyslalem to dochodze do wniosku ze i to daloby sie zabezpieczyc |
22:10 | Armandesu | jak? |
22:10 | JaBoJa | gdyby serwer przesylal fragmenty informacji ktora mozna uzyskac z hasla |
22:11 | JaBoJa | tzn. wyliczamy cos dziwnego z hasla (np. SHA(SHA(haslo).SSID)) i przesylamy parzyste bity |
22:11 | JaBoJa | klient przesyla parzyste bity swoich danych |
22:11 | JaBoJa | my mu odsylamy reszte naszych on odsyla nam |
22:11 | JaBoJa | i po obu stronach sprawdzamy czy wszo sie zgadza |
22:12 | Armandesu | no i w koncu logujesz goscia.... i mim przejmuje sesje |
22:13 | JaBoJa | nie wiem czy dobry przyklad ci podalem |
22:13 | JaBoJa | w kazdym razie chodzi o to zeby |
22:14 | JaBoJa | przeslac tylko polowe danych ktorych MIM nie moze przeslac dalej, bo musialby w nie zaingerowac aby sie ukryc |
22:14 | JaBoJa | musialbym pomyslec |
22:14 | JaBoJa | pewnie trzebaby tam dodac w srodek IP serwera czy cos takiego |
22:14 | JaBoJa | hmm... to chyba juz by wystarczylo |
22:15 | JaBoJa | chyba ze MIM by nam i IP falszowal |
22:15 | Armandesu | wystarczy arpy pozmieniac, jakos tak |
22:15 | Armandesu | wiec istnieje mozliwosc.... |
22:15 | JaBoJa | no to dochodzimy do tego ze trzeba uzyc HTTPS |
22:16 | Armandesu | to chyba zalezy od tego do czego mamy uzyc to logowanie |
22:16 | Armandesu | i jak wazne sa dane |
22:16 | Armandesu | jak istotne |
22:16 | JaBoJa | wiesz, do forum klasy 1B w gimnazjum jakimstam, to mozna zwyklego plainteksta |
22:17 | JaBoJa | :P |
22:17 | Armandesu | wiec kwestia logowania zalezy od waznosci serwisu |
22:17 | Armandesu | :) |
22:18 | JaBoJa | a jak juz chcesz sie bawic w 100% bezpieczenstwa bez HTTPS to musisz zaimplementowac RSA w JavaScript |
22:18 | JaBoJa | ale to moze byc dosc wolne |
22:18 | JaBoJa | i wtedy MIM by moze i mogl przeslac polowe bitow do klienta, ale by potem nie wiedzial co jest odsylane, bo byloby juz szyfrowane |
22:19 | Armandesu | az tak obeznany w algorytmach nie jestem.... ale z pewnoscia doczytam |
22:19 | JaBoJa | o co tu chodzi: |
22:19 | JaBoJa | serwer wysyla polowe bitow klucza RSA, nic one nikomu nie dadza same w sobie |
22:20 | JaBoJa | klient wysyla polowe danych do serwera |
22:20 | JaBoJa | serwer wysyla druga polowe klucza klientowi |
22:20 | JaBoJa | klient moze teraz na przyklad zaszyfrowac druga polowe danych tym kluczem |
22:21 | JaBoJa | jako ze RSA jest niesymetryczne MIM zostaje z kluczem publicznym serwera i zakodowanymi danymi wysylanymi przez usera |
22:23 | Armandesu | pozostaje tylko to zaimplementowac ;) |
22:24 | JaBoJa | hmm... tylko i klucz trzeba tu szyfrowac np. haslem uzytkownika, zeby MIM nie wygenerowal wlasnej pary kluczy |
22:24 | JaBoJa | to by dopiero dawalo 100% bezpieczenstwa (a i tego nie jestem pewien) |
22:24 | JaBoJa | ale jak chcesz to mozesz implementowac :) |
22:24 | Armandesu | :) |
22:24 | JaBoJa | ja jednak bym tu uzyl po prostu HTTPS |
22:24 | Armandesu | innymi slowy internet nie byc bezpieczny |
22:25 | JaBoJa | nie przesadzal bym |
22:25 | JaBoJa | http nie byc bezpiecznym |
22:25 | JaBoJa | ale sa protokoly ktore sa bezpieczne |
22:25 | JaBoJa | i szczerze mowiac nie jestem pewien czy HTTPS sie do nich zalicza |
22:25 | Armandesu | thx za wyklad, musze znikac |
22:25 | JaBoJa | dobranoc |
22:25 | Armandesu | dobranoc |
22:26 | JaBoJa | zanim i ja pojde, tak na wszelki wypadek: czy sa jeszcze jakies pytania? |
22:26 | JaBoJa | tak wiec dobranoc! |