docs: define v1 requirements
This commit is contained in:
134
.planning/REQUIREMENTS.md
Normal file
134
.planning/REQUIREMENTS.md
Normal file
@@ -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*
|
||||
Reference in New Issue
Block a user