Dlaczego k-anonimowość nie jest dobra przy hasłach?

Na z3s.pl pojawił się artykuł o tym, czym jest k-anonimowość. Jest to dobry artykuł i warto go przeczytać przed lekturą tego wpisu. Nie zgadzam się jedynie z tezą, że w przypadku haseł jest to bezpieczna metoda sprawdzania. Napisałem komentarz, ale pewnie nie wszyscy czytelnicy bloga tam trafią, a ponieważ bawię się z bazą hashy z HIBP i planuję wkrótce wpis na ten temat, to uznałem, że jest dobra okazja do wstępu.

Moja teza jest taka, że w przypadku haseł k-anonimowość wcale nie jest taka bezpieczna, jak jest to przedstawiane. Zgodnie z artykułem obecnie dla hashy z bazy HIBP pierwsze 5 znaków występuje od 381 do 584, czyli podczas sprawdzenia strona trzecia nie poznaje ani hasła, ani jego pełnego hasha, a jedynie pierwszych 5 znaków hasha, czyli – tu moja interpretacja – ma jedynie 1/381 do 1/584 prawdopodobieństwo, że zna właściwy hash.

Gdyby przyjąć, że strona trzecia jest złośliwa, warto też przyjąć, że jest inteligentna i zamiast prawdopodobieństwa zwykłego użyje prawdopodobieństwa ważonego, uwzględniając ilość wystąpień danego hasha. Dla przykładu z artykułu na z3s.pl i hasła P@ssw0rd mamy zwracanych 543 różnych hashy:

curl -s https://api.pwnedpasswords.com/range/21BD1 | wc -l

Natomiast suma wystąpień wszystkich hashy w momencie pisania tego wpisu wynosi 60808.

curl -s https://api.pwnedpasswords.com/range/21BD1 | awk -F ":" '{sum += $2} END {print sum}'

Nasz hash wystąpił 52579 razy. Znając zwyczaje ludzi dotyczące haseł i stosując prawdopodobieństwo ważone uzyskujemy 86% szansę na to, że chodzi o hash należący do hasła P@ssw0rd. Pewności nie ma, ale z 1/543 czyli z ~0,18% robi się 86%, czyli jakieś 467 razy więcej. Ups!

Oczywiście nie znamy tu jeszcze samego hasła, a jedynie – ze sporym prawdopodobieństwem – jego hash, ale o tym, że to niekoniecznie jest problem, może będzie w którymś kolejnym wpisie.

W każdym razie gdybym był serwisem, to bałbym się odpytywać o hashe haseł moich użytkowników, których podejrzewam o proste, słownikowe hasła, jakiś serwis trzeci. Zwłaszcza jeśli ten serwis ma/może mieć także inne informacje, które pozwalają mu ustalić kto pyta o hasło, a tak właśnie może być w przypadku Cloudflare, który może dostawać część ruchu od użytkownika w ramach CDN, DNS lub DoH. Prosta korelacja czasowa może w tym przypadku prowadzić do powiązania hasha hasła z IP użytkownika. Jeśli chcemy sprawdzać hasła, to lepszym rozwiązaniem jest lokalna kopia bazy hashy i ilości ich wystąpień pobrana z HIBP.

Co nie znaczy oczywiście, że k-anonimowość ogólnie nie spełnia swojego zadania. Po prostu mam wrażenie, że akurat w przypadku hashy haseł i tej konkretnej implementacji nie jest tak bezpieczna, jak jest to przedstawiane.

Warto też zauważyć, że mamy tu do czynienia z dość prostym/popularnym hasłem i dla innych pięcioznakowych początków hashy wystąpienia mogą rozkładać się inaczej, bez tak silnego wskazania na konkretny hash.

UPDATE Tak naprawdę nie ma potrzeby używania całej bazy hashy i ilości ich wystąpień z HIBP (>20GB). Najczęściej występujące 100 tys. hashy to raptem 3,2 MB. Najczęstszy milion – 32 MB.

Niedoszła afera z Brave

Wszystko zaczęło się od wpisu o nieco przydługim tytule The Brave web browser is hijacking links, and inserting affiliate codes, który podrzucił kumpel z pracy. Z tytułu wynika, że Brave podmienia linki tak, aby używane były jego kody afiliacyjne.

Krótko o afiliacji – serwisy internetowe płacą za ruch, albo, dokładniej, za określone akcje użytkowników. Np. rejestracja w serwisie czy zakup produktu. Zwykle wejście od określonego polecającego jest identyfikowane przez odpowiedni parametr w URL, zliczana jest liczba interakcji, a na koniec okresu rozliczeniowego podmiot kierujący użytkowników do serwisu dostaje pieniądze. Takie płatne polecanie.

