· 12 мин

Protego: безопасный обмен секретами с E2E-шифрованием

Разбираем архитектуру self-hosted сервиса для передачи паролей и файлов — шифрование в браузере, одноразовые ссылки и сравнение с Yopass

Максим Шек
Максим Шек
Генеральный директор

Зачем это нужно

Пароли от серверов в Telegram. API-ключи в email. SSH-ключ в Slack-треде двухлетней давности. Знакомо?

Сообщение удалить можно, но оно уже осело в бэкапах мессенджера, почтового сервера и на устройствах всех участников чата. Контроля над тем, кто и когда это прочитает — нет.

Protego решает конкретную задачу: передать секрет так, чтобы он существовал ровно до момента прочтения и был зашифрован на всём пути — включая наш собственный сервер.


Как это работает

Вся криптография выполняется в браузере через Web Crypto API. Сервер хранит зашифрованный blob и не имеет возможности его расшифровать — у него нет ни ключа, ни информации об алгоритме.

Поток шифрования и передачи секрета
🛡️

350 000 итераций PBKDF2 с SHA-512 — это порядка 100 мс на современном CPU для одного пароля. Для атакующего с GPU-кластером перебор словаря из миллиона паролей займёт около 28 часов.


Что хранит сервер

Внутри базы данных — JSON с Base64-строкой. Внутри этой строки: 1 байт флага, 32 байта соли, 12 байт IV и шифротекст. Без ключа, который знает только отправитель, это шум.

Запись в Redis
{
  "message": "AZzzsDu5k1Na6e4UHVv8ex4BlaJxq4DWcZK3Wq0mTb...",
  "type": "text",
  "one_time": true,
  "filename": null
}
Попробовать Protego

Зашифруйте и отправьте секрет прямо сейчас — без регистрации

Обсудить проект

Сравнение с Yopass

Yopass — зрелый open-source проект, который используют Spotify и Gumtree. Мы начали с него, но нам не хватило нескольких вещей.

Архитектурные различия

Yopass

OpenPGP-шифрование (гибрид клиент-сервер). Нет CSRF-защиты. Нет rate limiting. Нет API-ключей для интеграций. Нет документации API.

Protego

AES-256-GCM + PBKDF2, чистый E2E в браузере. CSRF-токены, rate limiting 20 req/s, Master Key для API. OpenAPI-документация. Database-агностика.

Модель доверия: что знает сервер
AES-256-GCM
Шифрование Protego
OpenPGP
Шифрование Yopass
33 MB
Docker-образ

Одноразовые ссылки

При создании секрета можно включить режим «одноразовый». Первый GET-запрос возвращает данные и атомарно удаляет запись из базы. Повторный запрос — 404.

Эндпоинт /status позволяет проверить метаданные (тип, one-time флаг) без удаления — полезно для предпросмотра перед загрузкой.

Жизненный цикл секрета

Database-агностика

Protego не привязан к конкретному хранилищу. Интерфейс Database определяет контракт, реализация подставляется при старте через переменную окружения.

pkg/database/database.go
type Database interface {
    Set(ctx context.Context, key, value string, ttl time.Duration) error
    Get(ctx context.Context, key string) (string, error)
    Delete(ctx context.Context, key string) error
    Exists(ctx context.Context, key string) (bool, error)
    Health(ctx context.Context) error
    Close() error
}

Поддерживаемые бэкенды

Redis

По умолчанию. Персистентность, TTL, pub/sub для будущих расширений.

Memcached

Лёгковесная альтернатива. Переключение одной переменной: DATABASE=memcached.

Кастомный

Реализуйте интерфейс — PostgreSQL, DynamoDB, in-memory. Один файл, без изменения логики.


Интеграция через API

Master Key позволяет использовать API из скриптов и CI/CD без CSRF-токенов.

Создание секрета из CI/CD
curl -s -X POST https://protego.example.com/api/messages \
  -H "Content-Type: application/json" \
  -H "X-Master-Key: $PROTEGO_KEY" \
  -d "{
    \"message\": \"$(echo -n $DB_PASSWORD | base64)\",
    \"type\": \"text\",
    \"one_time\": true,
    \"duration\": 1
  }" | jq -r '.id'

Деплой

Один Docker-образ. Frontend вкомпилирован в Go-бинарник. Единственная внешняя зависимость — Redis или Memcached.

docker-compose.yml
services:
  protego:
    image: registry.example.com/protego:latest
    ports: ["8000:8000"]
    environment:
      REDIS_ADDR: redis:6379
      MASTER_KEY: your-secret-key
  redis:
    image: redis:alpine
33 MB
Docker-образ
<10 мс
Время ответа
Self-hosted
Ваша инфраструктура

Итого

Protego закрывает конкретную проблему — безопасная передача секретов внутри команды и клиентам, без следов в мессенджерах и почте.

  • Zero knowledge — сервер не может расшифровать данные;
  • Одноразовость — секрет удаляется после первого прочтения;
  • Self-hosted — данные на вашей инфраструктуре;
  • Открытый код — аудит и контрибуции приветствуются.
Нужен Protego на вашей инфраструктуре?

Развернём, настроим и интегрируем с вашими процессами

Обсудить проект

Другие статьи