Сервіс для передачі секретів у разі форсмажору
Привіт!
В рамках навчання ми вже багато років проводимо стажування для студентів. Часом проєкти цікаві з технічної точки зору, але звучать не дуже: там зробили кастомного чат-бота, там якусь незрозумілу новачку інтеграцію... Я завжди хотів створити в рамках навчання якийсь прикольний та унікальний проєкт.
І от одного дня на думку спала незвичайна ідея
Ідея почалась з того, що в сучасному світі у нас дуже багато цифрових активів: логіни та паролі від банкінгів, платіжних систем, криптогаманці, безліч важливих документів в цифровому форматі тощо.
Мені певний час довелось подорожувати окремо від родини і я задумався: а що буде, якщо зі мною щось трапиться?
Звичайно я б міг записати всі пароль для дружини на листочку або завести спільний акаунт на якомусь сервісі, але листочки погане рішення, а той же LastPass не раз ламали, та й всі сервіси для зберігання паролів явно перевантажені функціоналом.
Більш того я би хотів, щоб всі мої секретні дані родина отримала лише у випадку форс-мажору. Немає чого дивитись на мої крипто баланси без необхідності 🙂
Я почав роздумувати над сервісом, що буде надійно зберігати мої секрети до моменту Х і в потрібний момент відправить їх зазначеним адресам.
Для себе я виділив певні критерії та функціонал, як для людини, яка сама буде користувачем:
- Надійне шифрування та зберігання всіх даних
- Гнучке налаштування правил та умов відправки
- Зручний механізм передачі моєї секретної «посилки» адресатам
- Мінімізувати роботу з криптографією для користувачів — сервіс має бути зрозумілим людям без ІТ бекграунду.
Після плідного спілкування з різними Ai-шними інструментами за 3 години я отримав MVP і розуміння, що Ai замінить програмістів ще не скоро :)
Отриманий каркас проєкту було взято за основу і вже вручну ми з командою студентів почали його дороблювати під наше бачення.
Як працює сервіс?
Сервіс назвали Parcelr.com. З його допомогою ви можете створити те, що ми назвали цифровою посилкою (parcel). Посилка має список отримувачів, дедлайн для відправки та сам секретний контент: набір файлів та/або текстове повідомлення.
Автор посилки має придумати для її отримувача набір питань та задати для них відповіді. Ідея така, щоб вигадати питання, відповіді на які знає лише отримувач посилки і це не складно, якщо отримувач близька вам людина: імена домашніх улюбленців, дівоче прізвище тещі, вигадати таких питань можна багато. Якщо з фантазією погано, то можна використати звичайний пароль.
Далі на основі заданих відповідей на стороні клієнта генерується ключ для шифрування і весь контент посилки шифрується цим ключем за допомогою стандарту OpenPGP. Все відбувається на стороні клієнта, ключі для шифрування на сервер ні в якому разі не передаються.
Після шифрування посилка завантажується на сервер і відправляється на зберігання в AWS S3. Метадані посилки такі, як список отримувачів, час відправки тощо можна змінювати в той час, як сама посилка після створення залишається незмінною.
Що відбувається, коли настав дедлайн?
По перше, у власника посилки є можливість продовжити час відправки. Це можна зробити в онлайн кабінеті, або за допомогою спеціального лінку, якщо це треба зробити швидко без логіну. Така собі кнопка «В мене все ОК, не відправляй».
При наближенні дедлайну власник посилки отримає нагадування, щоб мати можливість змінити час її відправки або взагалі відмінити відправку.
При настанні дедлайну отримувачу посилки буде відправлено листа із посиланням. При переході за посиланням необхідно буде ввести відповіді на питання, приготовані автором посилки і у випадку правильних відповідей, на стороні клієнта відновлюється ключ і посилка успішно дешифрується.
Статус посилки (відправлена, прочитана тощо) можна відслідковувати в кабінеті користувача.
Враховуючи, що email — не самий надійний спосіб доставки, ми додали інтеграції з Telegram та WhatsApp (остання ще тестується). Щоб адресат не пропустив свою посилку, ви заздалегідь можете дати йому посилання, щоб підписатись на бота, а бот при настанні дедлайну відправить посилку додатково до відправки на пошту через месенджер.
Стек проєкту:
- Java 21
- Spring Boot, Spring Data, Spring Security
- Bootstrap + Thymeleaf + vanilla JS
- PostgreSQL
- Redis
- AWS S3, AWS KMS
- Heroku.
Криптографія
Тут вирішили не вигадувати велосипед і взяли готові популярні JS бібліотеки. Ключ для шифрування створюється із відповідей за допомогою алгоритму PBKDF2. Сама посилка шифрується за стандартом OpenPGP з використанням AES-256.
Що далі?
Враховуючи, що метою продукту є отримання різноманітного досвіду, то ми додали наступний функціонал:
- Питання для відкриття посилок шифруються на стороні сервера за допомогою AWS KMS.
- Платні підписки.
- Отримали досвід використання Docker для локального розгортання та тестування.
- Розгорнули продукт на Heroku.
З недоліків: UI зроблений на звичайному Bootstrap, виглядає зносно, але є над чим працювати.
Проєкт стане одним з тих, що ми будемо використовувати як майданчик для підвищення кваліфікації студентів. Кількість можливих нових функцій та корисних інтеграцій тут безмежна, тому будемо розвивати ідею.
Найважливіші задачі:
- Новий дизайн
- Перехід від Thymeleaf та чистого JS до React
- Відправка посилок через WhatsApp та SMS
- Більше тестів.
Особисто я вирішив свою проблему і моя посилочка для родини на випадок «якщо що» надійно зберігається за допомогою даного сервісу. Для мене — це основна ознака якості продукту. Для вас — підказка, де шукати master key від моїх криптогаманців 🙂
Будемо з командою вдячні за будь який фідбек, критику та побажання щодо функціоналу та ідеї вцілому, а також з радістю відповім на всі питання!
41 коментар
Додати коментар Підписатись на коментаріВідписатись від коментарів