The Great KeePass Debate
Tytuł tego wpisu jest celowo mylący, wcale nie mam zamiaru debatować. Chcę natomiast odnieść się do tego komentarza. Adam napisał:
Nie rozumiem ludzi którzy korzystają z takich bajerów jak zapamiętywanie haseł za pośrednictwem programów czy serwerów, kiedy wystarczy sobie napisać własną funkcję i miksować 1 hasło przez url + md5, base64 itd, a na koniec np ucinać do 10 znaków i w 2ga stronę nie jest to możliwe do odtworzenia w praktyce.
Różnica między KeePass a opisanym przez Adama podejście jest taka, że hasło generowane przez KeePass jest losowe (właściwie: może być losowe, jeśli użytkownik sobie takie wygeneruje), natomiast hasło uzyskiwane w wyniku opisanej metody jest “wyprowadzane” na podstawie kilku danych wejściowych. Jeśli ktoś będzie w stanie odgadnąć “hasło główne” oraz ustalić sposób “wyliczania” hasła “docelowego”, będzie w stanie uzyskać hasło dla dowolnej strony. Mamy tutaj security through obscurity (tajny sposób “wyliczania” hasła) oraz swoisty class break. Co z tego wynika? Nic.
“Wynikowe” bezpieczeństwo jest zawsze kompromisem między wygodą, a “poziomem bezpieczeństwa”. Każdy z nas ma różne oczekiwania co do poziomu bezpieczeństwa, albo inaczej – jest w stanie zaakceptować inne ryzyko. Każdy jest również w stanie zaakceptować inny poziom upierdliwości przyjętego rozwiązania. Ja nie jestem w stanie zaakceptować uciążliwości związanych z hasłem maskowanym, dla innych brak hasła maskowanego sprawa krytyczna, przez którą nie mogą spać po nocach...
Warto zastanowić się nad tym tekstem Schneiera: How to Think About Security. Ja tutaj posłużę się nieco innymi pytaniami pochodzącymi z Beyond Fear:
- What assets are you trying to protect?
- What are the risks to these assets?
- How well does the security solution mitigate those risks?
- What other risks does the security solution cause?
- What costs and trade-offs does the security solution impose?
Jakie mogę udzielić odpowiedzi na te pytania w kontekście używania KeePass czy Password Safe (ale już nie LastPass)?
Pierwsze pytanie: jakie zasoby staram się chronić? Odpowiedź wydaje się prosta – hasła. W rzeczywistości wartością nie są hasła same w sobie, ale to, do czego te hasła dają dostęp. Druga część odpowiedzi na to pytanie jest nieco przewrotna – kolejnym zasobem, który staram się chronić, jest moja pamięć :)
Drugie pytanie: jakie są ryzyka? Jeśli chodzi o pamięć, to głównym ryzykiem jest to, że hasła zapomnę i utracę dostęp do zasobu, który chroni to hasło, albo co najmniej narażę się na konieczność przejścia procedury odzyskiwania hasła. Jeśli chodzi o hasła (i pośrednio chronione przez nie zasoby), to ryzyk jest wiele, w szczególności:
- odgadnięcie hasła (bo jest za łatwe),
- podglądnięcie hasła (bo ktoś stoi za plecami i podgląda jak je wpisuje),
- podsłuchanie hasła (keylogger na komputerze, z którego korzystam lub podsłuchanie hasła w trakcie transmisji),
- “wyciek” hasła z serwisu “docelowego”,
Część z tych ryzyk pozostaje poza moją kontrolą. Mogę korzystać z trudnych haseł, sprawdzać czy ktoś za mną nie stoi oraz korzystać wyłącznie z komputerów, do których mam zaufanie, ale to niewiele pomoże, jeśli komunikacja z usługą, z której korzystam, odbywa się bez szyfrowania lub jeśli hasła wyciekną z serwisu (w postaci jawnej lub w postaci łatwych do złamania hashy). Mogę co najwyżej minimalizować skutki takiego zdarzenia. Robię to używając różnych haseł dla różnych stron/usług/serwisów. Dodatkowo jeśli moje hasła są długie i złożone, to nawet jeśli wyciekną w postaci łatwych do złamania hashy, to i tak atakującemu nie będzie się opłacało inwestować czasu w ich łamanie.
Biorąc pod uwagę to, co napisałem powyżej, głównym ryzykiem, przed którym chcę się chronić jest to, że udane włamanie do serwisu Foo , w którym mam konto spowoduje, że atakujący uzyskają moje hasło dostępu do serwisu Bar , w którym zasoby są być może bardziej wartościowe, niż te w Foo.
Kolejne pytanie: czy to działa? Ponieważ korzystam z KeePass, dla każdego serwisu tworzę losowe, długie i unikalne hasło. Nawet jeśli to hasło zostanie przechwycone lub wycieknie z serwisu, atakujący nie uzyska automatycznie dostępu do pozostałych kont, które posiadam. Odpowiedź na to pytanie brzmi: tak, to działa i to działa całkiem dobrze. Dobrze działa to również w zakresie oszczędzania mojej pamięci. Muszę pamiętać tylko jedno hasło, dzięki któremu uzyskuję dostęp do bazy haseł (na podstawie którego generowany jest klucz wykorzystywany przy jej szyfrowaniu).
Czwarte pytanie jest ważne: jakie inne ryzyka powoduje rozwiązanie, z którego korzystam? Czy korzystanie z KeePass (or compatible) powoduje jakieś nowe ryzyka? W skrócie: tak.
A teraz trochę mniej skrótowo. Przede wszystkim zapisując swoje hasła tworzę nowy zasób, który jest bardzo wartościowy, i który muszę chronić. Muszę go chronić zarówno przed dostępem osób trzecich i ujawnieniem zapisanych haseł (warto się zapoznać: Detailed information about the security of KeePass), jak i przed jego zniszczeniem (utratą).
Ostatnie, piąte pytanie: jakie są “koszty” tego rozwiązania? Koszty związane są głównie z moją wygodą. Opisywałem w jaki sposób korzystam z KeePass. Koszt związany wybraniem odpowiedniego hasła z bazy i użyciem go na stronie , nie jest duży. Czasami poprzez korzystanie z funkcji autotype mogę nawet oszczędzać nieco czasu. Bardziej istotnym kompromisem jest to, że bez dostępu do mojego KeePass praktycznie nie mam dostępu do żadnego z moich kont. Może się to wydawać poświęceniem, które jest kompletnie nie do zaakceptowania, ale... nie dla mnie. I tak z założenia nie korzystam z nieswoich komputerów. Innymi słowy – jeśli korzystam z komputera, to jest to mój komputer. Jeśli to jest mój komputer, mam na nim KeePass i bazę do niego.
Podsumowując: używanie KeePass dobrze rozwiązuje problem(y), które chcę rozwiązać (oszczędność mojej pamięci, ograniczenie ryzyka związane z wyciekiem haseł z jednego z serwisów, w którym mam konto), powoduje nowe ryzyka (których jestem świadom i staram się je minimalizować w inny sposób), a koszty związane z korzystaniem z tego rozwiązania, są dla mnie akceptowalne.
Podejrzewam, że Adam w analogiczny sposób mógłby uzasadnić korzystanie z opisanego przez siebie rozwiązania. Ktoś inny mógłby z kolei twierdzić, że korzystanie z trzech różnych haseł (różne hasła dla różnych poziomów “ważności” serwisu) jest dla niego absolutnie wystarczające. Jak dla mnie OK, pod warunkiem, że każdy zdaje sobie sprawę z ryzyka, jakie podejmuje i świadomie je akceptuje.
I na koniec: Loss aversion, Risk aversion oraz: Loss aversion w S24.
Oryginał tego wpisu dostępny jest pod adresem The Great KeePass Debate
Autor: Paweł Goleń