Skip to content

DAT (Distributed Access Token) โ€‹

DAT์˜ ๋„์ž… ๋ฐฐ๊ฒฝ โ€‹

์˜ค๋Š˜๋‚  ๋งŽ์€ ์‹œ์Šคํ…œ์ด JWT๋ฅผ ์ฑ„ํƒํ•˜๊ณ  ์žˆ์œผ๋‚˜, ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์กฐ์  ํ•œ๊ณ„๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ํ† ํฐ ๊ทœ๊ฒฉ์ธ DAT๋ฅผ ์„ค๊ณ„ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿงฉ ๋ณด์•ˆ ๊ทœ๊ฒฉ์˜ ํŒŒํŽธํ™” ๋ฐ ๊ฐ•์ œ์„ฑ ๋ถ€์กฑ โ€‹

JWT๋Š” JWE์™€ ๊ฐ™์€ ์•”ํ˜ธํ™” ํ‘œ์ค€์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ์‚ฌ์šฉ์ด ๊ฐ•์ œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ด๋กœ ์ธํ•ด ๋งŽ์€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์•”ํ˜ธํ™”๋ฅผ ์ƒ๋žตํ•˜๊ฑฐ๋‚˜ ๋น„ํ‘œ์ค€ ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜์—ฌ ๋ณด์•ˆ ์ทจ์•ฝ์ ์„ ์•ผ๊ธฐํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”‘ ๊ณ ์ • ํ‚ค(Static Key) ์‚ฌ์šฉ์— ๋”ฐ๋ฅธ ๋ณด์•ˆ ๋ฆฌ์Šคํฌ โ€‹

์„œ๋ช… ํ‚ค์˜ ์ˆœํ™˜(Key Rolling)์ด ์˜๋ฌดํ™”๋˜์–ด ์žˆ์ง€ ์•Š์•„, ๋‹จ์ผ ํ‚ค๋ฅผ ์žฅ๊ธฐ๊ฐ„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋นˆ๋ฒˆํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ํ‚ค ํƒˆ์ทจ ์‹œ ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๋ณด์•ˆ ๋ถ•๊ดด๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹ค์ œ๋กœ ๋Œ€ํ˜• ์ปค๋จธ์Šค ์‚ฌ์ดํŠธ์—์„œ ์ด๋กœ ์ธํ•œ ์นจํ•ด ์‚ฌ๊ณ ๊ฐ€ ๋ฐœ์ƒํ•œ ๋ฐ” ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“‰ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜ โ€‹

JWT๋Š” ๋งค ์š”์ฒญ๋งˆ๋‹ค JSON ํŒŒ์‹ฑ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ ์ƒ๋‹นํ•œ CPU ์ž์›์„ ์†Œ๋ชจํ•ฉ๋‹ˆ๋‹ค. ๊ณ ์„ฑ๋Šฅ์ด ์š”๊ตฌ๋˜๋Š” ํ™˜๊ฒฝ์—์„œ ์ด๋Ÿฌํ•œ ํŒŒ์‹ฑ ๋น„์šฉ์€ ์‹œ์Šคํ…œ์˜ ์ „์ฒด์ ์ธ ๋ณ‘๋ชฉ ๊ตฌ๊ฐ„์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DAT์˜ ํ•ต์‹ฌ ์ฒ ํ•™ โ€‹

DAT๋Š” ๋ณด์•ˆ์€ ์„ ํƒ์ด ์•„๋‹Œ ๊ฐ•์ œ์—ฌ์•ผ ํ•˜๋ฉฐ, ์„ฑ๋Šฅ์€ ํƒ€ํ˜‘ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์›์น™ ์•„๋ž˜ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

โšก ๊ฐ€๋ณ๊ณ  ๋น ๋ฆ…๋‹ˆ๋‹ค โ€‹

expire.kid.plain.secure.signature

DAT๋Š” ์œ„์™€๊ฐ™์€ ๊ฐ€๋ฒผ์šด ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ” ๊ฐ•์ œ๋˜๋Š” ๋ณด์•ˆ โ€‹

