비록 해싱 및 소금 암호를 이해하지만 그것은 몇 가지 오해가 보인다. nodejs에있는 내 웹 사이트의 사용자 계정 시스템을 만들고 있습니다.어떻게 암호 해시 + 소금 작동합니까
내가 이해하는 방식은 사용자가 암호를 생성 할 때 임의의 소금을 생성하고 암호에 추가 한 다음 해당 문자열을 해시하는 것입니다. 또한 작업 요소를 추가하여 해시 작업을 천천히하고 무차별 공격을 방어 할 수 있습니다. 우리는 데이터베이스에 해시와 함께 소금을 저장하고 로그인 시도의 유효성을 확인하기 위해 저장된 소금과 시도 된 암호로 위의 과정을 반복하고 해시가 일치하는지 확인합니다.
nodejs의 bcrypt
모듈이 해싱에 대한 나의 해석과 일치하지 않는 것으로 보입니다. 이
var salt = bcrypt.genSaltSync(10);
var hash = bcrypt.hashSync("my password", salt);
첫째 이유 일 계수가 소금보다는 해시에 적용되는 http://codetheory.in/using-the-node-js-bcrypt-module-to-hash-and-safely-store-passwords/의 예에서 무엇입니까? 무차별 공격으로 누군가가 해시 함수를 실행하면 올바른가? 해쉬가 우리가 느리게 할 필요가있는 함수가 아닌가?
나는 또한 bcrypt과 검증에 의해 혼동 해요 :
bcrypt.compareSync("my password", hash);
우리는 두 사용자가 동일한 암호를 선택한 경우에도 고유하게 해시 필요,이 소금 오른쪽의 점은? 그럼 왜 우리가하지 않니?
bcrypt.compareSync("my password"+salt, hash);
소금의 주요 목표는 레인보우 테이블 공격, 즉 사전 계산 된 소금과 암호의 매핑을 방지하여 'originalPassword = rainbowTable [hash]'라는 크래킹의 복잡성을 줄이는 것입니다. 많은 소금이 더 좋지만 모든 시스템이 하나 이상의 소금을 사용하는 것은 아닙니다. – FakeRainBrigand