Qual é a diferença entre autenticação Digest e autenticação básica?

Respostas:

194

A Autenticação Digest comunica credenciais de forma criptografada aplicando uma função de hash para: o nome de usuário, a senha, um valor fornecido pelo servidor, o método HTTP e o URI solicitado.

Enquanto a autenticação básica usa codificação base64 não criptografada .

Portanto, a autenticação básica geralmente só deve ser usada onde a segurança da camada de transporte é fornecida, como https.

Veja RFC-2617 para todos os detalhes sangrentos.

Andy
fonte
1
como a autenticação básica não é criptografada? Eu usei esse site para decodificar o nome de usuário e senha de dados base64decode.org
Dot Freelancer
65
Codificação e criptografia não são a mesma coisa. O fato de você conseguir decodificar as credenciais usando esse site mostra que elas não são criptografadas.
Andy
@ Andy Existe uma diferença entre autenticação Digest e autenticação criptográfica? Ou eles estão se referindo à mesma coisa? Obrigado.
user224567893
1
@ Andy, o que você quer dizer com "decodificar as credenciais"? As credenciais em hash não podem ser decodificadas ...
Alexander Suraphel
8
Certo, e a autenticação básica não usa credenciais com hash, elas são codificadas em base64.
Andy
111

Autenticação de acesso básico HTTP

  • PASSO 1 : o cliente solicita informações, enviando um nome de usuário e senha para o servidor em texto sem formatação
  • PASSO 2 : o servidor responde com as informações desejadas ou com um erro

A autenticação básica usa a codificação base64 (não criptografia) para gerar nossa cadeia criptográfica que contém as informações de nome de usuário e senha. O HTTP Basic não precisa ser implementado sobre SSL, mas se você não o fizer, não será seguro. Então, eu nem vou aceitar a ideia de usá-lo sem.

Prós:

  • É simples de implementar, para que os desenvolvedores do cliente tenham menos trabalho a fazer e levem menos tempo para entregar, portanto, é mais provável que os desenvolvedores desejem usar sua API
  • Ao contrário do Digest, você pode armazenar as senhas no servidor do método de criptografia que desejar, como o bcrypt, tornando as senhas mais seguras
  • É necessária apenas uma chamada para o servidor para obter as informações, tornando o cliente um pouco mais rápido que os métodos de autenticação mais complexos.

Contras:

  • O SSL é mais lento que o HTTP básico, portanto, isso faz com que os clientes fiquem um pouco mais lentos
  • Se você não tem controle dos clientes e não pode forçar o servidor a usar SSL, um desenvolvedor pode não usar SSL, causando um risco à segurança

Em resumo - se você tem controle dos clientes ou pode garantir que eles usem SSL, o HTTP Basic é uma boa opção. A lentidão do SSL pode ser cancelada pela velocidade de fazer apenas uma solicitação

Sintaxe da autenticação básica

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>

Autenticação HTTP Digest Access A Autenticação
Digest Access usa as metodologias de hash (isto é, digerir significa cortado em pedaços pequenos) para gerar o resultado criptográfico. A autenticação de acesso HTTP Digest é uma forma mais complexa de autenticação que funciona da seguinte maneira:

  • PASSO 1 : um cliente envia uma solicitação para um servidor
  • PASSO 2 : o servidor responde com um código especial (chamado deou seja, n úmero usado apenas uma vez ), uma outra sequência que representa o domínio (hash) e pede ao cliente para autenticar
  • PASSO 3 : o cliente responde com este nonce e uma versão criptografada do nome de usuário, senha e região (um hash)
  • ETAPA 4 : o servidor responde com as informações solicitadas se o hash do cliente corresponder ao seu próprio hash do nome de usuário, senha e região, ou um erro se não houver

Prós:

  • Nenhum nome de usuário ou senha é enviado ao servidor em texto sem formatação, tornando uma conexão não SSL mais segura que uma solicitação HTTP Basic que não é enviada por SSL. Isso significa que o SSL não é necessário, o que torna cada chamada um pouco mais rápida

Contras:

  • Para cada chamada necessária, o cliente deve fazer 2, tornando o processo um pouco mais lento que o HTTP Basic
  • O HTTP Digest é vulnerável a um ataque de segurança intermediário, o que basicamente significa que ele pode ser invadido
  • O HTTP Digest impede o uso da criptografia de senha forte, o que significa que as senhas armazenadas no servidor podem ser invadidas

Em suma , o HTTP Digest é inerentemente vulnerável a pelo menos dois ataques, enquanto um servidor que usa criptografia forte para senhas com HTTP Basic sobre SSL tem menos probabilidade de compartilhar essas vulnerabilidades.