DAT๋Š” ๋ฐ์ดํ„ฐ ์ „์†ก ์‹œ ํ‰๋ฌธ(Plain)๊ณผ ์•”ํ˜ธํ™”(Secure) ์˜์—ญ์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ๋ฐ˜๋“œ์‹œ ์•”ํ˜ธํ™”๋˜๋„๋ก ๊ฐ•์ œํ•˜๋ฉฐ, ๋ชจ๋“  ๊ณผ์ •์€ DatKey๋ฅผ ํ†ตํ•ด ํ‘œ์ค€ํ™”๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜(P256, AES-GCM ๋“ฑ)์œผ๋กœ ๋ณดํ˜ธ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ”„ ๊ฐ•์ œ๋œ ํ‚ค ๋กค๋ง โ€‹

DAT ์‹œ์Šคํ…œ์˜ ํ•ต์‹ฌ์ธ DatKey๋Š” ํ† ํฐ์˜ ๋ฐœ๊ธ‰๊ณผ ๋งŒ๋ฃŒ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ‚ค์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ์ง์ ‘ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
์‹œ์Šคํ…œ ๋ ˆ๋ฒจ์—์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ํ‚ค๋ฅผ ๊ต์ฒดํ•˜๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ์–ด, ๊ด€๋ฆฌ์ž์˜ ๋ถ€์ฃผ์˜๋กœ ์ธํ•œ '๊ณ ์ • ํ‚ค ๋ณด์•ˆ ์‚ฌ๊ณ '๋ฅผ ์›์ฒœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.


์ธ์ฆ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋น„๊ต โ€‹

๊ตฌ๋ถ„DATJWT์„ธ์…˜
์ธ์ฆ ๋ฐฉ์‹๋ถ„์‚ฐ ๊ฒ€์ฆ๋ถ„์‚ฐ ๊ฒ€์ฆ์ค‘์•™ ์ง‘์ค‘ํ˜•
๋ฐ์ดํ„ฐ ๊ตฌ์กฐRaw Bytes
(๊ณ ์ • ์˜คํ”„์…‹ ๊ธฐ๋ฐ˜)
JSON
(Key-Value ํ…์ŠคํŠธ ๊ธฐ๋ฐ˜)
Serialized Object
(๊ฐ์ฒด ์ง๋ ฌํ™”)
ํŒŒ์‹ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜Byte ๋ฐ์ดํ„ฐ ์ฆ‰์‹œ ๋งคํ•‘JSON ํŒŒ์‹ฑ ๋ฐ ํƒ€์ž… ์บ์ŠคํŒ… ํ•„์š”๊ฐ์ฒด ์—ญ์ง๋ ฌํ™” ๋ฐ I/O ๋ฐœ์ƒ
์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์ตœ์ƒ (ํŒŒ์‹ฑ ์˜ค๋ฒ„ํ—ค๋“œ ์ตœ์†Œํ™”)๋ณดํ†ต (JSON ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์— ์˜์กด)๋‚ฎ์Œ (๋„คํŠธ์›Œํฌ/๋””์Šคํฌ I/O)
์•”ํ˜ธํ™”๊ธฐ๋ณธ ์ œ๊ณตJWE ๋ณ„๋„ ๊ตฌํ˜„ ํ•„์š” (๋ณต์žก)ํ•ด๋‹น ์—†์Œ
ํ‚ค ๊ด€๋ฆฌ์‹œ์Šคํ…œ ๊ฐ•์ œ ๋กค๋ง (๋ณด์•ˆ ๊ฐ•์ œ)์ง์ ‘ ๊ตฌํ˜„ (๊ด€๋ฆฌ ๋ถ€์ฃผ์˜ ์œ„ํ—˜)ํ•ด๋‹น ์—†์Œ
ํ‚ค ์œ ํšจ๊ธฐ๊ฐ„ํ‚ค ๊ทœ๊ฒฉ ๋‚ด ๊ฐ•์ œ ๋ช…์‹œ์„ ํƒ ์‚ฌํ•ญ (๊ด€๋ฆฌ ๋ถ€์žฌ ์‹œ ์˜๊ตฌ)์ค‘์•™ ์„œ๋ฒ„ ๊ด€๋ฆฌ