6.1 KiB
Compliance Message Decryption Guide
This guide explains how to decrypt encrypted messages for compliance and legal purposes using the secure offline compliance system.
Overview
The application uses client-server encryption for direct messages (DMs). While regular users can only decrypt their own messages, compliance officers can decrypt any message for legal compliance purposes using a secure offline process.
Security Model
- Regular Users: Can only decrypt messages encrypted with their own public keys
- Compliance Officers: Can decrypt any message using the compliance private key (stored offline)
- No Server Access: Compliance private keys are never stored on production servers
- Audit Trail: All compliance access is logged with timestamps and user IDs
Prerequisites
1. Compliance Officer Access
- Must be logged in as user ID 1 (system administrator)
- Requires valid JWT authentication token
2. Air-Gapped Machine
- A secure, offline computer for decryption
- Compliance private key stored securely
- Python environment with required dependencies
3. Files Required
compliance_keypair.txt- Contains compliance X25519 keypaircompliance_decryption.py- Decryption script- Message data extracted from the server
Step-by-Step Instructions
Step 1: Extract Message Data from Server
On the production server (as compliance officer):
- Log in to the application as user ID 1
- Get your JWT token from browser developer tools:
- Open DevTools (F12)
- Go to Application → Local Storage
- Copy the
tokenvalue
- Extract message data using the API:
curl -H "Authorization: Bearer YOUR_JWT_TOKEN" \
http://localhost:8300/api/dm/compliance/extract/MESSAGE_ID \
> compliance_MESSAGE_ID.json
Replace MESSAGE_ID with the actual message ID you want to decrypt.
4. Verify the extraction was successful:
cat compliance_MESSAGE_ID.json | jq .
Expected response:
Step 2: Transfer Data to Air-Gapped Machine
Securely transfer the JSON file to your air-gapped machine:
- Use encrypted USB drive
- Use secure file transfer protocol
- Never transfer over network if air-gapping is required
Step 3: Decrypt Message on Air-Gapped Machine
On the air-gapped machine:
- Ensure you have the required files:
compliance_keypair.txt(compliance private key)compliance_decryption.py(decryption script)compliance_MESSAGE_ID.json(extracted message data)
- Run the decryption:
python compliance_decryption.py decrypt --input-file compliance_MESSAGE_ID.json
- The script will output the decrypted message:
🔓 Loading compliance data from: compliance_MESSAGE_ID.json
📄 Loaded message ID: 123
📅 Timestamp: 2026-01-10T19:23:37.938054
👤 Sender: 456, Recipient: 789
🔐 Has compliance MEK: ✅
🔑 Loading compliance private key...
🔓 Decrypting message content...
✅ DECRYPTION SUCCESSFUL
==================================================
Message ID: 123
From: User 456
To: User 789
Timestamp: 2026-01-10T19:23:37.938054
Decrypted at: 2026-01-10T19:33:20.782656
--------------------------------------------------
MESSAGE CONTENT:
{"type":"text","data":{"content":"Your encrypted message here"}}
--------------------------------------------------
⚠️ This content has been accessed for compliance purposes
Message Format
Decrypted messages contain the original message payload in JSON format:
{
"type": "text",
"data": {
"content": "The actual message text",
"files": [...] // Optional file attachments
}
}
Security Considerations
Key Management
- Compliance private key: Never stored on production servers
- Access control: Only user ID 1 can extract messages
- Audit logging: All extractions are logged with timestamps
Data Handling
- Secure transfer: Use encrypted channels for data transfer
- Immediate destruction: Delete decrypted content after review
- No caching: Don't store decrypted messages
Operational Security
- Air-gapped environment: Use dedicated offline machine for decryption
- Access controls: Limit physical access to compliance officers
- Regular audits: Review access logs regularly
Troubleshooting
"Access denied" Error
- Ensure you're logged in as user ID 1
- Check that your JWT token is valid and not expired
"Message not found" Error
- Verify the message ID exists
- Check that the message hasn't been deleted
Decryption Failures
- Ensure
compliance_keypair.txtis present and contains valid keys - Check that the JSON file wasn't corrupted during transfer
- Verify Python environment has required cryptography dependencies
Network Errors
- Ensure the server is running and accessible
- Check firewall and network connectivity
- Verify API endpoints are correctly configured
API Reference
Compliance Extraction Endpoint
GET /api/dm/compliance/extract/{message_id}
Authorization: Bearer <jwt_token>
Response: JSON with encrypted message data
Restrictions:
- Requires user ID 1 authentication
- Returns encrypted data only (no plaintext)
- Logs all access for audit purposes
Decryption Script
python compliance_decryption.py decrypt --input-file <json_file>
Requirements:
compliance_keypair.txtin current directory- Valid JSON file from extraction API
- Python with cryptography library
Compliance Workflow Summary
1. Legal Request → 2. Compliance Officer → 3. Server Extraction → 4. Secure Transfer → 5. Offline Decryption → 6. Content Review → 7. Audit Logging
↓ ↓ ↓ ↓ ↓ ↓ ↓
Legal basis User ID 1 login API call with token Encrypted transfer Air-gapped machine Content analysis Access recorded
This ensures complete separation between production systems and compliance decryption, maintaining security while enabling legal access to encrypted communications