Z kolei Brave to przeglądarka, która reklamuje się jako szybka, bezpieczna. Blokuje reklamy i trackery, w zamian oferując użytkownikom możliwość zarabiania za oglądanie reklam i dzielenia się z twórcami stron WWW. Brzmi nieco utopijnie i podchodziłem nieco sceptycznie, ale… sprawdziłem, faktycznie jest szybka i bardzo łatwo pozwala na blokowanie reklam, bez konieczności zabawy z rozszerzeniami typu uBlock. Nie jestem fanem, ale przyznaję, że to świetna kombinacja do niektórych zastosowań.

Jak widać w artykule kręcona jest afera, jakoby przeglądarka Brave podmieniała linki i wstawiała swoje kody. Tak naprawdę użytkownikowi końcowemu jest raczej obojętne, kto skorzysta na jego rejestracji w jakimś serwisie. Oczywiście cicha podmiana psułaby biznes afiliacyjny, ale byłby to raczej problem wydawców. I żeby doszło do podmiany, użytkownik i tak musiałby wykonywać interakcję z portalem, na którym uruchomiona jest afiliacja. Biorąc pod uwagę, że chodzi o kilka portali związanych z krytpowalutami, szansa na to jest
niewielka. Więc nawet gdyby o to chodziło, to wpływ na użytkownika końcowego jest dyskusyjny i nie widzę powodu by rezygnować z dobrej przeglądarki. Choć oczywiście takie działanie byłoby kontrowersyjne od strony etycznej i ingerowałoby w wolność użytkowników.

Trochę dziwne byłoby jednak trzymanie listy „cichych podmian” publicznie w źródłach na GitHubie, prawda? No właśnie… Używam od pewnego czasu trybu przypuszczającego, bo tak naprawdę nie o podmienianie linków tak naprawdę chodzi. Z tego co sprawdziłem, nie chodzi o cichą podmianę bez wiedzy użytkownika, tylko o… wyświetlenie w sugerowanych stron z linkiem afiliacyjnym w ramach podpowiedzi, gdy użytkownik wpisuje odpowiedni ciąg w adresie strony.

Podpowiedź w pasku adresu w przeglądarce Brave

Użytkownik musi samodzielnie, ręcznie wybrać URL będący linkiem afiliacyjnym. Co więcej, opcję podpowiadania można w ogóle wyłączyć w ustawieniach, po prostu klikając, nie trzeba używać żadnych ukrytych opcji.

Wiadomo, że Brave to projekt komercyjny, więc jakoś zarabiać musi, ale w tym przypadku w mojej ocenie nie dzieje się nic złego. Nadal spokojnie można używać Brave, jeśli komuś zależy na szybkiej przeglądarce z wbudowanym blokowaniem reklam. Z racji tego, że źródła Brave są dostępne na GitHubie, ciche nadużycia będą raczej trudne do przeprowadzenia.

UPDATE: Dodałem screenshot poglądowy jak to wygląda. Ale przyznaję, że sprawdziłem niedokładnie i trochę racji w zarzutach jest – jeśli wpiszemy cały ciąg binance.us to jako podpowiedź wskakuje pierwszy URL, więc wciśnięcie klawisza enter w tym momencie spowoduje wejście z linkiem afiliacyjnym od Brave:

Podpowiedź w pasku adres w przeglądarce Brave – pełna nazwa, podświetlony link, który będzie użyty po wciśnięciu enter.
Podpowiedź w pasku adres w przeglądarce Brave – pełna nazwa plus spacja, podświetlony link, który będzie użyty po wciśnięciu enter.

Jak widać jest to widoczne dla użytkownika, jak widać powyżej dodanie jakiegokolwiek znaku (spacja, /) po binance.us spowoduje wejście bezpośrednie, bez podpowiedzi, ale… jest.

E-państwo w praktyce

Bywa taki czas, że trzeba załatwić coś w urzędzie i niedawno miałem okazję odwiedzić poznański Urząd Miasta. Niby mogłem wszystko zdalnie, ale z różnych względów wybrałem wizytę w UM. Formalności trochę trwają i byłem pozytywnie zaskoczony, że mogą przysłać maila, że gotowe, zamiast list papierowy i skorzystałem z tej opcji.

