[S3U7] Token๊ณผ Hashing

Yeongยท2023๋…„ 3์›” 8์ผ
0

CS

๋ชฉ๋ก ๋ณด๊ธฐ
7/12

๐Ÿ“–Token

ํ† ํฐ ์ธ์ฆ ๋ฐฉ์‹์€ ์ตœ๊ทผ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์ธ์ฆ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๋กœ ํ† ํฐ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ์ž์˜ ์ธ์ฆ ์ •๋ณด๋ฅผ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์…˜ ์ธ์ฆ ๋ฐฉ์‹์˜ ๋น„๊ตํ•ด ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ๋ฌธ์ œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿท๏ธํ† ํฐ ์ธ์ฆ ๋ฐฉ์‹์˜ ํ๋ฆ„

๐Ÿท๏ธํ† ํฐ ์ธ์ฆ ๋ฐฉ์‹์˜ ์žฅ์ ๊ณผ ๋‹จ์ 

์žฅ์ 

  • ๋ฌด์ƒํƒœ์„ฑ : ์„œ๋ฒ„๋Š” ๋น„๋ฐ€ ํ‚ค๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ณด๋‚ธ ํ† ํฐ์˜ ์œ ํšจ์„ฑ๋งŒ ๊ฒ€์ฆํ•˜๋ฉด ๋œ๋‹ค.
  • ํ™•์žฅ์„ฑ : ๋‹ค์ˆ˜์˜ ์„œ๋ฒ„๊ฐ€ ๊ณตํ†ต๋œ ์„ธ์…˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์—†์–ด ์„œ๋ฒ„๋ฅผ ํ™•์žฅํ•˜๊ธฐ ๋” ์šฉ์ดํ•˜๋‹ค.
  • ์–ด๋””์„œ๋‚˜ ํ† ํฐ ์ƒ์„ฑ ๊ฐ€๋Šฅ : ํ† ํฐ์˜ ์ƒ์„ฑ๊ณผ ๊ฒ€์ฆ์ด ํ•˜๋‚˜์˜ ์„œ๋ฒ„์—์„œ ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์•„๋„ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ† ํฐ ์ƒ์„ฑ๋งŒ์„ ๋‹ด๋‹นํ•˜๋Š” ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ถŒํ•œ ๋ถ€์—ฌ์— ์šฉ์ด : ํ† ํฐ์€ ์ธ์ฆ ์ƒํƒœ, ์ ‘๊ทผ ๊ถŒํ•œ ๋“ฑ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž ๊ถŒํ•œ ๋ถ€์—ฌ์— ์šฉ์ด

๋‹จ์ 

  • ๋ฌด์ƒํƒœ์„ฑ: ์ธ์ฆ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ์„œ๋ฒ„๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ํ•ด๋‹น ํ† ํฐ์„ ๊ฐ•์ œ๋กœ ๋งŒ๋ฃŒ์‹œ ํ‚ฌ ์ˆ˜ ์—†๋‹ค.
  • ์œ ํšจ ๊ธฐ๊ฐ„: ํ† ํฐ ํƒˆ์ทจ๋ฅผ ๋Œ€๋น„ํ•ด ์œ ํšจ ๊ธฐ๊ฐ„์„ ์งง๊ฒŒ ์„ค์ •ํ•˜๋ฉด ํ† ํฐ์ด ๋งŒ๋ฃŒ ๋  ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ ๋กœ๊ทธ์ธํ•ด์•ผํ•ด์„œ ์ข‹์€ ์•Š์€ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ œ๊ณตํ•œ๋‹ค.
  • ํ† ํฐ์˜ ํฌ๊ธฐ: ํ† ํฐ์— ์ •๋ณด๊ฐ€ ๋งŽ์ด ๋‹ด๊ธธ ์ˆ˜๋ก ๋„คํŠธ์›Œํฌ ๋น„์šฉ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿท๏ธJWT (JSON Web Token)

JWT๋Š” JSON ๊ฐ์ฒด์— ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์ด๋ฅผ ํ† ํฐ์œผ๋กœ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์ด๋‹ค.

