Per l’IT

La stessa protezione, chiamata dai tuoi programmi — un’immagine senza stato da gestire.

Prima che un flusso di lavoro invii un documento a un’IA, a un traduttore o a un fornitore, può chiedere a DoNotLeak di trovarne e sostituirne i dati personali — tramite un’API che esige un’identità, servita dal motore della pagina.

Un componente in più da ospitare, proteggere, aggiornare e monitorare? Ecco cosa chiede: un’immagine firmata, senza database né volume da salvare, configurata dal suo ambiente, chiamata da macchine identificate. E, su richiesta, il suo codice sorgente per i tuoi team.

Solo chiamanti identificati · Niente viene conservato · Immagini firmate, amd64 e arm64

Disegno al tratto panoramico: una pila di documenti entra in una fila di tre scatole identiche, collegate l’una all’altra; la linea prosegue verso un portatile che mostra un documento e un breve elenco, si divide verso un edificio di uffici e una nuvola, poi si ricongiunge su un ingranaggio. Una linea tratteggiata, non ancora collegata, porta a un piccolo robot in una cornice tratteggiata.

Provare l’API

Inviate una richiesta, leggete la risposta.

Il vero motore, aperto qui in dimostrazione, senza chiave: la risposta che leggete è quella che riceveranno i vostri programmi.

  • 1 chiamata ogni 15 s per indirizzo IP
  • testi fino a 4 KB
  • non si conserva nulla
  • una stessa rete condivide il ritmo
I tetti della dimostrazione

Per indirizzo — una rete IPv6 /64 conta come uno solo: 100 chiamate al giorno, 300 a settimana, 600 al mese, 2.000 all’anno. Per l’intera dimostrazione: 600 chiamate al minuto e un solo testo analizzato alla volta; oltre, risponde 503 e il resto del servizio non viene toccato. Il vostro indirizzo è tenuto solo in memoria, il tempo di contarne le chiamate; i log conservano il verbo, lo stato, le dimensioni e la durata — mai l’indirizzo, il testo né la risposta.

RateLimit-Policy · RateLimit · Retry-After

  • POSTscan
  • POSTprotectIn arrivo
  • POSTrestoreIn arrivo
  • GETcapabilitiesIn arrivo
  • POSTextractcon una chiave
  • POSTrendercon una chiave

Richiesta

POST/api/demo/scan

Trova i dati personali — dove sono (in byte UTF-8), il loro tipo, la loro gravità — e restituisce il testo protetto.

81 / 4096 byte

Paesi
Vedere il JSON inviato
{
  "text": "Damien Morel a validé le virement vers l'IBAN FR76 3000 6000 0112 3456 7890 189.",
  "scope": [
    "FR"
  ]
}

Pronto — 1 chiamata disponibile

Risposta

La risposta apparirà qui.

I vostri programmi chiamano /api/v1/scan con la loro identità — un certificato client o un token: è la sezione seguente.

L’API

Cosa fa oggi: trovare, poi sostituire.

Una sola chiamata: JSON in ingresso, i rilevamenti e il testo protetto in uscita. Risponde il motore stesso della pagina.

  • Trovare

    Ogni dato personale del testo, con il suo tipo, la sua posizione e un punteggio di confidenza. I formati seguono i paesi che indichi.

    findings · counts · scope

  • Sostituire

    La stessa risposta contiene il testo protetto: ogni valore diventa un segnaposto tipizzato e numerato. I valori che indichi come da mantenere restano come sono.

    anonymized_text · replacements · kept

La chiamata

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
Con un token invece di un certificato
-H "Authorization: Bearer $TOKEN"

La risposta — registrata dal motore, a capo aggiunti

