Configuración:
- iPhone (supongamos que es 6 y más reciente por el bien de esta pregunta).
- Raspberry Pi 2.
La frambuesa ejecuta un servicio web REST que el iPhone consulta. El servicio web utiliza JSON Web Tokens para la autenticación y autorización. Estoy tratando de encontrar una forma tan segura como sea posible para que el iPhone obtenga un JWT de la Raspberry sin demasiados problemas para el usuario, pero la seguridad es más importante que la facilidad de uso.
Los dos dispositivos operarán cerca uno del otro, por lo que el intercambio de token sobre un canal físicamente restringido parece una buena solución, ya que un atacante debe estar físicamente presente antes de (por ejemplo, dejar un dispositivo que pueda detectar y transmitir la información). utilizando un canal diferente) o durante el intercambio de tokens.
Como el iPhone no ofrece a los desarrolladores acceso al chip NFC, esta no es una opción (también he leído en otros lugares que es vulnerable a ataques MITM a una distancia de hasta 10 metros).
La comparación numérica de Bluetooth parece ser una opción posible, ya que ha sido comprobada como segura (al menos para v2.1).
P1: ¿Sigue siendo válido? ¿Puede la comparación numérica de Bluetooth ser considerada segura en Bluetooth 4.x?
No es ideal tener que vincular dispositivos, ya que un iPhone solo interactuará con la Raspberry durante unos días y luego será reemplazado por un nuevo iPhone que interactúa con la misma Raspberry Pi. Me gustaría evitar tener que limpiar la lista de dispositivos emparejados de la Raspberry a diario.
He estado pensando en una solución personalizada en la que generaría un valor aleatorio (seguro) que se mostraría en una pantalla conectada a la Raspberry Pi. Esto serviría como un token de corta duración que el usuario del iPhone ingresaría manualmente, y la aplicación enviaría una solicitud de autenticación al servicio web utilizando este valor. El servicio web mantendría un temporizador para asegurarse de que el token de vida corta solo pudiera intercambiarse por un JWT real dentro de un corto período de tiempo (por ejemplo, 5-10 minutos) para evitar ataques de fuerza bruta. Podemos suponer que se puede usar una PKI para configurar una conexión SSL entre la Raspberry Pi y el iPhone, de modo que el intercambio del token de corta duración por un JWT de larga duración se realizará de forma segura.
P2: Sé que diseñar soluciones de seguridad personalizadas es una idea horrible y debe dejarse en manos de expertos en seguridad. Sin embargo, la estrategia propuesta parece muy simple, pero debe ser defectuosa, y me gustaría saber por qué es defectuosa.