2010-01-11 2 views
4

얼마나 강한은암호 해시에 소금을 어떻게 넣어야합니까?

return sha1($salt.sha1($passwd)); 

단지와 비교 될 것이다 :

return sha1($salt.$passwd); 

$salt 강한 임의 ASCII로 구성된 길이 (12)의 사용자 별 문자열입니다.

+0

내가 잘못 생각할 수도 있지만 암호 해시가 해시 암호 해시보다 약한 이유는 무엇입니까? 즉, 해시 알고리즘이 광고하는 내용을 수행하는 한. 그리고 만약 * 않습니다 *, 그럼, 당신은 전혀 사용하지 않아야하지만, 자주. – Boldewyn

+0

무지개 테이블 (http://en.wikipedia.org/wiki/Rainbow_table) –

답변

3

언뜻보기에 암호에 대한 강력한 지식이 없으면 전혀 강하지 않다고 말할 수 있습니다. 그런데

, 일반적으로 같은 해시가없는 것 같은 암호를 사용하여

sha1($login.$salt.$passwd); 

그래서 2 사용자를 사용하는 것이 좋습니다 것.

+5

해시에 로그인 이름을 포함시키는 것은 한 가지 문제를 해결하지만 다른 것을 도입합니다. 이제 사용자는 해시를 깨뜨리고 해시를 다시 계산할 수 없기 때문에 사용자의 비밀번호를 알 수 없기 때문에 로그인을 변경할 수 없습니다. 충실하게 언급 된 – Asaph

+0

, 나는 이것을 염두에 두겠다. – Vinzz

+3

이 솔루션은 사용자 별 염을 생성하는 것입니다. –

1

내가 아는 한 강도에는 차이가 없습니다.

소금을 암호 해시에 추가하는 것이 일반적이므로 소금은 일반적으로 공격자에게 알려져 있습니다. 그러나 이것은 소금의 목적에 어긋나지 않습니다.

해시에 $ login/$ 사용자 이름을 추가하는 것이 좋습니다 (Vinzz 님의 솔루션). 일반적으로 사용자가 사용자 이름을 변경하면 문제가 발생할 수 있습니다. 더 좋은 해결책은 무작위 소금을 사용하는 것입니다.

사용 된 해싱 알고리즘 이 차이를 만듭니다. SHA1cryptographically broken으로 간주되어 암호 해시에 사용하면 안됩니다. BCRYPT (복어 기반의 적응 비용 해싱 알고리즘을) 말하기

Gennerally 위 SHA256하고있는 연습
다른 솔리드 옵션 (PHP의 crypt();에 대한 CRYPT_BLOWFISH 플래그)로 최선을 considdered된다.

편집 :
는 여기 염장에 더 이상 답을 썼다 : 공격자가 무작위 공격을 위해 두 배의 SHA1 계산을 수행해야하기 때문에 stackoverflow.com/questions/1645161/salt-generation-and-open-source-software/

+1

왜이 downvoted 무엇입니까? – Jacco

+0

나는 downvote하지 않았지만, IMHO는 요점을 놓치고있다. 질문은 암호를 이중 해싱하는 것입니다. – Boldewyn

4

그것은 정확히 두 배 강하다.

물론 아직 정확한 것은 아닙니다. 반면 SHA1을 루프로 5000 회 실행하는 것은 권한 부여에있어 실용적이지만 공격은 5000 배 길어집니다.이 기술은 key strengthening으로 알려져 있습니다. 그러나 Jacco가 언급 한 적응 형 비용 해시 알고리즘을 대신하는 것은 가난한 사람의 대체품입니다.

+0

... 또는 누군가가 귀하의 로그인 양식을 스팸하는 경우 서비스 거부. – Boldewyn

+0

SHA1의 5000 배는 여전히 필요한 DB 요청보다 빠릅니다. –

관련 문제