Tengo una configuración como esta: Payment Server (PS) < > Front End (FE) < > Cliente JS.
Necesito obtener algunos datos del Cliente JS al PS, sin que la FE pueda modificarlo y que el PS demuestre que es correcto. En esta situación, la FE actúa como almacenamiento y envío (con una validación básica de la carga útil).
Este es mi plan:
-
Al configurar su cuenta, el usuario ingresa un PIN. Esto se revisa por el JS y el hash enviado al PS a través de FE para su almacenamiento. No se almacena en la FE y el PIN no se ve por PS o FE en forma sencilla.
-
Cuando es necesario, el JS crea la carga útil de JSON de manera normal. El usuario ingresa su PIN y este se oculta de la misma manera que cuando se crea.
-
JS toma la carga útil, el PIN hash y el nonce (que fue enviado previamente por el servidor en una comunicación inicial) y crea un HMAC-SHA256. Esto se envía, junto con la carga útil, a FE, se valida / desinfecta y luego se envía a PS sin tocar.
-
Las comprobaciones de PS HMAC-SHA256 no están modificadas, están autenticadas y no se utilizan, utilizando su propio hash de PIN almacenado.
-
Cuando PS vuelve al JS con su propio resultado, puede hacer lo mismo y JS puede confirmar que la devolución también es auténtica y no está modificada.
¿Esto suena viable? Soy consciente de que un PIN es generalmente bastante corto, digamos 4 caracteres mínimo. ¿Hay algo que pueda hacer para ayudar a fortalecer eso?