Usaremos los siguientes comandos para cifrar el archivo de firmware en el servidor y eso se descifrará en la placa incorporada usando el comando de descifrado que se menciona a continuación,
El siguiente comando se utilizará para generar una clave simétrica de 128 bits de longitud
openssl rand 16 > ./symmetric.key
utilizaremos los siguientes comandos para crear claves privadas y públicas en 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
Para cifrar el firmware utilizaremos el siguiente comando
openssl enc -in firmware.tar -aes-128-cbc -salt -out firmware.enc -pass file:./symmetric.key
Tenemos dos opciones para cifrar / descifrar la clave simétrica en el lado del tablero,
Opción 1 . Cifre la clave simétrica usando una clave pública en el servidor y descifrela usando una clave privada en la placa.
Pensamos en usar los siguientes conjuntos de comandos,
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
Opción 2 . Cifre (firme) usando una clave privada en el servidor y descifre (verificar, recupere) usando una clave pública en el tablero. Pensamos en utilizar los siguientes conjuntos de comandos,
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 para completar el comando para descifrar el archivo de firmware con una clave simétrica.
openssl enc -d -aes-128-cbc -in firmware.enc -pass file:./decrypted_symmetric.key -out firmware.tar
Ahora que somos nuevos en esta criptografía y OpenSSL, tenemos las siguientes dudas,
Duda 1 : ¿Qué opción elegir para cifrar la clave simétrica? (opción 1 o la opción 2)
Duda 2 : ¿Sugieres alguna mejora en los comandos anteriores? Lo ves ¿Algún problema en este método?
¿Alguna otra sugerencia / corrección / punteros?