일회용 비밀번호의 기본 개념과 역할
일회용 비밀번호, 즉 OTP는 로그인이나 거래 승인과 같은 중요한 인증 과정에서 단 한 번만 사용할 수 있는 임시 비밀번호를 의미합니다. 이 방식은 기존의 고정된 아이디와 비밀번호 조합만으로는 해결하기 어려운 보안 취약점을 보완하는 핵심 수단으로 자리 잡았습니다. 사용자가 알고 있는 정보(비밀번호)와 사용자가 소유한 물건(OTP 생성 장치)을 함께 요구하는 2차 인증의 대표적인 형태죠. 그 중심에는 어떻게 이 일회성 코드를 안전하고 효율적으로 만들어내는지에 대한 알고리즘이 자리하고 있습니다.
OTP 생성 알고리즘은 단순히 난수를 만들어내는 것을 넘어, 예측 불가능성과 동기화라는 두 마리 토끼를 잡아야 하는 복잡한 문제를 해결합니다. 생성된 숫자열이 제3자에게 쉽게 추측될 수 없다는 전제가 필수적이며, 동시에 인증을 요청하는 서버와 코드를 생성하는 사용자 측 장치가 같은 값을 공유하고 있어야 합니다. 이 균형을 이루기 위해 시간과 이벤트라는 두 가지 핵심 변수를 기준으로 한 주요 알고리즘인 TOTP와 HOTP가 발전하게 되었습니다.
이 두 방식은 보안 인증의 흐름에서 서로 다른 장점을 가지고 활용됩니다. 사용자 경험과 보안 강도, 시스템 연동의 편의성 등 여러 요소를 고려해 상황에 맞게 선택되거나 병행 사용되기도 합니다. 그러므로 OTP를 단순한 ‘추가 비밀번호’로 보는 시각을 넘어, 그 뒤에 작동하는 논리를 이해하는 것은 현대 디지털 인증 구조를 파악하는 데 중요한 출발점이 됩니다.
OTP 시스템이 해결하려는 핵심 보안 문제
고정된 비밀번호는 재사용과 유출, 추측 공격에 취약할 수밖에 없는 본질적 한계를 가지고 있습니다. 사용자가 여러 사이트에 동일한 비밀번호를 사용하는 습관이나, 피싱 사이트를 통해 비밀번호가 유출되는 경우, 이 정보는 공격자에게 지속적으로 유효한 열쇠가 되어버립니다. OTP는 바로 이 ‘지속적 유효성’을 ‘일회성’으로 대체함으로써, 비록 초기 비밀번호가 유출되더라도 실시간 인증 시도를 차단하는 안전장치 역할을 합니다.
나아가, 네트워크를 통해 전송되는 인증 정보가 도청당하더라도(예: 메니 인 더 미들 공격), 그 정보는 다음 번 인증에는 전혀 쓸모가 없게 됩니다. 이는 거래 내역 확인이나 중요 설정 변경과 같은 높은 위험도의 작업을 수행할 때 필수적인 보안 계층을 추가합니다. 알고리즘은 이러한 일회용 코드가 시스템적으로 어떻게 조화를 이루며 생성되는지에 대한 청사진을 제공합니다.

