Authentifizieren via Gesichtserkennung mit Howdy

Aus LinuxUser 01/2022

Authentifizieren via Gesichtserkennung mit Howdy

© Oksana Stepanenko / 123RF.com

Glückliche Gesichter

Mit Howdy erweitern Sie das Authentifizierungssystem PAM um eine Gesichtserkennung – mit allen Vor- und Nachteilen.

Seit mehr als vier Jahren entwickelt der Niederländer Lem Severein ein auf Gesichtserkennung basierendes Authentifikationssystem, wie es Android, MacOS und Windows längst integrieren. Tatsächlich orientiert sich Howdy [1] direkt am Programm Hello von Microsoft: Die Software Digikam nutzt dieselbe Bibliothek [2] zum Erkennen von Gesichtern in Bildern.

PAM

Eine sichere und zuverlässige Authentifikation ist essenziell für ein Mehrbenutzersystem. Die zugehörige Implementation unter Linux heißt PAM (Pluggable Authentication Modules) und erhält entsprechend viel Aufmerksamkeit von Entwicklern und Distributoren. Das weiß jeder, der schon einmal einen tatsächlichen oder vermeintlichen Bug in diesem Bereich gemeldet hat: Innerhalb von Minuten fragen die Entwickler nach, was genau passiert sei. Ein Artikel unserer Schwesterzeitschrift Linux-Magazin beschreibt die PAM-Grundlagen [3].

Das System besteht aus einer Kaskade von Modulen, die das Authentifizieren steuern. Das erlaubt es zum einen, mehrere Verfahren nacheinander anzuwenden, also etwa zuerst eine Gesichtserkennung und dann, falls diese misslingt (oder zusätzlich), die Eingabe des Passworts. Zum anderen lassen sich mittels PAM unterschiedliche Verfahren für verschiedene Programme vorsehen: Während Sie also mittels Gesichtserkennung den Desktop freischalten, gelingt die Installation neuer Programme nur nach Eingabe des Passworts.

Howdy

Howdy fehlt bislang in den Paketquellen vieler Distributionen. Allerdings gibt es Anleitungen, um die Software für die gängigen Systeme einzurichten. Der Entwickler unterstützt insbesondere Ubuntu recht gut, wofür er ein eigenes PPA pflegt. Bei Arch Linux finden sich die benötigten Pakete im AUR, eine Anleitung finden Sie im Arch-Wiki [4]. Neben der reinen Installation erfordert der Einsatz von Howdy eine Konfiguration von Hand sowie ein Training der Gesichtserkennung.

Als Python-Programm benötigt Howdy eine Reihe distributionsspezifischer Abhängigkeiten, etwa python-pam. Im Hintergrund kommt OpenCV für die Gesichtserkennung zum Einsatz, HDF5 dient zum Speichern der Daten und Ffmpeg übernimmt das Einlesen des Videostreams.

Für eine sichere Gesichtserkennung kommen heute meist IR-Kameras (nahes Infrarot) zum Einsatz, die normalerweise nicht standardmäßig in Laptops verbaut sind. Einen Sonderfall stellen dabei spezielle Kameras dar, die über zusätzliche Infrarotlampen verfügen, um in der Dunkelheit Aufnahmen zu machen. Auch sie lassen sich unter Linux nutzen [5].

Allerdings funktioniert Howdy selbst auf Laptops, die lediglich über eine handelsübliche Webcam verfügen. Diesen Komfort bezahlen Sie allerdings mit Einschränkungen bei der Sicherheit. In diesem Fall fungiert Howdy eher als Konzeptstudie oder einfache Arbeitserleichterung, um moderne Verfahren der künstlichen Intelligenz (KI) näher kennenzulernen.

Die grundlegende Installation gelingt bei den meisten Distributionen recht einfach: Sie spielen das Paket howdy über die Paketverwaltung ein. Über die darin definierten Abhängigkeiten zieht das System alle weiteren Pakete nach. Bei Arch Linux müssen Sie eventuell einige Pakete per Hand nachziehen, wie etwa das oben genannte python-pam.

Ausprobieren

Die grundlegende Konfiguration sowie das Training der Software erfolgen über den Befehl howdy im Terminal in Kombination mit bestimmten Unterbefehlen (siehe Tabelle “Unterbefehle”). Bei manchen Aktionen gibt es außerdem die Möglichkeit, über Optionen Schritte zu vereinfachen (siehe Tabelle “Optionen”).

Parameter

Funktion

add

Profil (Modell) für aktuellen Nutzer hinzufügen

test

Gesichtserkennung testen

clear

Profil löschen

config

Konfiguration erstellen oder editieren

disable

Howdy deaktivieren

list

Profile anzeigen

remove ID

Profil mit ID löschen

snapshot

Snapshot anfertigen

version

Version anzeigen

Option

Funktion

-h

Online-Hilfe

-y

Abfrage des Profilnamens überspringen

-U Benutzer

Profil für Benutzer definieren

Mit sudo howdy config richten Sie die Software ein. Damit starten Sie den im System voreingestellten Editor mit der recht kurzen Konfigurationsdatei, die alle Einstellungen ausführlich dokumentiert. Die wenigen für erste Experimente notwendigen Änderungen zeigt Listing 1.

Listing 1

Howdy-Konfiguration anpassen

[core]
# Print that face detection is being attempted
# default: false
detection_notice = true
# The path of the device to capture frames from
# Should be set automatically by an installer
# if your distro has one
device_path = /dev/video0
[snapshots]
# Capture snapshots of failed login attempts
# and save them to disk with metadata
# Snapshots are saved to the "snapshots" folder
capture_failed = true
# Do the same as the option above but for
# successful attempts
capture_successful = true

In der Voreinstellung steht der Parameter detection_notice auf false, was verhindert, dass Howdy eine erfolgte Gesichtserkennung meldet. Für erste Tests ist das aber unbedingt sinnvoll, weswegen Sie stattdessen den Wert true angeben (Zeile 4).

Die mit Abstand wichtigste Angabe bezieht sich auf das verwendete Videogerät (Zeile 9). Die IR-Kamera stand im Test unter /dev/video2 bereit, normale Webcams finden Sie häufig unter /dev/video0 oder /dev/video1. Bei einigen IR-Kameras aktiviert der Start des Systems bereits die (eingebauten) IR-Lampen.

Sind Sie sich unsicher, finden Sie den Namen der Gerätedatei entweder mit einer Anwendung wie Cheese heraus oder nutzen den Befehl v4l2-ctl aus dem Paket v4L-utils (Listing 2). Übertragen Sie das gewünschte Device samt Pfad in die Konfiguration.

Listing 2

Ermitteln der Gerätedatei

$ v4l2-ctl --list-devices

Für die Gesichtserkennung mittels OpenCV spielt es zunächst einmal keine Rolle, ob die Kamera normale Schwarz-weiß- beziehungsweise Farbaufnahmen oder IR-Bilder liefert. Aus diesem Grund eignet sich auch die normale Webcam eines Laptops zur Identifikation, sofern Sie keine echte Sicherheit benötigen.

Der letzte Teil der Konfiguration mit dem Bereich für die Snapshots ist ebenfalls wichtig: Hier legen Sie fest, ob Howdy ein mit dem Zeitpunkt der Authentifikation benanntes Bild speichert (Listing 1, Zeile 15 und 19). Diese Aufnahmen helfen bei der Analyse von Problemen, wenn die Gesichtserkennung nicht funktioniert hat. Manchmal erkennen Sie so, dass das Licht nicht ausreichte, ein Lichtreflex die Kamera geblendet hat oder Teile des Gesichts verdeckt waren.

Die Bilder speichert Howdy für jeden Aufruf als JPEG-Datei (Abbildung 1) im Verzeichnis /usr/lib/security/howdy/snapshots/, wo Sie sie gelegentlich löschen sollten. Bei einer fehlgeschlagenen Authentifikation erzeugt die Software ein gemeinsames Bild aller drei Versuche, die es voreingestellt vornimmt, versehen mit dem Label FAILED LOGIN. Je kleiner der Wert für Best certainly value ausfällt, umso sicherer hat das Erkennen funktioniert. Bei einer erfolgreichen Anmeldung legt Howdy dagegen nur ein Bild ab.

