Section 4 [인증 / 보안] 기초 (1)

챠오·2023년 1월 12일
0

코드스테이츠

목록 보기
1/7
post-thumbnail

학습목표

  • 암호화와 hashing, salting 등의 개념을 이해할 수 있다.
  • HTTP와 HTTPS의 차이점을 이해할 수 있다.
  • 권한 부여(Authorization)와 인증(Authentication)에 대해 이해할 수 있다.
  • 쿠키의 작동 원리를 이해할 수 있다.
  • 클라이언트, 서버, 데이터베이스의 전체 동작을 이해할 수 있다.
  • 서비스의 보안과 관련된 방법을 알아보고 원리 및 장점 및 단점을 이해할 수 있다.

HTTPS

HTTPS(Hypertext Transfer Protocol Secure) 는 HTTP over SSL(TLS), HTTP over Secure라고 부르기도 한다.

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

HTTPS는 다음을 목적으로 사용한다.

암호화

첫 번째는 제 3자가 서버와 클라이언트가 주고받는 정보를 탈취할 수 없도록 하는 것이다.

이를 위해 서버와 클라이언트는 서로가 합의한 방법으로 데이터를 암호화하여 주고받는다.

따라서 중간에 제 3자에게 데이터가 탈취되더라도 그 내용을 알아볼 수 없다.

기존에 배웠던 HTTP 는 요청 및 응답이 탈취된다면 전달되는 데이터의 내용을 제 3자가 그대로 확인할 수 있다는 취약점이 있었다.

하지만 데이터를 암호화하여 전송하는 HTTPS를 사용한다면 비밀번호와 같은 중요한 데이터가 유출될 가능성이 HTTP보다 현저히 적어진다는 장점이 있다.

인증서

HTTPS의 또 다른 특징 중 하나는 브라우저가 서버의 응답과 함께 전달된 인증서를 확인할 수 있다는 점이다.

이러한 인증서는 서버의 신원을 보증해준다.

예를 들어 우리가 접속한 Naver가 해커가 정교하게 따라 한 가짜 Naver가 아님을 보장해주는 역할을 해주는 것이다.

이때 이를 보증할 수 있는 제 3자를 Certificate Authority, CA라고 부른다.

CA는 인증서를 발급해주는 엄격하게 공인된 기관들을 말한다. 이러한 CA들은 서버의 공개키와 정보를 CA의 비밀키로 암호화하여 인증서를 발급한다.


Hashing

어떠한 문자열에 '임의의 연산'을 적용하여 다른 문자열로 변환하는 것을 말한다.

해시 값에는 3가지 조건이 있다.

  1. 모든 값에 대해 해시 값을 계산 하는데에 오랜 시간이 걸리지 않아야 한다.

해시값을 해독(decoding)할 때는 많은 시간이 걸려야하지만 반대로 해시값을 만드는 데엔 오래걸리지 않아야 한다.

예를 들어 해시값을 만드는데 20초가 소요된다면, 로그인 할 때 마다 유저는 최소 20초 이상 기다리게 될 것이다.

  1. 최대한 해시 값을 피해야 하며, 모든 값은 고유한 해시 값을 가진다.

  2. 아주 작은 단위의 값일지라도 완전히 다른 각각의 해시 값을 가져야 한다.

예를 들어 "backend"와 "Backend"는 맨 앞의 문자가 대문자로 바뀌었을 뿐인데 완전히 다른 해시값을 가진다. 부분이 변경되어도 해시값으로는 추측을 할 수 없도록 완전히 다른 값을 반환해야 한다.


Salt

Salt는 한국어로 '소금'을 뜻한다. 음식에 소금을 첨가해 더 맛있게 만들듯, 암호화에서의 Salt는 암호화 해야하는 값에 어떤 '별도의 값'을 추가하여 결과를 변형 시키는 역할을 한다.

암호화만 해놓았을 때, 얼핏보면 안전해보일 수 있지만 특정 알고리즘을 통한 해시는 결과가 항상 같기 때문에 해시된 값과 원본 값을 대조한 테이블이 있다면 쉽게 원본 비밀번호를 알아내는 경우도 있다.

예를 들어 shiftBy 메소드를 이용해 암호화를 한다고 가정하면, 문자열 "apple"을 입력하면 반드시 "crrng"라는 문자열이 반환되게 되어있다.

이를 기록해놓은 다음, DB에서 탈취한 비밀번호가 "crrng"라면, 이 유저의 비밀번호 원문이 "apple"인 것은 쉽게 유추할 수 있다.

그렇기 때문에 일반 Hashing만 사용하기에는 불안한 감이 없지 않아 있다.

이를 보완하기 위해 기존 문자열에 Salt값을 추가한 후 Hashing한다면 예상하기 힘든 전혀 다른 문자열(해시 값)이 만들어진다.

따라서 Salt를 이용하면, 사용한 알고리즘이 노출 되더라도 원본 비밀번호 데이터를 보호할 수 있는 안전장치 역할을 할 수 있다.


Salt 사용시 주의점

  1. Salt는 유저와 패스워드 별로 유일한 값을 가져야 한다.

  2. 사용자 계정을 생성할 때와 비밀번호를 변경할 때마다 새로운 임의의 Salt를 사용해서 Hashing해야 한다.

  3. Salt는 절대 재사용해서는 안된다.

  4. Salt는 DB의 유저 테이블에 같이 저장되어야 한다.

profile
무용한 헛소리들

0개의 댓글