2FA(Two-Factor Authentication, 이중 인증)는 비밀번호 외에 두 번째 인증 요소를 추가해 계정 보안을 강화하는 방식이다. 비밀번호가 노출되어도 공격자가 접근할 수 없다.
인증 요소 종류
| 요소 | 예시 |
|---|
| 지식 (Something you know) | 비밀번호, PIN |
| 소유 (Something you have) | 스마트폰 OTP, 하드웨어 키 |
| 존재 (Something you are) | 지문, 얼굴 인식 |
TOTP (Time-based One-Time Password)
python
import pyotp
import qrcode
# OTP 시크릿 생성
secret = pyotp.random_base32()
totp = pyotp.TOTP(secret)
# 현재 OTP 생성 (30초마다 변경)
print(totp.now()) # 6자리 숫자
# 검증
totp.verify("123456") # True/False
# QR 코드 생성 (Google Authenticator 앱 등록용)
uri = totp.provisioning_uri("alice@example.com", issuer_name="MyApp")
qrcode.make(uri).save("2fa_qr.png")
HMAC-SHA1 기반 동작
TOTP = HOTP(secret, current_time // 30)
HOTP(K, C) = HMAC-SHA1(K, C) 의 특정 6자리
→ 서버와 클라이언트가 같은 시간 기반으로 계산
관련 개념
참고문헌
- •RFC 6238 — TOTP
- •RFC 4226 — HOTP