다이제스트와 기본 인증의 차이점은 무엇입니까?


답변:


197

다이제스트 인증은 사용자 이름, 암호, 서버 제공 nonce 값, HTTP 메서드 및 요청 된 URI에 해시 함수를 적용하여 암호화 된 형식으로 자격 증명을 전달합니다.

기본 인증은 암호화되지 않은 base64 인코딩을 사용합니다.

따라서 기본 인증은 일반적으로 https와 같은 전송 계층 보안이 제공되는 경우에만 사용해야합니다.

모든 세부 사항 은 RFC-2617 을 참조 하십시오.


1
기본 인증은 어떻게 암호화되지 않습니까? 이 웹 사이트를 사용하여 사용자 이름 및 비밀번호 데이터를 해독했습니다. base64decode.org
Dot Freelancer

65
인코딩과 암호화는 동일하지 않습니다. 해당 사이트를 사용하여 자격 증명을 디코딩 할 수 있다는 사실은 자격 증명이 암호화되지 않았 음을 나타냅니다.
Andy

@Andy 다이제스트 인증과 암호화 인증에는 차이가 있습니까? 아니면 그들은 같은 것을 말하는가? 감사.
user224567893

1
@Andy "신임 정보 디코딩"은 무엇을 의미합니까? 해시 된 자격 증명을 해독 할 수 없습니다 ...
Alexander Suraphel

8
기본 인증은 해시 자격 증명을 사용하지 않으며 base64로 인코딩됩니다.
Andy

114

HTTP 기본 액세스 인증

  • 1 단계 : 클라이언트가 정보를 요청하고 일반 텍스트로 서버에 사용자 이름과 비밀번호를 보냅니다.
  • 2 단계 : 서버가 원하는 정보 또는 오류로 응답

기본 인증은 사용자 이름 및 비밀번호 정보가 포함 된 암호화 문자열을 생성하기 위해 base64 인코딩 (암호화 아님)을 사용합니다. HTTP Basic은 SSL을 통해 구현 될 필요는 없지만, 그렇지 않으면 전혀 안전하지 않습니다. 그래서 나는 그것을 사용하지 않고 그것을 사용한다는 생각조차 즐겁게하지 않을 것입니다.

장점 :

  • 구현이 간단하여 클라이언트 개발자가 수행해야 할 작업이 적고 제공 시간이 단축되므로 개발자가 API를 사용하고 싶어 할 가능성이 높습니다
  • Digest와는 달리, bcrypt와 같이 원하는 암호화 방법으로 서버에 암호를 저장하여 암호를보다 안전하게 만들 수 있습니다
  • 정보를 얻으려면 서버를 한 번만 호출하면 더 복잡한 인증 방법보다 클라이언트가 약간 더 빠릅니다.

단점 :

  • SSL은 기본 HTTP보다 실행 속도가 느리므로 클라이언트 속도가 약간 느려집니다.
  • 클라이언트를 제어 할 수없고 서버에서 SSL을 사용하도록 강제 할 수없는 경우 개발자가 SSL을 사용하지 않아 보안 위험이 발생할 수 있습니다.

요약 하면 – 클라이언트를 제어하거나 SSL을 사용할 수있는 경우 HTTP 기본을 선택하는 것이 좋습니다. 하나의 요청 만하는 속도로 SSL의 속도 저하를 취소 할 수 있습니다.

기본 인증의 구문

Value = username:password
Encoded Value =  base64(Value)
Authorization Value = Basic <Encoded Value> 
//at last Authorization key/value map added to http header as follows
Authorization: <Authorization Value>

HTTP 다이제스트 액세스 인증
다이제스트 액세스 인증은 해싱 (즉, 다이제스트 수단을 작은 조각으로 잘라 냄) 방법을 사용하여 암호화 결과를 생성합니다. HTTP 다이제스트 액세스 인증은 다음과 같이 작동하는보다 복잡한 형태의 인증입니다.

  • 1 단계 : 클라이언트가 서버에 요청을 보냅니다.
  • 2 단계 : 서버가 특수 코드 (즉, n은 암갈색에만 사용 한 번 나타내는 다른 문자열) 영역 (해시) 및 인증에 클라이언트 요청
  • 3 단계 : 클라이언트가이 nonce와 암호화 된 버전의 사용자 이름, 비밀번호 및 영역 (해시)으로 응답
  • 4 단계 : 클라이언트 해시가 사용자 이름, 비밀번호 및 영역의 자체 해시와 일치하는 경우 서버가 요청 된 정보로 응답하거나 그렇지 않은 경우 오류

장점 :

  • 일반 텍스트로 서버에 사용자 이름 또는 비밀번호가 전송되지 않으므로 SSL을 통해 전송되지 않은 HTTP 기본 요청보다 비 SSL 연결이 더 안전합니다. 즉, SSL이 필요하지 않으므로 각 호출이 약간 빨라집니다.

단점 :

  • 필요한 모든 호출에 대해 클라이언트는 2를 작성해야하므로 프로세스가 HTTP Basic보다 약간 느려집니다.
  • HTTP 다이제스트는 중간자 보안 공격에 취약하므로 기본적으로 해킹 당할 수 있습니다
  • HTTP Digest는 강력한 암호 암호화 사용을 방지하여 서버에 저장된 암호가 해킹 될 수 있음을 의미합니다.

요약 하면 HTTP 다이제스트는 본질적으로 두 가지 이상의 공격에 취약하지만 SSL을 통한 HTTP 기본 암호로 강력한 암호화를 사용하는 서버는 이러한 취약점을 공유 할 가능성이 적습니다.

