Non dovresti mai usare l'utilità della riga di comando di OpenSSL per la crittografia generica. In realtà è progettato solo come test delle routine di crittografia interna della libreria. Per questo motivo, ci sono alcuni problemi inerenti all'uso quando è necessaria la massima riservatezza e integrità:
- Sarai vulnerabile a malleabilità attacchi , poiché la modalità CBC non è autenticata. Ciò può consentire la modifica dei file in determinati modi prevedibili senza conoscere la chiave di crittografia.
- Nessun controllo dell'integrità significa che la decrittografia con la chiave sbagliata può avere successo, nonostante l'emissione di parole senza senso corrotte. Le utilità progettate per la crittografia dei file ti diranno se la chiave è sbagliata.
- L' hash predefinito utilizzato per derivare la chiave master è MD5, che è tutt'altro che ideale. È possibile modificare l'hash, ad esempio con
-md sha512
, ma non utilizzerà ancora lo stretching delle chiavi.
- Le nuove versioni potrebbero non essere in grado di decodificare i file precedentemente crittografati per impostazione predefinita. Quando il valore hash predefinito è stato modificato da MD5 a SHA-512, è necessario un
-md md5
esplicito per funzionare di nuovo.
- Sia la chiave che IV derivano dalla tua password di input. L'utilizzo della stessa password per crittografare più file comporterà il riutilizzo IV. Ciò è negativo per la modalità CBC e fatale per la modalità CTR.
- Non è ben testato. Per molte versioni di OpenSSL,
enc
utilizzando la crittografia in modalità GCM ha funzionato, ma la decrittografia no. Questo potrebbe anche essere il caso.
Questo non è univoco per il comando enc
. L'utilità della riga di comando di OpenSSL ha altri trucchi quando si tenta di utilizzarlo per scopi diversi dalla verifica della libreria. Un altro esempio è il comando s_client
, utilizzato per la connessione a un server su SSL o TLS, che non convalida il certificato della destinazione. Nel complesso, non dovresti usare l'utility OpenSSL . Basta usare GnuPG:
L'unica volta che userò OpenSSL direttamente è se ho bisogno di crittografare qualcosa con una chiave completamente casuale o una chiave raw specifica e una IV e non mi importava dell'integrità del messaggio. Ad esempio, scrivere un flusso pseudocasuale seminato dal kernel su stdout può essere fatto con:
openssl aes-128-ctr -nosalt -k $(xxd -l16 -c16 -ps /dev/urandom) -in /dev/zero
Allo stesso modo, decifrare un blob di semplici dati crittografati quando si conosce sia la chiave grezza che la IV grezza in esadecimale (ignorando la necessità di -md
per la derivazione della chiave) potrebbe essere fatto con:
openssl aes-128-cbc -d -nosalt -K $hex_key -iv $hex_iv -in infile -out outfile
Ma per crittografia di file generica? Basta usare GnuPG.