SMS 인증의 작동 원리 — 기술적 설명
1단계: OTP 생성
플랫폼에서 전화번호를 인증해야 할 때 일회용 비밀번호(OTP)를 생성합니다. 서버 측에서는 다음과 같은 과정이 진행됩니다.
- 사용자가 전화번호 제출 — 플랫폼 백엔드에서 전화번호를 수신하고 형식(국가 코드, 자릿수, 유효한 접두사)을 검증합니다.
- OTP 생성 — 일반적으로 4~6자리로 구성된 암호학적으로 무작위 코드가 생성됩니다. 대부분의 구현에서는 시간 기반 또는 카운터 기반 시드(RFC 6238/RFC 4226의 TOTP/HOTP 표준)와 함께
HMAC-SHA1또는HMAC-SHA256을 사용합니다. - 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 (단문 메시지 서비스 센터)
- SMSC → MSC (이동 통신 센터)
- MSC → 기지국 → 사용자 전화
국제 메시지는 복잡성을 더합니다. 미국 기반 플랫폼에서 인도 번호로 보내는 OTP는 목적지에 도달하기 전에 2~3개의 중간 통신사를 거쳐 라우팅될 수 있습니다. 각 홉은 지연 시간과 약간의 실패 가능성을 추가합니다.
3단계: SS7 및 신호 계층
SS7(Signaling System No. 7)는 전화 네트워크가 통신하는 방식을 제어하는 프로토콜 제품군입니다. 1970년대에 개발되었으며 여전히 글로벌 전화의 백본입니다. SMS가 전송될 때 SS7은 다음을 처리합니다.
- 번호 조회 (HLR 쿼리) — 발신 통신사는 홈 위치 레지스터(HLR)에 쿼리하여 수신 번호가 속한 통신사 및 네트워크를 결정합니다.
- 메시지 라우팅 — SS7 신호는 메시지가 네트워크를 통해 이동하는 경로를 결정합니다.
- 전달 확인 — 수신 SMSC는 SS7 신호를 통해 전달 영수증을 다시 보냅니다.
SS7 보안 문제
SS7은 신뢰할 수 있는 통신 사업자만 네트워크 액세스 권한을 가졌던 시대에 설계되었습니다. 오늘날 SS7 액세스는 수천 개의 엔터티에서 사용할 수 있어 보안 취약점이 발생합니다.
- SMS 가로채기 — SS7 액세스 권한이 있는 공격자는 SMS 메시지를 자신의 장치로 리디렉션할 수 있습니다. 이는 은행 2FA에 대한 실제 공격에서 입증되었습니다.
- 위치 추적 — SS7 쿼리는 전화기의 물리적 위치를 노출할 수 있습니다.
- 번호 스푸핑 — SS7을 사용하면 다른 번호에서 온 것처럼 보이는 메시지를 보낼 수 있습니다.
이러한 취약점 때문에 보안 전문가들은 SMS 기반 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 조회 | 홈 위치 레지스터에 쿼리하여 SIM 카드 세부 정보 확인 | 소프트웨어 전용 번호 감지에 높음, SIM 뱅크 번호에는 낮음 |
| 행동 분석 | 동일한 범위의 번호로 생성된 계정 수 추적 | 시간이 지남에 따라 높지만 데이터 축적이 필요함 |
가상 번호 공급업체는 모바일 회선으로 등록된 통신 등급 번호를 사용하고, 다양한 번호 풀을 유지하며, 번호를 자주 교체하여 이러한 감지를 우회합니다. 감지 회피 주기는 계속 진행 중입니다.
SMS 인증이 결함에도 불구하고 지속되는 이유
SMS 인증은 잘 알려진 보안 취약점을 가지고 있지만 여전히 지배적인 방법입니다. 그 이유는 실용적입니다.
- 보편적인 도달 범위 — 모든 전화기에서 SMS를 수신할 수 있습니다. 앱 설치가 필요 없습니다. 이는 피처폰 및 구형 장치의 수십억 명의 사용자를 포함합니다.
- 사용자 친숙성 — 누구나 "보낸 코드를 입력하세요"를 이해합니다. 설명이 필요 없습니다.
- 낮은 구현 비용 — SMS API는 저렴합니다. Twilio는 미국에서 SMS당 약 $0.0075를 청구합니다. 대규모로 처리하면 인증당 몇 센트에 불과합니다.
- 수용 가능한 보안 절충 — 대부분의 사용 사례(소셜 미디어 가입, 음식 배달 계정)의 경우 SMS는 하드웨어 보안 키를 요구하지 않고 자동화된 남용을 억제할 만큼 충분한 마찰을 제공합니다.
업계는 천천히 대안으로 나아가고 있습니다. 패스키(FIDO2), 앱 기반 TOTP 및 푸시 알림이 채택되고 있습니다. 그러나 초기 전화 인증(사용자가 전화 번호를 제어함을 증명)의 경우, SMS는 표준으로 남아 있습니다.
이 생태계에서 가상 번호의 역할
가상 번호는 특정 틈새 시장을 차지합니다. 물리적 장치 없이 전화번호 수준의 액세스를 제공합니다. 이는 다음과 같은 합법적인 시나리오에 유용합니다.
- 개인 정보 보호 — 데이터를 판매할 수 있는 플랫폼에 실제 번호를 노출하지 않습니다. 개인 정보 보호가 중요한 이유에 대한 VerifySMS vs 무료 SMS 사이트(receive-smss.com) — 유료가 더 나은 이유를 참조하십시오.
- 다중 계정 관리 — 동일한 플랫폼에서 여러 계정을 운영하는 비즈니스는 각 계정에 대해 고유한 번호가 필요합니다.
- 국제 액세스 — 현지 SIM 카드 없이 미국 가상 전화번호 — 비VoIP 번호의 플랫폼에서 계정을 인증합니다.
- 개발 및 테스트 — OTP 흐름을 테스트하는 QA 팀은 물리적 장치를 관리하지 않고도 많은 번호가 필요합니다.
기술적인 관점에서 가상 번호는 SMS 인증이 물리적 전화기에 있는 번호에 대한 제어권만 증명하고, 그 번호가 누군가의 주머니에 있는 물리적 전화기에 있다는 것을 증명하지 않는다는 사실을 이용하기 때문에 작동합니다. 번호가 유효하고 A2P 메시지를 수신할 수 있는 한 인증은 성공합니다.
고급: OTP 전달 최적화
SMS 인증을 구현하는 개발자라면 안정적인 전달을 위한 기술적 고려 사항은 다음과 같습니다.
- 발신자 ID를 현명하게 사용 — 영숫자 발신자 ID를 지원하는 국가에서는 브랜드 이름을 사용합니다. 미국에서는 최상의 전달율을 위해 전용 단축 코드 또는 10DLC(10자리 장기 코드)를 사용합니다.
- 대체 라우팅 구현 — 여러 SMS 애그리게이터를 사용하여 하나가 실패하면 다른 애그리게이터를 통해 메시지를 다시 시도합니다.
- 메시지를 짧게 유지 — OTP 메시지는 160자(하나의 SMS 세그먼트) 미만이어야 합니다. 다중 세그먼트 메시지는 실패율이 더 높습니다.
- 적절한 타임아웃 설정 — 120초가 적절합니다. 너무 짧으면 잘못된 실패가 발생하고, 너무 길면 가로챈 코드가 사용될 수 있습니다.
- 전달 영수증 기록 — 메시지가 전달, 보류 중 또는 실패했는지 추적합니다. 이 데이터는 통신사별 문제를 식별하는 데 도움이 됩니다.
