| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- 디자인패턴
- Infra
- AI
- javascript
- AWS
- 오블완
- RDS
- Kubernetes
- go
- typescript
- elasticsearch
- 통합 로깅 시스템
- 관측 가능성
- replication lag
- database/sql
- blank import
- sqs fifo queue
- go-sql-driver
- goland
- 캡슐화
- golang
- esbuild
- logging
- GoF
- 보안
- 구조체
- GIT
- Intellij
- MSA
- 티스토리챌린지
Archives
- Today
- Total
Fall in IT.
2FA와 TOTP 기반 OTP 인증 시스템의 이해 본문
반응형
서비스 보안을 강화하기 위해 가장 보편적으로 사용되는 방법은 2FA(2-Factor Authentication, 2단계 인증)입니다.
오늘은 2FA의 핵심 기술 중 하나인 TOTP 방식의 OTP 인증 아키텍처와 그 작동 원리에 대해 정리해 보겠습니다.
1. 2FA(2단계 인증)란 무엇인가?
2FA는 사용자가 로그인을 시도할 때, 서로 다른 두 가지 방식의 인증 요소를 결합하여 본인임을 확인하는 절차입니다.
- 1차 인증: 지식 기반 요소 (ID/Password)
- 2차 인증: 소유 기반 요소 (OTP 코드, 하드웨어 토큰) 또는 생체 기반 요소 (지문, FaceID 등)
아이디와 비밀번호가 유출되더라도, 사용자가 물리적으로 소유한 기기(스마트폰 등)가 없다면 계정에 접근할 수 없도록 설계하는 것이 핵심입니다.
2. OTP와 TOTP의 동작 원리
- OTP(One-Time Password)는 단 한 번만 유효한 비밀번호를 의미합니다. 그중에서도 가장 널리 쓰이는 방식이 TOTP(Time-based One-Time Password)입니다.
- 생성 공식: TOTP = 알고리즘(Secret Key + 현재 시간)
- 특징:
- 비밀키(Secret Key)
서버와 사용자 앱(Google Authenticator, Authy 등)이 공유하는 고유 키입니다. 서버에서 생성되고 QR코드를 통해 사용자 앱에 공유 됩니다. - 동기화
서버와 앱은 동일한 비밀키와 '현재 시간'을 공유하므로, 네트워크 연결 없이도 동일한 6자리 숫자를 생성해낼 수 있습니다. - 유효 기간
일반적으로 30초마다 새로운 코드가 생성되며, 지난 코드는 즉시 폐기됩니다.
- 비밀키(Secret Key)
3. 2FA OTP 아키텍처 및 구성 요소
OTP 시스템을 구축하기 위해서는 서버, 클라이언트, 그리고 인증 앱 간의 유기적인 흐름이 필요합니다.
- 서버 (Server): 사용자별 Secret Key를 생성하고, DB에 안전하게 저장하고, 전송받은 OTP 번호를 검증하는 로직을 수행합니다.
- 클라이언트 (Web/App): 사용자에게 QR 코드를 노출하여 OTP 앱에 등록을 유도하고, 인증 시 6자리 번호를 입력받는 인터페이스를 제공합니다.
- OTP 앱 (Authenticator): 사용자의 스마트폰에 설치된 앱으로, QR 코드를 통해 Secret Key를 저장한 뒤 실시간으로 코드를 생성합니다.
4. 핵심 프로세스
① OTP 등록 단계 (Registration)
처음 2FA를 설정할 때 발생하는 과정입니다.
- 로그인: ID와 Password를 사용해서 서비스에 로그인 합니다.
- 2FA 설정: Secret Key 생성. 서버에서 사용자별로 고유한 랜덤 비밀키를 생성합니다.
- QR 코드 제공: 서버는 otpauth:// 프로토콜 형식을 사용하여 비밀키 정보를 담은 QR 코드를 클라이언트에 전달합니다.
- OTP 앱 등록: 사용자는 OTP 앱으로 QR 코드를 스캔하여 비밀키를 기기에 저장합니다.
- 저장: 서버는 해당 비밀키를 사용자의 계정 정보와 매핑하여 DB에 저장합니다.
② OTP 인증 단계 (Authentication)
로그인 시 본인 확인을 거치는 과정입니다.
- 코드 입력: 사용자는 자신의 OTP 앱에 떠 있는 6자리 숫자를 2차 로그인 화면에 입력합니다.
- 서버 검증: 서버는 DB에서 해당 사용자의 Secret Key를 조회합니다.
- 현재 시간을 기준으로 서버 자체적으로 OTP 코드를 계산합니다.
- 비교 및 승인: 사용자가 입력한 값과 서버가 계산한 값이 일치하면 인증이 성공하며, 세션에 2FA 인증 완료 정보를 기록합니다.
주의사항 및 고려할 점
- Secret Key 보안: 비밀키가 유출되면 2FA는 무용지물이 됩니다. DB 저장 시 반드시 암호화하여 저장해야 합니다.
- 시간 동기화: TOTP는 시간에 의존하므로, 서버의 시스템 시간이 정확하지 않으면 인증에 실패할 수 있습니다. (NTP 등을 통한 시간 정기 동기화 권장)
- 백업 플랜: 사용자가 휴대폰을 분실했을 경우를 대비하여 '복구 코드(Recovery Codes)'를 별도로 제공하는 것이 좋습니다.
반응형
'기타' 카테고리의 다른 글
| 연차는 쌓이는데, 왜 실력은 제자리일까? (0) | 2025.09.06 |
|---|---|
| Context7: 최신 문서 기반 AI 코딩하는 방법 (0) | 2025.05.15 |
| VPN 연결 후 인터넷이 안 되는 문제 해결하기 (macOS + Tunnelblick + OpenVPN (0) | 2025.05.08 |
| 삶은 견딜 만한 것일까 - "작은 땅의 야수들"을 읽고 (2) | 2025.05.06 |
| GitHub 저장소를 새로운 노트북에서 SSH로 Clone 받기 (0) | 2025.04.26 |
Comments
