TagoTiP(s) - Encrypted Communication
AEAD authenticated encryption for your IoT data - without TLS. TagoTiP(s) wraps frames in a compact binary envelope with built-in integrity verification and replay protection. As little as 29 bytes of overhead.
When to use TagoTiP(s)
- No TLS available - UDP has no TLS support; TagoTiP(s) is your only encryption option
- Constrained links - where TLS handshakes are too expensive
- Defense in depth - combine TagoTiP(s) with TLS on TCP port
5694or HTTPS port443for layered security
TagoTiP(s) supported ports
US-East-1:
| Transport | Host | Port | TLS | Notes |
|---|---|---|---|---|
| UDP | udp.tip.us-e1.tago.io | 5684 | No | Dedicated port |
| TCP | tcp.tip.us-e1.tago.io | 5693 | No | Auto-detected |
| TCP | tcp.tip.us-e1.tago.io | 5694 | Yes | Auto-detected |
| HTTP | http.tip.us-e1.tago.io | 80 | No | POST /v1/tips |
| HTTP | http.tip.us-e1.tago.io | 443 | Yes | POST /v1/tips |
See Endpoints for all regions.
How it differs from TagoTiP
| TagoTiP | TagoTiP(s) | |
|---|---|---|
| Format | Human-readable text | Binary envelope |
| Auth credential | Token hash (16 hex chars) | Authorization token (at...) |
| Encryption | None (rely on TLS) | AEAD at the application layer |
| Replay protection | Optional sequence counter | Built-in (counter is nonce component) |
Credentials
TagoTiP and TagoTiP(s) use different credentials from the same authorization:
| Protocol | Credential | Why |
|---|---|---|
| TagoTiP | Token hash (4deedd7bab8817ec) | Identifies your account. Safe on the wire. |
| TagoTiP(s) | Authorization token (ate2bd...c0d0) | Derives the encryption key. Never sent on the wire. |
Both come from a single authorization with token format TagoTiP(s). See the Authorization guide.
How it works
TagoTiP(s) strips the method and auth from a TagoTiP frame, encrypts the rest, and wraps it in a fixed-structure binary envelope:
[Flags 1B] [Counter 4B] [Auth Hash 8B] [Device Hash 8B] [Ciphertext + Tag]
cipher nonce profile device encrypted payload
method component identifier identifier
version
Total overhead: 29 bytes (AES-128-CCM) to 37 bytes (GCM / ChaCha20-Poly1305).
Cipher suites
| ID | Cipher | Key | Tag | Overhead |
|---|---|---|---|---|
| 0 | AES-128-CCM | 128-bit | 8 B | 29 bytes |
| 1 | AES-128-GCM | 128-bit | 16 B | 37 bytes |
| 2 | AES-256-CCM | 256-bit | 8 B | 29 bytes |
| 3 | AES-256-GCM | 256-bit | 16 B | 37 bytes |
| 4 | ChaCha20-Poly1305 | 256-bit | 16 B | 37 bytes |
AES-128-CCM (ID 0) is required by all implementations.
Key derivation
The encryption key is derived from your authorization token and device serial:
HMAC-SHA256(key = token_hex_without_at_prefix, msg = device_serial)
Truncated to the cipher's key size (16 bytes for AES-128, 32 bytes for AES-256 / ChaCha20).
Size comparison
| Format | Size | vs. HTTP/JSON |
|---|---|---|
| HTTP + JSON | ~487 bytes | - |
| TagoTiP | ~112 bytes | 4.3x smaller |
| TagoTiP(s) | ~119 bytes | 4.1x smaller |
Specification
For envelope parsing, nonce construction, ABNF grammar, and test vectors, see the TagoTiP(s) Specification.