Howdy wprowadza do Linuksa rozpoznawanie twarzy.

Futuryści i przedsiębiorcy od dawna już mają obsesję na punkcie uwierzytelniania biometrycznego. Każde ciało jest unikalne, ale czy unikalne cechy naszej anatomii mogą być wykorzystane do weryfikacji naszej tożsamości? Policja od lat korzysta z odcisków palców do identyfikowania podejrzanych, a kilka systemów komputerowych pozwala już na autoryzację za pomocą linii papilarnych. Jednak dla wielu badaczy Świętym Graalem uwierzytelniania biometrycznego zawsze było rozpoznawanie twarzy.

Ludzki mózg cały czas wykonuje uwierzytelniane innych poprzez ich twarze: to właśnie proces, który towarzyszy „rozpoznawaniu” kogoś. Oczywiście, kiedy kamera wykonuje zdjęcie osoby, najczęściej jest to obraz z twarzą. Nasze twarze bardzo często skierowane są na laptopa lub telefon. Co może być wygodniejsze niż nauczenie urządzeń elektronicznych możliwości identyfikowania znajomych twarzy?

Technologia Windows Hello, wbudowana w systemy Microsoftu, daje użytkownikom Windowsa możliwość identyfikacji twarzy. Od jakiegoś czasu społeczność Linuksa ma zaś dostęp do rozpoznawania twarzy poprzez otwartą aplikację znaną jako Howdy [1]. Lem Severein z Holandii pracuje nad Howdy od ponad czterech lat. Oprogramowanie jest obecnie dostępne na GitHubie.

Jak już pewnie zgadliście, system autoryzacji przez rozpoznanie twarzy wymaga dwóch ważnych komponentów:

2 Obrazowanie – czyli wykonanie zdjęcia osoby, która jest autoryzowana

2 Sztuczna inteligencja – realizuje porównanie obrazu ze wzorcem danego użytkownika

Po potwierdzeniu tożsamości aplikacja musi jeszcze znaleźć sposób na przekazanie tej informacji do systemu operacyjnego.

Howdy korzysta z biblioteki OpenCV [2], dzięki której jest w stanie wykonywać zdjęcia i rozpoznawać twarze. Szczęśliwie dla społeczności wbudowany w Linuksa system PAM (Pluggable Authentication Module) ułatwia integrowanie nowych technologii autoryzacji (patrz ramka „Autoryzacja PAM”). Howdy korzysta z biblioteki OpenCV do przetwarzania obrazów i rozpoznawania twarzy, a następnie przekazuje kontrolę do PAM.

Severein wskazuje, że Howdy nie jest pomyślany jako pełny, samodzielny system bezpieczeństwa. Jak to opisuje strona: „… w żaden sposób nie jest to tak bezpieczny sposób jak hasło i nigdy nie będzie…. Howdy to szybszy i wygodniejszy sposób na logowanie, ale nie bezpieczniejszy”.

Powszechnym sposobem autoryzacji przez rozpoznanie twarzy jest odblokowanie pulpitu po tym, jak użytkownik odszedł od komputera. Howdy może odgrywać rolę pierwszej linii obrony przy codziennej pracy, ale pamiętajmy, że to ciągle eksperymentalna technologia. Jeśli potrzebujemy profesjonalnego zabezpieczenia, lepiej pozostać przy konwencjonalnych podejściach.

Autoryzacja PAM

Wbudowany w Linuksa system PAM daje możliwość integracji niskopoziomowego procesu autoryzacji z wysokopoziomowych API. PAM składa się z kaskady modułów kontrolujących autoryzację. Z jednej strony, oznacza to, że możemy dodać kilka kolejnych procedur, na przykład najpierw rozpoznanie twarzy, a jeśli się to nie uda (lub dodatkowo), wprowadzenie hasła. Z drugiej strony, możemy skorzystać z PAM do dostarczania zróżnicowanych procedur do różnych narzędzi, na przykład korzystać z rozpoznawania twarzy do odblokowania pulpitu, ale wymagać hasła do instalacji nowego oprogramowania.

Kamera

Aby zobaczyć twarz, potrzebujemy kamery. Aktualnie instalowane, jako standardowe wyposażenie laptopów, kamery IR (z podświetleniem w podczerwieni), są popularną opcją do wiarygodnego rozpoznawania twarzy. Teoretycznie Howdy może działać na laptopach, które posiadają jedynie standardową kamerkę internetową, ale nie będzie to zbyt bezpieczne i wiarygodne. Projekt GitHub linux-enable-ir-emitter [3], który zaprojektowano do pracy z Howdy, wspiera kamery z podświetleniem w podczerwieni, które nie są dostępne przy standardowej instalacji programu.

Howdy

Howdy nie dotarł jeszcze do źródeł pakietów wielu dystrybucji Linuksa. Jednak twórca udostępnia instrukcje do instalacji oprogramowania na najpopularniejszych systemach. Howdy posiada szczególnie duże wsparcie dla Ubuntu, gdyż dostępne są oddzielne PPA dla tego systemu. W przypadku Arch Linuksa wymagane pakiety znajdziemy w AUR, natomiast instrukcje w ArchWiki [4].

Tabela 1: Podkomendy

ParametrFunkcja
addDodaj profil (model) dla aktualnego użytkownika
testTestuj rozpoznawanie twarzy
clearSkasuj profil
configUtwórz lub edytuj konfigurację
disableWyłącz Howdy
listWyświetl profile
remove IDKasuj profil z danym ID
snapshotUtwórz zrzut ekranu
versionWyświetl wersję

Tabela 2: Opcje

OpcjaFunkcja
-hPomoc online
-yPomiń odpytanie nazwy profilu
-U userZdefiniuj profil dla użytkownika

Listing 1: Edycja konfiguracji Howdy

01 [core]

02 # Napisz, że wykonywana jest próba wykrycia twarzy

03 # domyślnie: false

04 detection_notice = true

05

06 # Ścieżka do urządzenia, z którego przechwycimy obraz

07 # Powinno być ustawione automatycznie przez program instalacyjny

08 # jeśli dystrybucja taki posiada

09 device_path = /dev/video0

10

11 [snapshots]

12 # Wykonuj zrzuty ekranu przy nieudanych logowaniach

13 # i zapisuj je na dysku z metadanymi

14 # Zrzuty ekranu zapisywane są w katalogu „snapshots”

15 capture_failed = true

16

17 # Wykonuj to samo co opcja wyżej, ale dla

18 # udanych prób logowania

19 capture_successful = true

Jako że Howdy to program napisany w Pythonie, to posiada wiele zależności, takich jak python-pam. Dodatkowo, aby korzystać z rozpoznawania twarzy OpenCV, program korzysta z HDF5 (Hierarchical Data Format) do przechowywani danych i Ffmpeg do odczytywania strumienia wideo.

Podstawowa instalacja jest na większości dystrybucji dosyć prosta: instalujemy po prostu pakiet howdy poprzez menedżera pakietów. System pobierze wszystkie zależności, jakich potrzebuje. W przypadku Arch Linuksa możemy być zmuszeni do dodania kilku pakietów ręcznie, czego przykładem jest python-pam.

W praktyce

Howdy wymaga do działania ręcznej konfiguracji oraz treningu w rozpoznawaniu twarzy. Podstawowa konfiguracja programu oraz treningi są realizowane za pomocą polecenia howdy wraz z jego kombinacjami i kilkoma podkomendami (jak pokazuje Tabela 1). Możemy też uprościć kroki dla niektórych akcji (patrz Tabela 2).

Aby skonfigurować narzędzie, wydajemy polecenie:

sudo howdy config

W ten sposób uruchomimy domyślny edytor z całkiem kompaktowym plikiem konfiguracyjnym, który szczegółowo określa wszystkie ustawienia. Kilka zmian koniecznych dla początkowych eksperymentów z programem pokazuje Listing 1.

