2013-06-13 4 views
2

내 데이터베이스에 사용자 암호 (User.UserPassword) 필드가 있습니다. SHA1 알고리즘을 사용하여 사용자 입력을 해시 한 다음 소금으로 해시합니다. 좋아, 괜찮아.여러 암호를 데이터베이스에 저장하는 가장 좋은 방법

하지만 이제 CIFS 사용자를 인증합니다. CIFS의 한 프로토콜은 NTLMv1입니다.이 프로토콜은 내 Samba Java 서버에 MD4 16 비트 (매우 안전하지 않음)를 사용합니다.

MD4를 SHA1로 변환하거나 해시 결과를 비교할 수 없습니다. 그래서, 나는 두 해시를 저장하거나 그들을 비교해야합니다. 그러면 다음을 수행 할 수 있습니다.

  • MD4 해시를 User.UserPasswordMD4에 저장하십시오.

  • ExternalAuthenticators

  • 저장 사용자 전체 텍스트 비밀번호와 같은, 다른 테이블에 MD4 해시를 저장 및 변환 (Blargh)

  • 봄 보안 (나는 그것을하는 방법을 모른다 아직) 귀하의 옵션은 간다

  • 은 ...

누구든지 나를 도울 수

?

+0

이렇게하면 도움이 될 수 있습니다. http://stackoverflow.com/questions/1054022/best-way-to-store-password-in-database –

+0

데이터베이스 모델을 변경할 수 있습니까? – fge

+0

예, 할 수 있습니다. 그건 내 DB 모델입니다. –

답변

1

클라이언트와 서버가 모두 challenge 바이트에서 동일한 작업을 수행해야하고 서버가 결과를 비교해야하기 때문에 RC4 해시를 저장해야합니다.

  • 평범한 텍스트 암호를 저장하는 것은 좋지 않습니다. 잊어 버리십시오.
  • 데이터베이스에 PasswordMD4로 저장하면 자기 자신이 PC4보다 보안을 강화하지 않습니다.
  • 다른 테이블에 저장 - 이전 변형과 다른 점은 없습니다.
  • 봄 보안 - 어떻게 적용 할 수 있을지 모르겠다.

중요한 또는 모든 DB 데이터를 암호화 된 파티션에 저장할 수 있지만 성능이 약간 저하됩니다.

SHA-1 필드에 RC4 비밀번호 저장을 제안 할 수 있지만 암호화 할 수 있습니다. 3DES로 충분할 것입니다. 아마도 약간의 소금을 가지고있을 것입니다. 이미 SHA-1 해시를위한 어딘가에 소금이 있어야합니다. RC4 해시가 필요하면 DB에서 값을 간단히 해독하고 소금을 빼거나 (또는 ​​XOR) 보통의 인증 절차를 수행하십시오.

그리고 NTLM v1을 사용하지 마십시오. 이전 버전과 안전하지 않습니다.

관련 문제