2012-09-18 3 views
3

안심하고 빠른 인증 방법을 제공하는 것이 가능한지 궁금합니다. 나는 고객의 서버에 유효한 SSL 인증서에 의존 할 수 없기 때문에REST (ful) SSL 및 HMAC없이 간단한 인증?

SSL은 옵션이 아닙니다. 또한 HMAC는 요청의 본문에 서명해야하므로 실제로 사용할 수 없지만 본문은 큰 파일 일 수 있습니다. 또한 JavaScript/AJAX로 인증이 가능해야합니다.

나는 정말 간단하다고 생각했습니다.

HEADER : X-인증 : 타임 스탬프 : 사용자 이름 : SHA256 하나의 문제 기능 (타임 스탬프 : 암호)

서버가 사용자 암호를 알고 해시를 확인할 수 있습니다, 타임 스탬프 만 허용하는 데 사용됩니다 요청은 예를 들어 일어났다. 10 초 전에. 재생 창이 극도로 작아서 서버 측에 세션이 없습니다.

해시가 손상된 경우 공격자는 암호를 알고 무제한 액세스 할 수 있습니다.

대안

HEADER를 사용하는 것입니다 : X-인증 : 타임 스탬프 : 사용자 이름 : HMAC (비밀번호, '타임 스탬프 + 요청 방법 + 동사')

갈 수있는 방법은 무엇입니까? 나는 보안 전문가가 아니며 서버에 세션을 저장하는 것이 더 좋을 수도 있지만 (RESTful은 아님)? 당신이 당신의 자신의 메커니즘을 발명 할 수 있도록

+0

HTTP 다이제스트 인증의 일부 기능을 모방하려는 것 같습니다. SSL을 사용하지 않는다면 (브라우저가 기본적으로 지원하는 대신) 일부 스크립트에 의해 브라우저에 전달되는 인증 메커니즘은 MITM 공격에 효과적으로 취약하다는 것을 기억하십시오. – Bruno

답변

1

HTTP 인증은 확장 가능 (모든 책임은 분명히!). 자세한 내용은 http://tools.ietf.org/html/draft-ietf-httpbis-p7-auth-20을 참조하십시오.

새로운 X- 헤더를 고안하지 마십시오. 스키마에 기존 Authorization 헤더를 사용하는 것이 더 좋습니다. 예 :

Authorization: kruemel-auth timestamp:HMAC(password, 'timestamp+request-method+verb') 

이상적인 새로운 체계가 사양과 함께 IANA에 등록됩니다. 레지스트리는 개발 된 인증 스키마를 추적하도록 설정 중입니다. 나는 그것이 jAuthenticate라고, 당신이 필요 않는 임의의 해시 알고리즘을 내장 http://tools.ietf.org/id/draft-ietf-httpbis-authscheme-registrations-03.html

3

참조하십시오. 그것은 여기에 어떻게 작동하는지 당신이 볼 수 https://github.com/thomasoeser/jAuthenticate

:

당신은에서 다운로드 할 수 있습니다 http://furiousgryphon.com/jauthenticatedemo.html

는 (내 생각에) 강력한 알고리즘의 이유 것은 내가 임의의 번호를 사용하고 있다는 것입니다 해시에 영향을 주지만 해시가있는 난독 화 번호를 보내고 있습니다.

각 해시는 일회용입니다.

보세요, 무료 오픈 소스 (MIT)입니다.