• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

salt 이용하여 패스워드 생성후, 나중에 패스워드 비교할때 salt값이 필요하지 않나요?

22.01.16 16:32 작성 조회수 782

0

안녕하세요. 강의 잘 듣고 있습니다!
bcrypt를 이용한 패스워드 생성, 비교할때 궁금점이 생겼습니다.
 
const salt = await bcrypt.genSalt()
const hashedPassword = await bcrypt.hash(password, salt)
 
이렇게 password 생성하여 저장했으면,
 
로그인할때 password 값 비교할때 저 방식과 똑같이 password 생성하여 DB에 저장되어있는 값과 비교해야하지 않나요?
 
bcrypt.compare(password, user.password)
 
기존 password와 사용자가 입력한 password를 이렇게 단순 비교해도 성공하는 이유가 무엇인가요?
 
이렇게 되면 salt를 사용할 필요가 없지 않나 생각이 듭니다.
 
 
 

답변 1

답변을 작성해보세요.

0

안녕하세요 !! 

compare 함수를 써서 plain과 실제 hashed 된 비번을 비교할 때 

그 과정에서 hashed된 비번을  salt부분과 hash 부분을 분리합니다. 

그 이후에  salt 된 부분과 plain을 encrypt 시켜서 원래 hashed된 비밀번호와 비교를 해서 match 되었는지 결론을 도출합니다 !! 

감사합니다. 

Jaeil Cho님의 프로필

Jaeil Cho

질문자

2022.01.17

답변 감사합니다! 

아직 의문이 남아있는데요,

원래 사용자가 salt값을 따로 가지고 있다가 로그인할때 그 salt 값을 이용하여 password를 생성해서 비교하는게 아니라, 매번 그냥 compare으로만 비교하게되면

원래 사용자 혹은 해킹하려는 사람이 결국은 똑같은 원래 password만 입력해도

결국 로그인되는데,,, 그럼 결국 salt를 하는 의미가 없어지는게 아닌가 생각이 듭니다.

이용우님의 프로필

이용우

2022.02.03

저도 해당하는 내용을 찾아봤었는데, 스택 오버플로우에 자세하게 설명되어있던 것을 확인해서 이해하게되었습니다.

https://stackoverflow.com/questions/13023361/how-does-node-bcrypt-js-compare-hashed-and-plaintext-passwords-without-the-salt