Home Onidel Cloud AMD SEV-SNP Attestation and Memory Encryption

AMD SEV-SNP Attestation and Memory Encryption

Last updated on Feb 28, 2026

Onidel fully supports AMD SEV-SNP technology on both EPYC™ Premium and EPYC™ High-Frequency Virtual Machines.

Price

Using AMD SEV-SNP is free of charge.

It is a feature that can be turned on and off for a VM at any time.

Requirements and Limitations

AMD SEV-SNP requires certain conditions to be fully functional:

  • UEFI boot mode - AMD SEV-SNP requires the VM to be booted in UEFI boot mode.

  • Recent Linux Operating System - AMD SEV-SNP requires kernel 6.11 or newer inside guest to work reliably. Additionally, if you are using the GRUB bootloader, ensure EFI_UNACCEPTED_MEMORY is supported. Otherwise your guest OS may not be able to address all the allocated memory while SEV-SNP is enabled. It is recommended to use GRUB version 2.12 or newer.

It also comes with a few drawbacks:

  • No vTPM or Secure Boot - Current implementation of AMD SEV-SNP inside the hypervisor we use does not support vTPM or Secure Boot. We will focus on exploring alternative solutions to enable vTPM support running inside SEV-SNP environment at VMPL0, like the Coconot SVSM.

  • No Live Migration - The VM will be powered off during hypervisor maintenance since AMD SEV-SNP can not run on a different CPU.

Enabling SEV-SNP for your VM

  1. In Onidel Cloud Platform, navigate to Compute > Virtual Machines > (Select your VM) > Settings. From there, you need to change the Boot Mode to UEFI and click on Change Boot Mode button.

    The VM will restart automatically after the changes to Boot Configuration.

  2. After the VM is restarted, you can now enable the AMD SEV-SNP option in the Security Settings. Then, you will need to restart the Virtual Machine manually by clicking on Server Restart icon.

  3. Once the VM boots back up, you should see the notices about AMD SEV features in the system dmesg log. This indicates the feature has been enabled successfully and the VM currently has its memory encrypted.

    $ dmesg | grep SEV
    [    0.391403] Memory Encryption Features active: AMD SEV SEV-ES SEV-SNP
    [    0.392603] SEV: Status: SEV SEV-ES SEV-SNP 
    [    0.515139] SEV: APIC: wakeup_secondary_cpu() replaced with wakeup_cpu_via_vmgexit()
    [    0.569713] SEV: Using SNP CPUID table, 33 entries present.
    [    0.570745] SEV: SNP running at VMPL0.
    [    1.471827] SEV: SNP guest platform device initialized.
    [    8.508905] sev-guest sev-guest: Initialized SEV guest driver (using VMPCK0 communication key)
    [    9.297485] kvm_amd: KVM is unsupported when running as an SEV guest
    

Verification and Attestation

You can use the snpguest utility to perform guest attestation and make sure your VM runs on a genuine AMD CPU (the Versioned Chip Endorsement Key (VCEK) is signed by authentic key from AMD).

Installing snpguest

  1. Install required dependencies. snpguest is written in Rust and requires to be compiled manually since it has not been packaged for all major distributions yet.

    On Debian/Ubuntu:

    $ apt update
    $ apt install -y curl git gcc make pkg-config libssl-dev
    

    On CentOS/RHEL/Alma/Rocky:

    $ dnf update -y
    $ dnf install -y curl git gcc make pkgconfig openssl-devel
    

    Then install the newest version of Rust from the rustup distribution.

    $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
    
  2. Next clone the snpguest repository, activate the rust environment and compile the utility with cargo.

    $ git clone https://github.com/virtee/snpguest.git
    $ cd snpguest
    $ source "$HOME/.cargo/env"
    $ cargo build --release
    ...
       Compiling snpguest v0.10.0 (/root/snpguest)
        Finished `release` profile [optimized] target(s) in 5m 51s
    
  3. After the successful compilation, the resulting binary should be in target/release directory.

    $ ./target/release/snpguest 
    Navigation utility for AMD SEV-SNP guest environment
    
    Usage: snpguest [OPTIONS] <COMMAND>
    
    Commands:
      report        Report command to request an attestation report
      certificates  Certificates command to request cached certificates from the AMD PSP
      fetch         Fetch command to request certificates
      verify        Verify command to verify certificates and attestation report
      display       Display command to display files in human readable form
      key           Key command to generate derived key
      ok            Probe system for SEV-SNP support
      generate      Generate Pre-Attestation components
      help          Print this message or the help of the given subcommand(s)
    
    Options:
      -q, --quiet    Don't print anything to the console
      -h, --help     Print help
      -V, --version  Print version
    

Generating Attestation Report

