# Encryption at Rest

Exoscale encrypts Compute root volumes and Block Storage volumes at rest
transparently at the hypervisor layer. You do not need to change your workflow,
install agents in your guest operating system, or manage any keys yourself —
volumes are encrypted by default and encryption cannot be disabled.

This page explains what is encrypted, how the encryption is performed, how keys
are managed today, and what is changing next with the upcoming Exoscale KMS
integration.


## How it works

Exoscale uses AES-256 in XTS mode to encrypt volume data.

Instance local storage is encrypted with unique key material per volume. Encryption keys gets destroyed when the volume is deleted.

Block storage volumes receive unique encryption keys at volume creation. Encryption keys follow the lineage of the volume: snapshots inherit encryption keys of the underlying volume, and volumes promoted from snapshots inherit encryption keys of the underlying snapshot.

Encryption and decryption happen transparently: compute instances' operating system sees a normal block device. Your operating system,
filesystem, applications, and tooling do not need to be aware that the
underlying volume is encrypted.

The encryption key for a volume is only ever present in clear-text in the memory of the
hypervisor that is actively running the workload attached to that volume. When
the instance is stopped or migrated away, its encryption key get removed
from the hypervisor.

When creating instances from custom templates, encryption is performed transparently on the hypervisor at template fetch time. This encryption step leads to instance creation timings being higher than bare template download timings.


## What is covered

**Compute root volumes**
: Every new Compute instance is provisioned on top of an encrypted root volume by default.

**Block Storage volumes**
: Every new Block Storage volume is encrypted by default.

**Block Storage snapshots**
: Snapshots of Block Storage volumes inherit the encryption of their parent
  volume and remain encrypted throughout their lifetime. When a snapshot is
  promoted to a new Block Storage volume, the promoted volume is encrypted
  with the same key as the source snapshot and its parent volume.

**Instance snapshots and templates on Object Storage**
: Instance snapshots and templates are stored on Exoscale
  [Object Storage](https://www.exoscale.com/object-storage/) with bucket-level 
  encryption, so the data remains encrypted on the underlying storage media.


## Key management today

Exoscale manages encryption keys on your behalf. Each volume key is generated 
randomly on creation and securely stored encrypted.

Key material is never exposed to customers and its lifecycle is fully managed by Exoscale.


## Rollout

Encryption at rest is being rolled out progressively:

- **New workloads are always encrypted.** Every new Compute instance created boots from an encrypted root volume, and every new Block Storage volume
  created is encrypted at creation time.
- **Existing instances will remain for the time being unencrypted. In the near
  future we will properly communicate how unencrypted instances can be encrypted.
- **Existing Block Storage volumes are not re-encrypted in place.** In-place
  re-encryption of attached block devices carries real corruption risk, so
  existing unencrypted Block Storage volumes will remain as they are. If you
  need your existing Block Storage data to be encrypted at rest, the
  recommended path is to create a new Block Storage volume (which will be
  encrypted) and copy your data across.

