[normaltic 취업반 5기] 2023-11-08 3주차 내용 정리

2023. 11. 8. 23:55normaltic 취업반 5기/내용 정리

 

식별(Identification)과 인증(Authentication)

 

식별(Identification)인증(Authentication)은 보안 분야에서 중요한 개념이며 모두가 알고 있는 로그인 과정에서 수행되는 작업이다.

식별 (Identification)

식별은 사용자가 자신의 정보를 입력하여 시스템에게 자신이 누구인지를 알리는 작업이다. 로그인 과정에서 예를 들자면 사용자는 자신을 인식할 수 있는 아이디를 입력하고 시스템에서는 입력된 아이디를 DB에 저장되어 있는 데이터와 비교하여 사용자를 식별한다.

인증 (Authentication)

인증은 식별 작업이 완료된 후에 사용자가 입력한 정보(아이디, 비밀번호 등)가 실제로 사용자의 것인지를 확인하는 작업이다. 로그인 과정에서 예를 들자면 로그인 과정에서 1차적으로 입력된 아이디를 통해 식별 작업이 완료된다. 그리고 같이 입력된 비밀번호를 DB에 저장되어 있는 데이터와 비교하여 일치하는지 확인한다. 아이디와 같이 저장되어 있는 비밀번호와 일치한다면 인증 작업이 완료된다.

 

요약하자면 식별 작업은 현재 사용자가 누구인지를 인식하는 작업이고 인증 작업은 식별된 사용자가 입력한 정보가 사용자의 것인지 확인하는 작업이라고 보면 된다.

 

식별 및 인증 작업 종류

 

식별 및 인증 작업은 여러 종류가 존재한다. 그 중 대표적인 2가지 방법을 알아보자.

 

1. 식별/인증 동시 수행

 

 

식별 작업과 인증 작업을 동시에 수행하는 방법이다. 하나의 쿼리문에 입력된 아이디와 비밀번호를 동시에 만족하는 데이터가 DB에 저장되어 있는지 비교하여 일치여부를 확인함으로써 식별 및 인증 작업을 동시에 수행 가능하다.

 

2. 식별/인증 분리 수행

 

 

식별 작업과 인증 작업을 분리하여 수행하는 방법이다. 하나의 쿼리문에 입력된 아이디만을 만족하는 데이터가 DB에 저장되어있는지 비교하여 일치여부를 확인함으로써 식별 작업을 수행한다. 식별 작업으로 얻은 결과물에 대응되는 비밀번호와 사용자가 입력한 비밀번호를 비교하여 일치여부를 확임 함으로써 인증 작업을 수행한다.

 

해시 (Hash)

 

해시에 대한 특징은 다음과 같다.

  • 다양한 길이의 데이터를 해싱 작업을 통하여 고정된 길이의 데이터로 변경된 값을 의미한다.
  • 해시 함수가 변하지 않는다면 변경 전 값과 변경 후 값은 항상 같다.
  • 두 개의 다른 데이터가 같은 해시 함수에 의한 해싱 작업으로 변경된 값이 같은 경우도 존재한다.
  • 해시는 일방향 함수이며 변경 후 값을 변경 전 값으로 되돌리는 작업이 거의 불가능하다.

 

 보안분야에서는 중요한 정보가 쉽게 탈취되지 않도록 데이터에 암호화 작업을 한다. 암호화된 데이터를 복호화(원래 데이터로 변환시키는 작업)하기 위해서는 키(Key)가 필요하다. 키의 종류에 따라 암호화 방식이 다르며 암호화와 복호화에 같은 키를 사용하는 방식과, 암호화와 복호화에 다른 키를 사용하는 방식이 존재한다.

 

암호화 복호화

 

또한 데이터의 형태를 바꾸는 방법 중 인코딩 방식이 존재한다. 대표적인 예로 base64 형태로 인코딩 하는 방식이 있으며 인코딩 된 데이터를 원래대로 되돌리는 작업을 디코딩이라 한다.

 

인코딩 디코딩

 

위와 같은 방식들은 모두 형태가 바뀐 데이터를 다시 되돌릴 수 있다는 공통점이 존재한다. 이말인 즉슨 공격자에 의한 데이터 탈취 가능성이 높다는 의미이다. 그러나 해시는 다르다. 해시는 위 방식들과는 달리 되돌리는 작업이 거의 불가능하다. 그래서 일방향 함수라 불리며 정말 중요하고 탈취되어서는 안 될 데이터에 대해 해싱 작업을 수행한다.

 

 

해시는 사용자 계정의 비밀번호를 DB에 저장할 때도 사용된다. 이는 DB가 공격자에 의해 탈취되었어도 DB에 저장된 비밀번호는 해싱된 값이기 때문에 쉽게 탈취 하지 못하게 하여 2차 피해를 방지할 수 있다.

 

쿠키 (Cookie) vs 세션 (Session)

 

