TIL-35 ์ธ์ฆ&์ธ๊ฐ€ ๐Ÿ”

PRBยท2021๋…„ 9์›” 5์ผ
0

WEB

๋ชฉ๋ก ๋ณด๊ธฐ
5/15
post-thumbnail

์ธ์ฆ

์ธ์ฆ(Authentication)์€ ์œ ์ €์˜ identification์„ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ์ด๋‹ค.

๋กœ๊ทธ์ธ ์ ˆ์ฐจ
1. ์œ ์ € ์•„์ด๋””์™€ ๋น„๋ฒˆ ์ƒ์„ฑ
2. ์œ ์ € ๋น„๋ฒˆ ์•”ํ˜ธํ™” ํ•ด์„œ DB์— ์ €์žฅ.
3. ์œ ์ € ๋กœ๊ทธ์ธ -> ์•„์ด๋””์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ
4. ์œ ์ €๊ฐ€ ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ํ•œํ›„ ์•”ํ˜ธํ™”๋˜์„œ DB์— ์ €์ •๋œ ์œ ์ € ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๋น„๊ต.
5. ์ผ์น˜ํ•˜๋ฉด ๋กœ๊ทธ์ธ ์„ฑ๊ณต
6. ๋กœ๊ทธ์ธ ์„ฑ๊ณตํ•˜๋ฉดย access token์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†ก.
7. ์œ ์ €๋Š” ๋กœ๊ทธ์ธ ์„ฑ๊ณตํ›„ ๋‹ค์Œ๋ถ€ํ„ฐ๋Š”ย access token์„ ์ฒจ๋ถ€ํ•ด์„œ request๋ฅผ ์„œ๋ฒ„์— ์ „์†กํ•จ์œผ๋กœ์„œ ๋งค๋ฒˆ ๋กœ๊ทธ์ธ ํ•ด๋„ ๋˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.

์œ ์ € ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™”

  • ์œ ์ €์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ์ ˆ๋Œ€ ๋น„๋ฐ€๋ฒˆํ˜ธ ๊ทธ๋Œ€๋กœ DB์— ์ €์žฅ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • DB๊ฐ€ ํ•ดํ‚น์„ ๋‹นํ•˜๋ฉด ์œ ์ €์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋„ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ ๋œ๋‹ค.
    • ์™ธ๋ถ€ ํ•ดํ‚น์ด ์•„๋‹ˆ๋”๋ผ๋„ ๋‚ด๋ถ€ ๊ฐœ๋ฐœ์ž๋‚˜ ์ธ๋ ฅ์ด ์œ ์ €๋“ค์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
  • ์œ ์ €์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๊ผญ ์•”ํ˜ธํ™” ํ•ด์„œ ์ €์žฅ ํ•ด์•ผ ํ•œ๋‹ค.
    • ๊ทธ๋Ÿผ์œผ๋กœ DB๊ฐ€ ํ•ดํ‚น์„ ๋‹นํ•ด๋„ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š์œผ๋ฉฐ
    • ๋‚ด๋ถ€ ์ธ๋ ฅ๋„ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์•Œ ์ˆ˜๊ฐ€ ์—†์Œ.
  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธ์—๋Š” ๋‹จ๋ฐฉํ–ฅ ํ•ด์‰ฌ ํ•จ์ˆ˜(one-way hash function)๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์“ฐ์ธ
    • ๋‹จ๋ฐฉํ–ฅ ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์›๋ณธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณ€ํ™˜ํ•˜์—ฌ ์•”ํ˜ธํ™”๋œ ๋ฉ”์‹œ์ง€์ธย ๋‹ค์ด์ œ์ŠคํŠธ(digest)๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์›๋ณธ ๋ฉ”์‹œ์ง€๋ฅผ ์•Œ๋ฉด ์•”ํ˜ธํ™”๋œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌํ•˜๊ธฐ๋Š” ์‰ฝ์ง€๋งŒ ์•”ํ˜ธํ™”๋œ ๋ฉ”์‹œ์ง€๋กœ๋Š” ์›๋ณธ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌํ•  ์ˆ˜ ์—†์–ด์„œย ๋‹จ๋ฐฉํ–ฅ์„ฑ(one-way)ย ์ด๋ผ๊ณ  ํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, "test password"๋ฅผ hash256์ด๋ผ๋Š” ํ•ด์‰ฌ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉดย 0b47c69b1033498d5f33f5f7d97bb6a3126134751629f4d0185c115db44c094eย ๊ฐ’์ด ๋‚˜์˜จ๋‹ค.
    • ๋งŒ์ผ "test password2"๋ฅผ hash256 ํ•ด์‰ฌ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉดย d34b32af5c7bc7f54153e2fdddf251550e7011e846b465e64207e8ccda4c1aebย ๊ฐ’์ด ๋‚˜์˜จ๋‹ค. ์‹ค์ œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋Š” ๋น„์Šทํ•˜์ง€๋งŒ ํ•ด์‰ฌ ํ•จ์ˆ˜ ๊ฐ’์€ ์™„์ „ํžˆ ํ‹€๋ฆฐ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ํšจ๊ณผ๋ฅผ avalance๋ผ๊ณ  ํ•˜๋Š”๋ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‰ฌ ๊ฐ’์„ ํ•ดํ‚น์„ ์–ด๋ ต๊ฒŒ ๋งŒ๋“œ๋Š” ํ•˜๋‚˜์˜ ์š”์†Œ์ด๋‹ค.

