O que acontece com seus dados em uma captura
Uma captura feita pela API do ProofSnap ou pelo painel passa por cinco etapas:
- Você envia uma URL por HTTPS, pela API com sua chave de API ou pelo painel.
- Um navegador executado nos servidores do ProofSnap em Frankfurt carrega a página. Ele só se conecta a endereços públicos. No modo de produção, a URL também é enviada ao Internet Archive, a menos que você desative essa opção.
- Cada arquivo recebe um hash SHA-256 e o manifesto é assinado. Somente o hash do manifesto vai para os calendários do OpenTimestamps e, se você solicitar um carimbo do tempo qualificado, para a Disig a.s.
- O pacote selado é armazenado criptografado em Frankfurt, com uma segunda cópia na Irlanda dos pacotes criados no modo de produção.
- Você baixa o pacote ou, quando ele estiver pronto, recebe um webhook assinado avisando.
Onde a API é hospedada
- API
- Amazon Web Services na UE, Frankfurt (eu-central-1).
- Dados da conta e das capturas
- Google Cloud Firestore na UE, Frankfurt (europe-west3).
- Login
- Firebase Authentication, um serviço global do Google.
- Pacotes de provas
- Amazon S3 na UE, Frankfurt (eu-central-1), com uma segunda cópia na Irlanda (eu-west-1) de cada pacote criado no modo de produção.
O que é tratado fora da UE
Os pacotes de provas e os dados das capturas ficam em Frankfurt e na Irlanda. Serviços fora da UE só podem tratar os dados limitados listados abaixo:
- A URL capturada, que por padrão é enviada ao Internet Archive nas capturas de produção (você pode desativar isso).
- O hash do manifesto, enviado aos calendários públicos do OpenTimestamps. Nenhum conteúdo dos arquivos é enviado.
- O nome do host do site capturado, resolvido pelo Google Public DNS e pelo Cloudflare DNS e consultado nos serviços públicos de RDAP e WHOIS.
- Os dados de login no Firebase Authentication e os dados de pagamento na Stripe.
Captura no servidor
A página é carregada e capturada nos servidores do ProofSnap, não no seu computador. Você envia uma URL e recebe um pacote de provas selado. O navegador de captura só se conecta a endereços públicos: endereços privados, de loopback e dos serviços de metadados da nuvem são recusados, mesmo depois de um redirecionamento.
Por padrão, quando uma captura é feita no modo de produção, a URL também é enviada ao Internet Archive (web.archive.org) para que
um instantâneo público independente possa ser criado. URLs que parecem privadas, como links de login, de redefinição
de senha e de compartilhamento, ou que carregam um token, nunca são enviadas. Uma URL com query string
só é enviada se você definir a opção de captura external_archive como
true. Defina-a como false para desativar o arquivamento por completo. O pacote registra o resultado.
Como cada pacote é selado
- Hashes
- Cada arquivo de prova do pacote recebe um hash SHA-256, que é listado no
manifest.json. - Assinatura
- O arquivo
manifest.jsoné assinado com uma chave RSA-4096 gerada só para aquele pacote. A chave privada é descartada depois da assinatura, e a chave pública vai junto no pacote. - Âncora no Bitcoin
- O hash do manifesto é enviado aos calendários do OpenTimestamps para ancoragem na blockchain do Bitcoin. Quando a ancoragem é confirmada, a prova completa é armazenada junto com o pacote. Se não for possível adicionar a prova, o pacote registra isso.
- Carimbo do tempo qualificado
- Se você solicitar (somente com chaves de produção, cobrado por carimbo), um carimbo do tempo eletrônico qualificado (RFC 3161) é obtido da Disig a.s., prestador qualificado de serviços de confiança na Lista de Confiança da UE. Se não for possível adicionar o carimbo, o pacote registra isso.
- Verificação offline
- Cada pacote inclui scripts de verificação (
verify.shpara macOS e Linux,verify.ps1para Windows) que o conferem offline, sem depender do ProofSnap.
Registro de emissão
O ProofSnap registra o hash de cada manifesto que emite. Qualquer pessoa pode consultar um hash com
GET /v1/ledger/{hash}; uma correspondência confirma que o ProofSnap emitiu exatamente aquele pacote.
Segunda cópia
Cada pacote de provas criado no modo de produção é copiado para um bucket separado do Amazon S3 em outra região da UE
(Irlanda). GET /v1/captures/{id} informa o status da cópia de cada
captura. A cópia é excluída junto com o original.
Prazo de guarda
As provas são guardadas por 10 anos a partir da data da captura. Para uma página capturada de forma automática, o prazo conta a partir da última vez em que se constatou que a versão capturada ainda era a atual:
- Cada verificação que encontra a página sem alterações estende o prazo de guarda da captura atual.
- Para uma captura substituída por uma versão mais recente, o prazo conta a partir do momento da substituição.
Quando a assinatura do plano termina, você tem 30 dias para baixar tudo. O plano Archive only mantém as provas acessíveis, disponíveis para download e verificáveis mesmo depois que você para de fazer capturas.
Exclusão
Um pacote que você exclui no painel ou pela API vai primeiro para a lixeira, de onde pode ser restaurado em até 30 dias. Depois disso, todas as versões armazenadas são removidas das duas cópias. A exclusão definitiva de um pacote o remove na hora. Quando o prazo de guarda termina, ou quando se encerra o prazo de 30 dias que uma conta tem para baixar seus dados, todas as versões armazenadas são removidas da mesma forma. Uma captura sob retenção legal não pode ser excluída enquanto a retenção estiver ativa. Fica registrado quem excluiu o pacote e quando, mas não o conteúdo dele.
Controle de acesso
- Chaves de API
- Armazenadas somente como hashes SHA-256. A chave completa é exibida uma única vez, quando é criada. Uma chave revogada para de funcionar em até 60 segundos. No plano Website Archive, as chaves de API são somente leitura: elas listam, baixam e verificam capturas e gerenciam inscrições de webhook. Nesse plano, as capturas e as capturas automáticas são iniciadas no painel.
- Login no painel
- Firebase Authentication. É preciso confirmar seu endereço de e-mail antes de criar chaves, iniciar capturas ou contratar um plano.
- Histórico de acessos
- Quando alguém que não é o autor de uma captura, como o proprietário do escritório ou um membro de um caso, baixa, verifica ou acessa a captura de outra forma, esse acesso fica registrado na captura.
- Limites de requisições
- As requisições de captura, de certificação e as demais requisições cobradas têm limite de frequência por conta, somando todas as chaves dela.
Criptografia
- Em trânsito
- Todo o tráfego da API, do painel e dos webhooks usa HTTPS (TLS).
- Em repouso
- Os pacotes de provas são criptografados com AES-256 (criptografia do lado do servidor do Amazon S3) nos dois buckets. Os dois buckets bloqueiam todo acesso público.
Webhooks
- Assinatura
- As entregas de webhook são assinadas com o esquema Standard Webhooks e HMAC-SHA256. As entregas para uma
webhook_urldefinida em uma requisição ou em uma captura automática são assinadas com o segredo de assinatura da chave de API que a definiu. Esse segredo pode ser trocado com um período de sobreposição de 24 horas. Uma inscrição de webhook da conta tem seu próprio segredo de assinatura, exibido uma única vez quando a inscrição é criada. - Destinos
- As entregas vão somente para endpoints HTTPS públicos. Antes de cada entrega, o endereço é resolvido e conferido de novo, e a conexão é feita apenas com o endereço conferido, de modo que endereços privados, de loopback e dos serviços de metadados da nuvem são recusados mesmo depois de uma mudança de DNS. Redirecionamentos não são seguidos.
- Novas tentativas
- Uma entrega que excede o tempo limite, não consegue se conectar ou recebe uma resposta de erro (exceto 410 Gone) é repetida até 5 vezes ao longo de cerca de 35 horas (depois de 5 min, 30 min, 2 h, 8 h e 24 h) com o mesmo
webhook-id, para que o receptor possa descartar duplicatas. Cada tentativa espera no máximo 10 segundos por uma resposta. - Downloads
- As entregas repetidas e as entregas de uma inscrição não incluem o link de download válido por 24 horas. O receptor pode obter um novo com
GET /v1/captures/{id}. - Inscrições de webhook
- Uma inscrição de webhook da conta é desativada quando o endpoint responde com 410 Gone, depois de 5 dias sem nenhuma entrega bem-sucedida ou, se tiver sido criada com uma chave de API, quando essa chave é revogada. Os eventos ficam guardados por 30 dias e podem ser recuperados com
GET /v1/events.
Serviços de terceiros
- Pagamentos
- Os pagamentos são processados pela Stripe. O ProofSnap não armazena números de cartão.
- E-mails da conta
- A MailerSend envia as mensagens de confirmação de e-mail e de redefinição de senha.
- Carimbos do tempo
- Os calendários do OpenTimestamps e, para um carimbo do tempo qualificado, a Disig a.s. recebem somente o hash do manifesto, nunca as provas em si.
- Consultas DNS e WHOIS
- Para documentar o site capturado, o nome do host é resolvido pelo Google Public DNS e pelo Cloudflare DNS, e o registro do domínio é consultado nos serviços públicos de RDAP e WHOIS.