Driver FixRecommendedSound, Wi-Fi or graphics acting up? Check drivers firstFind missing or outdated drivers fast.Check DriversHalloween DealsAmazon USHalloween week deals: useful picks before month-endAmazon US: current deals, useful picks and tech finds.Check DealsClean PCRecommendedOne scan can reveal what keeps slowing WindowsLook for cleanup and repair opportunities.Run Scan×
FREEDOM251

Freedom251 › Blog › AES-GCM

Envelope Encryption: How DEKs and KEKs Secure Large Data Without KMS Bottlenecks

By Freedom251 Team · · 10 min read

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Envelope encryption protects data with two keys instead of asking a key-management service (KMS) to encrypt every byte. A locally generated data encryption key (DEK) encrypts the file, record, or message. A centrally managed key encryption key (KEK) then wraps that DEK. You store the ciphertext and wrapped DEK together, while the KEK stays inside the KMS.

This split lets applications encrypt large payloads locally, keeps authorization and audit controls centralized, and limits sensitive key material at rest. It also introduces responsibilities: nonce uniqueness, KMS permissions, key-version tracking, and careful handling of plaintext DEKs in memory.

As an Amazon Associate I earn from qualifying purchases.

What envelope encryption means

Envelope encryption is a hierarchy in which one key encrypts data and another key encrypts the first key. Google Cloud’s definition is concise: “The process of encrypting a key with another key is known as envelope encryption.” The data-encrypting key is the DEK; the key that wraps it is the KEK.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The two layers

  • DEK: A short-lived symmetric key generated for an object, record, message, or other encryption unit. It performs the high-volume encryption and decryption locally.
  • KEK: A longer-lived key controlled by a KMS, hardware security module, or equivalent central service. It wraps and unwraps DEKs but normally never leaves that protected boundary.

The resulting package normally contains the encrypted payload, the wrapped DEK, the algorithm identifier, the nonce or initialization vector (IV), and an identifier for the KEK or its version. The package can travel with the data because the DEK inside it is still encrypted.

How the encryption and decryption flow works

  1. Generate a DEK. The workload creates a fresh, cryptographically random symmetric key for the object or operation. Generating it locally avoids sending the plaintext key through the KMS.
  2. Encrypt the payload locally. Use authenticated encryption, such as 256-bit AES-GCM, with a unique nonce or IV. Authentication is important because it detects tampering as well as confidentiality breaches.
  3. Wrap the DEK. Send the plaintext DEK to the KMS wrapping operation. The KMS uses the selected KEK and returns an encrypted DEK. The KEK itself remains inside the service boundary.
  4. Store encryption metadata. Persist the ciphertext, wrapped DEK, algorithm and nonce/IV metadata, and the KEK identifier or key-version identifier. Without those values, a later decrypt operation may be unable to interpret the ciphertext or select the right key.
  5. Erase the plaintext DEK. Remove the unwrapped key from application memory as soon as the local encryption operation and wrapping request finish. The wrapped copy is the only DEK form that should remain at rest.

Decryption reverses the process. The application reads the wrapped DEK and its metadata, asks the KMS to unwrap it, uses the returned plaintext DEK briefly to authenticate and decrypt the payload, and then discards the plaintext key.

DEK versus KEK: the practical difference

Characteristic Data encryption key (DEK) Key encryption key (KEK)
Primary job Encrypts and decrypts the actual data Wraps and unwraps DEKs
Typical location Application memory during use; encrypted in storage as a wrapped DEK Inside a KMS or HSM boundary
Lifetime Often one object, record, message, or encryption context; policy decides reuse Longer-lived and versioned under centralized key-management policy
Exposure Plaintext exists briefly in the workload that processes the data Plaintext normally never leaves the KMS
Rotation effect Existing ciphertext can remain unchanged unless a re-encryption policy says otherwise New key versions can wrap new DEKs; old DEKs can be rewrapped or migrated according to policy
Access decision Controlled by the application and the ability to obtain the plaintext DEK Controlled by KMS permissions, key policy, identity policy, and audit controls

