2023. 3. 24. 18:15ใ๐พBackEnd/๐ฑ Spring
๊ธ์ ์์ฑํ๋ ์ด์
์ํธํ๋ ์๋น์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ํ์๋ก ๋ค์ด๊ฐ๋ ๋ถ๋ถ์ด๋ค. ์๋ฅผ ๋ค์ด ํ์๊ฐ์ ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํ๋ฅผ ํ์๋ก ์งํ์ ํ๊ฒ ๋๋๋ฐ ์ด๋ Bcrypt๋ฅผ ์ด์ฉํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค. ๋ง์ ์ด ๋ถ๋ถ์ ์ฝ๋๋ก ๊ตฌํํ๊ณ ์ ํํ๊ฒ ์ค๋ช ์ ํ ์ ์์ด ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌํ๋ค.
์ํธํ & ๋ณตํธํ
์ด ๋ถ๋ถ์ ๋ํด์๋ ์์ธํ๊ฒ ์ค๋ช ์ ํ๊ธฐ ๋ณด๋ค๋ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ๊ณ ์๋ฅผ ๋ค์ด ์ดํด๋ฅผ ํ๋๊ฒ ์ข๋ค๊ณ ์๊ฐ์ ํ์ต๋๋ค.
๊ทธ๋ฌ๋ฉด ์ํธํ๋ ๋ณตํธํ์ ๋ํด ์งง๊ฒ ์ค๋ช ์ ํ๊ฒ ์ต๋๋ค.
์ผ๋จ ์ํธํ๋ ํ๋ฌธ์ ์ํธ๋ก ๋ฐ๊พธ๋ ๋ฐฉ์์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋น๋ฐ๋ฒํธ๋ฅผ 123์ ์ ๋ ฅํ๋ฉด ์ํธํ ๊ณผ์ ์ ๊ฑฐ์ฒ ํ๋ฌธ์ ์ํธ๋ก ๋ฐ๊ฟ๋๋ค. ์ง๊ธ์ ๊ธฐ์กด์ ์ซ์์ 3์ ๋ํ๋ ๋ฐฉ์์ผ๋ก ์ํธํ๋ฅผ ์งํํ๋ฉด 456์ผ๋ก ๋น๋ฐ๋ฒํธ๊ฐ ์ค์ ์ด ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ฉด ๋ณตํธํ๋ ์ํธ๋ฅผ ํ๋ฌธ์ผ๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ์์ ๋๋ค.
๊ธฐ์กด์ ์ํธํ๋ ์ํธ 456์ -3์ ํตํด ๊ธฐ์กด์ ์์ฑํ 123์ผ๋ก ๋ณ๊ฒฝํ๋ ๋ถ๋ถ ์ ๋๋ค. ์ํธํ๋ฅผ ํตํด ๋ณ๊ฒฝ๋ ํ๋ฌธ์ ๋ณตํธํ๋ฅผ ํตํด ์ ์ ์์ง๋ง ์ํธํ์ ์ข ๋ฅ์๋ ๋ณตํธํ๊ฐ ๋ถ๊ฐ๋ฅํ ์ข ๋ฅ๊ฐ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๊ธฐ์กด์ ์ํธ 123์ +3 ํ๋ ๋ฐฉ์์ด ์๋ ๋ชจ๋ ๊ฐ์ ๋ํ๋ ์ํธํ๋ฅผ ํ๋ค๊ณ ๊ฐ์ ํ๋ฉด 123 -> 6์ผ๋ก ์ํธํ๊ฐ ๋ฉ๋๋ค. ์ด๋ฌํ ๋ณตํธํ๊ฐ ๋ถ๊ฐ๋ฅํ ์ํธํ์ ๋ํ์ ์ธ ๋ฐฉ์์ Hash๊ฐ ์์ต๋๋ค.
Hash๋ ์ด๋ ํ Data์ N-Bit๋ก ์ผ์ ํ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ก ๋ฐ๊พธ์ด ์ค๋ค. ๋ํ์ ์ผ๋ก Hash Table์ด ์์ต๋๋ค.
Hash Table์ ๊ธฐ๋ณธ์ ์ผ๋ก key๊ฐ(string)์ -> Integer(32bit)๋ก ๋ณ๊ฒฝ์ ํฉ๋๋ค. ์ด๋ ์ฑ๋ฅ์ผ๋ก๋ Hash ์ถฉ๋์ด ์ ์ด์ผ์ง ์ข์ต๋๋ค.
ํด์ ์ถฉ๋์ด๋
ํด์ ์ถฉ๋์ ์๋ก ๋ค๋ฅธ ํค๊ฐ์ ํด์๊ฐ์ด ๋๊ฐ์ ๋๋ฅผ ์๋ฏธ ํฉ๋๋ค.
์๋ฅผ ๋ค๋ฉด ๊ธฐ์กด์ ๋น๋ฐ๋ฒํธ 123์ด Hash Funtion()์ ํตํ์ฌ ์ํธํ๊ฐ ๋์ด 6์ด ๋์๊ณ 321์ Hash Funtion()์ ํตํด 6์ด ๋์๋ค๊ณ ๊ฐ์ ํ๋ฉด ๋๊ฐ์ ํ๋ฌธ ๋น๋ฐ๋ฒํธ๋ ๋ค๋ฅด์ง๋ง ํด์๊ฐ์ด ๊ฐ์ต๋๋ค. ์ด๋ ์ฐ๋ฆฌ๋ ํด์ ์ถฉ๋์ด ์ผ์ด๋ฌ๋ค๊ณ ๋ง์ ํฉ๋๋ค.
์ด๋ฌํ ํด์ ์ถฉ๋์ด ์ ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ข์ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ๋ชจ๋ ์ฌ๋๋ค์ ์ ์ ์์ต๋๋ค.
์ถฉ๋์ด ๋ฐ์์ ๋ํ ํด๊ฒฐ๋ฒ
1. Open Addressing ๋ฐฉ์
- ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๋ฏธ๋ฆฌ ์ ํ ๊ท์น์ ๋ฐ๋ผ ํ ์ด๋ธ์ ๋น์ด์๋ ๊ณต๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ฉฐ ์ถ๊ฐ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค.
- ์ด๋ open addressing์ 3๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
1-1. ์ ํ ์กฐ์ฌ๋ฒ
- ์ถฉ๋ํ ํด์๊ฐ์์ ์ผ์ ๊ฐ ๋งํผ ๊ฑด๋๋ฐ์ด ๋น์ด์๋ ๊ณต๊ฐ์ ์ ์ฅ(๋ํ๊ธฐ)
1-2. ์ด์ฐจ ์กฐ์ฌ๋ฒ
- ์ถฉ๋ํ ํด์๊ฐ์์ ์ผ์ ๊ฐ ๋งํผ ๊ฑด๋๋ฐ์ด ๋น์ด์๋ ๊ณต๊ฐ์ ์ ์ฅ(์ ๊ณฑ)
→ ์ด๋ ์ถฉ๋์ด ์ฌ๋ฌ๋ฒ ๋ฐ์ํ๋ฉด ์ฌ๋ฌ๋ฒ ๋ฐ์ด๋๊ฒ ๋๊ณ ๊ทธ๋ฌ๋ฉด ํด๋ฌ์คํฐ๋ง์ด ๋ฐ์ํ๋ค.
ํด๋ฌ์คํฐ๋ง์ ํน์ ์์ญ์ ๋ฐ์ดํฐ๊ฐ ๋ชฐ๋ฆฐ๋ค. → ํ๊ท ํ์ ์๊ฐ์ด O(N)์ผ๋ก ๋๋ค.
1-3. ์ค๋ณต ํด์
- ์ ํ๊ณผ ์ด์ฐจ ์กฐ์ฌ๋ฒ์์ ๋ฐ์ํ๋ ํด๋ฌ์คํฐ๋ง์ ํด๊ฒฐํ๊ธฐ ์ํด 2๊ฐ์ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๋ค.
2. Seperete Chaing๋ฐฉ์
- Linked List๋ฅผ ์ด์ฉํ์ฌ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๋ ธ๋๋ฅผ ์ถ๊ฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
ํด์ ์ถฉ๋์ด ์ ์ ์๊ณ ๋ฆฌ์ฆ(Bcrypt)
์ถฉ๋ ์ ํญ์ฑ
์ถฉ๋์ด๋ ๋ ๊ฐ์ ์๋ก ๋ค๋ฅธ ์ ๋ ฅ m1๊ณผ m2๊ฐ ์์ ๋ h(m1) = h(m2)๊ฐ ๋๋ ์ํฉ์ ๋งํ๋ค. ํด์ ํจ์์ ์ ๋ ฅ์ ๋ฌดํํ๋ฏ๋ก, ์ด์ ๊ฐ์ ์ถฉ๋์ ์์์ด ๋ง๋ค ์ ์๋ค. ๊ทธ๋์ ํด์ ํจ์์ ์๋ฒฝํ ์ถฉ๋ ํํผ๋ ์๋ค. ๋จ์ง ์ถฉ๋ ์ ํญ์ฑ์ด๋ผ๋ ์กฐ๊ฑด์ ์ถฉ๋์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ์์ง๋ง ์ถฉ๋ ์์ ์ฐพ์ ์ ์์ด์ผ ํ๋ค๋ ์๋ฏธ๋ค.
์ญ์ ์ ํญ์ฑ (๋ณตํธํ๋ฅผ ํ์ง ๋ชปํ๋ค.)
ํด์ ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ฏธ ์๊ณ ์๋ค. ๊ทธ๋ ์ด ๊ฒฐ๊ณผ๋ฅผ ๋ง๋๋ ์ ๋ ฅ๊ฐ m์ ์ฐพ๋ ๊ฒ์ด ์ผ๋ง๋ ์ด๋ ค์ด์ง๋ฅผ ๋ํ๋ธ๋ค.
์ 2 ์ญ์ ์ ํญ์ฑ
์ ๋ ฅ๊ฐ m์ ์ด๋ฏธ ์๊ณ ์๋ ์ํ์์ h(m) = x์ ๋ง์กฑํ๋ x๋ฅผ ์ผ๋ง๋ ์ฐพ๊ธฐ ์ฌ์ด์ง๋ฅผ ๋ํ๋ธ๋ค.
์ฆ. ๋ณตํธํ๋ฅผ ๊ทธ๋ฅ ํ์ง๋ ๋ชปํ์ง๋ง h(m)์ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ด๋ ๋น๊ต๊ฐ ๊ฐ๋ฅํ๋ค.
Bcrypt
Bcrypt๋ ์์ 3๊ฐ์ง ๊ด์ ์์ ์์ ํ ๋น๋ฐ๋ฒํธ ์ํธํ ๊ธฐ๋ฒ์ด๋ค.
๋จ๋ฐฉํฅ ํด์ ํจ์๋ก ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ฉด h(m)์ผ๋ก ํด์ ๊ฐ์ ๋ง๋ค์ด ์ํธํ๋ฅผ ํ๊ฒ ๋๋๋ฐ ์ด๋ ์๋์ ์ํธํ๋ฅผ ์ฐพ๊ธฐ๋ ๋ถ๊ฐ๋ฅํ๋ค. (์ญ์ ์ ํญ์ฑ)
๊ทธ๋ฆฌ๊ณ ์ถฉ๋ ์ ํญ์ฑ์ ๊ด์ ์ผ๋ก ์ดํด๋ณด๋ฉด Bcrypt๋ ์ํธ ๊ฐ์ ์ฌ์ฉํด์ ํด์ ๊ฐ์ ์์ฑํ๋ค. ์์ ์ค๋ช ํ ๋ฐฉ์์ฒ๋ผ ์๋ก ๋ค๋ฅธ ์ ๋ ฅ๊ฐ์ ๋ํด ์๋ณธ ๋น๋ฐ๋ฒํธ์ ๋ฌด์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค. ๊ทธ๋ ๊ฒ ๋๋ฉด ํญ์ ๋ค๋ฅธ ํด์ ๊ฐ์ด ์์ฑ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ 2 ์ญ์ ์ ํญ์ฑ์ ๋ํด ์ดํด๋ณด๋ฉด ํด์ ํจ์์์ ์ ๋ ฅ ๊ฐ์ด ๊ณ ์ ๋์ด ์์ ๋ ๊ทธ ํด์ ๊ฐ๊ณผ ๋์ผํ ํด์ ๊ฐ์ ๊ฐ์ง ๋ค๋ฅธ ์ ๋ ฅ ๊ฐ์ ์ฐพ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ๋ค. ์ ๋ ฅ ๊ฐ์ด ๊ณ ์ ๋์ด ์์ ๋ ํด๋น ์ ๋ ฅ ๊ฐ์ ํด์ ๊ฐ๊ณผ ๋์ผํ ํด์ ๊ฐ์ ๊ฐ์ง ๊ฐ์ ์ฐพ๊ธฐ๋ ์์ ๋ถ๊ฐ๋ฅ ํฉ๋๋ค.
bcrypt - Wikipedia
From Wikipedia, the free encyclopedia Password-based key derivation function bcrypt is a password-hashing function designed by Niels Provos and David Mazières, based on the Blowfish cipher and presented at USENIX in 1999.[1] Besides incorporating a salt t
en.wikipedia.org
์ํธํ ํด์ ํจ์ - ์ํค๋ฐฑ๊ณผ, ์ฐ๋ฆฌ ๋ชจ๋์ ๋ฐฑ๊ณผ์ฌ์
์ํค๋ฐฑ๊ณผ, ์ฐ๋ฆฌ ๋ชจ๋์ ๋ฐฑ๊ณผ์ฌ์ . ์ํธํ ํด์ ํจ์(cryptographic hash function)์ ํด์ ํจ์์ ์ผ์ข ์ผ๋ก, ํด์ ๊ฐ์ผ๋ก๋ถํฐ ์๋์ ์ ๋ ฅ๊ฐ๊ณผ์ ๊ด๊ณ๋ฅผ ์ฐพ๊ธฐ ์ด๋ ค์ด ์ฑ์ง์ ๊ฐ์ง๋ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํ๋ค. ์
ko.wikipedia.org
'๐พBackEnd > ๐ฑ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ Swagger ] Swagger UI๋ฅผ ํตํด API ๋ช ์ธ์ Postman ๊ณต์ (0) | 2023.04.21 |
---|---|
Mockito๋ ์๊ณ ํ ์คํธ ์ฝ๋ ์์ฑํ์ (0) | 2023.03.24 |
[ Object Mapper] Dozer์ ๋ํด์ ๋ค์ด๋ ๋ดค๋? (0) | 2023.03.14 |
[ RFC ] ๊ณต์ ๋ฌธ์๋ฅผ ํตํ์ฌ Delete์ Status๋ฅผ ์์๋ณด์ (0) | 2023.03.12 |
[ Jackson ] Jackson mock ํ ์คํธ ์ญ์ง๋ ฌํ ์ค๋ฅ (0) | 2023.03.11 |