OperationsUpdated 2026-11-05View as MarkdownEdit on GitHub

Security & reliability

Keyvane decides whether paying customers get access, so a bug can cost your customers money or lock them out. These are the safeguards built into the platform.

Credentials

Secret How it is stored
Account passwords scrypt (N=16384, r=8, p=1) with a per-password salt. Login timing does not reveal whether an email exists.
Dashboard sessions Random 256-bit tokens in HttpOnly, SameSite=Lax cookies (Secure over HTTPS). Only a SHA-256 hash is stored. Sessions expire after 30 days.
Secret API keys Shown once and stored as SHA-256 hashes. Revocation is immediate.
Publishable API keys Stored in plain text by design. They can only validate and activate license keys.
Stripe webhook secrets Encrypted at rest with AES-256-GCM using a key derived from KEYVANE_SECRET (HKDF-SHA256).
Password-reset tokens Single-use, valid for one hour, stored as SHA-256 hashes.
License keys 100 bits of entropy, stored in plain text so you and your customers can retrieve them. Treat them as bearer credentials.

Web application

Stripe event handling

Correctness of access decisions

Your responsibilities when self-hosting

Use HTTPS, keep KEYVANE_SECRET private and backed up, back up the database, keep Node.js updated, and restrict who can reach the server's shell.

Reporting a vulnerability

Please report vulnerabilities privately through GitHub security advisories. Do not open a public issue.