{"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}
I rifiuti e la tabella delle entità

I rifiuti non citano mai il contenuto: 400 vuoto o non JSON, 413 oltre 1 MiB, 422 contenuto sospetto, 401 nessuna identità, 403 non autorizzato, 429 budget superato.

La tabella delle entità restituisce ogni valore originale al chiamante che l’ha inviato — è ciò che rende possibile il ripristino. Solo il testo protetto prosegue verso l’IA.

Cosa non fa ancora
  • Ripristinare: rimettere gli originali nella risposta dell’IA In arrivo
  • I documenti Word tramite l’API In arrivo
  • Il contratto v1 pubblicato: una descrizione OpenAPI, errori uniformi, quote per chiamante In arrivo

Dove si inserisce nei tuoi flussi di lavoro

Un controllo prima della chiamata esterna.

Un flusso — un sistema di gestione documentale, un CRM, un lotto di file — chiama DoNotLeak subito prima di chiamare un’IA o un partner. Prosegue solo il testo protetto.

Scegli tu dove collocare il controllo e cosa segue: inviare subito, oppure lasciare che una persona rilegga i rilevamenti e poi inviare di nuovo il testo mantenendo i valori che servono al compito.

Disegno al tratto: documenti con righe arancioni scorrono su un nastro attraverso un portale di analisi, poi sotto una lente d’ingrandimento. Un percorso, convalidato, porta una pagina protetta verso un chip di IA; l’altro, barrato, mette da parte gli originali.
Il controllo sta prima del confine — dove decidi di metterlo.

Identità delle macchine

Mai anonimo: ogni chiamata nomina il suo chiamante.

L’API non ha porte aperte. Il server rifiuta di avviarsi finché non sa come identificare un chiamante, e ogni chiamata è giudicata secondo la tua policy.

  • Un certificato client

    TLS reciproco, terminato dal server stesso: il certificato deve risalire all’autorità di certificazione che riconosci, e il suo ID SPIFFE — altrimenti il suo nome DNS, mai il common name — diventa il chiamante.

    TLS_CLIENT_CA · TLS_CLIENT_IDENTITY=san

  • Un token del tuo provider di identità

    L’emittente OpenID Connect che indichi — la tua directory, il tuo SSO: firma, emittente, audience e scadenza di ogni token sono verificati con le chiavi che pubblica, e i suoi ruoli lo accompagnano.

    OIDC_ISSUER_URL · OIDC_CLIENT_ID · provato in CI con Keycloak

  • Negato per impostazione predefinita: un chiamante senza ruolo nel tuo file di policy viene rifiutato (403), e analizzare è un diritto a sé.
  • Nessuna chiave API statica che possa trapelare: un chiamante si dimostra con un certificato o un token firmato.

Hosting e sovranità

Ospitata da Contee, o dentro il tuo sistema informativo.

La stessa immagine headless in entrambi i casi.

  • Da Contee, nell’UE

    Contee gestisce il server, tu lo chiami. La pagina pubblica funziona già così, presso OVH SAS, un hosting provider francese (vedi le note legali).

    L’API ospitata, con un proprio contratto di servizio In arrivo

  • Nel tuo sistema informativo

    L’immagine gira sui tuoi server, dietro la tua PKI e il tuo provider di identità: i testi non lasciano mai il tuo perimetro. Su richiesta, con il suo codice sorgente: l’offerta on-premise, qui sotto.

Disegno al tratto: una donna colloca un cubo con uno scudo dentro un cerchio che racchiude un armadio di server; un portatile gli invia un documento; ne esce una pagina, e solo una freccia tratteggiata porta verso una nuvola lontana.
Dove gira il controllo è una tua scelta di architettura.

L’offerta on-premise

Il codice sorgente nelle tue mani, e i tuoi team per farlo evolvere.

Per un’organizzazione che vuole DoNotLeak nel proprio sistema informativo, senza dipendere da Contee per mantenerlo in vita.

  • Il codice sorgente consegnato

    Per l’uso interno della tua organizzazione: i tuoi team lo leggono, lo compilano e lo distribuiscono nel tuo perimetro.

  • I tuoi team formati

    A mantenerlo, migliorarlo ed estenderlo: le competenze si costruiscono da te, non da noi.

  • La minima dipendenza possibile

    Il codice e il know-how restano in casa; il server raggiunge solo ciò che configuri, mai un servizio di Contee.

  • Una tantum, non in abbonamento SaaS

Disponibile da oggi, su richiesta, per il tuo perimetro.

L’immagine headless

Il solo nucleo di analisi — firmato, per due architetture.

Nessuna pagina, nessun cookie, nessun codice per il browser: l’API e il motore, nient’altro.

  • Il motore della pagina

    La pagina e l’API chiamano la stessa funzione di analisi: ciò che una persona vede sulla pagina è ciò che ottiene un programma.

    un nucleo · due porte

  • Piccola, e chiusa per impostazione predefinita

    Una base distroless — niente shell, niente gestore di pacchetti — e un utente non root. Rifiuta di avviarsi senza una fonte di identità, o con una configurazione TLS a metà.

    porta 3000 · TLS e mTLS nell’applicazione, o dietro il tuo proxy

  • Costruita e firmata come l’immagine web

    La stessa pipeline la costruisce e la analizza, poi la firma per digest con la chiave propria di DoNotLeak — l’immagine, la sua distinta dei componenti e la sua provenienza di build.

    amd64 + arm64 · cosign · SBOM SPDX · provenienza SLSA · Trivy, Grype, Dockle, Dive

Gestione operativa

Cosa chiede l’immagine alla tua gestione operativa.

Un container tra gli altri.

  • Senza stato

    Nessun database, nessun volume da salvare: ogni richiesta è elaborata in memoria, poi dimenticata. Niente da ripristinare.

    nessun database · nessun volume di dati

  • Configurata dal suo ambiente

    Indirizzo di ascolto, certificati, autorità dei client, emittente OIDC, file di policy, budget: variabili, e file montati in sola lettura. Una configurazione a metà rifiuta di avviarsi.

    LEPTOS_SITE_ADDR · TLS_CERT · TLS_CLIENT_CA · CASBIN_POLICY_FILE · SCAN_*

  • Monitorata dai tuoi strumenti

    Le tracce escono via OpenTelemetry verso il tuo collettore, altrimenti sullo standard output; i log non contengono mai un testo analizzato.

    OTEL_EXPORTER_OTLP_ENDPOINT

  • Aggiornata per digest

    Una versione è un’immagine firmata identificata dal suo digest: verificare la firma, cambiare il digest, riavviare. Un certificato che cambia: nuovi file, poi un riavvio.

    cosign verify · amd64 + arm64

Ovunque giri

Tre cose che non cambiano.

  • Niente viene conservato

    Ogni testo è analizzato nella memoria della richiesta che lo trasporta, sul server, e scompare con essa: nessuna copia, nessun log del suo contenuto.

    Ogni pipeline fa passare un testo sentinella nel server headless e fallisce se il suo log lo mostra.

  • Nessun altro viene chiamato

    Il rilevamento si basa su formati, regole e dizionari: nessun modello linguistico, nessun servizio di terzi. Il server raggiunge solo ciò che configuri — il tuo provider di identità, il tuo collettore di telemetria.

  • Ogni versione verificabile

    Ogni immagine è firmata per digest, con la sua distinta dei componenti e la sua provenienza; la pipeline verifica la firma prima di qualsiasi pubblicazione.

Disegno al tratto: pagine segnate in arancione scorrono su un nastro in una piccola macchina a ingranaggi con un quadrante, ed escono con riquadri tratteggiati al posto dei segni; accanto, una grande macchina che mostra un cervello resta scollegata, con la spina penzolante.
Regole e dizionari fanno il lavoro: nessun modello linguistico da chiamare.

Prova sulla pagina, poi scrivi a Contee.

La pagina risponde con lo stesso motore dell’API: incollaci un testo tipico dei tuoi flussi di lavoro. La sicurezza dell’immagine si verifica controllo per controllo sulla pagina CISO. Per l’API ospitata o l’offerta on-premise, scrivi a Contee.