Sto scrivendo una piccola classe da aggiungere alla mia applicazione che gestirà cose come i segreti di configurazione. (Non voglio entrare in questo argomento poiché molte ricerche sono andate nell'approccio che abbiamo deciso di adottare per questo.)
Uno dei requisiti è crittografare i segreti dei file. (Pensa a una chiave di certificato TLS oa una chiave segreta PGP.) Sono in grado di generare (e decodificare) una chiave segreta che può essere utilizzata per crittografare / decrittografare i file all'esterno dell'applicazione utilizzando il servizio KMS di AWS. (Vedi questo per informazioni su ciò che effettivamente restituisce: link )
Quindi, per il mio modo di pensare ciò significa solo che ho bisogno di memorizzare la versione crittografata della chiave insieme al file in modo da poter decodificare la chiave, usarla per decrittografare il file quando viene utilizzato.
La mia confusione deriva dall'uso delle funzioni openssl encrypt / decrypt sui dati del file a causa della IV. Ho letto molto di IV negli ultimi due giorni e ne ho compreso lo scopo generale, ma mi rimangono molte domande che cercano di conciliare ciò con quello che vedo nel "mondo reale".
Quando uso openssl da una riga di comando per crittografare un file che ho letto per usarlo:
openssl aes-256-cbc -salt -in secrets.txt -out secrets.txt.enc
Notate che non è passata alcuna IV, sebbene il parametro -salt possa servire a uno scopo simile?
Ma quando decrypt lo stesso file uso un comando come questo:
openssl aes-256-cbc -d -in secrets.txt.enc -out secrets.txt.new
Nota nessun parametro -salt, nessun IV o qualcosa di simile, quindi come è in grado di decodificare il file senza quelle informazioni?
Nelle funzioni openssl encrypt / decrypt in PHP, e in altre discussioni su IV, è altamente raccomandato l'uso di un IV durante la crittografia dei dati, il che suggerisce che ho bisogno di memorizzare / utilizzare l'IV durante la decodifica, ma questo non viene eseguito dalla riga di comando, quindi come funziona? La riga di comando sopra è meno sicura per quello? Non è necessario utilizzare un IV in base al fatto che ogni file avrà la propria chiave di crittografia sicura?