Now you can generate the attestation report.

$ snpguest report report.bin request-data.txt --random

This command will generate two files:

  • report.bin - an attestation report of your VM.

  • request-data.txt - securely generated random data that acts like a 512 bits nonce and prevents replay attacks.

Reading Attestation Report

You can display the report taken in the previous step using the display report command of snpguest.

Here, you can see all the environment parameters of your Virtual Machine. There is also a Measurement hash which can be used for measured boot with golden hash calculated inside the trusted environment.

$ snpguest display report report.bin
Attestation Report:

Version:                      3

Guest SVN:                    0

Guest Policy (0x30000):
  ABI Major:     0
  ABI Minor:     0
  SMT Allowed:   true
  Migrate MA:    false
  Debug Allowed: false
  Single Socket: false
  CXL Allowed:   false
  AEX 256 XTS:   false
  RAPL Allowed:  false
  Ciphertext hiding: false
  Page Swap Disable: false

...

Platform Info (39):
  SMT Enabled:               true
  TSME Enabled:              true
  ECC Enabled:               true
  RAPL Disabled:             false
  Ciphertext Hiding Enabled: false
  Alias Check Complete:      true
  SEV-TIO Enabled:           false

Key Information:
    author key enabled: false
    mask chip key:      false
    signing key:        vcek

Report Data:
4D 58 60 89 7A AB 2E EA E1 2E B5 69 00 16 4D FD
10 32 AA 59 FF DD B1 0D 23 54 2A 31 FF 92 F4 59
41 CE C3 28 3A 57 83 43 94 87 27 21 D7 4E 47 3B
89 9B A2 8A 6B 55 AF E4 B3 4D 2F 7B 12 83 22 7F

Measurement:
E9 BF F4 69 E7 D3 D1 F5 84 B0 FA 32 27 92 C0 03
4A 50 C7 75 17 D3 A0 85 16 0E 30 07 0E F4 04 88
60 9D 47 0B EB A3 02 58 97 8B A1 6B 96 C2 0A 74

...

Fetching AMD Certificate Chain

To verify the signature on your report, you need the public certificate chain. It consists of the AMD Root Key (ARK), AMD SEV Key (ASK), and the Versioned Chip Endorsement Key (VCEK). The certificate chain is fetched from the AMD Key Distribution System (KDS).

Note: use the value milan on EPYC™ Premium and turin on EPYC™ High-Frequency Virtual Machines.

$ mkdir certs
$ snpguest fetch ca pem ./certs milan  # turin if running epyc high-frequency vm
$ snpguest fetch vcek pem ./certs report.bin
$ ls -la certs/
total 20
drwxr-xr-x 2 root root 4096 Feb 28 19:09 .
drwxr-xr-x 8 root root 4096 Feb 28 19:01 ..
-rw-r--r-- 1 root root 2277 Feb 28 19:02 ark.pem
-rw-r--r-- 1 root root 2325 Feb 28 19:02 ask.pem
-rw-r--r-- 1 root root 1887 Feb 28 19:09 vcek.pem

Verifying the Certificate Chain

Now use the snpguest utility to verify fetched certificates. This ensures that the VCEK was legitimately signed by the ASK, and the ASK was signed by the ARK. The correct output is shown below.

$ snpguest verify certs ./certs
The AMD ARK was self-signed!
The AMD ASK was signed by the AMD ARK!
The VCEK was signed by the AMD ASK!

Verifying the Attestation Report

Finally, verify the attestation report of your VM. The expected output shown below.

$ snpguest verify attestation ./certs report.bin
Reported TCB Boot Loader from certificate matches the attestation report.
Reported TCB TEE from certificate matches the attestation report.
Reported TCB SNP from certificate matches the attestation report.
Reported TCB Microcode from certificate matches the attestation report.
VEK signed the Attestation Report!

The successful verification means:

  • The report was cryptographically signed by genuine AMD hardware (your VM is not being emulated or spoofed by a malicious hypervisor).

  • The state and measurements (Launch Digest) of your VM match the expected policies of a SEV-SNP confidential environment.

Additional Notes

OVMF Stub

To enable measured boot, we publish the OVMF binary used on our hypervisors. You can download it from here. Keep in mind fully measured boot may not yet be possible due to current architecture of our hypervisors.

Data Encryption

While properly working AMD SEV-SNP encrypts the working memory (RAM) making it impossible to trivially dump it from the hypervisor, your data may still not be encrypted at rest.

If you need to make sure your data remains inaccessible from the hypervisor, we strongly recommend performing a Custom OS installation using LUKS to encrypt data on the disk.

Performance Benchmarks

