Useremo i seguenti comandi per crittografare il file del firmware sul server e questo verrà decrittografato sulla scheda incorporata usando il comando di decrittazione menzionato sotto,
Il seguente comando verrà utilizzato per generare una chiave simmetrica di lunghezza 128 bit
openssl rand 16 > ./symmetric.key
useremo i seguenti comandi per creare chiavi private e pubbliche nel formato PKCS # 8
openssl genrsa 4096 | openssl pkcs8 -inform PEM -topk8 -v2 aes-128-cbc -nocrypt -out keyfile.pem
openssl pkey -inform PEM -in keyfile.pem -pubout -out keyfile_pkcs.pub
Per la crittografia del firmware useremo il seguente comando
openssl enc -in firmware.tar -aes-128-cbc -salt -out firmware.enc -pass file:./symmetric.key
Abbiamo due opzioni per crittografare / decrittografare la chiave simmetrica sul lato scheda,
Opzione 1 . Cripta la chiave simmetrica usando la chiave pubblica sul server e decrittala usando la chiave privata a bordo.
Abbiamo pensato di utilizzare i seguenti set di comandi,
openssl pkeyutl -encrypt -pubin -inkey keyfile_pkcs.pub -in symmetric.key -out symmetric.key.enc
openssl pkeyutl -decrypt -inkey keyfile.pem -in symmetric.key.enc -out decrypted_symmetric.key
Opzione 2 . Criptare (firmarlo) usando la chiave privata sul server e decodificarlo (verifyrecover) usando la chiave pubblica a bordo. Abbiamo pensato di utilizzare i seguenti set di comandi,
openssl pkeyutl -sign -inkey keyfile.pem -in symmetric.key -out symmetric.key.enc
openssl pkeyutl -verifyrecover -pubin -inkey keyfile_pkcs.pub -in symmetric.key.enc -out decrypted_symmetric.key
EDIT Solo per completezza, mettendo il comando per decrittografare il file del firmware usando la chiave simmetrica.
openssl enc -d -aes-128-cbc -in firmware.enc -pass file:./decrypted_symmetric.key -out firmware.tar
Ora che siamo nuovi in questa crittografia e OpenSSL abbiamo i seguenti dubbi,
Doubt 1: Which option to choose for encrypting symmetric key? (option 1 or option 2)
Doubt 2: Do you suggest any improvements in above commands? Do you see any problem in this method ?
Qualche altro suggerimento / correzione / puntatori?