OTS - One-Time-Secret Sharing Platform
Plataforma open source de intercambio de secretos con cifrado AES-256 en el navegador
¿Qué es OTS?
OTS (One-Time-Secret) es una plataforma open source desarrollada por Luzifer Knut Ahlers para compartir secretos de forma segura. Los datos se cifran con AES-256 simétrico en el navegador del cliente antes de ser transmitidos al servidor, garantizando que la infraestructura backend nunca pueda acceder al contenido descifrado.
Última versión estable: v1.22.0 (27 sep 2026) | Releases oficiales
La plataforma genera automáticamente una URL única que contiene el ID del secreto y la contraseña de acceso, permitiendo compartir información sensible sin exponerla en tránsito.
Arquitectura y Seguridad
- Cifrado: AES-256 simétrico en el navegador (client-side encryption) - los secretos se cifran antes de salir del cliente
- Almacenamiento: Memoria RAM o Redis/Valkey para persistencia configurable
- Protocolo: HTTP/HTTPS con soporte completo para proxy inverso (nginx, caddy)
- Licencia: Apache-2.0 - permite uso comercial y modificación
- Lenguaje: Go (Golang) - compilado estáticamente o dinámicamente
- Frontend: Vue.js 3 con componentes reactivos optimizados
Características Principales
- Cifrado en el navegador antes del envío al servidor - privacidad garantizada
- Secretos con ID único y contraseña de acceso generada automáticamente
- Expiración configurable de secretos (por defecto: 168 horas / 7 días)
- Soporte para personalización vía YAML (--customize=path/to/customize.yaml)
- Interfaz web autocontenida con logo y branding personalizado
- API REST para creación de secretos (/api/create) con autenticación opcional
- CLI oficial: ots-cli para automatización y scripting
- Soporte multilenguaje con i18n (v1.22.0 incluye vue-i18n v11.4.12)
Casos de Uso
- Compartir credenciales: contraseñas, tokens API, claves SSH entre equipos
- Datos sensibles: información médica, financiera, legal confidencial
- Documentación confidencial: manuales internos, especificaciones técnicas
- Comercio electrónico: compartir datos de pago temporalmente con clientes
- Desarrollo: compartir credenciales de entorno entre equipos DevOps
- Soporte técnico: enviar información sensible a usuarios sin riesgo
Instalación y Despliegue
Docker Compose (Recomendado para Producción)
version: '3.8'
services:
ots-app:
image: ghcr.io/luzifer/ots:v1.22.0
restart: always
environment:
- REDIS_URL=redis://valkey:6379/0
- SECRET_EXPIRY="604800"
- STORAGE_TYPE=redis
depends_on:
- valkey
ports:
- "3000:3000"
valkey:
image: docker.io/valkey/valkey:9.1.2-alpine
restart: always
volumes:
- ./data:/data
Despliegue Nativo con Go
Requisitos: Node.js LTS y Go instalado localmente (Go 1.21+ recomendado).
# Construcción local dinámica
make build-local
# O estáticamente para despliegues sin dependencias:
CGO_ENABLED=0 make build-local
Para producción, usar compilación estática con CGO_ENABLED=0 reduce el tamaño del binario y elimina dependencias de librerías C.
Configuración Detallada
| Variable | Descripción | Valor por defecto |
|---|---|---|
| REDIS_URL | Conexión a Redis/Valkey para persistencia | redis://default:password@host:6379/0 |
| SECRET_EXPIRY | Expiración en segundos (0 = indefinida) | 604800 (168h / 1 semana) |
| STORAGE_TYPE | método de almacenamiento | redis o mem |
| CUSTOMIZE | Ruta al archivo YAML de personalización | /etc/ots/customize.yaml |
| LISTEN | Interfaz y puerto de escucha | 0.0.0.0:3000 |
Personalización Avanzada
---
appLogo: 'applogo.png'
overlayFSPath: '/etc/ots/assets'
customize:
- name: "Custom Theme"
value: "theme-dark.css"
Opciones disponibles en la Wiki oficial incluyen branding completo, temas CSS y configuración de API.
Consideraciones de Seguridad
- HTTPS obligatorio: Configurar proxy inverso (nginx) con Let's Encrypt para cifrado en tránsito
- Credenciales API: Autenticación básica en /api/create (--instance -u usuario:password)
- Secretos de Redis: Usar credenciales seguras y ACLs modernos (Redis v6+)
- Expiración automática: Configurar SECRET_EXPIRY para limitar ventana de acceso
- CORS: Configurar headers CORS adecuados en proxy inverso
Backup y Persistencia
Montar volumen en Redis: ./data:/data. Para producción, considerar snapshots periódicos del volumen de datos con herramientas como rsync o scripts personalizados.
# Snapshot manual de persistencia
tar -czf backup-ots-$(date +%Y%m%d).tar.gz ./data/
OTS-CLI Oficial
# Crear secreto con autenticación
ots-cli create --instance https://ots.fyi -u myuser:mypass "mi secreto aquí"
# Listar secretos activos
ots-cli list --instance https://ots.fyi
# Eliminar secreto por ID
ots-cli delete --instance https://ots.fyi --id secret-id-123
Descargar binarios oficiales en Releases GitHub.
Alternativas Reales
- Onetimesecret (entaracorp): Versión comercial con características adicionales y soporte empresarial
- Pass: Para gestión de contraseñas local sin servidor, basado en GPG
- DuckDNS + scripts personalizados: Soluciones DIY para casos específicos de autohospedaje
Preguntas Frecuentes
¿Puede el servidor leer los secretos?
No. El cifrado AES-256 ocurre en el navegador antes del envío. El servidor solo almacena datos cifrados y nunca puede descifrarlos sin la contraseña de acceso.
¿Qué es mejor: Redis o memoria?
Redis/Valkey permite persistencia de datos entre reinicios y múltiples instancias. Memoria es más simple pero pierde todos los datos al reiniciar el servicio.
¿Cómo expirar secretos automáticamente?
Configurar SECRET_EXPIRY en segundos (ej: 604800 = 1 semana) o usar Redis TTL para control granular por secreto.
¿Es seguro compartir secretos públicos?
No recomendado. Los secretos deben compartirse solo con destinatarios específicos que conozcan la contraseña de acceso generada.