Tengo un Device A
que se comunicará con varios dispositivos en una red (BLE y / o NFC).
Todos los dispositivos se manejarán con un Token tras la autenticación, que de alguna manera debe transferirse al Device A
a través de la red de forma segura y confidencial.
¿Cuál es la mejor manera de lograrlo? Supongo que algo como el protocolo de enlace SSL será seguro, pero se preferirá una solución más simple.
Básicamente, Device A
necesita actuar como un servidor.
La investigación realizada hasta ahora me ha llevado al siguiente flujo:
-
Device A
logra enviar una clave pública al cliente. - El cliente usa la clave para cifrar el Token y enviarlo a
Device A
. - Solo
Device A
puede leer Token y autenticar al cliente.
Problemas con este enfoque (y sus soluciones, según mi conocimiento limitado al tratar con sistemas de seguridad):
-
El token es el mismo y la clave pública también podría repetirse, dando un punto débil en el sistema.
- El token se transferirá a través de la red con un nonon.
-
Ataque MIM : cualquier
Device X
puede imitar aDevice A
y enviar una clave pública al cliente e iniciar la transacción. AhoraDevice X
conoce el Token e imita al cliente.- El
Device A
debe poseer algún tipo de certificado digital para demostrar su autenticidad. El certificado digital será asignado por un servidor escrito en Python / Django. Y todos los clientes deberían poder verificar el certificado sin interactuar con el servidor.
- El
Preocupaciones:
- Ya que necesito esto para dispositivos móviles, necesito que el par de claves privadas públicas sea lo más corto posible pero seguro.
Preguntas:
- ¿Cómo puedo implementar el algoritmo de la última parte? ¿Hay alguna biblioteca de Python de código abierto disponible para generar, emitir y verificar certificados?
- ¿Es seguro el algoritmo? Soy un novato en seguridad y me gustaría recibir comentarios valiosos.
¡Gracias de antemano!