Skip to main content
Cybersecurity

Two-Factor Authentication: Why SMS OTP Is Not Enough

That six-digit code your bank texts you? It travels through a telecom system built in the 1970s. SIM swaps, SS7 holes, and plain old trickery make SMS OTP a shaky second factor -- here is what actually works better.

VS
Vikram Singh
·13 min read
Share:
Two-Factor Authentication: Why SMS OTP Is Not Enough

No, the six-digit code your bank just texted you isn't as safe as you think. People treat SMS OTPs like a vault door when they're closer to a screen door -- better than nothing, sure, but a determined attacker walks right through. And in India, where practically every login from UPI to Aadhaar verification funnels through a text message, the stakes are enormous. A 2025 report by the Indian Cyber Crime Coordination Centre pegged SIM swap and OTP interception losses at somewhere around Rs 1,200 crore that year alone. That number probably undercounts reality since many victims don't file formal complaints.

So let's talk about what's actually broken, why Indian banks keep clinging to SMS OTP anyway, and what you can do right now -- today, on your phone -- to stop being an easy target.

The Shaky Foundation: How SMS Was Never Built for Security

Here's something most people don't realize: text messages travel over a protocol called Signaling System 7, or SS7. It was designed in the 1970s and formalized in the 1980s. Back then, the telecom world was a cozy club of government-run operators who trusted each other implicitly. SS7 had basically no authentication between network nodes. Any operator in the chain could request to reroute messages, query subscriber locations, or intercept traffic, and the system would just... comply.

Fast forward to 2026. There are now thousands of telecom operators and interconnect providers worldwide, some of them tiny outfits in jurisdictions with minimal oversight. Researchers at Security Research Labs in Berlin demonstrated years ago that anyone with SS7 access -- which can sometimes be purchased for a few hundred dollars from shady providers -- can intercept SMS messages destined for any phone number on the planet. They don't need malware. They don't need your phone. They just need your number and a gateway into the SS7 network.

Indian telecom networks aren't immune. Despite TRAI's push for security upgrades, the underlying SS7 infrastructure still carries billions of messages daily. The protocol wasn't designed for a world where a text message is the key to your bank account. It was designed for a world where the biggest concern was routing a phone call between Bombay and Delhi.

SIM Swap Fraud: The Attack That Doesn't Need Any Hacking

If SS7 exploitation sounds too technical, SIM swap fraud is its blunt-force cousin. A fraudster walks into a Jio, Airtel, or Vi retail store -- or calls customer service -- with a fake ID or a convincing sob story. "I lost my phone, I need a replacement SIM for this number." Sometimes they've bribed a store employee. Sometimes they've social-engineered the call center agent. Either way, your phone number gets transferred to a SIM card the criminal controls.

The moment that happens, your phone goes dead. No signal, no calls, no messages. But on their end? They're receiving every SMS OTP sent to your number. Bank transactions, email password resets, social media logins -- all of it flows to them. Most victims don't even notice for an hour or two. That's plenty of time to drain a bank account.

A widely reported case from Hyderabad in late 2024 involved a retired professor who lost Rs 47 lakh after criminals executed a SIM swap through a corrupted Airtel franchise. The attackers moved money through multiple UPI IDs within 90 minutes. By the time the professor realized his phone wasn't working and rushed to the Airtel store, the money was gone. Cases like his show up in Indian cybercrime reports with depressing regularity.

TRAI introduced stricter re-verification rules for SIM replacements in 2025, including mandatory biometric checks. That's helped somewhat. But enforcement is uneven -- franchise stores in smaller towns don't always follow protocol, and determined criminals adapt fast.

Malware That Reads Your Messages Before You Do

There's a third attack vector that doesn't require any manipulation of the telecom system at all. Android malware designed specifically to intercept SMS OTPs has become alarmingly common in India. These apps typically disguise themselves as something useful -- a PDF reader, a loan calculator, a "free" version of a popular paid app. They ask for SMS permissions during installation. Most users click "Allow" without thinking.

Once installed, the malware runs silently in the background. Every incoming SMS gets forwarded to a remote server. The attacker doesn't need your SIM. They don't need SS7 access. They just need you to have installed their app sometime in the past, possibly weeks or months ago, and forgotten about it.

CERT-In flagged over 200 such malicious apps targeting Indian users in 2025, many distributed through Telegram groups and WhatsApp forwards rather than official app stores. Some were even found briefly on the Play Store before Google pulled them. The malware families have names like EventBot, FluBot, and Cerberus -- and they're getting more sophisticated with every iteration.

The Old-Fashioned Way: Just Asking You for the Code

Sometimes the simplest attack is the one that works best. Social engineering -- where a scammer calls you pretending to be from your bank, the tax department, or a delivery service and asks you to "confirm" an OTP -- still accounts for a huge chunk of fraud in India. You'd think awareness campaigns would've solved this by now, but there's something about a confident voice saying "Sir, this is an urgent security verification" that overrides people's better judgment.

I've talked to fraud investigators who say they see this daily. The victim knows, in theory, that they shouldn't share OTPs. But in the moment, with someone on the phone creating urgency and fear, they read out the number. It takes maybe 15 seconds. The damage can take months to undo, if it's undone at all.

Why Indian Banks Won't Let Go of SMS OTP

Here's the frustrating part. Indian banks know all of this. RBI knows all of this. So why is SMS OTP still the default for almost every banking transaction in the country?

A few reasons, and none of them are great.

Universal reach. India has over a billion mobile subscriptions, and every single one can receive an SMS. Not every phone runs apps. Not every user can handle installing and configuring an authenticator. SMS is the one channel that works on a Rs 1,500 feature phone in rural Bihar and a Rs 1,50,000 iPhone in South Mumbai. For banks that serve hundreds of millions of customers across wildly different tech-literacy levels, that universality is hard to give up.

Regulatory inertia. RBI's guidelines on two-factor authentication were written at a time when SMS OTP was considered strong security. Updating regulations takes time, consultation, and political will. The framework is slowly evolving -- RBI's 2025 draft guidelines on digital payment security do mention "token-based" and "device-bound" authentication as alternatives -- but the shift is glacial.

Customer support costs. When you lock yourself out of an authenticator app, there's no easy fallback. Banks would need to build entirely new recovery workflows, train support staff, and handle a flood of "I can't log in" calls. SMS OTP is simple to support. It either arrives or it doesn't.

None of these justify the security risk, in my opinion. But they do explain why we're stuck. For now, the burden of better security falls on individual users.

What Actually Works: Authenticator Apps

The single best upgrade most people can make today is switching from SMS OTP to an authenticator app. These apps -- Google Authenticator, Microsoft Authenticator, and Authy are the big three -- generate time-based one-time passwords (TOTP) directly on your device. The code changes every 30 seconds. It's never transmitted over SMS, never touches the telecom network, and can't be intercepted by SIM swaps or SS7 attacks.

How does TOTP actually work? When you set up an authenticator app with a service, both your device and the server agree on a shared secret key. This key, combined with the current time, feeds into an algorithm (usually HMAC-SHA1) that spits out a six-digit code. Your app and the server independently generate the same code at the same time. No network communication needed during login -- your phone can even be in airplane mode.

There's also HOTP (HMAC-based One-Time Password), which uses a counter instead of the clock. It's an older standard and less common now. TOTP is what you'll encounter in practice. The 30-second window provides a nice balance between usability and security -- long enough for you to type the code, short enough that a stolen code is useless within a minute.

Setting Up Google Authenticator on Gmail

  1. Open your Google Account settings at myaccount.google.com
  2. Go to Security > 2-Step Verification
  3. Under "Authenticator app," click Set up
  4. Scan the QR code shown on screen with Google Authenticator on your phone
  5. Enter the six-digit code the app generates to confirm setup
  6. Google will suggest you also save backup codes -- do this, seriously

Setting Up on Instagram

  1. Go to Settings > Accounts Centre > Password and security
  2. Tap Two-factor authentication and select your account
  3. Choose Authentication app
  4. Instagram will show a key or QR code -- add it to your authenticator app
  5. Enter the generated code to verify

Indian Banking Apps

This is where things get tricky. Most Indian banks -- SBI, HDFC, ICICI, Axis -- still don't support authenticator apps for transaction authentication. Some offer it for net banking login as an optional layer, but the transaction OTP almost always comes via SMS. A few private banks and fintech apps have started offering in-app authentication (where the banking app itself generates or confirms the code), which is a step in the right direction. PhonePe and Google Pay use device-bound authentication that's significantly stronger than SMS OTP, even though most users probably don't think about it.

Which Authenticator App Should You Pick?

Google Authenticator is the simplest. It recently added cloud backup, so you won't lose everything if you switch phones. Microsoft Authenticator includes a built-in password manager and can do push-notification-based approvals for Microsoft accounts. Authy has had cloud backup for years and supports multi-device sync, which is handy but slightly increases your attack surface since a compromised Authy account could expose all your tokens. Each has tradeoffs. Honestly, any of them is a massive upgrade over SMS.

The Gold Standard: Hardware Security Keys

If authenticator apps are good, hardware security keys are better -- maybe the best consumer authentication tool that exists right now. A YubiKey is a small physical device, roughly the size of a USB thumb drive, that plugs into your computer or taps against your phone via NFC. When a service asks for your second factor, you touch the key, and it completes a cryptographic handshake that proves you possess the physical device.

Why is this so strong? Because the key never reveals its secret. It performs the cryptographic operation internally and sends only the result. There's nothing to phish -- even if you land on a perfect replica of your bank's website, the key won't authenticate because the cryptographic challenge is bound to the real domain. There's nothing to intercept over SMS. There's nothing to social-engineer out of you over the phone.

YubiKeys are available in India through Amazon and the official Yubico store. Prices range from roughly Rs 3,500 for a basic USB-A key to Rs 5,500+ for the NFC-enabled models that work with phones. That's not cheap for most Indians, true. But if you're protecting a bank account with significant savings, a brokerage account, or sensitive business email, it's a tiny price relative to the potential loss.

The catch? Support is limited for Indian-specific services. Google, Microsoft, GitHub, Twitter, Facebook -- they all work with hardware keys. Indian banking apps? Almost none. That might change as FIDO2 (the standard behind hardware keys and passkeys) gains more traction, but we're not there yet as of early 2026.

Passkeys: Where This Is All Headed

Passkeys are the new kid, and they're genuinely exciting. Built on the same FIDO2/WebAuthn standards as hardware keys, passkeys let you authenticate using your device's built-in biometric sensor (fingerprint or face) or a device PIN. No password. No OTP. No separate app. Your phone or laptop becomes the authenticator.

Google rolled out passkey support across all accounts in 2023-2024. Apple has it baked into iCloud Keychain. Microsoft supports it through Windows Hello. When you set up a passkey, a cryptographic key pair is created -- the private key stays on your device (or in your platform's encrypted cloud), and the public key goes to the service. During login, your device signs a challenge with the private key after you confirm with biometrics. The private key never leaves your device.

Indian adoption is still early. Flipkart and a handful of fintech startups have begun experimenting with passkey login. It'll probably take another year or two before major banks offer it. But the direction is clear, and every account you set up with a passkey today is one fewer account vulnerable to OTP theft.

Backup Codes: The Safety Net Everyone Ignores

Here's a thing that doesn't get talked about enough. When you enable any form of 2FA -- authenticator app, hardware key, passkeys -- most services also offer backup codes. These are a set of one-time-use codes (usually 8-10 of them) that you can use if you lose access to your second factor. Lost your phone? Hardware key fell in the river? Backup codes get you back in.

Write them down on paper. Actual paper, with a pen. Store that paper somewhere safe -- a locked drawer, a safe, wherever you keep important documents. Don't save them in a notes app on the same phone that has your authenticator. Don't email them to yourself. The whole point is that they exist independently of any digital device that could be compromised.

I can't stress this enough because I've seen people lock themselves out of accounts permanently. Gmail with authenticator app, phone gets stolen, no backup codes, email recovery address was also on the phone. That's a nightmare scenario, and it's entirely preventable with five minutes of preparation.

A Practical Security Upgrade Plan

If you're reading this and thinking "okay, what do I actually do," here's a concrete plan you can follow this weekend:

  1. Install an authenticator app. Google Authenticator or Authy. Takes 60 seconds.
  2. Enable authenticator-based 2FA on your email first. Your email is the master key to everything else. If someone gets into your email, they can reset every other password you have. Gmail and Outlook both support TOTP. Do it now.
  3. Move through your high-value accounts. Social media (Instagram, Twitter, Facebook), cloud storage (Google Drive, Dropbox), financial tools (Zerodha, Groww, any crypto exchange you use). Switch each one from SMS to authenticator.
  4. Save backup codes for every account you switch. Print them or write them by hand. Store offline.
  5. Lock your SIM. Call your telecom provider -- Jio (199), Airtel (121), Vi (199) -- and ask about enabling a SIM lock or port-out protection PIN. This won't stop all SIM swap attempts, but it adds a real barrier.
  6. If you can afford it, buy a hardware key. Start using it for Google and Microsoft accounts at minimum. One YubiKey 5 NFC will cover most use cases.
  7. Audit app permissions on your Android phone. Go to Settings > Privacy > Permission Manager > SMS. Remove SMS access from any app that doesn't absolutely need it. If you see an app you don't recognize, uninstall it.

TOTP vs HOTP: The Technical Bits (If You're Curious)

Both TOTP and HOTP are defined by open standards from the IETF -- RFC 6238 and RFC 4226 respectively. They both use HMAC (Hash-based Message Authentication Code) with a shared secret to generate codes. The difference is what goes into the hash alongside that secret.

HOTP uses a counter. Each time you generate a code, the counter increments by one. The server keeps track of the counter value too. This means if you press the button five times without logging in, you and the server fall out of sync and the server has to search ahead through a window of valid counter values. It works, but it's clunky.

TOTP uses the current Unix timestamp divided by a time step (usually 30 seconds). Both your device and the server know the current time, so they independently arrive at the same code without any counter synchronization. If clocks drift slightly, servers typically accept codes from one step ahead or behind. It's more elegant, and it's why basically every authenticator app uses TOTP now.

One edge HOTP has: since the code doesn't expire on a timer, it's sometimes used in hardware tokens that can't keep accurate time (like some older banking dongles). For app-based authentication, though, TOTP won in practice years ago.

What Needs to Change at the System Level

Individual action matters, but let's be honest -- the system needs to change too. RBI should mandate that banks offer at least one non-SMS second factor for all customers. Telecom operators need real penalties for SIM swaps that happen due to employee negligence or corruption. CERT-In should expand its real-time threat intelligence sharing with banks so that known OTP-stealing malware campaigns trigger automatic blocks.

Some of this is starting to happen. The RBI's draft "Framework for Securing Digital Payments" from mid-2025 specifically calls out "device-bound" and "token-based" authentication as preferred alternatives. NPCI has been working on device binding for UPI that would make transaction authorization independent of SMS. Progress is real, but it's slow, and it doesn't help the person whose bank account gets cleaned out today.

Until the institutions catch up, your security is your responsibility.


A friend of mine -- a software developer, someone who should've known better -- got hit with a SIM swap last March. He'd been meaning to set up an authenticator app for months. "It's on my list," he'd say every time I brought it up. The attackers got into his email, then his Zerodha account, then his HDFC net banking. He was on a flight when it happened and didn't notice his phone losing signal. By the time he landed in Bangalore and saw the messages from his bank, he was down Rs 3.2 lakh. It took him four months and a cybercrime FIR to get partially reimbursed. He set up Google Authenticator the same night. Everyone I've talked to who's gone through this says the same thing: they wish they'd done it sooner. Don't wait for the lesson to come the hard way.

VS

Written by

Vikram Singh

Cybersecurity Consultant

Vikram Singh is a certified ethical hacker and cybersecurity consultant who has helped secure systems for major Indian banks and government agencies. He writes about practical security measures for everyday Indian internet users.

Found this article helpful? Share it!

Share:

Related Posts

Comments (0)

Leave a Comment

Loading comments...