Files
android-encrypted-archiver/.planning/REQUIREMENTS.md
NikitolProject 83a8ec7e8e docs(12-02): complete password-based key derivation plan
- Add 12-02-SUMMARY.md with execution results
- Update STATE.md: Phase 12 complete, 15/15 plans done
- Update ROADMAP.md: Phase 12 progress to complete
- Mark KEY-03, KEY-04, KEY-05, KEY-06 requirements complete

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 00:03:33 +03:00

11 KiB
Raw Blame History

Requirements: Encrypted Archive

Defined: 2026-02-24 Core Value: Архив невозможно распаковать без знания формата — стандартные утилиты не распознают содержимое

v1.0 Requirements (Complete)

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

v1.1 Requirements

Format (Бинарный формат)

  • FMT-09: Тип записи в TOC entry (файл/директория) — 1 байт
  • FMT-10: Unix permission bits (mode) в TOC entry — 2 байта (u16)
  • FMT-11: Относительные пути с / разделителем вместо filename-only
  • FMT-12: Обновлённая спецификация FORMAT.md с новыми полями

Directory (Поддержка директорий)

  • DIR-01: pack рекурсивно обходит директории и добавляет все файлы
  • DIR-02: Относительные пути сохраняются при архивации (dir/subdir/file.txt)
  • DIR-03: Пустые директории сохраняются как записи типа "directory" в TOC
  • DIR-04: unpack создаёт полную иерархию директорий
  • DIR-05: unpack восстанавливает Unix mode bits для файлов и директорий

Kotlin Decoder

  • KOT-05: Парсинг нового TOC с типом записи и permissions
  • KOT-06: Создание иерархии директорий при извлечении
  • KOT-07: Установка permissions (File.setReadable/setWritable/setExecutable)

Shell Decoder

  • SHL-04: Парсинг нового TOC с типом записи и permissions
  • SHL-05: mkdir -p для иерархии и пустых директорий
  • SHL-06: chmod для восстановления permissions

Testing

  • TST-04: Round-trip с вложенными директориями (3+ уровня)
  • TST-05: Round-trip с пустыми директориями
  • TST-06: Проверка сохранения mode bits
  • TST-07: Cross-validation: Rust archive → Kotlin/Shell decode с директориями

v1.2 Requirements

User Key Input (Пользовательский ввод ключа)

  • KEY-01: CLI аргумент --key <HEX> — 64 символа hex, декодируется в 32-байтный AES-256 ключ
  • KEY-02: CLI аргумент --key-file <PATH> — чтение ровно 32 байт из файла как raw ключ
  • KEY-03: CLI аргумент --password [VALUE] — интерактивный промпт (rpassword) или значение из CLI
  • KEY-04: Argon2id KDF — деривация 32-байтного ключа из пароля + 16-байтный random salt
  • KEY-05: Хранение salt в архиве — flags bit 4 (0x10), 16-байтный salt между header и TOC при pack
  • KEY-06: Чтение salt из архива при unpack/inspect — автоматическое определение по flags bit 4
  • KEY-07: Один из --key, --key-file, --password обязателен для pack/unpack; inspect принимает ключ опционально

Future 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) Moved to v1.2 KEY-03/KEY-04
Streaming/pipe Файлы помещаются в память целиком
Вложенные архивы Плоский список файлов
Асимметричное шифрование Избыточно для hardcoded key модели
Self-extracting архивы Shell-скрипт — отдельный файл
DRM / лицензирование Не цель проекта
Дедупликация файлов Разные файлы, нет дублей
Симлинки и хардлинки Только файлы и директории
uid/gid и timestamps Только mode bits — достаточно для target use case
Обратная совместимость с v1.0 Формат меняется, старые архивы не поддерживаются

Traceability

Requirement Phase Status
FMT-01 Phase 2 Complete
FMT-02 Phase 2 Complete
FMT-03 Phase 2 Complete
FMT-04 Phase 2 Complete
FMT-05 Phase 1 Complete
FMT-06 Phase 6 Complete
FMT-07 Phase 6 Complete
FMT-08 Phase 6 Complete
ENC-01 Phase 2 Complete
ENC-02 Phase 2 Complete
ENC-03 Phase 2 Complete
ENC-04 Phase 2 Complete
ENC-05 Phase 2 Complete
CMP-01 Phase 2 Complete
CMP-02 Phase 2 Complete
INT-01 Phase 2 Complete
INT-02 Phase 3 Complete
CLI-01 Phase 2 Complete
CLI-02 Phase 2 Complete
CLI-03 Phase 2 Complete
KOT-01 Phase 4 Complete
KOT-02 Phase 4 Complete
KOT-03 Phase 4 Complete
KOT-04 Phase 4 Complete
SHL-01 Phase 5 Complete
SHL-02 Phase 5 Complete
SHL-03 Phase 5 Complete
TST-01 Phase 3 Complete
TST-02 Phase 3 Complete
TST-03 Phase 3 Complete
FMT-09 Phase 7 Complete
FMT-10 Phase 7 Complete
FMT-11 Phase 7 Complete
FMT-12 Phase 7 Complete
DIR-01 Phase 8 Complete
DIR-02 Phase 8 Complete
DIR-03 Phase 8 Complete
DIR-04 Phase 8 Complete
DIR-05 Phase 8 Complete
KOT-05 Phase 9 Complete
KOT-06 Phase 9 Complete
KOT-07 Phase 9 Complete
SHL-04 Phase 10 Pending
SHL-05 Phase 10 Pending
SHL-06 Phase 10 Pending
TST-04 Phase 11 Pending
TST-05 Phase 11 Pending
TST-06 Phase 11 Pending
TST-07 Phase 11 Pending
KEY-01 Phase 12 Complete
KEY-02 Phase 12 Complete
KEY-03 Phase 12 Complete
KEY-04 Phase 12 Complete
KEY-05 Phase 12 Complete
KEY-06 Phase 12 Complete
KEY-07 Phase 12 Complete

Coverage:

  • v1.0 requirements: 30 total -- all Complete
  • v1.1 requirements: 19 total -- all mapped to phases 7-11
  • v1.2 requirements: 7 total -- all mapped to phase 12
  • Mapped to phases: 26/26
  • Unmapped: 0

Requirements defined: 2026-02-24 Last updated: 2026-02-26 after Phase 12 requirements added (KEY-01 to KEY-07)