鍵 · Security
How your journal stays yours.
A journal sets a simple bar: nobody but you should be able to read it, including whoever runs the server. This page says how Tekkoh meets that bar, and, just as plainly, where it falls short.
What we promise
- The server can't read your journal. Your words, photos, captions, places, activity and sun times are all encrypted on your phone before they're sent. The server, its database and its backups hold only ciphertext.
- Only your devices hold the key. It lives in your iPhone's Keychain and iCloud Keychain, and never reaches the server in a form it can use.
- Your six-digit PIN brings the journal back on a new phone. Nobody watching the network, and nobody holding a copy of the database alone, can test PINs. The server allows ten wrong tries, each slower than the last, then destroys its copy of your recovery. This promise is weaker than the others; see below.
- No other account can read or change yours.
How
- Every page is encrypted with its own random key using AES-256-GCM, and that key is encrypted with your journal's key. Photos are encrypted the same way, each with its own key.
- A page's id is derived from your key and its date, so the server can't tell which day a page belongs to.
- A version number inside the encryption means the server can't hand back an older copy of a page as if it were current.
- Your PIN is stretched with 600,000 rounds of PBKDF2 on your phone. What travels to the server is encrypted to the server's own key, so nothing in transit can be used to test PINs.
- The whole journal is kept on your phone, encrypted exactly as the server holds it. Nothing is ever written to disk in the clear.
- A linked browser gets the key from your phone, encrypted so only that browser can open it, and holds it in a form even the page's own code can't read out. You can sign any browser out from your phone.
Agents
A personal agent can use your journal through the tekkoh command-line tool, ideally in a confidential VM you control. It reads, adds to your pages, and leaves a note in the margin saying what it did for you.
- You approve it on your phone. The agent sends you a one-time link. On your iPhone it opens Tekkoh, which shows the agent's name and six digits and asks for Face ID. The app then sends the key encrypted so only that agent can open it. No PIN is typed anywhere.
- The link holds nothing secret, and this site never sees it: everything is after the
#. It works once, for fifteen minutes. - Only approve a link you asked for just now. Anyone can send you one, and the name in it is the sender's own say-so. Approving gives whoever made it the key to your whole journal.
- An agent is as trusted as your phone. It holds the key itself, so it can read everything, and signing it out stops only an agent that plays fair. Link only one you'd trust with everything you've written.
Where it stops
- A six-digit PIN has limits. Someone who held both the server's database and its secret key could try all million PINs offline, in minutes to hours. The attempt limit protects you against everyone else. A longer recovery phrase would close this gap.
- The app you run is the root of trust. A build that sent your key elsewhere would undo all of this, and iOS gives no way to check an App Store build against its source.
- The server sees some metadata: your username, when you sync and from which IP address, and how many pages and photos you have and their sizes. Because a page is usually first uploaded on its own day, upload times show roughly which days you wrote.
- Someone else can wipe your PIN recovery by guessing wrong ten times at your username. Your journal is unaffected, and the app asks you to choose a new PIN.
- Apple is involved in two places. Your devices share the key through iCloud Keychain, which Apple encrypts end to end. Place names come from Apple Maps, so the coordinates of places you visit go to Apple (not to Tekkoh) to be named.
- A web page comes from its server on every visit, so the browser version is only as trustworthy as whoever serves it. That's true of every web-based end-to-end encrypted product, and it's why the app is the safer place to write.
- Your phone, once unlocked, is readable to anyone holding it and to malware on it. The Face ID lock hides your pages from someone who picks it up, but adds no encryption.
- No formal proof or outside audit yet. One independent review has been done. Its findings were fixed or mitigated, except the PIN limit above, which is open by design. A cryptographer should look at it before anyone trusts it with something that truly matters.
Read the code
Tekkoh is open source under the MIT license, so you don't have to take any of this on trust. The iPhone app is at arfct/tekkoh-ios, with the full security notes in its SECURITY.md. The server, the web version and the tekkoh tool for agents are at arfct/tekkoh, and this site at arfct/tekkoh.com.