Bcrypt

๋‹จ๋ฐฉํ–ฅ ํ•ด์‰ฌ ํ•จ์ˆ˜๋„ ๋ช‡๊ฐ€์ง€ ์ทจ์•ฝ์ ์ด ์žˆ๋‹ค.

  • Rainbow table attack - ๋ฏธ๋ฆฌ ํ•ด์‰ฌ๊ฐ’๋“ค์„ ๊ณ„์‚ฐํ•ด ๋†“์€ ํ…Œ์ด๋ธ”์„ Rainbow table์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ์›๋ž˜ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ์„ค๊ณ„๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์งง์€ ์‹œ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ๊ฒƒ์ด๋‹ค (Remember Set?). ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ๋ณธ๋ž˜ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ์ตœ๋Œ€ํ•œ ๋น ๋ฅด๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์†์„ฑ ๋•Œ๋ฌธ์— ๊ณต๊ฒฉ์ž๋Š” ๋งค์šฐ ๋น ๋ฅธ ์†๋„๋กœ ์ž„์˜์˜ ๋ฌธ์ž์—ด์˜ ๋‹ค์ด์ œ์ŠคํŠธ์™€ ํ•ดํ‚นํ•  ๋Œ€์ƒ์˜ ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค(MD5๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ์ผ๋ฐ˜์ ์ธ ์žฅ๋น„๋ฅผ ์ด์šฉํ•˜์—ฌ 1์ดˆ๋‹น 56์–ต ๊ฐœ์˜ ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ๋Œ€์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค). ์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ถ”์ธกํ•˜๋ฉด ํŒจ์Šค์›Œ๋“œ๊ฐ€ ์ถฉ๋ถ„ํžˆ ๊ธธ๊ฑฐ๋‚˜ ๋ณต์žกํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋Š” ๊ทธ๋ฆฌ ๊ธด ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค (๋Œ€๋ถ€๋ถ„ ์‚ฌ์šฉ์ž์˜ ํŒจ์Šค์›Œ๋“œ๋Š” ๊ธธ๊ฑฐ๋‚˜ ๋ณต์žกํ•˜์ง€ ์•Š์„ ๋ฟ ์•„๋‹ˆ๋ผ, ๋™์ผํ•œ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค).

