다이제스트 인증은 일반 텍스트로 자격 증명을 보내는 것 외에 기본 인증과 어떻게 다릅니 까?
답변
주요 차이점은 사용자 이름과 암호를 일반 텍스트로 전송할 필요가 없다는 것입니다. 또한 서버에서 일회성 번호를 사용하기 때문에 리플레이 공격에 영향을받지 않습니다.
서버는 클라이언트에게 사용자 이름, 영역, 암호 및 URI 요청과 결합 된 일회성 사용 번호 (논스)를 제공합니다. 클라이언트는 MD5 해싱 방법을 통해 이러한 모든 필드를 실행하여 해시 키를 생성합니다.
인증을 시도하기 위해 사용자 이름 및 영역과 함께이 해시 키를 서버에 보냅니다.
서버 측에서는 동일한 방법을 사용하여 해시 키를 생성합니다. 브라우저에 입력 한 암호를 사용하는 대신 서버는 사용자 DB에서 사용자의 예상 암호를 조회합니다. 이 사용자 이름에 대해 저장된 암호를 검색하고 동일한 알고리즘을 통해 실행되며 클라이언트가 보낸 것과 비교합니다. 일치하면 액세스 권한이 부여됩니다. 그렇지 않으면 401 Unauthorized (로그인 없음 또는 로그인 실패) 또는 403 Forbidden (액세스 거부)을 다시 보낼 수 있습니다.
다이제스트 인증은 RFC2617에 표준화되어 있습니다. 있다 위키 백과에 그것의 좋은 개요 :
다음과 같이 생각할 수 있습니다.
- 고객이 요청
- 클라이언트가 서버에서 임시 값을 받고 401 인증 요청을받습니다.
- 클라이언트는 다음 응답 배열을 다시 보냅니다 (username, realm, generate_md5_key (nonce, username, realm, URI, password_given_by_user_to_browser)) (예, 매우 간단합니다)
- 서버는 사용자 이름과 영역 (클라이언트가 요청하는 URI도 알고 있음)을 가져와 해당 사용자 이름의 암호를 찾습니다. 그런 다음 자체 버전의 generate_md5_key (nonce, username, realm, URI, password_I_have_for_this_user_in_my_db)를 수행합니다.
- 클라이언트가 보낸 암호와 일치하는 경우받은 generate_md5 ()의 출력을 클라이언트가 보낸 결과와 비교합니다. 그들이 일치하지 않으면 보낸 암호가 잘못되었습니다.
답변
답변
자격 증명의 해시 HA1을 얻는 유일한 방법은 암호를 아는 것입니다. 서버는 HA1을 알고 있지만이를 생성 한 암호는 알지 못합니다. HA1이 공격자에게 알려진 경우 시스템에 침입 할 수 있습니다. 그래서 그것은 전선으로 보내지지 않습니다. 이 작업을 수행하기 전에 nonce 등에 기반한 추가 해시가 수행되며 이는 서버에서 수행되는 유사한 계산과 일치해야합니다. 따라서 서버가 HA1을 비공개로 유지하는 한 시스템은 안전합니다.