A useful mental model is a locked document inside a locked safe. The document is the payload, the inner lock is the DEK, and the safe’s master mechanism is the KEK. Possessing the wrapped DEK does not grant access unless an identity is also permitted to ask the KMS to unwrap it.

Why not encrypt the entire file directly with KMS?

Payload-size limits

KMS APIs are designed for key operations, not bulk data streaming. Google Cloud KMS documents a maximum input size of 64 KiB for its Encrypt and Decrypt operations. A photo, database backup, log archive, or video will usually exceed that limit. Local AES-GCM can process large data while the KMS handles only the small DEK.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Fewer remote calls

Direct KMS encryption would place every payload byte on a remote request path. Envelope encryption requires a KMS operation to wrap a DEK and another to unwrap it when needed, while the actual data operation stays local. A workload can therefore process many megabytes or gigabytes without making the KMS a throughput bottleneck. Exact quotas, latency, and billing depend on the provider and key type.

Better failure isolation

When a KMS is temporarily unavailable, an application cannot unwrap a DEK and therefore cannot decrypt new data. However, it does not need a KMS round trip for every block of an already-unwrapped payload. Applications should still design retries, timeouts, and availability behavior around the KMS dependency.

Rank #2
Sale
Thetis Nano-A FIDO2 Security Key Hardware Passkey Device with USB Type A, TOTP/HOTP, FIDO2.0 Two Factor Authentication 2FA MFA, Works with Windows/mac/iOS/Android/Linux/Gmail/Facebook/GitHub/Coinbase
  • Ultra-Compact FIDO2 Security Key - Plug-and-stay or carry on a keychain. This USB-A hardware security key offers portable, always-on protection for desktop and mobile use. (Item Size: 0.75 X 0.74 IN x 0.25 IN)
  • USB-A Hardware Key for All Devices - Works with USB-A ports on PC, Mac, Android, and other laptop/notebook device. Enables secure, cross-platform login with FIDO2.0 passkey support.
  • FIDO Certified Security Key - Meets FIDO and FIDO2 standards. Works with Google, Microsoft, GitHub, Dropbox, and more. Please check service compatibility before purchase.
  • Passwordless Login with Passkey - Supports passkey login via WebAuthn and CTAP2. Enjoy password-free sign-ins where supported. Not all websites or services currently support passkeys.
  • Advanced Multi-Factor Authentication - Offers 200 FIDO2 passkey slots and 50 OATH-TOTP slots. Strong, flexible 2FA/MFA support across various apps and authentication platforms.

Centralized governance without centralized bulk data

The KMS can enforce who may use a KEK, record wrap and unwrap operations, and support key-version policy. Data can remain in object storage, databases, or message systems close to the application, with only the wrapped DEK tied to the central key hierarchy.

How major cloud implementations apply the pattern

Implementation DEK handling KEK and service boundary Distinct operational detail
Google Cloud KMS with Tink Tink generates and uses the DEK locally Cloud KMS wraps the DEK; the returned ciphertext combines encrypted data and wrapped DEK Google lists Python, Java, C++, and Go support; Cloud KMS Encrypt and Decrypt input is limited to 64 KiB
AWS Encryption SDK The SDK requests a plaintext data key, uses it to encrypt the message, then deletes it from memory An encrypted copy of the data key is retained for later decryption The exact KMS call frequency depends on the SDK configuration and key providers; no single frequency is established here
Amazon EKS with KMS v2 The API server uses derived, single-use DEKs for individual Kubernetes resources A remote AWS KMS key protects the DEK material The design targets Kubernetes API data rather than arbitrary application files
Azure encryption at rest DEKs protect the data handled by the service or host KEKs wrap DEKs under Azure’s key-management model Microsoft also documents host and process protections for cached DEKs

Google Cloud KMS and Tink

Google’s Tink integration illustrates the complete package format. Tink generates a DEK, encrypts data locally, asks Cloud KMS to wrap the DEK, and returns combined ciphertext containing both the encrypted data and wrapped key material. This is useful when an application wants a tested cryptographic library rather than implementing framing and key wrapping itself. The documented language options include Python, Java, C++, and Go.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

