[CS] 암호화 | 쿠키, 세션, 웹 스토리지 | 230605(2)

Chaeyeon Lee·2023년 6월 6일
1

데브코스 TIL

목록 보기
3/16

암호화 기초

암호화 : 평문을 해독할 수 없는 암호문으로 변환하는 것

(1) 단방향 암호화

평문을 암호문으로 바꾸는 암호화는 가능하지만, 암호문을 평문으로 바꾸는 불가능하다. 해시Hash 알고리즘을 이용하여 평문을 복호화 할 수 없는 형태로 암호화한다.

Hash
함수 임의의 길이의 데이터를 고정된 길이의 데이터로 반환 시켜주는 함수.
입력값의 길이가 달라도 출력값은 언제나 고정된 길이로 반환한다.
동일한 값이 입력되면 언제나 동일한 출력값을 보장한다.
해시함수는 암호학적 해시함수와 비암호학적 해시함수로 구분된다.

  • 대표적인 암호학 해시 함수 알고리즘은 MD5와 SHA가 있다. 그러나 현재에는 해시 충돌이 발생할 수 있는 취약점이 있어 MD5, SHA-0, SHA-1은 사용이 권장되지 않는다.

고려할 점

Rainbow table 공격, Brute-force attack에 비밀번호가 노출 될 확률이 있기 때문에, 암호화된 데이터를 탈취당하더라도 원문을 알아낼 수 없도록 조치를 취해야 한다.
Rainbow table : 해시함수는 입력된 값이 같으면 언제나 같은 결과를 나타내므로, 사용자의 암호유형을 정의한 Rainbow table을 만들어 하나씩 대입해 보면서 암호를 발견해 낼 수 있다.

해결법

(1) Salt : 실제 암호에 임의의 문자열을 추가하여 암호화한다. Rainbow table공격을 방지하는 효과가 있다.
(2) Key Stretching : 해시 암호화를 여러번 반복하여 원문을 더 알기 힘들게 만드는 방법이다. Brute-force attack을 방지하는 효과가 있다.
Salt, Key Stretching 을 이용한 라이브러리

  • PBKDF2: salt를 적용한 후 키 스트레칭을 임의로 선택할 수 있는 function. 가볍고 구현하기 쉽다.
  • bcrypt: 많은 언어에서 지원이 가능하며 쉽게 접할 수 있는 암호화 방식

(2) 양방향 암호화

암호문을 복호화할 수 있는 알고리즘으로, 암호화-복호화 두 가지 방향이 가능하다.
대칭키, 비대칭키 알고리즘 2가지 방식이 있다.

대칭키 암호 알고리즘

암호화, 복호화할 때 키가 같다. 평문을 안전하게 전달할 수는 있지만 키는 안전하게 전달할 수 없다는 단점이 있다. 따라서 키를 공개하지 않아야 하므로 비공개 키 암호라고 한다,
AES : 같은 키를 이용하여 암호화, 복호화 하는 대치키 암호화 방식의 대표적인 알고리즘
RSA : 공개키와 개인키가 존재하며 다수의 사람들이 이용할 때 적절하다. 소인수 분해를 기반으로 만들어진 알고리즘.

(3) 자바스크립트 암호화 알고리즘

crypto-js

자바스크립트 기반의 암/복호화가 가능한 여러 알고리즘을 간편하게 제공하는 라이브러리.
대칭키/비대칭키/해싱이 있다.




쿠키와 세션, 웹 스토리지

HTTP

  • Web의 application-layer 프로토콜
  • client/server모델을 따른다.
  • 요청과 응답으로만 이루어져 있고, HTTP 메시지는 TCP에 실려 보내진다.
  • HTTP is 'stateless' : 현재 통신하고 있는 상대방 HTTP의 어떠한 정보도 갖고 있지 않기 때문에 웹서버에 한번에 많은 요청이 몰릴 때 유용하지만, 어떤 브라우저에서 요청을 보냈는지 알 수 없다.

(1) 쿠키

