Outrigger outrigger App Store
❯ cat security.txt

Here is every piece of cryptography in the app.

Named, versioned, and traced to the RFC it comes from. Encryption protects your credentials and your sessions between your device and the servers you choose. The app operates no relay, no private network, and no SSH infrastructure of ours.

Describes Outrigger SSH 1.0.1; items marked 1.1 apply to version 1.1 and later · last updated 21 September 2026

Data flows and how each one is protected

flowendpointsprotection
Terminal sessionyour device ↔ the SSH server you choseSSH v2 · ECDH/X25519 key negotiation · AES‑GCM
Authenticationyour device → your SSH serverpassword inside the encrypted SSH channel, or an Ed25519 / ECDSA P‑256 signature
tmux commands (1.1)your device → the SSH server you choseadditional channels on the already-authenticated SSH connection · no new login · each command is listed on the privacy page
File transfer (1.2)your device ↔ the SSH server you choseSFTP on an additional channel of the already-authenticated SSH connection · no new login · only when you send or get a file
Local secretsnever leave the deviceiOS Keychain · P‑256 ECIES with SHA‑256 and AES‑GCM when the Secure Enclave is present
Optional ✦ assistyour device ↔ the AI provider you configuredHTTPS/TLS from the iOS stack · explicit consent before any context is sent · off by default
note No proprietary cryptography. Everything below is a published, recognized algorithm behind a published, recognized protocol.

The full inventory

purposealgorithmssize / hashimplementation
Session confidentiality + integrity[email protected], [email protected]256 or 128‑bit key · 128‑bit GCM tagSwiftNIO SSH / Swift Crypto
Key exchangecurve25519-sha256, [email protected]X25519 · SHA‑256SwiftNIO SSH / Swift Crypto
Key exchange (NIST)ecdh-sha2-nistp256/384/521P‑256/SHA‑256 · P‑384/SHA‑384 · P‑521/SHA‑512SwiftNIO SSH / CryptoKit
Server host keysssh-ed25519, ecdsa-sha2-nistp256/384/521Ed25519 · P‑256/P‑384/P‑521SwiftNIO SSH / CryptoKit
Client authenticationssh-ed25519, ecdsa-sha2-nistp256Ed25519 · P‑256CryptoKit — P‑256 can live entirely in the Secure Enclave
Host-key fingerprintSHA‑256256‑bitCryptoKit
Local secret wrappingECIES, cofactor variable‑IV X9.63P‑256 key · SHA‑256 · AES‑GCMSecurity.framework + Secure Enclave
Optional HTTPS (✦ assist)TLS, suites negotiated by iOSper Apple system policyURLSession / iOS TLS stack
standards

SSH v2 — RFC 4251 · 4253 · 4254
SFTP — draft-ietf-secsh-filexfer-02 (version 3, as OpenSSH)
AES-GCM for SSH — RFC 5647 + OpenSSH variants
ECDH for SSH — RFC 5656 · Curve25519 — RFC 8731
Ed25519 for SSH — RFC 8709 · ECDSA — RFC 5656
SHA-2 — FIPS 180-4 · AES — FIPS 197 · GCM — NIST SP 800-38D

Who implements it

None of the cryptography is ours. The SSH protocol, negotiation, and transport protection come from Apple's open-source SwiftNIO SSH (0.15.0) over SwiftNIO (2.102.0), with primitives from Swift Crypto (4.5.2) and the CryptoKit / Security.framework that ships with iOS. Terminal emulation is SwiftTerm (1.20.0), which has no cryptographic role. All of it is code you can read.

Remote terminal output is treated as untrusted input before it reaches the emulator: Outrigger removes remote image and clipboard control strings, bounds other operating-system controls, and does not advertise sixel support. This prevents a server from using unused graphics protocols for excessive memory allocation.

If a future version materially changes any algorithm or function on this page, the page and any required regulatory filings will change with it.

Keys and secrets

P-256 Keys created with the Secure Enclave option are generated inside the chip and are non-exportable. Using one requires the biometric authentication configured on the device, enforced by the Secure Enclave itself.
ed25519 Generated locally for servers that require them. The private bytes live in the Keychain, wrapped by a Secure Enclave P-256 key that requires user presence before it will unseal.
passwd Saved SSH passwords belong to individual hosts, stay on the device, and are presence-gated the same way. Deleting a host destroys its saved password.
api Optional assist API keys are Keychain items, Enclave-wrapped when the hardware allows. No secret is ever stored in the app's general database, and none is ever transmitted to us.
backup Keys, saved passwords, and API keys are Keychain items marked this-device-only: they do not migrate to another device through an iCloud or local backup restore. Keychain entries can outlive an app deletion, so Settings › Erase everything explicitly removes the secret items and their Enclave wrapping keys before an uninstall.

Host verification

On first contact with a server, Outrigger computes the SHA-256 fingerprint of the presented host key and stops the negotiation before any credential is sent. You approve that fingerprint explicitly or nothing happens. Every later connection requires an exact match; a changed key blocks the connection and puts a warning in front of you.

In version 1.1 and later, a lock in the title bar shows the connection details: the address actually connected to, the port, the transport, the verified host-key fingerprint, and the authentication method.

Verify it yourself

The app is closed source, but the promise on this page is about the network — and the network is observable no matter what the source says. You don't have to take our word for what leaves your phone. You can watch it, and what you watch is the running app, not a repository that may or may not match the binary.

The complete list of places Outrigger can ever send data:

hosts The SSH servers you configure, and only those. Connections — and the reachability checks that light up the dots on the host list — go straight from the device to your server.
assist Only if you turn on cloud assist: your chosen provider — Anthropic, or the OpenAI-compatible base URL you set — reached directly with your own key, and only while an assist request is running. The default on-device brain makes no network calls at all.
apple The one-time purchase runs through Apple's StoreKit, handled by iOS itself. Outrigger has no server of its own — there is no backend of ours for anything to be sent to, and no analytics SDK in the app.

Three ways to confirm that's all there is, easiest first:

report Turn on App Privacy Report (Settings › Privacy & Security › App Privacy Report). iOS logs every domain each app contacts — it's Apple's own instrumentation, not ours. Use the app for a while and check: you'll see your hosts, optionally your AI provider, and nothing else.
capture Route the phone through a Mac and run tcpdump or Wireshark, or point it at an intercepting proxy (Proxyman, Charles, mitmproxy). Destinations are visible without decrypting anything; install the proxy's certificate and you can read the optional assist request in full. SSH won't decrypt — it isn't TLS — but its destination is plainly your own server.
monitor Leave a DNS logger like NextDNS, or an on-device firewall, running over days of normal use. It records — or blocks — every outbound connection the app ever attempts.

Any of them shows the same short list: your servers, your AI provider if you opted in, and Apple system services such as StoreKit. There is no Outrigger backend, analytics endpoint, ad network, or account service.

© Paul Miller [email protected] home docs privacy security open source EOF