Bcrypt

박효상·2022년 4월 25일
0

BACKEND-TIL

목록 보기
11/21
post-thumbnail

Bcrypt 란?

  • 단방향 암호화를 위해 만들어진 해시 함수로서 현업에서 가장 많이 사용되는 패스워드 암호화 알고리즘

단방향 암호화 이유

  • 많은 사용자들은 동일한 ID와 Password를 여러 애플리케이션에서 사용하기에 서버 DB에 암호화 없이 비밀번호를 저장하여 보이게하면 외부적, 내부적으로 둘 다 보안 위험이 발생
  • 따라서 비밀번호 암호화를 위해 해시 함수 및 Bcrypt 도입
  • 암호화 자체로 데이터의 유출을 막지는 못하지만 데이터에 담긴 정보를 알 수 없게 하는 것이 목적

sha256

  • 대표적인 해시 함수로서 평문의 길이와 상관없이 256비트로 고정된 암호문을 출력
    • 장점 : 빠른 암호화 속도, 단방향성, 괜찮은 보안성
    • 단점 : rainbow table attack (해시 값들을 미리 계산해 놓은 테이블을 가지고 해시 함수 반환 값을 역추적하여 원래 데이터를 알아내는 해킹 방식), 해시 함수는 빠른 데이터 검색을 위해 만들어진 자료구조이기에 해커가 임의의 해시값들을 대량 생성하여 해시된 데이터값과 빠른 비교를 통해 기존 데이터를 알아낼 가능성이 높다

Bcrypt 특징

  • 실제 데이터 외에 모든 데이터마다 달라지는 salt라는 무작위 데이터를 추가하여 해시값을 계산하는 salting 기술과 단방향 해싱을 한 번이 아닌 수 차례 반복하는 키 스트레칭 기술을 적용한 해시 함수
  • sha256의 취약점 해결
    • 모든 데이터마다 salt 값이 추가된 채로 해싱되어 있기에 rainbow table attack 불가
  • 단방향 암호화로 복호화가 불가능

Bcrypt 구조

  • Algorithm : 알고리즘 식별자로서 bcrypt를 의미
  • Cost Factor : 키 스트레칭을 한 횟수로서 총 2^n 번인데 그 중 n 숫자를 표시
  • Salt : 128 비트로 고정된 솔트값으로 22자의 base64로 인코딩된 값
  • Hash : Salting & 키 스트레칭 후의 해시 값

Bcrypt 메서드

  • bcrypt.hash()
    • 패스워드를 해싱하는 함수
    • 매개변수로 패스워드와 솔트값이 될 숫자를 전달
    • 해싱된 패스워드를 최종 반환
    • 비동기 함수로 async/await와 같이 오는 함수
  • bcrypt.compare()
    • 입력한 패스워드가 기존 해싱된 패스워드와 일치하는지 검증하는 함수
    • 매개변수로 패스워드와 해싱된 패스워드를 전달
    • 일치하면 true, 불일치하면 false 최종 반환
    • 비동기 함수로 async/await와 같이 오는 함수
profile
집념의 백엔드 개발자

0개의 댓글