¿Cuál es la diferencia entre la autenticación implícita y la autenticación básica?

Respuestas:

195

La autenticación implícita comunica las credenciales en forma cifrada mediante la aplicación de una función hash a: el nombre de usuario, la contraseña, un valor nonce proporcionado por el servidor, el método HTTP y el URI solicitado.

Mientras que la autenticación básica utiliza codificación base64 no encriptada .

Por lo tanto, la autenticación básica generalmente solo debe usarse donde se proporciona seguridad de la capa de transporte, como https.

Ver RFC-2617 para todos los detalles sangrientos.

Andy
fuente
1
¿Cómo no se cifra la autenticación básica? He utilizado esta página web para decodificar el nombre de usuario y contraseña de los datos base64decode.org
Dot Freelancer
65
La codificación y el cifrado no son lo mismo. El hecho de que pueda decodificar las credenciales usando ese sitio muestra que no están encriptadas.
Andy
@Andy ¿Hay alguna diferencia entre la autenticación implícita y la autenticación criptográfica? ¿O se refieren a lo mismo? Gracias.
user224567893
1
@ Andy, ¿qué quieres decir con "decodificar las credenciales"? Las credenciales hash no se pueden decodificar ...
Alexander Suraphel
8
Correcto, y la autenticación básica no usa credenciales hash, están codificadas en base64.
Andy
111

Autenticación de acceso básico HTTP

  • PASO 1 : el cliente realiza una solicitud de información, enviando un nombre de usuario y contraseña al servidor en texto sin formato
  • PASO 2 : el servidor responde con la información deseada o un error

La autenticación básica utiliza la codificación base64 (no el cifrado) para generar nuestra cadena criptográfica que contiene la información de nombre de usuario y contraseña. HTTP Basic no necesita implementarse sobre SSL, pero si no lo hace, no es seguro en absoluto. Así que ni siquiera voy a entretener la idea de usarlo sin él.

Pros:

  • Es simple de implementar, por lo que los desarrolladores de sus clientes tendrán menos trabajo que hacer y tomarán menos tiempo para entregar, por lo que es más probable que los desarrolladores quieran usar su API
  • A diferencia de Digest, puede almacenar las contraseñas en el servidor en cualquier método de cifrado que desee, como bcrypt, para que las contraseñas sean más seguras
  • Solo se necesita una llamada al servidor para obtener la información, lo que hace que el cliente sea un poco más rápido que los métodos de autenticación más complejos.

Contras:

  • SSL es más lento de ejecutar que HTTP básico, por lo que esto hace que los clientes sean un poco más lentos
  • Si no tiene el control de los clientes y no puede forzar al servidor a usar SSL, un desarrollador podría no usar SSL, lo que ocasiona un riesgo de seguridad

En resumen : si tiene el control de los clientes o puede asegurarse de que usan SSL, HTTP Basic es una buena opción. La lentitud de SSL se puede cancelar con la velocidad de solo hacer una solicitud

Sintaxis de autenticación 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>

Autenticación de acceso de resumen HTTP La autenticación de acceso de
resumen utiliza las metodologías de hash (es decir, resumen significa cortar en trozos pequeños) para generar el resultado criptográfico. La autenticación de acceso HTTP Digest es una forma más compleja de autenticación que funciona de la siguiente manera:

  • PASO 1 : un cliente envía una solicitud a un servidor
  • PASO 2 : el servidor responde con un código especial (llamadoes decir, un número utilizado solo una vez ), otra cadena que representa el reino (un hash) y le pide al cliente que se autentique
  • PASO 3 : el cliente responde con este nonce y una versión encriptada del nombre de usuario, contraseña y dominio (un hash)
  • PASO 4 : el servidor responde con la información solicitada si el hash del cliente coincide con su propio hash del nombre de usuario, contraseña y reino, o un error si no

Pros:

  • No se envían nombres de usuario o contraseñas al servidor en texto sin formato, lo que hace que una conexión que no sea SSL sea más segura que una solicitud HTTP básica que no se envía a través de SSL. Esto significa que no se requiere SSL, lo que hace que cada llamada sea un poco más rápida

Contras:

  • Para cada llamada necesaria, el cliente debe hacer 2, haciendo que el proceso sea un poco más lento que HTTP Basic
  • HTTP Digest es vulnerable a un ataque de seguridad de hombre en el medio, lo que básicamente significa que podría ser pirateado
  • HTTP Digest evita el uso del cifrado de contraseña segura, lo que significa que las contraseñas almacenadas en el servidor podrían ser pirateadas

En resumen , HTTP Digest es inherentemente vulnerable a al menos dos ataques, mientras que un servidor que utiliza un cifrado seguro para contraseñas con HTTP Basic sobre SSL es menos probable que comparta estas vulnerabilidades.

