En Oauth, ¿cuál es el beneficio de que el token de acceso sea opaco?

8

¿Por qué se tomó la decisión de que el Cliente no necesita poder analizar el token de acceso?

Me parece que si el token incluyera, además de los campos actuales, un client_id y un user_id, la vida sería mucho más simple, evitaría la falsificación, habilitaría la autenticación, etc.

He observado que según la sección 1.4 de RFC 6749 no tiene que ser opaco , pero me parece que gran parte de OpenID Connect, si no todo, es una forma de convertir el token de acceso en algo significativo. Sí, agrega un token de ID, pero el hecho de que se implemente como algo que acompaña a un token incrustado en el token de acceso no cambia este hecho. Parece que todos los videos, tutoriales y publicaciones del blog hablan de ello como si ese fuera el caso (los tokens de acceso serán opacos, porque "el cliente no es el público al que va dirigido") ... Y sin embargo, es el API o proveedor de recursos que no puede establecer la autenticación en función del portador que tiene el token.

En realidad, debo agregar que no creo que el token sea opaco para el cliente es el problema. El problema es que el token es un token de portador que no restringe a quién lo puede usar.

    
pregunta Johan 02.05.2015 - 13:52
fuente

1 respuesta

8

En OAuth, o en cualquier otro protocolo en el que el token sea opaco o transparente, los beneficios y riesgos varían según el resultado deseado:

  • Si desea que el cliente pueda analizar el token de acceso, necesita que el token sea transparente.
  • Si no desea que el cliente pueda analizar el token de acceso, necesita que el token sea opaco.

De hecho, esta es la definición de tokens opacos y transparentes; el cliente puede ver en ellos, o no.

Si su token es transparente, debe firmarlo; de lo contrario, cualquier persona podría simplemente editar el contenido de su token y reclamar lo que quiera.

Por lo tanto, el primer beneficio obvio de tener un token opaco es que simplemente puede deshacerse de cualquier mecanismo de firma; no lo necesita y, a la inversa, si tiene un token transparente adecuado, el cliente puede leer el token, pero no editarlo.

Otro beneficio de tener un token opaco es que es más seguro; Ningún método de encriptación es realmente aleatorio (es decir, debe haber una manera de desencriptarlo), lo que significa que siempre puede saber qué protocolo de encriptación se usa si puede leer lo suficiente del contenido de los tokens (tokens transparentes). Esto en sí mismo reduce el tiempo para identificar su cifrado (conocer el protocolo). Muchas personas no creen que esto sea muy riesgoso, y de hecho, si usa más de 80 bits de entropía, tienen razón (10 caracteres verdaderamente aleatorios para su cifrado, es decir, "clave secreta").

Sin embargo, y esto es mucho más un riesgo; Los tokens transparentes permiten que los crackers jueguen con los contenidos (porque los ven), y algunos protocolos tienen serias debilidades que le permiten crear colisiones o incluso decodificar el cifrado en un período mucho más corto porque el cracker conocerá el protocolo y el contenido. de bloques válidos (la mayoría de los protocolos de encriptación usan bloques de 16 bytes, por lo que si su token contiene 160 caracteres de datos, le ha dado al cracker 10 combinaciones válidas para su cifrado. Esto disminuye el tiempo que les tomará identificar su cifrado por un orden de magnitud. Darles tokens más transparentes también reducirá aún más este tiempo. Algunos protocolos tienen una versión reducida de este riesgo, pero por la naturaleza de lo que es la codificación, tener el bloque codificado y el bloque decodificado en sus manos , siempre vas a hacer que sea más fácil de romper.

Es por esto que muchos eligen tokens opacos. De hecho, debería siempre optar por tokens opacos si no hay necesidad de que ninguna entidad externa pueda analizar su token. Un ejemplo de esto es un marco de servicio en el cual usted solo pasa el token al servicio como un reclamo ciego; no tienes idea de lo que dice, pero sabes que funciona y te identifica. Solo depende del servicio confirmar que es usted a través de la clave secreta o el cifrado.

Los tokens opacos tampoco requieren firma, como mencioné anteriormente, tampoco requieren que se divulgue nada sobre los protocolos elegidos.

Por esta razón, son mucho más seguros, no solo matemática y lógicamente, sino que se deshacen de los errores humanos de implementación, lo que es, para ser honesto, el 99% de las razones por las que se hacen las grietas en primer lugar. p>

Nota interesante

Incluso la aleatoriedad verdadera significa una pérdida del 36.7% (1 dividido por e) de espacio de combinación cuando se adivina aleatoriamente. Esto significa que un bloqueo de combinación de 1000 posibilidades, si se adivina al azar, en realidad tiene una probabilidad de 1 en 730 de hacerlo correcto.

Entonces 1 / e es la mejor oportunidad absoluta que tienes, y eso es puro azar.

Cualquier "posibilidad" que sea interesante para un humano, "información", no es realmente aleatoria por definición, y lo que es peor, cualquier protocolo que se use para decodificarla, cede cierto espacio posible para el cifrado por la forma en que el protocolo trabajos. Entonces, en realidad, sus posibilidades de adivinar aleatoriamente una respuesta son significativamente más pequeñas que el espacio de entropía o combinación que la mayoría de la gente habla o piensa que realmente tienen; por lo general, cuando todas las cuentas son medidas por un buen pirata informático, al menos un orden de magnitud más fácil de lo que piensa un lego.

    
respondido por el Nick Steele 08.06.2017 - 20:44
fuente

Lea otras preguntas en las etiquetas