I have a power constrained environment where I do not have enough power to update an encryption key. For this reason, the symmetric key will be programmed before the devices are distributed, and this key is used to encrypt a payload. I have two different things that I could possibly change, one is a nonce, and the other is a modification to the base key. I don't have a way to generate a nonce locally; however, in the system, you have a "host" and a "client" and the host polls the client. The encrypted packed goes from the client to host. For the sake of scope, let's assume AES-128. I have a very small, non-volatile memory of 128 bytes. Here is a list of things that I could possibly do within the current framework:
- I could send a random number and XOR that with key that is already stored in the "client". The problem there is that I have 128-bit key but only the ability to send a 32-bit value to the device (currently that is, I possibly could get 128-bits, but I need to look into the channel bandwidth)
- The device creates a 16-bit pseudorandom number that is generated by the client is known by both the host and client, and I could use that a nonce in some way. This approach is easiest because it becomes a host-side software issue because the key is not modified.
Above is basically a nuance to the problem, so the question is: Is there a standard method to deal with the problem of an immutable key structure in a system which uses a symmetric cipher?