Pitch: Autenticação documental e prova de anterioridade: por que escolhi hash no navegador e ancoragem na rede Base
Olá, pessoal!
Quero compartilhar com vocês um projeto que acabei de colocar no ar chamado Docmint (https://docmint.app), além dos bastidores técnicos e das decisões de arquitetura que tomei durante o desenvolvimento.
O objetivo do projeto é resolver um problema clássico: como provar que um documento, código-fonte ou contrato existia exatamente naquela forma e em determinado momento, sem precisar confiar em intermediários ou métodos manuais caros.
O Dilema dos Serviços em Nuvem Tradicionais
A maioria das plataformas que oferecem registro ou "carimbo de tempo" digital comete um pecado grave contra a privacidade: elas exigem que você faça o upload do arquivo completo para os servidores delas.
Se você tem um código proprietário, uma ideia de patente, um segredo industrial ou uma minuta confidencial, subir esse arquivo para um banco de dados na nuvem cria um risco enorme de vazamento e custódia indesejada.
Minha premissa foi: o arquivo original nunca deve sair do computador do usuário.
A Arquitetura: Hashing no Cliente com Web Crypto API
Para garantir privacidade total, o cálculo do hash criptográfico é feito 100% no navegador antes de qualquer comunicação de rede.
Em vez de usar bibliotecas pesadas de JavaScript, utilizei a Web Crypto API nativa dos navegadores modernos (crypto.subtle.digest), que roda em código compilado no próprio motor do navegador com excelente desempenho:
async function computeSHA256(file: File): Promise<string> {
const buffer = await file.arrayBuffer();
const hashBuffer = await crypto.subtle.digest('SHA-256', buffer);
const hashArray = Array.from(new Uint8Array(hashBuffer));
return hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
}
Se você abrir a aba Network (Rede) do DevTools ao arrastar um arquivo para dentro da aplicação, verá que o payload enviado não contém o arquivo. O que transita é apenas uma string hexadecimal de 32 bytes (o digest SHA-256).
Por que Ancorar na Rede Base?
Com o hash em mãos, eu precisava de uma camada de registro que garantisse:
- Imutabilidade temporal (timestamp à prova de adulteração).
- Disponibilidade pública global.
- Custo de transação negligenciável.
Optei por fazer a ancoragem em um smart contract na Base (a Layer 2 da Coinbase sobre o Ethereum). Isso resolve dois gargalos:
- Segurança de liquidação: Herda as propriedades descentralizadas e de segurança do ecossistema Ethereum.
- Custo viável: O custo de gás na Base é de frações de centavo de dólar por transação, tornando sustentável registrar hashes individualmente.
Princípio do Anti-Lock-in: Independência Total da Plataforma
Uma ferramenta de prova criptográfica não pode prender o usuário. Se o Docmint sair do ar amanhã, a sua prova precisa continuar 100% válida e auditável.
A lógica foi desenhada para qualquer desenvolvedor auditar a prova via terminal:
- Recalcular o hash localmente:
sha256sum meu_documento.pdf - Consultar o contrato inteligente:
Basta pegar o hash retornado e consultar a função de leitura no smart contract da Base via qualquer RPC público ou pelo explorer de blocos, conferindo o número do bloco exato e o timestamp de registro.
Criamos também uma página aberta de validação (/verify), onde qualquer pessoa pode apenas soltar o arquivo para revalidar o estado na rede sem login.
Stack Utilizada
- Frontend: Next.js (App Router), TypeScript e Tailwind CSS.
- Criptografia: Web Crypto API nativa.
- Blockchain: Contrato Solidity na rede Base.
- Onboarding/Autenticação: Abstração de conta para permitir uso simples sem atritos excessivos de carteira.
Onde Gostaria do Feedback de Vocês
O projeto está no ar e funcionando em https://docmint.app, e eu adoraria a opinião da comunidade do TabNews:
- UX e Clareza: A explicação de que o arquivo não sai da máquina fica transparente para quem não é dev?
- Performance: Para quem lida com arquivos gigantescos, o comportamento do cálculo de hash na aba do navegador flui bem?
- Casos de Uso: Além de código-fonte, contratos e designs autorais, quais outros cenários vocês acham que mais se beneficiariam desse tipo de carimbo?
Última coisa: Quando loga pela primeira vez, recebe 3 créditos para testar. Mas se quiserem mais é só falar!
Obrigado a quem puder testar e avaliar a arquitetura!
Fonte: https://docmint.app/