To encrypt and decrypt memory contents, AMD SEV-SNP uses a dedicated hardware AES-128 encryption engine integrated within the DRAM controller of EPYC CPU. This eliminates the need for the CPU to perform any expensive cryptographic operations associated with encryption memory at GB/s speeds.

As a result, the performance in synthetic benchmarks is almost on par with a VM that has memory unencrypted. The impact of SEV-SNP is most noticeable on the disk IO speeds. To communicate with external devices like nvme disks on the host, the guest needs to copy unencrypted version of the data to a shared memory region using SWIOTLB (Software I/O Translation Lookaside Buffer). This slows down IO operations especially at high speeds due to the data copying operations required.

Both benchmarks were taken using yabs.sh on EPYC™ Premium (Milan) platform.

Without AMD SEV-SNP

Sat Feb 28 19:42:15 UTC 2026

Basic System Information:
---------------------------------
Uptime     : 0 days, 0 hours, 2 minutes
Processor  : AMD EPYC 7713 64-Core Processor
CPU cores  : 1 @ 1996.249 MHz
AES-NI     : ✔ Enabled
VM-x/AMD-V : ✔ Enabled
RAM        : 1.9 GiB
Swap       : 0.0 KiB
Disk       : 19.6 GiB
Distro     : Debian GNU/Linux 13 (trixie)
Kernel     : 6.12.73+deb13-amd64
VM Type    : KVM
IPv4/IPv6  : ✔ Online / ✔ Online

IPv6 Network Information:
---------------------------------
ISP        : Onidel Pty Ltd
ASN        : AS152900 Onidel Pty Ltd
Host       : Onidel Pty Ltd
Location   : Amsterdam, North Holland (NH)
Country    : Netherlands

fio Disk Speed Tests (Mixed R/W 50/50) (Partition /dev/vda1):
---------------------------------
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 120.81 MB/s  (30.2k) | 1.79 GB/s    (28.0k)
Write      | 121.13 MB/s  (30.2k) | 1.80 GB/s    (28.1k)
Total      | 241.95 MB/s  (60.4k) | 3.59 GB/s    (56.1k)
           |                      |                     
Block Size | 512k          (IOPS) | 1m            (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 10.06 GB/s   (19.6k) | 6.74 GB/s     (6.5k)
Write      | 10.59 GB/s   (20.6k) | 7.19 GB/s     (7.0k)
Total      | 20.66 GB/s   (40.3k) | 13.93 GB/s   (13.6k)

Geekbench 6 Benchmark Test:
---------------------------------
Test            | Value                         
                |                               
Single Core     | 1232                          
Multi Core      | 1338                          
Full Test       | https://browser.geekbench.com/v6/cpu/16798001

YABS completed in 10 min 40 sec

With AMD SEV-SNP

Sat Feb 28 19:58:14 UTC 2026

Basic System Information:
---------------------------------
Uptime     : 0 days, 0 hours, 0 minutes
Processor  : AMD EPYC 7713 64-Core Processor
CPU cores  : 1 @ 1996.249 MHz
AES-NI     : ✔ Enabled
VM-x/AMD-V : ✔ Enabled
RAM        : 1.8 GiB
Swap       : 0.0 KiB
Disk       : 19.6 GiB
Distro     : Debian GNU/Linux 13 (trixie)
Kernel     : 6.12.73+deb13-amd64
VM Type    : KVM
IPv4/IPv6  : ✔ Online / ✔ Online

IPv6 Network Information:
---------------------------------
ISP        : Onidel Pty Ltd
ASN        : AS152900 Onidel Pty Ltd
Host       : Onidel Pty Ltd
Location   : Amsterdam, North Holland (NH)
Country    : Netherlands

fio Disk Speed Tests (Mixed R/W 50/50) (Partition /dev/vda1):
---------------------------------
Block Size | 4k            (IOPS) | 64k           (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 96.56 MB/s   (24.1k) | 768.70 MB/s  (12.0k)
Write      | 96.81 MB/s   (24.2k) | 772.75 MB/s  (12.0k)
Total      | 193.37 MB/s  (48.3k) | 1.54 GB/s    (24.0k)
           |                      |                     
Block Size | 512k          (IOPS) | 1m            (IOPS)
  ------   | ---            ----  | ----           ---- 
Read       | 1.74 GB/s     (3.4k) | 2.05 GB/s     (2.0k)
Write      | 1.84 GB/s     (3.5k) | 2.19 GB/s     (2.1k)
Total      | 3.59 GB/s     (7.0k) | 4.24 GB/s     (4.1k)

Geekbench 6 Benchmark Test:
---------------------------------
Test            | Value                         
                |                               
Single Core     | 1380                          
Multi Core      | 1376                          
Full Test       | https://browser.geekbench.com/v6/cpu/16798234

YABS completed in 10 min 0 sec