Skorzystanie z komunikacji mailowej nie jest trywialne – trzeba nie tylko podać maila, ale także wyrazić zgodę na komunikację mailową. Trochę średnie, bo zgoda jest ogólna, nie do konkretnej sprawy. Oczywiście można ją potem cofnąć, ale logiczne byłoby, że podaje się maila i dotyczy on tylko tej konkretnej sprawy. Niemniej wyraziłem zgodę.

Wybór maila wiąże się z koniecznością potwierdzenia – logiczne. Pani w okienku zapytała się, czy mam dostęp do skrzynki pocztowej, potwierdziłem. I… zostałem poproszony o zalogowanie się i podanie kodu. Eee… ale że chodzi o to, że teraz mam dostęp, z telefonu? No niekoniecznie. Tzn. na upartego miałem, ale wolę kliknąć linka z domu, niż walczyć z przydługim hasłem na telefonie w webmailu. Zapytałem czy mogę kliknąć później, z domu, usłyszałem, że tak, mam 24 godziny. Pięknie.

W domu wchodzę na pocztę i widzę następującego maila:

Screenshot maila w webmailu

To wyżej to webmail, tak naprawdę ujrzałem treść:

From: no_reply@powiadomienia.gov.pl
Subject: RDK – potwierdź adres e-mail

Ministerstwo Cyfryzacji gov.pl
Kod potwierdzający adres e-mail w RDK:
111111
Podaj go na stronie lub urzędnikowi. Kod jest ważny 24 h.
Usługa potwierdzania jest też dostępna pod adresem z tematu tego e-maila.
Ten e-mail został wysłany automatycznie – nie odpowiadaj na niego.

No to klikam linka. Tekst Ministerstwo Cyfryzacji jest linkiem. Prowadzącym do gov.pl. I jest to jedyny link w mailu… Zarówno w wersji tekstowej, jak i w webmailu, co później sprawdziłem.

Głupi ja. Na pewno jest link na papierowym potwierdzeniu, które dostałem w urzędzie! I owszem. Jest tam link. Jeden. Do obywatel.gov.pl. Znalezienie miejsca na wpisanie kodu na tej stronie pozostawiam dociekliwym czytelnikom. Mi się znaleźć go tam nie udało.

Oczywiście ostatecznie sobie poradziłem. Przy pomocy wyszukiwarki. I nawet nie trwało to długo, ale naprawdę ciekawy UX jest realizowany z podatków. Szczególnie zachwyceni będą obywatele mniej obyci z internetem czy mający trudności w korzystaniu z komputera. Zamiast kliknąć w linka w mailu nauczą się korzystać z wyszukiwarek internetowych!

Praca zdalna

W związku z obecną sytuacją w kraju i na świecie[1] pracuję zdalnie, z domu. W moim przypadku było to trochę łatwiejsze, bo i IT, i zespół rozproszony, więc ćwiczyliśmy dłuższy czas pracę raz w tygodniu zdalnie, ale nadal czym innym jest okazjonalnie dzień zdalnie, a czym innym codzienna praca zdalna. Z tej okazji garstka mniej oczywistych porad, może przyda się komuś, kto dopiero zaczyna.

Zapasowy dostęp do internetu

Jeśli pracuje się zdalnie, warto zadbać o zapasowy dostęp do internetu. Głupio byłoby musieć jechać do firmy tylko dlatego, że nasz ISP wysiadł. Zwłaszcza teraz. Jako zapas wystarczy tak naprawdę karta SIM, za router WiFi spokojnie może robić stary smartfon, można przełożyć kartę do zwykłego smartfona albo użyć drugiego slotu na kartę SIM. Co lepsi IMO operatorzy komórkowi, których używam lub używałem, zapewniający backup dostępu do internetu w wersji na kartę, czyli prepaid:

Aero2
Jest to mój zdecydowany faworyt – nie wymaga inwestycji w postaci opłacania co miesiąc abonamentu, pamiętania o wygasaniu konta, po prostu jest, gotowy do użycia. Wadą jest długi czas oczekiwania na kartę – nie kupimy jej w sklepie. Warto załatwić i niech sobie leży.
Oferuje Darmowy pakiet 512 kb/s bez konieczności odnawiania (z CAPTCHA co godzinę) oraz różne pakiety od 5zł/m-c. Cokolwiek sensownego to jednak 30 zł.

