TOTP (algoritmo de contraseña de un solo uso basado en el tiempo)

Con el creciente número de amenazas de ciberseguridad, se vuelve cada vez más importante para los desarrolladores actualizar los estándares de seguridad de las aplicaciones web mientras se aseguran de que las cuentas de los usuarios estén seguras. Con este fin, muchas aplicaciones en línea ahora piden a los usuarios que agreguen una capa adicional de seguridad a su cuenta. Lo hacen habilitando la autenticación de dos factores. Existen varios métodos para implementar la autenticación de dos factores, y la autenticación TOTP (contraseña única basada en el tiempo) es uno de ellos.





Para comprender qué es TOTP y cómo se usa, es necesario primero revisar brevemente los conceptos más básicos. El primero de ellos es la autenticación de dos factores. La autenticación de dos factores (o autenticación de múltiples factores) es un método para identificar a un usuario en un servicio (generalmente en Internet) mediante la solicitud de dos tipos diferentes de datos de autenticación, lo que proporciona dos capas, lo que significa una protección de cuenta más efectiva contra la entrada no autorizada. Esto significa que después de habilitar la autenticación de dos factores, el usuario debe realizar un paso más para iniciar sesión correctamente. Los pasos estándar para iniciar sesión en una cuenta son ingresar un nombre de usuario y una contraseña (Figura 1).





Figura 1. Procedimiento para iniciar sesión en una cuenta sin autenticación de dos factores
Figura 1. Procedimiento para iniciar sesión en una cuenta sin autenticación de dos factores

(.2). , , , .





Figura 2. Iniciar sesión en una cuenta con autenticación de dos factores conectada
2.

:





  1. SMS. , , , .





  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, , .





La autenticación de dos factores está ganando popularidad. Muchas aplicaciones web lo implementan para mayor seguridad. A diferencia del método basado en SMS, el método TOTP también requiere poco esfuerzo. Por lo tanto, vale la pena implementar esta función para cualquier aplicación.








All Articles