👁️
pierreinside
  • Introduction
  • Workbench
    • VirtualBox
    • Linux
      • Linux-Paketverwaltung
      • Linux Initialisierung
      • Ubuntu 14.10 LTS
      • Ubuntu 16.04 LTS
      • Ubuntu 18.04 LTS
      • Ubuntu 20.04 LTS
      • Ubuntu - Netzwerk
    • Konsole
      • ssh
      • zsh
      • cygwin
      • Babun
      • terminator
      • Terminal Multiplexer
      • Linux Tools
    • awesome
    • Entwicklungsumgebungen
      • Texteditors
      • Visual Studio Code
      • IntelliJ - IDEA
  • Softwareentwicklungsprozess
    • Schätzungen
    • Eventstorming
    • OKR
  • Architektur
    • Uncle Bob
    • Microservices
    • NoSQL
      • ElasticSearch
    • Hystrix
    • Reactive Programming
    • AngularJS
    • Service Mesh
  • Networking
    • Dependency Injection
  • Programming
    • Java Core/EE
      • Java 8
      • Java Annotationen
      • Bean Validation
      • Enterprise Java Beans Specification
      • Dependency Injection
    • JRebel
    • Webservices
      • HTTP
      • REST
      • Spring MVC REST
      • Swagger
      • Postman
    • Spring Ecosystem
      • Spring Core
      • Spring Boot
        • Programming
        • Production Ready
        • Testing
      • Spring Cloud
      • Spring Cloud Config
      • Spring MVC
      • Spring Data
      • Spring Petclinic
    • NodeJS
    • UI-Technologie
      • Thymeleaf
      • ionic
      • Web Fonts
      • Jinja Templates
      • Twitter Bootstrap
    • Python Ecosystem
      • Python Libraries
      • Python Testing
      • Python Best-Practices
      • Python Snippets
      • Python Selenium
      • Kivy UI
      • FastAPI
      • Typer CLI
      • Django
    • Groovy
    • Persistenz
      • Transactions
        • Java TX
        • JPA TX
      • TX Handling
      • JPA
        • Eclipse Link
      • MySQL
        • MySQL Performance
        • Docker MySQL
      • Hazelcast
    • Glassfish
    • YAML
    • Angular
    • Camel
    • Zeichenkodierung
    • Kinder lernen Programmieren
  • Testen
    • Easymock
    • Mockito
  • Performance & Scalability
    • Java Performance
      • Heapdump Analysis
    • Java Concurrency
    • Instana
  • Sicherheit
    • Authentifizierung
      • OpenID Connect
      • Web-Authentication API
    • Authorisierung
      • OAuth
      • SAML
    • Spring Security
    • Zertifikate
    • Kali Linux
    • VPN
    • Zero-Trust-Networks
  • Build und Deployment
    • Maven
    • Bamboo
    • Jenkins
      • Jenkins Pipelines
      • Jenkins Pipelines Tips und Tricks
      • Jenkins-configuration-as-Code
      • Jenkins IDE
    • Travis CI
    • Shellprogrammierung
      • jq - JSON Parsing
    • Konfiguration Management
    • Vagrant
      • Vagrant-Ansible-Integration
      • Vagrant Box bauen
    • Ansible
      • Getting Started
      • Ansible Details
    • Saltstack
    • LinuxKit
    • Container
      • Docker
        • Docker Getting Started
        • Debugging Docker
        • Docker Build
        • Docker Registry
        • Docker run
          • docker run
          • docker network
        • Docker Compose
        • docker machine
        • Docker@Windows
        • Docker Host
        • Docker Scaling
        • Docker Ressources
        • Docker Logging
        • windowsContainer
      • Cloud Deployment Provider
        • AWS
          • Anwendungsdeployment
          • Workload
          • Permissions
          • Netzwerke
          • AWS CLI
            • aws-vault
          • RDS
          • Static Website Hosting
          • EKS - Elastic Kubernetes Service
          • S3
        • Google Cloud Platform
      • Docker Orchestrierung
        • CoreOS
        • Kubernetes
          • microK8s
          • minikube
          • autoscaler
          • Docker
          • k9s
        • Nomad
    • PHP
  • Operations
    • Proxy
      • NGINX
    • DNS
    • Logging
      • Graylog
      • Fluentd
    • Monitoring
      • Grafana
    • Infrastructure-as-Code
      • Terraform
        • AWS-Provider
        • GitHub-Provider
      • Packer
    • Deployment
      • Vault
      • Consul
        • Consul Template
      • Fabio
  • Rechtliches
    • Software-Lizenzen
  • Git Ecosystem
    • Git
      • Git Lifecycle Hooks
    • GitHub
      • GitHub Organizations
    • GitHub Actions
    • GitHub Pages
    • GitHub CLI
    • GitHub Copilot
    • GitHub-AWS OIDC
    • GitBook
    • GitLab
    • Bitbucket/Stash
  • Publishing
    • WordPress
    • Markdown
    • Static Site Generators
      • Hugo
      • Jekyll
    • Tiddly Wiki
    • Leanpub
    • Animationsfilme
  • Storage
    • Synology 2012
    • Synology 2021
  • Collaboration
    • Übersicht
    • Microsoft Teams
  • Konferenzen
    • Velocity Berlin 2019
  • IT mit Kindern
    • Projekt Sportstracker
    • Scratch
    • Pico Spielekonsole
  • Schule
    • Mathematik
  • Misc
    • Foto/Video
      • Foto/Video Sammlung bis 2023
        • Handbrake
        • Onedrive
      • Foto/Video Sammlung ab 2024
      • Gopro
      • Panasonic FZ1000 ii
        • als Webcam
      • AV Receiver
      • Videos erstellen
        • OBS Studio
        • Touch Portal
        • Game-Streaming
      • Kameratasche
      • Kamera 2020
    • Handy
      • 2016
      • 2018
      • 2019
      • 2021
      • 2022
    • Computer
      • Laptop
        • 2018
        • Chromebook
      • Monitor
        • 4k
      • Software
        • Command Line Interface
        • Google API
        • Plant UML
        • Chromium
        • Passwort-Manager
        • GPG
      • Dell CNF 2665 Farbdrucker
      • Dockingstation
      • Gaming PC 2021
      • Mobiles Büro
      • Mobiles Internet
      • Mobiler Router
    • Beamer Benq W1000+
    • Spielekonsole
      • 2017
        • Playstation 4
      • Pico Spielekonsole
    • Gadgets
      • iPad Pro 2015 und 2016
      • iPad Air 2024
      • Macbook Pro
      • Smartwatch
      • Slate
      • Mudi
    • Fahrrad
      • Jonas 2018
      • SQLab
    • Auto
      • Auto 2022
      • Camping
        • Camping Touren Ideen
          • Camping Tour - Gardasee 2021
        • Camper
          • Camper klein - keine Stehhöhe
            • VW Bus Erfahrungen
          • Camper gross - Stehhöhe
    • Haus
      • Klimaanlage
      • Swimming Pool
      • Quick Mill Orione 3000
      • Spülmaschine 2021
      • Hebe-Schiebetür
      • Gasgrill
      • Minibar / Mini-Kühlschrank
      • Glasfaseranschluss (Fiber-to-the-Home)
      • Smart-Home
        • Raspberry Pi
        • Heimnetzwerk
      • Homeoffice
      • Energie
        • Solar
        • Wärmepumpe
    • Freizeit
      • Musik Streaming
      • Sky
      • Online Lernplattformen
      • eScooter - ePowerFun
    • Fußball
      • Meine Arbeit als Fußball-Trainer
      • Fußball Tools
      • DFB Talentförderung
    • Google Impact Challenge
  • Englisch
