Lo que estás describiendo es la autenticación de múltiples factores, el primer factor es la proximidad de los 2 dispositivos. Por lo tanto, no viola los principios establecidos, sino que se está convirtiendo en una práctica estándar más que en una respuesta a un ataque de alto perfil. Los dispositivos involucrados necesitan saber que la comunicación se realiza cuando solo el usuario quiere que sea, y que son los dispositivos que dicen ser. Esto se logra a través de protocolos y métodos seguros para detectar la interacción legítima del usuario.
La proximidad se puede falsificar en algunos dispositivos con protocolos diseñados incorrectamente a través del relé, los más públicos son los de los mandos de teclas (amplificación de señal) y los abridores de puertas de garaje (atascar / robar 2 y reproducir primero, guardar el segundo para más adelante).
Agregar un segundo factor no es difícil, generalmente es una cuestión de costo. Los ataques de atasco / robo bloquean la señal del transmisor al dispositivo mientras hace una copia, dos veces, luego envía la primera señal al dispositivo que lo activa. La segunda copia se usa para activar el dispositivo bajo el control del atacante. Esto evita tanto los transmisores de código rodante como aquellos con contadores incrementales criptográficamente mejorados. Un código de tiempo sincronizado en ambos dispositivos y como parte del código generalmente derrota este ataque. Sincronizar un código de tiempo y mantenerlo de esa manera requiere relojes de alta precisión (y costosos) en ambos dispositivos, más potencia y esfuerzo adicional por parte del usuario.
Sin embargo, un código de tiempo no suele ayudar con un ataque de amplificación de señal. Una mejor manera de detectar la proximidad ayuda, como una medición precisa del tiempo que toma procesar el saludo del dispositivo para estimar la distancia. Un tiempo de respuesta excesivo puede indicar un ataque activo. El Mercedes Benz de 20 años de mi padre tenía un transmisor de infrarrojos en el llavero además del RF, por lo que el automóvil podía asegurarse de que el llavero apuntaba hacia él y no ser presionado en un bolsillo por accidente. También desbloqueó la puerta específica (o maletero) a la que estaba apuntada, para evitar que alguien se metiera a hurtadillas en el automóvil por una de las otras puertas. Esto también evitó los ataques de transmisión solo de RF, lo que aumenta el costo y el esfuerzo del equipo atacante.
Los métodos adicionales para detectar la interacción legítima del usuario incluyen cercos por tiempo (como sugirió), geo-cercos, detección de manos (usando el tacto capacitivo), detección de gestos, detección de temperatura (para detectar ataques que modifican la velocidad de los relojes y procesadores)
Un protocolo de dispositivo más óptimo incluiría un protocolo de enlace autenticado criptográficamente con teclas grandes, códigos de tiempo, contadores y respuesta de recepción de mensajes. Este tipo de protocolo utiliza grandes cantidades de energía para un dispositivo integrado, por lo que se requieren mejores potencias y baterías de mayor capacidad antes de poder adoptar algo como esto a gran escala. Implementarlo en un teléfono es fácil, pero no tanto en dispositivos de muy bajo consumo (BTLE, IOT, tarjetas inteligentes, etc.). Al menos no en este momento, pero la eficiencia aumenta constantemente.
El costo de la implementación debe ponderarse contra el esfuerzo de un ataque exitoso durante la vida útil del dispositivo, y contra los posibles costos de dicho ataque, en forma de malas relaciones públicas, juicios, etc.
No logré mantener esto corto y me desvié del tema, espero que toda la información sea relevante para la pregunta.
Este es un protocolo básico que uso para el control de servicios de IRC, es corto y simple, y se puede aplicar a muchos escenarios de uso.
A: Hello B, I am A, I would like you to do X<br>
A: B + A + H_1 + X + T_A + C_A + MAC_A(msg)
B: Hello A, you are authorized for X<br>
B: A + B + H_2 + X + T_B + C_B + MAC_B(msg + Z_A)
A: Thanks B, please do X now, over<br>
A: B + A + H_3 + X + T_A + C_A + MAC_A(msg + Z_B)
B: Ok A, I will do X now, over and out<br>
B: A + B + H_4 + X + T_B + C_B + MAC_B(msg + Z_A)
Donde A y B son números de serie o identificadores de dispositivo, C_x es un contador incremental específico del dispositivo x, T_x es el código de tiempo actual del dispositivo x, H_x es un identificador para la parte x del protocolo de enlace, y Z_x es la última MAC respuesta del dispositivo x. Los mensajes están cifrados y autenticados con grandes claves previamente compartidas, pero para algo como un llavero o un abridor de puerta de garaje solo es necesaria la autenticación.