Igor Fernandes

SECURITY.md — Criptografia e segurança do vault

Modelo de ameaças, configuração de criptografia em camadas, classificação de dados, e procedimentos de backup.

Modelo de ameaças

O vault contém dados financeiros pessoais, estratégias de internacionalização, e informações sobre ativos. As ameaças relevantes são:

Ameaça Vetor Impacto Mitigação
Acesso físico ao dispositivo Roubo/perda do laptop Exposição total Full-disk encryption (LUKS/FileVault/BitLocker)
Acesso ao repositório remoto Comprometimento do GitHub/GitLab Exposição de notas git-crypt (arquivos criptografados at rest no remote)
Interceptação em trânsito Man-in-the-middle Exposição parcial SSH para git (não HTTPS), TLS para APIs
Vazamento via API de IA cloud Envio de dados sensíveis para LLM Exposição de dados financeiros Ollama local para FIN e FLAG; cloud só para ENG/EDU/VIT
Perda da chave de criptografia Falha de backup Perda permanente do vault remoto Backup da chave em 3 locais independentes
Comprometimento do Obsidian plugin Plugin malicioso Exfiltração de dados Auditar plugins, mínimo necessário, verificar código-fonte

Classificação de dados por domínio

Domínio Sensibilidade Dados sensíveis típicos IA permitida
FIN Alta Saldos, posições, CPF, contas bancárias, estratégia de alocação Ollama local APENAS
FLAG Alta Dados de passaporte, números de conta offshore, planos de residência Ollama local APENAS
ENG Baixa Código, artigos técnicos, anotações Cloud via OpenRouter OK
EDU Baixa Notas de leitura, fichamentos Cloud via OpenRouter OK
VIT Baixa Receitas, degustações, cotações públicas de metais Cloud via OpenRouter OK

Exceção para VIT: Notas sobre metais preciosos que contenham quantidades pessoais possuídas ou locais de armazenamento são reclassificadas como Alta sensibilidade.

Criptografia em camadas

Camada 1: Disco (at rest local)

Protege contra acesso físico ao dispositivo.

Linux:

# Verificar se LUKS está ativo
lsblk -f
# A partição deve mostrar "crypto_LUKS"

Mac:

# Verificar FileVault
fdesetup status
# Deve retornar "FileVault is On."

Windows:

# Verificar BitLocker
manage-bde -status

Camada 2: Git (at rest no remote)

Protege os arquivos no GitHub/GitLab. Usa git-crypt com GPG.

Setup inicial (uma vez):

cd pke/
git init
git-crypt init

# Opção A: Chave simétrica (mais simples)
git-crypt export-key ~/pke-vault-key.bin
# BACKUP ESSA CHAVE IMEDIATAMENTE

# Opção B: GPG (recomendado — integra com commits assinados)
git-crypt add-gpg-user SEU_EMAIL@example.com

Arquivo .gitattributes:

# Criptografar conteúdo do vault
vault/**/*.md filter=git-crypt diff=git-crypt
vault/**/*.canvas filter=git-crypt diff=git-crypt
vault/**/*.png filter=git-crypt diff=git-crypt
vault/**/*.jpg filter=git-crypt diff=git-crypt
vault/**/*.pdf filter=git-crypt diff=git-crypt

# Criptografar configs com dados sensíveis
collector/sources.yaml filter=git-crypt diff=git-crypt
collector/db/*.db filter=git-crypt diff=git-crypt

# NÃO criptografar (precisam ser legíveis no remote)
README.md !filter !diff
CLAUDE.md !filter !diff
GUIDELINES.md !filter !diff
CONTRIBUTING.md !filter !diff
SECURITY.md !filter !diff
SOURCES.md !filter !diff
PUBLISHING.md !filter !diff
ARCHITECTURE.md !filter !diff
.gitattributes !filter !diff
.gitignore !filter !diff
collector/**/*.py !filter !diff
hugo-site/** !filter !diff
scripts/** !filter !diff

Verificar:

git-crypt status
# Todos os *.md do vault devem mostrar "encrypted"
# Docs do root devem mostrar "not encrypted"

Clonar em outro dispositivo:

git clone <repo-url> pke
cd pke

# Com chave simétrica:
git-crypt unlock /path/to/pke-vault-key.bin

# Com GPG (se a chave GPG está no keyring):
git-crypt unlock

Camada 3: Notas individuais (seções sensíveis)

Para dados extremamente sensíveis DENTRO de uma nota (números de conta, senhas, CPF).

Plugin: Obsidian Encrypt (meld-cp)

Plugin: Cryptsidian (vault inteiro)

Backup da chave de criptografia

A chave do git-crypt é o ponto único de falha. Procedimento de backup:

Local Método Acesso
Pendrive criptografado Arquivo .bin em pendrive com VeraCrypt Físico, guardado em local seguro
Password manager Upload da chave como “secure note” no Bitwarden/1Password Cloud, protegido por master password + 2FA
Cópia offline Impresso como QR code ou base64 em papel, guardado em cofre Físico, disaster recovery

Teste de recovery (fazer periodicamente):

# Em uma máquina limpa ou VM:
git clone <repo-url> pke-test
cd pke-test
git-crypt unlock /path/to/backup-key.bin
# Verificar que os .md estão legíveis
cat vault/01-financas/_index.md

Segurança dos plugins Obsidian

Regras para instalação de plugins:

.gitignore recomendado

# Obsidian internos (não precisam de sync)
vault/.obsidian/workspace.json
vault/.obsidian/workspace-mobile.json
vault/.obsidian/cache/

# Sistema
.DS_Store
Thumbs.db
*.swp
*.swo

# Chaves (NUNCA commitar)
*.bin
*.key
*.pem

# SQLite WAL (transiente)
collector/db/*.db-wal
collector/db/*.db-shm

# Hugo build output
hugo-site/public/
hugo-site/resources/

# Python
__pycache__/
*.pyc
.venv/

Checklist de segurança (revisar mensalmente)