Skip to content

feat(secrets): encrypt provider secrets at rest (M5.2) - #17

Merged
ArianAr merged 2 commits into
mainfrom
feat/encrypt-secrets-at-rest
Jul 16, 2026
Merged

feat(secrets): encrypt provider secrets at rest (M5.2)#17
ArianAr merged 2 commits into
mainfrom
feat/encrypt-secrets-at-rest

Conversation

@ArianAr

@ArianAr ArianAr commented Jul 16, 2026

Copy link
Copy Markdown
Owner

Summary

Implements M5.2 Secret hygiene.

Closes #15

  • AES-256-GCM envelope (gantry1:…) via GANTRY_SECRETS_KEY / -secrets-key
  • Encrypt on create; decrypt on get/list (S3 clients receive plaintext)
  • Migrate plaintext rows on DB open when key is set
  • Empty key = plaintext lab mode (documented)

Test

  • go test ./pkg/secrets ./pkg/db ./...

Add GANTRY_SECRETS_KEY/-secrets-key, encrypt on write, decrypt on read,
and migrate legacy plaintext secrets when a key is configured (M5.2).
@ArianAr ArianAr added this to the M5 — Hardening & Operations milestone Jul 16, 2026
@ArianAr ArianAr added enhancement New feature or request security Security related backend Go server and API labels Jul 16, 2026

@ArianAr ArianAr left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review: AES-GCM envelope + migrate-on-open is solid; empty-key passthrough documented. Approve when CI green.

@ArianAr
ArianAr enabled auto-merge (squash) July 16, 2026 18:12
Comment thread pkg/secrets/crypto.go Fixed
CodeQL go/weak-sensitive-data-hashing flagged single-pass SHA-256 in
DeriveKey. Switch to PBKDF2-HMAC-SHA256 (210k iters) for AES key material.
Also merge main into the feature branch.
@ArianAr

ArianAr commented Jul 16, 2026

Copy link
Copy Markdown
Owner Author

CodeQL fix

The red CodeQL check reported a real alert (not the AI model outage):

  • Rule: go/weak-sensitive-data-hashing
  • Location: pkg/secrets/crypto.goDeriveKey used single-pass SHA-256 on the passphrase

Fix pushed: passphrase → PBKDF2-HMAC-SHA256 (210 000 iterations, app salt) → AES-256-GCM key.

Required CI checks remain Foundation/Go/Frontend/Docker; re-run should clear the CodeQL annotation once the new analysis posts.

@ArianAr
ArianAr merged commit 52f9e6f into main Jul 16, 2026
8 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backend Go server and API enhancement New feature or request security Security related

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: encrypt provider secrets at rest (M5.2)

2 participants