반응형

Google Authenticator의 원리와 OTP 생성 과정

Google Authenticator와 같은 OTP 앱은 TOTP (Time-Based One-Time Password) 알고리즘과 HOTP (HMAC-Based One-Time Password) 알고리즘을 기반으로 작동합니다. 이 시스템은 RFC 6238 및 RFC 4226 표준에 정의되어 있으며, 일반적으로 시간에 따라 유효한 일회성 비밀번호를 생성합니다. 이를 통해 사용자 인증의 보안성을 높입니다. 아래에서 이 과정을 상세히 설명합니다.


1. OTP 생성의 기본 원리

(1) 공유 비밀 키(Secret Key)

  • 사용자가 Google Authenticator 앱을 처음 설정할 때, 서버는 고유의 비밀 키(Secret Key)를 생성합니다.
  • 이 키는 일반적으로 Base32로 인코딩된 문자열로 표현됩니다.
  • 사용자 디바이스에 비밀 키를 전달하기 위해 QR 코드 또는 직접 입력 방법을 사용합니다.

(2) 시간 기반 동기화

  • TOTP는 현재 시간을 기준으로 OTP를 생성합니다.
  • 클라이언트(Authenticator 앱)와 서버는 같은 시간 동기화(Timestamp)를 유지해야 합니다.
  • 일반적으로 TOTP는 30초 단위로 OTP를 갱신합니다.

2. QR 코드와 설정 과정

(1) QR 코드의 구성

QR 코드는 비밀 키와 설정 정보를 전달하는 매체로 사용됩니다.

  • QR 코드에는 아래와 같은 정보가 포함됩니다:
    otpauth://totp/Label?secret=Base32EncodedSecret&issuer=ServiceName
    • otpauth://totp/: TOTP를 사용한다는 프로토콜 식별자.
    • Label: 계정 이름(예: user@example.com).
    • secret: Base32로 인코딩된 비밀 키.
    • issuer: 서비스 이름(예: Google, GitHub 등).

(2) QR 코드 스캔

  • 사용자는 앱에서 QR 코드를 스캔하여 해당 정보를 앱에 등록합니다.
  • 앱은 QR 코드에서 비밀 키와 기타 정보를 파싱하여 저장합니다.

3. TOTP 생성 과정

(1) 타임스탬프 계산

  • TOTP는 현재 시간을 Epoch Time(1970년 1월 1일부터 경과된 초)으로 계산한 뒤, 특정 시간 간격(기본값: 30초)으로 나눕니다.
    T = floor((current_time - T0) / X)
    • T0: 기준 시간(일반적으로 0).
    • X: 시간 단위(일반적으로 30초).
    • T: 현재 타임스텝 값.

(2) HMAC 계산

  • 비밀 키와 타임스탬프 값을 기반으로 **HMAC(Hash-based Message Authentication Code)**를 생성합니다.
  • HMAC은 SHA-1, SHA-256, 또는 SHA-512 해시 알고리즘을 사용합니다.
     
    HMAC = HMAC-SHA-1(secret_key, T)

(3) 비밀번호 생성

  • HMAC 결과 값에서 일부 비트를 추출하여 OTP를 생성합니다.
  • HOTP 알고리즘에 따라 마지막 31비트를 추출합니다.
     
    offset = HMAC[HMAC.length - 1] & 0x0F truncated_hash = HMAC[offset : offset + 4] & 0x7FFFFFFF OTP = truncated_hash % 10^digits
    • digits: OTP의 길이(일반적으로 6자리).
    • 이 과정에서 생성된 OTP는 앱에 표시되며, 서버와 동일한 OTP인지 확인합니다.

4. 서버 측 확인

(1) 동일한 비밀 키 사용

  • 서버도 클라이언트와 동일한 비밀 키를 보유하고 있어야 합니다.
  • 서버는 현재 시간과 동일한 타임스탬프를 사용해 TOTP를 생성합니다.

(2) OTP 유효성 검증

  • 클라이언트가 입력한 OTP와 서버에서 생성한 OTP를 비교합니다.
  • 시간 동기화 오차를 허용하기 위해 서버는 타임스텝을 ±1까지 검토하는 경우가 많습니다.

5. 보안상의 이점

(1) 일회성 비밀번호

  • TOTP는 OTP를 30초마다 갱신하기 때문에, 공격자가 탈취한 OTP는 짧은 시간 내에 무효화됩니다.

(2) 오프라인 동작

  • Google Authenticator는 서버와의 실시간 연결 없이도 동작하므로, 인터넷이 없는 환경에서도 사용할 수 있습니다.

(3) 비밀 키 보호

  • 비밀 키는 앱 내부에 암호화되어 저장되며, 앱이 루팅되지 않는 한 접근이 어렵습니다.

6. 서드파티 앱과 확장성

(1) 다양한 서비스 지원

  • Google Authenticator는 TOTP 표준을 따르므로, 동일한 표준을 사용하는 다양한 서비스에 적용할 수 있습니다.
  • 서드파티 앱(예: Authy, Microsoft Authenticator)도 동일한 방식으로 동작합니다.

(2) 다중 기기 등록

  • QR 코드를 여러 디바이스에서 스캔하여 다중 기기에 설정할 수도 있습니다.

7. 한계와 대책

(1) 시간 동기화 문제

  • 클라이언트와 서버의 시간이 동기화되지 않으면 인증이 실패할 수 있습니다.
  • 이를 방지하기 위해 서버는 NTP(Network Time Protocol)를 통해 시간을 동기화합니다.

(2) 비밀 키 유출

  • QR 코드를 캡처하거나 비밀 키가 유출되면 보안 위협이 발생합니다.
  • 이를 방지하기 위해 TOTP는 비밀 키를 안전하게 저장하고 관리해야 합니다.

(3) 백업의 부재

  • Google Authenticator는 기본적으로 비밀 키를 백업하지 않으므로, 기기 분실 시 서비스 접근이 차단될 수 있습니다.
  • Authy와 같은 앱은 클라우드 백업 기능을 제공합니다.

요약

Google Authenticator 앱은 TOTP 표준에 따라 시간과 비밀 키를 기반으로 OTP를 생성합니다. 비밀 키는 QR 코드를 통해 전달되며, 클라이언트와 서버가 동기화된 시간을 사용해 OTP를 생성하고 검증합니다. 이 시스템은 보안성이 뛰어나고, 네트워크 연결 없이도 작동할 수 있어 사용자 인증의 중요한 도구로 활용됩니다.

반응형
블로그 이미지

우물 밖 개구리.

우물 밖 개구리의 블로그입니다.

,