Перейти к содержимому

PassWave: Генератор паролей с хранилищем на Supabase — от идеи до PWA за 2 недели

Константин Потапов
9 мин

История создания безопасного генератора и хранилища паролей с шифрованием на клиенте, оффлайн-режимом и синхронизацией через Supabase. Рассказываю про архитектурные решения, PWA, мультиязычность и интеграцию с Telegram. UPD: сервис взломали через уязвимость в axios и я его закрыл.

UPD апрель 2026: Сервис закрыт. Через уязвимость в axios удалось пробить бэкенд и получить доступ к данным. Я снёс всё, пока не стало хуже. Ниже — оригинальная статья как она была, плюс постмортем в конце.

Когда хочется просто пароль, а не подписку на новый образ жизни

Иногда тебе нужен один-единственный, бодрый как эспрессо, пароль. Сгенерировать, скопировать, жить дальше. А на практике внезапно оказываешься в мини-CRM своих секретов: подписки, синки, тарифы «счастливый сейф на всю жизнь».

Я хотел по‑простому. Так родился PassWave — минималистичный генератор паролей с опциональным хранилищем. Без обязательств, без загона, без «введите номер карты, чтобы продолжить».

Идея родилась как Telegram Mini App — удобно, пока не понял, что PWA универсальнее. Устанавливается на телефон/десктоп, работает оффлайн и не привязана к платформе. Telegram‑версию я оставил в закромах — достану, если спросите.

Контекст эпохи

Рынок менеджеров паролей зрелый и «тяжёлый»: подписки, экосистемы, автозаполнение. При этом людям часто нужен не «комбайн», а быстрый способ сгенерировать/сохранить несколько секретов. После громких инцидентов (утечки в крупных сервисах) запрос на client‑side шифрование и оффлайн‑режим вырос.

Что получилось (MVP за 2 недели, да)

🔐 Безопасность без занудства

  • Шифрует всё на клиенте. Сервер видит только аккуратный зашифрованный шарик данных и не имеет ни малейшего понятия, что внутри.
  • Пароли генерируются криптографически честно, не на «рандоме из подворотни».
  • Фраза‑ключ — только у вас. Потеряли — не восстановлю. Зато и я ваши пароли не увижу.

📱 PWA как должно быть

  • Ставится на домашний экран и работает как приложение.
  • Полный оффлайн: генерация и локальное хранилище без интернета.
  • Синхронизация между устройствами — по вашему щелчку, а не «мы уже всё синхронизировали, надеемся, вы не против».

🌍 Мультиязычность

С первого дня: русский, английский и ещё «пачка друзей». Языки подцепляются без плясок с бубном.

🧩 Что внутри по фичам

  • Генерация паролей с пресетами и «не путай меня с O/0 и I/l».
  • Парольные фразы, если любите «correct‑horse‑battery‑staple» и хотите помнить, а не копировать.
  • Пакетная генерация для тех, кто наводит порядок сразу и везде.
  • QR для перекидывания пароля между устройствами без «отправить себе в мессенджер».
  • Тёмная тема. Конечно тёмная тема.

Важно: это не замена монструозным менеджерам паролей на 100500 аккаунтов. Это карманный мультитул — генерация, пара важных записей и спокойная жизнь.

Бизнес‑инсайты

  • JTBD: «Быстро сгенерировать и сохранить несколько секретов, оффлайн и без подписки».
  • Позиционирование: privacy‑first, zero‑knowledge, PWA (не завязан на платформе).
  • Монетизация (если понадобится): one‑time unlock/темы/словари; B2B white‑label.
  • Каналы: SEO «генератор паролей», соц.челленджи, комьюнити про privacy.

Почему так, а не иначе

  • Никаких автозаполнений, расширений и «мы всё сделаем за вас». Чем меньше кода между вами и паролем — тем надёжнее.
  • Синхронизация через Supabase, но только зашифрованным blob'ом. Сервер — просто курьер, содержания не знает.
  • Нет регистрации — можно жить локально и вообще никому не рассказывать, что у вас есть приложение для паролей.

Кому зайдёт

  • Фрилансерам, разработчикам, всем, кто часто регистрируется в новых сервисах.
  • Тем, кто не хочет ввязываться в подписки ради генерации.
  • Тем, кто любит оффлайн и контроль.

Планы (коротко и по делу)

  • Лёгкий импорт/экспорт.
  • Больше словарей для парольных фраз.
  • Мини‑режим «паранойи»: автозамок при сворачивании.

Постмортем: как и почему я закрыл PassWave

Весной 2026 сервис взломали. Вектор атаки — уязвимость в axios, через которую удалось добраться до бэкенда. Зашифрованные blob'ы на сервере атакующий получил.

Технически данные были зашифрованы на клиенте и без фразы‑ключа пользователя — бесполезны. Но сам факт того, что кто‑то прошёл в бэкенд, — это уже провал по архитектуре. Я не хотел держать сервис, в безопасность которого перестал верить.

Решение: снести всё, пока ситуация не стала хуже.

Что вынес:

  • Даже zero‑knowledge архитектура не освобождает от ответственности за бэкенд.
  • Зависимости — это поверхность атаки. Особенно в маленьком сайд‑проекте, где обновления ставишь нерегулярно.
  • Pet‑проект с реальными пользователями — это уже продукт, и к нему нужно относиться соответственно.

Пока перезапуска нет. Если когда‑нибудь — только serverless с минимальной поверхностью атаки и строгим пайплайном зависимостей.

См. также