Para as equipas de TI

A mesma proteção, chamada pelos seus programas — uma só imagem sem estado para operar.

Antes de um fluxo de trabalho enviar um documento a uma IA, a um tradutor ou a um fornecedor, pode pedir ao DoNotLeak que encontre e substitua os dados pessoais que contém — através de uma API que exige uma identidade, servida pelo motor da página.

Mais um componente para alojar, proteger, atualizar e monitorizar? Eis o que pede: uma imagem assinada, sem base de dados nem volume a salvaguardar, configurada pelo seu ambiente, chamada por máquinas identificadas. E, a pedido, o seu código-fonte para as suas equipas.

Apenas chamadores identificados · Nada é guardado · Imagens assinadas, amd64 e arm64

Desenho de traço panorâmico: uma pilha de documentos entra numa fila de três caixas idênticas, ligadas umas às outras; a linha segue até um portátil que mostra um documento e uma lista curta, divide-se em direção a um edifício de escritórios e a uma nuvem, e volta a juntar-se numa engrenagem. Uma linha pontilhada, ainda por ligar, conduz a um pequeno robô dentro de uma moldura tracejada.

Experimentar a API

Envie um pedido, leia a resposta.

O motor real, aberto aqui em demonstração, sem chave: a resposta que lê é a que os seus programas vão receber.

  • 1 chamada a cada 15 s por endereço IP
  • textos até 4 KB
  • nada é guardado
  • uma mesma rede partilha o ritmo
Os tetos da demonstração

Por endereço — uma rede IPv6 /64 conta como um só: 100 chamadas por dia, 300 por semana, 600 por mês, 2000 por ano. Para toda a demonstração: 600 chamadas por minuto e um único texto analisado de cada vez; acima disso, responde 503 e o resto do serviço não é afetado. O seu endereço só é mantido em memória, enquanto as suas chamadas são contadas; os registos guardam o verbo, o estado, os tamanhos e a duração — nunca o endereço, o texto nem a resposta.

RateLimit-Policy · RateLimit · Retry-After

  • POSTscan
  • POSTprotectEm breve
  • POSTrestoreEm breve
  • GETcapabilitiesEm breve
  • POSTextractcom uma chave
  • POSTrendercom uma chave

Pedido

POST/api/demo/scan

Encontra os dados pessoais — onde estão (em bytes UTF-8), o seu tipo, a sua gravidade — e devolve o texto protegido.

81 / 4096 bytes

Países
Ver o JSON enviado
{
  "text": "Damien Morel a validé le virement vers l'IBAN FR76 3000 6000 0112 3456 7890 189.",
  "scope": [
    "FR"
  ]
}

Pronto — 1 chamada disponível

Resposta

A resposta aparecerá aqui.

Os seus programas chamam /api/v1/scan com a sua identidade — um certificado de cliente ou um token: é a secção seguinte.

A API

O que faz hoje: encontrar e depois substituir.

Uma só chamada: JSON à entrada; as deteções e o texto protegido à saída. Responde o próprio motor da página.

  • Encontrar

    Cada dado pessoal do texto, com o seu tipo, a sua posição e uma pontuação de confiança. Os formatos seguem os países que indicar.

    findings · counts · scope

  • Substituir

    A mesma resposta traz o texto protegido: cada valor passa a ser um marcador tipado e numerado. Os valores que indicar como mantidos ficam como estão.

    anonymized_text · replacements · kept

A chamada

curl -sS --cacert ca.pem --cert client.pem --key client.key \
  -H 'Content-Type: application/json' \
  -X POST --data '{"text":"Contact: jean.dupont@example.org"}' \
  https://donotleak.example.org/api/v1/scan
Com um token em vez de um certificado
-H "Authorization: Bearer $TOKEN"

A resposta — gravada a partir do motor, quebras de linha acrescentadas

{"version":1,
 "findings":[{"id":0,"kind":"Pii","span":{"start":9,"end":32},
   "primary":{"label":"EMAIL","severity":"Medium","confidence":85},
   "alternatives":[],"entity_id":0,"kept":false,"applied":0}],
 "counts":{"total":1,"low":0,"medium":1,"high":0,"critical":0},
 "anonymized_text":"Contact: [[EMAIL-1]]",
 "replacements":[{"span":{"start":9,"end":32},"placeholder":"[[EMAIL-1]]"}],
 "entities":[{"id":0,"label":"EMAIL","value":"jean.dupont@example.org",
   "placeholder":"[[EMAIL-1]]"}],
 "skipped_overlaps":0}
As recusas e a tabela de entidades

As recusas nunca citam o conteúdo: 400 vazio ou não JSON, 413 acima de 1 MiB, 422 conteúdo suspeito, 401 sem identidade, 403 não autorizado, 429 orçamento excedido.

A tabela de entidades devolve cada valor original ao chamador que o enviou — é ela que torna possível restaurar. Só o texto protegido segue para a IA.

O que ainda não faz
  • Restaurar: repor os originais na resposta da IA Em breve
  • Os documentos Word através da API Em breve
  • O contrato v1 publicado: uma descrição OpenAPI, erros uniformes, quotas por chamador Em breve

Onde se encaixa nos seus fluxos de trabalho

Um controlo antes da chamada externa.

Um fluxo — um sistema de gestão documental, um CRM, um lote de ficheiros — chama o DoNotLeak mesmo antes de chamar uma IA ou um parceiro. Só o texto protegido segue caminho.

Escolhe onde fica o controlo e o que se segue: enviar de imediato, ou deixar uma pessoa rever as deteções e voltar a enviar o texto mantendo os valores de que a tarefa precisa.

Desenho de traço: documentos com linhas cor de laranja seguem num tapete rolante através de um pórtico de análise e depois sob uma lupa. Um caminho, validado, leva uma página protegida até um chip de IA; o outro, riscado, põe os originais de lado.
O controlo fica antes da fronteira — onde decidir colocá-lo.

Identidade das máquinas

Nunca anónimo: cada chamada nomeia o seu chamador.

A API não tem nenhuma porta aberta. O servidor recusa-se a arrancar enquanto não souber identificar um chamador, e cada chamada é avaliada segundo a sua política.

  • Um certificado de cliente

    TLS mútuo, terminado pelo próprio servidor: o certificado tem de remontar à autoridade de certificação que reconhece, e o seu ID SPIFFE — senão o seu nome DNS, nunca o common name — passa a ser o chamador.

    TLS_CLIENT_CA · TLS_CLIENT_IDENTITY=san

  • Um token do seu fornecedor de identidade

    O emissor OpenID Connect que designar — o seu diretório, o seu SSO: a assinatura, o emissor, a audiência e a expiração de cada token são verificados com as chaves que ele publica, e as suas funções acompanham-no.

    OIDC_ISSUER_URL · OIDC_CLIENT_ID · comprovado na CI com o Keycloak

  • Recusado por omissão: um chamador sem função no seu ficheiro de política é recusado (403), e analisar é um direito à parte.
  • Nenhuma chave de API estática que possa vazar: um chamador prova-se com um certificado ou um token assinado.

Alojamento e soberania

Alojado pela Contee, ou dentro do seu próprio sistema de informação.

A mesma imagem headless nos dois casos.

  • Pela Contee, na UE

    A Contee opera o servidor e basta-lhe chamá-lo. A página pública já funciona assim, na OVH SAS, um fornecedor de alojamento francês (ver o aviso legal).

    A API alojada, com o seu próprio contrato de serviço Em breve

  • Dentro do seu sistema de informação

    A imagem corre nos seus servidores, atrás da sua PKI e do seu fornecedor de identidade: os textos nunca saem do seu perímetro. A pedido, com o seu código-fonte: a oferta nas suas instalações, mais abaixo.

Desenho de traço: uma mulher coloca um cubo marcado com um escudo dentro de um círculo que envolve um bastidor de servidores; um portátil envia-lhe um documento; sai uma página, e só uma seta tracejada conduz a uma nuvem distante.
Onde o controlo corre é uma escolha de arquitetura sua.

A oferta nas suas instalações

O código-fonte nas suas mãos, e as suas equipas para o levar mais longe.

