Last updated September 2026

Security

What Shoshita does with your data, described precisely enough to check. Cipher names, parameters, file paths, and every network call it makes.

Encryption

Every file holding your financial records is encrypted with Fernet, the standard recipe from Python’s cryptography library. Fernet is AES-128 in CBC mode, with a random initialization vector per file and an HMAC-SHA256 authentication tag over the result.

Being authenticated matters as much as being encrypted: the tag is checked before anything is decrypted, so a file that has been altered on disk is rejected rather than silently decoded into wrong numbers.

Your key is derived from your passphrase with PBKDF2-HMAC-SHA256 at 600,000 iterations, against a unique 16-byte random salt generated when you first set it up. OWASP’s current password-storage guidance puts the floor for PBKDF2-HMAC-SHA256 at 600,000, so this meets it.

Shoshita generates the passphrase for you. Five words drawn with a cryptographic random number generator from the EFF large wordlist, which holds 7,776 words. You cannot choose your own, which is what makes the number below mean something.

The key is never written to disk. It is derived from your passphrase when you unlock, held in memory for that session, and gone when the app closes. It is not stored and not cached to a file. Nothing on your disk contains it. There is no recovery path if you lose your passphrase, and that is a consequence of the same design, not an oversight.

Your passphrase itself is not stored either, not even as a hash. The app keeps a short fixed phrase encrypted under your key, and checks your passphrase by trying to decrypt it: a wrong passphrase fails to decrypt. That check phrase and the salt are held in security.dat, in the same folder as your encrypted files.

What this does not protect against

Your key comes from five words chosen at random from 7,776. That is 77765 possible passphrases, and the words are picked by the machine, not by you.

Anyone who copies your data folder has the salt, the iteration count and the encrypted check phrase from security.dat. That is everything needed to test guesses on their own machine, with the app out of the way. There is no lockout and no attempt limit, because someone working from a copy of the folder is not running the app. The 600,000 iterations set the price of a single guess. The size of the keyspace is what makes guessing impractical.

So the exposure is not the cipher. It is everywhere the passphrase itself can be found: a note in a file on the same disk, a screenshot, a password manager someone else can open, a keylogger, or you being asked for it. Shoshita cannot help with any of those.

While the app is unlocked, the key is in memory. Anyone at the keyboard of an unlocked session is already in your data.

Shoshita has not had an external security audit. Everything on this page is checkable against the behavior of the app, which is not the same as reviewed.

This protects your files from people who have access to them. Someone who uses your computer, a folder copied to a stick or another machine, a backup that syncs to cloud storage, a shared or family computer, a disk you passed on. In all of those, your records are unreadable without your passphrase. What it cannot do is protect you from losing the passphrase, or from someone who obtains it. There is no recovery, by design and without exception.

Where files live

Shoshita writes to two places, and they hold different things.

Your data folder (all financial records)

A folder you choose, always a dedicated shoshita_data directory the app owns. By default Documents\shoshita_data. It holds your transactions, categorization rules, budget limits, accounts and savings goals, each as an encrypted .csv. It also holds security.dat, which is the salt and the encrypted check phrase described above.

%LOCALAPPDATA%\Shoshita\ (licensing and config)

No financial data is stored here. This folder holds the path to your data folder, a marker recording that you accepted the license agreement, the trial clock, a locally generated device id, the port number the app is currently serving on, a debug log, and your rolling backups.

It also holds your activation record. That record does not contain your license key. It holds only the last eight characters, enough to show you which key is installed. It is not encrypted with your key, because it is read at startup before you have entered your passphrase.

Network

Shoshita makes an outbound request only when you press Activate. One function in the application does this and nothing else does. Every later launch checks your license by reading a local file, with no network access at all.

The request goes to Polar over HTTPS, with certificate verification against a bundled CA list. What it sends is listed on the privacy page. Your financial data is not part of it.

The app also opens local connections to itself. It runs a small web server on your own machine and displays it in a browser window. Those connections are to localhost and never leave the computer.

There is no other network code. The interface loads no remote fonts, scripts, images or stylesheets; everything it needs is compiled into the application.

No telemetry, no analytics, no automatic updates

There is no usage tracking, no analytics, no crash reporting and no update check. Shoshita does not update itself and never asks a server whether a new version exists. You find out from the changelog and install a new version yourself. Streamlit, the framework underneath, has its own usage statistics; Shoshita explicitly switches them off at launch.

The debug log

Shoshita keeps a plain-text log at %LOCALAPPDATA%\Shoshita\system_debug.log. It exists so a problem can be diagnosed from a bug report. Starting the app clears it and begins a fresh one, so it holds the current session rather than a running history. The exception is launching Shoshita while it is already running, which adds a line or two to the open log instead of wiping the session you are in the middle of.

It never contains transaction data: no amounts, dates, descriptions, categories or balances, and never your passphrase or your key. What it does contain is startup and shutdown messages, the local port number, and errors. Three entries are worth knowing about specifically:

  • If a bank statement import fails, the log records the bank you chose and the account name you typed, along with the technical error. An account name is whatever you called it, so it may identify you.
  • If an activation fails, the log records the last eight characters of the key you entered, never the whole key. The server's reply is not written to the log at all. What is recorded is the status code it came back with, and the names of the fields it contained.
  • Errors include file paths from inside the application. These are written against %LOCALAPPDATA% and %USERPROFILE% rather than spelled out, so your Windows account name is not part of them.

The file is yours. You can read it, and you can delete it. The app recreates it on the next launch. A Factory Reset clears it as well.

Backups

Every time you unlock, Shoshita zips the contents of your data folder into %LOCALAPPDATA%\Shoshita\Backups\ and keeps the five most recent. The files inside stay encrypted. A backup zip is no more readable than the originals, and needs the same passphrase. It also contains security.dat, so a copied backup carries the same limit as a copied data folder. Changing your passphrase deletes these backups, apart from one safety copy taken just before the change, which still opens with the old passphrase.

Backups run at unlock, and only at unlock. Anything you change during a session is not in a backup until the next time you unlock the app. If you have just done a large import or a lot of edits, the newest backup is from before that work. Use Manual Backup in the sidebar to take one on demand.

The installer is signed

Shoshita 1.4.0 is code-signed through Azure Trusted Signing with a public-trust certificate, and the signature is timestamped so it stays valid after the signing certificate expires. The subject on the certificate is Bruno Leone Cury.

You can check this yourself before running it: right-click the installer, choose Properties, and open the Digital Signatures tab. The download page also publishes the SHA256 of the exact file, so you can confirm a ~100 MB download arrived intact.

Questions

If something here does not match what you observe, that is worth reporting. Email support@shoshita.ca.