Skip to content

About

MasterSafe Authenticator

Resources

Security policy

Accessibility

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

MasterSafe Authenticator

A privacy-first, offline-first authenticator for TOTP/HOTP with an encrypted vault for passwords and files, targeting .NET 10 and running on Windows and Linux. Free for personal, non-commercial use (see License).

by Gabriel Vergara Ezcurdia

See the changelog for what changed in each version.

Features

Authenticator and passwords in one encrypted vault

  • TOTP / HOTP codes (RFC 6238 / RFC 4226; SHA-1, SHA-256, SHA-512; 6 or 8 digits) from an otpauth:// link or a QR code image (drag it onto the window, or choose the file). Search, sort, your own order, groups and rename on the codes page, and codes can stay hidden until you click them.
  • Password manager: folders with icons you choose, attached files (5 MB each), a recycle bin (30 days), entry history, a strength meter, a password generator, sorting, tags, shortcuts, right-click menus and drag and drop. Besides logins it keeps secure notes, payment cards, identities and extra fields, with letter icons and an optional website icon.
  • Password health: weak, reused and old passwords, possible copies, http:// addresses and expiry dates, plus an optional, privacy-preserving check against known data breaches.
  • Import from KeePass, KeePassXC, Bitwarden, 1Password, Proton Pass, Aegis, 2FAS and Google Authenticator with a preview before anything is added, and export to KeePass (.kdbx) so you can always leave.
  • Sync between your computers through a folder or WebDAV server of your own (optional): encrypted files only, locked with a random code, and nothing on a server is ever overwritten or deleted.
  • Encrypted backups of everything, and a printable emergency sheet.

Security

  • Available in English, Spanish and Finnish (follows your computer; see docs/Translating.md), with screen-reader names, keyboard access, text zoom and a high-contrast theme (docs/Accessibility.md).
  • Vault contents encrypted with AES-256-GCM; the master password is stretched with Argon2id (128 MiB by default, up to 512 MiB tuned to your computer); the header and key slots are authenticated; saves are atomic and keep a .bak copy.
  • Unlock with the master password, Windows Hello or a FIDO2 security key (tested with a Thales SafeNet key). Each method is a separate key slot, so changing the master password never re-encrypts the vault.
  • Sign-in pauses after repeated wrong passwords; the vault locks after inactivity, when Windows locks or sleeps, and optionally on minimize; locking wipes the key and decrypted data. Weak master passwords are refused.
  • Copied secrets are cleared from the clipboard (30 seconds, 1 or 2 minutes, your choice) and kept out of the Windows clipboard history and cloud clipboard; the window can be kept out of screenshots.
  • Security settings are kept inside the encrypted vault, one copy runs at a time, a vault on a network share is not opened until you agree, and an older copy of the vault is noticed.
  • Recovery: a recovery key and recovery backups (optionally automatic) let you get your data back if you forget the master password. Recovery backups use a hybrid ECDH-P384 + ML-KEM-768 (post-quantum) scheme.
  • Signed releases (ML-DSA-65) with checksums, a signed version manifest and an SBOM; a built-in update check verifies them before it offers a download. Nothing updates automatically.
  • Hostile-file hardening: sizes, key-derivation settings and counts of everything the app opens are limited and tested.
  • See the OWASP self-assessment, the threat model and SECURITY.md.

Everyday comfort

  • Encrypted .sauth backups to a local folder or a WebDAV server (Nextcloud, ownCloud; https only).
  • A Vaults page that shows where your files are, opens any vault file and keeps old vaults in an archive.
  • Reminders for the steps you have not done, a task-based in-app Help with search, a light/dark theme and a system tray icon. On Windows 11 a new tray icon starts under the ^ arrow; drag it onto the taskbar to keep it visible.

More to read: the article about MasterSafe Authenticator on the author's site, https://www.gabriel-vergara.com/articles/mastersafe-authenticator/.

Planned: opening .kdbx files directly, more than one security key per vault, hardware unlock (Hello, security keys) on Linux, and a mobile app. See docs/Roadmap.md, the known gaps in docs/ThreatModel.md and how MasterSafe compares with other apps.

Download and install

Author: Gabriel Vergara Ezcurdia. Article: MasterSafe Authenticator.

