Dubbed "login verification," Twitter's new approach eschews sending one-time codes via SMS to a phone. Instead, the second factor is provided via a unique, private key that resides only on a user's Android or iPhone, and which is generated by the Twitter app.
"When you enroll, your phone generates an asymmetric 2048-bit RSA keypair, which stores the private key locally on the device and sends the public key, which Twitter stores as part of your user object in our backend store, to the server," said Twitter security engineer Alex Smolen in a blog post.
If a user enables the feature, whenever someone attempts to log into his Twitter account -- using a valid username and password -- the site then sends a push notification, requesting verification, to the user's smartphone.
[ Who's worth following? Read 10 IT Leaders To Follow On Twitter. ]
"Within your Twitter app, you can then view the outstanding request, which includes several key pieces of information: time, geographical location, browser and the login request's challenge nonce [one-time request ID]," said Smolen. "At that point, you can choose to approve or deny the request. If you approve the request, the client will use its private key to respond by signing the challenge. If the signature is correct, the login request will be marked as verified."
What happens if the smartphone that's been used to generate the private key for a user's Twitter account goes missing? Helpfully, Twitter now offers a one-time-use backup code. "We encourage you to store it somewhere safe," said Smolen, who noted that this code is randomly generated, using an algorithm inspired by S/KEY. In addition, that code is hashed 10,000 times "to make the backup code work without sharing secrets," he said, meaning an attacker shouldn't be able to reverse-engineer the code and recover a password.