Security

JotBunker secures sync with transport encryption, a pairing secret, and a LAN-only firewall rule. This page covers each of those and the honest limits.

Transport encryption

All sync traffic between phone and computer is encrypted with NaCl after an X25519 key exchange. Each connection generates fresh ephemeral keys; no long-lived keys are stored. The shared secret only exists for the lifetime of the connection. See Sync Protocol for wire-level details.

Pairing secret

The pairing secret is a random UUID created during the setup wizard. It is the only authentication factor for sync. Every handshake includes the secret, validated with a timing-safe comparison. The secret is sent only inside the encrypted channel, never in the clear.

Storage. The pairing secret is stored as plain text on both devices (on the phone in the app's private sandbox, on the computer in a JSON file). It is not protected by the OS keychain. On a jailbroken phone or a shared Windows account, the secret is readable from disk.

App lock

When enabled, the phone app requires biometric authentication or your device passcode when it resumes from the background. This is a UI gate; it does not encrypt or decrypt anything.

Locked lists

The Locked Lists tab on the phone requires biometric authentication or device credentials before showing. On the computer, locked lists are not gated; the assumption is your computer is already a secured environment. The data is stored as plain text on disk on both devices, the same as regular lists. The biometric prompt is a UI barrier, not a cryptographic one. See Locked Lists.

Backup encryption

Computer backups can be encrypted with a password you choose using AES-GCM with PBKDF2 key derivation. Plaintext backups are also available. See Backup & Restore.

What is NOT encrypted at rest

Network exposure (Windows Firewall)

JotBunker needs a Windows Firewall inbound rule so the phone can reach the sync server over your local network. The installer creates a rule with these properties:

The result: the rule allows a path from devices on your local network to JotBunker, not from the internet. Your phone, your other computers, and VPN peers on a shared subnet can reach the server. A random IP from the internet cannot.

Verify your installed rule

In any command prompt (no admin required to view):

netsh advfirewall firewall show rule name="Jotbunker" verbose

Expected output:

Rule Name:     Jotbunker
Enabled:       Yes
Direction:     In
Profiles:      Domain,Private,Public
LocalIP:       Any
RemoteIP:      LocalSubnet
Protocol:      TCP
LocalPort:     Any
RemotePort:    Any
Program:       C:\Program Files\Jotbunker\Jotbunker.exe
Action:        Allow

If your output matches, you have the recommended default. A few common deviations:

To clean up any leftover Block rules (they silently override the Allow rule), run elevated. Warning: this deletes the rule; you will then need to reinstall JotBunker or recreate the rule manually for sync to keep working:

Get-NetFirewallRule -DisplayName "Jotbunker*" | Where-Object { $_.Action -eq 'Block' } | Remove-NetFirewallRule

Want to lock it down further

Even with LocalSubnet scoping, the default rule allows any device on your current subnet to reach JotBunker. The honest threat model is "another device on my local network got compromised and is poking around". The pairing secret and NaCl encryption protect against unauthorized pairing in those scenarios. If subnet-wide exposure is too loose for your taste, you can narrow it:

None of the tiers is required for normal use. The default is appropriately scoped for the home-network case.

Threat model

JotBunker protects against:

JotBunker does NOT protect against:

See also: Pairing | Sync Protocol | Backup & Restore | Data Storage