2011-11-02 1 views
0

나는 C# 응용 프로그램을 가지고 있으며 암호를 저장하기 위해 PHP와 MySQL을 사용하여 기본 로그인 양식을 작성하려고합니다.암호를 임의의 소금과 비교하기

암호를 저장하기 위해 SHA512 + 무작위 소금을 사용하고 있습니다. 현재 암호에이 작업을하고 있습니다.

hash (password + randomSalt) + randomSalt;

이렇게 소금은 해시에 추가 된 다음 서버로 전송되고 저장됩니다.

이제 누군가가 로그인을 시도 할 때 내 문제가 비교 중입니다. 사용자는 소금을 모르고 서버에 일반 텍스트 암호를 보내지 않으므로 조금 붙어 있습니다.

암호를 암호화하여 서버로 보내야 서버에서 사용자에게 소금을 보내거나 이것을 구현하는 더 좋은 방법이 있습니까?

계정 비밀번호를 만드는 사람은 누구나 알맞게 보안을 유지하기 만하면됩니다. 일반적으로 사전

+1

소금으로 사용자 식별자를 사용하면 실제로 해시를 다시 만들 수 있습니다. –

답변

1

에서

감사합니다, 당신은 데이터베이스에 해시 된 암호 및 임의 소금 값을 저장해야합니다.

사용자가 인증하면 사용자 이름과 암호가 서버로 전송됩니다 (SSL 보안 연결을 사용하는 것이 좋음). 거기에서 양식을 사용하여 사용자 이름을 사용하여 비교할 데이터베이스의 소금 값과 해시 된 암호를 검색합니다.

결론 중요한 텍스트 암호를 저장하거나 보안되지 않은 연결을 통해 보내지 마십시오.

자세한 내용은 Password hashing, salt and storage of hashed values을 참조하십시오.

+0

좋은 참조 링크! –

0

거의 불가능합니다. Derek이 말했듯이, 옳은 일은 SSL 인증서를 받고 일반 텍스트 암호를 보내는 것입니다.

소금 절도는 도난당한 암호 데이터베이스가 모든 사람의 암호를 공개하지 못하도록 보호하는 것입니다. 그러나 해시 단계가 클라이언트에서 수행되면 데이터베이스의 값은 네트워크를 통해 전송되는 정확한 문자열입니다.

실제로 SSL을 사용할 수없는 경우 http://en.wikipedia.org/wiki/Challenge-response_authentication#Cryptographic_techniques은 암호 (또는 해시가 거의 동일하지 않음)를 보내지 않도록하는 방법을 설명합니다.