🔐 Инновационная система аутентификации на основе персонализированных историй
🧠 3 шага сохранения • Многоуровневая верификация • Защита от брутфорса
- 📖 О проекте
- ✨ Возможности
- 📸 Демонстрация
- 📥 Установка и запуск
- 🎮 Использование
- 🛠 Технологии
- 🔐 Архитектура безопасности
- 🔧 Решение проблем
- 📄 Лицензия
- 📬 Контакты
StoryAuth — это альтернатива традиционным паролям и секретным вопросам. Вместо "девичьей фамилии матери" или "кодового слова" система генерирует уникальную персонализированную историю, которую пользователь запоминает. При каждой верификации задается случайный вопрос из этой истории.
| Традиционные методы | StoryAuth |
|---|---|
| Девичью фамилию можно найти в соцсетях | История генерируется случайно и уникальна |
| Кодовое слово можно подсмотреть | Вопросы каждый раз разные |
| Ответы хранятся открыто | Хеширование с уникальной солью |
| Оператор видит ответ | Оператор видит только GREEN/RED |
| Фича | Описание |
|---|---|
| 🎭 Генерация историй | 4 шаблона × 10+ вариантов = тысячи уникальных комбинаций |
| 🔐 3-шаговое сохранение | История сохраняется только после 3 правильных ответов |
| 🎫 Номер карты | 6-значный код, привязанный к истории |
| 🚫 Защита от брутфорса | Блокировка после 3 неверных попыток |
| 🔔 Напоминания | Автоматические проверки знаний |
| 📊 Полное логирование | Все действия записываются с временными метками |
| 💾 Автосохранение | Данные в JSON с автоматической загрузкой |
# 1. Клонируйте репозиторий
git clone https://github.com/Andrey3141/storyauth.git
cd storyauth
# 2. Создайте виртуальное окружение
python -m venv venv
source venv/bin/activate # Linux/Mac
# или
venv\Scripts\activate # Windows
# 3. Установите зависимости
pip install -r requirements.txt
# 4. Запустите приложение
python main.py- Python 3.8 или выше
- pip (менеджер пакетов Python)
- Браузер для интерфейса оператора
Откройте в браузере: http://127.0.0.1:8000/operator.html
| Шаг | Действие | Описание |
|---|---|---|
| 1 | Регистрация | Введите ID клиента и имена, создайте историю |
| 2 | Сохранение | Клиент должен ответить на 3 вопроса подряд |
| 3 | Верификация | Задайте случайный вопрос из истории |
| 4 | Получение номера | После верификации можно получить номер карты |
- 📝 Регистрация — создание новой истории
- 💾 Сохранение — 3 вопроса для активации
- ❓ Вопрос — получение случайного вопроса
- 🎫 Номер карты — получение 6-значного кода
- 🔔 Напоминание — проверка знаний
- 🔧 Отладка — просмотр данных в JSON
🐍 Python 3.8+ — основной язык
⚡ FastAPI — веб-фреймворк
🪟 Jinja2 — шаблонизатор
🔐 hashlib — хеширование с солью
📝 logging — подробное логирование
💾 JSON — хранение данных
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Регистрация │────▶│ Сохранение │────▶│ Верификация │
│ Генерация │ │ 3 вопроса │ │ Случайные │
│ истории │ │ подряд │ │ вопросы │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Блокировка │◀────│ Напоминание │◀────│ Получение │
│ 3 неверных │ │ Проверка │ │ номера карты │
│ ответа │ │ знаний │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
# В базе данных НЕ хранится:
"Какого цвета был заяц?" → "Синий"
# Хранится ТОЛЬКО:
hash("Синий" + "уникальная_соль") = "7d3ac23f1e8a..."| Атака | Защита |
|---|---|
| 🎣 Социальная инженерия | Оператор не видит правильные ответы |
| 💾 Утечка базы данных | Хранятся только хеши с солью |
| 🔄 Перебор ответов | Блокировка после 3 попыток |
| 👀 Подглядывание | Каждый раз разные вопросы |
❌ Не запускается сервер
- Проверьте, что порт 8000 не занят:
lsof -i :8000 - Убедитесь, что все зависимости установлены:
pip install -r requirements.txt - Запустите с явным указанием хоста:
python main.py
❌ Не открывается интерфейс оператора
- Проверьте, что сервер запущен
- Откройте точный адрес: http://127.0.0.1:8000/operator.html
- Проверьте папку
templates/- там должен бытьoperator.html
❌ Не сохраняются данные
- Проверьте права на запись в папку
data/ - Убедитесь, что папка
data/существует (создается автоматически) - Проверьте JSON файлы в
data/на корректность
❌ Не приходят вопросы
- Убедитесь, что пользователь зарегистрирован
- Проверьте статус пользователя (не заблокирован ли)
- Посмотрите в логах ошибки:
tail -f storyauth.log
Приветствуются PR и Issues! 🙌
- Форкните репозиторий
- Создайте ветку:
git checkout -b feature/your-feature - Закоммитьте изменения:
git commit -m 'feat: add your feature' - Отправьте:
git push origin feature/your-feature - Откройте Pull Request
Проект распространяется под лицензией MIT.
См. файл LICENSE для подробностей.
StoryAuth — пароли устарели, используйте истории! 🎭🔐
Сделано с ❤️ для безопасности
