2013-06-09 3 views
3

사용자가 자신의 암호를 입력하고 해쉬와 소금을 사용하여 보안을 설정하면이 암호가 mysql DB에 저장됩니다. 따라서 등록 된 사용자가 로그인을 시도 할 때 비밀번호가 유효한지 어떻게 확인합니까?보안 사용자 인증은 어떻게 작동합니까?

내가 생각할 수있는 유일한 방법은 암호를 해시 + 소금으로 얻은 다음 해시 + 소금이 DB에 있는지 확인하는 것입니다. 나는 이것이 어떻게 안전한지 잘 모르겠다. 왜냐하면 내 코드가 암호를 해시 + 소금으로 처리하고 DB에서 일치 항목을 찾을 수 있기 때문입니다.

로그인 페이지가 방문 할 때마다 임의의 소금 생성에 대해 읽었지만 같은 사용자가 등록 할 때 생성 된 해시와 다른 새 해시 로그인을 시도하면 등록 된 사용자가 로그인하려고 시도하지 않습니다. .

누구든지이 점을 밝힐 수 있다면 고맙겠습니다. 자바를 사용하고 있습니다.

+0

를 더 깊은 설명을 얻을보고하게하고 DB에서 일치하는 것을 찾으십시오 * "> 이것으로 무슨 뜻인지 설명해 주시겠습니까? –

답변

1

기본적으로 h(password+salt)salt을 데이터베이스에 저장해야합니다. 일부 사용자가 로그인을 시도하면 일반 텍스트 암호를 받게됩니다. 그런 다음 데이터베이스에서 사용자의 소금을 가져와 password+salt의 해시를 생성하고 저장된 해시와 동일한 경우 인증에 성공했습니다.

공격자가 소금과 실제 암호를 모두 추측해야하기 때문에 해시에서 대용량 공격을 더 어렵게 만들기 때문에 기본 해시 암호보다 안전합니다. 그러나 소금이 공개되어 있거나 공격자가 알고있는 경우 단일 암호를 더 세게 만들기는 어렵습니다. 또한 일반적인 암호

을 위해 미리 생성 해시의 거대한 목록입니다 무지개 테이블 소용이 내 코드를 의미하기 때문에 + 소금 모든 암호를 해시합니다 * "here 또는 here

+0

감사합니다. 그래서 사용자 이름을 사용하여 DB에서 저장된 소금을 얻을 것인가? 누군가 내 사용자 이름을 알고 있다면 DB와 해시에서 소금을 가져 와서 저장된 해시와 비교할 수 있습니까? 아직도 안전한가요? – webDeveloper

+0

누군가가 해시가있는 데이터베이스와 테이블에 대한 자유로운 액세스 권한을 가지고 있다면 그렇습니다. 하지만 그건 아주 나쁜 생각입니다. – Simiil

관련 문제