it-swarm-ko.tech

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

DigestBasic 인증의 차이점은 무엇입니까?

167
Dot Freelancer

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

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

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

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

171
Andy

HTTP 기본 액세스 인증

  • STEP 1: 클라이언트가 정보를 요청하고 사용자 이름과 비밀번호를 일반 텍스트로 서버에 보냅니다.
  • STEP 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 다이제스트 액세스 인증은 다음과 같이 작동하는보다 복잡한 형태의 인증입니다.

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

프로 :

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

단점 :

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

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

그러나 클라이언트를 제어 할 수없는 경우 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 

sourceexample

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

enter image description here

참고 :

  • 기본 및 다이제스트 구성표는 사용자 이름과 암호를 사용한 인증 전용입니다.
  • Bearer scheme은 토큰을 사용한 인증 전용입니다.
94
Premraj

Wireshark (송수신 된 패킷을 분석하는 도구)을 사용하여 두 개의 HTTP 인증의 차이점을 살펴 보겠습니다.

1. Http 기본 인증

Basic

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

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

enter image description here 첫 번째 패킷에서 클라이언트는 자원-lab/webapp/basicauth에서 POST 메소드를 사용하여 신임 정보를 채 웁니다. 서버가 http 응답 코드로 응답합니다. 200 ok 즉, username : password가 정확했습니다.

Detail of HTTP packet

이제 Authorization 헤더에서 Basic Authorization 다음에 임의의 문자열이 있음을 나타냅니다.이 문자열은 로 인코딩 된 (Base64) 자격 증명 버전 admin:aadd (콜론 포함).

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

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

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

Digest

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

Detailed digest auth packet 위의 Authorization에서 response 문자열은 이미지에 표시된대로 Username, Realm, Password, http-method, URINonce 값을 사용하여 계산됩니다.

Response algorithm (콜론 포함)

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

34
BoRRis

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

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

0
chetan chaphekar