Powered by GitBook
On this page
  • Motivation
  • Begriffe
  • Fido (= Fast Identity Online)
  • U2F
  • UAF (Universal Authentication Framework)
  • Webauthn
  • Fido 2.0 - Passwortless Authentication
  • Ansatz
  • Unterstützte Authenticators Devices
  • Unterstützte Browser
  • Deep Dive
  • Registrierung des Authenticator Devices
  • Identifizierung
  • In Action
  • Yubico-Demo-Anwendung
  • java-webauthn-server
  • ebay UAF Server - OpenSource

Was this helpful?

  1. Sicherheit
  2. Authentifizierung

Web-Authentication API

  • Homepage

  • Wikipedia

  • fido alliance - Antriebsfeder von Webauthn

Passwortlose Authentifizierung/Identitätsprüfung per Hardware:

  • Fingerabdrucksensor (im Handy/Laptop)

  • Gesichtserkennung (wie bei Windows Hello und iPhone X)

  • Irisscan

Security-Keys auf Basis von Universal Second Factor gibt es schon lange (z. B. U2F Security Keys (USB-Tokens)), doch konnte die bisher nicht besonders gut in Web-Applikationen eingebunden werden, weil browser- und plattformübergreifende die Schnittstelle fehlte. Die Web-Authentication-API (eine Erweiterung der Credential-Management-API) beseitigt dieses Problem - die neuesten Browser (Desktop/Mobile) unterstützen diesen Ansatz.

