Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
legion — Legion — это ткань аутентификации с нулевым разглашением, созданная для конфиденциальности | Kitploit
Инструменты/GitHubGitHub/deadends/legion
Веб-безопасностьКриптографияКонфиденциальностьАппаратная БезопасностьУправление идентификацией и доступом (IAM)Аутентификация
GitHubdeadends/legion

legion

Legion — это ткань аутентификации с нулевым разглашением, созданная для конфиденциальности

Репозиторий
10369 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
# Legion ZK Auth 🛡️

**Настоящая аутентификация с нулевым разглашением с аппаратно-привязанными кольцевыми подписями устройств**

[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![Rust](https://img.shields.io/badge/rust-1.75+-orange.svg)](https://www.rust-lang.org/)
[![Security](https://img.shields.io/badge/security-2%5E--128-green.svg)](SECURITY.md)
[![Version](https://img.shields.io/badge/version-1.3.0-blue.svg)](SECURITY_FIXES.md)

## 🎯 Что такое Legion?

Legion — это **система аутентификации с нулевым разглашением без пароля**, которая доказывает, что вы авторизованы, **не раскрывая, кто вы**.

Аутентифицируйтесь, используя только **отпечаток пальца + 24-словную фразу восстановления** (как в MetaMask). Без имен пользователей, без паролей, без серверных секретов.

### Ключевые возможности

- ✅ **Аутентификация без пароля**: фраза восстановления BIP-39 + отпечаток пальца (без имени пользователя/пароля)
- ✅ **Истинное нулевое разглашение**: сервер никогда не узнает вашу личность (1 из 1M пользователей)
- ✅ **Анонимность устройства**: аппаратная привязка с кольцевыми подписями (1 из 1K устройств)
- ✅ **Без доверенной настройки**: Halo2 PLONK (прозрачная настройка)
- ✅ **Безопасность оборудования**: привязка WebAuthn к TPM/Secure Enclave
- ✅ **Защита от повторного воспроизведения**: нуллификаторы + временные метки
- ✅ **Безопасность сессии**: теги связывания предотвращают кражу
- ✅ **Поддержка нескольких устройств**: используйте одну учётную запись на 2 устройствах (ноутбук + телефон)
- ✅ **Ограничение скорости**: 5 попыток в час (общие ошибки предотвращают перебор)
- ✅ **Отзыв устройств**: мгновенная блокировка украденных устройств

## 🔒 Гарантии безопасности (v1.3.0)

| Свойство | Гарантия |
|----------|-----------|
| Аутентификация | Без пароля (BIP-39 + отпечаток пальца) |
| Анонимность пользователя | 1 из 2^20 (1,048,576) |
| Анонимность устройства | 1 из 2^10 (1,024) на пользователя |
| Ошибка обоснованности | 2^-128 |
| Система доказательств | Halo2 PLONK (прозрачная настройка) |
| Вывод учётных данных | Blake3 (сид BIP-39) |
| Аппаратная привязка | WebAuthn Level 2 (TPM/Secure Enclave) |
| Несколько устройств | Макс. 2 устройства на учётную запись |
| Ограничение скорости | 5 попыток в час |
| Отзыв устройств | Мгновенный чёрный список |

## 🚀 Быстрый старт (одна команда!)

### Предварительные требования
- [Docker](https://docs.docker.com/get-docker/) (включает Docker Compose)

### Установка и запуск```bash
# Clone and run
git clone https://github.com/deadends/legion.git
cd legion

# Linux/macOS
chmod +x scripts/install.sh && ./scripts/install.sh

# Windows
scripts\install.bat
```
**Вот и всё!** Откройте http://localhost в своём браузере.

### Что устанавливается
- ✅ Redis (хранилище сессий)
- ✅ Legion Server (проверка ZK-доказательств)
- ✅ Frontend (WASM-клиент)
- ✅ Nginx (обратный прокси)

**Производительность**: Регистрация ~5с, Аутентификация ~2мин (генерация доказательств k=14)

---

### Ручная настройка (без Docker)

<details>
<summary>Нажмите, чтобы развернуть инструкцию по установке</summary>```bash
# 1. Install Redis
# macOS: brew install redis && redis-server
# Ubuntu: sudo apt install redis && redis-server
# Windows: https://redis.io/docs/install/install-redis/install-redis-on-windows/

# 2. Run server (terminal 1)
cd legion-server
cargo run --release --features redis

# 3. Build frontend (terminal 2)
cd wasm-client
wasm-pack build --target web --release
python3 -m http.server 8000

# 4. Open http://localhost:8000
```
</details>

---

**Для production-развертывания** см. [DEPLOYMENT.md](https://github.com/deadends/legion/blob/passwordless-v1.3/docs/DEPLOYMENT.md)

## 📊 Производительность

| Уровень безопасности | k | Время доказательства | Размер доказательства | Сценарий использования |
|----------------------|---|----------------------|-----------------------|------------------------|
| **Разработка** | **12** | **~30с** | **3.2 КБ** | **Тестирование** |
| **Продакшн** | **14** | **~2мин** | **3.4 КБ** | **Рекомендуется** |

### Бенчмарки верификации

**Тестовое оборудование:** Lenovo IdeaPad 3 - Intel Core i3 11th Gen  
**Примечание:** Производительность может варьироваться в зависимости от характеристик оборудования.

#### k=12 (Разработка/Тестирование)

| Метрика | Значение | Примечания |
|---------|----------|------------|
| **Размер доказательства** | 3,264 байт | 3.19 КБ сжато |
| **Публичные входные данные** | 10 | корень дерева пользователя, корень дерева устройства, nullifier и т.д. |
| **Генерация параметров** | 7.03с | Единоразовая настройка для каждого значения k |
| **Создание схемы** | 2.3мкс | Незначительные накладные расходы |
| **Генерация верифицирующего ключа** | 1.29с | Единоразовая генерация ключа |
| **Верификация доказательства** | 107.7мс | Фактическая проверка ZK-доказательства |
| **Итоговая верификация** | 8.43с | Сквозная верификация (без кэширования) |

**Детализация:**
- 🔥 **Холодный старт** (первая верификация): **~8.4с** (включает параметры + генерацию ключа + верификацию)
- ⚡ **Последующие верификации** (с кэшированием): **~108мс** (параметры/генерация ключа кэшированы)
- 💾 **Накладные расходы на доказательство**: **~326 байт на каждый публичный вход**
- 🔐 **Сложность схемы**: Дерево пользователя (20 уровней) + Дерево устройства (10 уровней) + привязки

#### k=14 (Продакшн - Рекомендуется)

| Метрика | Значение | Примечания |
|---------|----------|------------|
| **Размер доказательства** | 3,392 байт | 3.31 КБ сжато |
| **Публичные входные данные** | 10 | корень дерева пользователя, корень дерева устройства, nullifier и т.д. |
| **Генерация параметров** | 100.78с | Единоразовая настройка для каждого значения k |
| **Создание схемы** | 5мкс | Незначительные накладные расходы |
| **Генерация верифицирующего ключа** | 12.89с | Единоразовая генерация ключа |
| **Верификация доказательства** | 967.2мс | Фактическая проверка ZK-доказательства |
| **Итоговая верификация** | 114.65с | Сквозная верификация (без кэширования) |

**Детализация:**
- 🔥 **Холодный старт** (первая верификация): **~115с** (включает параметры + генерацию ключа + верификацию)
- ⚡ **Последующие верификации** (с кэшированием): **~967мс** (параметры/генерация ключа кэшированы)
- 💾 **Накладные расходы на доказательство**: **~339 байт на каждый публичный вход**
- 🔐 **Сложность схемы**: Дерево пользователя (20 уровней) + Дерево устройства (10 уровней) + привязки

**Важно:** Генерация параметров и генерация ключа являются единоразовыми затратами, которые могут быть кэшированы. После кэширования верификация занимает всего ~108-967мс в зависимости от значения k. Текущая реализация пока не кэширует параметры.

**Почему медленнее старых бенчмарков?** Беспарольная схема теперь верифицирует ДВА дерева Меркла (пользователь + устройство) вместо одного, обеспечивая истинную анонимность на уровне устройства (1 из 1024 устройств на пользователя).

## 🏗️ Архитектура

**📖 Для подробного пошагового описания процесса аутентификации с криптографическими деталями см. [ARCHITECTURE_FLOW.md](https://github.com/deadends/legion/blob/passwordless-v1.3/docs/ARCHITECTURE_FLOW.md)**

### Компоненты системы```
┌─────────────────────────────────────────────────────────────────────────┐
│                       CLIENT (Browser + WASM)                           │
├─────────────────────────────────────────────────────────────────────────┤
│  ┌────────────────┐  ┌─────────────────┐  ┌──────────────────────────┐  │
│  │  UI Layer      │  │  WASM Prover    │  │  Local Storage           │  │
│  │  (Vanilla JS)  │  │  (Rust→WASM)    │  │  (IndexedDB)             │  │
│  ├────────────────┤  ├─────────────────┤  ├──────────────────────────┤  │
│  │ • Registration │  │ • Blake3 Hash   │  │ • Full Merkle Tree       │  │
│  │ • Login Form   │  │ • BIP-39 Derive │  │ • Device Trees           │  │
│  │ • Session UI   │  │ • Halo2 Prover  │  │ • WebAuthn Credentials   │  │
│  │ • Tree Sync    │  │ • Merkle Proof  │  │ • Tree Version Cache     │  │
│  └────────────────┘  │ • Ring Sigs     │  └──────────────────────────┘  │
│                      └─────────────────┘                                │
│  ┌──────────────────────────────────────────────────────────────────┐   │
│  │              Hardware Security (WebAuthn Level 2)                │   │
│  ├──────────────────────────────────────────────────────────────────┤   │
│  │ • TPM 2.0 / Secure Enclave    • FIDO2 Authenticator              │   │
│  │ • Device Private Key (ECDSA)  • Biometric/Touch Required         │   │
│  └──────────────────────────────────────────────────────────────────┘   │
└────────────────────────────────┬────────────────────────────────────────┘
                                 │ HTTPS/TLS 1.3
                                 │ (Encrypted Channel)
                                 ▼
┌──────────────────────────────────────────────────────────────────────────┐
│                    LEGION SERVER (Rust/Axum)                             │
├──────────────────────────────────────────────────────────────────────────┤
│  ┌─────────────────────────────────────────────────────────────────┐     │
│  │                      API Layer (Axum)                           │     │
│  ├─────────────────────────────────────────────────────────────────┤     │
│  │ POST /api/register-blind          │ Blind registration          │     │
│  │ GET  /api/download-tree           │ Download full Merkle tree   │     │
│  │ POST /api/verify-anonymous-proof  │ Verify ZK proof             │     │
│  │ POST /api/verify-session          │ Session validation          │     │
│  │ POST /api/webauthn/*              │ WebAuthn endpoints          │     │
│  │ GET  /health                      │ Health check                │     │
│  └─────────────────────────────────────────────────────────────────┘     │
│                                   │                                      │
│  ┌─────────────────────────────────────────────────────────────────┐     │
│  │                   Business Logic Layer                          │     │
│  ├─────────────────────────────────────────────────────────────────┤     │
│  │ • Blind Registration    │ • Tree Synchronization                │     │
│  │ • ZK Proof Verifier     │ • Nullifier Tracker (replay)          │     │
│  │ • Session Manager       │ • Linkability Tag Validator           │     │
│  │ • WebAuthn Service      │ • Timestamp Validator (±10min)        │     │
│  │ • Device Revocation     │ • Rate Limiter (5/hour)               │     │
│  └─────────────────────────────────────────────────────────────────┘     │
│                                   │                                      │
│  ┌─────────────────────────────────────────────────────────────────┐     │
│  │                   Cryptographic Layer                           │     │
│  ├─────────────────────────────────────────────────────────────────┤     │
│  │ • Halo2 Verifier (PLONK) │ • Poseidon Hash (ZK-friendly)        │     │
│  │ • Blake3 (credential)    │ • BIP-39 (recovery phrase)           │     │
│  │ • Merkle Tree (2^20)     │ • Device Trees (2^10 per user)       │     │
│  │ • Ring Signature Verify  │ • WebAuthn Signature Verify          │     │
│  └─────────────────────────────────────────────────────────────────┘     │
└────────────────────────┬──────────────────────┬──────────────────────────┘
                         │                      │
                         ▼                      ▼
        ┌────────────────────────┐  ┌───────────────────────────┐
        │   Redis (In-Memory)    │  │  RocksDB (Persistent)     │
        ├────────────────────────┤  ├───────────────────────────┤
        │ • Session Tokens       │  │ • Merkle Tree Leaves      │
        │ • Linkability Tags     │  │ • Device Trees            │
        │ • Spent Nullifiers     │  │ • Nullifier History       │
        │ • Rate Limit Counters  │  │ • WebAuthn Credentials    │
        │ TTL: 1 hour            │  │ • Revoked Devices         │
        └────────────────────────┘  └───────────────────────────┘
```
### Поток аутентификации (упрощенный)```
┌─────────────┐                                                ┌──────────────┐
│   Client    │                                                │    Server    │
│  (Browser)  │                                                │  (Verifier)  │
└──────┬──────┘                                                └──────┬───────┘
       │                                                              │
       │ 1. Generate 24-word recovery phrase (BIP-39)                 │
       │    → 256-bit entropy (like MetaMask)                         │
       │    → User writes down on paper                               │
       │                                                              │
       │ 2. Derive account_id from phrase (Blake3)                    │
       │    account_id = Blake3("LEGION_ACCOUNT_V2" || bip39_seed)    │
       │    → Deterministic, no server interaction                    │
       │                                                              │
       │ 3. Hash account_id for tree leaf (Poseidon)                  │
       │    credential_hash = Poseidon(account_id)                    │
       │                                                              │
       │ 4. Blind registration (TRUE zero-knowledge)             ────►│
       │    → Sends ONLY credential_hash (no phrase/identity)         │
       │    → Server adds to tree, returns tree_index                 │
       │                                                         ◄────│ {tree_index: 114}
       │                                                              │
       │ 5. Download full Merkle tree (one-time sync)            ────►│
       │    → Client stores entire tree in IndexedDB                  │
       │    → Enables TRUE zero-knowledge (no server queries)         │
       │                                                         ◄────│ {tree_data: [all leaves],
       │                                                              │  merkle_root, version}
       │                                                              │
       │ 6. Generate WebAuthn key (TPM/Secure Enclave)                │
       │    → Fingerprint prompt creates hardware-bound key           │
       │    → device_pubkey (ECDSA P-256, non-exportable)             │
       │    → Stored in TPM 2.0 / Secure Enclave                      │
       │                                                              │
       │ 7. Register device in device tree                       ────►│
       │    → device_commitment = Blake3(credential_id)               │
       │    → Server converts to valid field element if needed        │
       │    → Server adds to user's device tree (1 of 1024 slots)     │
       │                                                         ◄────│ {device_position: 0,
       │                                                              │  device_tree_root}
       │                                                              │
       │ 8. LOGIN: Touch fingerprint to authenticate                  │
       │    → WebAuthn verifies hardware-bound key                    │
       │    → Decrypts recovery phrase from local storage             │
       │    → Re-derives account_id from phrase                       │
       │                                                              │
       │ 9. Fetch device Merkle proof                            ────►│
       │    → Sends account_id (derived from phrase)                  │
       │    → Server returns device tree path                         │
       │                                                         ◄────│ {device_path: [siblings],
       │                                                              │  device_root}
       │                                                              │
       │ 10. Compute user Merkle proof CLIENT-SIDE                    │
       │    → Uses local tree from IndexedDB                          │
       │    → Computes path for tree_index                            │
       │    → Server NEVER learns which user!                         │
       │                                                              │
       │ 11. Compute nullifier (replay protection)                    │
       │    nullifier = Poseidon(account_id || challenge)             │
       │    → ONE-TIME USE: Different every login                     │
       │    → Prevents proof replay attacks                           │
       │                                                              │
       │ 12. Compute linkability tag (session binding)                │
       │    linkability_tag = Blake3(device_pubkey || nullifier)      │
       │    ⚠️  Binds session to specific device+user                 │        
       │                                                              │
       │ 13. Generate ZK proof (Halo2 PLONK, ~2min for k=14)          │
       │    Proves in zero-knowledge:                                 │
       │    ✓ User exists in Merkle tree (1 of 2^20)                  │
       │    ✓ Device exists in device tree (1 of 2^10)                │
       │    ✓ account_id hashes to credential_hash                    │
       │    ✓ Nullifier computed correctly                            │
       │    ✓ Timestamp is fresh                                      │
       │    WITHOUT revealing which user or device                    │
       │                                                              │
       │ 14. Submit proof                                        ────►│
       │    {proof, public_inputs, linkability_tag, k=14}             │
       │                                                              │ • Check device not revoked
       │                                                              │ • Verify timestamp (±10min)
       │                                                              │ • Rate limit check (5/hour)
       │                                                              │ • Check nullifier (replay?)
       │                                                              │ • Verify ZK proof (~115s)
       │                                                              │ • Mark nullifier as used
       │                                                              │
       │                                                         ◄────│ {session_token, expires_at}
       │                                                              │
       │ 15. Verify session (every request)                      ────►│
       │    {session_token, linkability_tag}                          │
       │                                                              │ • Lookup in Redis
       │                                                              │ • Verify linkability_tag
       │                                                              │   (prevents session theft)
       │                                                              │ • Check not spent
       │                                                         ◄────│ {valid: true}
       │                                                              │
```
**🔍 Хотите узнать больше?** Смотрите [ARCHITECTURE_FLOW.md](https://github.com/deadends/legion/blob/passwordless-v1.3/docs/ARCHITECTURE_FLOW.md) для:
- Пошаговые криптографические операции
- Детали ограничений схемы
- Объяснения свойств безопасности
- Механизмы устойчивости к атакам

### Глубокое погружение в безопасность сессий```
┌─────────────────────────────────────────────────────────────────────────┐
│                    SESSION SECURITY MECHANISMS                          │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│  1. LINKABILITY TAG (Zero-Knowledge Device Binding)                     │
│  ═══════════════════════════════════════════════════════                │
│                                                                         │
│     linkability_tag = Blake3(device_pubkey || nullifier)                │
│                                                                         │
│     • Computed client-side using hardware-bound device key              │
│     • Sent with every session validation request                        │
│     • Server verifies: stored_tag == provided_tag                       │
│                                                                         │
│     ✅ PREVENTS: Session token theft/replay on different device        │
│     ✅ ENSURES: Same user + same device for entire session             │
│     ✅ MAINTAINS: Zero-knowledge (server doesn't learn identity)       │
│                                                                         │
│  ─────────────────────────────────────────────────────────────────      │
│                                                                         │
│  2. SESSION TOKEN (Cryptographic Binding)                               │
│  ═══════════════════════════════════════════════════════                │
│                                                                         │
│     session_token = Poseidon(nullifier || timestamp || linkability_tag) │
│                                                                         │
│     • Generated server-side after proof verification                    │
│     • Stored in Redis with linkability_tag as value                     │
│     • Cannot be forged without knowing nullifier                        │
│                                                                         │
│     ✅ PREVENTS: Token forgery                                         │
│     ✅ ENSURES: Cryptographic binding to proof                         │
│                                                                         │
│  ─────────────────────────────────────────────────────────────────      │
│                                                                         │
│  3. NULLIFIER (Replay Protection)                                       │
│  ═══════════════════════════════════════════════════════                │
│                                                                         │
│     nullifier = Poseidon(credential_hash || challenge)                  │
│                                                                         │
│     • Unique per authentication attempt                                 │
│     • Tracked in RocksDB (permanent) and Redis (cache)                  │
│     • Server rejects if nullifier seen before                           │
│                                                                         │
│     ✅ PREVENTS: Proof replay attacks                                  │
│     ✅ ENSURES: One-time use per challenge                             │
│                                                                         │
│  ─────────────────────────────────────────────────────────────────      │
│                                                                         │
│  4. TIMESTAMP VALIDATION (Time-Bound Security)                          │
│  ═══════════════════════════════════════════════════════                │
│                                                                         │
│     • Proof includes timestamp (Unix epoch)                             │
│     • Server validates: |proof_time - server_time| < 5 minutes          │
│     • Session TTL: 1 hour (sliding window)                              │
│                                                                         │
│     ✅ PREVENTS: Old proof replay                                      │
│     ✅ ENSURES: Fresh authentication                                   │
│                                                                         │
│  ─────────────────────────────────────────────────────────────────      │
│                                                                         │
│  5. CHALLENGE-RESPONSE (Freshness Guarantee)                            │
│  ═══════════════════════════════════════════════════════                │
│                                                                         │
│     • Server generates random 32-byte challenge                         │
│     • Stored in Redis with 5-minute TTL                                 │
│     • Client must include in proof                                      │
│     • Server verifies challenge matches and deletes                     │
│                                                                         │
│     ✅ PREVENTS: Pre-computed proof attacks                             │
│     ✅ ENSURES: Proof generated for this specific session               │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```
## 🔐 Свойства нулевого разглашения

### Что известно серверу
- ✅ Кто-то из множества анонимности прошел аутентификацию
- ✅ Доказательство криптографически валидно
- ✅ Тот же пользователь+устройство через тег связываемости
- ✅ Статус ограничения скорости (оставшиеся попытки)
- ✅ Статус отзыва устройства
- ✅ Общее количество зарегистрированных пользователей
- ✅ Корень дерева Меркла (публичный)

### Что сервер НЕ МОЖЕТ знать
- ❌ Какой конкретный пользователь (1 из 1 млн)
- ❌ Какое конкретное устройство (1 из 1 тыс. на пользователя)
- ❌ Фраза восстановления (BIP-39 seed)
- ❌ account_id (производный от фразы)
- ❌ Приватный ключ устройства (в TPM/Secure Enclave)
- ❌ Какой лист дерева принадлежит какому пользователю
- ❌ Путь пользователя в дереве Меркла (вычисляется на стороне клиента)
- ❌ Позиция пользователя (tree_index)

## 📦 Развертывание

См. [DEPLOYMENT.md](https://github.com/deadends/legion/blob/passwordless-v1.3/docs/DEPLOYMENT.md) для подробного руководства по развертыванию в production.

### Быстрое развертывание с Docker```bash
# Production build
docker-compose -f deployment/docker-compose.yml up -d

# Check logs
docker-compose -f deployment/docker-compose.yml logs -f legion-server

# Check health
curl http://localhost/health
```
### Переменные окружения```env
RUST_LOG=info
LEGION_DATA_PATH=/var/lib/legion/data
REDIS_URL=redis://127.0.0.1:6379
```
## 🧪 Тестирование```bash
# Run all tests
cargo test --workspace

# Run with Redis features
cargo test --workspace --features redis

# Benchmark
cargo bench
```
## 📚 Документация

- [Архитектура работы](https://github.com/deadends/legion/blob/passwordless-v1.3/docs/ARCHITECTURE_FLOW.md) - Подробная схема аутентификации
- [Исправления безопасности](https://github.com/deadends/legion/blob/passwordless-v1.3/SECURITY_FIXES.md) - Улучшения безопасности в v1.1.0
- [Руководство по развертыванию](https://github.com/deadends/legion/blob/passwordless-v1.3/docs/DEPLOYMENT.md) - Продуктовое развертывание
- [Политика безопасности](https://github.com/deadends/legion/blob/passwordless-v1.3/docs/SECURITY.md) - Гарантии безопасности и отчеты
- [Участие](https://github.com/deadends/legion/blob/passwordless-v1.3/docs/CONTRIBUTING.md) - Рекомендации по участию

## 🛠️ Технологический стек

- **ZK-доказательства**: Halo2 (PLONK) - Прозрачная настройка, без доверенной церемонии
- **Кривые**: Pasta (Pallas/Vesta) - Цикл кривых для рекурсии
- **Хэш**: Blake3 (вывод учетных данных), Poseidon (ZK-дружественный)
- **Вывод ключей**: BIP-39 (24-словная мнемоническая фраза)
- **Оборудование**: WebAuthn Level 2 (TPM 2.0, Secure Enclave)
- **Бэкенд**: Rust, Axum, Redis (сессии), RocksDB (постоянное хранилище)
- **Фронтенд**: Rust→WASM (доказатель), Vanilla JS (UI), IndexedDB (хранилище)
- **Развертывание**: Docker, Nginx, systemd

## 🤝 Участие

Приветствуются любые вклады! Сначала прочтите [CONTRIBUTING.md](https://github.com/deadends/legion/blob/passwordless-v1.3/docs/CONTRIBUTING.md).

1. Форкните репозиторий
2. Создайте ветку функции (`git checkout -b feature/amazing`)
3. Зафиксируйте изменения (`git commit -m 'Add amazing feature'`)
4. Отправьте в ветку (`git push origin feature/amazing`)
5. Откройте Pull Request

## 🔒 Безопасность

Нашли проблему безопасности? Обратитесь к [SECURITY.md](https://github.com/deadends/legion/blob/passwordless-v1.3/docs/SECURITY.md) для ответственного раскрытия.

**НЕ** открывайте публичные запросы по уязвимостям.

## 📄 Лицензия

Лицензия MIT - подробнее в файле [LICENSE](https://github.com/deadends/legion/blob/passwordless-v1.3/LICENSE).

## 🔄 Журнал изменений

### v1.3.0 - Аутентификация без пароля (2024)

**Основные изменения**:
- ✅ **Аутентификация без пароля** - мнемоническая фраза BIP-39 + отпечаток пальца
- ✅ **Однопольная схема** - account_id, полученный из seed'а BIP-39
- ✅ **Кольцевые подписи устройств** - анонимность 1 из 1024 устройств на пользователя
- ✅ **Поддержка нескольких устройств** - используйте одну учетную запись на 2 устройствах
- ✅ **Привязанные к оборудованию ключи** - интеграция WebAuthn TPM/Secure Enclave
- ✅ **Обработка элементов поля Blake3** - автоматическое преобразование для обязательств устройств

**Архитектура**:
- 🏗️ Нет имени пользователя/пароля - только мнемоническая фраза + отпечаток пальца
- 🏗️ Вывод account_id на стороне клиента (Blake3 + BIP-39)
- 🏗️ Деревья устройств на сервере (изоляция по пользователям)
- 🏗️ Двойная проверка дерева Меркла (дерево пользователя + дерево устройства)
- 🏗️ Надёжное преобразование элементов поля (обрабатывает выходные данные Blake3 >= модуля поля)

### v1.2.0 - Архитектура доказательств на стороне клиента (2024)

**Основные изменения**:
- ✅ **Хранение дерева Меркла на клиенте** (IndexedDB) - ПОЛНОЕ нулевое знание
- ✅ **Слепая регистрация** - сервер никогда не видит учетные данные
- ✅ **Локальная генерация доказательств** - вся криптография в WASM
- ✅ **Синхронизация деревьев** - скачайте полное дерево один раз, вычисляйте пути локально
- ✅ **Использованные нуллификаторы** - одноразовые сессии предотвращают параллельный доступ

### v1.1.0 - Укрепление безопасности (2024)

**Добавлено**:
- ✅ Ограничение скорости (5 попыток/час на каждый учетный данные)
- ✅ API отзыва устройств и его применение
- ✅ Метки связывания для предотвращения кражи сессий

**Исправления безопасности**:
- 🔒 Исправлена утечка идентификационных данных в запросах вызова
- 🔒 Предотвращены атаки перебором с помощью ограничения скорости
- 🔒 Включена защита от украденных устройств через отзыв

---

## 🙏 Благодарности

- [Halo2](https://github.com/zcash/halo2) - система ZK-доказательств
- [WebAuthn](https://www.w3.org/TR/webauthn-2/) - аппаратная аутентификация
- [Blake3](https://github.com/BLAKE3-team/BLAKE3) - быстрый хэш
- [BIP-39](https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki) - мнемонические фразы восстановления

## 📞 Контакты

- GitHub: [@deadends](https://github.com/deadends)
- Email: [email protected]
- Сайт: https://nantha.dev

---

**Создано с ❤️ для конфиденциальности и безопасности**
Скачать инструмент