보안 및 인증 분야에서 "토큰(Token)"은 사용자의 인증·인가 상태를 표현하는 데이터 구조로, 시스템 간 신뢰를 전달하는 핵심 수단입니다. 토큰은 형식/발급 주체/사용 목적에 따라 다양한 종류가 있습니다.
🔑 1. 전통적 토큰
- Session ID
- 서버 메모리에 세션 상태 저장, 클라이언트는 세션 키만 쿠키에 보관
- 단점: 서버 확장성(Scaling) 낮음
- Kerberos Ticket
- KDC(Key Distribution Center)에서 발급
- TGT(Ticket Granting Ticket) + Service Ticket 구조
- 대칭키 기반, 엔터프라이즈 네트워크 환경에서 사용
🔑 2. 웹/모바일 인증 토큰
- JWT (JSON Web Token)
- 가장 널리 사용되는 토큰
- 구조: Header.Payload.Signature (Base64URL 인코딩)
- 장점: 상태 비저장(stateless), REST API 친화적
- 용도: OAuth 2.0 / OpenID Connect ID Token, Access Token
- Opaque Token
- 무작위 문자열만 전달, 실제 정보는 Authorization Server(DB)에서 조회
- 장점: 토큰 크기 작음, 민감 정보 노출 방지
- 단점: 서버 조회 필요 → 부하 증가
- Refresh Token
- Access Token보다 장기적, 새로운 Access Token 발급용
- 보관 위험이 커서 보안 관리 중요 (예: 저장 시 암호화 필요)
🔑 3. 표준 프로토콜 토큰
- SAML Assertion (XML 토큰)
- IdP ↔ SP 간 사용자 인증 결과 전달
- XML Signature, XML Encryption 적용
- 엔터프라이즈 SSO 환경에서 여전히 많이 사용
- ID Token (OIDC)
- JWT 기반, 사용자 프로필 정보 포함
- 클라이언트가 사용자를 "누구인지" 식별할 때 사용
- Access Token (OAuth 2.0)
- API 접근 권한을 표현
- 일반적으로 Bearer Token 방식 (HTTP Header: Authorization: Bearer <token>)
🔑 4. 하드웨어/소프트웨어 토큰
- OTP 토큰 (TOTP/HOTP)
- 1회용 비밀번호(One Time Password)
- TOTP: 시간 기반, HOTP: 카운터 기반
- 예: Google Authenticator, YubiKey
- Smart Card / Hardware Token
- PKI 기반 인증서 저장 (예: 공인인증서 USB, FIDO2 보안키)
- 비밀키를 디바이스 밖으로 꺼낼 수 없음 → 강력 보안
- FIDO2/WebAuthn Credential
- 공개키 기반 (서버: Public Key, 클라이언트: Private Key)
- 토큰 자체는 "서명 값(Signature)"
- 비밀번호 없는 인증(Passwordless)에 최적화
🔑 5. 특수 토큰
- CSRF Token
- 웹에서 CSRF 공격 방지용
- 서버가 세션과 연계된 난수 발급 → 폼 제출 시 검증
- Nonce (Number used once)
- Replay Attack 방지용
- 토큰이라기보단 "임시 검증 값"
- MAC Token (Message Authentication Code)
- 토큰 자체가 서명(HMAC) 포함
- 무결성 보장 강화
📌 정리
- 전통: Session ID, Kerberos Ticket
- 웹 표준: JWT, Opaque Token, Refresh Token, Access/ID Token
- 엔터프라이즈: SAML Assertion
- 강화 인증: OTP, FIDO2/WebAuthn
- 보조 보안: CSRF Token, Nonce, MAC Token
📊 토큰 종류별 비교
| 구분 | 토큰 종류 | 포맷 | 주요 용도 | 장점 | 단점 |
| 전통 | Session ID | 랜덤 문자열 | 웹 세션 유지 | 단순, 구현 쉬움 | 서버 상태 저장 필요 → 확장성 낮음 |
| Kerberos Ticket | 바이너리 (대칭키 기반) | 엔터프라이즈 SSO (AD) | 빠른 인증, 재사용 최소화 | 네트워크 내부 환경 한정, 복잡한 KDC 구성 | |
| 웹 표준 | JWT (JSON Web Token) | JSON(Base64URL 인코딩) | OAuth2, OIDC, API 인증 | Stateless, 서명 검증 가능 | 크기 큼, 만료 전 탈취 위험 |
| Opaque Token | 랜덤 문자열 | API 인증 (Access Token) | 노출 시 내부 정보 없음, 안전 | 매 요청 시 서버 DB 확인 필요 | |
| Access Token | JWT or Opaque | API 접근 권한 | 단기 권한 위임 | 탈취 시 API 오남용 위험 | |
| Refresh Token | 보통 Opaque | 새 Access Token 발급 | 장기 세션 유지 가능 | 탈취 시 장기간 악용 가능 | |
| ID Token | JWT | 사용자 식별 (OIDC) | 사용자 프로필 제공 | 유효기간 관리 필수 | |
| 엔터프라이즈 | SAML Assertion | XML (서명/암호화 지원) | 기업 SSO, B2B 연동 | 표준성, 풍부한 속성 | XML 무겁고, 모바일·SPA에 부적합 |
| 강화 인증 | OTP (HOTP/TOTP) | 숫자 코드 | MFA, 2FA | 구현 간단, 보안 강화 | 사용자 입력 불편 |
| Hardware Token (스마트카드, YubiKey) | PKI 기반 | 고강도 인증 | 키 유출 불가, 매우 안전 | 장치 분실/관리 부담 | |
| FIDO2/WebAuthn | 공개키 암호화 (서명값) | 패스워드리스 인증 | 강력 보안, 피싱 저항 | 호환성 문제(구형 브라우저/서비스) | |
| 보조 보안 | CSRF Token | 랜덤 문자열 | 웹 폼 보호 | CSRF 방지 | 세션 연계 필요 |
| Nonce | 임시 난수 | 재사용 공격 방지 | 단순·효율적 | 잘못 관리 시 인증 실패 | |
| MAC Token | 토큰+HMAC | API 요청 무결성 보장 | 위·변조 방지 | 서버·클라이언트 모두 키 관리 필요 |
'소프트웨어 > 상식' 카테고리의 다른 글
| Apache Kafka (1) | 2025.09.20 |
|---|---|
| JWT(JSON Web Token) (0) | 2025.09.20 |
| SAML(Security Assertion Markup Language) (0) | 2025.09.20 |
| SSO(Single Sign-On, 단일 로그인) (0) | 2025.09.20 |
| KCMVP(Korea Cryptographic Module Validation Program) (0) | 2025.09.19 |