Security

๋Œ€์นญํ˜• / ๋น„ ๋Œ€์นญํ˜• ์•Œํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋Œ€์นญํ˜• ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•”ํ˜ธํ™”์™€ ๋ณตํ˜ธํ™”๊ฐ€ ๊ฐ™์€ KEY ๊ฐ’ ์œผ๋กœ ์ด๋ฃจ์–ด ์ง„๋‹ค.

๋Œ€์นญํ˜• ์•”ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋น„ ๋Œ€์นญํ˜• ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•”ํ˜ธํ™”์™€ ๋ณตํ˜ธํ™”๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ KEY ๊ฐ’ ์œผ๋กœ ์ด๋ฃจ์–ด ์ง„๋‹ค.

์ด๋Š” ๋Œ€๋ถ€๋ถ„ ๊ณต๊ฐœํ‚ค (Public Key) ์™€ ๊ฐœ์ธํ‚ค (Private Key) ๋ฅผ ์ƒ์„ฑ ํ•˜์—ฌ ์šด์˜ํ•˜๋Š”๋ฐ ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง„๋‹ค.

A์˜ ๊ณต๊ฐœํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ๋Š” A์˜ ๊ฐœ์ธํ‚ค๋กœ๋งŒ ๋ณตํ˜ธํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
A์˜ ๊ฐœ์ธํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ์•”ํ˜ธํ™”๋œ ๋ฐ์ดํ„ฐ๋Š” A์˜ ๊ณต๊ฐœํ‚ค๋กœ๋งŒ ๋ณตํ˜ธํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

๋น„๋Œ€์นญํ˜• ์•”ํ˜ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋Œ€์นญํ˜• ๋น„๋Œ€์นญํ˜•
ํŠน์ง• ํ•จํ˜ธํ™” ๋ณตํ˜ธํ™”๊ฐ€ ๋™์ผํ•œ ํ‚ค ์•”ํ˜ธํ™” ๋ฐ ๋ณตํ˜ธํ™”๊ฐ€ ๋‹ค๋ฅธ ์„œ๋กœ๋‹ค๋ฅธ ํ‚ค
์žฅ์  ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค ์•ˆ์ •์„ฑ์ด ๋†’๋‹ค
๋‹จ์  ์•”ํ˜ธํ‚ค๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์—์„œ ๋…ธ์ถœ ์šฐ๋ ค๊ฐ€ ์žˆ๋‹ค ๋Œ€์นญํ‚ค์— ๋น„ํ•ด ๋Š๋ฆฌ๋‹ค
์˜ˆ DES, AES RSA

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 ์—๋Ÿฌ์™€ ํ•จ๊ป˜ ํŒŒ์ผ์ด ๊นจ์ก‹๋‹ค๊ณ  ํŒ๋‹จ๋œ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

https://12bme.tistory.com/395

OAuth 2.0

์›น ํ˜น์€ ์•ฑ ์„œ๋น„์Šค์—์„œ ์ œํ•œ์ ์œผ๋กœ ๊ถŒํ•œ์„ ์š”์ฒญ ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค๋ฅผ ๋ฐœ๊ธ‰ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

OAuth 2.0

์›๋ฆฌ

  • ํด๋ผ์ด์–ธํŠธ (Client)
  • ์™ธ๋ถ€ ์‚ฌ์šฉ์ž ์ •๋ณด (Resource Owner)
  • ์ธ์ฆ ์„œ๋ฒ„ (Authorization Server)
  • ๋ฆฌ์†Œ์Šค ์„œ๋ฒ„ (Resource API Server)

์ธ์ฆ ์ ˆ์ฐจ

  1. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํŠน์ • ์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•˜๋ ค ํ• ๋•Œ Google ์•„์ด๋””๋กœ ๊ฐ€์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ •๋ณด๋ฅผ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค.
  2. Google ๋กœ๊ทธ์ธ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด Google ๋กœ๊ทธ์ธ ์ฐฝ์ด ๋‚˜์˜ค๋ฉด ๋กœ๊ทธ์ธ์„ ํ•ฉ๋‹ˆ๋‹ค. (A)
  3. ๋กœ๊ทธ์ธ์ด ์™„๋ฃŒ๋˜๋ฉด ์Šน์ธ๋ฐ›์€ ๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜์‹ ๋ฉ๋‹ˆ๋‹ค. (B)
  4. ํ•ด๋‹น ๋กœ๊ทธ์ธ ์ •๋ณด๋กœ ์‚ฌ์ดํŠธ๋ฅผ ์ด์šฉํ•  ๊ฒƒ์ธ์ง€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฌป์Šต๋‹ˆ๋‹ค.
  5. ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ—ˆ์šฉ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ํ•ด๋‹น ์‚ฌ์ดํŠธ์—์„œ ์ด์šฉ๊ฐ€๋Šฅํ•œ AccessToken ์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (C) (D)
  6. ์ด AccessToken ์„ ๊ฐ€์ง€๊ณ  ํ•ด๋‹น ์‚ฌ์ดํŠธ์˜ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด์„œ expiration_date ๊นŒ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (E) (F)

OAuth 1.0 ๊ณผ์˜ ์ฐจ์ด์ 

OAuth1 ์˜ ์ธ์ฆ ํ”Œ๋กœ์šฐ์™€ ์ „๋ฐ˜์ ์ธ ๋ชฉ์ ์€ ๊ณต์œ ํ•˜๋ฉด์„œ ์ƒˆ๋กœ ์„ค๊ณ„๋œ ๋ฐฉ์‹์ด๋‹ค.

์›น / ์•ฑ / ๋ฐ์Šคํฌํ†ฑ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ฑ์˜ ์ธ์ฆ๋ฐฉ์‹์„ ๊ฐ•ํ™”ํ•˜๊ณ  ๊ฐœ๋ฐœ์„ ๊ฐ„์†Œํ™”ํ•˜๋„๋ก ๊ฐœ๋ฐœ๋˜์—ˆ๋‹ค.