Skip to main content

Data Handling

This document describes how UAPK Gateway handles data at rest and in transit.

Data Categories

CategoryExamplesSensitivity
CredentialsAPI keys, tokens, passwordsCritical
Audit LogsAction records, hashes, signaturesHigh
ManifestsAgent capabilities, constraintsMedium
ConfigurationOrg settings, policiesMedium
MetadataTimestamps, IDsLow

Data Flow

Encryption

In Transit

All data is encrypted in transit using TLS 1.2+.

EndpointProtocolCipher Suites
APIHTTPS/TLS 1.2+ECDHE, AES-GCM
DatabaseTLSECDHE, AES-GCM
DashboardHTTPS/TLS 1.2+ECDHE, AES-GCM

Configuration:

# Recommended Caddy/Nginx TLS settings
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers on;

At Rest

DataEncryptionNotes
DatabasePostgreSQL encryptionEnable at DB level
Audit LogsFile system encryptionUse encrypted volumes
Signing KeysHSM or encrypted storageSee Key Management
BackupsAES-256Encrypt before storage

Sensitive Data Handling

Passwords

  • Hashed using bcrypt with cost factor 12
  • Never logged or exposed in API responses
  • Reset tokens expire after 1 hour

API Keys

  • Generated with cryptographically secure random bytes
  • Stored as bcrypt hash (only prefix visible)
  • Full key shown only once at creation

Capability Tokens

  • Ed25519 signed JWTs
  • Short-lived (default 24 hours)
  • Never stored server-side (stateless verification)

Audit Logs

FieldHandling
Request paramsStored as-is (may contain sensitive data)
Result dataStored as-is
HashesSHA-256 of canonical JSON
SignaturesEd25519, Base64 encoded
Request Parameter Sensitivity

Action parameters are logged for audit purposes. Avoid including sensitive data (passwords, PII) in action parameters.

Data Retention

Default Retention

Data TypeRetentionNotes
Audit LogsIndefiniteConfigure per compliance needs
ManifestsUntil revokedHistorical versions preserved
API KeysUntil revokedRevoked keys kept for audit
Sessions24 hoursAuto-expired

Configuring Retention

# Environment variable
GATEWAY_LOG_RETENTION_DAYS=365

# Or in settings
curl -X PATCH http://localhost:8000/api/v1/orgs/$ORG_ID \
-H "Authorization: Bearer $TOKEN" \
-d '{"settings": {"log_retention_days": 365}}'

Data Deletion

Audit Integrity

Deleting audit logs breaks chain verification. Export and verify before deletion.

# Archive old logs before deletion
curl -X POST http://localhost:8000/api/v1/orgs/$ORG_ID/logs/export/download \
-H "Authorization: Bearer $TOKEN" \
-d '{"to": "2023-12-31T23:59:59Z"}' > archive-2023.json

# Verify archive
python verify_log_chain.py archive-2023.json

Database Security

PostgreSQL Configuration

# postgresql.conf
ssl = on
ssl_cert_file = '/path/to/server.crt'
ssl_key_file = '/path/to/server.key'

# pg_hba.conf - require SSL
hostssl all all 0.0.0.0/0 scram-sha-256

Access Control

  • Dedicated database user with minimal permissions
  • Network isolation (private subnet)
  • No direct external access

Backup Encryption

# Encrypted backup
pg_dump $DATABASE_URL | gpg --symmetric --cipher-algo AES256 > backup.sql.gpg

# Restore
gpg --decrypt backup.sql.gpg | psql $DATABASE_URL

Log Sanitization

What's Logged

FieldLoggedNotes
Action type/toolYesAlways logged
Request parametersYesIncludes action params
Result dataYesIncludes execution result
TimestampsYesUTC ISO 8601
Agent IDYesFor attribution
Hashes/signaturesYesFor verification

What's Not Logged

FieldReason
Full API keysSecurity - only prefix logged
PasswordsSecurity - never logged
Full capability tokensSecurity - only token ID logged

Redaction

For compliance, you may need to redact sensitive fields:

# Example: Redact email addresses in exports
def redact_pii(record):
if 'params' in record and 'to' in record['params']:
record['params']['to'] = 'REDACTED'
return record

Compliance

GDPR

RequirementImplementation
Right to accessExport logs filtered by subject
Right to erasureDelete after retention period
Data minimizationOnly log necessary fields
ConsentManifest registration = consent

SOC 2

ControlImplementation
Access controlRBAC, API keys, tokens
EncryptionTLS in transit, at rest encryption
Audit loggingTamper-evident hash chain
AvailabilityHigh availability deployment

Best Practices

Minimize Sensitive Data

Don't include passwords or secrets in action parameters.

Encrypt Backups

Always encrypt database and log backups.

Network Isolation

Run database on private network, no direct access.

Regular Audits

Review what data is being logged regularly.