Transport encryption
TLS 1.3 with TLS 1.2 fallback. Perfect Forward Secrecy. HSTS with preload submission. No outdated ciphers, no SSLv3/TLSv1.0/1.1. CAA DNS records restrict certificate issuance to Let's Encrypt.
The Tirugo customer portal and infrastructure meet the security requirements of industrial B2B customers. This page documents our technical and organisational measures – transparent and verifiable.
We operate infrastructure exclusively in the EU and Switzerland. No US cloud hosting, no data transfers to unsafe third countries.
Multi-layer security – each layer protects independently, even when other layers fail.
TLS 1.3 with TLS 1.2 fallback. Perfect Forward Secrecy. HSTS with preload submission. No outdated ciphers, no SSLv3/TLSv1.0/1.1. CAA DNS records restrict certificate issuance to Let's Encrypt.
Argon2id with 64 MB memory cost, 3 iterations, 4 threads – the OWASP-recommended password hashing algorithm. Passwords are never stored in plaintext. On registration: breach check against HaveIBeenPwned via k-anonymity (the password itself is never transmitted).
Mandatory for all portal accounts. Time-based one-time passwords (TOTP per RFC 6238) – compatible with Google Authenticator, Microsoft Authenticator, Authy, 1Password, Bitwarden. Passkeys/WebAuthn as an alternative in preparation.
Opaque session tokens (stored server-side). HttpOnly, Secure, SameSite=Strict. Automatic logout after inactivity (15 min admin, 30 min customer, 12 h technician). Active sessions visible in the user profile, remote logout supported.
LUKS full-disk encryption (AES-256) on the Hetzner server. Documents additionally encrypted at the object store level (SSE-S3). Database backups encrypted with a separate key.
Row-level security at the PostgreSQL level – the database kernel filters access per role (customer, technician, admin). Additional application-layer checks (defense in depth). All IDs as UUID v7 – no enumeration attack possible.
Content Security Policy Level 3, Strict-Transport-Security with preload, restrictive Permissions-Policy, all OWASP secure headers active. Rating: securityheaders.com A+.
Multi-layer rate limits: per endpoint, per IP, per account. Cloudflare Turnstile against advanced bots. Crowdsec for collaborative threat detection. Account lockout after 5 failed attempts with exponential backoff.
Strict Pydantic schemas, no extra fields allowed. Parameterised SQL queries (asyncpg). Output encoding via Jinja2 auto-escape. File uploads: magic-bytes check instead of extension check, re-encoding via Pillow (EXIF strip), PDF sanitising via qpdf.
Security does not end with implementation. Continuous observation, logging, and recovery capability are essential.
Centralised logs via Loki and Grafana. Alerts on: failed logins (5+ in 5 min), unusual download volumes, new processes running as the service user, configuration changes to PostgreSQL or nginx. External uptime monitoring.
Every write action and document access is logged with: user ID, action, entity, timestamp, IP hash, user-agent hash, request ID. The log table is append-only (database trigger prevents UPDATE/DELETE). Plus a hash chain – each log event contains the SHA-256 hash of the previous one. Daily GPG-signed and archived offsite. Retention: 7 years per Swiss Code of Obligations.
Three copies of the data, on two different media, one of them offsite in Switzerland. Daily incremental PostgreSQL backups (WAL-E). Weekly full MinIO snapshots of documents. Monthly automated restore test. RPO 24 hours, RTO 4 hours.
Crowdsec on the host – open-source successor to Fail2ban with collaborative threat intelligence. Automatic blocking of known attacker IPs.
Automated security updates (unattended-upgrades) for OS and critical packages. Dependency scanning in CI (pip-audit, Safety). Monthly manual dependency review.
Only via WireGuard VPN on a separate management interface. No public SSH. SSH keys instead of passwords, no root login. Every administrative access is logged.
Code reviews mandatory (four-eyes principle). Static analysis in CI: Bandit, Semgrep with OWASP rules, Ruff. Automated tests before every deployment. Staging environment identical to production. Documented release process with rollback plan. Branch protection: signed commits, mandatory reviews on main.
Internal pen-tests before every major release (OWASP ZAP, Burp Suite Community). Annual external pen-test by a Swiss firm. Responsible Disclosure Policy published at /security-policy.html.
Documented incident response playbook. Data breach notification: reporting to FDPIC within 72 hours for notifiable incidents. Customer notification for relevant security incidents without delay. Post-mortem and lessons learned after every incident.
Current: OWASP ASVS Level 2 compliant (self-assessment).
In preparation: ISO 27001 certification (submission planned).
Evaluation: SOC 2 Type II reporting.
We support your IT audits and procurement processes with prepared documentation and direct communication.
Available on request:
Email: security@tirugo.ch
The Tirugo security seals visualise concrete technical and organisational measures. They are not external certificates but self-commitments to verifiable standards.
Swiss Data Protection Act 2023. Verifiable via Privacy Policy + ROPA.
Current transport encryption. Verifiable via ssllabs.com.
Stored encrypted. Verifiable via pen-test, internal documentation.
OWASP-compliant password hashing. Verifiable via pen-test + code review.
Second factor required. Verifiable via demo login + policy.
Application Security Verification Standard Level 2. Self-assessment, external audit optional.
Immutable log with hash chain. Verifiable via demo + code review.
In preparation. Processes follow ISO 27001 requirements; formal certification planned.
Email: security@tirugo.ch
Please follow our Responsible Disclosure Policy. Machine-readable: security.txt.
Book a meeting with the Tirugo security lead: email security@tirugo.ch.
We communicate openly about security matters. This list is updated quarterly.
| Notifiable data breaches since portal launch | 0 |
|---|---|
| Last external pen-test | Portal not yet public – pen-test planned after go-live |
| Open security advisories | 0 |
| Last audit log integrity check | Portal not yet live; hash-chain verification from go-live |
| Website uptime last 12 months | Real values from Trust Center launch – measured via external monitoring |
We communicate security incidents openly, even when they concern us. This transparency is part of our quality promise.