Security
Security is not a feature.
It's the foundation.
Every layer of Rabtly is designed with security as the starting point, not a checkbox. Here is exactly what we do and why.
01
WireGuard Transport
- ChaCha20-Poly1305 authenticated encryption — 256-bit keys
- Curve25519 Elliptic-Curve Diffie-Hellman key exchange
- BLAKE2s for hashing, SipHash for hashtable keys
- Minimal ~4,000-line codebase — smaller attack surface than any alternative
- Formally verified cryptographic primitives (Noise protocol framework)
02
Zero Trust Model
- No implicit trust between nodes — every packet is authenticated
- ACL policy engine: each connection is evaluated against explicit rules
- Nodes only see peers they are permitted to reach
- JWT-authenticated dashboard — short-lived tokens, no session storage on server
- Enrollment tokens required for node registration (configurable)
03
Key Management
- WireGuard private keys are generated on the device and never transmitted
- Only public keys are sent to the control plane
- Dashboard passwords hashed with bcrypt (cost factor 12)
- OAuth sign-in (Google, GitHub) — passwords never created or stored for OAuth users
- JWT secrets are rotated on each server restart if not pinned via env var
04
Infrastructure Hardening
- All traffic encrypted in transit via TLS 1.2+ (HTTPS and WireGuard)
- PostgreSQL queries use parameterized statements throughout — no SQL injection surface
- Rate limiting on all public endpoints (registration, heartbeat, login)
- Audit log of every sensitive action: login, ACL change, node join/leave, member invite
- Stripe webhook signatures verified — replay attacks rejected
- Docker images built from minimal Alpine base with no shell in production
Responsible Disclosure
If you discover a security vulnerability in Rabtly, please report it privately before public disclosure. We aim to respond within 48 hours and resolve critical issues within 7 days. We are grateful for responsible researchers.
security@rabtly.cloud