Ho una configurazione come questa: Payment Server (PS) < > Front End (FE) < > Client JS.
Ho bisogno di ottenere alcuni dati dal Client JS al PS, senza che FE possa modificarlo e PS lo dimostri corretto. In questa situazione, la FE agisce come memorizza e inoltra (con alcune convalide di base del carico utile).
Questo è il mio piano:
-
Quando imposti il loro account, l'utente inserisce un PIN. Questo è stato cancellato dal JS e l'hash inviato a PS tramite FE per l'archiviazione. Non è memorizzato nel FE e nel PIN stesso non visto da PS o FE in chiaro.
-
Quando richiesto, il JS crea il payload JSON normalmente. L'utente inserisce il proprio PIN e questo viene sottoposto a hash nello stesso modo in cui è stato creato.
-
JS prende il payload, il PIN hash e il nonce (che è stato precedentemente inviato dal server in una comunicazione iniziale) e crea un HMAC-SHA256. Questo viene inviato, insieme al payload, a FE, validato / disinfettato e quindi inoltrato a PS non toccato.
-
PS controlla che HMAC-SHA256 non sia modificato, autenticato e nonce non sia utilizzato, utilizzando il proprio hash PIN memorizzato.
-
Quando PS ritorna al JS con il proprio risultato, può fare la stessa cosa e JS può confermare che anche il reso è autentico e non modificato.
Questo suono è fattibile? Sono consapevole che un PIN è generalmente piuttosto breve, diciamo almeno 4 caratteri. C'è qualcosa che posso fare per rafforzarlo?