클라이언트는 로그인을 통하여 식별 및 인증 작업을 거쳐도 이후 클라이언트의 요청에 대해서 인증된 상태를 유지할 수 없다. 이는 HTTP의 특징인 비연결성(Connectionless)무상태(Stateless)로 인한 현상 때문이다. 그렇다면 HTTP의 두 특징에 대해 알아보자.

 

HTTP(Hyper Text Transfer Protocol)은 클라이언트-서버 사이에 이루어지는 파일 요청/응답 프로토콜이다. HTTP는 비연결성과 무상태라는 두 가지의 특징을 가진다.

 

비연결성(Connectionless)은 연결을 맺은 클라이언트-서버의 관계에서 클라이언트가 파일을 요청한 후 서버가 요청에 의한 응답을 한 다음에 연결을 끊어버리는 특징이다. 무상태(Stateless)는 비연결성에 의해 연결이 끊어지면 이전 클라이언트의 상태에 대한 정보를 저장하지 않는 특징이다. 이 특징들이 존재하는 이유는 연결 상태의 지속적인 유지로 인하여 서버에 가해지는 부담과 리소스 낭비를 방지하기 위함이다. 

 

그러나 이러한 특징들로 인해 클라이언트 측에서는 계속해서 서버에 식별 및 인증 작업을 요청해야하는 번거로움이 생기며 이전 클라이언트의 상태에 대한 정보를 기억해야 하는 경우가 더 많이 존재한다. 그래서 클라이언트의 이전 상태를 기억하는 방법으로 나온 것이 쿠키(Cookie), 세션(Session) 그리고 최근에 들어서 많이 사용되어지는 JWT(JSON Web Token)이다.

 

쿠키 (Cookie)

쿠키는 서버에서 클라이언트의 상태에 관한 정보를 클라이언트 측에 저장한 것으로 클라이언트는 동일 서버로의 재요청 시 쿠키를 함께 전송하여 추가 로그인 작업 없이 인증된 상태를 유지할 수 있다. 쿠키의 특징은 다음과 같다.

  • 클라이언트 측에서는 서버에 요청 시 쿠키를 같이 전송하여 별다른 인증 작업 없이 자신을 기억하게 할 수 있다.
  • 쿠키는 클라이언트가 따로 요청하지 않아도 브라우저가 요청 시 Request Header를 넣어서 자동으로 서버에 전송한다.
  • 그러나 클라이언트 측에 저장되는 정보이다 보니 쉽게 위변조가 가능하기도 하고 탈취당할 가능성도 높아 보안상 취약하다.

쿠키의 구성 요소는 다음과 같다.

  • 이름 : 쿠키를 구별하는데 사용
  • : 쿠키의 이름과 관련된 값
  • 유효시간 : 쿠키가 유지되는 시간
  • 도메인 : 쿠키를 전송할 도메인
  • 경로 : 쿠키를 전송할 요청 경로

 

세션 (Session)

세션은 쿠키와는 달리 서버 측에서 클라이언트에 대한 정보를 서버 측에 저장하는 것으로 클라이언트가 서버에 인증 작업을 진행하게 되면 서버는 클라이언트를 식별 가능한 고유 세션 ID를 클라이언트에게 발급한다. 클라이언트는 서버에 요청 시 쿠키처럼 고유 세선 ID를 같이 전송하고 서버 측에서는 전송된 고유 세선 ID의 유효성 검사를 진행하여 클라이언트를 식별한다. 세션의 특징은 다음과 같다.

  • 세션 ID로 클라이언트의 로그인 정보를 주고 받지 않기 때문에 쿠키보다 상대적으로 보안에 강하다.
  • 클라이언트별 고유 세션 ID가 발급되기 때문에 요청 시마다 DB를 조회하는 번거로움이 없다.
  • 그러나 세선 ID를 탈취하는 세션 하이재킹 공격을 통해 공격자가 클라이언트로 위장하여 접근할 수 있다.
  • 또한 세션 정보는 서버에 저장되기 때문에 요청이 많아질수록 서버에 부하가 심해진다.

 

쿠키와 세션의 차이점

 

 

  • 쿠키는 클라이언트측, 세션은 서버 측에 사용자 정보가 저장된다.
  • 서버에 요청 시 쿠키는 클라이언트측에 정보가 저장되어 있어 빠르지만 세션은 서버에 저장되어 있기 때문에 따로 처리 작업이 요구되어 느리다.
  • 쿠키는 클라이언트측에 정보가 저장되어 요청 시 스니핑 공격을 받을 가능성이 높아 보안에 취약하지만 세션은 쿠키를 이용하여 세션 ID만 저장하기 때문에 상대적으로 보안성이 높다.
  • 쿠키도 만료 시간이 있지만 파일로 저장되어 있기 때문에 브라우저가 종료되어도 쿠키를 삭제할 때까지 유지가 가능하다. 그러나 세션은 만료 시간이 있지만 브라우저가 종료되면 만료 시간에 상관없이 삭제된다.