Penweir is in ontwikkeling en deze pagina beschrijft het gedrag van Fase 1. We vertellen je liever waar de grenzen liggen dan dat je ze zelf ontdekt.
Dit garandeert het
Er wordt geen payload opgeslagen. Prompts, completions, tool calls, tool-resultaten en de tokenmappings waarmee weggelakte waarden worden hersteld leven voor één verzoek in het geheugen en nergens anders. Ze komen niet in de database, de logs of een bestand. Er zijn geen metrics of traces waar ze in kunnen lekken.
- Hoe: de token vault wordt gewist als een verzoek eindigt, hoe het ook eindigt. Logs worden opgebouwd uit een allowlist van getypeerde velden en foutmeldingen worden teruggebracht tot typenamen. Foutresponses gebruiken vaste teksten.
- Hoe het getest wordt: een geautomatiseerde test stuurt unieke canary-strings door de echte server langs elk pad: succes, streaming, fouten van de provider, ongeldige en geblokkeerde verzoeken, geblokkeerde antwoorden, foute keys en afgebroken clients. Daarna doorzoekt hij de databasebestanden, de logs en de tijdelijke map, op SQLite en op Postgres. Eén treffer laat de build falen.
Het auditlog bevat alleen metadata. Wie, wanneer, welke applicatie, pipeline, provider en model, tokenaantallen, latencies, hoeveel waarden elke detector vond en wat ermee gedaan is. Elke string in een auditgebeurtenis is een identifier of een vaste code, en een schematest faalt bij elke kolom die vrije tekst kan bevatten.
Ingestelde detectors draaien bij elk verzoek. Verzoekstappen draaien vóór elke aanroep naar een provider, op berichttekst van elke rol, tool-resultaten, tool-call-argumenten en het veld user. Noemt een pipeline een detector die niet bestaat, dan is de gateway niet ready. Hij draait niet zonder die stap.
Een block is een block. Een block-stap stopt het verzoek voordat een provider het ziet. Een block op het antwoord stopt het antwoord, en in een stream wordt de bijbehorende waarde nooit verstuurd.
Getest tegen een nepprovider. Onder het voorbeeldbeleid bereiken IBAN’s, e-mailadressen en BSN’s de provider nooit.
Geen verbinding naar huis. Penweir praat alleen met de providers in je configuratie. Een containertest draait de image op een netwerk zonder route naar buiten en controleert of het nog werkt.
Dit garandeert het niet
Het herkent geen namen of vrije adressen in lopende tekst. Detectie is regelgebaseerd: patronen plus checksums voor gestructureerde identifiers. “Jan de Vries woont aan het eind van de straat” gaat ongemoeid door. Gebruik voor gestructureerde data veldstappen op keys als customer_name.
Het vangt niet elk formaat. Een detector vindt wat hij gebouwd is te vinden: een IBAN met uitgeschreven letters of een telefoonnummer in woorden komt door. Patronen zijn afgesteld op liever een valse positief dan een gemiste.
Het scant geen afbeeldingen, audio of bestanden. Die worden geweigerd, tenzij een pipeline allow_non_text zet. Dan gaan ze ongescand door.
Een treffer in een naam of id blokkeert het verzoek. Toolnamen, schemanamen, berichtnamen, tool-call-id’s en JSON-keys kunnen niet worden herschreven zonder het verzoek te breken, dus een detectortreffer daar blokkeert het verzoek.
Het beschermt niet wat het model doet met de data die het krijgt. Penweir bepaalt wat een provider bereikt, niet wat de provider ermee doet. Kies providers en verwerkersvoorwaarden daarop.
Het beschermt niet tegen een gecompromitteerde host. Wie de machine beheert waarop Penweir draait, kan het geheugen, de master key en het verkeer lezen.
Tokens zijn geen versleuteling. Een token als [EMAIL_1#a3f9c2] verbergt de waarde voor de provider. De provider ziet nog steeds dat er een e-mailadres stond, en dat twee vermeldingen hetzelfde adres zijn.
Hashes zijn te raden bij kleine waardenruimtes. hash gebruikt een geheime sleutel per installatie. Een provider kan hem niet omkeren zonder de sleutel, maar wie de sleutel heeft kan gokken testen.
Zie het threat model voor tegen wie Penweir beschermt, en de securitypagina voor de architectuur.