Abbildung 1: Bei einer Anmeldung via Howdy speichert das Programm ein Bild im System. Im Test hat vermutlich der helle Lichtreflex am rechten Rand die Software gestört.

Abbildung 1: Bei einer Anmeldung via Howdy speichert das Programm ein Bild im System. Im Test hat vermutlich der helle Lichtreflex am rechten Rand die Software gestört.

PAM-Integration

Um Howdy zu aktivieren, bearbeiten Sie die PAM-Konfigurationsdateien im Verzeichnis /etc/pam.d/ von Hand. Über die Daten, die Sie dort einfügen, bestimmen Sie, an welchen Stellen Howdy zum Einsatz kommt. Normalerweise finden sich in diesem Verzeichnis zumindest die in der Tabelle “PAM-Dateien” beschriebenen Dateien, oft auch noch viele weitere.

Datei

Funktion

sudo

Steuert den Zugriff auf den gleichnamigen Befehl

system-login

Bei jedem Login aktiv

system-local-login

Bei lokalem Login aktiv

Präfix user

Beim Verwalten der Benutzer aktiv

Präfix group

Beim Verwalten von Gruppen aktiv

Präfix ch

Beim Ändern von Dateirechten und Dateibesitzern aktiv

Listing 3

Howdy-Integration

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

Um zuerst immer eine Authentifikation mittels Howdy vorzunehmen, fügen Sie die Zeile aus Listing 3 am Anfang in die entsprechenden Dateien ein. Sie besagt, dass zum Anmelden das Python-Programm pam.py aus dem Howdy-Paket zum Einsatz kommt und dass eine erfolgreiche Authentifikation damit ausreicht (Schlüsselwort: sufficient). Schlägt die Prüfung fehl, startet PAM das nächste in der Datei erwähnte Modul.

Einrichten und Training

Nach der Installation erfolgt die Konfiguration von Howdy in zwei Schritten. Nach dem ersten Schritt erkennt das System Gesichter in den Eingabedaten, ohne sie jedoch zu unterscheiden. Das Differenzieren zwischen verschiedenen Personen erfordert ein gesondertes Training im zweiten Schritt.

Bei diesem Training lernt das von OpenCV verwendete neuronale Netz spezifische Merkmale, die das Gesicht des Nutzers repräsentieren. Da Howdy nicht nur statische Bilder aus dem Videostream erlernt, sondern kurze Sequenzen, ist es normalerweise kein Problem, wenn Sie kurz blinzeln oder den Kopf etwas bewegen. Tatsächlich scheinen solche leichten Bewegungen beim realen Einsatz die Erkennungsraten zu verbessern. Es erfordert mehrere Wiederholungen, eine solide Basis im neuronalen Netz zu verankern.

Nach der Konfiguration der Hardware und vor dem Training empfiehlt sich ein kurzer Test. Mit dem Befehl aus der ersten Zeile von Listing 4 starten Sie einen speziellen Modus, der den Videostream in einem neuen Fenster anzeigt. Zunächst geht es nicht um das Identifizieren eines bestimmten Gesichts, sondern um das unspezifische Erkennen von Gesichtern. Bei Erfolg markiert OpenCV den Bereich mit einem roten Kreis (Abbildung 2). So testen Sie, ob die Lichtverhältnisse ausreichen, die Position zur Kamera passt und keine störenden Reflexe auftreten. Durch einen Druck auf die Eingabetaste schließen Sie das Fenster wieder und beenden das Programm.

Listing 4

Testmodus

$ sudo howdy test
$ sudo howdy snapshot

Abbildung 2: Auf einem gut gedruckten Bild erkennt OpenCV auch ein Gesicht.

Abbildung 2: Auf einem gut gedruckten Bild erkennt OpenCV auch ein Gesicht.

Alternativ nutzen Sie den Unterbefehl snapshot, mit dem das Tool die Bilder aufnimmt, die Sie anschließend analysieren (Listing 4, zweite Zeile). Das ist dann sinnvoll, wenn das Programm im Testmodus keine Gesichter erkennt. Die stets schwarz-weißen Testbilder speichert Howdy im aktuellen Verzeichnis.

Sobald alles klappt, nehmen Sie für den tatsächlichen Einsatz zunächst die Merkmale der Gesichter der Anwender auf, die die Technologie nutzen dürfen (Listing 5). Howdy benötigt für diese Aufgabe Root-Privilegien. Das Programm ist als /usr/bin/howdy installiert, ein symbolischer Link auf /lib/security/howdy/cli.py. Es liest und schreibt die Daten also ins Verzeichnis /lib/security/howdy/. Wählen Sie die Situation für die Aufnahme so, dass sie möglichst gut dem späteren Einsatzort entspricht. So halten Sie die Rate der Misserfolge gering, also den Anteil nicht erkannter Gesichter.

Listing 5

Gesichtsmerkmale ablegen

$ 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 USER
Enter a label for this new model [Model #12] (max 24 characters):
Name
Please look straight into the camera
Scan complete

Allerdings hat das Hinzufügen neuer Profile eine Kehrseite: Je mehr Profile Sie in das neuronale Netz einspeisen, umso langsamer reagiert es. Daher gilt es, einen guten Kompromiss zwischen Erkennungsrate und Geschwindigkeit zu finden. Am besten lesen Sie zunächst nur wenige Profile ein, etwa zwei oder drei. Kommt es dann zu Fehlern bei der Authentifikation, ergänzen Sie jeweils ein weiteres Profil. Im Test gelang ein Login in den meisten Fällen ab etwa zehn Profilen, sofern sich die Bedingungen zwischen Training und Anwendung nicht allzu stark unterschieden. Das bezieht sich sowohl auf die Belichtungssituation als auch auf den Winkel zur Kamera.

Die gespeicherten Profile zeigt Howdy mit der Option list an (Listing 6, Zeile 1). Eine Bewertung der Profile bietet diese Liste nicht. Es lässt sich also nicht ersehen, wie gut die Software ein Gesicht erkannt hat oder wie groß die Übereinstimmung bei einem Profil ausfällt. Das Label geben Sie beim Speichern des Profils an. Fehlt diese Angabe, erzeugt das Programm diese Einträge selbstständig, wobei es sie durchnummeriert und jeweils die Zeichenkette Model # voranstellt. Die ID in der ersten Spalte vergibt Howdy ebenfalls automatisch. Sie erlaubt es, einzelne Profile eindeutig zu identifizieren, etwa um sie zu löschen (Listing 6, Zeile 17).

Listing 6

Profile auflisten

$ sudo howdy list
Known face models for User:
  ID  Date                 Label
  0   2021-09-22 11:23:44  User
  1   2021-09-22 11:23:55  User
  2   2021-09-22 11:24:29  User
  3   2021-09-22 11:26:47  User
  4   2021-09-22 19:20:36  User
  5   2021-09-22 19:20:48  User
  6   2021-09-22 19:21:01  User
  7   2021-09-27 09:57:20  User
  8   2021-09-27 09:57:39  User
  9   2021-10-12 09:17:44  Model #10
  10  2021-10-12 09:19:08  Model #11
  11  2021-10-12 11:59:37  Model #12
  12  2021-10-12 13:22:28  User
$ sudo howdy remove 11

Warnungen deaktivieren

OpenCV und Gstreamer arbeiten weitgehend problemlos Hand in Hand. OpenCV erweist sich jedoch in der Standardinstallation als recht redselig und gibt schon Warnungen in der Shell aus (Listing 7). Das irritiert unnötig und erschwert die Arbeit mit der Software. Einfache Abhilfe schaffen Sie, indem Sie die Ausgabe bloßer Warnungen unterbinden. Dazu setzen Sie in der Shell, in der Sie Howdy starten, eine entsprechende Umgebungsvariable (OPENCV_LOG_LEVEL=ERROR).

Listing 7

OpenCV-Warnungen

[ 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

Sicherheit

Wie bei allen biometrischen Verfahren besteht auch bei Howdy die Möglichkeit, die Software zu täuschen. Abbildung 1 zeigt, dass gut gemachte Aufnahmen selbst dann durchaus als Gesicht durchgehen, wenn die Größe nicht wirklich passt. Im Beispiel waren allerdings mehrere Versuche erforderlich, bei denen es nötig war, den als Fake verwendeten Buchumschlag permanent leicht zu bewegen, um erfolgreich ein Profil aufzunehmen. Das Netzwerk von OpenCV reagiert insbesondere empfindlich auf Nicken.

Der Entwickler Lem Severein weist auf der Howdy-Homepage auf die Gefahr von Manipulationen hin und betont die Notwendigkeit, eine gute IR-Video-Kamera zu verwenden. Aber selbst diese ließe sich mit zusätzlichem Aufwand austricksen, genauso wie es gelingt, Sensoren für Fingerabdrücke zu überlisten. Der CCC e.V. hat dies mehrfach gezeigt.

Der Howdy-Entwickler hat sich eine sinnvolle Erweiterung ausgedacht, um die Sicherheit zu erhöhen: sogenannte Rubber Stamps [6]. Immer, wenn Howdy ein Gesicht erkennt – und nur dann –, besteht die Möglichkeit, vorab definierte Zusatzroutinen aufzurufen. Die testen dann etwa, ob der Benutzer zugleich eine bestimmte Taste gedrückt hat. Ist die zusätzliche Bedingung erfüllt, wertet die Software die Authentifikation als korrekt. Der Mechanismus fehlt in der aktuell stabilen Howdy-Version 2.6.1 noch, steht aber im Git-Repository bereits bereit.

Eine eigene Anleitung zeigt, wie Sie passende Regeln (Stamp Rules) implementieren. Howdy greift dabei auf die Möglichkeiten der OpenCV-Library zurück. Sie erlaubt es beispielsweise, ein Nicken oder Kopfschütteln als Bestätigung oder Verneinung einzusetzen. Sogar eine minimale Anzahl an Nickbewegungen dürfen Sie definieren, um die Authentifikation zu bestätigen.

Seit mehr als einem Jahr arbeitet der Entwickler nun schon an Howdy 3.0, ein Termin für das Release steht aber noch nicht fest. Neben den Rubber Stamps enthält diese Version dann voraussichtlich eine grafische Oberfläche. Eine Vorschau liefert die Entwicklerversion (Abbildung 3). Um die Oberfläche zu starten, benötigen Sie das Python-Modul elevate aus dem Paket python-elevate. Anschließend wechseln Sie ins Verzeichnis src/ und rufen ./.init.py auf.

Abbildung 3: Eine Vorschau auf Howdy 3.0, das dann voraussichtlich eine grafische Oberfläche mitbringt.

Abbildung 3: Eine Vorschau auf Howdy 3.0, das dann voraussichtlich eine grafische Oberfläche mitbringt.

Fazit

Howdy zeigt, wohin der Weg geht: Selbstlernende Systeme und biometrische Daten zur Authentifikation spielen vermutlich in der Zukunft eine wichtige Rolle. Bisher ist die Software aufgrund der speziellen Anforderungen an die Hardware aber eher als Konzeptstudie denn als alltagstaugliche Authentifizierungslösung zu verstehen. Die Rubber Stamps zeigen jedoch, wie sich die Sicherheit in der Praxis deutlich erhöhen ließe. (agr/jlu)

Glossar

PPA

Personal Package Archive. Repository für ein Projekt oder eine Gruppe von Programmen, das das Einspielen von Paketen über die gewohnten Mechanismen erlaubt.

HDF5

Hierarchical Data Format, Version 5. Ursprünglich im Supercomputing-Umfeld entwickeltes Dateiformat zum Speichern großer Datenmengen in wissenschaftlichen Anwendungen.

CCC e.V.

Chaos Computer Club. In regionalen Gruppen organisierter deutscher Hacker-Verein mit nach eigenen Angaben über 8000 Mitgliedern.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDF
LinuxUser 01/2022 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben