O setor jurídico lida diariamente com dados de altíssima sensibilidade: laudos médicos, segredos industriais, estratégias de litígio, dados bancários e informações de identificação pessoal (PII). Desenvolver um sistema como o JurisOS — que opera sob o paradigma Local-First nos desktops de secretárias e advogados — exige incorporar o conceito de Privacy by Design desde a fundação da arquitetura.
Neste artigo, vamos detalhar como construímos uma malha de defesa em profundidade no ecossistema Elixir e BEAM, utilizando criptografia AES-256-GCM tanto em repouso quanto em trânsito, para garantir conformidade rigorosa com legislações de proteção de dados (LGPD, GDPR e CCPA).
1. O Desafio da Conformidade (LGPD, GDPR e CCPA)
As leis modernas de proteção de dados exigem que os sistemas garantam a confidencialidade e a integridade das informações pessoais contra vazamentos, sejam eles acidentais (perda de um notebook) ou maliciosos (ataques de exfiltração).
Para um aplicativo desktop Local-First sincronizado com a nuvem, a superfície de ataque é dupla:
- O endpoint local: O disco do computador físico do usuário no escritório.
- O transporte e o backend central: A rede por onde os dados trafegam e o banco de dados principal (PostgreSQL) na nuvem.
Para mitigar esses vetores, o JurisOS adota a Separação de Chaves (Key Isolation) em múltiplas camadas.
2. Separação de Chaves: SQLCipher e Cloak.Ecto
Não basta confiar apenas no acesso do usuário ao sistema operacional. Se um dispositivo for furtado, o banco de dados local não pode ser montado e lido por terceiros. Para resolver isso, separamos as responsabilidades de criptografia.
Camada 1: Criptografia de Disco com SQLCipher (SQLCIPHER_KEY)
Na ponta do cliente (o aplicativo desktop empacotado via Burrito), o armazenamento local não é um SQLite padrão, mas sim o SQLCipher. Todo o arquivo .db é cifrado transparentemente utilizando AES-256.
A SQLCIPHER_KEY é gerada no momento do provisionamento da máquina e injetada no ambiente de execução. Isso protege contra ataques físicos: a extração do arquivo do disco resulta em bits indecifráveis sem a chave simétrica correta.
Camada 2: Criptografia de Nível de Campo com Cloak.Ecto (CLOAK_SECRET_KEY)
Enquanto o SQLCipher protege o contêiner físico, o Cloak.Ecto protege o conteúdo lógico. Campos críticos que contêm PII (CPF, RG, históricos médicos) e a própria Transaction Outbox de sincronização recebem uma camada adicional de AES-256-GCM a nível de aplicação.
Isso significa que mesmo um administrador de banco de dados (DBA) acessando a instância central do PostgreSQL na AWS, ou um atacante que consiga realizar um SQL Injection, verá apenas ciphertexts binários, não os dados reais.
defmodule JurisOS.Vault do
use Cloak.Vault, otp_app: :juris_os
@impl true
def init(config) do
config =
Keyword.put(config, :aes_gcm,
tag: "AES.GCM.V1",
key: decode_key(System.fetch_env!("CLOAK_SECRET_KEY"))
)
{:ok, config}
end
defp decode_key(key) do
Base.decode64!(key)
end
end
defmodule JurisOS.Clientes.EncryptedString do
use Cloak.Ecto.String, vault: JurisOS.Vault
end
Na definição do Schema Ecto, mapeamos os campos sensíveis usando o nosso tipo customizado:
defmodule JurisOS.Clientes.Cliente do
use Ecto.Schema
import Ecto.Changeset
schema "clientes" do
field :nome_completo, :string
field :documento_cpf, JurisOS.Clientes.EncryptedString
field :dados_medicos, JurisOS.Clientes.EncryptedString
timestamps()
end
# ...
end
A CLOAK_SECRET_KEY fica estritamente na memória da BEAM. Os dados são cifrados antes de gerar o SQL de INSERT/UPDATE e decifrados logo após o SELECT, mantendo o banco de dados completamente cego quanto ao conteúdo dos campos.
3. Isolamento da Malha BEAM via Tailscale VPN
A comunicação entre os nós de desktop locais e o nó mestre na nuvem requer transporte seguro. Em vez de expor portas públicas na internet (0.0.0.0) e confiar apenas na camada TLS das requisições web, o JurisOS eleva a segurança encapsulando toda a infraestrutura em uma rede Zero Trust.
Utilizando a Tailscale VPN (baseada em WireGuard), cada estação de trabalho e o servidor AWS recebem um IP de uma sub-rede privada (ex: 100.64.0.0/10).
Os Benefícios dessa Arquitetura de Rede:
- Superfície de Ataque Reduzida a Zero: O servidor na nuvem rejeita qualquer conexão que não venha de uma interface WireGuard. Não há portas expostas ao port scan público.
-
Comunicação Nativa Erlang Distribution: Podemos conectar os nós desktop ao cluster principal (
libcluster) trafegando mensagens do ecossistema OTP através do túnel da Tailscale de forma totalmente segura. - Criptografia Dupla em Trânsito: Além da proteção nativa do protocolo (como WebSockets sobre WSS), os pacotes TCP/UDP são criptografados pelas chaves WireGuard ponto a ponto.
Conclusão
Proteger dados jurídicos requer mais do que apenas conformidade no papel; exige garantias algorítmicas de segurança.
Ao combinar o SQLCipher para proteção contra acesso físico indevido, o Cloak.Ecto para cegar o banco de dados central perante dados sensíveis (PII) e a Tailscale VPN para isolar completamente a comunicação de rede da internet pública, o JurisOS estabelece um estado da arte em Privacy by Design no ecossistema Elixir.
Essa arquitetura garante que, independentemente da ponta — seja no laptop offline do advogado ou no servidor AWS na nuvem —, a conformidade com a LGPD, GDPR e CCPA esteja tecnicamente assegurada desde o primeiro byte de dados inserido.
Top comments (0)