Log in.
Tell nothing.
Register, log in, then try to cheat.
Every message below is the real request or response, as it crossed the network. Look for your password in it — it isn't there.
1Account
Pick a throwaway username and password. The password is stretched and turned into a proof in this tab; it is never sent.
3What the server stores
The complete record for your account, as the server returned it. This is all it has.
5Bind a Solana address optional
After logging in you can attach a public Solana address to this demo account and read its live balance from mainnet. Never paste a seed phrase or private key — Nopass never needs one.
2On the wire
Exactly what this tab sent and received. Click any shortened hex value to expand it.
x, the secret a, the shared value S and the session key K. They exist only in this tab.4Replay a captured login
Pretend you recorded every byte of the last successful login. Can you log in again with it? These buttons send the recording back to the real server.
6If the server were breached
A thief with your record can't log in with it, but can guess passwords offline: each guess costs a full PBKDF2 run plus one 2048-bit exponentiation. Try one against your own verifier.
A proof instead of a password
- Registration makes a verifier. Your browser picks a random salt, stretches
username:passwordwith PBKDF2-SHA-256 (600,000 rounds) intox, and sends onlysaltandv = g^x mod N. Recoveringxfromvis the discrete-log problem in a 2048-bit group. - Login is a fresh exchange each time. The browser sends a one-time public value
A = g^a; the server answers with the salt and its own one-timeB = k·v + g^b. Both sides derive the same secretS— the browser from the password, the server from the verifier — without ever sending it. - The browser proves it first. It sends
M1, a hash overA,B, the salt, the username and the shared key. Only someone who knew the password could compute it, and it is bound to this session's randomB. - Then the server proves itself. It answers with
M2 = H(A | M1 | K). A fake server that doesn't hold your verifier can't produce it, so the browser can detect an impostor.
What the server can and can't do
The server never gets
- Your password — not at registration, not at login, not hashed
- Anything that lets it log in as you elsewhere, even on a site where you reused the password (it can still try to guess it — see limits)
- A reusable login secret: every proof is bound to a one-time session
- The session key
Kin transit — both sides compute it
The server does get
- Your username, salt, verifier and PBKDF2 round count
- Whether each login proof was right or wrong, and when
- Your IP address and browser headers, like any website
- Your bound Solana address, if you add one — linked to your username
Nopass reduces what a password login exposes. It does not make you anonymous, and a weak password is still weak.
Known limitations — please read
- Weak passwords can still be guessed offline. If the server's memory leaks, an attacker can test guesses against your verifier (try it in panel 6). PBKDF2 makes each guess slower; it does not make a weak password strong.
- You trust the page you load. SRP protects the password from the server's database and the network, but the server also sends you this page. A malicious copy could simply read the password box. Real deployments pin or audit the client code.
- Demo accounts are temporary. Users live in server memory only: at most 2,000 at once, each deleted after 24 hours, all lost on restart. Your login token lives only in this tab — reload and you are logged out.
- Not constant-time. The BigInt arithmetic in the browser and in server.js is written for clarity, not side-channel resistance. Response timing may also reveal whether a username exists, even though unknown usernames get a decoy salt.
- Binding an address links it to you. The bound address sits next to your username in server memory, and reading its balance sends it to the RPC provider.
- Use HTTPS in practice. SRP keeps the password off the wire, but your session token and everything else still need transport encryption.
- Experimental and unaudited. The SRP-6a code here was written for this demo and checked against RFC 5054's published test vectors, but it has not been reviewed by anyone else. Do not use it to protect anything real.
- No token. The ticker shown is a placeholder label; no token exists.