Para uma organização que quer o DoNotLeak dentro do seu próprio sistema de informação, sem depender da Contee para o manter vivo.

  • O código-fonte entregue

    Para uso interno da sua organização: as suas equipas leem-no, compilam-no e implementam-no dentro do seu perímetro.

  • As suas equipas formadas

    Para o manter, o melhorar e o expandir: as competências constroem-se na sua casa, não na nossa.

  • A menor dependência possível

    O código e o saber-fazer ficam em casa; o servidor só chega ao que configurar, nunca a um serviço da Contee.

  • De uma só vez, sem subscrição SaaS

Disponível desde já, a pedido, para o seu perímetro.

A imagem headless

Só o núcleo de análise — assinado, para duas arquiteturas.

Sem página, sem cookie, sem código de navegador: a API e o motor, mais nada.

  • O motor da página

    A página e a API chamam a mesma função de análise: o que uma pessoa vê na página é o que um programa obtém.

    um núcleo · duas portas

  • Pequena e fechada por omissão

    Uma base distroless — sem shell, sem gestor de pacotes — e um utilizador não root. Recusa-se a arrancar sem uma fonte de identidade, ou com uma configuração TLS a meio.

    porta 3000 · TLS e mTLS na aplicação, ou atrás do seu proxy

  • Construída e assinada como a imagem web

    O mesmo pipeline constrói-a e analisa-a, e depois assina-a por digest com a chave própria do DoNotLeak — a imagem, a sua lista de materiais e a sua proveniência de compilação.

    amd64 + arm64 · cosign · SBOM SPDX · proveniência SLSA · Trivy, Grype, Dockle, Dive

Operações

O que a imagem pede às suas operações.

Um contentor entre os outros.

  • Sem estado

    Sem base de dados, sem volume a salvaguardar: cada pedido é processado em memória e depois esquecido. Nada a restaurar.

    sem base de dados · sem volume de dados

  • Configurada pelo seu ambiente

    Endereço de escuta, certificados, autoridade de cliente, emissor OIDC, ficheiro de política, orçamentos: variáveis, e ficheiros montados só de leitura. Uma configuração a meio recusa-se a arrancar.

    LEPTOS_SITE_ADDR · TLS_CERT · TLS_CLIENT_CA · CASBIN_POLICY_FILE · SCAN_*

  • Monitorizada pelas suas ferramentas

    Os rastreios seguem por OpenTelemetry para o seu coletor, ou então para a saída padrão; os registos nunca contêm um texto analisado.

    OTEL_EXPORTER_OTLP_ENDPOINT

  • Atualizada por digest

    Uma versão é uma imagem assinada, designada pelo seu digest: verificar a assinatura, mudar o digest, reiniciar. Um certificado que muda: novos ficheiros e depois um reinício.

    cosign verify · amd64 + arm64

Onde quer que corra

Três coisas que não mudam.

  • Nada é guardado

    Cada texto é analisado na memória do pedido que o transporta, no servidor, e desaparece com ele: nenhuma cópia, nenhum registo do seu conteúdo.

    Cada pipeline faz passar um texto de controlo pelo servidor headless e falha se o seu registo alguma vez o mostrar.

  • Mais ninguém é chamado

    A deteção assenta em formatos, regras e dicionários: nenhum modelo de linguagem, nenhum serviço de terceiros. O servidor só chega ao que configurar — o seu fornecedor de identidade, o seu coletor de telemetria.

  • Cada versão verificável

    Cada imagem é assinada por digest, com a sua lista de materiais e a sua proveniência; o pipeline verifica a assinatura antes de publicar seja o que for.

Desenho de traço: páginas marcadas a cor de laranja passam num tapete por uma pequena máquina de engrenagens com um mostrador e saem com caixas tracejadas no lugar das marcas; ao lado, uma grande máquina que mostra um cérebro está desligada, com a ficha pendurada.
Regras e dicionários fazem o trabalho: nenhum modelo de linguagem a chamar.

Experimente na página e depois envie uma mensagem à Contee.

A página responde com o mesmo motor que a API: cole um texto típico dos seus fluxos de trabalho. A segurança da imagem verifica-se controlo a controlo na página CISO. Para a API alojada ou a oferta nas suas instalações, envie uma mensagem à Contee.