์ธ์ฆ
์ธ์ฆ(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)๋ ํ์ธ ํ ์ ์๋ค.