연결 해제: 휴대폰의 비밀 핸드셰이크
Google Authenticator, Microsoft Authenticator, Authy와 같은 인증기 앱이 휴대폰이 완전히 오프라인 상태이거나 비행기 모드일 때도 어떻게 계속 변하는 6자리 코드를 생성할 수 있는지 궁금했던 적이 있나요? 마치 마법처럼 느껴지지 않나요?
그 비밀은 RFC 6238에 명시된 Time-based One-Time Password (TOTP)라는 우아한 오픈 표준에 있습니다. 이 표준은 안전한 오프라인 코드 생성을 위해 정밀하게 설계되었으므로, 활성 인터넷 연결 없이도 코드가 작동합니다.
온라인 서비스에 대해 2FA를 처음 설정할 때(보통 QR 코드를 스캔하여), 기기와 서비스는 중요한 교환을 수행합니다. 이때 고유한 암호화 shared secret key(공유 비밀 키)를 설정하고 공유합니다.
휴대폰은 이 비밀 키를 로컬에 안전하게 저장하며 다시는 공유하지 않습니다. 온라인 서비스 또한 동일한 복사본을 보관합니다. 즉, 기기와 서비스 모두 동일한 기본 정보를 가지고 있는 것입니다.
네트워크를 거쳐야 하는 덜 안전한 SMS 코드와 달리, TOTP 코드는 전적으로 기기 내에서 생성됩니다. 인증기 앱은 저장된 공유 비밀 키와 30초 단위로 나뉜 현재 시간을 사용하여 6자리 코드를 결정론적으로 계산합니다.
이 과정은 코드 생성을 위해 네트워크 통신이 필요하지 않습니다. 휴대폰과 서버 모두 공유 비밀 키와 적절히 동기화된 시계에만 의존하여 동시에 동일한 올바른 코드를 독립적으로 계산합니다.
알고리즘: 시간 여행 코드 생성기
휴대폰과 서버만 알고 있는 비밀 레시피라고 생각해보세요. 인증기 앱은 두 가지 필수 재료를 결합합니다. 초기 2FA 설정 시 확립된 고유한 shared secret key(공유 비밀 키)와 동적인 current time(현재 시간)입니다. 이 시간은 연속적인 흐름이 아니라 30초 단위의 명확한 '시간 슬롯'으로 나뉘어 코드 생성의 기준이 됩니다.
휴대폰과 서버는 이 두 가지 입력값(고유 비밀 키와 현재 30초 시간 창)을 정확히 동일한 cryptographic hash function(암호화 해시 함수)에 입력합니다. 이 수학적 마법은 입력값을 화면에 보이는 익숙한 6자리 코드로 결정론적으로 변환합니다. 중요한 점은 이 동일한 결과를 얻기 위해 두 장치가 네트워크를 통해 서로 통신할 필요가 없다는 것입니다.
시계가 적절히 동기화되어 있더라도 '클록 드리프트(clock drift)'라고 불리는 미세한 오차가 발생할 수 있습니다. 코드가 안정적으로 작동하도록 서버는 일반적으로 짧은 유예 기간을 허용합니다. 현재 30초 창의 코드뿐만 아니라 이전 또는 다음 30초 창의 코드도 수락하는 경우가 많습니다. 이러한 내장된 유연성은 원활한 사용자 경험을 위해 필수적입니다.
설계상 오프라인: 이것이 버그가 아닌 기능인 이유
TOTP의 오프라인 기능은 편리할 뿐만 아니라 보안 측면에서도 큰 향상을 가져오며, SMS 기반 2FA보다 훨씬 안정적입니다. SMS 코드는 실시간 네트워크 연결이 필요하므로 범죄자가 전화번호를 탈취하는 SIM 스와핑 공격에 취약합니다. 반면 TOTP 코드는 네트워크 가로채기 위험이 없는 기기 내에서 안전하게 생성되므로, 기지국 가용성이나 통신사 보안 결함에 인증이 좌우되지 않습니다.
TOTP의 강력함의 핵심은 견고한 보안 모델에 있습니다. 사용자의 고유한 shared secret key는 초기 설정 후 기기를 절대 떠나지 않으며 온라인 위협으로부터 격리된 상태를 유지합니다. 이 중요한 정보는 안전하게 보관됩니다. 생성된 각 코드는 단 30초 동안만 유효한 one-time password이므로, 공격자가 코드가 만료되기 전에 가로채더라도 악용할 기회를 획기적으로 제한합니다.
이 강력한 오프라인 기능은 독점적인 마법이 아니라 open standard인 RFC 6238에 기반합니다. 이 공개 사양은 투명성, 동료 검토 및 인터넷 전반에 걸친 광범위한 호환성을 보장합니다. 결과적으로 Google Authenticator, Microsoft Authenticator, Authy와 같은 인기 있는 인증 앱은 소셜 미디어부터 뱅킹에 이르기까지 수많은 서비스와 원활하게 작동하는 코드를 생성할 수 있습니다. 이 표준에 대해 더 자세히 알아보려면 What is a Time-based One-time Password (TOTP)? - Twilio를 확인하세요.
이 글이 마음에 드셨나요? 매일 아침 이런 글을 메일로 받아보세요.
하루 한 통 · 두 번의 클릭으로 구독 취소 · 제3자 추적 없음
TOTP를 넘어: 피싱 방지 로그인의 미래
영리한 오프라인 설계에도 불구하고 TOTP가 모든 공격에 대한 완벽한 방패는 아닙니다. 정교한 피싱 캠페인은 사용자가 실시간으로 악성 사이트에 시간 제한 코드를 입력하도록 유도할 수 있습니다. 가짜 로그인 페이지가 코드를 즉시 합법적인 서비스로 전달할 수 있다면, 인증 앱 자체가 오프라인 상태였더라도 2단계 인증을 우회하게 됩니다.
다행히 보안 환경은 끊임없이 진화하고 있습니다. 업계 리더들은 FIDO2 및 passkeys와 같이 더욱 강력한 phishing-resistant 표준을 빠르게 도입하고 있습니다. 공유 비밀과 시간에 의존하는 TOTP와 달리, 이러한 차세대 방식은 공개 키 암호화(public-key cryptography)를 사용합니다. 이 방식은 로그인과 합법적인 웹사이트 도메인 간에 고유하고 암호화된 연결을 설정하여 사칭 사이트에서 코드가 작동하지 않도록 효과적으로 방지합니다.
즉, 기기가 인증 전에 합법적인 도메인을 확인하기 때문에 피싱 사이트가 단순히 자격 증명을 '릴레이'할 수 없습니다. 이는 신뢰가 구축되는 방식의 근본적인 변화로, 인증을 공유 비밀에서 암호화로 검증된 핸드셰이크 방식으로 전환하는 것입니다.
현재로서는 TOTP 인증 앱을 사용하는 것이 취약한 SMS 기반 2FA보다 중요한 보안 업그레이드입니다. SMS는 SIM 스와핑에 취약하며 실시간 네트워크 연결이 필요하므로 TOTP의 오프라인 독립성보다 본질적으로 덜 안전하다는 점을 기억하세요. backup codes는 항상 안전한 오프라인 장소에 보관하십시오. 이는 인증 기기를 분실하거나 손상했을 때 계정 잠금을 방지하는 생명줄과 같습니다.
자주 묻는 질문
인증 앱이 비행기 모드에서도 작동하는 이유는 무엇인가요?
인증 앱은 사전 공유된 비밀 키와 현재 시간을 사용하여 코드를 생성하는 Time-based One-Time Password(TOTP) 알고리즘을 사용합니다. 이 과정에는 인터넷 연결이 필요하지 않습니다.
2FA에서 'shared secret key'란 무엇인가요?
설정 중 QR 코드를 통해 교환되는 고유한 데이터 조각으로, 사용자의 기기와 서비스 서버 양쪽에 저장됩니다. 양쪽 모두 이 키를 사용하여 정확히 동일한 시간 제한 코드를 생성합니다.
인증 앱(TOTP)이 SMS 2FA보다 더 안전한가요?
네, TOTP가 훨씬 더 안전합니다. 일반적인 SIM 스와핑 공격에 취약하지 않으며 오프라인에서도 안정적으로 작동하는 반면, SMS 2FA는 가로챌 수 있고 셀룰러 네트워크가 필요합니다.
2FA를 설정하려면 인터넷 연결이 필요한가요?
네. 초기 설정 시 서비스 서버와 인증 앱 간에 공유 비밀 키를 안전하게 생성하고 교환하려면 인터넷 연결이 필요합니다.

