Articulo de referencia

Intercambio de claves autenticado por contraseña mediante malabarismo

El Intercambio de Claves Autenticado por Contraseña mediante Juggling (o J-PAKE) es un protocolo de acuerdo de claves autenticado por contraseña , propuesto por Feng Hao y Peter...

El Intercambio de Claves Autenticado por Contraseña mediante Juggling (o J-PAKE) es un protocolo de acuerdo de claves autenticado por contraseña , propuesto por Feng Hao y Peter Ryan. [ 1 ] Este protocolo permite que dos partes establezcan una comunicación privada y autenticada basándose únicamente en su contraseña compartida (de baja entropía) sin necesidad de una Infraestructura de Clave Pública . Proporciona autenticación mutua para el intercambio de claves, una característica de la que carece el protocolo de intercambio de claves Diffie-Hellman .

Descripción

Dos partes, Alice y Bob , se ponen de acuerdo en un grupo.GRAMO{\displaystyle G}con generadorgramo{\displaystyle g}de orden primoq{\displaystyle q}en el que el problema del logaritmo discreto es difícil. Normalmente se utiliza un grupo de Schnorr . En general, J-PAKE puede utilizar cualquier grupo de orden primo que sea adecuado para la criptografía de clave pública, incluida la criptografía de curva elíptica .s{\displaystyle s}ser su secreto compartido (de baja entropía), que puede ser una contraseña o un hash de una contraseña (s0{\displaystyle s\neq 0}). El protocolo se ejecuta en dos rondas.

Ronda 1
Alice seleccionaincógnita1R[0,q1]{\displaystyle x_{1}\in _{R}[0,q-1]},incógnita2R[1,q1]{\displaystyle x_{2}\in _{R}[1,q-1]}y envíagramoincógnita1{\displaystyle g^{x_{1}}},gramoincógnita2{\displaystyle g^{x_{2}}}junto con las pruebas de conocimiento cero (utilizando, por ejemplo, la prueba de conocimiento cero no interactiva de Schnorr como se especifica en RFC 8235) para la prueba de los exponentesincógnita1{\displaystyle x_{1}}yincógnita2{\displaystyle x_{2}}. De manera similar, Bob seleccionaincógnita3R[0,q1]{\displaystyle x_{3}\in _{R}[0,q-1]},incógnita4R[1,q1]{\displaystyle x_{4}\in _{R}[1,q-1]}y envíagramoincógnita3{\displaystyle g^{x_{3}}},gramoincógnita4{\displaystyle g^{x_{4}}}junto con las pruebas de conocimiento cero para la demostración de los exponentesincógnita3{\displaystyle x_{3}}yincógnita4{\displaystyle x_{4}}La comunicación anterior puede completarse en una ronda ya que ninguna de las partes depende de la otra. Cuando termina, Alice y Bob verifican las pruebas de conocimiento cero recibidas y también compruebangramoincógnita2,gramoincógnita41{\displaystyle g^{x_{2}},g^{x_{4}}\neq 1}.
Ronda 2
Alice envíaA=gramo(incógnita1+incógnita3+incógnita4)incógnita2s{\displaystyle A=g^{(x_{1}+x_{3}+x_{4})x_{2}s}}y una prueba de conocimiento cero para la demostración del exponenteincógnita2s{\displaystyle x_{2}s}. (Nota: Alice en realidad deriva una nueva clave pública usandogramoincógnita1+incógnita3+incógnita4{\displaystyle g^{x_{1}+x_{3}+x_{4}}}como el generador). De manera similar, Bob envíaB=gramo(incógnita1+incógnita2+incógnita3)incógnita4s{\displaystyle B=g^{(x_{1}+x_{2}+x_{3})x_{4}s}}y una prueba de conocimiento cero para la demostración del exponenteincógnita4s{\displaystyle x_{4}s}.

