Zweifaktor Authentifizierung mit Google Authenticator

Max Maischein

Frankfurt.pm

Übersicht

  • Was ist Zweifaktor Authentifizierung?

  • Workflow

  • Demo

  • Sicherheitsüberlegungen

Wer bin ich?

  • Max Maischein

  • DZ BANK Frankfurt

  • Deutsche Zentralgenossenschaftsbank

  • Informationsmanagement TxB

Authentication is hard

  • Wer darf zugreifen?

  • Jeder

  • Passwörter

  • Zertifikate

  • ...

Zugangsbegrenzung

  • Wissen (Passwort)

  • Haben (Gegenstand)

  • Sein (Fingerabdruck)

Ein Passwort ist nicht genug

  • Keyboard Sniffer

  • Passwortweitergabe

  • Monatlicher Passwortwechsel

  • Einmalkennwörter

  • Bequemer: Automatischer Wechsel

Wie funktionierts

  • Echtes One Time Pad ("iTan")

  • Zweiter Kanal (SMS auf Handy, "mTan")

  • Zugangscode dynamisch generieren (RSA Token, Battle.Net Authenticator (WoW), ...)

Google Authenticator

  • Programm im Handy als Token ("Soft-Token")

  • Initiative for Open Authentication

  • TOTP Algorithmus, RFC 6238

  • Keine Netzwerkverbindung benötigt

  • "Google Authenticator" im Google Play Store

  • Auch für iGeräte verfügbar

  • http://www.dynalogin.org - kompatible Alternative

Wie funktioniert TOTP

  • UTC Zeit ist gleich rund um die Welt

  • Secret + UTC = Zugangscode

Wie funktioniert TOTP

  • UTC Zeit ist gleich rund um die Welt

  • Secret + UTC = Zugangscode

Wie funktioniert TOTP

  • UTC Zeit ist gleich rund um die Welt

  • Secret + UTC = Zugangscode

Wie funktioniert TOTP

  • UTC Zeit ist gleich rund um die Welt

  • Secret + UTC = Zugangscode

  • Secret ist äquivalent zum Zugangscode!

Workflow

  • Anmelden mit Passwort

  • Setup der Zwei-Faktor Anmeldung

  • ... Später mal ...

  • Anmelden mit Passwort UND Handy

OATH für den Nutzer

  • Setup muss einfach sein

  • Manuelle Eingabe des Shared Secret

  • Lange base32 strings (RFC 3548)

  • Beispiel: oyztamdsmjtwymtr

OATH für den Nutzer

  • Setup muss einfach sein

  • Manuelle Eingabe des Shared Secret

Setup mit Google Authenticator

Besser mit QRCode

Setup mit Google Authenticator

Besser mit QRCode

CPAN hat da was.

Live Demo

API

 1:    # Secret pro Nutzer
 2:    my $auth = Auth::GoogleAuthenticator->new(
 3:        secret => 'test@example.com'
 4:    );

API

 1:    # Secret pro Nutzer
 2:    my $auth = Auth::GoogleAuthenticator->new(
 3:        secret => 'test@example.com'
 4:    );
 5:    print "Registration key " . $auth->registration_key() . "\n";

API

 1:    # Secret pro Nutzer
 2:    my $auth = Auth::GoogleAuthenticator->new(
 3:        secret => 'test@example.com'
 4:    );
 5:    print "Registration key " . $auth->registration_key() . "\n";
 6:    print "Expected OTP value " . $auth->totp() . "\n";

API

 1:    # Secret pro Nutzer
 2:    my $auth = Auth::GoogleAuthenticator->new(
 3:        secret => 'test@example.com'
 4:    );
 5:    print "Registration key " . $auth->registration_key() . "\n";
 6:    print "Expected OTP value " . $auth->totp() . "\n";
 7:
 8:    my $verified = $auth->verify( $user_input )
 9:            ? 'verified'
10:            : 'not verified';
11:    print "$verified\n";

Demo

Vergleich API / Anwendung

Vergleich API / Anwendung

Vergleich API / Anwendung

Vergleich API / Anwendung

Vergleich API / Anwendung

Vergleich API / Anwendung

API

 1:  ->registration_url( $label, $type )

Erzeugt die otpauth:// URL

API

 1:  ->registration_url( "test2 <OTP>" )

Erzeugt die otpauth:// URL

 1:  my $au=Auth::GoogleAuthenticator->new(
 2:    secret=>'test@example.com'
 3:  );
 4:  print $au->registration_url('test2 <OTP>')

API

 1:  ->registration_url( "test2 <OTP>" )

Erzeugt die otpauth:// URL

 1:  my $au=Auth::GoogleAuthenticator->new(
 2:    secret=>'test@example.com'
 3:  );
 4:  print $au->registration_url('test2 <OTP>')
 5:    
 6:  otpauth://totp/test2 <OTP>?secret=orsxg5camv4gc3lqnrss4y3pnu

API

 1:  ->registration_url( "test2 <OTP>" )

Erzeugt die otpauth:// URL

 1:  print $au->registration_url('test2 <OTP>')
 2:    
 3:  otpauth://totp/test2 <OTP>?secret=orsxg5camv4gc3lqnrss4y3pnu

Gedanken zur Sicherheit

  • Secret ist Passwort-äquivalent

  • Hashing nicht möglich

  • RFC 6238 hat keine Umgangshinweise für das Secret

  • Secret-Wechsel ist leicht

  • Immer zweiten Mechanismus (gehashtes Passwort)

  • Zeitlimit für Zweifaktor-Sessions

Sicherheit durch Kombination

 1:               Kennwort    TOTP       2-Faktor

Sicherheit durch Kombination

 1:               Kennwort    TOTP       2-Faktor
 2:   
 3:  Austausch

Sicherheit durch Kombination

 1:               Kennwort    TOTP       2-Faktor
 2:   
 3:  Austausch    Mittel

Sicherheit durch Kombination

 1:               Kennwort    TOTP       2-Faktor
 2:   
 3:  Austausch    Mittel      Leicht

Sicherheit durch Kombination

 1:               Kennwort    TOTP       2-Faktor
 2:   
 3:  Austausch    Mittel      Leicht     Leicht

Sicherheit durch Kombination

 1:               Kennwort    TOTP       2-Faktor
 2:   
 3:  Austausch    Mittel      Leicht     Leicht
 4:    
 5:    
 6:  Datenleck

Sicherheit durch Kombination

 1:               Kennwort    TOTP       2-Faktor
 2:   
 3:  Austausch    Mittel      Leicht     Leicht
 4:  
 5:  
 6:  Datenleck    Schwer      
 7:               (bcrypt)

Sicherheit durch Kombination

 1:               Kennwort    TOTP       2-Faktor
 2:   
 3:  Austausch    Mittel      Leicht     Leicht
 4:  
 5:  
 6:  Datenleck    Schwer      Leicht     
 7:               (bcrypt)

Sicherheit durch Kombination

 1:               Kennwort    TOTP       2-Faktor
 2:   
 3:  Austausch    Mittel      Leicht     Leicht
 4:  
 5:  
 6:  Datenleck    Schwer      Leicht     Schwer
 7:               (bcrypt)

Sicherheit durch Kombination

  • Google - "Kennwort-Protokolle" (IMAP, POP3, ...) umgehen Zwei-Faktor

  • EverNote - Direkte Links zu Daten umgehen Zwei-Faktor

  • ...

Umrüsten auf Zweifaktor

  • Alles umrüsten (Google!)

  • Kennwortreset bzw. Handyverlust?!

  • Ansatz: 3 Master-Reset Kennwörter ausdrucken (PUK)

Relevante Module

  • Auth::GoogleAuthenticator verwendet

  • Authen::OATH

  • Imager::QRCode

  • Dancer

Beispielcode

"Google Authenticator" im Google Play Store

http://code.google.com/p/google-authenticator/

Auch für iGeräte verfügbar

Der Beispielcode ist online auf CPAN in

Auth::GoogleAuthenticator

http://www.dynalogin.org - noch ein Android Soft-Token

Danke

"Google Authenticator" im Google Play Store

http://code.google.com/p/google-authenticator/

Auch für iGeräte verfügbar

Der Beispielcode ist online auf CPAN in

Auth::GoogleAuthenticator

http://www.dynalogin.org - noch ein Android Soft-Token

Fragen?

Max Maischein (corion@cpan.org)