Questa domanda non può essere risolta senza sapere quale cifra o modalità è in uso, perché quelli diversi hanno requisiti diversi sui loro IV e diverse modalità di errore. Ci sono due casi generali qui:
- Cipher che richiedono IVs unici .
- AES-CTR è un ottimo esempio. La modalità di errore per il riutilizzo IV qui è perdita di riservatezza catastrofica : un utente malintenzionato potrebbe probabilmente riuscire a decrittografare tutti i valori.
- Cipher che richiedono IVs casuali .
- AES-CBC è un ottimo esempio. La modalità di errore per il riutilizzo IV è perdita di sicurezza semantica - il testo in chiaro crittografato due volte produce lo stesso testo cifrato, quindi l'autore dell'attacco può dire che lo stesso testo cifrato in due contesti diversi sta per lo stesso testo in chiaro.
Quindi, chiaramente, se stai usando qualcosa come AES-CTR devi utilizzare IV esclusivi, non c'è modo di aggirarlo. Più in generale, devi seguire le istruzioni per i codici specifici che stai utilizzando, cosa che non hai nemmeno detto, invece di provare a inventare un modo ad hoc di non farlo. (Dovrebbe essere una enorme bandiera rossa!)
In secondo luogo, stai giocando veloce e libero con l'idea che stai usando un prefisso "unico", perché stai descrivendo questo prefisso come user_id
. Ma ciò implica che i prefissi che hai in mente sono unici per ogni utente . Ma ciò che normalmente vorrebbero utilizzare è un IV che è unico per ogni operazione di crittografia se si crittografa due volte lo stesso testo in chiaro, ci si aspetta che fornisca due IV diversi in modo che le crittografie producano diversi testi cifrati.
In terzo luogo, le tue preoccupazioni sulla "duplicazione" sono sulla strada sbagliata. A seconda di cosa intendi con quello (che non è chiaro!):
- Se si usano gli IV casuali e li si antepone al testo in chiaro, non possono esserci duplicati di cifratura affatto , poiché le crittografie sono iniettive - ogni cifratura può essere "annullata" e hai la certezza di riavere il testo in chiaro originale. Ciò implica che coppie duplicate (IV, testo cifrato) sono impossibili.
- Se sei preoccupato che la crittografia dello stesso testo in chiaro due volte in contesti diversi produrrà dei ciphertex "duplicati", la tua proposta di prefissare
user_id
non lo risolverà! Crittografare lo stesso {{user_id:ssn}}
plaintext due volte produrrà sempre lo stesso testo cifrato.
L'ho detto in la mia risposta alla tua altra domanda recente , e la ripeto: non devi andare avanti con i tuoi piani per implementare la sicurezza per la tua applicazione. Hai bisogno di aiuto professionale e competente.