Después de la Ronda 2, Alice calculaK=(B/gramoincógnita2incógnita4s)incógnita2=gramo(incógnita1+incógnita3)incógnita2incógnita4s{\displaystyle K=(B/g^{x_{2}x_{4}s})^{x_{2}}=g^{(x_{1}+x_{3})x_{2}x_{4}s}}. De manera similar, Bob calculaK=(A/gramoincógnita2incógnita4s)incógnita4=gramo(incógnita1+incógnita3)incógnita2incógnita4s{\displaystyle K=(A/g^{x_{2}x_{4}s})^{x_{4}}=g^{(x_{1}+x_{3})x_{2}x_{4}s}}Con el mismo material de claveK{\displaystyle K}Alice y Bob pueden derivar una clave de sesión utilizando una función hash criptográfica :κ=H(K){\displaystyle \kappa =H(K)}.

El protocolo J-PAKE de dos rondas es completamente simétrico. Esto simplifica considerablemente el análisis de seguridad. Por ejemplo, la prueba de que una de las partes no filtra información de contraseñas durante el intercambio de datos debe ser válida para la otra parte, gracias a la simetría. Esto reduce a la mitad el número de pruebas de seguridad necesarias.

En la práctica, es más probable implementar J-PAKE en tres flujos, ya que normalmente una de las partes tomará la iniciativa. Esto se puede hacer fácilmente sin pérdida de seguridad. Supongamos que Alice inicia la comunicación enviando a Bob:gramoincógnita1,gramoincógnita2{\displaystyle g^{x_{1}},g^{x_{2}}}y pruebas de conocimiento cero. Entonces Bob responde con:gramoincógnita3,gramoincógnita4,B=gramo(incógnita1+incógnita2+incógnita3)incógnita4s{\displaystyle g^{x_{3}},g^{x_{4}},B=g^{(x_{1}+x_{2}+x_{3})x_{4}s}}y pruebas de conocimiento cero. Finalmente, Alice le envía a Bob:A=gramo(incógnita1+incógnita3+incógnita4)incógnita2s{\displaystyle A=g^{(x_{1}+x_{3}+x_{4})x_{2}s}}y una prueba de conocimiento cero. Ambas partes ahora pueden obtener la misma clave de sesión.

Dependiendo de los requisitos de la aplicación, Alice y Bob pueden realizar un paso opcional de confirmación de clave. Hay varias maneras de hacerlo. Un método sencillo descrito en SPEKE funciona de la siguiente manera: Alice envía a BobH(H(κ)){\displaystyle H(H(\kappa ))}y luego Bob responde conH(κ){\displaystyle H(\kappa )}. [ 2 ] Alternativamente, Alice y Bob pueden realizar una confirmación explícita de la clave utilizando la clave de sesión recién construida para cifrar un valor conocido (o un desafío aleatorio). EKE , Kerberos y Needham-Schroeder intentan proporcionar una confirmación explícita de la clave mediante este método.

Propiedades de seguridad

Dado que la prueba de conocimiento cero no interactiva de Schnorr subyacente es segura, se demuestra que el protocolo J-PAKE satisface las siguientes propiedades: [ 3 ]

  1. Resistencia a ataques de diccionario sin conexión : no filtra ninguna información de verificación de contraseñas a un atacante pasivo o activo.
  2. Secreto hacia adelante : genera claves de sesión que permanecen seguras incluso cuando la contraseña se revela posteriormente.
  3. Seguridad de clave conocida: impide que una clave de sesión revelada afecte a la seguridad de otras sesiones.
  4. Resistencia a ataques de diccionario en línea: limita a un atacante activo a probar solo una contraseña por ejecución de protocolo.

En 2015, Abdalla, Benhamouda y MacKenzie llevaron a cabo un análisis formal independiente de J-PAKE para demostrar su seguridad en un modelo de oráculo aleatorio asumiendo adversarios algebraicos. [ 4 ]

El diseño del protocolo

