Submind YouTube summaries
Thumbnail for Confidential Computing with OpenBSD - Hans-Jörg Höxer - EuroBSDCon 2024

Confidential Computing with OpenBSD - Hans-Jörg Höxer - EuroBSDCon 2024

Watch on YouTube

Video summary

The speaker, Hans-Jörg Höxer, introduces the concept of confidential computing as a solution to the inherent trust issues in public cloud environments and virtualization. Traditionally, users must trust both the hypervisor and the hardware provider because these privileged components have full access to memory and can potentially leak sensitive data like private keys. Confidential computing aims to mitigate this by encrypting memory at runtime using dedicated hardware support, ensuring that even if the hypervisor is compromised or malicious, it only sees encrypted gibberish rather than plaintext secrets. This approach effectively transforms a public cloud into a more secure, private-like environment where the integrity and confidentiality of data are preserved despite running on untrusted infrastructure. To achieve this, the presentation focuses specifically on AMD's Secure Encrypted Virtualization (SEV) technology, which utilizes a Platform Security Processor (PSP) to manage encryption keys independently of the main CPU cores. The hardware employs a mechanism where each virtual machine is assigned a unique key, and memory pages are marked with a specific bit in the page tables to indicate they should be encrypted. When data moves between the CPU cache and system RAM, it is automatically encrypted upon leaving the die and decrypted only when accessed by the authorized guest operating system. This architectural shift reverses the traditional security model by granting the guest more control over its own memory privacy while reducing the privileges of the hypervisor regarding sensitive data. The core of the talk details the practical implementation of these features within OpenBSD, a project where Höxer has worked for decades. He describes the significant modifications required to integrate SEV into the VMM virtual machine monitor and the guest kernel, including implementing drivers for the PSP, hardcoding encryption bits in page tables, and managing DMA operations through bounce buffers to handle interactions between encrypted guest memory and unencrypted hypervisor resources. Through iterative development and community collaboration, the team successfully booted a fully encrypted RAM disk kernel, verified the encryption status using compression heatmaps, and stabilized the system against build-related crashes, demonstrating that OpenBSD can serve as a robust platform for confidential virtual machines. Despite these successes, Höxer acknowledges current limitations, such as the fact that CPU state including registers and cache remains unencrypted, which could theoretically be exposed during context switches or specific hardware events. He also notes potential security risks associated with firmware vulnerabilities in the PSP and the performance overhead introduced by encryption and bounce buffering, estimating a degradation of around 30 to 50% without further optimization. The conclusion emphasizes that while the technology is not yet perfect and requires ongoing work on attestation and secure boot mechanisms, it represents a promising step forward for privacy-preserving cloud computing, with plans to continue refining the implementation in future years.
Read the full video transcript
okay thank you very much for the kind introduction I to be honest it's the first time in years that I'm doing a speak a talk like this so bear with me when I'm a little bit nervous maybe and if you don't understand me let me know if I can improve it so what I want to talk about today is confidential Computing with open BSD and maybe yesterday I changed my mind a little bit and maybe we are talking about uh confidential Computing with wmd actually but let me introduce myself shortly uh in the mid 2000s I have been actively developing with and for open BSD mainly in the IPC area IPC CTL I think was written by me Isa kbd I was in involved in stuff like this uh my first experience with openbsd is actually openbsd do5 I think this was 19 96 something like this uh and since then I'm working for a DRM company Genoa uh that is mainly building firewalls and VPN applications based on open BSD so my daily work includes mainly developing on open BSD so confidential Compu what is this all about it's to me it was a buzz word to be honest and some time ago maybe last year beginning of last year at our company at my day job this the term confidential Computing keeps kept popping up people talking about it so I got interested and was wondering what what they are talking about and I was hearing some claims like uh from customers that they want to work with confidential confidential data in a public Cloud so public Cloud what does this mean so to me this means mainly something with we VMS virtal machines and the problem that these people seem to have is that they want to work with sensitive data in an untrusted environment you have a public cloud provider and you sort of have to trust the cloud provider and then on the other hand there are people that provide VM service to customers to or to to to to projects to host their project on a virtual machine and and and these people have a similar problem if you want to use your SSH private key in that virtual machine you sort of have to trust the hypervisor you have to trust your your VM hosting environment and obviously in that area there's a supposed solution that is called confidential computer Computing and some slogan I read some time ago was something like this turn public Cloud into a private Cloud so this is a bold statement and I started thinking about this what do they mean what what does this mean what do they want actually to achieve so let's look at an an untrusted environment everybody think I think knows this we have our Hardware we have an operating system running on top of our hardware and I do we see the mouse pointer yes here it is and we have some userland process running on top of the kernel and we all know sort of the kernel has all the Privileges the kernel controls the resources including the memory used by the userland application therefore we have to trust the kernel because the kernel can Peak into our userland application and similar the kernel provides some isolation between other userland processes so we sort of hope we we we should hope that we can be sure that one process is isolate from the isolated from the other process but nonetheless both both processes have to trust the kernel and when things go SE severely wrong and the kernel has a bug and evil application of course can trick the kernel into exposing information of the other process including the memory of the process including for example if this would be an SSH agent holding a private key and if I can trick due to Bucks the kernel into exposing these private Keys then the keys are gone now with virtualization we have sort of a similar situation now we have our Hardware on top of the hardware a kernel is running a hypervisor is running and that is providing an environment where we can run uh our virtual machine and now the the situ situation is quite similar the hypervisor is privileged he controls all the hardware he controls all the resources of the machine and the hypervisor can Peak into the memory into the uh memory of the virtual machines running on top of the hyper again the hypervisor provides some isolation between virtual machines so they are separated similar like the processes and as we learned yesterday uh open BSD and vmd using uh privilege separation to really make the chances really low that a bug in the hypervisor might allow uh uh does not allow or reduces the risks of some guest exploiting bucks in the hypervisor to gain information about some other guest so this would be the one scenario that WMS explo exploit each other and the other thing is still we have to trust the hypervisor to not leak information about the virtual machines and now in in these entrusted en untrusted environments confidential Computing seems to provide the claim that it's possible to uh to protect the address uh the memory used by the virtual machines by for example encryption and therefore that the hypervisor does not need to be fully trusted anymore because the hypervisor now only sees encrypted memory of the guest and each guest has its own encryption keys so even if one guest is able to look into whatever reason gains U access to a page of an other guest he only will see the encrypted State the encrypted memory of that other guest and this obviously needs um so this needs some um support oops oops this needs some support by the hardware where because to get the hypervisor out of the loop that the hypervisor is not trusted all this encryption of the memory has to be done somehow has to be done uh done somehow by the hardware so to summarize confidential Computing makes these claims that it provides techniques um to keep data confidential uh oh this is a difficult world to uh difficult word to keep data confidential I think that's what I want to say here and that it also keeps uh the the Integrity of data the data cannot be modified and it also uh claims uh that it provide me provides mechanisms to guaranteed uh some Integrity of code code that is working on the data shall not be modified somehow by some attacker by the hypervisor for example so there are several levels possible levels of isolation involved uh the the the most fine grained level might be something like isolation on on function or Library level a little bit more coar grained it is uh isolation on the level of of a full application and what we are looking or what I started to look into is this most corar grain level of isolation isolation of a full virtual machine so for example um with the application isolation you might know that the signal app on some iOS phones and Android I think also they they use Enclave technology uh to store the the private Keys used for the communication with signal encrypted in in that enclave and only inside The Enclave the the the keys are visible outside they are not so this is maybe on this function or application Level isolation and this is more about enclaves and stuff like this what I am I started to look in is on the level of a virtual machine which is a much larger thing than just an enclave so as I mentioned before this is not possible without support of the hardware and Hardware can provide many mechanisms to support this one mechanism is runtime encryption and that is the one what what I I am looking in into in the context of the virtual machines other me mechanisms are stuff like attestation this is about to to to verify or to guarantee that your virtual machine and the code you're executing is an A Defined state that you're actually running that operating system and that application you want to run and not something else that got Modified by someone maybe if if you're familiar familiar with Concepts like secure boot or measured boot this is something similar like the attestation uh mechanisms uh uh that are supported by confidential Computing and then there are um more mechanisms to guarantee stronger isolation and but I think this is mainly regarding Integrity of memory for example Integrity of binaries but I'm mainly looking in the runtime encryption and actually only in a specific aspect of the runtime encryption so the hardware has to provide some support for this and what I started look into is actually the secure encrypted virtualization provided by AMD CPUs uh Intel has something similar something different they call it TDX I think this is trusted device execution extensions something like this uh arm also supports or upcoming arm architectures are supporting something they call arm CCA that's confidential compute architecture and this is all focus focus basically on uh virtual machine uh confidential Computing for virtual machines some other thing you might know is enl s sgx I think this was software guard extensions something like this and this is more an enclave thingy meant uh to to run a library or functions of a library with in a safe compartment and I think the original idea was more from the DRM World digital Rights Management so that you can run your DVD decoder inside that compartment without leaking leaking the secret key sorry exactly I will have a slide about that so to summarize what I got interested in is building something like this with open BSD yeah using amdv technology and I only focus on the encryption of the memory what I cannot encrypt right now what I'm working on is uh to encrypt the CPU State this right now we cannot do that it's only about memory encryption it's not about integrity so there are limitations but my main focus is actually to learn about this just by doing it trying it out and then we will see if things work or don't work and then we can see what we can do with it with it so here is a very simple sketch of a modern CPU modern AMD CPU uh what we have the gray box is the die the chip the thing that represents your CPU and within the CPU we we have multiple cores and at somewhere on on the chip on the die of the CPU is a memory controller that allows the cores to access the DM of of your machine and AMD into this AMD hooked their framework their technology for secure encrypted virtualization what they did they introduced a new component on the CPU chip the so-called platform platform security processor PSP maybe they call it now security processor S I don't know I'm using the the the the name platform security processor and and the a short form PSP and the PSP is actually a small arm five CPU sitting next to to the CPU course and it's running a little how do they call it I think they call it uh trust o a little operating system that is basically doing Key Management Key Management what for are they doing Key Management okay here's the mouse we have the memory controller and they included in the memory controller an as engine for doing as encryption with basically line speed so they say it's a super fast fast this means uh when for example the Blue Core is using a memory encryption and when the Blue Core is storing data to the DRM the memory controller will encrypt will will encrypt the data that is coming from from the Blue Core with a specific key specific to the Blue Core and will it store encrypted in the memory and for the other cores they they and each core is is actually using its own own key not not only each core each VM that is running on the course has its own dedicated key so you can run multiple VMS and all VMS will have their different keys in that picture I think it's two VMS a blue one and a red one and they have that blue and red key and the this the other way around if if the the Blue Core is accessing physical memory the memory will be uh read back will be read back from dram decrypted and loaded into the caches of the CPU so and the key idea here is that the actual guest is controlling the encryption what does this mean the page tables used by a guest the guest uh guest page tables now uh use a additional permission bit within the page table entry the so-called Crypt bit C bit and with this bit the the guest can control whether uh data mapped by the guest page table is to be encrypted or not if the data is encrypted the data is private it goes to the DRM and only the the guest VM itself can read it back and decrypt it if the cbit is not set then the data is public it will not be encrypted and will go as plain text to the main memory to the DRM and with this it's sharable between the guest and the hypervisor yeah and and this is is a sort of a departure from the original yeah x86 security model uh where where now the the Privileges of the hypervisor that is or the operating system is diminished and the guest gains more privilege this means uh meaning the guest has a control and and can decide whether to share data or not to share data to encrypt data or keep it in plain text and this is I think this is this is a New Concept they came up with and how does this work now I need the mouse pointer again or maybe not here it is okay what do we have here consider this example we have our CPU just for Simplicity there's only a core uh the the other cores we do not care right now and that core is executing a guest the the the red guest that is identified in this table uh we um AMD uses the term asit it's an address space identifier and each virtual machine guest is assigned a unique ASD and each guest is identified by this Aid so in right now we are executing the virtual machine the guest with the asid to in its memory there is there's some text there's some he Heap there's some stack and that stuff is all encrypted now when the guest is accessing a virtual address because the guest is just running a normal open BSD open DS use virtual memory virtual addresses so when the guest accesses a virtual address this address needs to be translated from the virtual address to the guest physical address AMD and I think Intel also they use something they call nested paging this means the guest is maintaining his own its own page table and this page table is also encrypted within the memory of the guest so it's not visible to to to the hypervisor and what the guest is doing he's translating or the CPU is is is by uh reading the the guest page table translating the virtual address to a guest physical address and this guest physical address again is transl translated by a second page table the nested page table that is maintained by the hypervisor and and this uh hypervisor maintained uh page table is actually yielding the actual physical address the actual physical address with addressing some memory in our dam the new thing now is about the script bit when uh the when in this example the page table entry is Mark that this virtual address uh that this translation should yield an an encrypted translation uh the CPU will remember the cryp bit and say okay this will be an encrypted memory exess and then the physical address that was yielded by traversing the nested page table is modified AMD decided to reduce the physical address space when you're using memory encryption so actually we always have 64 bits addresses but AMD decided 20 years ago uh 10 years ago that there will only be 52 I think the upper 12 bits of the physical address are always zero they will not set so we only have up to 52 bit of physical address space in Practical implementations I think it's if you buy a mainboard then I think it's 44 bits 45 bits something like this so you can put I know I don't know many terabyte DRM into that machine now when you're running with with memory encryption some of these bits are repurposed of the physical address address bits they are taken away and are now rep repurposed one for setting the cryp bit and in that picture we we have the cryp bit at the position 51 counting from zero and this bit is now set because the page table the guest page table had the bit set so now we for basically it's forwarded into the actual physical address and then here and then also the asid the address bace I identifier that is identifying that particular VM is also patched into the physical address in my example in my example here I cannot do this my example I reduce the physical address basically by eight bits here and here so I reduced it from 52 to 44 or something this in reality it's actually more like four or five bits but then the number two wouldn't have shifted and the picture wouldn't be so good so now from the core we get this actual this physical address forwarded to the memory controller so and the memory controller now realizes okay we're doing memory encryption here so the bit 50 one is set this means this and this access must go through the encryption path you have to if it's a right to the memory we have to encrypt the memory if it's a read from memory we have to decrypt it uh and he also knows okay we are using the A2 so that's a virtual machine number two and here we have a table and that table is actually built by the by this PSP by the platform security processor that provides the that generates the keys and stores such a table in the memory controller and the memory controller look up okay for the ac2 we use that particular key and now the memory uh controller can do the memory access and encrypt or decrypt the data so to make sure within the core itself the data is in plain text and the in the cache in the in the memory and in the level two level one cache all the data is in plain text and is sent in plain text to the memory controller and and from the memory controller leaving the CPU leaving the the component CPU to the main board to the DRM the data is encrypted so on on this path we always see the encrypted data within the CPU itself it's not another thing that is not encrypted with this Tech technology is the actual CPU State somewhere in the CPU we have the registers the instruction pointer St pointer the flex and these are also not encrypted so at some point the hypervisor when the guest stops and is exited and the hypervisor takes over the hypervisor sees the actual CPU state so the hypervisor knows the instruction pointer the stack pointer the flags and so on and if if you consider using as and I for example Hardware encryption instructions of the CPU uh the a key uh AES key used for the encryption is stored in the floating Point Unit in the FPU because the AES and E is implemented basically by the FPU by the floating Point Unit so when the guest exits and the hypervisor takes over the hypervisor all also can see the FPU State this means if you you're doing asni then the hypervisor still can see your as keys that you are using and if you're doing IPC for example then then I'd like to take questions afterwards okay so and and then I think this this needs to be remembered the CPU state is is is not encrypted right now with this basic SCV technology so that are some of the oops limitations I came along the CPU state is not encrypted right now there's also no Integrity protection and this attestation also has some limitations AMD provides further levels of this technology SCV that's encrypted state that is all about encrypting the CPU state but this is the next level I haven't I'm I'm working on this but it still needs to done and then there's also a Next Level that is called SV SNP secure nested paging that provides more uh that provides um more integrity and we had a comment about the security so there is a bunch of I think these cves are quite reason so if you don't update your firmware your VMS will leak memory and you can decrypt stuff then there are people that were able to to hack the the platform security processor to extract the firmware to to load a different firmware uh on that PSP the PSP is doing the key management so this is not so cool but right now I I I I do not care about this because I want to figure the things out and I hope in 10 years all these bucks are fixed by AMD and my goal is to build a confidential VM on open BSD uh and basically learn from it why open BSD okay I'm using open BSD since 20 years with vmd vmm we have a great virtualization platform I read the code I sort of understood it and I think okay I will use this to implement confidential Computing using these AMD Technologies with open BSD on open BSD for openbsd and my main goal was in the beginning to keep it as simple as possible so the big picture what needs to be done to actually launch a virtual machine using uh you using SCV and memory encryption we have the vmd vmd is the component that initially loads where's the mouse tiger here that initially loads the the kernel image into the guests into the guest address space along with some stack along with a page table then vmd builds the CPU register State whoops for example the instruction pointer needs to point at the first instruction of the kernel so when you start the guest that is start execut starts executing uh starts executing uh instructions from the first instruction of the kernel so and all this is written to memory and with a non-encrypted virtual machine that's basically all that I'm I'm hugely simplifying here uh that's all that need to be done to start the virtual machine there's a special instru there's a set of special instructions in the a in the AMD instruction set something like launch VM then all that state is loaded and and the guest is executed if we want to use amdv we have to do an additional step we first have to encrypt all the the image that we want to execute this is why something I didn't mention yet that when you enable SCV on the virtual machine all instruction fetches go through the decryption path regardless uh regardless if the page with code code instruction is mapped as with the cpit or without if it's an instruction fetch it always goes to the decryption path this means the initial image that we are running needs to be encrypted by vmd and this is done with vmd talking to the platform security processor instructing the processor to generate a new key to associate um to associate that virtual machine guest the asit of that guest with that particular key and then the PSP has to read all memory or all the pages that are used by the guest has to read it has to encrypt it and write it back to memory and then when the guest is launched it can start executing fetching the first instruction and this gets decrypted again and the instruction can be executed so to get things going what do we have to do we have to do we have to implement a driver for for this platform security processor we have to modify vmd to talk to the platform processor to encrypt the kernel image to build the page tables using the cbit stuff like this then we have to modify the vmm uh driver that's a in kernal part of of of the hypervisor to actually enable SUV when when he launches is a virtual machine there's a virtual machine control block and there you have to say Okay this guest should run withv enabled and then we also have to modify the guest kernel that is running because the guest kernel should use the cryp bit to encrypt all its memory the guest konel is building page tables and he has to to use the cryp pit to make sure that the guest is encrypted so my plan was sort of make it as simple as possible just focus on on booting the the ram dis kernel I do not care really about devices a ram dis kernel does not need a dis it's just running out of a ram disk I will fully encrypted that guest not not caring about dma or something like this because with dma we have to talk to the hypervisor and we have to share memory with the hypervisor and therefore we have think about do we map this page encrypted or not I do not care right now I encrypt everything thing and the sort of works because in the be uh because the main uh Hardware components that need to be emulated by a PC platform that is emulated emulated by vmd is a handful of chips timer chip realtime clock in uh interrupt controller and the serial console that one is interesting for me because I want to see something so if we can access the serial console then I see something and I'm not blind and this is all done with inout instructions with programmed IO and not with dma so my idea was so this actually should work if I encrypt everything if I use everywhere the hard bit uh C bit in the guest if I hard Cod it then it should work and this was a plan in last year December so I started with implementing minimal support for this platform security processor there's a bunch of commands you you need to use to encrypt to initially encrypt the the the guest memory that's a so-called launch protocol and this is doing this red arrow here and I needed some more commands so we can skip this then I had to modify a little bit with vmd um I only use direct kernel XX so I'm not loading a bios I'm not going through real mode or something like this vmd allows to directly execute the kernel image you want to run so it's basically elf loading and executing and vmd also has to modify has to use the pcpt uh the the the c c bit in in the page tables so the memory is actually encrypted and then here vmd has to talk to the PSP please um encrypt everything the modifications for vmm were quite simple basically in the configuration block you have to say I there's a bit you have to set and stuff is sort of working so in the guest kernel I also defined a cryp bit and on my machine I know it's bit 51 but AMD says H this is implementation specific so on some CPU might be different so you should actually figure out what bit you are using and I just hardcoded it and then of course in the pmap module where where where you're setting up the actual mappings I was also hardcoding the cbit and with this it was actually possible to put Ram dis kernel it actually also saw some stuff of the word iio devices but yeah but and this took about two months too earlier this year so in the round two I was working but because my goal my second goal was then I want to use the same kernel as guest and host before I mod I had a modified host that could could run uh encrypted guest and I had a modified guest kernel that was able to be to be run uh encrypted so to just use a single kernel for both purposes the kernel has to to detect am I a guest or am I a host am I using encryption or am I not using encryption and depending on this he has to be more flexible about defining the script bit so I cannot hardcode it anymore and that's what I did so the next thing that I that we should do we want to do dma we want to do word IO and this is is only po this in my first approach I just yeah did a hack to map everything unencrypted that is using the budm a m API so all memory used by for example embus would be unencrypted however this is not really working it was working but this is not what you want to do for some reasons so therefore we need to uh I needed to implement something like bounce buffers this is an thing that is quite old it's from if you have some old Isa Hardware that can only address below 16 megabyte physical memory then you also need bounce buffering copying stuff from high memory into the low memory and back and forth and the AP API is there so we I modified this that uh by by using these bounce buffers that the bounce buffers itself are mapped unencrypted so they can be shared with a hypervisor they show up unencrypted in the hypervisor and the Boost dma API provides a function that is called boost map sync or something like this that is actually doing the copying on the original PC platform it it need doesn't need to do anything this boo uh this sync function on for example on some other platforms like spark it needs it is needed to implement flushing of caches and stuff like this so the Hardware is dma into memory and before accessing that memory caches needs to be flushed or the other way around when the CPU writes stuff uh to the memory and before the hardware can access this caches needs to be flushed and this is implemented by the sync AP and I am using it in a similar way just for copying back and forth between the encrypted and non-encrypted memory and with this uh we can skip this we can skip this yeah and and with this is it was basically possible to just use word IO and then there are some optimizations I want to skip so now earlier this year in May I got this sort of finished and now I I could use the same kernel as guest as host and the confidential VM was sort of working almost because there were bugs in the Vio five minutes thank you and in in the vo block I got crashes when doing a build nonetheless I I mailed a diff out because we are doing open source so it's important to get people involved I showed the diff around and a colleague of mine Stefan frit did some debugging in the v IO and we got these crashes fixed um Alexander Bloom was doing testing and debugging of this dma bounce buffer stuff that I did then I also got input from Dave vuler thank you and from Mike Ling kenis and so on and we got the stuff committed and right now we have sort of um a stable VM that survives a make build and the memory is encrypted is it so to really figure this out I now we can skip this and look at this I decided I I need something like a heat map I want to examine the physical the guest physical memory and see if that memory is actually encrypted and from this I modified the VMT to get a dump of the physical memory and then I plotted this heat map so here here's the lowest address I think that's a one gigabyte machine so here we have we have address zero there is somewhere 1 gab and it looks like I would expect here in the lower part we we have the initial kernel we have the uh kernel text image above it are the initial page tables very on the top we have stuff like the DK buffer and in the upper range there that's that's memory this is actually used by by the guest running so this is when you are using a guest without encryption that's the picture I got now with SE enabled what I did I was compressing the pages P dumped the memory compressed the pages and if the page was easy to compress or good compress then it's not encrypted then it's compressible data and with memory encryption I got something like this we see that this uh the the the used pages are hard to compress that's a darker green the lighter green or white means easy to compress so the memory used by the encrypted machine was hard to compress so I think I was confident that we are actually running encrypted and then I did two minutes left I did a little heck there's a so-called zero thread in the kernel that is nulling pages on the free list so I and usually uh This Thread just come uh is maintaining 20% % of the free memory being nulled being written zeros to so I modified it that it actually SS out everything that is on the free list and so I booted the machine waited a minute shut it down dumped the memory and I see that basically all pages got touched by the or most of the free Pages got touched by the Sero thread so I assume they were encrypted so what have we accomplished we have the simplest version ofv enabled as an open open BSD guest on a host the stuff is committed next steps would be the state encryption fixing all the bugs I guess there are plenty of bugs left optimize dma there can stuff that can be done we haven't talked about performance there are stuff that needs to be done you haven't talked about this attestation about this secure booting stuff so there's stuff that needs to be done and there's even more stuff to be done so that's what I have to tell I just want to say thank you to some of my colleagues that helped me with the slides Mia Tes hour and yam clemco he's also working in open BSD and Alexander Bloom and Stefan frit for debugging and committing committing and I like to thank the people at tech for their input thank you question [Applause] there's room for a couple of questions so so the latest amd64 CPUs can have a 50 seven bit uh virtual address base so what prevents them from using traditional Shadow paging in the hypervisor to fake SCV uh the answer uh the question was uh it it's recorded okay then I don't have to repeat it uh I cannot answer this I do not know I'm still in the beginning of figuring things out so I do not know yes there was a question by Rene I think earlier already does the uh is the cash memory of the CPUs also encrypted no the the the question was if the cach memory is encrypted no in in Cache we have plain text and only going out to the DRM leaving the CPU the the die that stuff is encrypted so I hope Al if if you think about stuff like um Spectre meltdown I don't think this will help with encryption um is this uh the first open source hypervisor that no no no with with with uh Linux you have KVM and qo that they can do this they they already do this they already do this thank so what happens when you reconfigure cach uh set RS to use a scratch pet memory do they get invalidated uh before you get to inspect them with the because this is needed during early bring up of a memory controller for training I cannot answer this question again a specific detail I do not know I'm sorry okay last question yeah you touched on performance at the last point in the slides uh so what is the overhead of encryption that's a good question so AMD says it's one% or something like this regarding the memory exess and as far as I know they're encrypting anyway the memory if you do not configure anything then they put in a random key and so it's easy to say there's no penalty when you use encryption because you're using I I might be wrong here if someone from AMD has some here in the room has details let me know uh and and with with regarding Alexander Bloom is doing some tests and the performance is degraded I would say is it or is it Horrible No but it's not good it's mainly bounce yeah I don't any bounce and that of course ah thank you so I I I haven't tested uh I didn't put the the encryption machine in my automatic test setup yet but I have added a thing that I can just set a flag to force bounce buffering even on a non-encrypted thing so that helps a lot to find bugs in in the drivers if there's some uh Boosty Ami sync missing and with that alone I get a decent performance degradation like 30% 50% and there there's room for optimization but we we'll see next year thank you very much thanks [Applause] again e for