TOTP stands for Time-based One-Time Passwords and is a common form of two-factor authentication (2FA). Unique numeric passwords are generated with a standardized algorithm that uses the current time as an input. The time-based passwords are available offline and provide user-friendly, increased account security when used as a second factor.
Example TOTP accounts in an authenticator app
TOTP is also known as app based authentication, software tokens, or soft tokens. Authentication apps like Authy and Google Authenticator support the TOTP standard.
Twilio's Verify API offers support for TOTP authentication in addition to SMS, voice, email, and push channels. Get started with our TOTP sample application or step-by-step QuickStart.
2FA adds an extra layer of account protection by requiring two types of authentication. This can be something a user knows, like a password, and something the user has, like a phone. One-time passwords, including TOTP, are a common possession or "something you have" factor and help increase the security of your users accounts.
A recent study about the usability of 2FA methods found that TOTP had the highest usability score of the various second factors tested. This tells us that TOTP is not only a viable method for authentication, but will be preferred by many users.
system usability scale (SUS) scores show TOTP is most usable
The TOTP algorithm follows an open standard documented in RFC 6238. The inputs include a shared secret key and the system time. The diagram below shows how the two parties can separately calculate the passcode without internet connectivity.
The algorithm uses a form of symmetric key cryptography: the same key is used by both parties to generate and validate the token.
The inputs to the TOTP algorithm are device time and a stored secret key. Neither the inputs nor the calculation require internet connectivity to generate or verify a token. Therefore a user can access TOTP via an app like Authy while offline.
TOTP's offline support is ideal for users who might need to access their authentication while traveling abroad, on a plane, in a remote area, or otherwise without network connectivity.
While SMS is an ideal solution for 2FA adoption and ease of use, TOTP has several benefits including:
Most customers end up implementing multiple forms of 2FA, so their users can choose the channel that works best for them. Other channels Twilio Verify supports include push, voice, and email. This blog post takes a more detailed look at the security concerns of SMS 2FA.
HOTP stands for HMAC-based One-Time Password and is the original standard that TOTP was based on. Both methods use a secret key as one of the inputs, but while TOTP uses the system time for the other input, HOTP uses a counter, which increments with each new validation. With HOTP, both parties increment the counter and use that to compute the one-time password.
The HOTP standard is documented in RFC 4226.
While HOTP is still used, consumer authenticator apps like Authy and Google Authenticator implement the TOTP standard.
Here's the code to create a TOTP factor. Follow the TOTP Quickstart for more details about how to generate a QR code and validate tokens.
1// Download the helper library from https://www.twilio.com/docs/node/install2const twilio = require("twilio"); // Or, for ESM: import twilio from "twilio";34// Find your Account SID and Auth Token at twilio.com/console5// and set the environment variables. See http://twil.io/secure6const accountSid = process.env.TWILIO_ACCOUNT_SID;7const authToken = process.env.TWILIO_AUTH_TOKEN;8const client = twilio(accountSid, authToken);910async function createNewFactor() {11const newFactor = await client.verify.v212.services("VAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")13.entities("ff483d1ff591898a9942916050d2ca3f")14.newFactors.create({15factorType: "totp",16friendlyName: "Taylor's Account Name",17});1819console.log(newFactor.binding);20}2122createNewFactor();
1{2"sid": "YFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",3"account_sid": "ACaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",4"service_sid": "VAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",5"entity_sid": "YEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",6"identity": "ff483d1ff591898a9942916050d2ca3f",7"binding": {8"alg": "ES256",9"public_key": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8GdwtibWe0kpgsFl6xPQBwhtwUEyeJkeozFmi2jiJDzxFSMwVy3kVR1h/dPVYOfgkC0EkfBRJ0J/6xW47FD5vA=="10},11"date_created": "2015-07-30T20:00:00Z",12"date_updated": "2015-07-30T20:00:00Z",13"friendly_name": "Taylor's Account Name",14"status": "unverified",15"factor_type": "totp",16"config": {17"sdk_version": "1.0",18"app_id": "com.example.myapp",19"notification_platform": "fcm",20"notification_token": "test_token"21},22"metadata": {23"os": "Android"24},25"url": "https://verify.twilio.com/v2/Services/VAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/Entities/ff483d1ff591898a9942916050d2ca3f/Factors/YFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"26}
Here is an example of a TOTP generated with the Verify API inside the Authy App. Tokens expire in 30 seconds by default, but you can change the expiration period when you create a Factor.
Download the Authy app for iOS or Android and learn more about how to add authenticator app support on your favorite websites with Authy's 2FA guides.
TOTP support through a consumer authenticator app is widely available, PII-less, and offers increased security. TOTP is a great solution for both providing a good user experience and strong authentication. Many companies now offer TOTP support as a step up from SMS based 2FA.
Check out these resources for more information on Twilio's APIs for multichannel user verification: