Add to the encryption a new mode that, besides the encrypted output, also outputs a kind of "fingerprint" for the encrypted message. Then to the decryption add a new parameter that allows one to specify this "fingerprint".
How does this work:
- it acts like a detached signature for the encrypted message;
- it binds not only the message, but also all the other parameters that went into the encryption (nonce, senders, recipients, secrets, pins, ballasts, oracles, etc.;)
- also it forces the one that decrypts the message be in the possession of the "fingerprint", else the message can't be decrypted;
- finally it serves as a way do verify that the message we actually expect was the one actually decrypted;
Properties:
- it doesn't need to be kept secret;
- if it's kept secret, it basically plays the same role as a normal "secret";
- if it's made public, it serves as a commitment that the output of the decryption is the one actually being decrypted; (i.e. make the fingerprint public, and at decryption time you can prove you've decrypted what you've promised to;)
- if during the encryption a fingerprint was requested, the decryption can't happen without also providing the fingerprint;
What use-cases can it serve:
- act as a "bearer token" for the message; knowing the "fingerprint" is mandatory for the decryption, and at the same time it can verify what was decrypted;
- one can save the encrypted file on a public store (like S3), and at decryption time we are sure we are decrypting what we are expecting (because someone, or even the original sender, can't replace the file without breaking the fingerprint;)
Add to the encryption a new mode that, besides the encrypted output, also outputs a kind of "fingerprint" for the encrypted message. Then to the decryption add a new parameter that allows one to specify this "fingerprint".
How does this work:
Properties:
What use-cases can it serve: