Threat model

Tinline is pre-release software without an independent security audit. It aims to protect content confidentiality from outsiders and relays and to make accepted authorship/receipt claims verifiable. It does not promise anonymity, availability or denial-of-service resistance.

Adversaries

The protocol is open, so peers may run modified clients. Treat contacts, group members, hosts, call participants, relays, network operators and strangers as potentially malicious within the keys and content they legitimately possess.

A device holding your account root secret is not cryptographically distinguishable from you. It can make new attestations, author content and sign receipts. Unlinking is not revocation.

Main checks

mechanism security purpose
Domain-separated canonical signatures Prevent a valid signed statement from being reinterpreted as another kind.
DID key recovered from the claim and compared with the expected party Reject forged and wrong-issuer account statements.
Account attestation equals the QUIC-authenticated endpoint Bind the claimed account device to the connection.
Message/call tokens checked against issuer, holder, time and local cut-offs Restrict direct-chat and calling capabilities.
Signed device lists and endpoint succession chains Bound callable devices and recognize rotation when the optional policy is enabled.
Scratch-import plus account-signed CRDT operation spans Reject forged, replayed or invalid message/group updates atomically.
Recipient-signed exact-version receipts Separate attributable delivery/read claims from unsigned transport ACKs.
Blob reference and relationship checks Refuse ciphertext that no authorized conversation or account device references.
Link secret, pair-bound proofs and confirmation code Detect scanners that do not share the in-person QR ceremony.

What is encrypted

Metadata

Tinline is not anonymous. Relays and discovery infrastructure can observe endpoint IDs, timing, traffic sizes and relay use. Direct peers learn network addresses. Contacts receive signed callable endpoint lists and can infer their size.

While locked, display name, DID and device public key remain readable for account selection. Directory names, record paths, activity days, file sizes and blob hashes also remain visible due to storage layout. Notifications, logs and exported plaintext are outside sealed stores.

What is not protected

Abuse and resource limits

Several boundaries are implemented: pending private handshakes are limited, first authentication steps time out, call/contact control frames are capped at 64 KiB, contact requests are capped at 64 and group-code attempts are rate-limited. Chat, own-device and group protocols currently permit frames up to 16 MiB; chat authentication now has a timeout, but a peer can still send a large frame before application authentication completes.

A contact-request inbox can be filled with throwaway identities. A blocked former contact can keep dialing an address it already knows; endpoint rotation is disabled by default in 0.1.38, so there is no automatic expiry for that knowledge. Public relay capacity is not controlled by Tinline. These limits reduce accidental or simple resource exhaustion; they do not support a denial-of-service-resistance claim.

Important semantic limits

Found something wrong? Report it on GitHub ↗