El protocolo J-PAKE está diseñado combinando claves públicas aleatorias de forma estructurada para lograr un efecto de desaparición si ambas partes proporcionan exactamente las mismas contraseñas. Esto es similar al diseño del protocolo de red de veto anónimo . Sin embargo, la esencia de la idea se remonta al protocolo de red original Dining Cryptographers de David Chaum [ 5 ] , donde los bits binarios se combinan de forma estructurada para lograr un efecto de desaparición.

La implementación

J-PAKE se implementó en OpenSSL y OpenSSH como un protocolo de autenticación experimental . Se eliminó del código fuente de OpenSSH a finales de enero de 2014. [ 6 ] También se implementó en Smoke Crypto Chat Messenger, [ 7 ] en NSS y fue utilizado por Firefox Sync versión 1.1, pero se descontinuó en la versión 1.5, que utiliza un método diferente de intercambio y almacenamiento de claves. [ 8 ] El servidor J-PAKE de Mozilla se cerró junto con los servidores de almacenamiento de Sync 1.1 el 30 de septiembre de 2015. [ 9 ] Pale Moon continúa utilizando J-PAKE como parte de su servicio Sync. [ 10 ] Desde febrero de 2013, J-PAKE se ha añadido a la API ligera en Bouncycastle (1.48 y posteriores). J-PAKE también se utiliza en Thread (protocolo de red) [ 11 ]

Normalización

J-PAKE se incluyó en ISO/IEC 11770-4 (2017) como norma internacional. [ 12 ] También se publica en RFC 8236.

Referencias

  1. F. Hao, P. Ryan. Intercambio de claves autenticado por contraseña mediante malabarismo . Actas del 16º Taller Internacional sobre Protocolos de Seguridad, 2008.
  2. Jablon, David (octubre de 1996). "Intercambio de claves autenticado solo con contraseña fuerte" . ACM SIGCOMM Computer Communication Review . 26 (5): 5– 26. CiteSeerX 10.1.1.57.4798 . doi : 10.1145/242896.242897 . S2CID 2870433 .  
  3. F. Hao, P. Ryan. J-PAKE: Intercambio de claves autenticado sin PKI . Springer Transactions on Computational Science XI , número especial sobre seguridad en la computación, parte II, vol. 6480, págs. 192-206, 2010.
  4. M. Abdalla, F. Benhamouda, P. MacKenzie Seguridad del protocolo de intercambio de claves autenticado por contraseña J-PAKE .
  5. Chaum, David (1988). "El problema de los criptógrafos comensales: la imposibilidad de rastrear al remitente y al destinatario de forma incondicional" . Journal of Cryptology . 1 : 65–75 . doi : 10.1007/BF00206326 . S2CID 2664614 . 
  6. "Registro CVS para src/usr.bin/ssh/Attic/jpake.c" . cvsweb.openbsd.org . Consultado el 17 de noviembre de 2023 .
  7. Moonlander, Casio (2020). Smoke - Una aplicación de software de chat con eco para Android:: Mensajero personal / Documentación de referencia del sitio web técnico de código abierto . Norderstedt: BOD. pág. 44. ISBN  9783752691993.
  8. "Nuevo modelo de seguridad de Firefox Sync" . 30 de abril de 2014.
  9. "Cierre del servicio Sync heredado" . 31 de julio de 2015.
  10. "¡Pale Moon se ha actualizado a la versión 25.7.3! - Foro de Pale Moon" .
  11. "Copia archivada" (PDF) . Archivado del original (PDF) el 11/09/2015 . Recuperado el 15/09/2015 .{{cite web}}: CS1 mantenimiento: copia archivada como título ( enlace )
  12. ^ "ISO/IEC 11770-4:2017(es)" . iso.org . Consultado el 17 de noviembre de 2023 .
  • J-PAKE RFC 8236
  • Un prototipo Java de J-PAKE que utiliza el campo finito.
  • Un prototipo Java de J-PAKE que utiliza la curva elíptica.
  • Implementación AC de J-PAKE de curva elíptica en ARM mbed
  • Implementación en Java de J-PAKE en Bouncycastle
  • J-PAKE: De criptógrafos gastronómicos a malabaristas