2012-04-14 4 views
0

저는 웹 개발과 데이터베이스에 익숙하지 않으며 적절한 보안과 속도로 비밀번호 인증을 구현하려고합니다. 무지개 테이블을 생성하지 못하도록 암호를 해시하고 각 사용자에게 고유 한 소금을 추가했습니다.데이터베이스를 검색하는 데 걸리는 시간이

제 질문은 사용자를 확인하기 위해 검색해야하는 시간을 다룹니다. 어느 시점에 누가 연결하려고하는지 모르겠으므로 소금 필드에서 모든 필드를 검색 한 다음 제출 된 암호와 각 고유 한 소금을 해시 한 다음 각 출력을 해시 값과 비교해야합니다. 테이블에있는 문자열?

그래서 해시 (암호 + 소금)의 각 조합에 대해 별도의 쿼리를 제출해야합니까? 그것은 그것이 아주 느릴 것 같습니다. 나는 그 과정을 빠르게 할 트릭을 놓치고 있습니까? 아니면 단순히 그것을 빨아 들이고 더 나은 보안을 위해 속도를 희생시키는 것입니까? 아니면 내가 오늘날의 컴퓨터의 속도로 오해하고있는 것이 전혀 문제가되지 않습니까?

답변

1

암호만으로 사용자를 인증 할 수는 없습니다. 암호는 사용자가 자신이 말하는 사람인 지 확인하는 것이므로 이름이나 기타 사용자 식별자가 필요합니다. 그러면 표는 users(..., name, password, ...)처럼 보이며 SELECT password WHERE name = "foo"을 수행하고 거기에서 확인을 진행합니다. 편리한 형식은 패스워드 필드 내에 피구 동 키를 생성하는 데 필요한 모든 매개 변수를 유지하는 것입니다 (예 : 이 같은 : 자체 해시

algo$salt$password hash 

, 당신은 빨리하고 싶지 않아 - PBKDF2, bcrypt 또는 scrypt 같은 키 유도 함수를 참조하십시오. 일반적으로 매개 변수를 조정하여 하나의 키를 파생하는 데 약 1 초가 걸리면 무식한 강제력을 발생시키는 좋은 방법입니다.

+0

와우 나는 바보 야. 나는 비교를 위해 그 사용자의 암호 + 소금을 해시하는 것보다 일치하는 문자열에 대한 이름 열을 검색한다고 생각하지 않았다. 나의 변론은 오전 3시 30 분이다. 감사. – StackAttack

관련 문제