Skip to content

feat: interop enc:v1 — decifra e re-cifra o armazenamento do OmniRoute - #6

Open
logins-pathbit wants to merge 1 commit into
masterfrom
feat/enc-v1-field-decryption
Open

logins-pathbit wants to merge 1 commit into
masterfrom
feat/enc-v1-field-decryption

Conversation

@logins-pathbit

Copy link
Copy Markdown

O que muda

O OmniRoute cifra credenciais em repouso com AES-256-GCM (enc:v1:<iv>:<ct>:<tag>). Antes desta evolução o sync lia o ciphertext e reportava toda conexão como recusada (HTTP 401), porque validava o material cifrado contra o provedor.

Causa raiz medida no bundle do servidor

key = scryptSync(STORAGE_ENCRYPTION_KEY, "omniroute-field-encryption-v1", 32)

O sal é o contexto estático (não o sha256 da chave — esse só aparece no caminho legado de migração). A primeira versão deste módulo derivou com o sal do caminho legado e a decriptação falhava em silêncio; a medição direta no bundle corrigiu.

Conteúdo

  • omini_rtksync/enc_v1.py: decrypt/decrypt_if_needed/encrypt com AES-256-GCM (pycryptodome pinado em 3.23.0); falhas nunca levam material a log.
  • database.py: leitura decifra; escrita re-cifra no mesmo formato (o gateway faz passthrough de claro, então uniformidade preservada).
  • tests/test_enc_v1.py: 7 testes incluindo vetor de interop gerado pelo Node com os parâmetros reais — prova de que o Python lê exatamente o que o gateway escreve.
  • pyproject.toml: dependência pycryptodome pinada.

Prova ao vivo

Ambiente real com Groq e OpenRouter cifrados no SQLite: antes Chave RECUSADA (HTTP 401) ×2; depois Autenticação aceita pelo provedor (HTTP 200) ×2 no mesmo ciclo do cron.

Tipo

  • Nova funcionalidade
  • Correção de diagnóstico falso-positivo (401 em chave válida cifrada)

Validação

  • python -m unittest discover -s tests -p "test_enc_v1.py" — 7/7 OK

- Servico ominirtksync ao lado do OmniRoute: renova tokens OAuth antes do
  vencimento, limpa travas de rate limit expiradas e valida credenciais
  contra os provedores (anti-bloqueio por inatividade)
- Interop enc:v1: o guardiao decifra o armazenamento do Router
  (AES-256-GCM, scrypt com o sal estatico medido no bundle) e re-cifra na
  escrita — prova interop Node-Python com vetor real
- Menor privilegio: recebe SOMENTE a chave de campo via
  .runtime/ominirtksync.env (bootstrap); painel so no loopback
- Imagem com base pinada por digest (SEC-01); inventarios, contagens de
  logs e topologia atualizados
- Conexoes Groq e OpenRouter validadas ao vivo: HTTP 200
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants