Muchas otras personas han dicho "nada" en respuesta a la primera pregunta sobre "qué impide ..." y es cierto; En última instancia, nada realmente derrota a alguien absolutamente determinado.
También pediste estrategias que puedan contrarrestar esto; Tj1000 lo tocó, y pensé en lanzar una idea similar a la refriega, basada en el trabajo que solía hacer con los terminales de tarjetas de crédito.
Hace mucho tiempo, cuando era un dev menor, me entregaron una tarea que se consideraba demasiado difícil como para que valiera la pena resolverla los pro devs (creo que eso demuestra un poco lo que me pagaron); teníamos miles de terminales de tarjetas de crédito que llamaban a través de un antiguo enlace pre-isdn, hacían algunas autentificaciones, registraban una transacción, obtenían una aprobación o rechazo del servidor y pasaban a la siguiente transacción. La parte bonita es que nunca hubo otro mensaje de seguimiento desde el terminal si la transacción se anuló después de que la aprobáramos (esto fue en los días de las firmas, antes de que la identidad del usuario fuera autorizada previamente por un chip y un pin), pero no no necesita ser
Estas transacciones fueron protegidas y confirmadas por lo que se denominó un código de autenticación de mensaje MAC. El hardware del terminal incluía una clave hash, única por terminal, del fabricante. El fabricante compartiría con nosotros cuál era la clave de hash, y cuando apareció el terminal presentando su ID única, pudimos buscar la clave de hash. Los bytes del mensaje que formó el terminal serían procesados por el terminal, con la mitad del hash anterior o inicial que se adjunta al mensaje. La otra mitad se usaría para actualizar la clave hash utilizada para el siguiente mensaje. En el lado del servidor, haríamos el mismo hash para saber si el mensaje había sido manipulado, y al mismo resultado, también sabríamos que lanzar la clave de hash con la misma mitad de residuo que teníamos, Pero también haríamos un seguimiento del hashkey anterior. La próxima vez que llegó un mensaje, una de dos cosas fue el caso. Si la transacción anterior había tenido éxito y se iba a acumular en los totales diarios, el terminal usaría su nueva clave hash enrollada para enviar el último mensaje. Si la transacción anterior se revirtió (usuario cancelado, firma incorrecta, etc.), el terminal reutilizaría la clave hash anterior. Al copiar el mensaje con la última clave enrollada y no encontrar ninguna coincidencia, pero al mezclar la clave anterior y encontrar una coincidencia, sabíamos que el destino de la transacción anterior era fallido y lo eliminábamos de los totales diarios.
Las claves hash ocasionalmente se desincronizan; cuando esto sucediera, ninguna de nuestras claves almacenadas produciría un hash correspondiente para el mensaje. Hay una clave más que probar: la clave inicial (los usuarios supervisores podrían restablecer la clave a la inicial, y algunos usuarios parecieron hacer esto ante cualquier problema, creyendo que era algo así como un reinicio), rara vez es el caso y causaron más problemas que ellos. resuelto pero ..).
Si la clave inicial funcionó, no podríamos decir con certeza qué sucedió con la transacción anterior, pero por lo general los acumulamos (cobramos en las cuentas de las personas) según la teoría de que las personas se quejarían si no se reembolsaran a su vencimiento, pero no si Se les devolvió algo que habían comprado ...
Si la clave inicial no funcionó, entonces el terminal se volvió realmente inútil, ya que la pérdida de sincronización de la clave significa que ya no pueden funcionar más mensajes. No teníamos la autoridad para decirle al terminal que reinicie su clave, pero podríamos poner un mensaje en la pantalla pidiéndole al usuario que lo haga
En pocas palabras, no tiene que usar el mismo token, si le preocupa que los tokens se capturen y reproduzcan como una contraseña almacenada como alternativa. Otros han señalado opciones para hacer que los tokens expiren después de un tiempo; este método es esencialmente el vencimiento del token después de cada solicitud (similar a otra mención sobre la adición de un número secuencial al token), con una forma interna conocida de calcular un token nuevo en cada lado que debe realizarse en el paso.
Si está interesado en los detalles aburridos de la forma en que lo hace el mundo de las tarjetas de crédito en el Reino Unido, busque el Libro 2 y el Libro 5 de APACS 70 Standard. No están disponibles de forma gratuita. miembro para recibir una copia de las nuevas publicaciones, pero es posible que encuentre el contenido de las versiones anteriores flotando en la web