Releases are published at https://github.com/GabrielVergara/MasterSafeAuthenticator/releases.

System File How
Windows 10/11 (x64) MasterSafe-Authenticator-<version>-win-x64-setup.exe Run it. Installs for your user, no administrator needed
Linux x64 / arm64 MasterSafe-Authenticator-<version>-linux-<arch>.tar.gz tar xzf the file, then bash install.sh (installs to ~/.local; bash install.sh --uninstall removes it)

How to verify a download

Every installer and package comes with a .sha256 checksum file and an ML-DSA-65 signature (.sig), and the release page also has the project's public key (masterSafe-release.pub, also kept in signing/) and a small verification tool.

  1. Download everything from the release page into one folder: the installer or package, its .sha256 and .sig files, masterSafe-release.pub, and the tool for your system (MasterSafe-Cli-<version>-win-x64.exe or MasterSafe-Cli-<version>-linux-x64).
  2. Open a terminal in that folder and run:
.\MasterSafe-Cli-<version>-win-x64.exe verify-release . masterSafe-release.pub        # Windows
./MasterSafe-Cli-<version>-linux-x64 verify-release . masterSafe-release.pub          # Linux (chmod +x first)
  1. Every file must say OK ... signature valid, checksum ok, and the key fingerprint printed first must be:
SHA-256 fingerprint: 28ad8deb1624d6f04fe9100e25edb2666ad904e02824af14ef2fe6c8d2a74b8a

If any line says FAIL, do not install or run that file, and please report it (see SECURITY.md).

The tool cannot vouch for itself: a replaced tool could print anything. For the strongest check, build it from source (dotnet run --project src/MasterSafe.Cli -c Release -- verify-release <folder> signing/masterSafe-release.pub) and compare the fingerprint with the one printed here. Single files can also be checked with verify <file> <pubkey>, and a key with fingerprint <pubkey>.

Windows or Edge says the download is unsafe

Microsoft Edge and Windows SmartScreen judge downloads by reputation. MasterSafe Authenticator is new, has few downloads and its installer is not yet signed with a Windows code-signing (Authenticode) certificate, so it is shown as "not commonly downloaded". That is not a malware verdict. To install it:

  1. In Edge, open the download list, choose ... next to the file, then Keep, then Show more, then Keep anyway.
  2. When Windows shows Windows protected your PC, choose More info, then Run anyway.

Before running it, check that the file is genuine, as described in How to verify a download. If a check fails, do not run the file and please report it (see SECURITY.md). Windows code signing is on the roadmap; the warning fades as signed releases build reputation.

Your vault is stored in %LocalAppData%\MasterSafe\vault.sauth on Windows and ~/.local/share/MasterSafe/vault.sauth on Linux. Uninstalling never deletes it. docs/FileLocations.md lists every file the app creates and where.

Build and test

Requires the .NET 10 SDK.

dotnet restore MasterSafe.slnx
dotnet build MasterSafe.slnx -c Release
dotnet test MasterSafe.slnx -c Release
dotnet run --project src/MasterSafe.App          # start the app
bash scripts/check-vulnerabilities.sh            # fail if any package has a known vulnerability

On Windows the build targets net10.0-windows10.0.19041.0 (needed for Windows Hello). On other systems it targets net10.0. To build for Linux from any machine pass -p:MasterSafeTargetOs=linux.

Build the installers

Target Command Output (artifacts/)
Windows installer ./installer/build-windows.ps1 -Version 1.2.0 [-SigningKey key.file] (needs Inno Setup 6: winget install JRSoftware.InnoSetup) MasterSafe-Authenticator-<v>-win-x64-setup.exe + .sha256 (+ .sig)
Linux x64 bash installer/linux/build-linux.sh 1.2.0 linux-x64 MasterSafe-Authenticator-<v>-linux-x64.tar.gz + .sha256
Linux arm64 bash installer/linux/build-linux.sh 1.2.0 linux-arm64 MasterSafe-Authenticator-<v>-linux-arm64.tar.gz + .sha256

All packages are self-contained, so users do not need to install .NET. The Linux script also runs on Windows (Git Bash). Pushing a tag such as v1.2.0 runs .github/workflows/release.yml, which tests on both systems, builds, records a build attestation and creates a draft GitHub release. The workflow has no signing key: the maintainer signs and publishes offline with scripts/sign-release.ps1 (see docs/ReleaseProcess.md).

