.labyrinth file here or click to browseGPS coordinates rounded to chosen precision, combined with a random 16-byte geo-salt stored in the bundle, user-selected device fingerprint factors and timezone. The geo-salt means even perfect coordinate knowledge yields zero information without it.
Passphrase stretched with a random 256-bit PBKDF2 salt. 300k iterations resists GPU brute-force for years. Iteration count stored explicitly in bundle for future migration.
Password key and geo key concatenated and run through HKDF-SHA256 with domain separation. Neither factor alone can decrypt.
Filename, filesize and precision hashed and passed as AES-GCM Additional Authenticated Data. Any metadata modification is detected at decryption — even with the correct key.
AES-256-GCM, random 96-bit IV, 128-bit auth tag. Raw file buffer zeroed with fill(0) after encryption. Wrong password and wrong location produce identical generic rejection.
| Scenario | Status |
|---|---|
| Stolen ciphertext alone | ✓ Protected |
| Stolen password alone | ✓ Protected |
| File + password, wrong location | ✓ Protected |
| Offline coordinate brute-force | ✓ Geo-salt |
| Bundle metadata tampering | ✓ Detected (AAD) |
| Lock location read from file | ✓ Not stored |
.labyrinth bundle contains: encrypted ciphertext · PBKDF2 salt · AES IV · random geo-salt · filename · filesize · timestamp · precision setting · device binding factor IDs (not values) · versioned crypto parameters. No coordinates, no timezone, no raw fingerprint values. Opening the file in a text editor reveals nothing about where it was sealed.
| Factor | Stability | Changed By | Recommendation |
|---|---|---|---|
| User Agent | High | Major browser update | Always include |
| Language | Very High | Manual language change | Always include |
| Platform | Medium | OS reinstall, dual-boot | Optional |
| CPU Cores | High | Hardware change only | Optional (low entropy) |
| Screen Resolution | Low | Monitor, scaling, fullscreen | Avoid for critical files |