¿Es el código de autenticación OAuth2 lo suficientemente largo para ser seguro?

1

Recientemente he comenzado a trabajar con el flujo de autenticación OAuth2. Al usarlo, veo que en el flujo de authcode, el cliente permite que el AuthServer autentique a un usuario, y luego devuelve un código de autenticación al cliente, que luego el cliente intercambiará por un token.

El código de autenticación puede ser pequeño: tan solo 10 dígitos hexadecimales. ¿Es esto realmente seguro? Si un cliente malintencionado pudiera robar credenciales de cliente legítimas, ¿no podría realizar un ataque de suplantación simplemente por fuerza bruta al intentar muchos códigos de autenticación hasta encontrar uno que funcionara? ¿Es esto una debilidad en el flujo de código de autenticación de Oauth2?

¿O es la longitud del código de autenticación un detalle de implementación que se deja en el servidor de autenticación?

    
pregunta Alejandro703 13.08.2018 - 23:48
fuente

1 respuesta

1
  

¿O es la longitud del código de autenticación un detalle de implementación que se deja en el servidor de autenticación?

Sí, el código de autenticación es un detalle de implementación que se deja en el servidor de autenticación, pero OAuth 2 RFC tiene varios requisitos de diseño, en particular:

  • Duración del código corto.
  • El código se puede usar una vez. Intentar usarlo más de una vez revoca tokens vinculados a ese código.

La característica "una vez que se puede usar" significa que incluso si un atacante puede obtener / adivinar el código, cualquier reenvío al servidor de autenticación revocará (si es posible) los tokens asociados con ese código. Esto es bueno y malo. Bien porque limita la ventana de oportunidad del atacante. Malo porque podría usarse como un ataque de denegación de servicio.

  

El código de autenticación puede ser pequeño: tan solo 10 dígitos hexadecimales. ¿Es esto realmente seguro?

Sí. Para mitigar los ataques de fuerza bruta, la entropía de generación de código debe tener en cuenta la frecuencia de las llamadas al punto final del token (el limitador de velocidad puede ayudar) durante su vida útil. Por ejemplo, si vamos con sus 10 dígitos hexadecimales, el tiempo de vida del código de 30 segundos y el atacante puede enviar 1000 suposiciones por segundo: la probabilidad de adivinar es del orden de 1 en 270 millones; puede mejorar aún más al elegir una mejor conjunto de caracteres que hex (16) como base 64, y reduce la vida útil del código.

    
respondido por el HTLee 14.09.2018 - 16:36
fuente

Lea otras preguntas en las etiquetas