Security
๋์นญํ / ๋น ๋์นญํ ์ํธ ์๊ณ ๋ฆฌ์ฆ
๋์นญํ ์๊ณ ๋ฆฌ์ฆ์ ์ํธํ์ ๋ณตํธํ๊ฐ ๊ฐ์ KEY ๊ฐ ์ผ๋ก ์ด๋ฃจ์ด ์ง๋ค.
๋น ๋์นญํ ์๊ณ ๋ฆฌ์ฆ์ ์ํธํ์ ๋ณตํธํ๊ฐ ์๋ก ๋ค๋ฅธ KEY ๊ฐ ์ผ๋ก ์ด๋ฃจ์ด ์ง๋ค.
์ด๋ ๋๋ถ๋ถ ๊ณต๊ฐํค (Public Key) ์ ๊ฐ์ธํค (Private Key) ๋ฅผ ์์ฑ ํ์ฌ ์ด์ํ๋๋ฐ ์ด๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๋ค.
A์ ๊ณต๊ฐํค๋ฅผ ์ด์ฉํ์ฌ ์ํธํ๋ ๋ฐ์ดํฐ๋ A์ ๊ฐ์ธํค๋ก๋ง ๋ณตํธํ๊ฐ ๊ฐ๋ฅํ๋ค.
A์ ๊ฐ์ธํค๋ฅผ ์ด์ฉํ์ฌ ์ํธํ๋ ๋ฐ์ดํฐ๋ A์ ๊ณต๊ฐํค๋ก๋ง ๋ณตํธํ๊ฐ ๊ฐ๋ฅํ๋ค.
๋์นญํ | ๋น๋์นญํ | |
---|---|---|
ํน์ง | ํจํธํ ๋ณตํธํ๊ฐ ๋์ผํ ํค | ์ํธํ ๋ฐ ๋ณตํธํ๊ฐ ๋ค๋ฅธ ์๋ก๋ค๋ฅธ ํค |
์ฅ์ | ์๋๊ฐ ๋น ๋ฅด๋ค | ์์ ์ฑ์ด ๋๋ค |
๋จ์ | ์ํธํค๋ฅผ ์ ๋ฌํ๋ ๊ณผ์ ์์ ๋ ธ์ถ ์ฐ๋ ค๊ฐ ์๋ค | ๋์นญํค์ ๋นํด ๋๋ฆฌ๋ค |
์ | DES, AES | RSA |
์ฐธ๊ณ ์๋ฃ
https://sungjk.github.io/2016/09/30/Security.html
https://javaplant.tistory.com/26
http://rigvedawiki.net/w/์ํธ ์๊ณ ๋ฆฌ์ฆ
https://o-m-i.tistory.com/209
https://jusungpark.tistory.com/34
SHA-256
ํด์ฑ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ์ ์ธ ์์ธ SHA-256 ์ ํด์ ๊ฐ์ผ๋ก ์ํธํ์ฌ ๋ณตํธํ๊ฐ ๋ถ๊ฐ๋ฅ ํ๋ค.
Example
import java.security.MessageDigest;
public class SHA256Password {
public void LockPassword(String password) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hash = digest.digest(password.getBytes("UTF-8"));
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < hash.length; i++) {
String hex = Integer.toHexString(0xff & hash[i]);
if (hex.length() == 1)
hexString.append('0');
hexString.append(hex);
}
System.out.println(hexString.toString());
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}
๋ณด์์ ์ธ ๊ด์
ํด์๊ฐ์ ๋ณตํธํ ํ ์ ์๋๋ฐ ์ด๋ ํน์ ๋ฌธ์์ด์ ์ํธํํ๋ฉด ๋์ค๋ ๊ฒฐ๊ณผ๊ฐ์ด ๋ค๋ฅธ ๋ฌธ์์ด์ ํด์ฑํด์ ๋์ฌ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํ๊ธธ๋ -> ํ
ํ์ฑ๋ -> ํ
์์ ๊ฐ์ ์๋ฆฌ๋ก ๊ฒฐ๊ณผ๊ฐ์ ํฌ๊ธฐ (์น์ญ) ๋ ๊ณ ์ ๋์ด ์๊ณ ์
๋ ฅ๊ฐ (์ ์์ญ) ์ ์๋ก ๋ค๋ฅผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
2ยฒ
๊ณผ -2ยฒ
์ ๊ฒฐ๊ณผ ๊ฐ์ด ์๋ก ๊ฐ์ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง์ธ ์๋ฆฌ๋ก ๊ฒฐ๊ณผ๊ฐ 4 ๋ฅผ ๊ธฐ์ค์ผ๋ก ์๋ณธ ๋ฐ์ดํฐ๋ฅผ ํน์ ์ง์์๊ฐ ์๋ค.
ํ์ง๋ง ๋ํ์ ์ธ ๋น๋ฐ๋ฒํธ ํ
์ด๋ธ์ ๊ตฌ๋นํ์ฌ ํด๋น ๊ฒฐ๊ณผ ํด์๊ฐ์ ๋์กฐํ์ฌ ์ผ์ผ์ด ์ฐพ์๋ณด๋ ๊ฒฝ์ฐ๊ฐ ์๋ค (sha ํจ์ ํ
์ด๋ธ)
ํด์๊ฐ์ ๋ณด์์ฑ์ ๋์ด๊ธฐ ์ํ์ฌ ๊ฐ์ ์ํธํ ํ ๋ Salt ๊ฐ์ ๋ฃ์ด ํด์ฑ์ ํจ์ผ๋ก์จ ๊ณต๊ฒฉ์ ํจ์จ์ ํฌ๊ฒ ์ ํ ์ํค๋ ๋ฐฉ๋ฒ๋ ์ ํจํ๋ค.
CRC
์ํ ์ค๋ณต ๊ณ์ฐ (Cycle Redundancy Check) ์ด๋ผ๊ณ ํ๋ฉฐ ํ์ผ (๋ฐ์ดํฐ) ์ ์์์ ํ์ธํ๋ ๋ฐฉ์์ด๋ค.
์ต๊ทผ ์ฌ์ฉํ๋ CRC ๋ฐฉ์์ ๋ชจ๋ CRC-32 ์ด๋ฉฐ HEX ๊ฐ์ ์ด์ฉํ์ฌ 8๊ธ์๋ก ํ์ํ๋ค.
์ด๋ 00000000 ~ FFFFFFFF ๊น์ง 2^32 (์ฝ 43์ต) ๊ฐ์ ๊ฒฝ์ฐ์ ์๊ฐ ์์ง๋ง ํ๋ฅ ์ ์ผ๋ก ์ค๋ณต ๊ฐ๋ฅํ๋ค.
๋ฐ๋ผ์ MD5(Message-Digest Algorithm 5) ์ ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋๋ฉฐ ์ด๋ 32๋นํธ๊ฐ ์๋ 128๋นํธ์ด๋ค.
ZIP ์ด๋ RAR ๊ฐ์ ํ์ผ ์์ถ ํ๋ก๊ทธ๋จ์ด ์์ถํ ๋ CRC ๊ฐ์ ํจ๊ป ์ ์ฅํ๋๋ฐ ์์ถํ์ผ์ด ์์๋์๋์ง ํน์ ๋ณ์กฐ๋์๋์ง๋ฅผ ํ์ธํ๋ฉฐ ๋ง์ฝ CRC-32 ๊ฐ์ด ๋ถ์ผ์น ํ๋ฉด CRC ์๋ฌ์ ํจ๊ป ํ์ผ์ด ๊นจ์ก๋ค๊ณ ํ๋จ๋๋ค.
์ฐธ๊ณ ์๋ฃ
OAuth 2.0
์น ํน์ ์ฑ ์๋น์ค์์ ์ ํ์ ์ผ๋ก ๊ถํ์ ์์ฒญ ํ์ฌ ์ฌ์ฉํ ์ ์๋ ํค๋ฅผ ๋ฐ๊ธ ํด์ฃผ๋ ๊ฒ์ด๋ค.
์๋ฆฌ
- ํด๋ผ์ด์ธํธ (Client)
- ์ธ๋ถ ์ฌ์ฉ์ ์ ๋ณด (Resource Owner)
- ์ธ์ฆ ์๋ฒ (Authorization Server)
- ๋ฆฌ์์ค ์๋ฒ (Resource API Server)
์ธ์ฆ ์ ์ฐจ
- ํด๋ผ์ด์ธํธ๊ฐ ํน์ ์ฌ์ดํธ๋ฅผ ์ด์ฉํ๋ ค ํ ๋ Google ์์ด๋๋ก ๊ฐ์ ํ ์ ์๋ค๋ ์ ๋ณด๋ฅผ ๋ฐ๊ฒฌํฉ๋๋ค.
- Google ๋ก๊ทธ์ธ ๋ฒํผ์ ๋๋ฅด๋ฉด Google ๋ก๊ทธ์ธ ์ฐฝ์ด ๋์ค๋ฉด ๋ก๊ทธ์ธ์ ํฉ๋๋ค.
(A)
- ๋ก๊ทธ์ธ์ด ์๋ฃ๋๋ฉด ์น์ธ๋ฐ์ ๋ก๊ทธ์ธ ์ ๋ณด๊ฐ ์ ์์ ์ผ๋ก ์์ ๋ฉ๋๋ค.
(B)
- ํด๋น ๋ก๊ทธ์ธ ์ ๋ณด๋ก ์ฌ์ดํธ๋ฅผ ์ด์ฉํ ๊ฒ์ธ์ง ํด๋ผ์ด์ธํธ์๊ฒ ๋ฌป์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ํ์ฉ์ ํ๊ฒ ๋๋ฉด ํด๋น ์ฌ์ดํธ์์ ์ด์ฉ๊ฐ๋ฅํ
AccessToken
์ ๋ฐ๊ฒ ๋ฉ๋๋ค.(C)
(D)
- ์ด
AccessToken
์ ๊ฐ์ง๊ณ ํด๋น ์ฌ์ดํธ์ ์๋น์ค๋ฅผ ์ด์ฉํ๋ฉด์ expiration_date ๊น์ง ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.(E)
(F)
OAuth 1.0 ๊ณผ์ ์ฐจ์ด์
OAuth1 ์ ์ธ์ฆ ํ๋ก์ฐ์ ์ ๋ฐ์ ์ธ ๋ชฉ์ ์ ๊ณต์ ํ๋ฉด์ ์๋ก ์ค๊ณ๋ ๋ฐฉ์์ด๋ค.
์น / ์ฑ / ๋ฐ์คํฌํฑ ์ดํ๋ฆฌ์ผ์ด์ ๋ฑ์ ์ธ์ฆ๋ฐฉ์์ ๊ฐํํ๊ณ ๊ฐ๋ฐ์ ๊ฐ์ํํ๋๋ก ๊ฐ๋ฐ๋์๋ค.
โ Dictionary Sorting โ