10주차: Express 유저기능 구현하기

김민지·2024년 8월 6일

서론

MVC(Model-View-Controller) 패턴

  1. 모델: 데이터베이스와의 상호작용 및 비즈니스 로직 관리
  2. 뷰: 레이아웃과 화면 처리
  3. 컨트롤러: 모델과 뷰로의 명령전달
  • MVC의 장점: 코드의 가독성과 유지보수가 용이해짐

프로젝트 소개

해싱이란?

암호화 vs 해싱

  • 암호화: 특정 키를 사용하여 원본 데이터를 다시 원상복구 할 수 있는 형태로 변환 (양방향)
    암호화 적용시, 암호화-복호화 대한 알고리즘이 노출될 경우 모든 비밀번호가 탈취됨

  • 해싱: 해시 함수를 사용하여 원본 데이터를 고정 길이의 고유한 문자열로 변환하며, 원본 데이터로 되돌릴 수 없음 (단방향)

  • 로그인 과정: 로그인 시 비밀번호 원본이 아닌, 입력받은 비밀번호를 해싱하여 데이터베이스에 저장되어 있는 해싱된 비밀번호와 일치하는지를 비교 → 데이터베이스에 저장할 때 사용한 해싱 알고리즘과 로그인 시에 사용한 해싱 알고리즘은 동일해야 함

해킹 공격 유형들

  1. 사전 공격(Dictionary Attack): 유저들이 자주 사용하는 비밀번호들 ('0000', '1234', 'qwerty', 'password' 등)을 유명한 해시 알고리즘으로 변환한 해시값들을 저장한 테이블을 Rainbow Table이라고 칭함. 해커는 이 테이블에 있는 해시값들을 데이터베이스에 있는 해시값들과 비교해가며 만약 일치할 경우 원래 비밀번호값을 예측할 수 있게 됨
    → 솔드 (Salt): 유저 회원가입시, 각 사용자의 비밀번호에 대해 고유한 무작위 문자열을 생성하고 사용자의 비밀번호와 솔트를 결합해서 해시값을 계산하여 적용함

  2. 무차별 대입 공격(Brute Force Attack): 암호를 풀기 위해 가능한 모든 값을 대입하는 것
    → 사용자에게 예측하기 힘든 비밀번호를 사용하도록 강제
    → 일정 횟수를 실패할 경우 계정 잠금 or 딜레이 부여
    → CAPTCHA사용
    → 2단계 인층(2FA)
    → 슬로우 해싱(Slow Hashing): 해시 알고리즘이 빠르고 효율적일수록 비교적 짧은 시간동안 많은 해싱 및 로그인 시도를 할 수 있으므로 무차별 대입공격의 위험성이 오히려 늘어남. 따라서 느린 알고리즘을 사용하면 초당 수십억개의 해시가 가능한 수준에서 수천개의 수준으로 줄어들게 되면서, 무차별 대입공격을 효과적으로 실행하기 어려워짐.

Key Derivation Function

  • 키 파생 함수(key derivation Function): 다이제스트(해시 알고리즘에서 생성된 해시값)를 생성할 때 솔팅과 키 스트레칭을 반복하며 솔트와 패스워드 외에도 입력 값을 추가하여 공격자가 쉽게 다이제스트를 유추할 수 없도록 함
    예: PBKDF2, bcrypt, scrypt, Argon2

JWT 슬라이딩 세션

  • 슬라이딩 세션(sliding session): 사용자가 활동중일 때 해당 토큰의 만료시간을 연장하여 로그인 상태를 유지할 수 있도록 하는것이 좋습니다.

Passport란?

  • 사용자 인증을 간편하게 구현할 수 있도록 도와주는 Node.js에서 유명한 인증 미들웨어

0개의 댓글