He investigado este tema exhaustivamente y estoy atascado; esperaba obtener alguna aclaración por parte de la gente útil.
Antecedentes: tengo transpondedores de Bluetooth conectados a bloqueos que se abren mediante pago en mi aplicación. Un usuario paga una tarifa fija, el bloqueo se abre, toma su artículo y la puerta se cierra y se cierra. Estoy tratando de evitar ataques de suplantación de identidad donde los usuarios que no pagan pueden abrir estos bloqueos.
En teoría, mi solución actual es la siguiente: a cada transpondedor se le da una sal aleatoria de 32 bits. Una vez que la aplicación se conecta, se envía una solicitud de autenticación al transpondedor. El transpondedor crea una cadena de desafío aleatoria + su sal única. El transpondedor luego el hash itera la cadena 10,000 veces (para proteger contra la fuerza bruta) usando SHA256.
Mientras esto sucede, la cadena de desafío + sal original también se transmite a la aplicación, que luego la envía a un servidor seguro a través de SSL donde también se encuentran la clave de hash secreta compartida y la sal del transpondedor. La cadena se hash iterado 10.000 veces con Sha256, se envía de vuelta a la aplicación y se vuelve al transpondedor que valida el hash del servidor contra su propio hash calculado. Si es igual, el bloqueo se abre.
Mis preguntas son: ¿es seguro? ¿Estoy pasando por alto un defecto de seguridad evidente, ya sea por fuerza bruta u otra? ¿Estoy completamente equivocado? Cualquier ayuda o recomendación sería muy apreciada