Per lo scopo dello strumento che sono attualmente in fase di scrittura , ho bisogno di eseguire qualche crittografia / decrittografia AES su qualche input. È come una pipeline: i dati vengono alimentati, viene eseguito l'algoritmo e trasmesso al modificatore successivo.
Sono abituato a openssl enc -aes-256-cbc
per crittografare e decrittografare tutto. La mia comprensione di questo è che, per prima cosa, si ottiene la chiave inserita usando una sorta di pbkdf-sha1
con circa 8 byte generati salt
, quindi si ottiene iv
da derived key + salt
.
Ovviamente funziona solo con OpenSSL dato che non sono stato in grado di trovare nessuno standard su come comunicare - o scrivere su file - i parametri iv
e salt
. Mi aspettavo una specie di RFC (come per i parametri della curva ellittica) ma senza fortuna.
La mia idea è di avere un'intestazione di 64 byte: salt + iv
prima nel file, quindi è seguito dai dati crittografati. Userò il salt
con pbkdf2-sha256
per derivare la chiave.
Le intestazioni non hanno una lunghezza fissa, la regolazione dei parametri corretti quando avvii il programma otterrà il salt
e iv
impostato sui valori corretti.
Non voglio fare alcun errore. Sono rimasto sbalordito da come potrebbe essere il link più debole e quanto sia facile recuperare una password da una brutta derivazione di chiavi e / o dalla generazione di IV.
Sono piuttosto sicuro che ogni implementazione aes abbia il proprio protocollo sui parametri. E penso che sia triste.
Ovviamente userò crypto/aes
da Go e il loro pbkdf2
, prendendo sempre la fonte casuale da crypto/rand
e non math/rand
.
Per riassumere:
-
Esiste uno standard con parametri AES come
salt
eiv
? -
Devo generare
iv
o derivarlo dasalt || dk
?
Modifica
Ho dimenticato di menzionare che stavo per usare PKCS 5#2.0
che specifica come derivare la chiave, ma questa domanda era più rivolta alle best practice su iv
e salt
di archiviazione per una maggiore compatibilità.