Domyślnie parametr detection_notice ustawiony jest na false, przez co Howdy nie zgłasza udanych rozpoznań twarzy. Jednak w przypadku wstępnych testów jest to przydatna opcja, dlatego warto ustawić wartość true (wiersz 4).

Najważniejsze ustawienia odnoszą się do wykorzystywanego sprzętu wideo (wiersz 9). W czasie naszych testów kamera IR dostępna była jako /dev/video2. Standardowe kamerki internetowe często znajdziemy pod /dev/video0 lub /dev/video1. W przypadku niektórych kamer IR przy uruchomieniu systemu od razu aktywowane są (wbudowane) światła IR.

Jeśli nie jesteśmy pewni nazwy pliku urządzenia, możemy ją sprawdzić w aplikacji takiej jak Cheese lub za pomocą polecenia v4l2-ctl z pakietu v4L-utils:

$ v4l2-ctl –list-devices

Teraz wystarczy skopiować nazwę naszego urządzenia wraz ze ścieżką do pliku konfiguracyjnego.

W przypadku rozpoznawania twarzy z wykorzystaniem OpenCV nie ma znaczenia, czy kamera udostępnia normalne monochromatyczne lub kolorowe obrazy, czy też obrazy IR. Dlatego standardowe kamery laptopowe wystarczają do identyfikacji, chyba że potrzebujemy lepszych zabezpieczeń.

Ważną częścią pliku konfiguracyjnego jest też sekcja snapshots w ostatniej jego części. W tym miejscu określamy, czy Howdy zapisuje obraz w czasie autoryzacji (Listing 1, wiersz 15 i 19). Obrazy te pomagają przeanalizować problemy, jeśli rozpoznawanie twarzy nie działa. Czasami, patrząc na obraz, możemy stwierdzić, że oświetlenie jest niewystarczające albo że odbicia światła oślepiają kamerę lub części twarzy są zasłonięte.

Howdy zapisuje obraz dla każdego wywołania w formie pliku JPEG (Rysunek 1) w katalogu /usr/lib/security/howdy/snapshots/. Warto co jakiś czas kasować te obrazy. Jeśli autoryzacja nie powiedzie się, program utworzy połączony obraz wszystkich trzech prób, które domyślnie są podejmowane, i oznaczy je jako FAILED LOGIN. Im mniejsza wartość Best certainty value, tym proces rozpoznania lepiej działał w czasie naszych testów. Z drugiej strony, jeśli logowanie się powiodło, Howdy przechowuje tylko jeden obraz.

Tabela 3: Pliki PAM

PlikFunkcja
sudoKontroluje dostęp do pliku o tej samej nazwie
system-loginAktywny dla każdego logowania
system-local-loginAktywny dla lokalnego logowania
Nazwa użytkownika jak prefikAktywny w przypadku zarządzania użytkownikiem
Nazwa grupy jako prefiksAktywny w przypadku zarządzania użytkownikami
Zaczynające się od chAktywny przy edycji uprawnień i własności plików
Rysunek 1: Kiedy logujemy się przez Howdy, program zapisuje obraz w systemie. W czasie testów jasne odbicie światła po prawej stronie prawdopodobnie zmyliło oprogramowanie.
Rysunek 2: OpenCV wykrywa twarz na wydrukowanym obrazie.

Integracja z PAM

Aby włączyć Howdy, musimy ręcznie zmienić pliki konfiguracyjne PAM w katalogu /etc/pam.d/. Dane przechowywane w tych plikach określają sposób wykorzystania Howdy. Normalnie katalog ten zawiera pliki opisane w Tabeli 3, ale często zdarza się, że jest ich więcej.

