Cifragem e destruição criptográfica¶
O PEART cifra dados sensíveis em nível de arquivo usando o age, uma construção moderna e revisada pela comunidade, implementada em Go puro sem CGO, para que os binários continuem estáticos e cross-compiláveis (ADR 0004). É cifragem de arquivo, não de banco, e a distinção é deliberada e documentada.
O que é cifrado, e o que não é¶
Cifrados por padrão: as evidências (os prints e capturas que carregam credenciais, tokens e dados pessoais, o ativo de maior valor) e os artefatos de backup. Desligar isso exige configuração explícita e um aviso.
Não cifrados, por necessidade arquitetural: renditions e relatórios gerados. Os dois são artefatos
client-facing servidos diretamente pelo portal, e o portal nunca detém a identidade mestra por desenho
(ver a fronteira do portal). Cifrá-los contra uma identidade que
a superfície que os serve não possui os tornaria irrecuperáveis pela própria superfície que precisa
entregá-los. Isso é uma restrição, não uma lacuna, e o docs/security.md diz isso explicitamente.
Não cifrado, por decisão deliberada: o banco SQLite (ADR 0008). Cifrar o SQLite com as soluções maduras exige CGO, o que quebraria o modelo de distribuição estático e cross-compilado. Em vez disso, a cifragem de disco no host (LUKS) é o controle documentado e recomendado para o banco em repouso. A consequência é dita com todas as letras: títulos de achado, descrições técnicas e passo a passo de exploração ficam legíveis para quem tiver acesso ao arquivo do banco. O projeto declara isso em vez de sugerir o contrário, porque limitação declarada vale mais que promessa vaga.
A hierarquia de chaves¶
Há dois níveis de chave.
A identidade mestra da instalação é gerada no primeiro boot, como chave age, num arquivo com
permissão 0600. Ela nunca sai da superfície interna, e nunca entra num backup; o comando de backup
recusa incluí-la, porque uma chave mestra no mesmo pacote que os dados que ela protege tornaria a
cifragem um teatro.
Cada engajamento tem sua própria identidade, cuja chave privada é cifrada com a identidade mestra e guardada no banco. Cifrar as evidências de um dado engajamento usa a chave daquele engajamento.
Destruição criptográfica¶
A chave por engajamento é o que torna possível o apagamento de verdade. Destruir a chave de um engajamento torna o material dele ilegível inclusive em backups antigos que a consultoria já não controla, o que nenhuma exclusão de linha alcança. Essa é a base do mecanismo de expurgo por retenção, e é a parte mais forte da história de privacidade: é apagamento por destruição de chave, que alcança cópias que um comando de exclusão nunca alcançaria. Para um DPO pesando o direito à eliminação, é o mecanismo que responde "e os backups?".
Consequências operacionais¶
Perder a identidade mestra significa perder todas as evidências, sem recuperação. Há um comando explícito de exportação, e o primeiro boot instrui o operador a guardar uma cópia legível em local separado do backup dos dados:
peart export-key -key /etc/peart/master.key -confirm
Rotação de chave está fora do escopo da v1, e isso é declarado no projeto em vez de ficar implícito.