Un sacco di altre persone hanno detto "nulla" in risposta alla prima domanda su "cosa impedisce .." ed è vero; alla fine niente sconfigge davvero qualcuno assolutamente determinato.
Hai anche chiesto strategie che possano contrastarlo; tj1000 ci ha toccato e ho pensato di gettare una simile idea nella mischia, basata sul lavoro che facevo con i terminali delle carte di credito.
Quando ero un junior dev, mi è stato consegnato un incarico che è stato giudicato troppo difficile per essere valso la pena di essere risolto dai professionisti (immagino che sia un po 'come mostrare quanto sono stato pagato); avevamo migliaia di terminali di carte di credito che facevano scalo su un vecchio link pre-isdn, facevano un po 'di autenticazione, registravano una transazione, ottenevano approvazioni o declino dal server e sulla transazione successiva. La parte carina è che non è mai stato seguito un altro messaggio dal terminale se la transazione è stata annullata dopo che l'avremmo approvata (questo era nei giorni delle firme, prima che l'identità dell'utente fosse pre-autorizzata da un chip e un pin), ma non 't bisogno di essere
Queste transazioni sono state protette e confermate da quello che è stato definito un codice di autenticazione del messaggio MAC. Costruito nell'hardware del terminale era una chiave hash, univoca per terminale, dal produttore. Il produttore avrebbe condiviso con noi la chiave di hashing, e quando il terminale è apparso presentando il suo ID unqiue potremmo cercare la chiave hash. Il byte del messaggio formato dal terminale sarebbe stato cancellato dal terminale, con la metà dell'hash precedente o iniziale che veniva aggiunto al messaggio. L'altra metà verrebbe utilizzata per aggiornare la chiave hash utilizzata per il messaggio successivo. Dal lato server, eseguivamo lo stesso hashing per sapere se il messaggio era stato manomesso e arrivavano allo stesso risultato di hash, sapevamo anche di inserire la chiave hash con lo stesso mezzo residuo che avevamo, ma terremo traccia anche della hashkey precedente. La prossima volta che è arrivato un messaggio, una delle due cose era il caso. Se la transazione precedente era riuscita e doveva essere accumulata nei totali giornalieri, il terminale usava la sua nuova chiave cancellata per hash l'ultimo messaggio. Se la transazione precedente è stata ripristinata (utente annullato, firma errata ecc.) Il terminale avrebbe riutilizzato la chiave hash precedente. Cancellando il messaggio con l'ultima chiave inserita e non trovando corrispondenze, ma eseguendo l'hashing con la chiave precedente e trovando una corrispondenza, sapevamo che il destino della transazione precedente era fallito e lo elimineremmo dai totali giornalieri.
Le chiavi hash di tanto in tanto andavano fuori sincrono; quando ciò è accaduto, nessuna delle nostre chiavi memorizzate produrrebbe un hash di corrispondenza per il messaggio. C'è un'altra chiave da provare: la chiave iniziale (gli utenti del supervisore potrebbero reimpostare la chiave all'inizio, e alcuni utenti sembravano farlo su qualsiasi problema, credendo che si trattasse di qualcosa come un riavvio: raramente il caso causava più problemi di risolto ma ..).
Se la chiave iniziale ha funzionato, non potremmo dire con certezza cosa è successo alla transazione precedente, ma di solito li abbiamo accumulati (conti delle persone pagate) sulla base della teoria che la gente si lamenterebbe se non fossero stati rimborsati quando dovuti ma non se sono stati rimborsati qualcosa che avevano comprato ..
Se la chiave iniziale non ha funzionato, il terminale è diventato effettivamente inutile, poiché la perdita di sincronizzazione a rotazione significa che non possono funzionare più messaggi. Non avevamo l'autorità di dire al terminale di resettare la sua stessa chiave, ma potremmo inserire un messaggio sul display implorando l'utente di farlo
Per farla breve, non è necessario utilizzare lo stesso token, se si è preoccupati che i token vengano catturati e riprodotti come alternativa memorizzata per le password. Altri hanno indicato opzioni di fare scadere i token dopo un certo tempo; questo metodo è essenzialmente un token in scadenza dopo ogni richiesta (simile a un'altra menzione sull'aggiunta di un numero sequenziale a un token), con un modo interno noto di calcolare un nuovo token su ciascun lato che deve essere eseguito nel passaggio.
Se sei interessato ai dettagli noiosi del modo in cui il mondo della carta di credito lo fa nel Regno Unito, consulta APACS 70 Standard Book 2 e Book 5. Questi non sono disponibili gratuitamente, purtroppo - devi essere un membro per ricevere una copia di nuove pubblicazioni, ma potresti trovare il contenuto di vecchie versioni di esse che girano attorno al Web