Security architecture
What is protected—and what is not
Poftim creates an authenticated, temporary connection between two browsers. File contents and metadata are encrypted before entering the WebRTC transport. The service has not yet had an independent security audit, so this page documents the design and its limits rather than presenting an audit badge.
Summary
The short version
- File contentsEncrypted end to end
- File names, types and declared sizesEncrypted
- Session keysDerived on the devices
- Peer authenticationQR secret + matching phrase
- Direct transportPreferred when available
- Relay transportEncrypted and not stored
- Independent assessmentNot completed
Threat model
The boundary of the promise
Designed to protect against
A signalling server or relay reading or changing file contents; a passive network observer reading transferred files; replayed or reordered encrypted frames; and a third device joining an already-claimed session.
Outside the protection
A compromised device, browser, extension or page; a recipient who saves or redistributes a file; traffic analysis; unsafe files accepted from another person; and denial-of-service or availability failures.
The matching phrase helps detect a connection that does not derive the same session keys. Compare it on both screens before continuing.
Pairing and keys
Fresh keys for every connection
File protection
Encrypted before transport
AES-256-GCM seals every control message and file chunk with a monotonic counter. The receiver rejects repeated frames, enforces file-chunk order and verifies an end-to-end SHA-256 digest before reporting a file as received.
Visible metadata
Encryption does not hide the connection itself
- File contentsNot received in readable form
- File names and typesEncrypted
- Encryption keysNot sent to the server
- Opaque session identifier and roleSeen by signalling
- IP addressesProcessed by connection infrastructure
- Connection timing and approximate volumeObservable
- Transfer historyNot created by the application
Direct peers may learn each other’s network address. “Hide my network address” forces TURN relay transport so the peer does not receive a direct route, but the relay infrastructure still processes both addresses.
Important limitation
The browser must trust the delivered page
The QR fragment is not sent in the HTTP request, but JavaScript running on the page can read it. A compromised deployment, browser or extension could read pairing material, session keys or plaintext files.
The deployed page uses a restrictive Content Security Policy, no third-party scripts, no advertising or analytics code, same-origin resources, HTTPS with HSTS, framing protection and a no-referrer policy. These controls reduce exposure; they do not remove the need to trust the code delivered by poftim.app.
Sessions and infrastructure
Short-lived and deliberately sparse
Browser compatibility
Current browsers, with practical differences
Poftim requires WebRTC data channels, Web Crypto support for ECDH P-256, HKDF and AES-GCM, JavaScript modules and Blob downloads.
It is designed for current Safari on iPhone and macOS, current Chromium browsers on Android, Windows, macOS and Linux, and current Firefox. Large-file saving, background suspension and memory behaviour differ between platforms.
A formal version-by-version browser and maximum-file test matrix has not yet been completed. Until it is, keep both pages open and screens awake, and avoid treating a particular maximum size as guaranteed.
Assessment and disclosure
Evidence, not badges
No independent security assessment has been completed or claimed. When one exists, this page will identify the assessor, date, scope, findings and remediation status.
If you find a vulnerability, read the vulnerability disclosure policy and use the security report form.