Lo siento si el título de la pregunta no suena claro, aceptaré gustosamente sugerencias para mejorarlo.
Background
Estamos ejecutando un sistema SCADA / MES bastante complicado con una interfaz web a través de la cual los usuarios pueden, además de otras cosas, establecer valores directamente en un sistema de control PLC. La topología es m: 1: n, que es de muchos clientes a un servidor central a muchos clientes de puntos de control (se omiten las medidas de redundancia / disponibilidad por simplicidad).
La mayoría de los datos con los que interactúan los usuarios residen en el servidor de aplicaciones para el usuario, el cual está asegurado según nuestra experiencia, pero sigue siendo un servidor web al final del día. Queremos un nivel de seguridad adicional para todas las acciones que no terminan su vida en el servidor, sino que se propagan a los clientes de control.
La configuración actual es sincrónica y directa: si se solicita, el servidor se conecta directamente al cliente de control y retransmite la solicitud. El cliente de control tiene un PIN almacenado por sí mismo, que no se guarda en ningún otro lugar del sistema y se distribuye al personal autorizado a través de diferentes canales. El usuario debe proporcionar el PIN correcto, o el cliente de control rechazará la solicitud
Configuraciónplanificada
Porrazonesdelatenciaytopología,estamosplaneandocambiaraunaconexiónindirectaasíncrona:lasolicituddeunusuariosealmacenaráenlabasededatosdelservidorylosclientesdecontrolconsultaránalservidorperiódicamenteparalassolicitudes.Todolorelacionadoconestaconfiguraciónesconveniente,apartedelasimplicacionesdeseguridad:lassolicitudesdelospuntosdecontroldebenalmacenarseenalgúnlugardelservidor,loquehacequelaopcióndePINseairrelevante.
Lapreguntaessihayunaopciónsobrecómoasegurarel"canal" desde el cliente web al cliente de control cuando las solicitudes se transmiten de forma asíncrona a través del servidor principal.
Una idea que se me ocurre es XORRAR la carga útil de la solicitud, almacenarla en el servidor y luego XOR nuevamente en el cliente de control. Esto es factible en el navegador y supongo que esto le daría a toda la ruta de la solicitud la misma seguridad que el propio pin. El problema es que cuando la base de datos del servidor se ve comprometida y hay más (que una) solicitudes pendientes en la cola de retransmisión, la naturaleza de las solicitudes (cadenas JSON) hará que sea muy fácil recuperar el pin. Supongo que Base64ing antes de XOR no lo hará más seguro.
Detalles de interés Las solicitudes están en forma de cadenas JSON muy cortas (máximo 1 KB). Hay max. 1000 clientes de control y un estimado de 0 a 5 solicitudes de control por cliente de control en un momento dado. Actualmente, el sistema no es de gran interés para los "terceros", pero no queremos esperar a que se refute esta suposición.