시간 기반 OTP: TOTP의 작동 원리
TOTP는 ‘Time-based One-Time Password’의 약자로, 현재 시간을 기반으로 일회용 비밀번호를 생성하는 알고리즘입니다. 이 방식의 핵심은 생성하는 측(사용자의 스마트폰 앱이나 전용 토큰)과 검증하는 측(서버)이 공유하는 시계를 기준으로 코드를 만든다는 점에 있습니다. 물론 물리적으로 같은 시계를 바라보는 것은 아니지만, 동기화된 시간 값을 알고리즘에 입력함으로써 같은 출력을 도출해냅니다.
구체적인 생성 과정은 몇 가지 단계로 나뉩니다. 먼저, 사용자와 서버는 초기 설정 시 하나의 공유 비밀 키를 안전하게 교환합니다. 이 키는 외부에 노출되어서는 안 되는 가장 중요한 정보입니다. 이후, 양측 모두에서 현재의 유닉스 시간(1970년 1월 1일부터의 경과 초수)을 특정 시간 간격(대표적으로 30초)으로 나눈 값을 계산합니다. 이렇게 계산된 시간 카운터 값과 공유 비밀 키를 HMAC 알고리즘에 넣어 해시 값을 생성한 후, 최종적으로 6자리 또는 8자리의 사용자 친화적인 숫자로 가공합니다.
30초라는 시간 창은 사용 편의성과 보안 사이의 타협점입니다. 너무 짧으면 사용자가 코드를 입력하기도 전에 만료될 수 있고, 너무 길면 공격자가 코드를 추측하거나 브루트 포스 공격을 시도할 시간이 넉넉해집니다. TOTP를 사용하는 대표적인 서비스로는 Google Authenticator, Microsoft Authenticator 등 다양한 2차 인증 앱이 있으며, 이 앱들은 사용자가 여러 서비스의 공유 키를 등록해 한 곳에서 관리할 수 있도록 합니다.
TOTP의 장점과 주의할 점
TOTP의 가장 큰 강점은 사용이 간편하고 추가 하드웨어가 꼭 필요하지 않다는 점입니다. 대부분의 사용자가 항상 소지하는 스마트폰에 앱을 설치하는 것만으로 강력한 2차 인증을 구현할 수 있습니다. 또한, 코드가 주기적으로 변경되기 때문에 사용자는 다음 코드가 무엇일지 고민할 필요 없이 현재 앱에 표시된 숫자를 입력하면 됩니다. 이는 예측 불가능성을 유지하면서도 사용자 경험을 크게 해치지 않는 설계입니다.
하지만 TOTP는 시간 동기화에 완전히 의존한다는 점이 주요한 주의 사항입니다. 사용자 장치의 시계가 서버 시간과 크게 차이가 나면(보통 ±30초 이상), 유효한 코드를 생성하지 못해 인증에 실패할 수 있습니다. 따라서 대부분의 TOTP 시스템과 앱은 시간 동기화 기능을 내장하고 있으며, 인증 실패 시 시계 확인을 안내합니다. 또한, 스마트폰 기반 앱의 경우, 기기를 분실하거나 앱 데이터를 백업하지 않았다면 등록된 모든 서비스의 OTP 설정을 처음부터 다시 해야 하는 불편함이 있을 수 있습니다.
이벤트 기반 OTP: HOTP의 작동 원리
HOTP는 ‘HMAC-based One-Time Password’의 약자로, 시간이 아닌 ‘이벤트’ 또는 ‘카운터’를 기반으로 코드를 생성합니다. 여기서 이벤트란 인증 시도를 의미하며, 사용자 장치와 서버는 공유하는 하나의 카운터 값을 동일하게 증가시켜가며 동기화합니다. 사용자가 인증을 요청할 때마다, 혹은 OTP 생성 버튼을 누를 때마다 이 카운터가 하나씩 올라가고, 그 값이 알고리즘의 핵심 입력값이 됩니다.
HOTP의 생성 알고리즘은 TOTP와 유사한 구조를 공유합니다. 공유 비밀 키와 현재의 카운터 값을 조합하여 HMAC-SHA-1 등의 암호화 해시 함수를 통해 해시 값을 만듭니다. 이후 이 해시 값에서 특정 위치의 비트를 추출하고. 모듈로 연산을 통해 최종적인 6~8자리 숫자 otp를 생성해냅니다. 핵심은 시간이라는 외부 변수 대신, 오직 사용자와 서버만이 알고 있고 조율하는 내부 카운터를 사용한다는 점입니다.
이 방식은 시간 동기화 문제에서 완전히 자유롭다는 장점이 있습니다. 네트워크에 연결되지 않은 오프라인 환경이나, 장치의 시계가 정확하지 않은 환경에서도 안정적으로 동작할 수 있습니다. HOTP는 주로 물리적인 전용 OTP 토큰(버튼을 누르면 숫자가 표시되는 작은 장치)에 많이 적용되는 방식입니다. 사용자는 인증이 필요할 때마다 토큰의 버튼을 눌러 새로운 코드를 생성하고, 서버도 그에 맞춰 내부 카운터를 예상하여 검증합니다.
HOTP의 장점과 주의할 점
HOTP의 가장 명확한 장점은 이미 언급한 대로 시간에 의존하지 않는다는 것입니다. 이는 시스템 설계를 단순화하고, 시간 서버에 대한 의존성이나 시계 오차로 인한 문제를 원천적으로 차단합니다. 또한, 오프라인에서 코드를 생성할 수 있어 특정 제한된 환경에서의 적용이 용이합니다. 사용자 입장에서도 버튼을 누르는 행위 하나로 코드를 생성한다는 점이 직관적일 수 있습니다.
반면, HOTP는 카운터 동기화라는 새로운 과제를 안고 있습니다. 사용자가 OTP 생성 버튼을 눌렀는데 서버에 인증 요청을 하지 않는 경우(예: 실수로 버튼을 여러 번 누름), 사용자 장치의 카운터만 증가하고 서버의 카운터는 그대로 남게 되어 동기화가 깨질 수 있습니다. 이를 해결하기 위해 서버는 단순히 예상되는 하나의 카운터 값만 확인하는 것이 아니라, 미래의 카운터 값 여러 개(예: 다음 1,000개의 값)를 일정 범위 내에서 검증하는 방식으로 유연하게 대응합니다, 그러나 이는 잠재적으로 보안 강도를 약간 떨어뜨릴 수 있는 요소가 됩니다.
TOTP와 HOTP의 비교와 선택 기준
TOTP와 HOTP는 일회용 비밀번호 생성이라는 같은 목표를 가지고 있지만, 그 방향성과 적용 영역에서 뚜렷한 차이를 보입니다. 선택의 기준은 궁극적으로 보안 요구사항, 사용 환경, 사용자 경험, 그리고 관리의 복잡성 사이의 절충에 달려 있습니다. 두 방식을 나란히 놓고 비교해보면, 상황에 맞는 적절한 선택을 하는 데 도움이 됩니다.
TOTP는 시간이라는 보편적이고 연속적인 기준을 사용하기 때문에, 사용자가 별도의 트리거 행동(버튼 누르기) 없이도 항상 유효한 현재 코드를 확인할 수 있습니다. 이는 모바일 앱과의 연동에 매우 적합하며, 사용자에게 부담을 주지 않는 매끄러운 인증 흐름을 제공합니다. 반면, HOTP는 이벤트 발생 시에만 코드가 생성되므로, 사용자의 의도적인 액션이 필요합니다. 이는 무단 생성 가능성을 원천적으로 차단한다는 관점에서 장점이 될 수 있지만, 사용 절차가 한 단계 더 추가된다는 점에서는 불편함으로 작용할 수도 있습니다.
보안성 측면에서도 미세한 차이가 있습니다. TOTP 코드의 유효 시간이 제한적이기 때문에, 공격자가 코드를 탈취하더라도 활용할 수 있는 시간 창이 매우 짧습니다, hotp 코드는 버튼을 누르지 않는 한 변경되지 않으므로, 생성 직후 탈취당하면 유효 시간 내에서는 지속적으로 위협이 될 수 있습니다. 다만, HOTP 서버의 카운터 예상 범위 검증 기능은 동기화 문제를 해결하는 대신, 매우 낮은 확률이지만 공격자가 유효한 코드를 맞힐 가능성을 이론적으로는 높일 수 있습니다.
실제 환경에서의 적용 사례
현실 세계에서 두 알고리즘은 그 특징에 따라 다른 곳에 주로 쓰입니다, totp는 온라인 서비스의 2단계 인증에서 사실상의 표준으로 자리 잡았습니다. 은행의 모바일 뱅킹, 구글, 마이크로소프트, 페이스북 같은 주요 포털과 SNS, 그리고 다양한 기업 내부 시스템의 인증에 널리 채택되고 있습니다. 사용자가 스마트폰 앱을 열어 보이는 숫자를 입력하는 그 경험이 대부분 TOTP에 기반합니다.
HOTP는 보다 특수하거나 제한된 환경에서 빛을 발합니다. 네트워크 연결이 원천적으로 어려운 군사용 장비나 극한의 오프라인 환경, 또는 매우 오래된 레거시 시스템에서 인증 수단으로 사용될 수 있습니다. 또한, 일부 보안 등급이 높은 물리적 토큰이나 스마트 카드에 HOTP 알고리즘이 내장되어 있기도 합니다. 시간 서버에 접근할 수 없는 독립된 시스템을 구축해야 할 때 HOTP는 여전히 유효한 대안이 됩니다.
OTP 알고리즘의 진화와 미래
TOTP와 HOTP는 현재까지도 광범위하게 사용되는 검증된 알고리즘이지만, 기술과 보안 위협의 진화에 따라 새로운 보완책과 대체 기술들도 등장하고 있습니다. 가장 큰 변화의 흐름 중 하나는 사용자 경험을 더욱 원활하게 만드는 방향입니다. 푸시 알림 기반의 인증이 대표적인 예시인데, 이는 사용자가 앱에 표시된 숫자를 직접 입력할 필요 없이 스마트폰에 도착한 승인 요청을 터치하는 것만으로 인증을 완료할 수 있습니다.
또한, FIDO2와 WebAuthn과 같은 표준은 공개 키 암호 방식을 활용하여 패스워드 자체를 없애거나, 생체 인증과 결합하는 패스키 방식을 제시합니다. 이는 OTP가 해결하려 했던 피싱 공격에 대해 훨씬 강력한 방어를 제공할 수 있는 잠재력을 가지고 있습니다. 그러나 이러한 신기술이 모든 환경과 사용자를 즉시 대체하기는 어려우므로, OTP는 당분간은 접근성 높고 실용적인 보안 계층으로서 그 역할을 지속할 것으로 보입니다.
알고리즘 자체의 보안성도 지속적으로 점검되고 있습니다. 이러한 hOTP의 기반이 되는 HMAC-SHA-1 알고리즘에 대한 우려가 제기되면서. 더 강력한 sha-256 또는 sha-512를 사용하는 방식에 대한 논의와 표준화 작업이 진행 중입니다. 이는 보안 기술이 가진 특성, 즉 안정성을 유지하면서도 새로운 위협에 대응하기 위해 내부적으로 진화해야 하는 필요성을 잘 보여줍니다.
사용자 입장에서의 실용적 이해
일반 사용자에게 TOTP와 HOTP의 내부적 알고리즘을 세부적으로 알 필요는 없습니다. 그러나 두 방식이 어떻게 다르게 동작하는지에 대한 기본적인 이해는 자신의 보안 설정을 관리하는 데 도움이 됩니다. 예를 들어. Google authenticator 앱을 사용하다가 휴대폰을 변경할 때는 반드시 백업 코드를 저장하거나, 새 기기에서 각 서비스의 qr 코드를 다시 스캔하여 설정을 이전해야 한다는 점을 인지할 수 있습니다.
이는 단순한 기술적 절차가 아니라, 공유 비밀 키를 안전하게 이관하는 과정입니다. 마찬가지로, OTP 토큰을 사용한다면 버튼을 함부로 여러 번 눌러서는 안 되며, 만약 동기화가 깨졌다고 느껴지면 서비스 제공자에게 재동기화 방법을 문의해야 한다는 점도 알게 됩니다. 이러한 이해는 OTP를 ‘마법 같은 숫자 생성기’가 아니라, 내부 논리가 있는 체계적인 보안 도구로 바라보게 하여 더 책임감 있게 사용하는 계기가 될 수 있습니다.
결국, TOTP와 HOTP는 디지털 세상에서 신원을 확인하는 신뢰의 고리를 구성하는 중요한 기술적 기반입니다. 시간의 흐름에 맞춰 변하는 코드이든, 사용자의 행위에 반응하는 코드이든, 그 목적은 동일합니다. 바로 인증 과정에 예측 불가능한 일회성 요소를 도입하여, 사용자와 시스템 사이의 상호 신뢰를 보다 견고하게 다지는 것입니다. 이 알고리즘들을 이해하는 것은 복잡한 기술적 세부사항을 익히는 것 이상으로, 현대 보안 인증의 흐름이 어떻게 구성되어 있는지 그 큰 그림을 읽는 방법을 제공합니다.