Tomek opisał eksperymentalny serwer OpenID udostępniony przez Microsoft Research. Zainteresowały mnie te kleksy. Zwłaszcza ich potencjalne wykorzystanie do przeciwdziałania phishingowi.
Kleksy i antyphishing
Przy projektowaniu mechanizmów zabezpieczeń pewnego systemu wprowadziłem personalizowalny element graficzny, który w pewnym stopniu miał być zabezpieczeniem antyphishingowym (ot taka wersja współdzielonego sekretu). Problem w tym, że oryginalnie uwierzytelnienie miało być dwuskładnikowe (certyfikat klienta i tradycyjne username/password). Z różnych powodów ostało się samo username/password. Wówczas długo się zastanawiałem nad tym, czy ten obrazek ma sens. Bo tak, aby zaprezentować obrazek, muszę wiedzieć, kto chce się uwierzytelnić, czyli obrazek musi być prezentowany po podaniu nazwy użytkownika. Nie ma więc problemu, by podstawiona strona po podaniu loginu, łączyła się z właściwym serwisem, pobierała odpowiedni obrazek i prezentowała go użytkownikowi. Ostatecznie obrazek jest prezentowany dopiero po pełnym uwierzytelnieniu użytkownika. W teorii jeśli użytkownik zauważy, że obrazek się nie zgadza, ma możliwość zadziałania. Oczywiście, tutaj też nie ma problemu, by podstawiona strona wyświetliła poprawny obrazek, ale może komuś się nie będzie chciało tego zrobić, bo osiągnął już swój cel (ma nazwę użytkownika i hasło) i ma mniejszą motywację do dodatkowej pracy. Mimo wszystko uważam, że skuteczność rozwiązania została drastycznie zmniejszona.
A co z kleksami?Czy "kleksy" mogą być skuteczniejsze? W obecnej implementacji - nie. Dlaczego? Dlatego, że trywialne jest pobranie listy prezentowanych obrazków. Wystarczy wykonać następujący request:
http://inkblotpassword.com/blotList?userId=user_id&whichBlotList=existing
Odpowiedź wygląda (mniej więcej) w ten sposób:
existingBlots.ReplyBlotIndices([883, 818, 752, 162, 953, 955, 40, 73, 979, 124]); existingBlots.SetBlotCount(10);
Lista obrazków jest w ReplyBlotIndices. Obrazki mają proste nazwy typu blotABCD.png, gdzie oczywiście ABCD to identyfikator obrazka. Ilość obrazków do zaprezentowania, a co za tym idzie - długość hasła, pokazana jest w SetBlotCount.
Zrobienie podstawionej strony, która będzie prezentowała odpowiednie obrazki, nie jest więc trudne. Resumując: kleksy, w moim przekonaniu, nie będą zbyt skuteczne w walce z phishingiem.
Pewnie da sie to zrobic lepiej - na przyklad przesylanie kolejnego kleksa po dobrym wprowadzeniu danych do pierwszego itp.
Jezeli chodzi o zabezpieczenia anty-pishing to jak narazie chyba CardSpace tudziez para OpenID + CardSpace sprawdzaja sie w miare dobrze. A czy zostanie to przyjete jako powszechne rozwiazanie ... to sie zobaczy.
Anyway ciekawe podsumowanie mojej informacji .
Co do mechanizmów antyphishingowych, to uważam, że nie ma szansy żadna technologia, która nie eliminuje ataku *mitm*. W innym przypadku po prostu się da zrobić pośrednika.