다이제스트 와 기본 인증 의 차이점은 무엇입니까 ?
답변
다이제스트 인증은 사용자 이름, 암호, 서버 제공 nonce 값, HTTP 메서드 및 요청 된 URI에 해시 함수를 적용하여 암호화 된 형식으로 자격 증명을 전달합니다.
기본 인증은 암호화되지 않은 base64 인코딩을 사용합니다.
따라서 기본 인증은 일반적으로 https와 같은 전송 계층 보안이 제공되는 경우에만 사용해야합니다.
모든 세부 사항 은 RFC-2617 을 참조 하십시오.
답변
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에서 다음과 같이 보입니다.
노트 :
- 기본 및 다이제스트 제도는 사용자 이름과 암호를 사용하여 인증하기 위해 최선을 다하고 있습니다.
- 무기명 방식은 토큰을 사용하여 인증하기 위해 최선을 다하고 있습니다.
답변
(송수신 된 패킷을 분석하는 도구)를 사용하여 두 HTTP 인증 의 차이점을 보자 Wireshark
.
1. HTTP 기본 인증
웹 서버가 요청한대로 클라이언트가 올바른 username : password를 입력 하자마자 웹 서버는 신임 정보가 올바른지 데이터베이스에서 확인하고 자원에 대한 액세스 권한을 부여합니다.
패킷이 송수신되는 방법은 다음과 같습니다.
첫 번째 패킷에서 클라이언트 는 리소스에서 POST 메소드를 사용하여 자격 증명을 채 웁니다 .- lab/webapp/basicauth
서버는 http 응답 코드 200으로 응답합니다 . 즉, username : password가 정확합니다.
이제 Authorization
헤더에서 기본 권한 부여 다음에 임의의 문자열이 표시됩니다.이 문자열은 인코딩 된 (Base64) 버전의 자격 증명 admin:aadd
(콜론 포함)입니다.
2. HTTP 다이제스트 인증 (rfc 2069)
지금까지 기본 인증은 네트워크를 통해 username : password 를 일반 텍스트로 전송하지만 다이제스트 인증은 해시 알고리즘을 사용하여 비밀번호 의 HASH 를 보냅니다 .
다음은 클라이언트의 요청과 서버의 응답을 보여주는 패킷입니다.
클라이언트가 서버가 요청한 자격 증명을 입력하자마자 암호는 response
알고리즘을 사용하여 변환 된 다음 서버로 전송됩니다. 서버 데이터베이스가 클라이언트가 제공 한 것과 동일한 응답을 갖는 경우 서버는 리소스에 액세스 할 수 있습니다 그렇지 않으면 401 오류입니다.
상기에서 Authorization
상기 response
문자열의 값을 사용하여 계산되는 Username
, Realm
, Password
, http-method
, URI
및 Nonce
이미지와 같이
따라서 다이제스트 인증이 해싱 (MD5 암호화)과 관련하여 더욱 안전하다는 것을 알 수 있으므로 Basic Auth에서는 Wireshark에 정확한 비밀번호가 표시되었지만 패킷 스니퍼 도구는 비밀번호를 스니핑 할 수 없습니다.
답변
기본 인증 은 사용자 이름 및 비밀번호 정보가 포함 된 암호화 문자열을 생성 하기 위해 base 64 인코딩 을 사용 합니다.
다이제스트 액세스 인증은 해싱 방법을 사용하여 암호화 결과를 생성합니다.