¿Qué estrategia de firma?

2

Tengo un dispositivo que debería bloquear y desbloquear algo después de recibir una respuesta firmada del servidor.

En el mejor de los casos, un bucle se bloquearía así:

  1. El usuario bloquea el dispositivo
  2. El usuario quiere desbloquear el dispositivo
  3. El usuario se autentica en un servicio web
  4. El usuario recibe una clave
  5. El usuario envía la clave al dispositivo
  6. El dispositivo comprueba si la clave es válida
  7. El dispositivo se desbloquea

El problema principal es alrededor del paso seis. No estoy seguro de qué estrategia utilizar para lograr la firma.

Una cosa que imagino sería:

  1. El dispositivo tiene una identificación global
  2. El dispositivo tiene una clave privada
  3. El servidor tiene una clave pública
  4. El usuario se autentica en el servidor
  5. El servidor crea un objeto JSON con identificación global, fecha de espera (¿y algo más?)
  6. El servidor cifra y firma el objeto JSON y lo envía al usuario
  7. El usuario envía el objeto JSON al dispositivo
  8. El dispositivo descifra el objeto JSON, comprueba la firma y comprueba el tiempo de espera
  9. Si todo parece estar bien, se abre la cerradura

Así que finalmente mis preguntas:

  1. ¿Es esta una buena estrategia? ¿Hay trampas?
  2. ¿Qué algoritmo debo usar para los pasos cinco y ocho (HMAC)?
pregunta bodokaiser 16.07.2013 - 13:40
fuente

2 respuestas

3

Hay dos puntos principales en tus situaciones.

1. ¿La cerradura debería saber cómo desbloquearse?

Hay básicamente dos tipos de sistemas de "firma", y solo uno de ellos es realmente una firma . En su situación, el servidor enviará al dispositivo algún tipo de token que el dispositivo verificará . Entonces, la pregunta es: ¿es un problema si el dispositivo tendría el poder técnico de producir un token válido? ¿O las cosas deberían ser tales que el dispositivo no contenga nada que le permita crear nuevos tokens?

En el primer caso, puede trabajar con un MAC y HMAC / SHA-256 no es una mala elección para eso. Sin embargo, esto significa que el dispositivo y el servidor comparten alguna clave secreta, que se utiliza tanto para producir como para verificar tokens de desbloqueo. Si hay varios dispositivos, cada uno debe tener su propia clave específica del dispositivo, y el servidor debe conocer todas las claves del dispositivo; de lo contrario, al separar un dispositivo, un atacante podría aprender lo suficiente para desbloquearlo. todos los demás dispositivos.

En este último caso, el servidor tiene un par de claves asimétricas; los tokens de desbloqueo están firmados con la clave privada del servidor, y los dispositivos verifican los tokens con la clave pública del servidor. RSA es un algoritmo de firma digital popular; la parte de verificación es barata y, por lo tanto, puede realizarla la mayoría de los dispositivos, incluso los dispositivos con limitación de energía.

2. ¿Qué hay de ataques de repetición ?

Un "ataque de repetición" es, en su caso, cuando un atacante observa un token de desbloqueo y lo envía de nuevo en algún momento posterior. Hay varias formas de evitar estos problemas, pero todas implican algún tipo de capacidad adicional en el dispositivo:

  • Tokens por tiempo limitado. El token incluye una fecha de emisión y el dispositivo no aceptará un token que sea "demasiado antiguo". Este método requiere que el dispositivo tenga un reloj incorporado razonablemente preciso.

  • Seguimiento de duplicados. El dispositivo recuerda los tokens de desbloqueo vistos anteriormente y se niega a actuar sobre un token que ya ha visto. Esto requiere algún tipo de memoria que no se pueda restablecer.

  • Nonces . El dispositivo primero emite un valor aleatorio y espera que el token de desbloqueo contenga una copia de ese valor específico. Esto hace que el protocolo sea más complejo y requiere que el dispositivo pueda emitir datos, así como recibir tokens. Esto no se asignará bien a todas las situaciones; por ejemplo, si el dispositivo es un bloqueo de puerta, con un teclado, y el usuario se comunica con el servidor a través de su teléfono inteligente. Por lo general, el dispositivo necesitaría una pequeña pantalla LCD para mostrar su nonce.

Es posible que desee considerar HOTP : este es un protocolo basado en MAC, por lo tanto, con una clave compartida entre "servidor "y" dispositivo ". Tanto el servidor como el dispositivo recuerdan solo un valor de contador corto (por ejemplo, 32 bits) y esto es suficiente para proteger contra ataques de repetición. La comunicación es unidireccional (el dispositivo no necesita emitir nada). Este protocolo (o cualquier variante similar) es lo que se usa para desbloquear su automóvil: el automóvil es el "dispositivo" y el control remoto conectado al llavero es el "servidor".

Todo lo anterior es sobre el token enviado desde el servidor al dispositivo. Por supuesto, el servidor no debe producir el token a menos que tenga una buena seguridad de que es token para el usuario correcto (el propietario del dispositivo). Por lo tanto, necesita autenticación que, en la práctica, significará SSL. Permita que el usuario abra una conexión SSL con el servidor (por ejemplo, HTTPS) y se autentique con el servidor. La capa SSL se encargará de la integridad y el cifrado para que no tenga que cifrar el token en sí. En realidad, el cifrado no sería necesario para un token de desbloqueo en absoluto; es posible que desee utilizar el cifrado solo para disuadir a los interceptores, y desea frustrarlos solo si su protocolo de verificación de tokens es débil contra los ataques de repetición. En cualquier caso, es mejor dejar el cifrado en una capa en la que todos los detalles difíciles se hayan suavizado a lo largo de años de arduo trabajo, y eso es SSL.

    
respondido por el Tom Leek 16.07.2013 - 15:19
fuente
1

Si solo hay un servidor & controla múltiples dispositivos, haría 1 cambio en su sistema: la clave privada estaría con el servidor y la clave pública del servidor estaría con el dispositivo.

En su esquema, suponiendo que haya 100 dispositivos y 1 servidor, entonces cada dispositivo necesitará su propia clave privada & el servidor necesitará 100 claves públicas y deberá encontrar la correcta.

De la manera opuesta, solo habría una clave privada, con el servidor. Y todos los dispositivos tendrían la clave pública del servidor.

    
respondido por el user93353 16.07.2013 - 15:37
fuente

Lea otras preguntas en las etiquetas