Protocolo de autenticación de terceros

4

Tengo un dispositivo de hardware (H) , teléfono (P) y servidor web (S) . Me gustaría que P pueda enviar comandos a H , pero solo si está autorizado para hacerlo. Los permisos se almacenan en el servidor. Técnicamente podría hacer esto con Kerberos, pero eso parece una exageración. El protocolo que tengo actualmente es el siguiente:

  1. P solicita nonce desde H (prevenir ataque de repetición)
  2. H envía nonce a P
  3. P reenvía nonce, junto con el comando que desea enviar a H, a S
  4. Si P tiene permiso para ejecutar el comando en H, S envía Encrypt (Nonce | Command) al teléfono. Esto se cifra con una clave que H y S comparten de antemano. (P se autentica a S con nombre de usuario / contraseña)
  5. P reenvía Encrypt (Nonce | Command) a H.
  6. H descifra y verifica nonce. Si es correcto, ejecuta el comando.

¿Esto es seguro? Sé que no deberías crear protocolos tú mismo, así que tengo curiosidad por saber si esto ya existe y si se usa en otros lugares.

    
pregunta Nimyz 08.05.2015 - 21:24
fuente

2 respuestas

1

Según sus comentarios, parece que S está pasando algún token de acceso encriptado o firmado a P que pasa a H. H puede descifrar o verificar que el token es auténtico y usar la información que contiene para determinar si P está habilitado para hacerlo. la aplicación. Eso suena genial.

No estoy seguro de que necesites un nonce aquí si lo único que intentas hacer es evitar la repetición. Usted podría simplemente utilizar un número de serie. Solo acepte solicitudes que tengan un número de serie más alto que el más grande que haya visto. Esto eliminará una comunicación completa de ida y vuelta y reducirá en gran medida su contabilidad. Si H puede perder el número de serie actual (p. Ej., Al reiniciar), tal vez debería mantener el nonce.

En general, lo que estás haciendo parece bastante razonable. Dicho esto, sería mejor si no diseñaras y escribieras tu propia seguridad. Utilice SAML. Ha sido ampliamente estudiado y es mucho menos probable que tenga un error de diseño o implementación que cualquier otra solución que pueda encontrar.

    
respondido por el Neil Smithline 08.05.2015 - 23:18
fuente
0
  1. Supongo que H está generando nonce con suficiente aleatoriedad y es Al menos 64 bits.

  2. Supongo que la comunicación entre P y S se realiza a través de TLS autenticado por el servidor.

    • ¿H recuerda el nonce (s) excepcional (es) o solo el último? Si es más de 1, ¿H espera que los comandos se reciban en orden y que recibirlos fuera de orden causará un comportamiento inesperado? No tiene protección contra recibir órdenes fuera de orden.

    • Estás usando Encrypt (Nonce | Command), más bien deberías probar HMAC (Nonce | Command), ya que parece que quieres integridad y no confidencialidad. Y el uso de primitivas de cifrado para la integridad no es una buena idea.

respondido por el Sunil Agrawal 10.12.2017 - 22:25
fuente

Lea otras preguntas en las etiquetas