Sin embargo, si no tiene control sobre sus clientes, podrían intentar realizar la autenticación básica sin SSL, que es mucho menos seguro que Digest.

RFC 2069 Sintaxis de autenticación de acceso implícito

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

RFC 2617 Sintaxis de autenticación de acceso implícito

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

fuente y ejemplo

En Cartero se ve de la siguiente manera:

ingrese la descripción de la imagen aquí

Nota:

  • Los esquemas Basic y Digest están dedicados a la autenticación utilizando un nombre de usuario y un secreto.
  • El esquema de portador está dedicado a la autenticación utilizando un token.
Premraj
fuente
1
En su servidor web, ¿no podría simplemente redirigir a https para todas las solicitudes http, incluso si no tiene el control de los clientes?
10cool
Más lo pienso más, sin embargo, entiendo tu punto. Suponiendo que presenten sus credenciales a través de http y lleguen a su sitio, puede redirigir, pero si llegan a un sitio malicioso, no puede ayudar.
10cool
3
¿Por qué, con Digest, no puede cifrar su contraseña antes de almacenarla en la base de datos y, al extraerla, descifrarla?
papiro
Aunque la respuesta seleccionada está más cerca de la pregunta, me gusta esta respuesta, ya que nos da ventajas y desventajas para los no iniciados.
coder0h1t
1
@ 10cool una vez que ingresas al sitio web con http, es demasiado tarde ... desafortunadamente. el usuario: el pase ya se ha enviado en claro en el cable, incluso si se lo redirige a httpS justo después.
Julien
41

Veamos la diferencia entre las dos autenticaciones HTTP usando Wireshark(Herramienta para analizar paquetes enviados o recibidos).

1. Autenticación básica HTTP

Básico

Tan pronto como el cliente ingrese el nombre de usuario correcto : contraseña , según lo solicitado por el servidor web, el servidor web verifica en la base de datos si las credenciales son correctas y le da acceso al recurso.

Así es como se envían y reciben los paquetes:

ingrese la descripción de la imagen aquí En el primer paquete, el Cliente completa las credenciales utilizando el método POST en el recurso: a lab/webapp/basicauthcambio, el servidor responde con el código de respuesta http 200 ok , es decir, el nombre de usuario: contraseña era correcta.

Detalle del paquete HTTP

Ahora, en el Authorizationencabezado muestra que es Autorización básica seguida de una cadena aleatoria. Esta cadena es la versión codificada (Base64) de las credenciales admin:aadd(incluidos los dos puntos).

2) Autenticación de resumen HTTP (rfc 2069)

Hasta ahora hemos visto que la autenticación básica envía nombre de usuario: contraseña en texto plano a través de la red. Pero la autenticación implícita envía un HASH de la contraseña utilizando el algoritmo Hash.

Aquí hay paquetes que muestran las solicitudes realizadas por el cliente y la respuesta del servidor.

Digerir

Tan pronto como el cliente ingrese las credenciales solicitadas por el servidor, la contraseña se convierte responsemediante un algoritmo y luego se envía al servidor. Si la base de datos del servidor tiene la misma respuesta que el cliente, el servidor da acceso al recurso , de lo contrario, un error 401 .

Paquete de autenticación de resumen detallado En lo anterior Authorization, la responsecadena se calcula utilizando los valores de Username, Realm, Password, http-method, URIy Noncecomo se muestra en la imagen:

Algoritmo de respuesta (se incluyen dos puntos)

Por lo tanto, podemos ver que la autenticación implícita es más segura, ya que implica Hashing (cifrado MD5), por lo que las herramientas sniffer de paquetes no pueden detectar la contraseña, aunque en la autenticación básica se mostró la contraseña exacta en Wireshark.

BoRRis
fuente
66
Esta debería ser la respuesta aceptada, ya que es más informativa y felicitaciones para los gráficos.
mak
¿Pero en wireshark solo está olfateando paquetes usando el protocolo http? ¿Qué pasa si estaba usando el protocolo https?
JohnRDOrazio
Wirehark no decide si olfatear Http o Https. Es el servidor web que está configurado con protocolos.
BoRRis
1
Disparates. La autenticación básica solo debe usarse sobre HTTPS. Entonces, la comparación real es la autenticación básica sobre HTTPS versus la autenticación implícita sobre HTTP. Dado que los sitios web están encriptando todo su tráfico hoy en día, también podría usar la autenticación básica sobre HTTPS.
Gili
-3

La autenticación básica utiliza la codificación base 64 para generar una cadena criptográfica que contiene la información de nombre de usuario y contraseña.

La autenticación de acceso implícito utiliza las metodologías de hash para generar el resultado criptográfico

chetan chaphekar
fuente
1
La codificación base 64 no es criptográfica.
Thomas Sobieck