Alien Lights Identity
Your key stays on your phone
An ML-DSA-65 (FIPS 204) key is made on your phone. We keep only the public half.
Only you can open it
Hardware-backed Android Keystore. Fingerprint, face or PIN opens a 15-second window.
Anyone can check our work
Every key event goes into a public, hash-chained, double-signed transparency log.
A wax stamp, a steel safe and a doorman
- Make a stampYour phone creates a one-of-a-kind wax stamp. That is your key.
- Lock it awayThe stamp lives in a tiny steel safe inside your phone.
- Open with youThe safe opens for your face or fingerprint. Just 15 seconds.
- Doorman hands a sheetOur server gives you one blank sheet. Single use.
- Stamp itThe doorman checks your stamp against a drawing of it. Match: you are in.
- Write it down, publiclyEvery key change goes in a public notebook. Nobody can erase a page.
Why no password? The doorman checks your stamp, not a secret word. There is nothing to phish or leak.
Your key lives in a hardware safe
Your phone makes the root key and locks it with a hardware-backed Keystore key. We never receive it.
- ML-DSA-65 root key, made on your phone
- Wrapped with AES-256-GCM at rest
- StrongBox or Knox Vault when present, else TEE
- ML-DSA-65
- AES-256-GCM
- StrongBox / TEE
Technical detail
- The wrapping key is an AES-256-GCM key in the Android Keystore. StrongBox is requested first; Samsung routes that to Knox Vault. Otherwise a TEE-backed key is used.
- The key is authentication-bound: every use needs a check, with a 15-second validity window. A strong biometric or the screen-lock credential qualifies.
- ML-DSA signing runs in app memory after unwrap, because no shipping secure element runs ML-DSA.
- Only standard Android Keystore and BiometricPrompt APIs are used. No proprietary SDK.
- On Android 12 and newer the app reads the protection level from the key's security-level attribute and shows it in Settings. Older versions distinguish hardware from software.
- With no secure screen lock, Android cannot bind the key to you. The app shows a banner asking for a lock.
- Validated on real hardware: the installed release app registered an identity against the live production API on a Samsung Galaxy S25 FE. Hardware key protection read green, the Keystore held the AES-256-GCM wrapping key in StrongBox (Knox Vault), and an on-device sign and verify round trip passed. Other devices may land on TEE or software protection, which the app reports in Settings.
It opens for you, for 15 seconds
Your fingerprint, face or PIN opens a 15-second window. The app locks itself 60 seconds after you leave.
- Biometric-gated Keystore unlock
- Sending re-checks after 2 minutes
- Locking clears keys, tokens and caches
- 15 s window
- 60 s auto-lock
- 2 min re-check
Technical detail
- The 15 seconds limits when the Keystore performs wrap and unwrap operations. A key already in memory stays there until auto-lock.
- Auto-lock fires 60 seconds after the app goes to the background and drops keys, tokens and decrypted caches.
- Sending needs a fresh check if the last one was over 2 minutes ago.
- On Android 9 and 10 the combined strong-biometric-or-PIN prompt is unavailable. The app accepts weak biometrics or the PIN there.
Sign in by signing a challenge
The server sends a one-time challenge. Your phone signs it. The server checks the signature against your public key.
- No password to phish or leak
- Each challenge works once, for 120 seconds
- A replayed signature fails
- ML-DSA-65
- 120 s nonce
- 1 h session token
Technical detail
- The phone signs the exact text the server returns: a domain-separated prefix, the identity UUID and the nonce (UTF-8, ML-DSA-65).
- The server rejects revoked identities and burns the nonce on first use.
- The phone repeats the handshake silently when a session expires. It needs the key to be openable at that moment.
- The session token is a JWT valid for 1 hour, held in memory only. Signing out drops it.
Lose your phone, keep your identity
A recovery password encrypts a backup of your keys on your phone. We store the encrypted blob and cannot open it.
- Argon2id on the phone: 64 MiB, 3 passes
- 5 wrong tries, then escalating lockouts
- We never see the password or the keys
- Argon2id
- AES-256-GCM
- Zero-knowledge
Technical detail
master = Argon2id(password, salt, m = 64 MiB, t = 3, p = 1)runs on the phone. HKDF-SHA256 with different labels derives an encryption key and a separate login verifier. Only the verifier and the AES-256-GCM blob are uploaded.- Lockouts per address: 15 minutes, 1 hour, 4 hours, 16 hours, then 24 hours.
- Lockouts do not stop offline guessing against a stolen blob. The app accepts only strong passwords: about 60 estimated bits, or six random words from the EFF list.
- Restore decrypts and signs in first, then writes. A wrong password, lockout or network drop leaves the phone untouched.
- The replacement phone's own Keystore key re-wraps the restored keys.
A public log anyone can check
Every key event goes into a public, hash-chained, double-signed log. A short proof confirms any single entry.
- Each entry cites the hash of its predecessor
- Signed with ML-DSA-65 and Ed25519
- Merkle inclusion proofs, as in RFC 6962
- Public keys and metadata only. No secrets
- Hash-chained
- Double-signed
- RFC 6962 proofs
Technical detail
- A forged key cannot hide. Its entry is permanently dated and signed, and every later entry must cite the correct hash.
- This is the Certificate Transparency design (RFC 6962), applied to identity keys.
- An inclusion proof carries O(log n) sibling hashes. The verifier rebuilds the signed root without reading other entries.
- Fetch the raw log at
/api/identity/transparency/logand re-derive every hash yourself.
If something goes wrong, here is what an attacker gets
The key opens only for your fingerprint, face or PIN.
15 s per check. Auto-lock 60 s after you leave the app.
Nothing in it can sign in as you.
AES-256-GCM, opened only by your strong recovery password.
ML-DSA-65 and ML-KEM-768 are NIST post-quantum standards.
StrongBox, TEE or software. The app shows which you have.
Post-quantum math from NIST, doubled up
Tokens and log entries carry two signatures: ML-DSA-65 and Ed25519. Forging one means breaking both.
- Every private key we store is wrapped with ML-KEM-768 + X25519
- One Durable Object per identity. No shared rows
- Standard OIDC: "Sign in with Alien Lights"
Technical detail
- Hybrid signatures cover both risks: ML-DSA-65 resists quantum attackers, while Ed25519 has decades of cryptanalysis behind it. Both sign the same bytes.
- Private keys at rest are wrapped by a fresh ML-KEM-768 + X25519 encapsulation against a rotatable root key, not one static secret.
- Server-held keys rotate monthly on each identity's signup anniversary, scheduled by that identity's own Durable Object alarm. Phone-held root keys rotate when you choose.
- The OIDC provider uses authorization code + PKCE. Tokens are ordinary JWTs with the ML-DSA-65 signature carried as an extension field.
- Verification works offline with a cached public key. Read-only key endpoints serve a short-lived cache during a database outage. Writes and OIDC
userinfofail closed.
Run real API calls on a test identity
Sign up, sign a message, verify offline, then audit the public log. Every call hits the production API.
How it compares
| Capability | Microsoft | LastWall | Alien Lights | |
|---|---|---|---|---|
| Hardware-bound, biometric key | ✓ | ✓ | ✓ | ✓ |
| Offline, on-device key generation by a public app | ✗ | ✗ | ◐ | ✓ |
| Post-quantum signature on that key | ✗ | ✗ | ✗ | ✓ |
| Post-quantum signed identity tokens | ✗ | ✗ | ✗ | ✓ |
| Zero-knowledge recovery | ◐ | ◐ | ✗ | ✓ |
| Public key log with inclusion proofs | ✗ | ✗ | ✗ | ✓ |
| Post-quantum key wrapping at rest | ✗ | ✗ | ✗ | ✓ |
| Works disconnected | ✗ | ◐ | ✓ | ✓ |
| Third-party audits, certifications | ✓ | ✓ | ✓ | ✗ |
Technical detail
- Google and Microsoft: passkeys are hardware-bound and biometric-gated with classical keys. Identity tokens are signed with the provider's own key. Recovery runs through the provider account.
- Microsoft: cached-credential domain login covers disconnected enterprise use.
- LastWall IDCommand: hardware-bound passkeys, PKI and PIV/CAC, and post-quantum key exchange. IDCommand Tactical targets disconnected and air-gapped use.
- Offline key generation: Google and Microsoft create signing keys server-side. LastWall provisions hardware-bound keys through managed enterprise and government deployments rather than a public self-serve app.
- Certifications: Microsoft FedRAMP High. LastWall Enterprise FedRAMP Moderate and DoD IL2. Google holds extensive audits.
Quick answers
What if I lose my phone?
Restore on another phone with your recovery password. Without that password, nobody can recover the backup, including us.
What if someone steals my phone?
The key opens only for your fingerprint, face or PIN, and the app locks 60 seconds after you leave.
Can Alien Lights read my mail or keys?
No. We keep your public key and an encrypted backup we cannot open.
Does it work on a real phone?
Yes. The installed app registered against live production on a Samsung Galaxy S25 FE, with the key wrapped in Knox Vault and a sign and verify round trip passing. Each phone reports its own protection level in Settings.
Is it quantum-safe?
It uses NIST post-quantum standards: ML-DSA-65 (FIPS 204) and ML-KEM-768 (FIPS 203).
Why no password?
Passwords get phished and leaked. Your phone signs a one-time challenge instead.
Who can check the log?
Anyone. It is public, and every hash and signature can be re-derived.
Read the whitepaper
Identity is created on the phone. The private key stays there.