diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md new file mode 100644 index 0000000..8eea4fa --- /dev/null +++ b/.planning/REQUIREMENTS.md @@ -0,0 +1,134 @@ +# Requirements: Encrypted Archive + +**Defined:** 2026-02-24 +**Core Value:** Архив невозможно распаковать без знания формата — стандартные утилиты не распознают содержимое + +## v1 Requirements + +### Format (Бинарный формат) + +- [ ] **FMT-01**: Кастомный бинарный формат с нестандартными magic bytes (не распознаётся binwalk/file/7z) +- [ ] **FMT-02**: Поле версии формата (1 байт) для forward compatibility +- [ ] **FMT-03**: Таблица файлов с метаданными: имя файла, original size, compressed size, encrypted size, offset, IV, HMAC +- [ ] **FMT-04**: Little-endian для всех multi-byte полей +- [ ] **FMT-05**: Спецификация формата как документ (до начала реализации) +- [ ] **FMT-06**: XOR-обфускация заголовков с фиксированным ключом +- [ ] **FMT-07**: Зашифрованная таблица файлов (отдельный IV) +- [ ] **FMT-08**: Decoy padding (случайные данные между блоками) + +### Encryption (Шифрование) + +- [ ] **ENC-01**: AES-256-CBC шифрование каждого файла отдельно +- [ ] **ENC-02**: HMAC-SHA256 аутентификация (encrypt-then-MAC) для каждого файла +- [ ] **ENC-03**: Случайный 16-байтный IV для каждого файла, хранится в cleartext +- [ ] **ENC-04**: Зашитый 32-байтный ключ (hardcoded во всех декодерах) +- [ ] **ENC-05**: PKCS7 padding для AES-CBC + +### Compression (Сжатие) + +- [ ] **CMP-01**: Gzip (DEFLATE) сжатие каждого файла перед шифрованием +- [ ] **CMP-02**: Per-file флаг: сжатие или raw (пропуск для уже сжатых файлов типа APK) + +### Integrity (Целостность) + +- [ ] **INT-01**: SHA-256 чексумма для каждого файла (верификация после декомпрессии) +- [ ] **INT-02**: Распакованные файлы byte-identical оригиналам (round-trip fidelity) + +### CLI Archiver (Архиватор) + +- [ ] **CLI-01**: Rust CLI утилита для создания архивов (Linux/macOS) +- [ ] **CLI-02**: Упаковка нескольких файлов (тексты + APK) в один архив +- [ ] **CLI-03**: Подкоманды: pack, unpack (для тестирования), inspect (для отладки) + +### Kotlin Decoder (Kotlin декодер) + +- [ ] **KOT-01**: Kotlin-код деархивации на Android 13 без native-библиотек +- [ ] **KOT-02**: Использование javax.crypto (AES/CBC/PKCS5Padding) и java.util.zip.GZIPInputStream +- [ ] **KOT-03**: Верификация HMAC перед дешифровкой +- [ ] **KOT-04**: Верификация SHA-256 чексуммы после декомпрессии + +### Shell Decoder (Shell декодер) + +- [ ] **SHL-01**: Shell-скрипт деархивации через busybox (dd, xxd, openssl, gunzip) +- [ ] **SHL-02**: openssl enc -aes-256-cbc с -K/-iv/-nosalt для raw key mode +- [ ] **SHL-03**: Поддержка файлов с не-ASCII именами (кириллица) + +### Testing (Тестирование) + +- [ ] **TST-01**: Round-trip тесты: архивация Rust → деархивация Rust +- [ ] **TST-02**: Golden test vectors: известный plaintext/key/IV → ожидаемый ciphertext +- [ ] **TST-03**: Базовые unit-тесты для каждого модуля pipeline + +## v2 Requirements + +### Расширенная обфускация +- **OBF-01**: Shuffled blocks (хранение блоков в случайном порядке с scramble map) +- **OBF-02**: Fake headers (имитация JPEG/PNG для ввода в заблуждение анализаторов) + +### UX +- **UX-01**: Progress reporting для больших архивов +- **UX-02**: Dry-run / validation mode (проверка без извлечения) +- **UX-03**: Configurable compression level + +### Security +- **SEC-01**: Per-file derived keys (HKDF от master key + file index) +- **SEC-02**: Обфускация ключа в Kotlin APK (byte array + split hex в shell) + +## Out of Scope + +| Feature | Reason | +|---------|--------| +| GUI-интерфейс | CLI достаточен для разработчика | +| Windows-поддержка | Только Linux/macOS, WSL для Windows | +| Парольная защита (PBKDF2/Argon2) | Зашитый ключ, UX на магнитоле | +| Streaming/pipe | Файлы помещаются в память целиком | +| Вложенные архивы | Плоский список файлов | +| Асимметричное шифрование | Избыточно для hardcoded key модели | +| Self-extracting архивы | Shell-скрипт — отдельный файл | +| DRM / лицензирование | Не цель проекта | +| File permissions в архиве | Android управляет своими permissions | +| Дедупликация файлов | Разные файлы, нет дублей | + +## Traceability + +| Requirement | Phase | Status | +|-------------|-------|--------| +| FMT-01 | TBD | Pending | +| FMT-02 | TBD | Pending | +| FMT-03 | TBD | Pending | +| FMT-04 | TBD | Pending | +| FMT-05 | TBD | Pending | +| FMT-06 | TBD | Pending | +| FMT-07 | TBD | Pending | +| FMT-08 | TBD | Pending | +| ENC-01 | TBD | Pending | +| ENC-02 | TBD | Pending | +| ENC-03 | TBD | Pending | +| ENC-04 | TBD | Pending | +| ENC-05 | TBD | Pending | +| CMP-01 | TBD | Pending | +| CMP-02 | TBD | Pending | +| INT-01 | TBD | Pending | +| INT-02 | TBD | Pending | +| CLI-01 | TBD | Pending | +| CLI-02 | TBD | Pending | +| CLI-03 | TBD | Pending | +| KOT-01 | TBD | Pending | +| KOT-02 | TBD | Pending | +| KOT-03 | TBD | Pending | +| KOT-04 | TBD | Pending | +| SHL-01 | TBD | Pending | +| SHL-02 | TBD | Pending | +| SHL-03 | TBD | Pending | +| TST-01 | TBD | Pending | +| TST-02 | TBD | Pending | +| TST-03 | TBD | Pending | + +**Coverage:** +- v1 requirements: 30 total +- Mapped to phases: 0 +- Unmapped: 30 + +--- +*Requirements defined: 2026-02-24* +*Last updated: 2026-02-24 after initial definition*