Questa domanda è diretta al framework .Net, ma si spera che si possa rispondere per comprendere molte lingue e amp; quadri.
Supponiamo di avere due metodi, uno che in realtà decifra i dati e uno che prende i dati decriptati e li restituisce all'utente:
private string Decypt_Data(string encryptedText, string EncryptionKey) {
string plainText = "";
using(SomeEncryptionClass myObject = new SomeEncryptionClass()) {
myObject.Key = EncryptionKey; //lets not worry about how we create or store these
myObject.IV = GetIV();
plainText = myObject.DecryptText(encryptedText);
}
return plainText; //REFERENCE 1
}
//specifically this is called from a controller after a POST
private ActionResult Read_Encrypted_Value()
{
string encryptedEncryptionKey = GetDataFromDatabase("keyfield");
string encryptionKey = Decypt_Data(encryptedEncryptionKey, GetKeyFromSomeWhereThisIsUnImportant());
//decrypt data with plainText (ie. plainText is a key.. but this isnt important to the question)
syromg encryptedData = GetDataFromDatabase("datafield");
return View(Decypt_Data(encryptedData, encryptionKey)); //RFERENCE 2
}
Osservando il metodo Decrypt_Data, il testo crittografato viene passato e decodificato, quindi viene restituito il testo semplice.
La domanda è ... quanto è sicuro il valore memorizzato in "plainText" (in REFERENCE 1)?
La variabile plainText dura solo per l'ambito del metodo ... ma cosa allora? Questo valore rimane in memoria finché il Garbage Collector non lo gestisce? Ottiene NULLed o qualcosa del genere? Dovrei fare qualcosa come in REFERENCE 2, dove faccio il calcolo e restituisco il valore insieme? Devo passare le stringhe come riferimenti, in modo che la variabile che restituisce il valore non debba essere istanziata?
Se il valore rimane in memoria, non è vulnerabile? Un utente malintenzionato non può leggere la memoria e rubare il valore? (Sto lavorando sul princaplo che questo valore è usato per decriptare altri dati ... quindi l'autore dell'attacco che ha accesso diretto al database non gli da tutti i dati).
La risposta
Grazie mille a tutti per le vostre risposte, ho trovato questo articolo: collegamento in uno dei collegamenti dalla risposta dell'utente10008. Copre praticamente tutto ciò che è necessario sapere + completare l'elenco dei codici.