(Nota: originariamente pubblicato in SO - consigliato di pubblicare su SSE)
Per quanto riguarda la crittografia di Rijndael, quali (se esistono) sono le migliori pratiche (e le conseguenze) relative alla modifica periodica di uno o più di questi valori (in particolare in un'applicazione Web C # .NET):
- Salt
- Vettore di inizializzazione (IV)
- Frase verbale
È prassi comune (o di fatto necessaria) modificare uno qualsiasi di questi valori nel corso della durata di un'applicazione? (Ad esempio, se uno o più sono compromessi, o solo come parte di una politica generale.)
In caso affermativo, quale sarà l'impatto sui dati esistenti in un database che è stato crittografato utilizzando i valori originali (precedenti)? Modificando questi valori, si potrebbe pensare che la decrittografia dei dati esistenti non "funzionerà" più (o non restituirà informazioni false?).
(Immagino che lo scopo di questa domanda possa includere il modo in cui tali valori sono memorizzati - ad esempio utilizzando meccanismi di archiviazione di terze parti o altrimenti sicuri - quindi inizialmente diciamo che i valori sopra menzionati sono attualmente memorizzati in testo in una classe chiamato RijndaelCryptography, e vai da lì.)
Per illustrare la mia domanda, vedere il seguente link: Procedura: crittografia e decrittografia dei dati utilizzando una chiave simmetrica (Rijndael) (C # / VB.NET)
Questo esempio particolare è in qualche modo una buona pratica (fissando il passaggio / sale / IV a livello di codice)?
Aggiornamento 1
- Rimosso "AES" dalla domanda.
Aggiornamento 2
- Ho letto che Microsoft consiglia di utilizzare AES anziché Rijndael:
"The Rijndael class is the predecessor of the Aes algorithm. You should use the Aes algorithm instead of Rijndael. For more information, see the entry The Differences Between Rijndael and AES in the .NET Security blog." (Link - see half-way down that page)