Skip to main content

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 5694 or HTTPS port 443 for layered security

TagoTiP(s) supported ports

US-East-1:

TransportHostPortTLSNotes
UDPudp.tip.us-e1.tago.io5684NoDedicated port
TCPtcp.tip.us-e1.tago.io5693NoAuto-detected
TCPtcp.tip.us-e1.tago.io5694YesAuto-detected
HTTPhttp.tip.us-e1.tago.io80NoPOST /v1/tips
HTTPhttp.tip.us-e1.tago.io443YesPOST /v1/tips

See Endpoints for all regions.

How it differs from TagoTiP

TagoTiPTagoTiP(s)
FormatHuman-readable textBinary envelope
Auth credentialToken hash (16 hex chars)Authorization token (at...)
EncryptionNone (rely on TLS)AEAD at the application layer
Replay protectionOptional sequence counterBuilt-in (counter is nonce component)

Credentials

TagoTiP and TagoTiP(s) use different credentials from the same authorization:

ProtocolCredentialWhy
TagoTiPToken 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

IDCipherKeyTagOverhead
0AES-128-CCM128-bit8 B29 bytes
1AES-128-GCM128-bit16 B37 bytes
2AES-256-CCM256-bit8 B29 bytes
3AES-256-GCM256-bit16 B37 bytes
4ChaCha20-Poly1305256-bit16 B37 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

FormatSizevs. HTTP/JSON
HTTP + JSON~487 bytes-
TagoTiP~112 bytes4.3x smaller
TagoTiP(s)~119 bytes4.1x smaller

Specification

For envelope parsing, nonce construction, ABNF grammar, and test vectors, see the TagoTiP(s) Specification.