Zudem unterstützt Web-Authentication nicht nur USB-Hardware-Tokens (die eher anfällig sind, weil sie übertragbar sind - Verlust), sondern auch personalisierte Secret-Stores (z. B. durch Fingerprint geschützte Handys).

Motivation

Einfache Credentials sind leicht zu knacken, weil

  • oft zu einfach

    • 2-Factor-Authentication reduziert dieses Problem

  • oft gleiche Credentials für verschiedene Services

    • 2-Factor-Authentication reduziert dieses Problem

    • Authentication-as-a-Service wie beispielsweise OpenID Connect reduzieren dieses Problem

Begriffe

Fido (= Fast Identity Online)

Fido ist eine Allianz verschiedener Firmen, mit dem Ziel sichere Authentifzierung abzubilden.

U2F

Dieses Protokoll wurde urprünglich von Google und Yubico entwickelt und nach der erfolgreichen Einführung bei Google an die Fido Allianz übergeben.

Fido war mir bereits von "U2F - Universal Second Factor" bekannt und ich hatte bereits einen YubiKey als Second-Factor bei der VPN-Einwahl in ein Firmennetz verwendet.

Fido hat neben U2F auch UAF (User-Authentication-Framework) entwickelt, das noch einen Schritt weiter geht. Hierbei geht es um passwortlose Authentifizierung.

Im April 2018 hat Webauthn im W3C den Status "Candidate Recommendation" erlangt.

UAF (Universal Authentication Framework)

