-
Notifications
You must be signed in to change notification settings - Fork 1
VECTOR_ENCRYPTION_CONFIGURATION
Phase 1: At-Rest Encryption for Vector Embeddings
This guide explains how to configure and use vector encryption in ThemisDB.
Stand: 22. Dezember 2025
Version: v1.3.0
Kategorie: π Security
Status: β
Production Ready
ThemisDB supports at-rest encryption for vector embeddings stored in RocksDB using AES-256-GCM. This feature provides:
- Confidentiality: Vector embeddings encrypted with AES-256
- Integrity: GCM authentication tag prevents tampering
- Key Rotation: Support for multiple key versions
- Backward Compatibility: Reads both encrypted and plaintext vectors
Vector encryption is controlled via configuration in the database:
// Via API
VectorIndexManager vim(db);
vim.setVectorEncryptionEnabled(true);
vim.setVectorKeyId("vector_embeddings");// Via config:vector key in RocksDB
{
"encryption_enabled": true,
"key_id": "vector_embeddings",
"quantization": "none" // Disable quantization when encryption is enabled
}| Option | Type | Default | Description |
|---|---|---|---|
encryption_enabled |
boolean | false |
Enable/disable vector encryption |
key_id |
string | "vector_embeddings" |
Logical key identifier for encryption |
Once encryption is enabled, all new vectors are automatically encrypted:
VectorIndexManager vim(db);
vim.init("documents", 768);
vim.setVectorEncryptionEnabled(true);
// Add vector - automatically encrypted
BaseEntity doc("doc1");
std::vector<float> embedding(768, 0.5f);
doc.setField("embedding", embedding);
vim.addEntity(doc);
// Vector is encrypted in RocksDB storage
// In-memory HNSW index still uses plaintext for searchSearch operates normally - vectors are decrypted automatically:
std::vector<float> query(768, 0.5f);
auto [status, results] = vim.searchKnn(query, 10);
// Results are the same as without encryption
for (const auto& result : results) {
std::cout << "PK: " << result.pk
<< ", Distance: " << result.distance << std::endl;
}VectorIndexManager vim(db);
vim.init("documents", 768);
// Rebuild from storage - automatically decrypts vectors
auto status = vim.rebuildFromStorage();
// Index is now ready for searchUse the migration tool to encrypt existing plaintext vectors:
# Dry run (no changes)
./migrate_vector_encryption \
--db-path /var/lib/themisdb/data \
--object-name documents \
--dry-run
# Actual migration
./migrate_vector_encryption \
--db-path /var/lib/themisdb/data \
--object-name documents \
--batch-size 1000| Option | Required | Description |
|---|---|---|
--db-path |
Yes | Path to RocksDB database |
--object-name |
Yes | Vector index object name (e.g., "documents") |
--key-id |
No | Encryption key ID (default: "vector_embeddings") |
--batch-size |
No | Batch size for migration (default: 1000) |
--dry-run |
No | Simulate migration without making changes |
-
Backup your database
cp -r /var/lib/themisdb/data /var/lib/themisdb/data.backup
-
Run dry-run migration
./migrate_vector_encryption --db-path /var/lib/themisdb/data \ --object-name documents --dry-run -
Review the output
- Check how many vectors will be migrated
- Verify no errors in dry-run
-
Run actual migration
./migrate_vector_encryption --db-path /var/lib/themisdb/data \ --object-name documents -
Enable encryption for new vectors
vim.setVectorEncryptionEnabled(true);
Track encryption operations:
// Log encryption events
THEMIS_INFO("VectorIndexManager: Vector encryption ENABLED");
THEMIS_DEBUG("VectorIndexManager: Encrypted vector for pk={}", pk);
THEMIS_WARN("rebuildFromStorage: Failed to decrypt vector for pk={}: {}", pk, ex.what());All encryption operations are logged for compliance:
- Vector encryption (when adding entities)
- Vector decryption (when rebuilding from storage)
- Encryption errors and failures
- Configuration changes
Plaintext 768-dim vector: 3,072 bytes
Encrypted 768-dim vector: 3,150 bytes (+2.5%)
Components:
- Ciphertext: 3,072 bytes (768 Γ 4)
- IV: 12 bytes
- Auth tag: 16 bytes
- Metadata: ~50 bytes (key_id, version, base64)
Total: 3,150 bytes
- No impact on search: Vectors are decrypted once during index load
- HNSW search: Operates on plaintext vectors in memory (no decryption overhead)
- Index load time: +40% overhead for decryption (5 seconds for 1M vectors)
- Encryption overhead: ~0.4 ms per vector (768-dim)
- Acceptable for production: Throughput remains high (>1000 vectors/sec)
- Algorithm: AES-256-GCM
- Mode: Galois/Counter Mode (authenticated encryption)
- IV Size: 12 bytes (96 bits, random per encryption)
- Tag Size: 16 bytes (128 bits, authentication tag)
- Keys are managed by the configured
KeyProvider - Supports key rotation with versioning
- Old encrypted vectors can be decrypted with their original key version
Before Encryption:
- β Disk: Plaintext vectors in RocksDB
- β Backups: Plaintext vectors in backup files
After Encryption:
- β Disk: AES-256-GCM encrypted vectors
- β Backups: Encrypted vectors
β οΈ Memory: Plaintext vectors in HNSW index (required for search)
CRY-03 (Data-at-Rest Encryption):
- β Fully Compliant after Phase 1
- Vectors encrypted with AES-256-GCM
- Keys managed by application (not OS-level)
1. Encryption Disabled After Restart
// Solution: Re-enable after server restart
vim.setVectorEncryptionEnabled(true);2. Mixed Encrypted/Plaintext Vectors
This is expected during migration. The system handles both:
// rebuildFromStorage() tries in this order:
// 1. Encrypted vector (embedding_encrypted)
// 2. Lossless compressed vector
// 3. Plaintext vector (embedding)
// 4. SQ8 quantized vector (embedding_q)3. Decryption Failures
Check logs for errors:
grep "Failed to decrypt" /var/log/themisdb/server.logPossible causes:
- Missing or incorrect encryption key
- Corrupted encrypted data
- Wrong key version
4. Performance Degradation
If index load time is too long:
- Consider batch decryption optimization (Phase 2)
- Use encrypted HNSW persistence (Phase 2, Ticket 3)
Enable encryption before adding large datasets:
vim.init("documents", 768);
vim.setVectorEncryptionEnabled(true); // Enable before adding data
// Now add vectors...Always test migration on a staging environment:
# 1. Copy production data to staging
# 2. Run dry-run migration
# 3. Run actual migration
# 4. Verify search works
# 5. Deploy to productionEncryption adds ~2.5% storage overhead. Monitor disk usage:
df -h /var/lib/themisdbBackup before enabling encryption:
# Backup before migration
tar czf themisdb-backup-$(date +%Y%m%d).tar.gz /var/lib/themisdb/data
# Restore if needed
tar xzf themisdb-backup-20251215.tar.gz -C /var/lib/themisdb/Plan for regular key rotation (quarterly):
// Create new key version
key_provider->createKey("vector_embeddings", 2);
// Migrate vectors to new key (future feature)Ticket 3: HNSW Index Encryption
- Encrypt HNSW index files on disk
- Reduce index load time with encrypted persistence
- See
docs/security/HNSW_PERSISTENCE_ENCRYPTION_ANALYSIS.md
Ticket 5: Differential Privacy (3-6 months)
- Add noise to vectors for privacy
- Research-level feature
Ticket 6: Homomorphic Encryption (12 months)
- Search on encrypted vectors without decryption
- Highly experimental
- Phase 1 Implementation Plan
- Phase 1 Status & Next Steps
- HNSW Persistence Encryption Analysis
- BSI C5 Compliance Analysis
- Embedding Reversibility Analysis
Status: Production Ready
Version: 1.0 (Phase 1)
Date: December 15, 2025
ThemisDB 1.9.0-beta Β· Home Β· Wiki-Index Β· Module-Index Β· FAQ Β· Quick-Reference Β· GitHub Β· Issues Β· Discussions Β· License
- Batch Operations
- Best Practices
- CRUD Tutorial
- Custom Document Ingestion
- Getting Started Tutorial
- Interactive Examples
- Schema Design
- Video Tutorials
- AQL Reference
- AQL Examples
- AQL Overview
- AQL Feature Roadmap
- AQL Geospatial Guide
- AQL LLM Migration Guide
- AQL API
- AQL Grammar (EBNF)
- AQL Root Overview
- AQL Examples (root)
- API Reference
- API Module README
- OpenAPI Overview
- Client SDK Overview
- SDK Overview
- Operations
- Operations Overview
- Operations Runbook
- Operations Handbook
- ThemisCtl Admin Guide
- Pipeline E2E SOPs
- Deploy Overview
- Docker Overview
- Docker Hub README
- Helm Overview
- Packaging Overview
- Operator Overview
- Security Policy
- Production Hardening Checklist
- Security Hardening Guide
- Encryption Key Management
- Access Control Framework
- Zero Trust Policy
- API Authentication & Authorization
- HSM Production Setup
- PKCS11 Integration
- DSGVO / SOC2 Checklist
- Access Model Runbooks
- Access Model Dashboard
- Maturity Automation Runbook
- Access Review Automation
- Access Model Dashboard
- Access Model Runbooks
- Rights Revocation
- Dr Checklists
- Dr Testing
- Incident Response Playbook
- Incident Response Testing
- GPU Oom Recovery
- Grammar Debugging
- Metrics Scrape Troubleshooting
- Model Swap Procedure
- Quota Tuning
- Subagent Deployment
- Logging Configuration
- Content Model
- Crypto & Keys
- Feature Flags Reference
- Modular Architecture Roadmap
- Modularization Guide
- Module Architecture Index
- PostgreSQL Wire Protocol
- Query Scheduling
- Raft Consensus Design
- Resource Pooling
- Source Directory Guide
- Unified Access Model
- E1 001 Layered Retrieval Design
- E1 002 Ann Abstraction Strategy
- E1 003 Tensor Summary Types
- E1 004 Lora Package Distinction
- E1 005 Model Switch Compatibility
- E1 006 Federated Tensor Summaries
- E2 001 Evaluation Framework Design
- E2 002 Hardware Profile Strategy
- E2 003 Query Planner Routing Model
- E2 004 Approximation Governance Rules
- E2 005 Cross Layer Fallback Confidence Policy
- E3 001 Distributed Tensor Design
- E3 002 Manifest Coordination Strategy
- E3 003 Recovery And Erasure Choice
- E3 004 Tensor Fabric Infrastructure
- Contributing
- Contributing (root)
- Code of Conduct
- Support
- Maintainers
- CTest Guide
- Build Quick Reference
- Developer Wiki Index
- Build / Test / CI
- Module Index
- Branching Strategy
- Disabled Stub Policy
- Docs PR Policy
- GA Promotion Sign Off
- Github Milestones Setup
- Maturity Claim Verification Checklist
- Maturity Evidence Registry
- Merge Gate Bot Config
- Merge Gate Status Live
- Phase 1 Closure Report
- Phase Closure Policy
- Phase Dependency Graph
- Phase3 Enforcement Runbook
- Plugin Submodule Rollback
- PR Version Targeting
- PR Version Targeting Backfill
- Production Ready 2026 Delivery Plan
- Query Module Status
- Readme
- Release Promotion Gate Policy
- Release Validation Checklist
- Security Module 5671 Evidence Summary
- Sharding P6 Residual Risk Acceptance
- Sourcecode Compliance Governance
- Updates Development Status Sign Off
- Wave C Implementation Complete
- Blob Storage
- Cuda
- Ethics Ai
- Exporters
- Huggingface
- Image Analysis
- Importers
- RPC
- Scraper
- Themisdb Ai Watermark Detector
- User Storage Encrypted
- Chimera Architecture
- Chimera Future
- Chimera Readme
- Chimera Roadmap
- Covina Fastapi Ingestion Architecture
- Covina Fastapi Ingestion Future
- Covina Fastapi Ingestion Roadmap
- Vcc Base Architecture
- Vcc Base Future
- Vcc Base Roadmap
- Vcc Clara Ingestion Architecture
- Vcc Clara Ingestion Future
- Vcc Clara Ingestion Roadmap
- Vcc Veritas Architecture
- Vcc Veritas Future
- Vcc Veritas Roadmap
- 01 Hello World
- 02 Todo App
- 03 Contact Manager
- 04 Inventory System
- 05 Time Series Monitor
- 06 Graph Social Network
- 07 Vector Search Documents
- 08 Dms Erp System
- 09 Iot Sensor Network
- 10 Drone Image Analysis
- 11 Blog Wiki
- 12 Expense Tracker
- 13 Recipe Manager
- 14 Ecommerce Catalog
- 15 Event Management
- 16 Kanban Board
- 17 Crm
- 18 Realtime Chat
- 19 Recommendation Engine
- 20 Smart Home
- 21 Coding Platform
- 22 AQL Diagram Tool
- 23 Traveling Salesman
- 24 Moral Philosophy Debates
- API Versioning
- Distributed Sharding
- Feedback Plugins
- Geo
- Gnn
- Image Analysis
- Legal Lora Training
- LLM
- Lora Sync
- Migration
- Nlp
- Performance
- Railway
- Replication
- Rope Visualization
- Sample Product Config
- Security
- Client SDK Overview
- Quickstart
- Sdk Enhancements
- Sdk Implementation Summary
- Test Suite Readme
- Go
- Java
- Javascript
- Php
- Python
- Ruby
- Rust
- Typescript
- 01 Grundlegende Operationen
- 02 AQL Queries
- 03 Graph Daten
- 04 Multimodell Anwendung
- 01 Quickstart Guide
- 02 AQL Referenz Kurzuebersicht
- 03 Datenmodellierung Guide
- 04 Uebungsaufgaben
- 05 Best Practices Guide
- Training Documents
- Training Overview
- 01 Einfuehrung Und Uebersicht
- 02 Datenmodelle Und Architektur
- 03 AQL Abfragesprache
- 04 Installation Und Setup
- 05 Anwendungsbeispiele
- Training Presentations
- Dependencies Readme
- Processmonitor Readme
- Themis.admintools.shared Readme
- Themis.aqlquerybuilder Readme
- Themis.aqlquerybuilder Roadmap
- Themis.auditlogviewer Readme
- Themis.auditlogviewer Roadmap
- Themis.classificationdashboard Readme
- Themis.classificationdashboard Roadmap
- Themis.compliancereports Readme
- Themis.compliancereports Roadmap
- Themis.gisviewer.controlpanel Readme
- Themis.gisviewer.controlpanel Roadmap
- Themis.impactanalysisviewer Readme
- Themis.impactanalysisviewer Roadmap
- Themis.ingestiontool Readme
- Themis.ingestiontool Roadmap
- Themis.keyrotationdashboard Readme
- Themis.keyrotationdashboard Roadmap
- Themis.piimanager Readme
- Themis.piimanager Roadmap
- Themis.retentionmanager Readme
- Themis.retentionmanager Roadmap
- Themis.sagaverifier Readme
- Themis.sagaverifier Roadmap
- Themis.usbadmintool Readme
- Themis.usbadmintool Roadmap
- CI Readme
- CI Roadmap
- Compiler Diagnostics Readme
- Compiler Diagnostics Roadmap
- Completion Readme
- Copilot Ollama Router Readme
- Copilot Ollama Router Roadmap
- Gnn Readme
- Gnn Roadmap
- Rope Visualizer Readme
- Rope Visualizer Roadmap
- Tco Calculator Readme
- Tco Calculator Roadmap
- Tests Readme
- Tests Roadmap
- Themis Config Wx Readme
- Themis Docs Builder Readme
- Wikipedia Ingestion Readme