๋‹จ๋ฐฉํ–ฅ ํ•ด์‰ฌ ํ•จ์ˆ˜์˜ ์ทจ์•ฝ์ ๋“ค์„ ๋ณด์•ˆํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ 2๊ฐ€์ง€ ๋ณด์™„์ ๋“ค์ด ์‚ฌ์šฉ๋œ๋‹ค

  • Salting
    • ์‹ค์ œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ด์™ธ์— ์ถ”๊ฐ€์ ์œผ๋กœ ๋žœ๋ค ๋ฐ์ดํ„ฐ๋ฅผ ๋”ํ•ด์„œ ํ•ด์‹œ๊ฐ’์„ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐฉ๋ฒ•.
  • Key Stretching
    • ๋‹จ๋ฐฉํ–ฅ ํ•ด์‰ฌ๊ฐ’์„ ๊ณ„์‚ฐ ํ•œ ํ›„ ๊ทธ ํ•ด์‰ฌ๊ฐ’์„ ๋˜ ํ•ด์‰ฌ ํ•˜๊ณ , ๋˜ ์ด๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
    • ์ตœ๊ทผ์—๋Š” ์ผ๋ฐ˜์ ์ธ ์žฅ๋น„๋กœ 1์ดˆ์— 50์–ต ๊ฐœ ์ด์ƒ์˜ ๋‹ค์ด์ œ์ŠคํŠธ๋ฅผ ๋น„๊ตํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ‚ค ์ŠคํŠธ๋ ˆ์นญ์„ ์ ์šฉํ•˜์—ฌ ๋™์ผํ•œ ์žฅ๋น„์—์„œ 1์ดˆ์— 5๋ฒˆ ์ •๋„๋งŒ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. GPU(Graphics Processing Unit)๋ฅผ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ ์ˆ˜๋ฐฑ์—์„œ ์ˆ˜์ฒœ ๋ฒˆ ์ •๋„๋งŒ ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋‹ค. 50์–ต ๋ฒˆ๊ณผ๋Š” ๋น„๊ตํ•  ์ˆ˜๋„ ์—†์„ ์ •๋„๋กœ ์ ์€ ํšŸ์ˆ˜๋‹ค. ์•ž์œผ๋กœ ์ปดํ“จํ„ฐ ์„ฑ๋Šฅ์ด ๋” ํ–ฅ์ƒ๋˜๋ฉด ๋ช‡ ๋ฒˆ์˜ ๋ฐ˜๋ณต์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ธ๊ฐ€

Authorization ์ ˆ์ฐจ
1. Authentication ์ ˆ์ฐจ๋ฅผ ํ†ตํ•ดย access token์„ ์ƒ์„ฑํ•œ๋‹ค.ย access token์—๋Š” ์œ ์ € ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค (์˜ˆ๋ฅผ ๋“ค์–ด user id).
2. ์œ ์ €๊ฐ€ request๋ฅผ ๋ณด๋‚ผ๋•Œย access token์„ ์ฒจ๋ถ€ํ•ด์„œ ๋ณด๋‚ธ๋‹ค.
3. ์„œ๋ฒ„์—์„œ๋Š” ์œ ์ €๊ฐ€ ๋ณด๋‚ธย access token์„ ๋ณตํ˜ธํ™” ํ•œ๋‹ค.
4. ๋ณตํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ด user id๋ฅผ ์–ป๋Š”๋‹ค.
5. user id๋ฅผ ์‚ฌ์šฉํ•ด์„œ database์—์„œ ํ•ด๋‹น ์œ ์ €์˜ ๊ถŒํ•œ(permission)์„ ํ™•์ธํ•˜๋‹ค.
6. ์œ ์ €๊ฐ€ ์ถฉ๋ถ„ํ•œ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ํ•ด๋‹น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
7. ์œ ์ €๊ฐ€ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฉด Unauthorized Response(401) ํ˜น์€ ๋‹ค๋ฅธ ์—๋Ÿฌ ์ฝ”๋“œ๋ฅผ ๋ณด๋‚ธ๋‹ค.

  • Authorization์€ ์œ ์ €๊ฐ€ ์š”์ฒญํ•˜๋Š” request๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์ด ์žˆ๋Š” ์œ ์ €์ธ๊ฐ€๋ฅผ ํ™•์ธํ•˜๋Š” ์ ˆ์ฐจ ์ด๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•ด๋‹น ์œ ์ €๋Š” ๊ณ ๊ฐ ์ •๋ณด๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋Š” ์žˆ์ง€๋งŒ ์ˆ˜์ • ํ•  ์ˆ˜๋Š” ์—†๋‹ค ๋“ฑ.
  • Authroization๋„ JWT๋ฅผ ํ†ตํ•ด์„œ ๊ตฌํ˜„ ๋  ์ˆ˜ ์žˆ๋‹ค.
    • access token์„ ํ†ตํ•ด ํ•ด๋‹น ์œ ์ € ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Œ์œผ๋กœ ํ•ด๋‹น ์œ ์ €๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ถŒํ•œ(permission)๋„ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋‹ค.
profile
์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์„ ๊ฐœ๋ฐœํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

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