genSalt()

임수정·2023년 3월 20일
0

위코드 1차 프로젝트 진행시 공부한 내용을 정리하였습니다.

회원가입 API를 만드는 과정에서 genSalt()라는 bcrypt의 메서드에 대해서 알게되었습니다.

📌bcrypt

먼저 bcrypt에 대해서 간략하게 알아보겠습니다.

bcrypt는 단방향 해시 알고리즘이기 때문에 복호화가 불가능합니다. 이러한 단점을 보완하기 위해 단방향 암호화에 솔팅(Salting)과 키 스트레칭(Key Stretching) 기술을 적용시킵니다.
bcrypt는 레인보우 테이블 공격을 방지하기 위해 솔팅과 키 스트레칭을 적용한 대표적인 예입니다.

앞서 말한 것과 같이 bcrypt에는 솔팅(Salting)작업이 꼭 필요합니다. 이를 하기 위해 genSalt()라는 메서드를 활용하였습니다.

📌genSalt()

소금(Salt)생성기라고 말할 수 있습니다.
소금은 hash 함수에서 암호화된 비밀번호를 생성할 때 추가되는 바이트 단위의 임의의 문자열입니다.

실습을 통해 상세하게 알아가 보겠습니다.


const makePassword = async (plainPassword) => {
  const saltRounds = 10;  //(1)
  const salt = await bcrypt.genSalt(saltRounds);  //(2)

  return bcrypt.hash(plainPassword, salt); //(3)
};
  • (1): 난수를 10개 설정하겠다는 의미
    => 숫자가 높아질수록 보안이 우수해지지만 그만큼 생성 및 응답시간이 오래 걸리기 때문에
    적절한 숫자를 사용해야합니다.
  • (2): 위에서 설정한 난수와 함께 genSalt()를 활용하여 소금을 만들어준다
  • (3): 입력한 비밀번호를 hash화 한다.

이 코드를 적용하고 비밀번호의 정규화 표현과 더불어 적용하게 되면

이미지와 같이 데이터 베이스에 쌓이게 됩니다!

📌이 글을 마치며..

genSalt()메서드를 알기전에는 bcrypt를 사용하는데 조금 이해가 가지 않는 부분들이 있었습니다. 메서드를 활용하다보니 이해도가 쑥! 올라서 너무 신기했습니다~
혹시 저처럼 이해가 잘 안되시는 분들은 한번 적용해 보시면 좋을 것 같습니다!😎

profile
부족함을 인정하고 채워나가는 개발자! (Node.js 개발자)

0개의 댓글