2013-04-01 2 views
4

데이터베이스에 비밀번호를 저장하는 한 가지 방법은 다음과 같습니다. username, hash 및 salt 열이있는 데이터베이스 테이블을 갖기. 소금은 결코 보이지 않을 것입니다.데이터베이스에 암호를 안전하게 저장하는 방법은 무엇입니까?

암호 + salt로 해시를 생성합니다. 암호는 사용자가 보내며 데이터베이스에 저장되지 않습니다. 생성 된 해시가 데이터베이스에 저장된 해시와 동일한 경우 암호가 올바른 것입니다.

하지만 내 의심이 있습니다. 암호를 보내면 유선으로 전송되는 동안 스니핑 될 수 있으므로 통신을 암호화해야합니다. 따라서 해시와 소금을 사용하는 것은 관리자로부터 데이터를 보호하기위한 것일뿐입니다. 데이터베이스에 암호를 저장하면 관리자가 모든 정보에 쉽게 액세스 할 수 있습니다. 해시를 저장하면 관리자는 정보의 절반 만 소금이 아니라 암호 만 가지고 있기 때문에 사용자 정보에 액세스 할 수 없습니다. 그러나 사용자가 암호를 보내야하는 동안 다른 사람이 냄새를 맡을 수 있으므로 암호가 노출됩니다.

사용자의 정보를 보호하는 가장 좋은 방법은 무엇입니까?

감사합니다.

+0

http://www.troyhunt.com/2011/12/free-ebook-owasp-top-10-for-net.html –

답변

7

해시 된 암호는 또한 외부인으로부터 데이터를 보호합니다. 상상해보십시오. 누군가 SQL 주입을 사용하여 데이터에 액세스 한 경우 패스가 아니라 해시가 & 인 경우를 가정 해보십시오. 네트워크 보안 통신을 위해 HTTPS를 사용할 수 있습니다. & 좋은 보안 모델을 위해 기존 해시 암호 테이블을 사용하십시오. Secure salted password hashing

2

암호를 명확하게 전송해야하는 경우 전송 중에 보호해야합니다. 브라우저에서 http 서버로 가려면 SSL/TLS이 필요합니다. 응용 프로그램 서버에서 데이터베이스로 encrypted connections이 필요합니다.

암호 전송을 필요로하지 않는 방법이 있습니다. 가장 좋은 방법은 HTTP Digest입니다. 다이제스트의 HA1 부분을 데이터베이스에 저장할 수 있습니다. HA1 다이제스트에 포함 된 영역 비밀 및 사용자 이름은 rainbow tables에 대한 효과적인 보호 수단을 포함하지만 다이제스트가 여전히 MD5를 기반으로한다는 사실은 충분히 잘 갖추어 진 무차별 대항력에 비해 상대적으로 약하게 만듭니다. 그러나 그러한 무차별적인 힘은 주어진 사용자 이름과 영역에 특정한 콜리 전만을 드러 낼 뿐이므로 거의 사용하지 않습니다.

관련 문제