๐ RSA ์ํธํ๋ก API ํต์ ๊ฐํํ๊ธฐ (Spring/Java/Redis)
์๋น์ค๋ฅผ ๊ฐ๋ฐํ ๋, ์ฑ๋ฅ์ ์ธ ๊ณ ๋ฏผ๋ ๋ถ๋ช ํ์ํ์ง๋ง API ํต์ ์ ์ด์ฉ๋๋ ๊ณ ๊ฐ์ ๋ฏผ๊ฐ์ ๋ณด๋ฅผ ์ด๋ป๊ฒ ํ๋ฉด ๋ ์ ์ง์ผ๋ผ ์ ์์์ง๋ ๋งค์ฐ ์ค์ํ ๊ณ ๋ฏผ ํฌ์ธํธ์ด๋ค.
๊ฐ๋ น, ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค๊ณ ๊ฐ์ ํด๋ณด์.
Client
์์๋ ์ ์ ์ id
์ password
๋ฅผ ๋ฐ์ ๋ค, payload
์ ๋ด์ ๋ก๊ทธ์ธ API ๋ฅผ ํธ์ถํ ๊ฒ์ด๋ค.
๋ณดํต ์๋์ ๊ฐ์ด ๋น๋ฐ๋ฒํธ์ ๊ฐ์ ๋ฏผ๊ฐ์ ๋ณด๋ค์ masking
์ฒ๋ฆฌ๋์ด ๋ณด์ฌ์ง๊ฒ ์ง๋ง
๋ณ๋์ ๋ณด์์ ์ธ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์ผ๋ฉด ๊ฐ๋ฐ์๋๊ตฌ์ payload
์์ rawdata
๊ฐ ์ ๋ถ ๋
ธ์ถ๋๋ค.
๋ฐ๋๋ก ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์ ๋ณด๋ฅผ ๋ด๋ ค์ค ๋, ๋ณด์์ฒ๋ฆฌ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์์ผ๋ฉด
response
ํญ์์ ๋
ธ์ถ๋๋ฉด ์๋ ์ ๋ณด๊ฐ ๊ทธ๋๋ก ๋
ธ์ถ๋ ์ ์๋ค.
์ด๋ฌํ ์ํฉ์ ์ธ์งํ๊ฒ ๋๋ค๋ฉด ๊ณ ๊ฐ์ ์ฐ๋ฆฌ ์๋น์ค๋ฅผ ๋ฏฟ๊ณ ์ฌ์ฉํ์ง ๋ชปํ ์ ์๊ณ ,
๊ณ์ ๋ฐฉ์น๋๋ค๋ฉด ๊ฐ๋ฅ์ฑ์ด ๋ฎ๋๋ผ๋ ์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์๋ ์๋ค.
์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น?
์ฌ์ค ํด๊ฒฐ๋ฒ์ ์ฝ๊ฒ ๋ ์ฌ๋ฆด ์ ์๋ค.
๋ฏผ๊ฐํ ์ ๋ณด๋ ์ 3์๊ฐ ์ ์ ์๋๋ก ์ํธํ ์ฒ๋ฆฌํ๋ฉด ๋๋ค.
๋ฌํํ๊ฒ ์๊ตฌ์ฌํญ์ ์ ๋ฆฌํด๋ณด์.
- ํด๋ผ์ด์ธํธ์์ ๋ฏผ๊ฐ ์ ๋ณด๋ฅผ ์๋ฒ๋ก ๋ณด๋ผ ๋์๋ ์ํธํํ๊ณ , ์๋ฒ์์ ๋ณตํธํํ ๋ค ๋ก์ง์ ์ํํ์.
์ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ ์ ์๋ค๋ฉด ๊ธฐ์กด์ ์ ๊ธฐํ ๋ฌธ์ ๋ ํด๊ฒฐ๋ ๊ฒ์ด๋ค.
๋ฌธ์ ๊ฐ ์ ์๋์์ผ๋, ์ด๋ค ๋๊ตฌ๋ก ์ด๋ฅผ ํด๊ฒฐํ ์ง ๊ณ ๋ฏผํด๋ณด์.
์ด๋ค ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ๊ฒ์ธ๊ฐ?
์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ํฌ๊ฒ ์๋์ ๊ฐ์ด ๋ถ๋ฅ๋๋ค.
1. ๋จ๋ฐฉํฅ ์ํธํ
2. ๋์นญํค ์ํธํ
3. ๋น๋์นญํค ์ํธํ
๋จ๋ฐฉํฅ ์ํธํ๋ plain text
๋ฅผ hashing
์ฒ๋ฆฌํ๋ฉฐ, ๋ณตํธํ๋ฅผ ํ ์ ์๊ธฐ ๋๋ฌธ์ password
์ํธํ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ ์ํ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ๋ ค๋ฉด ๋ณตํธํ๊ฐ ๊ฐ๋ฅํด์ผ ํ๋ฏ๋ก ๋จ๋ฐฉํฅ ์ํธํ
๋ ํ๋ณด์์ ์ ์ธํ๋ค.
๋ค์์ ๋์นญํค ์ํธํ, ๋น๋์นญํค ์ํธํ์ด๋ค.
๋ฌํํ๊ฒ ์ค๋ช ํ๋ฉด,
- ๋์นญํค ์ํธํ๋ ์ํธํ ํ ๋ ์ฌ์ฉํ key ๋ก๋ง ๋ณตํธํ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ํ์ ์ผ๋ก AES ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ค.
- ๋น๋์นญํค ์ํธํ๋ ์ํธํ ํ ๋ ์ฌ์ฉํ key ์ ๋ณตํธํํ ๋ ์ฌ์ฉ๊ฐ๋ฅํ key ๋ฅผ ์๋ก ๋ค๋ฅด๊ฒ ํ ์ ์๋ค.
๋ํ์ ์ผ๋ก RSA ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ด ์๋ค.
๋์นญํค ์ํธํ์ ๋น๋์นญํค ์ํธํ๋ ๋๋ค ๋ณตํธํ๊ฐ ๊ฐ๋ฅํ๋ค.
๋ ์ค ์ด๋ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ ๊ฒ ์ข์๊น?
๊ตฌํ ๋์ด๋๋ ๋์นญํค ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ธ AES ๊ฐ ๋น๋์นญํค ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ธ RSA ๋ณด๋ค ํจ์ฌ ์ฉ์ดํ๋ค.
- ( ์ฌ์ง์ด ํ๋ก์ ํธ ๋ด์ AES Utility ํด๋์ค๊ฐ ๊ตฌํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฅ ๊ฐ์ ธ๋ค๊ฐ ์ฌ์ฉํ๋ฉด ๋๋ ์ํฉ์ด์๋ค. )
๊ทธ๋ผ์๋ RSA ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ์๋๋ฐ, ๊ทธ ์ด์ ๋ ์๋์ ๊ฐ๋ค.
1. ๋์นญํค ์ํธํ(AES)๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด key ๋ฅผ ๊ณต์ ํด์ผ ํ๋ค. Server side ์์๋ db ์ฒ๋ฆฌ๋ฅผ ํด์ ๊ฐ์ง๊ณ ์์ผ๋ฉด ๋์ง๋ง Client side ์์๋ key ๋ฅผ ์์ ํ๊ฒ ์ ์ฅํ ๊ณณ์ด ๋ง๋
์น ์๋ค.
2. ๋น๋์นญํค ์ํธํ(RSA)๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ key ๋ฅผ ๊ณต์ ํ ํ์๊ฐ ์์ด์ง๋ค. ์ํธํ๋ ๋๊ตฌ๋ ํ ์ ์์ง๋ง, ๋ณตํธํ๋ ๋ง์๋๋ก ํ์ง ๋ชปํ๊ฒ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
์ด๊ธฐ์ ์ ์ํ ์๊ตฌ์ฌํญ์ RSA ์ํธํ๋ก ํด๊ฒฐํ ์ ์๋์ง ํ์ธํด๋ณด์.
- ํด๋ผ์ด์ธํธ์์ ๋ฏผ๊ฐ ์ ๋ณด๋ฅผ ์๋ฒ๋ก ๋ณด๋ผ ๋์๋ ์ํธํํ๊ณ , ์๋ฒ์์ ๋ณตํธํํ ๋ค ๋ก์ง์ ์ํํ์.
- ํด๋ผ์ด์ธํธ์์ public key ๋ก ์ํธํํ์ฌ ์๋ฒ์ ์์ฒญํ๋ฉด, ์๋ฒ์์๋ ํด๋น public key ์ ๋ํ private key ๋ฅผ ์๊ณ ์์ผ๋ฉด, ๊ฐ๋ฅํ๋ค.
์ฆ, ํด๋ผ์ด์ธํธ์์ public key ๋ก ์ํธํํ์ฌ ์๋ฒ์ ์์ฒญํ๋ฉด, ์๋ฒ์์๋ ํด๋น public key ์ ๋ํ private key ๋ฅผ ์๊ณ ์์ผ๋ฉด
๋๋ค.
๊ทธ๋ผ ์ด๋ป๊ฒ ํ ์ ์์๊น?
๊ธฐ๋ณธ์ ์ผ๋ก RSA keypair
๋ ์์ ํ๊ฒ ์๋ฒ์์ ๊ด๋ฆฌํ๋ ๊ฒ ์ข์๋ณด์ธ๋ค.
๊ทธ๋ผ ์๋์ ๊ฐ์ด ํ๋ฉด ์ด๋จ๊น?
- ํด๋ผ์ด์ธํธ์์ ์ํธํ ํ ์ผ์ด ์๊ธด๋ค๋ฉด ์๋ฒ๋ก
RSA public key
๋ฅผ ํ๋ ์์ฒญํ๋ค. - ์๋ฒ์์
RSA Keypair
๋ฅผ ํ๋ ์์ฑํ๊ณ ,public key
๋ฅผ ๋ด๋ ค์ค๋ค. - ํด๋ผ์ด์ธํธ์์
public key
๋ก ์ํธํ๋ฅผ ์ํํ ๋ค,public key
์ ํจ๊ป ์ํธ๋ฌธ์ ์๋ฒ๋ก ๋ณด๋ธ๋ค.- ์ด ๊ณผ์ ์์ ์ 3 ์๊ฐ ํ์ทจํ๋๋ผ๋
public key
์ ๋งค์นญ๋๋private key
๋ฅผ ๋ชจ๋ฅด๋ ์์ ํ๋ค.
- ์ด ๊ณผ์ ์์ ์ 3 ์๊ฐ ํ์ทจํ๋๋ผ๋
- ์๋ฒ์์๋
public key
์ ๋งค์นญ๋๋private key
๋ฅผ ์ฐพ์์ ๋ณตํธํํ ๋ค ๋ก์ง์ ์ํํ๋ค์ ํด๋นkey pair
๋ฅผ ์ ๊ฑฐํ๋ค.
์ด๋ฅผ ์ํด์ ํด๋ผ์ด์ธํธ๊ฐ ์ํธํ ํ public key
์ ๋ํ private key
๋ฅผ ์กฐํํ ์ ์์ด์ผ ํ๋ค.
rdb ์ ์ ์ฅํด๋ ์๋ ์๊ฒ ์ง๋ง, ์ธ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ผ๋ก ๋ ๋น ๋ฅธ I/O ๋ฅผ ์ ๊ณตํ๋ฉฐ
ttl ์ ์ง์ ํ ์๋ ์๊ณ public key ์ ๋ํ private key ๋ฅผ ์ฐพ๋ ์ฐ์ฐ์ด
์์ฃผ ๋ฐ์ํ ๊ฒ์ผ๋ก ์์๋๋๋ฐ,
key-value ํ์์ data storage ์ธ redis
๊ฐ ๋ ์ ํฉํ๋ค๊ณ ํ๋จํ์๋ค.
ํ์ง๋ง, ํ๋๋ง ๋ ๊ณ ๋ คํด๋ณด์.
์ ๋ฐฉ๋ฒ๋๋ก๋ฉด ์์ฒญ๋ง๋ค ์๋ฒ์์ RSA Keypair
๋ฅผ ์์ฑํด์ผ ํ๋ค.
๊ทธ๋ ๊ฒ ํด๋ ๊ด์ฐฎ์ ๋งํผ RSA Keypair ์์ฑ ์ฐ์ฐ์ด ๊ฐ๋ฒผ์ด ์ง
์ฐพ์๋ณธ ๊ฒฐ๊ณผ,
Finding two large prime numbers
: O((log n)^2)
Computing the modulus
: O(log^2 n)
Computing modular inverses
: O(log^3 n)
Total
: O((log n)^3)
๋๋ต O((log n)^3)
์ ๋์ธ ๊ฒ ๊ฐ๋ค. ( n = 1024, 2048, โฆ )
๊ตณ์ด ๋งค ์์ฒญ๋ง๋ค RSA Keypair
๋ฅผ ์๋ก ์์ฑํด๋๋ก ํด์ผํ ๊น?
Thread pool
์ฒ๋ผ RSA Keypair
๋ฅผ ์ฌ๋ฌ๊ฐ ์๋ฒ์์ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ณ
ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ํ๋ ๋๋คํ๊ฒ pick
ํด์ ๋ด๋ ค์ฃผ๋ ๋ฐฉ๋ฒ์ ์ด๋จ๊น?
๊ทธ๋ฌ๋ฉด RSA Keypair ๋ฅผ ๋งค๋ฒ ์๋กญ๊ฒ ๋ง๋๋ ๋ฐ์ ๋ฐ์ํ๋ cost ๋ฅผ ์ ๊ฑฐํ ์ ์๋ค.
- ํด๋ผ์ด์ธํธ์์ ์ํธํ ํ ์ผ์ด ์๊ธด๋ค๋ฉด ์๋ฒ๋ก
RSA public key
๋ฅผ ํ๋ ์์ฒญํ๋ค. - ์๋ฒ์์๋ ๋ฏธ๋ฆฌ ์์ฑํด๋
RSA Keypair
์ค ํ๋๋ฅผ ๊ณจ๋ผ์,public key
๋ฅผ ๋ด๋ ค์ค๋ค. - ํด๋ผ์ด์ธํธ์์
public key
๋ก ์ํธํ๋ฅผ ์ํํ ๋ค,public key
์ ํจ๊ป ์ํธ๋ฌธ์ ์๋ฒ๋ก ๋ณด๋ธ๋ค.- ์ด ๊ณผ์ ์์ ์ 3 ์๊ฐ ํ์ทจํ๋๋ผ๋
public key
์ ๋งค์นญ๋๋private key
๋ฅผ ๋ชจ๋ฅด๋ ์์ ํ๋ค.
- ์ด ๊ณผ์ ์์ ์ 3 ์๊ฐ ํ์ทจํ๋๋ผ๋
- ์๋ฒ์์๋
public key
์ ๋งค์นญ๋๋private key
๋ฅผ ์ฐพ์์ ๋ณตํธํํ์ฌ ์ดํ ๋ก์ง์ ์ํํ๋ค.
ํ์ง๋ง ๋.. ํ๋ ๋ ๊ณ ๋ คํด์ผํ ์ ์ด ์๋ค.
์ ๋ก์ง์ Redis ์ ์๋นํ ์์กด๋๋ฅผ ๊ฐ์ง๋ค.
๋ง์ฝ Redis ์๋ฒ๊ฐ ๋ค์ด๋๋ค๋ฉด?
์ด์ ๋ํ ๊ณ ๋ ค๊ฐ ์ ํ ๋์ด ์์ง ์์ผ๋ฏ๋ก, Redis ๋ฅผ ์ฌ์ฉํ๋ API ์์ ๋ชจ๋ ์ฅ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ค.
Redis ์๋ฒ๊ฐ ๋ค์ด๋๋ ์ํฉ์ด ํ์น ์๋ค๊ณ ๋ ํ์ง๋ง ๊ฐ๋ฅ์ฑ์ด ์๋ ๊ฒ์ ์๋๋ค.
์ด๋ฌํ ์ํฉ๊น์ง ์ปค๋ฒํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
Redis ์๋ฒ๊ฐ ์ ์์ ์ด์ง ์์ ๊ฒฝ์ฐ์ ๋ํด์๋ ์ ๋์ํ ์ ์๋๋ก
๋ณ๋์ fallback ์ ํ๋์ด์ผ ํ๋ค.
์ด๋ฅผ Circuit breaker
์ด๋ผ๊ณ ํ๋ฉฐ, ํด๋น ๋ด์ฉ์ ๋ณ๋์ ํฌ์คํ
์์ ๋ค๋ฃจ๋ ค๊ณ ํ๋ค.
References
- https://www.baeldung.com/java-rsa
- https://www.geeksforgeeks.org/how-to-generate-large-prime-numbers-for-rsa-algorithm/
- https://dev.gmarket.com/47
Leave a comment