Aby autoryzacja przez Howdy zawsze była pierwsza, dodajemy wiersz z Listingu 2 na początku odpowiedniego pliku. Listing 2 określa, że program napisany w Pythonie pam.py z pakietu howdy jest wykorzystywany do logowania oraz że przeprowadzona w ten sposób pomyślna autoryzacja jest wystarczająca (słowo kluczowe: sufficient). Jeśli weryfikacja się nie powiedzie, PAM uruchamia kolejny moduł wymieniony w danym pliku.

Konfiguracja i trening

Po instalacji konfiguracja Howdy składa się z dwóch kroków. Po pierwszym z nich system rozpoznaje twarze w danych wejściowych, ale ich nie rozróżnia. Rozróżnianie ludzi wymaga oddzielnego treningu przeprowadzanego w drugim kroku.

W czasie tego treningu sieć neuronowa wykorzystywana przez OpenCV uczy się cech charakteryzujących twarze użytkowników. Ponieważ Howdy uczy się nie tylko ze statycznych obrazów, ale też z krótkich sekwencji, zwykle nie jest problemem, jeśli mrugniemy lub przesuniemy trochę głowę. Takie drobne ruchy usprawniają nawet poziom rozpoznania twarzy. Aby sieć neuronowa miała solidne podstawy do pracy, potrzebuje kilku powtórzeń.

Listing 2: Integracja z Howdy

auth sufficient pam_python.so /lib/security/howdy/pam.py

Listing 3: Tryb testowy

$ sudo howdy test

$ sudo howdy snapshot

Listing 4: Zapisanie cech twarzy

$ sudo howdy add

NOTICE: Each additional model slows down the face recognition engine slightly

Press Ctrl+C to cancel

Adding face model for the user Bob

