Hi Kaleb,
Thanks for your explaination.
The background and requriement is :
Normally, when we release the upgrade package for any product, the integration team will use RSA private key to generate signature for upgrade package, then the final upgrade package will include both original package data and its signature file.
When the product need to do upgrade, the product's firmwair will use paired RSA public key to do signature verify for ensure the upgrade package is authenticate. This is the normal upgrade process. (Note, the product's firmwair doesn't include RSA private key, only have RSA public key. The RSA private key also hold by integration team or our customer)
But, now we met trouble, our product is tampered by some hackers. Why hackers can understand our product? Because they received our uprade package through some way, and done 'reverse engineering' on our uprade package. Because our upgrade pakcage is plain text, even it include signature.
So, I want to let upgrade pacakge always showing cipher text, in this situation, hacker is impossible to do 'reverse engineering'.
My propoal is : during every integration time,
1st, integration team will generate one AES128 key randomly, and use AES128 key to encrypt the original upgrade package as cipher text;
2nd, this AES128 key will be encrypted by RSA private key
3rd, use RSA private key to generate signature for original upgrade package.
4th, finally, the real upgrade package will icnlude -> cipher file of AES128 key + cipher file of original upgrade package + signature file of original upgrade package
Then, the product's firmwire will decrypt and verify this upgrade package by RSA public key. In this proposal, we don't need store any more cipher keys in our product, only one RSA public key is enough. And I already used openSSL verified this proposal, it is possible.
Yes, maybe this is not a perfect solution, could you please give me better advice (based on wolfSSL library)?