인증, 보안 기초

DY_DEV·2023년 5월 11일
0

TIL

목록 보기
11/17

spring과정을 마치고 인증과 보안의 기초적인 개념을 배웠다.

HTTP

HTTPS(Hyper Text Transfer Protocol Secure Socket layer)

  • HTTPS는 HTTP 요청을 SSL 혹인 TLS라는 알고리즘을 이용해 HTTP 통신을 하는 과정에서 데이터를 암호화하여 전송하는 방법

특징

1. 암호화

비대칭키, 대칭키 방식을 혼용하여 사용한다.

  • 대칭키 방식: 양쪽이 공통의 비밀키를 공유하여 데이터를 암호화 및 복화화 하는 것
  • 비대칭키 방식: 공개키와 비밀키(개인키)를 가지고 상대가 나의 공개키로 암호화한 데이터를 개인이 가진 비밀키로 복호화하는 것.
  • 클라이언트와 서버가 데이터를 주고받을 때는 대칭키 방식을 사용한다. > 비대칭키가 더 복잡하기 때문.
  • HTTPS는 대칭키를 주고받을 때 비대칭키 방식으로 주고받는 것을 의미한다. = 비대칭키는 공개키로 암호화한 정보는 개인이 가진 비밀키로만 풀 수 있으므로 중간에 대칭키가 탈취되더라도 개인키가 없이는 이를 복호화할 수 없기 때문

2.인증서

  • 브라우저가 서버의 응답과 함께 전달된 인증서를 확인할 수 있다는 점 = 서버의 신원을 보증.
  • 여기서 보증할 수 있는 제3자를 Certificate Authority, CA라고 부른다. (엄격하게 공인된 기관들 의미.)
  • 이러한 CA들은 서버의 공개키와 정보를 CA의 비밀키로 암호화하여 인증서를 발급
  • 인증서 발급 과정
    1. 서버가 클라이언트에게 CA에서 발급받은 인증서 전달
    2. 클라이언트는 OS또는 브라우저에 미리 내장되어 있던 CA 리스트를 통해 브라우저에서 인증된 CA에서 발급받은 인증서인지 먼저 확인
    3. CA에서 발급한 인증서가 아니라면 경고창 띄움
    4. 인증서가 확인되었다면 브라우저에 제공된 해당 CA 기관의 공개키로 서버 인증서 복호화
    5. 클라이언트는 서버를 믿을만한 대상인지 신뢰할 수 있다.

HTTPS 사설 인증서 발급 및 서버 구현

자바가 지원하는 인증서 형식은 두 가지가 있다.

  1. PKCS12 (Public Key Cryptographic Standards #12) : 여러 인증서와 키를 포함할 수 있으며, 암호로 보호된 형식

    1. JKS (Java KeyStore) : PKCS12와 유사합니다. 독점 형식이며 Java 환경으로 제한됩니다.

해싱 (Hashing)

해싱은 암호화만 가능하다. 복호화는 불가능

  • 해시 함수를 사용해 암호화 진행.
    • 해시함수의 특징
      • 항상 같은 길이의 문자열 리턴
      • 서로 다른 문자열에 동일한 해시 함수를 사용하면 반드시 다른 결과값이 나온다
      • 동일한 문자열에 동일한 해시 함수를 사용하면 항상 같은 결과값이 나온다.

레인보우 테이블과 솔트(Salt)

  • 레인보우 테이블 : 항상 같은 결과값이 나온다는 특성을 이용해 해시 함수를 거치기 이전의 값을 알아낼 수 있도록 기록해 놓은 표
    • 유출시 해싱을 했더라도 해싱 이전의 값을 알아낼 수 있기에 보안상 위협이 될 수 있다.
  • 이때 활용하는 것이 솔트(Salt): 해싱 이전의 값에 임의의 값을 더해 데이터가 유출되더라도 해싱 이전의 값을 알아내기 더욱 어렵게 만드는 방법

Cookie

  • 어떤 웹사이트에 들어갔을 때, 서버가 일방적으로 클라이언트에 전달하는 작은 데이터
  • 서버가 웹 브라우저에 정보를 저장하고 불러올 수 있는 수단
  • 해당 도메인에 대해 쿠키가 존재하면, 웹 브라우저는 도메인에게 http 요청 시 쿠키를 함께 전달
  • 이용법
    • 삭제하지 않는다면 사라지지 않는다는 특성이 있다.
    • 장기간 저장이 필요한 옵션을 클라이언트에 저장하기 용이하다. = 사용자 선호, 테마
    • 로그인, 로그아웃을 위해 인증정보를 쿠키를 통해 저장
    • 회사가 필요한 마케팅 정보를 쿠키에 저장




Session

  • 인증에 따라 리소스의 접근 권한(Authorization) 이 달라집니다.
  • 세션은 사용자가 인증에 성공한 상태를 의미한다.
    • 서버는 일종의 저장소에 세션을 저장합니다. (그림에서 2번) 주로 in-memory, 또는 세션 스토어(redis 등과 같은 트랜잭션이 빠른 DB)에 저장합니다.

웹사이트에서 로그인을 유지하기 위한 수단으로 쿠키를 사용합니다. 쿠키에는 서버에서 발급한 세션 아이디를 저장합니다

0개의 댓글