bcrypt 로 비밀번호 안전하게 저장하기

Joseph·2024년 1월 28일

bcrypt

정의

비밀번호를 안전하게 저장하기 위한 해시 함수로 Blowfish 암호를 기반으로 하며, 강력한 보안성을 제공한다.

특징

  1. salting: 자동으로 salt(랜덤 문자열)를 생성하여 비밀번호에 추가함으로써, rainbow 테이블 공격에 대한 보호를 제공한다.

  2. 워크 팩터(Work Factor): 해시를 생성하는 데 필요한 계산 작업의 양을 조절할수 있다. saltRounds라는 값으로 설정할 수 있고 값이 클수록 해시 생성에 더 많은 시간과 자원이 소요된다.

사용법(비밀번호 해싱)

보통 비밀번호를 저장하는 경우는 회원가입 프로세스 내부이다.

클라이언트에게 유저가 입력한 패스워드를 받으면, 데이터베이스에 값을 넘기기 전에 해싱처리를 해야한다.

const hashedPassword = await bcrypt.hash(password, saltRounds);

여기서 saltRounds값에 숫자를 넣어 얼만큼 더 보안을 두텁게 할지 정할 수 있다.
값이 클수록 해싱 과정에 수행되는 연산의 복잡도가 커져 보안은 강화하지만, 서버에 많은 처리 부하를 줄 수 있다.

추가

만약 해싱한 비밀번호를 바탕으로 회원가입이 정상적으로 되었다면 로그인 기능에서 해싱된 비밀번호를 비교하는 과정이 필요하다.

const isMatch = await bcrypt.compare(password, hashedPassword);

bcrypt가 제공하는 bcrypt.compare() 함수를 사용하면 손쉽게 비교할 수 있다.

profile
안녕하세요 프론트와 백 둘다 관심있는 웹개발자 이창무입니다.

0개의 댓글