Com o número crescente de ameaças à segurança cibernética, torna-se cada vez mais importante para os desenvolvedores atualizarem seus padrões de segurança de aplicativos da web, garantindo a segurança das contas dos usuários. Para esse fim, muitos aplicativos online agora estão pedindo aos usuários que adicionem uma camada extra de segurança a suas contas. Eles fazem isso habilitando a autenticação de dois fatores. Existem vários métodos para implementar a autenticação de dois fatores, e a autenticação TOTP (Time Based One Time Password) é um deles.
Para entender o que é TOTP e como é usado, é necessário primeiro revisar brevemente os conceitos mais básicos. O primeiro deles é a autenticação de dois fatores. A autenticação de dois fatores (ou autenticação multifator) é um método de identificação de um usuário em um serviço (geralmente na Internet) solicitando dois tipos diferentes de dados de autenticação, que fornecem duas camadas, o que significa proteção de conta mais eficaz contra entrada não autorizada. Isso significa que, após habilitar a autenticação de dois fatores, o usuário deve passar por mais uma etapa para um login bem-sucedido. As etapas padrão para fazer login em uma conta são login e senha (Figura 1).

Habilitar a autenticação de dois fatores adiciona uma etapa extra ao pedido de login (Figura 2). Esse método é mais seguro porque o invasor não pode obter acesso à conta do usuário se não tiver acesso à senha normal do usuário e à senha descartável.

Atualmente, existem dois métodos amplamente utilizados para obter uma senha descartável:
Baseado em SMS . Cada vez que o usuário efetua login, ele recebe uma mensagem de texto para o número do celular especificado na conta, que contém uma senha de uso único.
TOTP. QR- , .
SMS . , . , SMS , . . NIST 2016 . SMS, TOTP - .
, , , , . :
, ,
( ), ,
, , ,
, , , . , SMS , , . . SMS , TOTP , , .
, TOTP, ( ) . , . . , , , , .
TOTP – , .
:
,
,
,
, . , . 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, , .
A autenticação de dois fatores está ganhando popularidade. Muitos aplicativos da web o implementam para aumentar a segurança. Ao contrário do método baseado em SMS, o método TOTP também requer pouco esforço. Portanto, vale a pena implementar esse recurso para qualquer aplicativo.