WWW - ochrona danych użytkownika, teoria + trochę praktyki
26.03.2011 23:37
Witam.
Ostatnio nieco rozmyślałem o tym jak można ochronić użytkownika własnego portalu/www jednocześnie nie posiadając zbyt wiele powszechnych możliwości pod ręką.
I ot tak wymyśliłem jak bez użycia SSL zabezpieczyć logowanie do serwisu WWW, jednak jest to na razie samo logowanie.
SLS w praktyce
SLS bo tak nazwałem Mój pomysł na bezpieczne logowanie, jest to skrót od Secure Login System.
Całość zakłada użycia mocnych algorytmów kryptograficznych czyli AES, base64 co prawda nie jest mocnym algorytmem ale pomaga w przetransportowaniu danych (danych z AES'a nie można od tak sobie przenieść metodą POST czy GET bo wyglądają jak kod binarny) oraz MD5.
Testowy kod można zobaczyć tutaj: - Serwer (wklej.org) - Klient testowy w PHP (wklej.org) - Biblioteka AES (wklej.org)
Jeżeli powyższe linki nie są dostępne to tutaj jest drugie źródło: - Serwer - Klient - Biblioteka AES
Oczywiście dla rozjaśnienia całości podam prosty schemat implementacji SLS:
1. Użytkownik przechodzi rejestrację na której zostaje wygenerowane hasło i wysłane na e‑mail podany przy rejestracji. Zostaje też wygenerowany ciąg login_key oraz login_code
Login_code to zaszyfrowany ciąg znaków o wartości login_key przy pomocy klucza - hasła użytkownika.
2. Użytkownik próbując się zalogować wpisuje login i hasło, przeglądarka trzyma hasło w pamięci a wysyła sam login
3. Serwer otrzymując i rozpoznając login wysyła przeglądarce login_code
4. Przeglądarka rozszyfrowuje login_code używając hasła użytkownika jako klucza, otrzymuje login_key. Wysyła hasło użytkownika zaszyfrowane używając login_key jako klucza.
5. Serwer rozszyfrowuje wiadomość od przeglądarki używając login_key, jeżeli suma md5 zawartego w tej wiadomości hasła wynosi tyle samo co w bazie danych to autoryzuje użytkownika pozytywnie
6. Losowy ciąg znaków zostaje wpisany do pola login_key w bazie danych, następnie zaszyfrowany przy pomocy otrzymanego hasła użytkownika i wpisany do pola login_code dzięki czemu przy następnym logowaniu dostajemy nowy klucz co uniemożliwa zalogowanie się używając starego przez atakującego
Zalety rozwiązania: + Bezpieczeństwo jak przy SSL? + Nie ma potrzeby trzymania hasła w bazie danych, wystarczy posolony skrót md5/sha256/inny z hasła + Przydaje się kiedy nie mamy możliwości wprowadzenia SSL do naszego serwera
Wady rozwiązania: - Wymagany Javascript z obsługą Ajax (akurat nowsze przeglądarki zarówno w komputerach jak i tabletach i smartfonach obsługują Javascript i Ajax) - Można sprawdzić czy dany login istnieje w bazie wysyłając pierwsze zapytanie do serwera prosząc o login_code
Pierwsze testy logowania SLS
Logowanie SLS wymyśliłem na potrzeby własnego frameworka pisanego w PHP - OpenWikiBlog jako "atrakcyjny moduł" wbudowany, dostarczany razem z projektem.
Napisałem prostą implementację logowania - tylko test z użyciem PHP jako serwera oraz PHP jako klienta (mam większe doświadczenie z PHP dlatego łatwiej Mi było napisać w PHP klienta do testów).
SLS i ochrona prywatności użytkowników
Wyobraź sobie teraz, że możesz chronić dane użytkowników Twojego serwisu na tyle, że nawet Ty sam nie będziesz w stanie ich odczytać.
Można szyfrować poufne dane użytkownika takie np. jak prywatne notatki czy zakładki internetowe przy pomocy algorytmu Advanced Encryption Standard używając ich hasła jako klucza.
Odszyfrowanie tych danych byłoby możliwe tylko wtedy, gdy użytkownik jest zalogowany.
Pomyśl teraz, że nawet gdyby policja kazała udostępnić Ci dane któregoś z użytkowników to nie mogliby tych danych odczytać - wszystko zależałoby od użytkownika czy podałby hasło policjii.