그러나 클라이언트를 제어 할 수없는 경우 SSL없이 기본 인증을 시도 할 수 있습니다. 이는 다이제스트보다 훨씬 덜 안전합니다.

RFC 2069 다이제스트 액세스 인증 구문

Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:Hash2)

RFC 2617 다이제스트 액세스 인증 구문

Hash1=MD5(username:realm:password)
Hash2=MD5(method:digestURI)
response=MD5(Hash1:nonce:nonceCount:cnonce:qop:Hash2)
//some additional parameters added 

소스예제

Postman에서 다음과 같이 보입니다.

여기에 이미지 설명을 입력하십시오

노트 :

  • 기본 및 다이제스트 제도는 사용자 이름과 암호를 사용하여 인증하기 위해 최선을 다하고 있습니다.
  • 무기명 방식은 토큰을 사용하여 인증하기 위해 최선을 다하고 있습니다.

1
웹 서버에서 클라이언트를 제어 할 수없는 경우에도 모든 http 요청에 대해 https로 리디렉션 할 수 없습니까?
10cool

그러나 나는 그것에 대해 더 많이 생각합니다. 그들이 http를 통해 자격 증명을 제출하고 사이트로 이동한다고 가정하면 리디렉션 할 수 있지만 악의적 인 사이트를 방문하면 도움을 줄 수 없습니다.
10cool

3
다이제스트를 사용하여 데이터베이스에 저장하기 전에 비밀번호를 암호화 할 수없는 이유는 무엇입니까?
papiro

선택한 답변이 질문에 더 가깝지만,이 답변은 시작되지 않은 답변에 대한 장단점을 제공하므로이 답변이 마음에 듭니다.
coder0h1t

1
@ 10cool http로 웹 사이트를 방문하면 너무 늦었습니다. 불행히도. 사용자 : 패스가 방금 httpS로 리디렉션 되더라도 이미 유선으로 명확하게 전송되었습니다.
Julien

41

(송수신 된 패킷을 분석하는 도구)를 사용하여 두 HTTP 인증 의 차이점을 보자 Wireshark.

1. HTTP 기본 인증

기본

웹 서버가 요청한대로 클라이언트가 올바른 username : password를 입력 하자마자 웹 서버는 신임 정보가 올바른지 데이터베이스에서 확인하고 자원에 대한 액세스 권한을 부여합니다.

패킷이 송수신되는 방법은 다음과 같습니다.

여기에 이미지 설명을 입력하십시오 첫 번째 패킷에서 클라이언트 는 리소스에서 POST 메소드를 사용하여 자격 증명을 채 웁니다 .- lab/webapp/basicauth서버는 http 응답 코드 200으로 응답합니다 . 즉, username : password가 정확합니다.

HTTP 패킷의 세부 사항

이제 Authorization헤더에서 기본 권한 부여 다음에 임의의 문자열이 표시됩니다.이 문자열은 인코딩 된 (Base64) 버전의 자격 증명 admin:aadd(콜론 포함)입니다.

2. HTTP 다이제스트 인증 (rfc 2069)

지금까지 기본 인증은 네트워크를 통해 username : password 를 일반 텍스트로 전송하지만 다이제스트 인증은 해시 알고리즘을 사용하여 비밀번호 의 HASH 를 보냅니다 .

다음은 클라이언트의 요청과 서버의 응답을 보여주는 패킷입니다.

요람

클라이언트가 서버가 요청한 자격 증명을 입력하자마자 암호는 response알고리즘을 사용하여 변환 된 다음 서버로 전송됩니다. 서버 데이터베이스가 클라이언트가 제공 한 것과 동일한 응답을 갖는 경우 서버는 리소스에 액세스 할 수 있습니다 그렇지 않으면 401 오류입니다.

자세한 다이제스트 인증 패킷 상기에서 Authorization상기 response문자열의 값을 사용하여 계산되는 Username, Realm, Password, http-method, URINonce이미지와 같이

응답 알고리즘 (콜론 포함)

따라서 다이제스트 인증이 해싱 (MD5 암호화)과 관련하여 더욱 안전하다는 것을 알 수 있으므로 Basic Auth에서는 Wireshark에 정확한 비밀번호가 표시되었지만 패킷 스니퍼 도구는 비밀번호를 스니핑 할 수 없습니다.


6
차트에 대해 더 유익하고 유익한 답변이므로 받아 들일만한 대답이어야합니다.
mak

그러나 wireshark에서는 http 프로토콜을 사용하여 패킷을 스니핑 만합니까? https 프로토콜을 사용하는 경우 어떻게됩니까?
JohnRDOrazio

wireshark에 의해 Http 또는 Https를 스니핑할지 여부는 결정되지 않습니다. 프로토콜로 구성된 웹 서버입니다.
BoRRis

1
무의미한 말. 기본 인증은 HTTPS를 통해서만 사용해야합니다. 실제 비교는 HTTPS를 통한 기본 인증 대 HTTP를 통한 다이제스트 인증입니다. 요즘 웹 사이트가 모든 트래픽을 암호화하는 것처럼 HTTPS를 통해 기본 인증을 사용할 수도 있습니다.
길리

-3

기본 인증 은 사용자 이름 및 비밀번호 정보가 포함 된 암호화 문자열을 생성 하기 위해 base 64 인코딩 을 사용 합니다.

다이제스트 액세스 인증은 해싱 방법을 사용하여 암호화 결과를 생성합니다.


1
기본 64 인코딩은 암호화되지 않습니다.
Thomas Sobieck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.