La mia applicazione utilizza la classe RijndaelManaged per crittografare i dati. Come parte di questa crittografia, utilizzo un oggetto SecureString caricato con una password che viene convertito in una matrice di byte e caricato nella chiave dell'oggetto di RajindaelManaged in fase di runtime.Memorizzare in modo sicuro una password nel codice del programma?
La domanda che ho è la memorizzazione di questo SecureString. Una password immessa dall'utente può essere immessa in fase di esecuzione e può essere caricata "in sicurezza" in un oggetto SecureString, ma se non viene specificata alcuna password inserita dall'utente, è necessario eseguire l'impostazione predefinita su qualcosa.
Quindi in ultima analisi, il quesiton si riduce a:
Se devo avere alcuni noti stringa o array di byte da caricare in un oggetto SecureString ogni volta le mie corse di applicazione, come posso fare questo? I dati "crittografati" alla fine vengono decrittografati da un'altra applicazione, quindi anche se non viene specificata alcuna password inserita dall'utente, ho ancora bisogno che i dati vengano crittografati mentre passano da un'app all'altra. Ciò significa che non posso avere la password predefinita in ordine casuale, perché l'altra app non sarebbe in grado di decrittografarla correttamente.
Una possibile soluzione che sto pensando è quello di creare una dll che sputa solo una singola password, allora io uso che passphrase ed eseguirlo tramite un paio di diversi hashing/funzioni di riorganizzazione in fase di esecuzione prima che in ultima analisi, inserirlo nell'apparecchio oggetto secureString. Questo sarebbe abbastanza sicuro?
Modifica Per chiarezza *: I dati crittografati vengono passati tramite file tra macchine. Consideralo come un file Zip che ha sempre una password, si presume un valore predefinito se nulla viene inserito direttamente dall'utente.
Ho letto la domanda come in arrivo con un'alternativa alla codifica hard della stringa in primo luogo. – Serapth
Non è locale alla macchina, i dati crittografati finiscono in xml, che viene poi trasferito su una macchina diversa (non è tuttavia possibile una connessione diretta). – Nick
+1 Sono totalmente d'accordo con Pidgin. – rook