---
name: vakhunter_pii_encryption
description: "ВакХантер PII-в-покое — колоночный Fernet (utils/pii_crypto) + TTL, ключ PII_ENC_KEY в .env"
metadata: 
  node_type: memory
  type: project
  originSessionId: 805ead91-dfa3-49d2-a5e6-01a980e715fd
  modified: 2026-07-22T08:53:06.225Z
---

ВакХантер шифрует PII-текст в `vakhunter.db` (мотив: бэкап уезжает на gdrive, файл вне бокса). Реализация: `utils/pii_crypto.py` — `enc/dec` на Fernet, маркер `enc:v1:`, **no-op без ключа** (dec пропускает legacy-plaintext насквозь, enc идемпотентна). Мастер-ключ `PII_ENC_KEY` в `~/Services/VakHunter/.env` (gitignored, в бэкап БД НЕ входит — это и есть защита). **Потеря ключа = PII нечитаем**, в т.ч. в бэкапах после раскатки.

Шифруются 3 таблицы (9 call-sites): `ai_analysis_log` (input_text/full_response, db.py), `ai_queue` (data/result, ai_queue.py), `ai_cache` (content, webapp.py). НЕ шифруется `ai_usage` (счётчики лимитов, нет PII). Backfill накопленного — `scripts/backfill_pii_encrypt.py` (идемпотентный).

Отдельно TTL-ретенция: `db.cleanup_ai_pii(ttl_days=90)` (env `AI_PII_TTL_DAYS`), суточный хук в `scheduler.check_subscriptions`. Оба закрывают аудит-находки 4.1/4.2 (срок хранения + шифрование). Тесты: `tests/test_pii_crypto.py`, `tests/test_ai_pii_cleanup.py`. Ключ проверить `git check-ignore .env`. См. Obsidian VakHunter Changelog 2026-07-22.
