implementing-aes-encryption-for-data-at-rest
Guides implementing AES-256 encryption in GCM mode (FIPS 197) for files and data stores at rest, covering key derivation, IV/nonce management, and authenticated encryption. Use when deploying or configuring encryption for data at rest, establishing controls to meet compliance requirements, or reviewing an implementation during a security assessment.
Works with
--- name: implementing-aes-encryption-for-data-at-rest description: Guides implementing AES-256 encryption in GCM mode (FIPS 197) for files and data stores at rest, covering key derivation, IV/nonce management, and authenticated encryption. Use when deploying or configuring encryption for data at rest, establishing controls to meet compliance requirements, or reviewing an implementation during a security assessment. license: Apache-2.0 --- # Implementing AES Encryption for Data at Rest ## Overview AES (Advanced Encryption Standard) is a symmetric block cipher standardized by NIST (FIPS 197) used to protect classified and sensitive data. This skill covers implementing AES-256 encryption in GCM mode for encrypting files and data stores at rest, including proper key derivation, IV/nonce management, and authenticated encryption. ## When to Use - When deploying or configuring implementing aes encryption for data at rest capabilities in your environment - When establishing security controls aligned to compliance requirements - When building or improving security architecture for this domain - When conducting security assessments that require this implementation ## Prerequisites - Familiarity with cryptography concepts and tools - Access to a test or lab environment for safe execution - Python 3.8+ with required dependencies installed - Appropriate authorization for any testing activities ## Objectives - Implement AES-256-GCM encryption and decryption for files - Derive encryption keys from passwords using PBKDF2 and Argon2 - Manage initialization vectors (IVs) and nonces securely - Encrypt and decrypt entire directory trees - Implement authenticated encryption to detect tampering - Handle large files with streaming encryption ## Key Concepts ### AES Modes of Operation | Mode | Authentication | Parallelizable | Use Case | |------|---------------|----------------|----------| | GCM | Yes (AEAD) | Yes | Network data, file encryption | | CBC | No | Decrypt only | Legacy systems, disk encryption | | CTR | No | Yes | Streaming encryption | | CCM | Yes (AEAD) | No | IoT, constrained environments | ### Key Derivation Never use raw passwords as encryption keys. Always derive keys using: - **PBKDF2**: NIST-approved, widely supported (minimum 600,000 iterations as of 2024) - **Argon2id**: Winner of Password Hashing Competition, memory-hard - **scrypt**: Memory-hard, good alternative to Argon2 ### Nonce/IV Management - GCM requires a 96-bit (12-byte) nonce that must NEVER be reused with the same key - Generate nonces using `os.urandom()` (CSPRNG) - Store nonce alongside ciphertext (it is not secret) ## Workflow 1. Install the `cryptography` library: `pip install cryptography` 2. Generate or derive an encryption key 3. Create a random nonce for each encryption operation 4. Encrypt data using AES-256-GCM with the key and nonce 5. Store nonce + ciphertext + authentication tag together 6. For decryption, extract nonce, verify tag, and decrypt ## Encrypted File Format ``` [salt: 16 bytes][nonce: 12 bytes][ciphertext: variable][tag: 16 bytes] ``` ## Security Considerations - Always use authenticated encryption (GCM, CCM) to prevent tampering - Never reuse a nonce with the same key (catastrophic in GCM) - Use at least 256-bit keys for long-term data protection - Securely wipe keys from memory after use when possible - Rotate encryption keys periodically per organizational policy - For disk-level encryption, consider XTS mode (AES-XTS) ## Validation Criteria - [ ] AES-256-GCM encryption produces valid ciphertext - [ ] Decryption recovers original plaintext exactly - [ ] Authentication tag detects any ciphertext modification - [ ] Key derivation uses sufficient iterations/parameters - [ ] Nonces are never reused for the same key - [ ] Large files (>1GB) can be processed via streaming - [ ] Encrypted file format includes all necessary metadata
More Security skills
azure-cost
microsoft/azure-skills
Azure cost management: query costs, forecast spending, optimize to reduce waste. WHEN: \"Azure costs\", \"Azure bill\", \"cost breakdown\", \"how much am I spending\", \"forecast spending\", \"optimize costs\", \"reduce spending\", \"orphaned resources\", \"rightsize VMs\", \"cost spike\", \"reduce storage costs\", \"AKS cost\". DO NOT USE FOR: deploying resources, provisioning, diagnostics, or security audits.
entra-app-registration
microsoft/azure-skills
Guides Microsoft Entra ID app registration, OAuth 2.0 authentication, and MSAL integration. USE FOR: create app registration, register Azure AD app, configure OAuth, set up authentication, add API permissions, generate service principal, MSAL example, console app auth, Entra ID setup, Azure AD authentication. DO NOT USE FOR: Key Vault secrets (use azure-keyvault-expiration-audit), general Azure resource security guidance.
azure-messaging
microsoft/azure-skills
Troubleshoot and resolve issues with Azure Messaging SDKs for Event Hubs and Service Bus. Covers connection failures, authentication errors, message processing issues, and SDK configuration problems. WHEN: event hub SDK error, service bus SDK issue, messaging connection failure, AMQP error, event processor host issue, message lock lost, message lock expired, lock renewal, lock renewal batch, send timeout, receiver disconnected, SDK troubleshooting, azure messaging SDK, event hub consumer, service bus queue issue, topic subscription error, enable logging event hub, service bus logging, eventhub python, servicebus java, eventhub javascript, servicebus dotnet, event hub checkpoint, event hub not receiving messages, service bus dead letter, batch processing lock, session lock expired, idle timeout, connection inactive, link detach, slow reconnect, session error, duplicate events, offset reset, receive batch.

