Considera un sistema che riceve, ma non memorizza, una parte di informazioni sensibili X
da un utente. Se volessi aggiungere un modo per ricordare quando un utente ha inviato la stessa X più di una volta, quale sarebbe il modo più sicuro per farlo? X non è utilizzato per altri scopi; non è una password.
L'approccio ovvio ma insicuro sarebbe archiviare tutti gli invii di X e controllare i duplicati. Un modo per renderlo più sicuro sarebbe calcolare un verificatore (bcrypt o simile) delle presentazioni. Generato correttamente, la mia comprensione è che ciò sconfiggerebbe gli attacchi precablati con le tavole arcobaleno.
La mia preoccupazione è con gli attacchi di dizionario. Se X è relativamente probabile, un attaccante determinato può probabilmente fare progressi lenti ma costanti contro il verificatore. Una soluzione a questo è di troncare deliberatamente il verificatore per aumentare il numero di possibili testi in chiaro che corrisponde. Poiché X non è una password, dovrebbe essere OK per aumentare il numero di falsi positivi (un duplicato rilevato quando non ce n'è). Ma dal lato dell'attaccante, potrebbero scoprire che è facile trovare un testo in chiaro corrispondente, ma ce ne sono così tanti che è impossibile stabilire quale sia l'originale.
In altre parole, se l'entropia del verificatore è significativamente inferiore all'entropia del testo in chiaro, l'insieme di tutti i testi in chiaro che corrispondono a un determinato verificatore dovrebbe essere molto più grande di se le entropie fossero di dimensioni comparabili. Quindi è impossibile stabilire quale testo in chiaro sia l'originale.
È un approccio valido? O è eccessivo se il verificatore è calcolato usando un algoritmo lento come bcrypt?