Scusa se il titolo della domanda non è chiaro, accetterò volentieri suggerimenti su come migliorarlo.
Sfondo
Stiamo utilizzando un sistema SCADA / MES piuttosto complicato con un'interfaccia Web attraverso la quale gli utenti possono, oltre ad altre cose, impostare i valori direttamente su un sistema di controllo PLC. La topologia è m: 1: n, che è molti client per un server centrale per molti client del punto di controllo (misure di ridondanza / disponibilità omesse per semplicità).
La maggior parte dei dati con cui gli utenti interagiscono si soffermano sul front end server che è protetto al meglio delle nostre competenze, ma è ancora un server web alla fine della giornata. Vogliamo un ulteriore livello di sicurezza per tutte le azioni che non terminano la loro diretta sul server ma vengono propagate ai client di controllo.
L'impostazione corrente è sincrona e diretta - su richiesta il server si collega direttamente al client di controllo e inoltra la richiesta. Il client di controllo ha un PIN memorizzato da solo, che non viene conservato da nessun'altra parte nel sistema e distribuito al personale autorizzato attraverso canali diversi. L'utente deve fornire il PIN corretto oppure la richiesta viene respinta dal client di controllo
Impostazionepianificata
Permotividilatenzaetopologia,stiamopianificandodipassareallaconnessioneindirettaasincrona:larichiestadapartediunutenteverràarchiviataneldatabasedelservereiclientdicontrollointerrogherannoregolarmenteilserverperlerichieste.Tuttociòcheriguardaquestaconfigurazioneècomodo,aparteleimplicazionisullasicurezza:lerichiesteperipuntidicontrollodevonoesserememorizzatedaqualchepartesulserver,ilcherendel'opzionePINirrilevante.
Ladomandaèseesisteun'opzionesucomeproteggereil"canale" dal client Web al client di controllo quando le richieste vengono inoltrate in modo asincrono attraverso il server principale.
Un'idea che potrei inventare è semplicemente XOR il carico utile della richiesta, memorizzarlo sul server e poi XOR di nuovo sul client di controllo. Questo è fattibile nel browser e suppongo che questo darebbe all'intero percorso di richiesta la stessa sicurezza del pin stesso. Il problema è che quando il DB Server viene compromesso e ci sono più (di una) richieste in attesa nella coda di trasmissione, la natura delle richieste (stringhe JSON) renderà molto facile il ripristino del pin. Immagino che Base64ing prima che XOR non lo renda più sicuro.
Dettagli di interesse Le richieste sono in forma di stringhe JSON molto brevi (max 1 KB). Ci sono max. 1000 client di controllo e stime da 0 a 5 richieste di controllo per client di controllo in qualsiasi momento. Attualmente il sistema non è di grande interesse per "terze parti", ma non vogliamo aspettare che questa ipotesi venga respinta.