Enter a label for this new model [Model #12] (max 24 characters):

Bob

Please look straight into the camera

Scan complete

Po skonfigurowaniu sprzętu, przed treningiem, zalecane jest wykonanie krótkiego testu. Korzystając z polecenia z pierwszego wiersza Listingu 3, uruchamiamy specjalny tryb, w którym strumień wideo wyświetlany jest w nowym oknie. Początkowo, celem nie jest rozpoznanie konkretnej twarzy, ale generalne rozpoznawanie twarzy. W przypadku powodzenia OpenCV oznacza dany obszar czerwonym okręgiem (Rysunek 2). W ten sposób możemy sprawdzić, czy oświetlenie jest wystarczające, pozycja przed kamerą odpowiednia i czy nie występują odbicia światła. Wciśnięcie klawisza Enter zamyka okno i program.

W ramach alternatywy możemy też wypróbować podkomendę snapshot, wykorzystywaną przez Howdy do przechwytywania obrazów, której później możemy przeanalizować (Listing 3, drugi wiersz). Jest to przydatna opcja, w przypadku kiedy program nie rozpoznaje twarzy w trybie testowym. Howdy zapisuje obrazy testowe (zawsze czarno-białe) w aktualnym katalogu.

Kiedy wszystko już działa, możemy zacząć pracę z programem. Najpierw zapisujemy cechy twarzy użytkowników, którzy mogą korzystać z tej technologii (Listing 4). Howdy wymaga do tego zadania uprawnień root. Program zainstalowany jest jako /usr/bin/howdy, co jest dowiązaniem symbolicznym do /lib/security/howdy/cli.py, więc odczytuje i zapisuje dane do katalogu /lib/security/howdy/. Aby rozpoznawanie miało wysoki procent powodzenia, wybieramy ustawienia zapisywania odpowiadające miejscu, w którym będzie ono wykonywane.

Dodanie nowego profilu ma swoje minusy: im więcej profili załadujemy do sieci neuronowej, tym wolniej będzie reagowała. Ważne więc jest, aby dobrze zbalansować poziom rozpoznawania i szybkość. Najlepiej na początku załadować jedynie kilka profili, może dwa lub trzy. W razie występowania błędów w czasie autoryzacji dodajemy tylko po jednym profilu naraz. W czasie testów w większości przypadków logowanie nie stwarzało problemów aż do 10 profili. Wszystko to przy założeniu, że warunki w czasie testów i działania nie różniły się zbyt wiele – obejmuje to zarówno ekspozycję, jak i kąt kamery.

Rysunek 3: Demonstracja Howdy 3.0, który prawdopodobnie będzie posiadał GUI.

Listing 5: Lista profili

01 $ sudo howdy list

02 Known face models for User:

03   ID  Date                 Label

04   0   2021-09-22 11:23:44  User

05   1   2021-09-22 11:23:55  User

06   2   2021-09-22 11:24:29  User

07   3   2021-09-22 11:26:47  User

08   4   2021-09-22 19:20:36  User

09   5   2021-09-22 19:20:48  User

10   6   2021-09-22 19:21:01  User

11   7   2021-09-27 09:57:20  User

12   8   2021-09-27 09:57:39  User

13   9   2021-10-12 09:17:44  Model #10

14   10  2021-10-12 09:19:08  Model #11

15   11  2021-10-12 11:59:37  Model #12

16   12  2021-10-12 13:22:28  User

17 $ sudo howdy remove 11

Opcja list określa, że Howdy powinien wyświetlać zapisane profile (Listing 5, wiersz 1). Lista ta nie wyświetla oceny rozpoznawania dla profili, więc nie możemy sprawdzić z tego poziomu, jak wygląda poziom dopasowania. Etykietę (Label) określamy, zapisując profil. Jeśli jej nie podamy, program utworzy ją samodzielnie, numerując je kolejno i dodając prefiks w postaci Model #. Howdy automatycznie przydziela też ID, widoczne w pierwszej kolumnie. Z jego pomocą program identyfikuje poszczególne profile, na przykład w przypadku ich kasowania (Listing 5, wiersz 17).

Listing 6: Ostrzeżenia OpenCV

[ WARN:0] global /build/opencv/src/opencv-4.5.3/modules/videoio/src/cap_gstreamer.cpp (2056) handleMessage OpenCV |

      GStreamer warning: Embedded video playback halted; module source reported: Could not read from resource.

[ WARN:0] global /build/opencv/src/opencv-4.5.3/modules/videoio/src/cap_gstreamer.cpp (1034) open OpenCV |

      GStreamer warning: unable to start pipeline

[ WARN:0] global /build/opencv/src/opencv-4.5.3/modules/videoio/src/cap_gstreamer.cpp (597) isPipelinePlaying OpenCV |

      GStreamer warning: GStreamer: pipeline have not been created

Wyłączanie ostrzeżeń

OpenCV i Gstreamer przez większość czasu współpracują ze sobą bez żadnych problemów. Jednak przy domyślnej instalacji OpenCV okazuje się niezłym gadułą i zgłasza dużo ostrzeżeń (Listing 6). Jest to irytujące i niepotrzebne, a także utrudnia pracę z oprogramowaniem. Najprostszym rozwiązaniem jest zablokowanie ostrzeżeń. Aby to zrobić, zmieniamy odpowiednią zmienną środowiskową w powłoce, w której uruchamiamy Howdy (OPENCV_LOG_LEVEL=ERROR).

Bezpieczeństwo

Podobnie jak wszystkie aplikacje biometryczne, Howdy może zostać oszukany. Rysunek 1 pokazuje, że dobrze przygotowany obraz może udawać twarz, nawet jeśli rozmiar się nie zgadza. Jednak w tym przykładzie potrzebowaliśmy kilku prób i musieliśmy ciągle ruszać okładką książki wykorzystywaną w roli twarzy, aby pomyślnie zarejestrować profil. Sieć neuronowa OpenCV jest szczególnie wrażliwa na skinienie głową.

Na stronie domowej Howdy deweloper Lem Severein wskazuje na ryzyko manipulacji i podkreśla potrzebę wykorzystania dobrej kamery IR. Jednak przy dodatkowym wysiłku nawet taki sprzęt może zostać oszukany, podobnie jak czytnik linii papilarnych. Niemiecki CCC (Chaos Computer Club) wiele razy demonstrował problemy z autoryzacją biometryczną.

Severein wpadł na pomysł zastosowania przydatnego rozszerzenia zwiększającego bezpieczeństwo, tak zwanej pieczątki (z ang. rubber stamps) [5]. Za każdym razem kiedy Howdy rozpoznaje twarz (i tylko wtedy) możemy wywołać predefiniowane zadania. Zadania te mogą dodać kolejne testy, takie jak weryfikację, czy użytkownik wcisnął odpowiedni klawisz. Jeśli dodatkowy warunek został spełniony, program ocenia autoryzację jako prawidłową. Mechanizmu tego nie ma jeszcze w aktualnej stabilnej wersji Howdy v2.6.1, ale jest już dostępny w repozytorium Git.

Oddzielny samouczek pokazuje, jak zaimplementować odpowiednie reguły (reguły pieczątki). Howdy korzysta z możliwości biblioteki OpenCV. Możemy na przykład dodać skinięcie lub potrząśnięcie głową jako potwierdzenie lub jego brak. Możemy nawet określić minimalną liczbę skinięć służących do potwierdzenia autoryzacji.

Severein pracuje nad Howdy 3.0 od ponad roku, ale data wydania nie została jeszcze ustalona. Oprócz pieczątek wersja 3.0 zawierać prawdopodobnie będzie graficzny interfejs użytkownika (GUI). Możemy ją sprawdzić w formie wersji deweloperskiej (Rysunek 3). Aby uruchomić interfejs, potrzebować będziemy modułu Pythona elevate z pakietu python-elevate. Następnie przechodzimy do katalogu src/ i wywołujemy ./.init.py.

Wnioski

Howdy wskazuje kierunek, w którym zmierza świat: najprawdopodobniej istotną rolę przy autoryzacji odgrywać będą samouczące się systemy i dane biometryczne. Jednak, jak na razie, wyjątkowe wymagania sprzętowe oznaczają, że Howdy to raczej demonstracja możliwości, a nie rzeczywiste rozwiązanie do powszechnego wykorzystania. To powiedziawszy, pamiętajmy, że w praktyce możemy skorzystać z pieczątki do zwiększenia bezpieczeństwa. 

Źródła:

[1] Howdy: https://github.com/boltgolt/howdy

[2] OpenCV: https://opencv.org

[3] Włączanie światła IR: https://github.com/EmixamPP/linux-enable-ir-emitter/wiki/Semi-automatic-configuration

[4] Howdy w AUR: https://wiki.archlinux.org/title/Howdy

[5] Pieczątki:https://github.com/boltgolt/howdy/wiki/Rubber-Stamp-Guide

Podziel się postem :)

Najnowsze:

Linux

Fedora Linux 40 została oficjalnie wydana

Fedora 40 i różne odmiany tej dystrybucji Linuksa są już oficjalnie dostępne i można je pobrać ze strony Fedora Project. Główną nowością jest aktualizacja pulpitu GNOME 46; wersja KDE przełącza się również na KDE Plasma 6.

Bezpieczeństwo

Ostrzeżenie CSIRT KNF. Uważaj, jeśli odwiedzałeś takie strony

CSIRT KNF zwraca uwagę, że tylko w marcu odebrano zgłoszenia ponad 6 tysięcy domen związanych z fałszywymi serwisami w sieci. Były wykorzystywane zwłaszcza na potrzeby oszustw dotyczących usług kurierskich, inwestycji czy mediów społecznościowych.

Oprogramowanie

Firefox 125 już dostępny. Autorzy zapowiadają 25% wzrost wydajności

Mozilla wypuściła aktualizację Firefox 125.0.1. Główne zmiany dotyczą zakreślania w przeglądarce PDF, kodeka AV1, kart w Firefox View, blokowania potencjalnie niezaufanych pobrań, sugestii wklejania URL, kontenerów kart i włączania WPAD. Nie zabrakło też innych, drobnych zmian i poprawek.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *