Как работает SMS-верификация — техническое объяснение
Шаг 1: Генерация OTP
Когда платформа требует подтверждения вашего номера телефона, она генерирует одноразовый пароль (OTP). Вот что происходит на стороне сервера:
- Пользователь отправляет номер телефона — Серверная часть платформы получает номер и проверяет его формат (код страны, количество цифр, допустимый префикс).
- Генерируется OTP — Создается криптографически случайный код, обычно из 4-6 цифр. Большинство реализаций используют
HMAC-SHA1илиHMAC-SHA256с временным или счетчиковым начальным значением (стандарты TOTP/HOTP из RFC 6238/RFC 4226). - OTP сохраняется — Код сохраняется на стороне сервера с меткой истечения срока действия (обычно 60-300 секунд) и связан с номером телефона.
- Применяется ограничение скорости — Платформа проверяет, сколько OTP было запрошено для этого номера за последнее время. Большинство сервисов разрешают 3-5 попыток на номер в час.
- Вызывается SMS API — Платформа отправляет запрос своему SMS-провайдеру с номером телефона и текстом сообщения.
Сам OTP обычно представляет собой просто случайное число. Платформы не встраивают OTP в хешированном виде в сообщение — оно отправляется в виде обычного текста в теле SMS. Это одна из фундаментальных уязвимостей безопасности SMS-верификации.
Шаг 2: Экосистема A2P SMS
A2P означает Application-to-Person (приложение для человека) — сообщения, отправляемые из программного приложения на телефон человека. Это отличается от P2P (Person-to-Person, человек-человек) обмена сообщениями. Экосистема A2P имеет свою собственную инфраструктуру:
SMS-агрегаторы
Большинство платформ не отправляют SMS напрямую через операторов. Вместо этого они используют SMS-агрегаторы — компании, которые поддерживают связи с сотнями операторов по всему миру. Крупные агрегаторы включают:
- Twilio — Крупнейший поставщик SMS API. Используется Uber, Airbnb, Stripe и тысячами других.
- Vonage (Nexmo) — Популярен для международного SMS-маршрутизации.
- Sinch — Силен в доставке OTP для корпоративных клиентов.
- MessageBird — Агрегатор с фокусом на Европу.
- Infobip — Крупный игрок на развивающихся рынках.
Когда Instagram отправляет вам OTP, сообщение, вероятно, проходит через Twilio или аналогичный агрегатор, прежде чем достигнет вашего оператора. Агрегатор отвечает за маршрутизацию, переговоры с операторами и подтверждение доставки.
SMS-маршрутизация
Агрегатор определяет оптимальный маршрут для доставки SMS. Для номера в США это может означать:
- Вызов API платформы → Агрегатор (например, Twilio)
- Агрегатор → Шлюз оператора (например, AT&T, T-Mobile)
- Шлюз оператора → SMSC (Short Message Service Center)
- SMSC → MSC (Mobile Switching Center)
- MSC → Базовая станция → Телефон пользователя
Международные сообщения добавляют сложности. OTP из платформы, базирующейся в США, для индийского номера может пройти через 2-3 промежуточных оператора, прежде чем достигнет получателя. Каждый этап добавляет задержку и небольшую вероятность сбоя.
Хотите увидеть это в действии?
Попробуйте VerifySMS бесплатно →Получите виртуальные номера и принимайте OTP в реальном времени
Шаг 3: SS7 и уровень сигнализации
SS7 (Signaling System No. 7) — это набор протоколов, который управляет взаимодействием телефонных сетей. Разработанный в 1970-х годах, он до сих пор является основой глобальной телефонии. При отправке SMS SS7 отвечает за:
- Поиск номера (запрос HLR) — Отправляющий оператор запрашивает Home Location Register (HLR), чтобы определить, какому оператору и сети принадлежит номер назначения.
- Маршрутизация сообщений — Сигналы SS7 определяют путь сообщения через сеть.
- Подтверждение доставки — Принимающий SMSC отправляет подтверждение доставки обратно через сигнализацию SS7.
Проблемы безопасности SS7
SS7 был разработан в эпоху, когда доступ к сети имели только доверенные телекоммуникационные операторы. Сегодня доступ к SS7 имеют тысячи организаций, что создает уязвимости в безопасности:
- Перехват SMS — Злоумышленник с доступом к SS7 может перенаправить SMS-сообщения на свое устройство. Это было продемонстрировано в реальных атаках на банковскую 2FA.
- Отслеживание местоположения — Запросы SS7 могут раскрыть физическое местоположение телефона.
- Подмена номеров — SS7 позволяет отправлять сообщения, которые выглядят так, будто они пришли с другого номера.
Именно эти уязвимости заставляют экспертов по безопасности рекомендовать переход от SMS-based 2FA к приложениям-аутентификаторам (TOTP) или аппаратным ключам (FIDO2). Однако для первоначальной проверки учетной записи (подтверждения владения номером) SMS остается отраслевым стандартом, поскольку имеет самый широкий охват.
Шаг 4: Как виртуальные номера получают SMS
Виртуальные телефонные номера работают путем замены физических SIM-карт и радиокомпонентов программным обеспечением. Вот как виртуальный номер получает OTP:
- Назначение номера — Поставщик виртуальных номеров арендует блоки номеров у операторов. Это реальные телефонные номера с действующей регистрацией у оператора.
- SIM-банк или программная SIM — Поставщик использует физические SIM-карты в оборудовании (SIM-банки с сотнями или тысячами SIM-карт) или интегрируется на уровне оператора для получения сообщений.
- SMS поступает к оператору — Сообщение OTP доставляется оператору, связанному с виртуальным номером, как и любая другая SMS.
- Сообщение перенаправляется — SIM-банк или интеграция с оператором перехватывает входящую SMS и перенаправляет ее на серверную часть поставщика через API.
- Пользователь видит код — Панель управления или API поставщика отображает полученное SMS пользователю.
Ключевой момент: с точки зрения отправляющей платформы, виртуальный номер выглядит идентично физическому телефону. SMS следует тому же маршруту. Разница заключается в последней миле — вместо отображения на экране телефона сообщение перехватывается программным обеспечением.
Шаг 5: Верификация на стороне платформы
После того как пользователь получает OTP и вводит его на платформе, происходит серверная верификация:
- Сравнение кодов — Платформа сравнивает введенный код с сохраненным OTP.
- Проверка срока действия — Если срок действия OTP истек (обычно 60-300 секунд), верификация не удается.
- Подсчет попыток — Большинство платформ разрешают 3-5 неправильных попыток перед блокировкой верификации.
- Классификация номера — Некоторые платформы проверяют номер по базам данных VoIP/виртуальных номеров, чтобы выявить потенциальное злоупотребление.
- Успех или неудача — Если код совпадает и срок его действия не истек, номер телефона помечается как проверенный.
Как платформы обнаруживают виртуальные номера
Некоторые платформы пытаются блокировать виртуальные номера. Методы, которые они используют:
| Метод обнаружения | Как это работает | Эффективность |
|---|---|---|
| Определение типа номера | Запрашивает базы данных операторов, чтобы проверить, является ли номер мобильным, стационарным или VoIP | Средняя — многие виртуальные номера зарегистрированы как мобильные |
| Проверка базы данных оператора | Сравнивает номер с известными диапазонами поставщиков VoIP | Средняя — работает для крупных поставщиков, пропускает мелких |
| HLR-запрос | Запрашивает Home Location Register для получения сведений о SIM-карте | Высокая для обнаружения чисто программных номеров, ниже для номеров из SIM-банков |
| Поведенческий анализ | Отслеживает, сколько учетных записей было создано с номерами из одного диапазона | Высокая со временем, но требует накопления данных |
Поставщики виртуальных номеров противодействуют этим методам, используя номера операторского класса, зарегистрированные как мобильные линии, поддерживая разнообразные пулы номеров и часто меняя номера. Цикл обхода обнаружения продолжается.
Почему SMS-верификация сохраняется, несмотря на недостатки
SMS-верификация имеет известные недостатки в безопасности, но остается доминирующим методом. Причины практические:
- Универсальный охват — Каждый телефон может получать SMS. Установка приложения не требуется. Это охватывает миллиарды пользователей с кнопочными телефонами и старыми устройствами.
- Привычность для пользователей — Все понимают "введите код, который мы отправили". Объяснения не требуются.
- Низкая стоимость реализации — SMS API недороги. Twilio взимает около $0.0075 за SMS в США. В больших масштабах это копейки за верификацию.
- Приемлемый компромисс в безопасности — Для большинства сценариев использования (регистрация в социальных сетях, учетные записи служб доставки еды) SMS обеспечивает достаточный барьер для предотвращения автоматического злоупотребления без необходимости использования аппаратных ключей безопасности.
Отрасль медленно движется к альтернативам. Passkeys (FIDO2), приложения-аутентификаторы (TOTP) и push-уведомления набирают популярность. Но для первоначальной проверки телефона — подтверждения того, что пользователь контролирует номер телефона — SMS остается стандартом.
Роль виртуальных номеров в этой экосистеме
Виртуальные номера занимают особую нишу: они обеспечивают доступ на уровне телефонного номера без необходимости наличия физического устройства. Это полезно в законных сценариях, включая:
- Защита конфиденциальности — Не раскрывая свой реальный номер платформам, которые могут продавать ваши данные. См. наше VerifySMS vs Бесплатные SMS-сайты (receive-smss.com) — Почему платные лучше, чтобы понять, почему конфиденциальность важна.
- Управление несколькими учетными записями — Бизнесу, управляющему несколькими учетными записями на одной платформе, требуются уникальные номера для каждой.
- Международный доступ — Верификация учетных записей на платформах в Виртуальные номера телефона в США — не-VoIP номера без необходимости иметь местные SIM-карты.
- Разработка и тестирование — Команды QA, тестирующие OTP-потоки, нуждаются во множестве номеров без необходимости управлять физическими устройствами.
С технической точки зрения, виртуальные номера работают, потому что они используют тот факт, что SMS-верификация доказывает только контроль над номером, а не то, что номер находится на физическом телефоне в чьем-то кармане. Пока номер действителен и может принимать A2P-сообщения, верификация проходит успешно.
Дополнительно: Оптимизация доставки OTP
Если вы разработчик, внедряющий SMS-верификацию, вот технические соображения для надежной доставки:
- Используйте идентификаторы отправителя с умом — В странах, поддерживающих буквенно-цифровые идентификаторы отправителя, используйте название вашего бренда. В США используйте выделенный короткий код или 10DLC (10-Digit Long Code) для лучших показателей доставки.
- Реализуйте резервную маршрутизацию — Используйте несколько SMS-агрегаторов, чтобы, если один маршрут не удастся, сообщение было повторно отправлено через другой.
- Держите сообщения короткими — Сообщения OTP должны быть менее 160 символов (один сегмент SMS). Сообщения, состоящие из нескольких сегментов, имеют более высокий процент сбоев.
- Установите соответствующие тайм-ауты — 120 секунд — это оптимальное значение. Слишком короткое время приводит к ложным сбоям; слишком долгое позволяет использовать перехваченные коды.
- Регистрируйте подтверждения доставки — Отслеживайте, доставлены ли сообщения, находятся ли они в ожидании или произошел сбой. Эти данные помогают выявлять проблемы, специфичные для операторов.
Посмотрите SMS-верификацию со стороны получателя
Попробуйте VerifySMS бесплатно →150+ стран · Мгновенная активация · $0.10/номер