UAF geht noch einen Schritt weiter als U2F ... hier werden nicht die Anzahl der Secrets (= Passwörter) erhöht, stattdessen erfolgt die AUthentifizierung passwortlos. Das Secret steckt im Client und verlässt diesen auch nicht (im Gegensatz zu Passwörtern oder ähnlichen Secrets. Hier kommen Public-Private-Key-Ansätze zum Einsatz.

Webauthn

  • macht den passwortlosen Login (UAF) nutzbar für Webapplikationen

  • wird von der W3C standardisiert

Fido 2.0 - Passwortless Authentication

  • Solution

  • Developer Informationen

Fido 2.0 besteht aus

  • Webauthn Spezifikation

  • Client-to-Authentication-Protocol (CTAP) für die Schnittstelle zwischen Client (z. B. Browser) und Plattform (= Betriebssystem/Hardware)

Fido 2.0 Devices sind somit also Webauthn-Ready.

Ansatz

  • verwende Hardware-Authenticators zur Speicherung von Secrets (= Private-Key) und zur nachfolgenden Identifizierung einer vorgegebenen Identität (= Authentifizierung)

    • ACHTUNG: der Benutzer gibt eine Identität vor (z. B. einen Usernamen - es kann EIN Username für viele Services verwendet werden => der Benutzer kommt also eigentlich mit einem einzigen Usernamen aus). Per Web-Authentication wird die Identität verifiziert. Es ist also nicht so, daß ich mich mit dem Authenticator komplett automatisch anmelden kann - den Usernamen muß ich noch wissen!!!

  • Zugriff auf die gespeicherten Secret auf der Hardware ist nur mit einem Super-Secret möglich

    • für das Super-Secret verwendet man am besten biometrische Informationen (z. B. Fingerabdruck), um die Übertragbarkeit zu verhindern

  • ein Service, der die Identität eines Benutzers überprüfen will, geht folgendermaßen vor:

    • schick Challenge (Zufallszahl) zum Authenticator

    • Authenticator signiert die Challenge und schickt die Signatur zum Service

    • Service prüft die Signatur

      • die Signatur wird mit dem Public-Key dekodiert - wenn das Ergebnis mit dem Challenge-Wert übereinstimmt, ist die Identität verifiziert

Unterstützte Authenticators Devices

ACHTUNG: reine U2F-Devices (Second-Factor) reichen für Webauthn nicht aus - es muß hier expliziter Support für Fido 2.0/Webauthn bestehen.

  • übertragbare Authenticators (i. a. mit einer PIN geschützt)

    • Security-Key by Yubico für 20 Euro

      • kein Fingerabdruckleser - zur Authentifizierung drückt man einen Knopt auf dem USB-Stick

  • personalisierte Authenticators - ein U2F-USB-Stick ist nicht personalisiert (jeder kann ihn verwenden, um sich zu identifizieren)

    • biometrische Verifikation

      • Fingerprint

        • viele Handys/Laptops bieten bereits Fingerabdrucksensoren und bieten somit Möglichkeiten ohne zusätzliche Hardware

        • USB-Keys mit Fingerprintsensoren

      • Iris-Scanner

    • Secret-based (PIN, Name des Lieblingshaustieres, ...)

Unterstützte Browser

Browser müssen die Web-Authentication-API anbieten, um die passwortlose Authentifizierung über Webapplikationen zu ermöglichen:

  • Mozilla Firefox 60

  • Chrome 67

  • Edge

Apple ist scheinbar noch nicht im Boot (aber zumindest schon mal in der Evaluationsphase) - schade, denn die neuesten Geräte kommen all mit Touch ID oder sogar Face ID und bieten somit ideale Authenticators

Deep Dive

  • sehr gute Einführung von Google I/O 2018

  • basiert auf Public-Private-Key-Verschlüsselung

Registrierung des Authenticator Devices

  • jedes Authenticator Device muß sich einzeln bei JEDEM zu nutzenden Service registrieren

    • das ist ganz typisch und natürlich, daß man die Geräte als Authentifizierungsmechanismen registrieren muß (ähnlich wie auch 2-Factor-Devices wie YubiKeys)

  • ein Authenticator Device (z. B. des Handy-Fingerabdrucksensor) wird für einen zu nutzenden Dienst (z. B. amazon.com) über ein Challenge-Response-Protokoll konfiguriert:

    • der Benutzer loggt sich einmalig bei Amazon über die herkömmliche Art (Username/Password) ein und triggert die Authenticator Device Registrierung

    • Amazon erzeugt daraufhin eine Challenge (sehr große Zufallszahl), persistiert sie zum User und schickt sie zusammen mit der UserInfo an die WebApp (Webapplikation/MobileApp)

    • die Challenge wird zur WebApp (Webapplikation/MobileApp) geschickt, die auf dem Desktop/Mobile Device des Benutzers läuft. Die WebApp verwendet die Web-Authentication-API Bibliothek (z. B. JavaScript), die den Zugang über den Browser zum Authenticator-Device bietet. Infolgedessen wird der Benutzer aufgefordert, das zu verwendende Secret (z. B. seinen Fingerabdruck, PIN) einzugeben. Hierbei werden - sofern das Authenticator Device über ein Display verfügt - Informationen zum freizuschaltenden Service angezeigt (Domainname, Username, ...).

    • sobald der Benutzer seine Zustimmung erteilt hat (durch Bereitstellung seines Secrets - z. B. Fingerabduck), erstellt der Authenticator ein Public-Private-Key-Paar, eine Credential ID und speichert diese Daten lokal zusammen mit dem Domainnamen des Services und der User Info zum Service

    • Public-Key, Credential ID und signierte Challenge wird von der WebAPp zum Service geschickt

    • der Service verifiziert die Signatur (mithilfe des mitgeschickten Public-Key), speichert die Credential-ID und den Public-Key und löscht die Challenge

Identifizierung

ACHTUNG: der Benutzer gibt eine Identität vor (es gibt aber scheinbar auch Username-less-Ansätze ... siehe unten in der Yubico-Demo), sie per Web-Authentication verifiziert werden kann. Es ist also nicht so, daß ich mich mit dem Authenticator komplett automatisch anmelden kann - den Usernamen muß ich noch wissen!!!

Will sich der Benutzer gegenüber Amazon identifizieren (um eine Bestellung abzugeben), so initiiert Amazon ein Challenge-Response-Protokoll:

  • auf dem Amazon-Server wird eine Challenge (bestehend aus einer sehr großen Zufallszahl) für den potentiellen User erzeugt und persistiert

  • die Challenge und die wird zur WebApp (Webapplikation/MobileApp) geschickt, die auf dem Desktop/Mobile Device des Benutzers läuft. Die WebApp verwendet die Web-Authentication-API Bibliothek (z. B. JavaScript), die den Zugang über den Browser zum Authenticator-Device bietet. Infolgedessen wird der Benutzer per Popup (o. ä.) aufgefordert, seine Identität zu bestätigen (z. B. per Fingerabdruck).

  • nur mit dem richtigen Fingerabdruck wird der Private-Key für den Authenticator freigeschaltet, der eine Signatur zu Amazon schickt. Die Signatur wird dann mit dem registrierten Public-Key geprüft

In Action

  • Demo auf Android Phone und Windows 10 per Windows Hello

Im Juni 2018 wollte ich das mal in eine Web-Anwendung einbauen. Allerdings hatte ich hardwaretechnisch recht schlechte Voraussetzungen, da ich nur über Apple Geräte mit Fingerprintleser verfügte und Apple noch kein Webauthn unterstützt. Deshalb suchte ich nach einer Möglichkeit Google Chrome zu verwenden. Die schönste User Experience wäre eine Webapplikation auf einem mobilen Device gewesen, doch ich besaß auch kein Android-Gerät mit Fingerprintleser. Letztlich fand ich folgenden Lösungsansatz:

  • Windows Laptop, so daß Windows Hello mit Fingerprintleser verwendet werden kann (Gesichtserkennung sollte dann ganz ähnlich funktionieren)

  • Kensington VeriMark Fingerprint Key (mein Laptop hat keinen Fingerprint-Key), der als Authenticator in Windows registriert ist (Windows Hello)

Nach meinem Verständnis würde Windows in diesem Fall die Private-Keys verwalten und mit dem VeriMark schützen - siehe hier.

Yubico-Demo-Anwendung

  • https://demo.yubico.com/webauthn/

Hier kann man seinen Authenticator registrieren und für den Login bei Yubico verwenden. Yubico bietet sogar die Möglichkeit zur username-less Authentifizierung, so daß man tatsächlich nicht mal mehr einen Usernamen wissen muß.

java-webauthn-server

  • https://developers.yubico.com/java-webauthn-server/

ebay UAF Server - OpenSource

  • https://github.com/eBay/UAF

PreviousOpenID ConnectNextAuthorisierung

Last updated 3 years ago

Was this helpful?