Authenticated application-level encryption
Sensitive personal fields are encrypted before MySQL storage with AES-256-GCM. Each value receives a fresh cryptographically random 96-bit nonce and a 128-bit authentication tag. GCM provides confidentiality and integrity: altered ciphertext fails authentication rather than silently producing changed data.
Purpose separation and key handling
HKDF-SHA-256 derives different encryption and lookup keys for each data purpose. The master key is kept outside the source code in restricted server configuration and must be backed up separately from the database. Versioned ciphertext supports controlled future changes, but key rotation and recovery still require tested operational procedures.
Pseudonymous operational records
Purchase, download and inquiry tables avoid readable personal fields where possible. They retain a pseudonymous marker while encrypted values are separated into a protected personal-data table. Keyed one-way hashes support record association without exposing the original identifier in normal database views.
Payments and fulfilment
Stripe Checkout handles card details, so CodeKits.shop does not store raw card numbers or card security codes. Stripe webhooks are signature-verified. Download links use cryptographically random tokens, while only token hashes are stored, and links have expiry and usage limits.
Minimal subscription and download data
Email subscriptions retain only the encrypted email, consent record and unsubscribe credential. Product downloads retain the encrypted buyer record, licence and fulfilment status, usage count and broad regional totals.
Subscriber addresses hidden from the dashboard
The normal subscriber dashboard does not decrypt or display email addresses. It shows a short pseudonymous fingerprint with consent and status information. When a newsletter is sent, a protected server-only mailing route decrypts active recipients in memory for delivery through the authenticated email provider. A server operator who also controls the encryption key could technically decrypt the records, so access control and key separation remain essential.
Application and transport safeguards
The application uses parameterized MySQL queries, server-only secrets, input length limits, rate limiting, bot traps, secure production builds and HTTPS deployment behind Nginx. Email transport uses authenticated SMTP over TLS when configured. Administrative mailbox security and server patching remain important parts of the overall system.
Honest security claims
No online system or encryption method can responsibly be described as perfectly secure or unbreakable. CodeKits.shop uses strong current controls, minimises collected data, reviews dependencies and documents limitations. Security must be maintained through updates, access control, monitoring, backups and tested incident response.
Responsible disclosure and security questions can be sent to [email protected].