๐Ÿ“’TIL) ์ธ์ฆ & ์ธ๊ฐ€

TaeYangยท2021๋…„ 10์›” 1์ผ
0
post-thumbnail

์ธ์ฆ(Authentication)

์ธ์ฆ์€ ํšŒ์›๊ฐ€์ž…๊ณผ ๋กœ๊ทธ์ธ์„ ๋งํ•ฉ๋‹ˆ๋‹ค!
์ธ์ฆ์€ ์•„์ด๋””๋‚˜ ์ด๋ฉ”์ผ์ฃผ์†Œ, ๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ์œผ๋กœ ์„œ๋น„์Šค๋ฅผ ๋ˆ„๊ฐ€ ์–ด๋–ป๊ฒŒ ์“ฐ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌํ•ด์•ผํ• ๊นŒ?๐Ÿค”

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

ํ•ด์‰ฌ(hash)

๋ณธ๋ž˜ ํ•ด์‰ฌํ•จ์ˆ˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ๋น ๋ฅด๊ฒŒ ์ž๋ฃŒ๋ฅผ ๊ฒ€์ƒ‰ ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ์˜ ์œ„๋ณ€์กฐ๋ฅผ ์ฒดํฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ
์ธํ’‹์ด ์žˆ์œผ๋ฉด ์•„์›ƒํ’‹๋„ ํ•˜๋‚˜๋งŒ ๋‚˜์˜ค๋Š” ํ•จ์ˆ˜ํ˜•ํƒœ๋กœ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

๋‹จ๋ฐฉํ–ฅ ํ•ด์‰ฌ ํ•จ์ˆ˜

๋‹จ๋ฐฉํ–ฅ ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์›๋ณธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณ€ํ™˜ํ•˜์—ฌ ์•”ํ˜ธํ™”๋œ ๋ฉ”์‹œ์ง€์ธย ๋‹ค์ด์ œ์ŠคํŠธ(digest)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค
์œ„์—์„œ 20์„ ํ•ด์‹œํ•ด์„œ 2000์ด๋ผ๋Š” ๊ฐ’์ด ๋‚˜์˜ค๋Š”๊ฑด ์•Œ์ˆ˜ ์žˆ์ง€๋งŒ 5000์ด๋ผ๋Š” ๊ฐ’์ด ์›๋ž˜ 1์ด๋ผ๋Š” ๊ฐ’์€ ์•Œ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค ๊ทธ๋ž˜์„œ ๋ณต์›์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋‹จ๋ฐฉํ–ฅ ํ•ด์‰ฌ ํ•จ์ˆ˜๋Š” ์•”ํ˜ธํ•™์  ์šฉ๋„๋กœ๋„ ์‚ฌ์šฉ์ด ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
๋‹จ ๊ฐ™์€๊ฐ’์ธ๊ฑธ ์•Œ์ˆ˜ ์žˆ๋Š”๋ฐฉ๋ฒ•

์˜ˆ์‹œ
password: 1235
hash256์ด๋ผ๋Š” ํ•ด์‰ฌ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉ 0b47c69b1033498d5f33f5f7d97bb6a3126134751629f4d0185c115db44c094e

๋‹จ๋ฐฉํ–ฅ ํ•ด์‰ฌ ํ•จ์ˆ˜ ์ทจ์•ฝ์ ๐Ÿ™‚

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

Salting

์ฒซ๋ฒˆ์งธ๋กœ๋Š” Salting ์ธ๋ฐ ๋ง๊ทธ๋Œ€๋กœ ์†Œ๊ธˆ์„ ์น˜๊ณ  ๋Š˜๋ ค์ค€๋‹ค ์ƒ๊ฐํ•˜๋ฉด ๋˜์‹œ๋Š”๋ฐ
์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ์ž„์˜๋กœ ์ƒ์„ฑํ•œ ๋ฌธ์ž์—ด(Salt)์„ ํ•ฉ์ณ์„œ ํ•ด์‹ฑ์„ ํ•ด์ฃผ๊ณ  ์ด ํ•ด์‹œ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ• ์ž…๋‹ˆ๋‹ค.
๋น„๊ต๋ฅผ ์œ„ํ•ด ํ•ด์‹œ๊ฐ’๊ณผ Salt๊ฐ’์„ ๊ฐ™์ด ์ €์žฅํ•ด์ฃผ์–ด์•ผ

