오늘날 많은 시스템이 JWT를 채택하고 있으나, 실제 운영 환경에서는 다음과 같은 구조적 한계가 존재합니다.
이를 해결하기 위해 새로운 토큰 규격인 DAT를 설계하게 되었습니다.
JWT는 JWE와 같은 암호화 표준을 제공하지만, 사용이 강제되지 않습니다.
이로 인해 많은 개발 환경에서 암호화를 생략하거나 비표준 방식으로 데이터를 전송하여 보안 취약점을 야기합니다.
서명 키의 순환(Key Rolling)이 의무화되어 있지 않아, 단일 키를 장기간 사용하는 경우가 빈번합니다. 이는 키 탈취 시 시스템 전체의 보안 붕괴로 이어질 수 있으며, 실제로 대형 커머스 사이트에서 이로 인한 침해 사고가 발생한 바 있습니다.
JWT는 매 요청마다 JSON 파싱 과정을 거치며 상당한 CPU 자원을 소모합니다. 고성능이 요구되는 환경에서 이러한 파싱 비용은 시스템의 전체적인 병목 구간이 될 수 있습니다.
DAT는 보안은 선택이 아닌 강제여야 하며, 성능은 타협할 수 없다는 원칙 아래 설계되었습니다.
expire.cid.plain.secure.signature
DAT는 위와같은 가벼운 데이터 구조를 가지고 있습니다.
DAT는 데이터 전송 시 평문(Plain)과 암호화(Secure) 영역을 물리적으로 분리합니다.
민감한 정보는 반드시 암호화되도록 강제하며, 모든 과정은 DatKey를 통해 표준화된 알고리즘(P256, AES-GCM 등)으로 보호됩니다.
DAT 시스템의 핵심인 DatKey는 토큰의 발급과 만료뿐만 아니라 키의 생명주기를 직접 관리합니다.
시스템 레벨에서 주기적으로 키를 교체하도록 설계되어 있어, 관리자의 부주의로 인한 '고정 키 보안 사고'를 원천 차단합니다.
| 구분 | DAT | JWT | 세션 |
|---|---|---|---|
| 인증 방식 | 분산 검증 | 분산 검증 | 중앙 집중형 |
| 데이터 구조 | Raw Bytes (고정 오프셋 기반) | JSON (Key-Value 텍스트 기반) | Serialized Object (객체 직렬화) |
| 파싱 메커니즘 | Byte 데이터 즉시 매핑 | JSON 파싱 및 타입 캐스팅 필요 | 객체 역직렬화 및 I/O 발생 |
| 처리 성능 | 최상 (파싱 오버헤드 최소화) | 보통 (JSON 처리 성능에 의존) | 낮음 (네트워크/디스크 I/O) |
| 암호화 | 기본 제공 | JWE 별도 구현 필요 (복잡) | 해당 없음 |
| 키 관리 | 시스템 강제 롤링 (보안 강제) | 직접 구현 (관리 부주의 위험) | 해당 없음 |
| 키 유효기간 | 키 규격 내 강제 명시 | 선택 사항 (관리 부재 시 영구) | 중앙 서버 관리 |