본문으로 건너뛰기
>_ITDITD웹 보안 플랫폼

용어 사전

일회용 비밀번호(OTP)란? — TOTP/HOTP/SMS의 차이와 한계

일회용 비밀번호(OTP)는 한 번만·짧은 시간만 유효한 일회성 코드입니다. 인증 앱의 TOTP, 카운터식 HOTP, SMS 코드의 차이, 비밀번호 유출에 강한 이유, 그리고 중간자 피싱에는 돌파될 수 있다는 한계까지 방어 관점에서 설명합니다.

게시 2026-07-02 업데이트 2026-07-02 3분 읽기

한 번만·일회성 — 그것이 일회용 비밀번호(OTP)입니다. 종류별 차이와, 의외로 알려지지 않은 한계(피싱에는 돌파될 수 있음)를 정리합니다(공격 절차는 싣지 않습니다).

종류: TOTP / HOTP / SMS-OTP

"일회성 코드"로 뭉뚱그려지기 쉽지만, 만들어지는 방식에 따라 3종류로 나뉩니다.

TOTP(시간 기반)

인증 앱이 비밀 씨앗 + 현재 시각으로부터 계산. 약 30초마다 바뀜. 오프라인에서 동작.

HOTP(카운터)

시각이 아니라 '횟수(카운터)'로 진행. 누를 때마다 다음 코드. 하드웨어 토큰 등에서 사용.

SMS-OTP

SMS로 코드를 전송. 간편하지만 SIM 스왑·중계에 약해 가장 취약한 방식.

OTP의 주요 3방식. 강도는 '가짜 사이트에 넘겨줄 수 있는가'로 거의 결정된다.

어느 것이든 "한 번만·짧은 수명"이라는 성질은 같아서, 고정 비밀번호가 유출되어도 그 코드 자체는 재사용하기 어렵다는 것이 강점입니다. 특히 TOTP는 통신을 거치지 않고 앱 안에서 계산하므로, SMS 같은 가로채기 경로가 없습니다.

강점과 한계: 피싱에는 "넘겨줄 수 있다"

OTP는 고정 비밀번호의 약점을 보완하지만, 만능은 아닙니다. 결정적인 한계는 "사람이 코드를 읽고 입력한다"는 점에 있습니다.

OTP가 통하는 상황

  • 비밀번호의 유출·재사용에 의한 탈취를 막음
  • 훔쳐봐도 짧은 시간에 무효가 되어 재사용되기 어려움
  • 인증 앱의 TOTP는 오프라인에서 동작하며 SMS보다 가로채기에 강함

OTP가 뚫리는 상황

  • 중간자 피싱(AiTM): 가짜 사이트가 OTP를 진짜로 중계해 즉시 로그인
  • SIM 스왑: 전화번호를 탈취해 SMS-OTP를 가로챔
  • 근본 원인 = 코드를 사람이 가짜 사이트에 넘겨줄 수 있음(= 도메인에 묶이지 않음)

본 사이트의 견해: OTP는 경유지, 종점은 패스키

OTP는 "비밀번호만"에서 벗어나는 훌륭한 첫걸음입니다. 실제로 SMS든 TOTP든, 켜는 것만으로 탈취의 대부분은 멈춥니다. 다만 본 사이트는 OTP를 종점이 아니라 경유지로 자리매김합니다. 중간자 피싱이 현실의 위협인 이상, 최종 형태는 서명이 도메인에 묶여 원리적으로 가짜 사이트에 넘길 수 없는 패스키(FIDO2)입니다. 우선순위는 분명하며, 먼저 모든 계정에 OTP를 켜고, 왕국의 열쇠(이메일·도메인·결제)부터 순서대로 패스키로 끌어올립니다. "주의해서 가짜 사이트를 알아채는" 것에 의존하지 않는 것이 정도입니다.

다음으로 읽기

FAQ

Q일회용 비밀번호와 일반 비밀번호는 무엇이 다른가요?
A

일반 비밀번호는 바꾸지 않는 한 계속 같아서(고정), 한 번 유출되면 변경할 때까지 악용될 수 있습니다. 일회용 비밀번호(OTP)는 한 번만·짧은 시간만 유효한 일회성이며, 쓰면 곧 무효가 됩니다. 그래서 훔쳐봐도 재사용되기 어려워 고정 비밀번호의 약점(유출·재사용)을 보완합니다. 많은 서비스에서 비밀번호에 '또 하나의 증명'으로 더하는 2단계 인증의 한 수단으로 쓰입니다.

QSMS로 받는 일회용 비밀번호는 안전한가요?
A

비밀번호만 쓰는 것보다는 확실히 강하지만, OTP 중에서는 가장 약한 부류입니다. SMS는 SIM 스왑(전화번호 탈취)으로 가로채이거나, 가짜 사이트가 중계하는 중간자 피싱으로 빼앗길 수 있습니다. 가능하면 인증 앱의 TOTP로, 더 중요한 계정은 패스키로 옮기는 것이 안전합니다.

Q인증 앱 코드는 왜 30초쯤마다 바뀌나요?
A

그것이 TOTP(시간 기반 일회용 비밀번호)이기 때문입니다. 앱과 서비스가 같은 비밀 씨앗(시크릿)과 현재 시각으로부터 같은 코드를 일정 간격(대개 30초)마다 계산합니다. 시간이 지나면 옛 코드는 무효가 되고 새 코드로 바뀝니다. 짧은 수명으로 만들어, 훔쳐봐도 쓸 수 있는 시간을 아주 짧게 억제하는 것입니다.