Skocz do…
czyli czemu OpenID jest trzy razy mniej bezpieczny od zwykłego hasła.
Na początek jakie niebezpieczeństwa (poza możliwością odgadnięcia lub kradzieży hasła) kryją się za zwykłym logowaniem z hasłem. Oczywiście problemem jest atak typu man in the middle, tzn. jeśli komuś uda się podsłuchać komunikację przeglądarka-serwer to pozna hasło użytkownika.
Teraz co się kryje za OpenID? W OpenID zalecane jest stosowanie delegacji, tzn. w dużym skrócie zapisanie adresu dostawcy usługi np. na swojej stronie (w taki sposób, że systemy logowania OpenID są w stanie ten adres odczytać), aby potem przy logowaniu podawać jako swój identyfikator adres np. naszej strony. Delegacja jest bardo pożytecznym mechanizmem, gdyż pozwala w szybki sposób zrezygnować z jakiegoś dostawcy usługi OpenID–wystarczy zmienić wpis na naszej stronie, zamiast zmiany ustawień na dziesiątkach serwerów.
Jak zatem wygląda uwierzytelnianie OpenID? W dużym skórcie, z wykorzystaniem delegacji,identyfikator wpisany przez użytkownika jest przekształcany na adres serwera, z którym strona się łączy (kanał A), aby zostać oddelegowanym do dostawcy usługi OpenID (kanał B), który uwierzytelnia użytkownika (np. hasłem) (kanał C) i odsyła informację o sukcesie bądź porażce stronie, która rozpoczęła całą zabawę.
Scenariusz pierwszy: Ktoś przejął kontrolę nad kanałem A, loguje się na stronie podając identyfikator ofiary, dzięki przejęciu kontroli nad kanałem A przesyła od razu informacje o tym, iż uwierzytelnianie się powiodło i kończy zabawę.
Scenariusz drugi: Ktoś przejął kontrolę nad kanałem B, loguje się na stronie podając identyfikator ofiary, strona pobiera adres dostawcy usługi i łączy się z nim, ale ponieważ kanał B jest skompromitowany atakującemu udaje się włamać do systemu.
Scenariusz trzeci: Ktoś przejął kontrolę nad kanałem C i teraz tak samo jak w zwykłym ataku na hasło może je podsłuchać.
Owszem, można mieć wątpliwości czy te rozważania wystarczą, aby stwierdzić, iż OpenID jest trzy razy mniej bezpieczny od zwykłego logowania na podstawie nazwy użytkownika i hasła, ale pokazują jedną rzecz: Jeżeli nie używasz połączeń szyfrowanych z uwierzytelnianiem to jedyne co OpenID Ci daje to większa wygoda (jeden login, jedno hasło) za cenę mniejszego bezpieczeństwo.
Wynika z tego, iż zarówno serwer z zapisaną delegacją jak i dostawca usługi OpenID muszą posiadać wykupione certyfikaty u powszechnie uznawanych centrów certyfikacji. Musimy ponadto mieć nadzieję, że strona, na której chcemy się uwierzytelnić naszym bezpiecznym identyfikatorem będzie sprawdzać poprawność certyfikatów i nie przyjmie self signed certificates ani certyfikatów podpisanych przez jakieś centra, które nie sprawdzają tożsamości podmiotu.
To wszystko rzuca cień na ideę wielkiej otwartości standardu. Niby każdy może dostarczać usługi OpenID, a delegacja może być na dowolnej stronie, ale aby nie wpaść w pułapkę braku bezpieczeństwa należy wydać pieniążki na certyfikaty, a to troszkę utrudnia sprawę.
Kiedyś bardzo nie lubiłem mechanizmów zapamiętywania haseł w przeglądarkach internetowych, ale teraz dochodzę do wniosku, iż o ile hasła te są szyfrowane hasłem głównym, jest to całkiem dobry i bezpieczny mechanizm. Pozwala on na generowanie losowych haseł dla każdej strony (chociażby przez head -c 20 /dev/random | sha1sum) dzięki temu nawet jeżeli ktoś wykradnie hasło do jakiejś strony to wszystkie inne są bezpieczne, a my tymczasem musimy znać jedynie hasło główne naszego zarządcy haseł.
Innym ciekawym rozwiązaniem jest generowanie za pomocą JavaScript haseł na podstawie jakiegoś ciągu specyficznego dla danej strony (np. adresu) oraz naszego hasła głównego (np. sha1_hmac(adres, haslo). Skrypt do generowania możemy trzymać na naszym dysku lokalnym. Ma to tę zaletę nad zarządcą haseł, że jest przenośne pomiędzy przeglądarkami. Problemem jest to, że raz ustawionego hasła głównego nie można już zmienić, można to próbować obejść trzymając w skrypcie zaszyfrowany naszym hasłem głównym klucz służący do generowania haseł (czy zwiększy to poziom bezpieczeństwa jest jednak kwestią dyskusyjną).
Komentarze
Logowanie zwykłym hasłem jest równie niebezpiecznie! Atakujący może skompromitować kanał A, między mózgiem użytkownika, a klawiaturą; kanał B, między klawiaturą, a komputerem; kilka kolejnych kanałów na drodze z kontrolera klawiatury do przeglądarki! Czy może być coś niebezpieczniejszego?! Najlepiej od razu wyłączyć komputer i schować się w kąt.
PS. Ktoś tu chyba nie rozumie zastosowania OpenID.
„Ktoś tu chyba nie rozumie zastosowania OpenID.” —możliwe, w takim razie prosiłbym o wyjaśnienie, bo ja nie widzę dla OpenID zastosowania.
Zastosowanie dla OpenID to durne wordpressy, stawiane na własnych serwerach.
I w czym jest on lepszy od menadżera haseł, w przeglądarce Internetowej?
Tym, że nie musisz się rejestrować na każdym z nich z osobna.
@mina86 – w jaki sposób zapewnić logowanie się do serwisów internetowych za pomocą metod biometrycznych, kluczy sprzętowych itd? OpenId to wszystko umożliwia (choć nie jest to jeszcze popularne) – wystarczy, że któryś dostawca openid wprowadzi taki sposób uwierzytelniania użytkowników.
Sposób przechowywania twojej tożsamości sieciowej można porównać do przechowywania pieniędzy – gdzie je trzymasz? W domu czy może jednak w banku? Bank też każdy może założyć (podobnie jak każdy może być dostawcą openid), ale jednak potrafimy wybrać te, którym można zaufać.
Bank może założyć każdy dla pewnych definicji słowa „każdy”. I czy, aby na pewno potrafimy wybrać te, którym można zaufać, czy może po prostu są one obwarwoane tyloma przepisami, że ostatecznie mamy wysoki poziom bezpieczeństwa? Mnie się wydaje, że jednak to drugie.
Jestem przekonany, iż wraz ze wzrostem popularności OpenID coraz więcej osób będzie korzystać z dostawców, którzy niekoniecznie są bezpieczni (choć to zależy od tego co ktoś rozumie przez „bezpieczny”).
Wg mnie OpenID nie ma zastosowania w niczym więcej niż, jak to Michał Górny określił, durne wordpressy, stawiane na własnych serwerach.
co do serwerów przechowujących tożsamość (openId), to racja – każdy wybiera na jaki się autoryzuje. O bezpieczeństwo można zadbać – wystarczy trochę pokombinować.
Co do durnych wordpressów… poczytajcie sobie o dataportablility… jeden login to tylko wierzchołek góry lodowej.