stateless 프로토콜인 HTTP의 한계를 극복하기 위해 쿠키가 도입되었다. multi-step HTTP메시지가 web transaction을 완료하기 위해서는 반드시 state가 유지되어야 한다.
쿠키 : 웹사이트와 client 브라우저 사이에 상태를 연결 시켜주는 사용자 식별용 데이터

쿠키 운용을 위해 필요한 4가지 components

  1. HTTP 응답메시지의 cookie header line
  2. 다음 HTTP 요청메시지 안의 cookie header line
  3. 유저 브라우저에 의해 관리되는 유저 호스트를 저장한 쿠키파일
  4. 웹사이트에 있는 백엔드 데이터베이스

쿠키 사용 방식

  1. 서버는 HTTP 응답의 cookie header를 통해 쿠키를 설정한다. 서버는 set cookie라는 옵션을 통해 클라이언트에게 알려주고, 클라이언트인 브라우저는 쿠키를 저장해 놓는다.
  2. 클라이언트 컴퓨터 저장장치에 쿠키가 저장되고, 쿠키 사이트에 연결될 때 요청 메시지에 쿠키가 붙어 서버에 전달된다.
  3. 쿠키파일이 사용자 컴퓨터에 저장되고 유저의 브라우저에 의해 관리된다.

쿠키의 취약점

XSS 공격을 당할 수 있다. 쿠키를 암호화하지 않고 보내면 JS를 이용해 다른 사용자의 쿠키값 탈취가 가능하다.

(2) 세션

쿠키와 세션의 차이점

쿠키의 경우: 방문자 정보를 방문자 컴퓨터 메모리에 저장
세션의 경우: 방문자 요청에 따른 정보를 웹서버가 세션 아이디 파일을 만들어 서비스가 돌아가고 있는 서버에 저장

프로세스들 사이에서 통신을 하기 위해 메시지 교환을 통해 서로 인식한 후, 통신을 마칠 때까지의 기간 동안 서버에 잠시 방문자 정보를 저장한다. 쿠키와 달리, 세션은 사용자들의 로그인 정보에 대한 보안을 한층 업그레이드 할 수 있어서 웹사이트에 방문하여 계속 접속을 유지할 때 이전의 접속 정보를 이용할 수 있다.

HTTP Session

세션이란 서버가 해당 서버로 접근한 클라이언트를 식별하는 방법으로, 서버는 클라이언트에게 set-cookie 값으로 클라이언트 식별자인 session-id를 발행한다. 이 session-id는 해당 서버와 클라이언트 메모리에 저장되고, 이때 클라이언트 메모리에 사용되는 쿠키 타입은 세션 종료시 같이 소멸되는 memory cookie가 사용된다.

세션의 문제점

세션은 서버에 파일로 저장되는데, 사용자가 많아진다면 서버 저장공간에 부담이 될 수 있어서 정상 동작이 어렵다. 또한, 서버가 두 대 이상이라면 인증정보가 분산되어 정상 응답이 어렵다.

(3) 웹 스토리지

데이터베이스 서버나 클라우드 플랫폼이 아니라, 브라우저를 통해 데이터를 저장하는 기술, 즉 클라이언트에 데이터를 저장하기 위한 새로운 방법이다. 웹 스토리지에는 로컬 스토리지와 세션 스토리지가 존재한다.
로컬 스토리지 : 특정 웹사이트를 새탭/새창으로 띄워도 동일한 데이터를 공유한다. 브라우저를 종료 후 실행시켜도 데이터가 남아 있고, 직접 브라우저의 캐시 삭제/초기화를 하지 않는 이상 데이터가 영구적으로 보관된다. 단, 같은 컴퓨터에서 같은 브라우저를 사용할 때만 적용된다.
세션 스토리지 : 웹 페이지의 세션이 끝나면(브라우저 종료) 데이터가 지워진다. 각각의 탭과 창마다 데이터가 격리되어 저장된다.

indexedDB

많은 양의 구조화된 데이터를 클라이언트에 저장하기 위한 로우 레벨 API
transaction database를 사용하여 key-value로 데이터를 관리하며, B-tree 데이터 구조를 가진다.

profile
프론트엔드 개발자

0개의 댓글