AWS Encryption SDK

The AWS Encryption SDK requests a plaintext data key plus an encrypted copy. It uses the plaintext key to encrypt the message and then deletes that plaintext value from memory. The encrypted copy travels with the message so a permitted decrypting process can request unwrapping later. The SDK abstracts much of the message format, but your identity and KMS policies still determine whether wrapping and unwrapping are allowed.

Amazon EKS

Amazon EKS uses KMS v2 for envelope encryption of Kubernetes API data. The API server protects DEK material with a remote KMS key and uses derived single-use DEKs for individual resources. This is a service-specific implementation: it should not be assumed to define how every Kubernetes secret store or application payload is encrypted.

Azure encryption at rest

Microsoft describes Azure encryption-at-rest models as envelope encryption, with a KEK encrypting a DEK. Azure also documents protections for DEKs cached by hosts and processes. Those protections matter because a sound key hierarchy cannot compensate for an attacker who can read plaintext DEKs from a compromised process.

A provider-neutral implementation blueprint

A minimal design can be expressed as the following pseudocode. The exact API names differ by KMS, but the order and data to persist are the important parts.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
dek = random_symmetric_key()
nonce = unique_nonce()
ciphertext, auth_tag = aes_gcm_encrypt(dek, plaintext, nonce, associated_data)
wrapped_dek = kms.wrap(kek_id, dek)
store(ciphertext, wrapped_dek, nonce, auth_tag, algorithm, kek_id)
erase(dek)

wrapped_dek, metadata = load_record()
dek = kms.unwrap(metadata.kek_id, wrapped_dek)
plaintext = aes_gcm_decrypt(dek, metadata.nonce, metadata.auth_tag, ciphertext, metadata.associated_data)
erase(dek)

Choose the encryption boundary

Decide whether one DEK protects each object, database row, message, or batch. Smaller boundaries reduce the amount of data exposed if one DEK is compromised, but they can increase metadata and key-management work. The boundary should match the application’s access and rotation requirements.

Bind metadata with authenticated encryption

Store the algorithm, nonce, key identifier, and any associated data in a format that is authenticated along with the ciphertext. If an attacker can swap a key identifier or nonce without detection, the system may select the wrong key or fail in confusing ways. Never reuse a nonce with the same AES-GCM key.

Keep wrapped keys and ciphertext together

Putting the wrapped DEK beside its ciphertext simplifies object movement, backup, and restore. The package still depends on access to the KEK and its key version. If metadata is stored separately, backups must preserve the association exactly.

Rotation, revocation, and recovery

KEK rotation

KEK rotation normally creates or selects a new key version for future wrapping operations. Existing ciphertext and DEKs do not automatically change. An organization must choose an explicit policy: leave old wrapped DEKs readable under permitted older versions, rewrap them with the new KEK while leaving data ciphertext untouched, or decrypt and re-encrypt data with fresh DEKs.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
Yale Wi-Fi Smart Module for Yale Assure Digital Electronic Locks or Levers, ‎R-AYR-MOD-WF1-USA
  • ADD WI-FI TO YOUR YALE ASSURE LOCK OR LEVER: No hub or Connect needed. Note: This product only works on 2.4 GHz Wi-Fi in the U.S. and Canada.
  • SIMPLE TO ADD: Simply insert the Yale Wi-Fi Smart Module in the slot above the batteries. Add the module as an accessory in the Yale Access app.
  • UPGRADE YALE ASSURE LOCKS: Add Wi-Fi to your Yale Assure Lock or Lever with no hub or Connect needed.
  • ACCESS FROM ANYWHERE: Lock, unlock, share access and see who comes and goes from anywhere using the Yale Access app.
  • AUTO-UNLOCK: Your Assure Lock/Lever will automatically unlock as you get home and relock for you.

Rewrapping without touching large data

Rewrapping changes only the small wrapped-DEK field. The application unwraps the old DEK under the old KEK version, wraps that same DEK under the new version, updates the key identifier, and never rewrites the large payload. This is usually much cheaper and faster than re-encrypting every byte, but it still requires a controlled migration and temporary permission to use both key versions.

Revocation and recovery

Disabling or revoking a KEK can make every dependent object undecryptable, even when the ciphertext and wrapped DEK are intact. Test backup restoration with the required KMS key versions, policies, identities, and regions. Keep a documented recovery path for retired versions rather than assuming rotation alone provides recoverability.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Security boundaries and common mistakes

  • Treat KMS authorization as a security boundary. Restrict wrap and unwrap permissions by workload identity and key policy. Envelope encryption does not replace access control.
  • Never store plaintext DEKs. Avoid writing them to logs, crash dumps, temporary files, metrics, or persistent caches. Zero or release memory promptly where the language and runtime permit.
  • Guarantee nonce uniqueness. AES-GCM nonce reuse with the same key can undermine confidentiality and authentication. Use a reliable nonce-generation and storage strategy.
  • Authenticate metadata. Include the key identifier, algorithm, version, and application context in authenticated data or an equivalently protected envelope format.
  • Plan for key-version errors. A record may refer to an older KEK version after rotation. Retain the necessary decrypt permission until migration and retention requirements are complete.
  • Separate audit from payload access. KMS logs show key use, but they do not prove that an application handled plaintext safely after unwrapping.

Troubleshooting envelope-encryption failures

Symptom Likely cause Corrective action
KMS rejects an encryption request for a large file The application sent payload bytes to a KMS API with a size limit; Google Cloud KMS limits Encrypt and Decrypt input to 64 KiB Encrypt the payload locally, then send only the DEK to the wrapping operation
Authentication fails during AES-GCM decryption Ciphertext, nonce, authentication tag, or associated data was changed or mismatched Restore the complete envelope from a consistent backup and verify that metadata is authenticated and preserved exactly
KMS returns access denied The workload identity lacks permission for the selected KEK or key version Check identity policy, KMS key policy, project or account boundaries, and the key identifier stored with the object
A rotated object cannot be decrypted The record points to an unavailable or disabled KEK version Restore the required version or complete a documented rewrap migration before retiring the old version
Unexpected plaintext-key exposure appears in diagnostics DEKs were logged, cached, or included in crash material Remove key values from logs and telemetry, shorten their lifetime, and review memory and dump-handling controls

Deployment checklist

  1. Choose an authenticated local cipher and a nonce strategy; 256-bit AES-GCM is the strong algorithm Google recommends for this use case.
  2. Define the DEK scope and lifetime for each data type.
  3. Create a KEK in the KMS and restrict which identities may wrap or unwrap with it.
  4. Specify the envelope format, including ciphertext, wrapped DEK, nonce or IV, authentication tag, algorithm, and KEK version identifier.
  5. Ensure metadata is authenticated and survives object copies, backups, and restores.
  6. Measure KMS request volume, quota headroom, latency, and failure behavior for your provider and region.
  7. Implement retries without accidentally generating duplicate nonces or overwriting a valid envelope with partial metadata.
  8. Document KEK rotation, rewrap, revocation, and disaster-recovery procedures before production data depends on the key.
  9. Test that plaintext DEKs disappear from logs, persistent caches, crash reports, and debugging output.

When envelope encryption is the right choice

Use it when data is larger than a KMS payload limit, when many objects need independent encryption, or when central governance must coexist with local bulk encryption. A direct KMS operation can be appropriate for a tiny value that fits the service’s documented input limit, but it does not remove the need to manage authorization, algorithm metadata, and recovery.

The essential design is simple: encrypt data with a DEK, wrap that DEK with a KEK, store the ciphertext and wrapped key together, and keep the KEK under centralized control. The production-grade details—authenticated metadata, unique nonces, least-privilege KMS access, key-version migration, and memory hygiene—determine whether that simple pattern remains secure at scale.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

AES-GCMAWS Encryption SDKAzure securitycloud securitydata encryption keysenvelope encryptionGoogle Cloud KMSkey encryption keysKMS

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Recommended PC Tool
Recommended PC Tool
PC Slower Than It Used to Be?Free scan - under a minute
Crashes, No Sound, or Screen Glitches?Free driver scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.