NovaKey is a secure, post-quantum–protected secret injection system. Secrets live only on your iPhone and are transmitted to your computer on demand using mutual authentication, replay protection, and modern cryptography.
This guide covers:
- Installing the NovaKey daemon on Linux, Windows, and MacOS
- Pairing the iOS app with a computer
- Adding secrets and listeners
- Sending secrets securely
- Vault import/export and clipboard behavior
NovaKey-iOS is open source so users and security reviewers can audit all security-relevant behavior.
The official NovaKey app distributed on the Apple App Store is the supported build. Forks may exist, but are not endorsed or supported.
Security does not rely on obscurity.
-
NovaKey iOS App
- Stores secrets in the iOS Keychain
- Requires Face ID / passcode to copy or send
- Never displays secrets after saving
-
NovaKey-Daemon
- Runs locally on your computer
- Accepts secrets only from paired devices
- Can require explicit approval (“Two-Man Mode”)
- Injects secrets directly into the active application
- Windows 10 & Windows 11
- iOS 17+
- macOS 14+ (for Mac Catalyst / macOS)
- Linux
- RHEL based distros
- Debian based distros
- Any system with:
systemdglibc- Root access
The NovaKey-Daemon includes a build script and a hardened installer script for each platform (Windows, Linux, Darwin).
Ensure the novakey-<distro>-<architecture> binary is present in the current directory.
Windows build the executable
# By default scripts downloaded from the internet are blocked
Unblock-File .\build.ps1
# Default execution policy on computers is "Restricted" which will prevent running scripts
Set-ExecutionPolicy RemoteSigned
.\build.ps1 -Target Windows
# Creates dist\novakey-windows-amd64.exeBuild the binary on Linux or macOS.
Note macOS typically requires you to do builds on their operating system in order to work correctly.
Linux Build the novakey-darwin-amd64 binary
# On Linux
./build.sh -t linux
# Creates dist/novakey-linux-amd64macOS Build the novakey-darwin-amd64 binary
# On macOS
./build.sh -t darwin
# Creates dist/novakey-darwin-amd64Install on Windows
# By default scripts downloaded from the internet are blocked
Unblock-File .\Installers\install-windows.ps1
# Default execution policy on computers is "Restricted" which will prevent running scripts
Set-ExecutionPolicy RemoteSigned
.\Installers\install-windows.ps1Install on Linux
sudo bash Installers/install-linux.shInstall on macOS
sudo bash Installers/install-macos.shsystemctl status novakey --userYou should see the service running.
Pairing establishes mutual trust between your phone and computer. This only needs to be done once per device.
-
Open NovaKey
-
Tap the Listeners icon (antenna)
-
Under Add Listener:
- Name: Friendly name (e.g. “Linux Desktop”)
- Host or IP: Computer’s IP or hostname
- Port:
60768(default) - (Optional) Notes
-
Enable Make Send Target if this is your main machine
-
Tap Add
⚠️ You must have a Send Target selected to pair or send secrets.
-
On your computer, start pairing in the daemon (when the file devices.json does not exist, running the novakey service will display a QR code. If devices.json already exists it will not)
-
In NovaKey:
- Open Listeners
- Tap the listener
- Choose Pair
- Tap Scan QR Code
-
Scan the QR shown on the computer
NovaKey will:
- Fetch the full pairing blob securely
- Validate the server identity
- Store pairing keys in the iOS Keychain
- Finalize pairing with the daemon
You’ll see “Paired” once complete.
If you cannot scan a QR code:
-
Copy the
devices.jsonJSON file contents that was generated by the daemon -
In NovaKey:
- Listeners → Pair
- Paste the JSON into the editor
- Tap Save
For security reasons:
- The pairing keys are bound to a specific server address
- Changing the IP would allow silent redirection attacks
- If the server address changes, create a new listener and re-pair
You can edit:
- Display name
- Notes
-
Tap +
-
Enter:
- Label (e.g. “Email Password”)
- Secret
- Confirm Secret
-
Tap Save
- Secrets are never displayed again
- Stored only in the iOS Keychain
- Access always requires Face ID / passcode
-
Tap a secret
-
Choose Send
-
NovaKey will:
- Authenticate you
- Verify pairing
- Optionally request approval on the computer
- Inject the secret
If no Send Target exists, sending is blocked.
When copying a secret:
-
Clipboard is local-only (no Universal Clipboard)
-
Auto-clear timer is configurable:
- Never
- 15s / 30s / 60s / 2m / 5m
-
Clipboard is cleared when the app backgrounds (unless disabled)
You can always tap Clear Clipboard Now.
NovaKey supports encrypted vault backups.
-
Settings → Export Vault
-
Choose:
-
Protection:
NoneorPassword -
Cipher:
- AES-256-GCM
- ChaCha20-Poly1305
-
-
(Optional) Require Face ID for each secret
-
Save the file
Vaults are exported as JSON.
- Settings → Import Vault
- Select a vault file
- Enter password if required
Import behavior:
- Existing secrets are updated
- New secrets are added
- Keychain entries are overwritten securely
Run:
⌘Uin Xcode, orxcodebuild test -scheme NovaKey -destination 'platform=iOS Simulator,name=iPhone 15'
Security-critical paths are covered by:
PairQRDecodeTestsPairingManagerTestsClientStatusTestsClipboardManagerTests
- Post-quantum key exchange (Kyber768 / ML-KEM)
- Authenticated encryption (AES-GCM or ChaCha20-Poly1305)
- Replay protection and freshness checks
- Per-device rate limiting
- Optional Two-Man Mode
- Process whitelisting supported on the daemon
Nothing types
- On Linux: Wayland may block injection
- On macOS: Accessibility permissions required
Not paired
- Listeners → Re-pair
Send blocked
- No Send Target selected
- Daemon not armed
- Two-Man approval required
NovaKey-iOS is organized to keep all security-relevant behavior explicit and auditable.
- Cryptography, protocol handling, and vault logic live in the main app target and are fully open source.
- UI code does not implement security decisions.
- No behavior relies on obscurity or undocumented fallbacks.
The project is intentionally kept in a single Xcode app target to simplify review, testing, and App Store distribution.
NovaKey is intentionally opinionated:
- Secrets never leak
- Pairings are explicit
- No silent fallbacks
- No cloud dependency
If something feels “locked down,” that’s by design.