Release signing keys

dotnet run --project src/MasterSafe.Cli -c Release -- keygen masterSafe-release   # writes .pub and .key
dotnet run --project src/MasterSafe.Cli -c Release -- sign <file> masterSafe-release.key
dotnet run --project src/MasterSafe.Cli -c Release -- verify <file> masterSafe-release.pub

Keep the .key file private and offline: never commit it, and never put it in a GitHub secret or a cloud-synced folder.

Solution layout

MasterSafe.slnx
├─ src/MasterSafe.Core         # RFC6238 TOTP, RFC4226 HOTP, Base32, otpauth parser, account/password models
├─ src/MasterSafe.Crypto       # Argon2id, AES-256-GCM, vault format 3 with key slots, atomic file repository
├─ src/MasterSafe.PostQuantum  # ML-KEM-768, hybrid ECDH-P384+ML-KEM-768, ML-DSA-65 release signing
├─ src/MasterSafe.QR           # ZXing.Net + SkiaSharp QR decode/generate
├─ src/MasterSafe.Data         # EF Core SQLite persistence (not used by the app at present)
├─ src/MasterSafe.Backup       # Encrypted .sauth backups (password or recovery key), local + WebDAV
├─ src/MasterSafe.Platform     # System tray abstraction, Windows Hello and FIDO2 security-key unlock providers
├─ src/MasterSafe.App          # Avalonia 12 MVVM desktop UI
├─ src/MasterSafe.Cli          # Release tools: verify-release, verify, fingerprint, keygen, sign (also a demo)
├─ tests/MasterSafe.Tests      # Unit tests (RFC vectors, vault security, view models)
├─ installer/                  # Windows (Inno Setup) and Linux (tar.gz) packaging
└─ docs/                       # Architecture, security, threat model, formats

Security model (summary)

  • Vault contents are encrypted with a random 256-bit data key (AES-256-GCM).
  • The data key is wrapped once per unlock method: master password (Argon2id), Windows Hello and a FIDO2 security key.
  • Files read from disk or the network are treated as untrusted: Argon2 parameters, file sizes and decompressed sizes are limited before use.
  • Secrets are never written to disk in plaintext. No software is unbreakable; read the threat model for what is and is not protected.

See docs/Security.md, docs/ThreatModel.md, docs/OwaspChecklist.md, docs/FileLocations.md, docs/Architecture.md, docs/BackupFormat.md, docs/PQC.md, docs/Roadmap.md, docs/Documentation.md, docs/Comparison.md, docs/SecurityReview.md and docs/SBOM.md.

Patching and compliance

Every build checks all packages against the NuGet advisory database and fails if one has a known vulnerability. CI repeats the check on Windows and Linux, weekly scans catch new advisories, Dependabot opens update pull requests, and release builds bundle the newest patched .NET runtime. The self-assessment against the OWASP ASVS is in docs/OwaspChecklist.md; it is a self-assessment, not a certification.

Packages

Package Purpose
Konscious.Security.Cryptography.Argon2 Argon2id KDF
ZXing.Net + SkiaSharp QR decode/generate
Microsoft.EntityFrameworkCore.Sqlite + SQLitePCLRaw Persistence library
Avalonia 12 + CommunityToolkit.Mvvm Desktop UI
xunit / FluentAssertions / Moq / coverlet Testing

Post-quantum algorithms (ML-KEM, ML-DSA) come from .NET 10 and the operating system's cryptography provider. The Windows WebAuthn (FIDO2) bindings are generated at build time by Microsoft.Windows.CsWin32 (Windows builds only).

Reporting a security problem

Please use the repository's Security tab on GitHub (Report a vulnerability) instead of a public issue.

License

MasterSafe Authenticator is freeware for personal, non-commercial use. See LICENSE. The source is available for review and personal use; commercial use and distribution of modified versions are not permitted. Third-party components keep their own licenses; see THIRD-PARTY-NOTICES.md.

Copyright (c) 2026 Gabriel Vergara Ezcurdia.

About

MasterSafe Authenticator

Resources

Security policy

Accessibility

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages