My annual plea for a thing: I want a type 1 hypervisor that just has a small isolated VM and then passes through the rest of the hardware to the main VM which runs Linux. The small VM is intended to be used to run small pieces of code that the main OS should not be able to interfere with. Does such a thing exist? (Think Xen, but with a Dom0 that can't see into DomUs)

@mjg59 To be sure I understand, you want a small VM and a big VM. The big VM gets all the hardware minus what’s needed to run the hypervisor and the small VM. Communications between the big VM and the small VM are strictly controlled in both directions such that neither can interfere with the other.

What sort of thing are you trying to do with this small VM?

This sounds kind of like what a TPM is for, or maybe a BMC/SMC/LOM.

@bob_zim Manage secrets in ways that the TPM can't (eg, the TPM can't establish a secure communications channel with a biometric reader)

@mjg59 So the small VM would own the physical link to the biometric reader, then provide its own attestation about the biometric reader’s attestation it was presented an authentic biometric?

Hmm. I’m not sure I know of a way to do that in software. Decent biometric readers should already use asymmetric keys, though. It should be possible to get a secure element like a TPM or smart card to only unlock a stored key when presented with a valid signature from the reader’s private key.

@bob_zim No need for a physical link (eg, TLS is secure without you having to trust the physical link, modern biometric devices implement equivalent functionality). It is not possible to use a TPM in this way given the hardware that exists.

@mjg59 That’s what I’m getting at: decent biometric readers should already use asymmetric keys. You may not be able to hook that directly to an off-the-shelf TPM, though I thought some had firmware allowing them to trust external public keys for exactly this reason. Might require writing custom RoT firmware like Oxide has done.

A guest can never keep a secret from the hypervisor under which it runs. The host always has full control over the guest, including the ability to inspect and change stack frames. At that point, you’re guaranteed to have a single piece of software which can get at both the clear key material from the small VM’s RAM and the data the key controls from the big VM.

Assuming that’s what you’re trying to prevent, I don’t know of any software system I would trust to provide sufficient isolation between the guests, even at a theoretical level. Computer-in-a-computer stuff like a TPM is it.

@mjg59 @bob_zim The goal is not to hide secrets from the hypervisor, but for the small VM to hide secrets from the big VM, using the trusted hypervisor.
@nicolas17 @mjg59 Then just use dom0 instead of the small VM. That’s easy. The hypervisor can keep secrets from a guest. That’s an obvious solution, though, which is why I wanted to clarify the requirements.
@bob_zim @nicolas17 But then it's massively harder to plumb all my hardware (including ACPI) into a domu
@mjg59 @nicolas17 So is the goal something like a software secure element for workstation use?