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:

  1. What assets are you trying to protect?
  2. What are the risks to these assets?
  3. How well does the security solution mitigate those risks?
  4. What other risks does the security solution cause?
  5. 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:

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ń