JWT์˜ ๊ตฌ์„ฑ

  • Header
    ์–ด๋–ค ์ข…๋ฅ˜์˜ ํ† ํฐ์ธ์ง€, ์–ด๋–ค ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์•”ํ˜ธํ™” ๋˜์—ˆ๋Š”์ง€ ๋‹ด๊ณ  ์žˆ๋‹ค.
    JSON ๊ฐ์ฒด๋ฅผ base64 ๋ฐฉ์‹์œผ๋กœ ์ธ์ฝ”๋”ฉํ•œ๋‹ค.
    base64์€ ๋””์ฝ”๋”ฉํ•˜๊ธฐ ์‰ฝ๊ธฐ๋•Œ๋ฌธ์— ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” ๋‹ด์ง€ ์•Š๋Š”๋‹ค.(๋””์ฝ”๋”ฉ ๋งํฌ)
  • Payload
    ์œ ์ €์˜ ์ •๋ณด, ๊ถŒํ•œ, ๊ธฐํƒ€ ํ•„์š”ํ•œ ์ •๋ณด ๋“ฑ์„ ๋‹ด๊ณ  ์žˆ๋‹ค.
    header์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ JSON ๊ฐ์ฒด๋ฅผ base64๋กœ ์ธ์ฝ”๋”ฉํ•œ๋‹ค.
  • Signature
    {base64(Header + Payload) + secert}๋ฅผ ์•”ํ˜ธํ™”ํ•œ ๊ฐ’
    JWT์˜ salt๋ฅผ secert๋ผ๊ณ  ํ•œ๋‹ค.

๐Ÿท๏ธ์•ก์„ธ์Šค ํ† ํฐ(Access Token)๊ณผ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ(Refresh Token)

Access Token

์„œ๋ฒ„์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ํ† ํฐ์œผ๋กœ ๋ณด์•ˆ์„ ์œ„ํ•ด ์œ ํšจ๊ธฐ๊ฐ„์ด ๋ณดํ†ต 24์‹œ๊ฐ„ ์ •๋„๋กœ ์งง๋‹ค.

Refresh Token

์•ก์„ธ์Šค ํ† ํฐ์ด ๋งŒ๋ฃŒ๋˜์—ˆ์„ ๋•Œ ์ƒˆ๋กœ์šด ์•ก์„ธ์Šค ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํ† ํฐ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ฆฌํ”„๋ ˆ์‹œ ํ† ํฐ๋ณด๋‹ค ๊ธด ์œ ํšจ๊ธฐ๊ฐ„์„ ์„ค์ •ํ•œ๋‹ค.

๐Ÿ“–Hashing

๐Ÿท๏ธHashing ํŠน์ง•

  • ํ•ด์‹ฑ์€ ์•”ํ˜ธํ™” ๋ฐฉ์‹์ค‘์— ํ•˜๋‚˜๋กœ ๋ณตํ˜ธํ™”๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ์•”ํ˜ธํ™”๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ•ด์‹ฑ์€ ํ•ด์‹œ ํ•จ์ˆ˜(Hash Function)์„ ์‚ฌ์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”ํ•œ๋‹ค.
  • ํ•ญ์ƒ ๊ฐ™์€ ๊ธธ์ด์˜ ๋ฌธ์ž์—ด์„ ๋ฆฌํ„ดํ•œ๋‹ค.
  • ์„œ๋กœ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์— ๋™์ผํ•œ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐ˜๋“œ์‹œ ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.
  • ๋™์ผํ•œ ๋ฌธ์ž์—ด์— ๋™์ผํ•œ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.

๐Ÿท๏ธ๋ ˆ์ธ๋ณด์šฐ ํ…Œ์ด๋ธ”๊ณผ ์†”ํŠธ(Salt)

๋ ˆ์ธ๋ณด์šฐ ํ…Œ์ด๋ธ”

ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ™์€ ๋ฌธ์ž์—ด์€ ํ•ญ์ƒ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ’์ด ๋‚˜์˜จ๋‹ค๋Š” ํŠน์„ฑ์„ ์ด์šฉํ•ด ์•”ํ˜ธํ™” ์ด์ „ ๋ฌธ์ž์—ด๊ณผ ํ•ด์‹ฑํ•œ ๊ฐ’์„ ๊ธฐ๋กํ•ด ๋‘” ํ‘œ

์†”ํŠธ

๋ ˆ์ด๋ณด์šฐ ํ…Œ์ด๋ธ”์— ๊ธฐ๋ก๋œ ๊ฒฝ์šฐ ์œ ์ถœ๋˜๋ฉด ํ•ด์‹ฑ ์ด์ „์˜ ๊ฐ’์„ ์•Œ์•„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
์•”ํ˜ธํ™”ํ•  ๋ฌธ์ž์—ด ๋’ค์— ์ž„์˜์˜ ๊ฐ’์„ ๋”ํ•ด ํ•ด์‹ฑํ•˜๋ฉด ์œ ์ถœ๋˜๋”๋ผ๋„ ํ•ด์‹ฑ ์ด์ „์˜ ๊ฐ’์„ ์•Œ์•„๋‚ด๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.
์ด๋•Œ ๋”ํ•ด์ฃผ๋Š” ์ž„์˜์˜ ๊ฐ’์„ ์†”ํŠธ๋ผ๊ณ  ํ•œ๋‹ค.

profile
๊ธ์ •์ ์œผ๋กœ~โœ๏ธ(โ—”โ—กโ—”)

0๊ฐœ์˜ ๋Œ“๊ธ€