2013-03-05 2 views
0

장치에 시간 인증 된 인증 토큰을 받기 위해 인증하는 API가 있습니다. 이러한 장치는 "내 암호 기억"확인란을 가지고있어이 인증이 자동으로 이루어질 수 있습니다.Django의 암호 해저와 함께 이미 해시 된 암호 사용

기기의 일반 텍스트에 사용자 비밀번호를 저장하지 않을 것입니다.

장치가 프리젠 테이션 및 고객 지향적이기 때문에 토큰 만료 시간을 길게 만들 수 없습니다. 결국 토큰은 고객과 시간이 지나면 만료되며 장치는 요청을하지 못하거나 인증 대화 상자를 팝업해야합니다. 허용 가능한 해결 방법이 있습니다 (예 : 토큰이 지난 2 일, 매일 아침 재택이 필요함).하지만 먼저 해당 복잡성이 기기에 표시되지 않도록하는 옵션을 살펴보고 싶습니다.

비밀번호를 기기에 소금으로 담아 저장하려고 시도했습니다. . 이 해시 된 암호는 인증 요청에서 제출됩니다. 서버 측에서 API auth는 Django의 contrib.auth를 사용합니다. 기존 암호 작업 과정은 요청 암호를 해시하고 저장된 암호 해시와 비교하는 것입니다. 이미 해시 된 요청 암호가 있으므로 - 비교 전에 저장된 암호를 해시해야합니다.

이 솔루션을 시도했지만 모든 암호 해시를 수정해야하는 것으로 보입니다. 난 여전히 사이트의 비 API 부분에서 표준 암호 인증을 지원해야하므로 사용하고자하는 모든 해시 알고리즘에 대해 두 배로 된 해시로 끝날 것입니다. BCryptPasswordHasher/PreHashedBCryptPasswordHasher 등등. , 다른 개발자가 해시를 추가하거나 변경하려고 할 때 알아야하는 시나리오는 아닙니다.

"해시 전 해독"을 달성하는 또 다른 옵션은 django.contrib.auth를 수정하는 것이지만 포크를 유지하지 않는 것이 좋습니다.

나는 다른 사람들이 이전에이 문제를 해결했음을 확신합니다. 나는 일반적인 비교를 수행하지 않고 사전 해쉬 된 암호 비교를 수행하는 단일 지점을 찾는 방법에 대한 구체적인 조언과 해결책에 대한 일반적인 조언을 찾고있다. 보안 문제를 해결하고 합리적인 대안 접근법을 사용하고 있다면 기꺼이 들려 줄 것입니다.

건배

  1. 이이 API에 대해 인증에서 해시에 접근 할 수있는 장난 꾸러기 민속을 차단할 수는 없지만 더 광범위하게 노출되는 많은 사이트에서 하나의 암호를 사용하여 사용자를 보호하는 것입니다.
+0

제한된 시간의 토큰을 제공하고 있지만 사용자가 새 토큰을 가져 오기위한 UI를 표시하지 않도록 비밀번호 해시를 저장할 수 있도록 허용 하시겠습니까? 당신이 두 번째, unrevokable 토큰을 추가하려고하는 것 같아요. 어떤 나쁜 것입니다. 토큰의 시간 제한을 더 길게 만들 수없는 이유는 무엇입니까? – Hamish

+0

암호를 변경하면 장치에 저장된 해시 된 암호가 '폐기'됩니다. 후자의 질문은 제 질문의 세 번째 단락에 나와 있습니다. 이 "영구적으로 내 암호를 기억하는"것이 좋지 않지만 고객이 원하는 트레이드 오프입니다. –

+0

해시 된 암호를 사용하여 사람들을 인증하도록 허용하면 해시 된 암호는 일반 텍스트 암호가됩니다. 해시로 인증 할 수있는 인터페이스를 공개함으로써 소금물 해시 암호 저장소를 일반 텍스트 암호 저장소로 효과적으로 변환 했으므로 사용자 에이전트에 단일 일반 암호를 저장하는 것보다 더 큰 보안 문제가 될 수 있습니다. –

답변

1

귀하의 의도를 이해할 수 있는지 보겠습니다. 토큰을 사용하여 인증하는 API가 있습니다. 토큰은 세션 시작시 암호 인증을 통해 얻습니다. 사용자가 항상 원하는대로 로그인 할 필요가 없지만 암호를 장치에 일반 텍스트로 저장하지 않으려면 암호를 '기억'하는 방법을 원합니다. 그 맞습니까?

이 작업을 수행하는 가장 간단한 방법은 사용자가 '내 기억하기'를 선택하면 영구적으로 토큰을 만들거나 매우 오랫동안 만료시키는 것입니다. 그렇게하면 암호가 아닌 장치에 인증 양식을 저장할 수 있습니다.

이는 당신이 또한 다음처럼 잘 작동합니다 :

사용자가 암호를 변경
  • 는, 서버 측에서 모든 토큰을 무효로합니다.
  • 기기 당 토큰을 생성하고 프로필에서 취소 될 수있는 토큰을 사용하는 앱 목록을 사용자에게 제공합니다.

당신을 두 번 해쉬 암호, 당신은 기본적으로 어쨌든 토큰을 생성하는 경우,하지만 악화은이 암호에 연결되며, 토큰이 손상되면, 암호를 변경해야합니다 때문입니다.

+0

당신은 그것을 sid로보고 있습니다. 나는 '기억 나'설정에 따라 만료 시간을 변경하는 것을 생각하지 않았습니다. 나는이 아이디어를 좋아한다. 일을 단순하게 유지하고 보안/편리 성 교환을 명시 적으로 만듭니다. 나는 만료 시간을 비교적 짧게 유지하고 싶었지만 기억하는 암호가 효과적으로이를 무효화하지 못하도록하지는 않았다. 누군가가 오지 않고 '단일 rehashing point'질문에 답하지 않으면이 대답을 받아 들일 것입니다. 어리석은 구현을 고려할 수도 있지만 여전히 구체적인 질문이었습니다. 정말로, 나는 한 가지 질문 만하는 법을 배워야합니다! –