On 2026-07-06 13:51, Cornelia Huck wrote:
On Mon, Jul 06 2026, Harald Freudenberger <[email protected]> wrote:

Add base support for cpacf protected key handling.

The qemu version provided here is only a fake intended to make
protected key available for developing and testing purpose:
* The protected key is 'derived' from the clear key by xoring
  the fixed pattern 0xAAAA... onto the key value.
* The AES Wrapping Key Verification Pattern is a fixed
  value of 32 bytes 0xFACEFACE...

Add preprocessor defines for the xor pattern and wkvp used to
construct ('encrypt') a protected key from a clear key value with
this implementation. Also add some static functions to 'encrypt'
from clear key to protected key and 'decrypt' back to cpacf_aes.c.

The preprocessor defines shall be used later in testcases to
construct and decode protected keys.

Hmm... so does that mean that we only provide the protected key handling in the !KVM case for people who want to run via tcg for some development
purposes? Does the user actually get some kind of notice in that case,
if for example they run with !KVM due to some configuration hiccup? IOW,
do users get some clue that they are running with a fake placeholder
implementation, other than the setup being slow?


Well, there are 2 paths leading to protected use:
1) you have a secure key and want to 'derive' a protected key from that
   to operate faster. This is for example the case now when you have an
   PAES encrypted filesystem.
   In such a case you need a crypto card with the Master Key setting
   fitting to when your secure key was generated.
   -> this is not a practical way for qemu on !KVM as you need a crypto
   card AND the s390 firmware stack.
2) you 'derive' a protected key from a clear key value. On a s390 system
   this is done via the privileged instruction PCKMO. On this qemu with
   !KVM this is the fake I implemented.
In general it is absolutely not recommended to go this path as the source
   of the key is/was/needs to stay in OS memory. So you don't win any
   security by using protected keys this way - in fact you would have
done better to just use the clear key as it is. Please note also, that by default this path on a s390 system is disabled - however, for testing
   purpose there are ways to use it this way.
However, this is exactly what this implementation here is for. For testing purpose you may 'derive' a protected key from clear key or any other way as the algorithm to derive is clear documented here. And then you can play
   around and run tests with protected key implementations.

I see your point: How can a innocent user see that his/her vm is running with
this fake installation instead of the real one. The answer is:
If the source of the protected key is a secure key - then there is no path
on the faked implementation to get a hand on a protected key.
If the source of the protected key is a clear key - honestly does it even
matter which implementation is then running?

Hopefully I could explain the difference.


Signed-off-by: Harald Freudenberger <[email protected]>
---
 target/s390x/tcg/cpacf.h     | 25 +++++++++++++++++++++++
target/s390x/tcg/cpacf_aes.c | 39 ++++++++++++++++++++++++++++++++++++
 2 files changed, 64 insertions(+)

Reply via email to