Security model
Security products earn trust by being clear about their limits, not by making big claims. Here is exactly what PassNumber is designed to do, what it leaves to you, and what it does not pretend to do.
Threat model
An attacker who can observe a single login (over your shoulder, a camera, or a keylogger capturing one session) should not be able to reuse what they saw. That is the core design goal, and the reshuffle achieves it.
How the demo is built
Secrets are stored with password_hash() (bcrypt) and verified in constant time — never unsalted, never reversible by lookup.
Every database query uses PDO prepared statements. No query is built by string concatenation, so injection is closed off.
Every form carries a CSRF token; session cookies are HttpOnly and SameSite, and become Secure automatically over HTTPS.
After repeated failed attempts an account locks for a cooldown window, throttling guessing at the account level.
The demo uses SQLite — a local file — so there is no database password to commit, leak, or rotate.
Each row is encoded independently, so a correct secret is unique and wrong entries are reliably rejected.