다이제스트 인증이란 무엇입니까?


101

다이제스트 인증은 일반 텍스트로 자격 증명을 보내는 것 외에 기본 인증과 어떻게 다릅니 까?


1
여기 @Gumbo에 의해 위대한 설명 : stackoverflow.com/a/5288679/591487
inorganik

2
절대 사용해서는 안되는 것. 전송중인 비밀번호를 보호하지 않으며 서버가 비밀번호를 일반에 저장해야합니다.
CodesInChaos 2015-07-31

2
다이제스트는 암호화되지 않은 트래픽에 대해 기본 인증보다 더 나은 전송 중 보안을 제공 하지만 취약합니다. 대신 SSL / TLS와 함께 기본 인증을 사용하는 것이 훨씬 안전합니다. 그렇게하면 서버의 암호를 암호화 된 상태로 유지할 수도 있기 때문입니다.
rustyx

답변:


179

주요 차이점은 사용자 이름과 암호를 일반 텍스트로 전송할 필요가 없다는 것입니다. 또한 서버에서 일회성 번호를 사용하기 때문에 리플레이 공격에 영향을받지 않습니다.

서버는 클라이언트에게 사용자 이름, 영역, 암호 및 URI 요청과 결합 된 일회성 사용 번호 (논스)를 제공합니다. 클라이언트는 MD5 해싱 방법을 통해 이러한 모든 필드를 실행하여 해시 키를 생성합니다.

인증을 시도하기 위해 사용자 이름 및 영역과 함께이 해시 키를 서버에 보냅니다.

서버 측에서는 동일한 방법을 사용하여 해시 키를 생성합니다. 브라우저에 입력 한 암호를 사용하는 대신 서버는 사용자 DB에서 사용자의 예상 암호를 조회합니다. 이 사용자 이름에 대해 저장된 암호를 검색하고 동일한 알고리즘을 통해 실행되며 클라이언트가 보낸 것과 비교합니다. 일치하면 액세스 권한이 부여됩니다. 그렇지 않으면 401 Unauthorized (로그인 없음 또는 로그인 실패) 또는 403 Forbidden (액세스 거부)을 다시 보낼 수 있습니다.

다이제스트 인증은 RFC2617에 표준화되어 있습니다. 있다 위키 백과에 그것의 좋은 개요 :

다음과 같이 생각할 수 있습니다.

  1. 고객이 요청
  2. 클라이언트가 서버에서 임시 값을 받고 401 인증 요청을받습니다.
  3. 클라이언트는 다음 응답 배열을 다시 보냅니다 (username, realm, generate_md5_key (nonce, username, realm, URI, password_given_by_user_to_browser)) (예, 매우 간단합니다)
  4. 서버는 사용자 이름과 영역 (클라이언트가 요청하는 URI도 알고 있음)을 가져와 해당 사용자 이름의 암호를 찾습니다. 그런 다음 자체 버전의 generate_md5_key (nonce, username, realm, URI, password_I_have_for_this_user_in_my_db)를 수행합니다.
  5. 클라이언트가 보낸 암호와 일치하는 경우받은 generate_md5 ()의 출력을 클라이언트가 보낸 결과와 비교합니다. 그들이 일치하지 않으면 보낸 암호가 잘못되었습니다.

좋은 설명입니다. Windows 사용자의 사용자 이름과 비밀번호가 있습니까? 어디에서 생성됩니까?
SoftwareGeek

사용자가 브라우저에 입력하는 내용입니다. 암호는 해당 사용자의 암호에 대해 서버가 저장 한 것과 일치해야합니다. Windows 암호가 아닌 해당 웹 응용 프로그램에 특정한 것일 가능성이 큽니다. 그것은 웹 애플리케이션이 결합되는 방식에 따라 크게 달라집니다.
Ian C.

14
이 답변은 6 년 전이지만 지금 쯤이면 모든 보안 인식 시스템이 암호를 솔 티드 해시 형식으로 저장한다고 생각합니다. 다이제스트 인증을 불가능하게 만드는 데이터베이스에서 원래 암호를 얻는 방법이 없으며, 없어야합니다.
Ramon de Klein

3
사용자 이름과 암호의 다이제스트 해시가 일반 암호 대신 db에 저장되어있는 경우에도 다이제스트 인증을 사용할 수 있습니다. @RamondeKlein
karakays

1
@BlueBockser karakays는 일반 암호를 사용하는 대신 사용자 이름과 암호를 결합하여 생성 된 해시 를 가입 할 때 서버에 저장하고 인증하기 전에 클라이언트 측에서 계산해야 함을 의미한다고 생각 합니다. 암호의 해시만으로도 수행 할 수 있습니다.
logo_writer

14

자격 증명의 해시가 유선을 통해 전송됩니다.

HA1 = MD5(username:realm:password)

Wikipedia에는이 주제에 대한 훌륭한 기사가 있습니다.


클라이언트에서 서버로? 상호 작용을위한 단계를 알려주시겠습니까? Wikipedia 기사는 좋지만 더 나은 설명이나 예가 필요합니다.
SoftwareGeek

예, 클라이언트는 해시 값을 생성하여 서버로 보냅니다. Wikipedia 기사는 프로토콜에 대해 자세히 설명합니다. 자세한 내용은 해당 프로토콜을 참조하시기 바랍니다.
Philip Fourie

1

자격 증명의 해시 HA1을 얻는 유일한 방법은 암호를 아는 것입니다. 서버는 HA1을 알고 있지만이를 생성 한 암호는 알지 못합니다. HA1이 공격자에게 알려진 경우 시스템에 침입 할 수 있습니다. 그래서 그것은 전선으로 보내지지 않습니다. 이 작업을 수행하기 전에 nonce 등에 기반한 추가 해시가 수행되며 이는 서버에서 수행되는 유사한 계산과 일치해야합니다. 따라서 서버가 HA1을 비공개로 유지하는 한 시스템은 안전합니다.


이 암호 (기본 인증의 경우 인) 일반 텍스트로 전송되지 않습니다 다이제스트 인증에 대한 설명입니다
에릭 Oppedijk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.