a2mobile
Najlepszy operator, jeśli potrzebujemy korzystać z internetu regularnie, ale umiarkowanie. Oferuje nieograniczony ilością danych dostęp do internetu, z tzw. lejkiem, czyli zmniejszającą się prędkością.
W zupełności wystarcza do komfortowego przeglądania stron i korzystania z poczty, problemy pojawią się dopiero przy streamingu, zwł. w większych ilościach, choć jest możliwość „resetu” lejka.
Jest tańszy/szybszy od aero2 przy podobnym zaangażowaniu (kupno pakietu raz na miesiąc). Pakiet za 13 zł/m-c daje nam:
do 5 GB – bez limitu prędkości
5–10 GB – prędkość max. 3 Mb/s
10–15 GB – prędkość max. 1 Mb/s
powyżej 15 GB – prędkość max. 512 kb/s

Virgin Mobile
Warto rozważyć VM, jeśli planujemy mieć numer „stacjonarny” z opcją na backupowy internet. Ze względu na kupno pojedynczych pakietów 1 GB daje dużą granularność kosztu. W razie potrzeby nie ma więc problemu ze streamingiem. Może być tańszą alternatywą dla a2mobile, kosztem większego zaangażowania przy kupnie pakietów. Porównując z poprzednikiem – jeśli wydamy 13 zł, to będziemy mieli 10 GB internetu.
Pakiety na kartę od 3 zł/m-c + 1zł/1GB

Oczywiście realna prędkość zależy w przypadku dostępu bezprzewodowego od wielu czynników – sprzętu, zasięgu, operatora. Ograniczenia dostawcy to górny limit.

Narzędzia

Zoom to jeszcze jedno rozwiązanie do telekonferencji. Celują raczej w firmy, ale oferują pakiet darmowy, a w związku z aktualną sytuacją także bezpłatną wersję dla szkół.
W aplikacji jest opcja push to talk (domyślnie spacja przy wyłączonym mikrofonie, można zmienić w skrótach klawiszowych). Na odpowiednio wydajnym sprzęcie (podobno wymagany procesor i7) daje możliwość ustawienia tła, które maskuje bałagan w pokoju. Wykrywanie postaci działa bardzo dobrze. Jest też możliwość wspólnego rysowania. Dostępne wersje dla Windows, macOS, Linux. Ta ostatnia była stara i kulawa, jak ostatnio patrzyłem, ale dało się używać.

Ćwiczenia

Pracując przy komputerze przysługuje nam przerwa 5 min na każdą godzinę pracy. Warto ją wykorzystać – przynajmniej w części – na ćwiczenia, szczególnie, jeśli mamy mniej ruchu przez niewychodzenie z domu. Najlepsze wydają mi się dość intensywne ćwiczenia (mamy tylko 5 minut na wszystko!), które nie wymagające specjalnego przygotowania, miejsca czy sprzętu. Moi faworyci:

  • przysiady – nie trzeba nikomu przedstawiać, istnieje wiele wariantów
  • wykroki – jedną nogą robimy krok do przodu i uginamy tylną tak, by kolano niemal dotknęło ziemi, następnie powrót i zmiana nogi
  • pompki – znowu raczej popularne, wiele wariantów z różnym rozstawieniem rąk. Jeśli ktoś ma, to można użyć uchwytów. I bardziej higienicznie, i lepsza efektywność.
  • podciąganie na drążku – odstępstwo od braku sprzętu. Podciąganie nachwytem to bardzo fajne ćwiczenie angażujące plecy.

Przy okazji ćwiczeń pamiętamy oczywiście o wietrzeniu, jeśli tylko pogoda pozwala.

Pracując zdalnie warto pamiętać o bezpieczeństwie, ale o tym już pisał Sekurak.

[1] Pandemia covid-19 oczywiście. Myślałem o wpisie na blogu, ale trochę za mało materiału i za szybko się zmienia, więc luźne myśli lądują w formie lżejszej na Diasporze. Może coś jeszcze napiszęw tym temacie, ale raczej nieprędko.

Łatwe sprawdzanie szybkości internetu mobilnego

Zwykle do sprawdzania szybkości działania internetu korzystałem ze Speedtest.net rozwiązania popularnego i… takiego sobie. Wady są dość oczywiste – dużo reklam, na telefonie (Android) chyba nie udało mi się skorzystać, bo strona nachalnie promuje appkę.

Dziś dowiedziałem się o mającej łatwą do zapamiętania nazwę stronie Fast.com. Serwis dostarcza Netflix. Nie ma reklam, wygląd jest minimalistyczny i wszystko bez problemu działa na przeglądarce Firefox Focus pod Androidem. Przy okazji, po wybraniu show more info ładnie pokazuje nie tylko opóźnienia i prędkość uploadu, ale także ilość przesłanych danych podczas testu. Uruchomienie testu w obie strony to jakieś 50-100 MB przesłanych danych (na WiFi). Pierwsze wrażenie bardzo pozytywne.