Se você não tiver controle sobre seus clientes, eles poderão tentar executar a autenticação básica sem SSL, o que é muito menos seguro que o Digest.

Sintaxe de autenticação de acesso de resumo RFC 2069

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

Sintaxe de autenticação de acesso de resumo RFC 2617

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

fonte e exemplo

No Postman, é o seguinte:

insira a descrição da imagem aqui

Nota:

  • Os esquemas Básico e Digest são dedicados à autenticação usando um nome de usuário e um segredo.
  • O esquema Portador é dedicado à autenticação usando um token.
Premraj
fonte
1
No seu servidor da Web, você não pode apenas redirecionar para https para todas as solicitações HTTP, mesmo que você não tenha controle dos clientes?
10cool
Mais eu penso sobre isso mais, no entanto, entendo o seu ponto. Supondo que eles enviem credenciais por meio de http e acessem seu site, você poderá redirecionar, mas se eles acessarem um site malicioso, você não poderá ajudar.
10cool
3
Por que, com o Digest, você não pode criptografar sua senha antes de armazenar no banco de dados e, ao retirá-la, descriptografá-la?
papiro
Embora a resposta selecionada esteja mais próxima da pergunta, eu gosto dessa resposta, pois fornece prós e contras para nós, não iniciados.
coder0h1t
1
@ 10cool Depois de acessar o site com http, é tarde demais ... infelizmente. o usuário: passe já foi enviado de forma clara, ainda que você seja redirecionado para o httpS logo após.
Julien
41

Vamos ver a diferença entre as duas autenticação HTTP usando Wireshark(Ferramenta para analisar pacotes enviados ou recebidos).

1. Autenticação Básica HTTP

Basic

Assim que o cliente digitar o nome de usuário correto : password , conforme solicitado pelo servidor da Web, o servidor da Web verifica no banco de dados se as credenciais estão corretas e fornece acesso ao recurso.

Aqui está como os pacotes são enviados e recebidos:

insira a descrição da imagem aqui No primeiro pacote, o Cliente preenche as credenciais usando o método POST no recurso - lab/webapp/basicauth.Em retorno, o servidor responde com o código de resposta http 200 ok , ou seja, o nome de usuário: senha estava correto.

Detalhe do pacote HTTP

Agora, no Authorizationcabeçalho, mostra que é a Autorização Básica, seguida por uma sequência aleatória. Essa sequência é a versão codificada (Base64) das credenciais admin:aadd(incluindo dois pontos).

2) Autenticação Digest HTTP (rfc 2069)

Até agora, vimos que a autenticação básica envia nome de usuário: senha em texto sem formatação pela rede. Mas o Digest Auth envia um HASH da senha usando o algoritmo Hash.

Aqui estão os pacotes mostrando as solicitações feitas pelo cliente e a resposta do servidor.

Digerir

Assim que o cliente digita as credenciais solicitadas pelo servidor, a Senha é convertida em um responseusando um algoritmo e, em seguida, é enviada ao servidor. Se o banco de dados do servidor tiver a mesma resposta que o cliente, o servidor concederá o acesso ao recurso. , caso contrário, um erro 401 .

Pacote de autenticação de resumo detalhado No exemplo acima Authorization, a responsecadeia é calculada utilizando os valores de Username, Realm, Password, http-method, URIe Noncecomo mostrado na imagem:

Algoritmo de resposta (dois pontos estão incluídos)

Portanto, podemos ver que a Autenticação Digest é mais segura, pois envolve Hashing (criptografia MD5). Portanto, as ferramentas de detecção de pacotes não conseguem detectar a Senha, embora em Autenticação Básica a Senha exata seja mostrada no Wireshark.

BoRRis
fonte
6
Essa deve ser a resposta aceita, pois é mais informativa e elogia os gráficos.
mak
Mas no wireshark você está apenas farejando pacotes usando o protocolo http? E se você estivesse usando o protocolo https?
JohnRDOrazio 12/02/19
Não é decidido pelo wireshark se deve cheirar Http ou Https. É o servidor da web configurado com protocolos.
BoRRis 12/02/19
1
Absurdo. A autenticação básica destina-se apenas a ser usada em HTTPS. Portanto, a comparação real é a autenticação básica por HTTPS versus a autenticação Digest por HTTP. Como os sites estão criptografando todo o tráfego atualmente, você também pode usar a autenticação básica por HTTPS.
Gili
-3

A autenticação básica usa a codificação base 64 para gerar uma seqüência criptográfica que contém as informações de nome de usuário e senha.

A Autenticação de Acesso Digest usa as metodologias de hash para gerar o resultado criptográfico

chetan chaphekar
fonte
1
a codificação da base 64 não é criptográfica.
Thomas Sobieck 26/09/19