2013-09-02 2 views
1

클라이언트가 인터넷을 통해 서버에 연결되어 있습니다 (WCF). 비밀번호를 확인하는 빠르고 안전한 방법?

내가 현재 사용하는 DB에 저장하는 해시를 계산하려면 :

var hash = BCrypt.HashPassword(password, 13); 

그것을 확인하기 위해 내가 할 : 해시의

var isApproved = BCrypt.Verify(passwordFromUser, hashFromDatabase); 

세대는 계산 집약적, 참이어야합니다. 그러나 검증 역시 집중적이어야합니까?

사용자 (이 서버에서 수행되는 것)을 확인 할 보안하지만 빠른 방법이 없다?

+0

이 작업을 수행합니다 : - http://security.stackexchange.com/questions/2131/reference-implementation-of-c-password-hashing-and-verification 도움이 ??? –

답변

4

예. 확인이 집중적이어야합니다. 실제로 확인이 원래 세대보다 집중적으로 중요하다는 사실이 훨씬 더 중요합니다. (그것은 당신이 저렴 생성과 비용이 많이 드는 검증이있을 것이다 방식을 볼 수 어렵습니다,하지만 괜찮아 질 것입니다.)

요점은이 암호를 확인하기 위해 저렴 있다면, 공격자가 많은 빠르게 암호를 확인할 수 있다는 것입니다 . 그러나 각각의 추측을 값 비싼 것으로 확인하면 암호를 해독하는 데 무차별 한 방법을 적용하는 것이 훨씬 쉽지 않습니다. 당신이하는 당신이하지 이 될을 원하는 점 (공격 아니라면

는 확인이 상대적으로 비싸다하더라도, 그것은 정상적인 응용 프로그램의 작동에 매우 중요한 비용으로 아직도 확률이 낮다 빨리 물건을 확인하는 것). 당신은 당신이 아마 다소 수평 확장을 감당할 수있는 충분한 사용자를 가지고 제안 땀의 종류에 침입하는 서버를 ... 일으킬 수있는 충분한 합법적 인 로그인 시도를 얻는 경우

1

검증은 계산해야합니다 따라서 비밀번호 데이터베이스를 도난당한 경우 Jon Skeet이 설명한대로 비밀번호를 신속하게 확인하여 비밀번호를 복구하는 데 많은 비용이 듭니다.

그러나, 클라이언트가 인터넷을 통해 서버에 연결하여 정상 작동, 당신은 단순히 속도 제한 클라이언트에서 인증 시도를하여 암호 많이 확인에서 공격자를 방지 할 수 있습니다. 이 경우 서버가 '좋은 사람'이기 때문에 서버가 값 비싼 검증을 수행해야한다는 것은 바람직하지 않습니다.

Salted Challenge Response Authentication Mechanism (SCRAM)은 클라이언트와 서버간에 확인이 분리되는 메커니즘을 제공하며 클라이언트는 무거운 부분을 들어 올립니다.