Key Stretching

๋‘๋ฒˆ์งธ๋Š” Key Stretching ํ•ด์ปค๊ฐ€ ํŒจ์Šค์›Œ๋“œ๋ฅผ ๋ฌด์ž‘์œ„ ๋Œ€์ž…์„ ํ†ตํ•ด ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์‹œ๊ฐ„์„ ๋Œ€ํญ ๋Š˜๋ฆฌ๊ธฐ ์œ„ํ•ด salting๋ฐ ํ•ด์‹ฑ์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ์›๋ณธ ๊ฐ’์„ ์œ ์ถ”ํ•˜๊ธฐ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š”๊ฑฐ๋ผ ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

bcrypt

Saltingd์™€ Key Stretching์˜ ๋Œ€ํ‘œ์  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‹ค.
๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๊ณ  ์‚ฌ์šฉ์ด ๊ฐ„ํŽธํ•ดํ•ด์„œ ์‰ฝ๊ฒŒ ์ ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ธ๊ฐ€(Authorization)

์ธ๊ฐ€๋Š” ์œ ์ €๊ฐ€ ์š”์ฒญํ•˜๋Š” request๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š” ์œ ์ €์ธ๊ฐ€๋ฅผ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ ์ž…๋‹ˆ๋‹ค

Json Web Token

JWT์˜ ๊ตฌ์กฐ๋Š” ์•„๋ž˜ ๊ทธ๋Ÿผ์ฒ˜๋Ÿผ ๊ตฌ์กฐ๊ฐ€ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค

ํ† ๊ทผ์˜ ํƒ€์ž…๊ณผ ํ•ด์‹œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค
ํ—ค๋”์˜ ๋‚ด์šฉ์—๋Š” BASE64 ๋ฐ”์‹์œผ๋กœ ์ธ์ฝ”๋”ฉํ•ด์„œ JWT์— ๊ฐ€์žฅ ์ฒซ ๋ถ€๋ถ„์— ๊ธฐ๋ก์ด ๋ฉ๋‹ˆ๋‹ค

์˜ˆ์‹œ
{
"alg": "HS256", "typ": JWP" }

Payload

Payload์—๋Š” ๋‚ด์šฉ๋“ค์ด ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.
๋‚ด์šฉ์—๋Š” exp์™€ ๊ฐ™์ด ๋งŒ๋ฃŒ์‹œ๊ฐ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ณต๊ฐœ ํด๋ ˆ์ž„์ด, ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ„ ํ˜‘์˜ํ•˜์— ์‚ฌ์šฉ ํ•˜๋Š” ๋น„๊ณต๊ฐœ ํด๋ ˆ์ž„ ์„ ์กฐํ•ฉํ•ด์„œ ์ž‘์„ฑํ•œ๋’ค BASE64๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ JWT์— ๋‘๋ฒˆ์งธ ๋ถ€๋ถ„์— ๊ธฐ๋ก์ด ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ
{
"uesr-id": 1, "exp": 1539517391 }

Signature

Signature์€ ์„œ๋ช… ๋ถ€๋ถ„์ธ๋ฐ JWT๊ฐ€ ์›๋ณธ ๊ทธ๋Œ€๋กœ๋ผ๋Š” ๊ฒƒ์„ ํ™•์ธํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
Header ์™€ Payload , JWT secret์„ ํ—ค๋”์— ์ง€์ •๋œ ์•”ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์•”ํ˜ธํ™” ํ•˜์—ฌ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.(๋ณตํ˜ธํ™” ๊ฐ€๋Šฅ)

profile
์Œ์•… ์ „๊ณต ์ด์˜€๋˜ ์˜ˆ๋น„ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์žโ˜€๏ธ

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