¿Especificar clave pública en un encabezado JWT?

1

Hay un conjunto de partes, cada una de las cuales tiene una clave pública / privada. Tengo la clave pública de cada uno de ellos.

Estas partes me enviarán los JWT firmados con su clave privada. No sé qué parte envió el JWT, así que necesito verificar el JWT. Si la firma coincide con la clave pública # 1, sé que vino de la fiesta # 1.

Quiero una forma de identificar de manera segura a la parte que envió el JWT.

La forma más fácil pero lenta de hacer esto es verificar cada clave pública hasta que coincida.

La solución que tengo en mente implica hacer coincidir la clave pública con el campo iss del JWT. Puedo echar un vistazo a la JWT, sin verificar la firma, extraer la reclamación iss , usarla para decidir qué clave pública usar, y luego usarla para verificar la firma.

No puedo ver ningún agujero de seguridad en este enfoque, pero la necesidad de dos pasadas se siente mal. ¿Hay una manera estándar de hacer esto?

    
pregunta Joe 16.01.2017 - 16:41
fuente

2 respuestas

0

Hay encabezados definidos explícitamente para este tipo de cosas en los estándares JOSE. Puedes usar

  • JWK , que es la clave pública real, solo debes asegurarte de que coincidan con lo que tienes localmente.
  • KID , que es solo un identificador arbitrario de la clave, puede usar una huella digital de la clave pública y hacer una búsqueda local.

En el primer caso, debes tener cuidado y no solo depender de la clave presentada, sino usarla para buscar una clave local.

    
respondido por el Steve 16.02.2017 - 18:12
fuente
0
  

Estas partes me enviarán los JWT firmados con su clave pública .

Los JWT están firmados por claves privadas o son HMAC utilizando una clave compartida. Espero que sea un error tipográfico.

Además, las bibliotecas JWT existen en casi todos los lenguajes / marcos, debería estar mejor usando uno de ellos ya que están debidamente revisados.

Habiendo dicho eso, tu enfoque se ve bien. Hay varios escenarios:

  • No se ha alterado el campo iss . En tal caso, buscará la clave pública correspondiente en O (1) tiempo y podrá verificar el token.
  • Un atacante MITM cambia el campo iss , en cuyo caso cargará una clave incorrecta o no se encontrará ninguna clave dependiendo de si el campo iss es válido o no. La firma no se verificará en ambos casos y debe descartar el JWT en ese momento.
  • También descarte el token JWT si el parámetro alg param está establecido en none . Si bien es una construcción JWT adecuada, su insegura como no está firmada. enlace
  • También descarta cualquier truco en el que el token JWT tenga una clave pública incorporada que deberías usar para verificar el token. Un atacante puede reemplazar el signo y reemplazar la clave pública de manera que la verificación tenga éxito. La clave pública (o clave simétrica en caso de HMAC) siempre debe ser consultada en el almacén de datos del receptor.
respondido por el CodeExpress 16.01.2017 - 22:00
fuente

Lea otras preguntas en las etiquetas