TOTP (Zeitbasierter Einmalkennwortalgorithmus)

Mit dem Aufkommen von Cybersicherheitsbedrohungen wird es für Entwickler immer wichtiger, ihre Sicherheitsstandards für Webanwendungen zu aktualisieren und gleichzeitig sicherzustellen, dass Benutzerkonten sicher sind. Zu diesem Zweck fordern viele Online-Anwendungen Benutzer auf, ihrem Konto eine zusätzliche Sicherheitsebene hinzuzufügen. Dazu aktivieren sie die Zwei-Faktor-Authentifizierung. Es gibt verschiedene Methoden zum Implementieren der Zwei-Faktor-Authentifizierung, und die TOTP -Authentifizierung (Time Based One Time Password) ist eine davon.





Um zu verstehen, was TOTP ist und wie es verwendet wird, müssen zunächst die grundlegenderen Konzepte kurz besprochen werden. Die erste davon ist die Zwei-Faktor-Authentifizierung. Die Zwei-Faktor-Authentifizierung (oder Multi-Faktor-Authentifizierung) ist eine Methode zur Identifizierung eines Benutzers in einem Dienst (normalerweise im Internet) durch Anfordern von zwei verschiedenen Arten von Authentifizierungsdaten, die eine Zweischicht-Authentifizierung bieten, was einen effektiveren Kontoschutz gegen unbefugte Eingabe bedeutet. Dies bedeutet, dass der Benutzer nach dem Aktivieren der Zwei-Faktor-Authentifizierung einen weiteren Schritt durchlaufen muss, um sich erfolgreich anzumelden. Die Standardschritte für die Anmeldung bei einem Konto sind die Eingabe eines Benutzernamens und eines Kennworts (Abbildung 1).





Abbildung 1. Verfahren zum Anmelden bei einem Konto ohne Zwei-Faktor-Authentifizierung
Abbildung 1. Verfahren zum Anmelden bei einem Konto ohne Zwei-Faktor-Authentifizierung

Durch Aktivieren der Zwei-Faktor-Authentifizierung wird der Anmeldereihenfolge ein zusätzlicher Schritt hinzugefügt (Abbildung 2). Diese Methode ist sicherer, da der Angreifer keinen Zugriff auf das Benutzerkonto erhalten kann, wenn er nicht auf das reguläre Kennwort des Benutzers und das Einmalkennwort zugreifen kann.





Abbildung 2. Anmelden bei einem Konto mit verbundener Zwei-Faktor-Authentifizierung
Abbildung 2. Anmelden bei einem Konto mit verbundener Zwei-Faktor-Authentifizierung

Derzeit gibt es zwei weit verbreitete Methoden, um ein Einmalkennwort zu erhalten:





  1. Basierend auf SMS . Jedes Mal, wenn sich der Benutzer anmeldet, erhält er eine Textnachricht an die im Konto angegebene Mobiltelefonnummer, die ein Einmalkennwort enthält.





  2. TOTP. QR- , .





SMS . , . , SMS , . . NIST 2016 . SMS, TOTP - .





, , , , . :





  • , ,





  • ( ), ,





  • , , ,





, , , . , SMS , , . . SMS , TOTP , , .





, TOTP, ( ) . , . . , , , , .





TOTP – , .





:





,

















  1. ,





  2. ,





, . , . TOTP – HOTP.





HOTP « HMAC». (IETF) RFC4226. HOTP .





:





  • HMAC ( SHA-1)





hmacHash = HMAC-SHA-1 ( , )
      
      



  • 20 . . , . HOTP





hmacHash[19] means 19th byte of the string.offset = hmacHash[19] & 0xf;
truncatedHash = (hmacHash[offset++] & 0x7f) << 24 | (hmacHash[offset++] & 0xff) << 16 | (hmacHash[offset++] & 0xff) << 8 | (hmacHashh[offset++] & 0xff);
finalOTP = (truncatedHash % (10 ^ numberOfDigitsRequiredInOTP));
      
      



, 4 hmacHash [19]



. hmacHash [offset]



hmacHash [offset + 3]



31 truncatedHash



. , , .





HOTP. RFA4226 , .





, . ? TOTP. TOTP « ». IETF RFC6238. TOTP HOTP . , «» «», . , HOTP OTP. , , . , , Unix, . Unix , . , , . . , Google Authenticator 30 .





counter = currentUnixTime / 30
      
      



, . : . QR-. , , . , , QR-, . , – QR- . (, Google Authenticator App, Authy ..), . . TOTP -.





When user request to enable 2-factor authentication
// Generate a secret key of length 20.secretKey = generateSecretKey (20);
// Save that secret key in database for this particular user. SaveUserSecretKey (userId, secretKey);
// convert that secret key into qr image.qrCode = convertToQrCode (secretKey);
// send the qr image as responseresponse (qrCode);
      
      



QR-. QR-, . , Unix HOTP, . QR-. , , .





User types the code displayed in the application.
// Fetch secret key from database.secretKey = getSecretKeyOfUser (userId);
if (codeTypedByUser == getHOTP (secretKey, currentUnixTime / 30)) {enableTwoFactorAuthentication (userId);}
      
      



HOTP , OTP Unix. OTP , . , , , . , , . , .





User types the code displayed in the phone application to login
// Fetch secret key from database.secretKey = getSecretKeyOfUser (userId);
if (codeTypedByUser == getHOTP (secretKey, currentUnixTime)) {signIn (userId);}
      
      



, . , , QR- . , Google Authenticator App, . , , . SMS, , .





Die Zwei-Faktor-Authentifizierung wird immer beliebter. Viele Webanwendungen implementieren es für zusätzliche Sicherheit. Im Gegensatz zur SMS-basierten Methode erfordert die TOTP-Methode auch wenig Aufwand. Daher lohnt es sich, diese Funktion für jede Anwendung zu implementieren.








All Articles