diff --git a/Cargo.lock b/Cargo.lock
index 74dbd4d4..52011725 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -7890,6 +7890,7 @@ dependencies = [
name = "rustfs"
version = "0.0.5"
dependencies = [
+ "aes-gcm 0.11.0-rc.2",
"astral-tokio-tar",
"async-trait",
"atoi",
diff --git a/rustfs/Cargo.toml b/rustfs/Cargo.toml
index 9c320935..dadefac7 100644
--- a/rustfs/Cargo.toml
+++ b/rustfs/Cargo.toml
@@ -95,6 +95,7 @@ serde_urlencoded = { workspace = true }
rustls = { workspace = true }
subtle = { workspace = true }
rustls-pemfile = { workspace = true }
+aes-gcm = { workspace = true }
# Time and Date
chrono = { workspace = true }
@@ -128,6 +129,7 @@ urlencoding = { workspace = true }
uuid = { workspace = true }
zip = { workspace = true }
libc = { workspace = true }
+rand = { workspace = true }
# Observability and Metrics
metrics = { workspace = true }
diff --git a/rustfs/src/storage/sse.rs b/rustfs/src/storage/sse.rs
index ff09d250..98828026 100644
--- a/rustfs/src/storage/sse.rs
+++ b/rustfs/src/storage/sse.rs
@@ -72,8 +72,13 @@
//! }
//! ```
+use aes_gcm::{
+ Aes256Gcm, Key, Nonce,
+ aead::{Aead, KeyInit},
+};
use base64::{Engine, engine::general_purpose::STANDARD as BASE64_STANDARD};
use chrono::Utc;
+use rand::RngCore;
use rustfs_ecstore::error::StorageError;
use rustfs_filemeta::ObjectPartInfo;
use rustfs_kms::{
@@ -235,9 +240,17 @@ pub async fn apply_encryption(request: EncryptionRequest<'_>) -> Result