Menu

PCI DSS-testdata: waarom echte kaarten nooit in tests horen

PCI DSS geldt ook voor testomgevingen. Leer wat geldt als gevoelige authenticatiegegevens, hoe maskering en tokens werken, en waarom synthetische data veiliger is.

Gepubliceerd

  • testdata
  • betalingen
  • compliance

Complianceregels volgen de data, niet het label van de omgeving, en dat is de zin die engineeringteams eruit pikt. Een PCI DSS-testdatabeleid bestaat omdat een testdatabase vol echte kaartnummers een datalek is dat staat te gebeuren — en omdat de standaard haar even serieus neemt als productie, hoe tijdelijk of intern het systeem ook voelt. Wanneer een staging-omgeving levende kaarthoudergegevens bevat, valt ze binnen scope, en iedereen met toegang ertoe ook.

Dit artikel legt uit wat de standaard op dit gebied vereist, welke soorten data geraakt worden, hoe maskering en tokenisatie de blootstelling verminderen, en waarom synthetische nummers de eenvoudigste manier zijn om een testomgeving helemaal buiten de discussie te houden.

De regel die engineeringteams verrast

De verrassing is altijd dezelfde: iemand kopieert een productietabel naar een staging-database zodat een bug kan worden gereproduceerd, en beschouwt de zaak als afgedaan omdat de omgeving niet openbaar is.

De standaard ziet dat anders. Overal waar kaarthoudergegevens worden opgeslagen, verwerkt of verzonden, gelden de eisen die ze beschermen. Dat omvat test- en ontwikkelomgevingen, interne tools, spreadsheets die voor een onderzoek worden geëxporteerd, back-upkopieën, en de berichtenwachtrij die een betaalverzoek tussen twee services draagt. Er is geen vrijstelling voor een systeem dat niet klantgericht is.

De praktische consequentie is dat gemakskopieën van productiedata de dure gewoonte zijn. Elke kopie vermenigvuldigt het aantal plekken waar een datalek kan optreden en het aantal systemen dat moet worden beoordeeld, en de kopie wordt zelden verwijderd wanneer het onderzoek eindigt.

Geldt PCI DSS voor testomgevingen?

Ja, met één belangrijke kwalificatie die ook de oplossing is. De eisen gelden voor omgevingen die echte kaarthoudergegevens verwerken. Ze gelden niet voor een omgeving die geen echte kaarthoudergegevens bevat, want er is daar niets te beschermen.

Die kwalificatie is wat synthetische testdata zo waardevol maakt. Een omgeving die volledig met gegenereerde waarden is gevuld, heeft geen gevoelige authenticatiegegevens om te bewaren, geen accountdata om te maskeren en geen echte klant om te waarschuwen bij een compromis. De scopevraag lost grotendeels op, en het engineeringteam kan ophouden rechtvaardigingen te schrijven.

Een belangrijke grens: de standaard staat testomgevingen niet toe echte data te gebruiken omdat die realistischer is. Als realisme het doel is, geeft synthetische data die uit dezelfde structurele regels is getrokken — correcte lengtes, geldige prefixen, consistente controlecijfers — hetzelfde gedrag in de software zonder de blootstelling.

Wat geldt als gevoelige authenticatiegegevens

Het onderscheid dat ertoe doet, is dat tussen accountdata en gevoelige authenticatiegegevens. Accountdata is het kaartnummer zelf, samen met de naam, de vervaldatum en de servicecode. Gevoelige authenticatiegegevens is alles wat zou kunnen worden gebruikt om een betaling te construeren: de beveiligingscode, de volledige inhoud van de magneetstrip, en de equivalente data die in een chip is opgeslagen.

De regels behandelen de tweede categorie strenger. Gevoelige authenticatiegegevens mogen worden gebruikt om een transactie te autoriseren en mogen na autorisatie in geen enkele vorm worden bewaard. Daarom is een kolom met de beveiligingscode in een ordertabel een compliancefout in plaats van een ontwerpvoorkeur, en daarom mag de data ook niet in logs, foutrapporten of herhaalpayloads opduiken. De gids over beveiligingscodes behandelt de praktische stappen om haar buiten die plekken te houden.

Het kaartnummer zelf mag worden opgeslagen, maar alleen met bescherming. De standaard verwacht dat opgeslagen accountdata onleesbaar wordt gemaakt voor iedereen die haar niet nodig heeft, en eist dat het nummer wordt gemaskeerd wanneer het wordt getoond — de gebruikelijke conventie is alleen de eerste zes en de laatste vier cijfers te tonen. De zes leidende cijfers worden getoond omdat ze de uitgever identificeren, wat vaak nodig is voor support en reconciliatie.

Data-element Mag na autorisatie worden opgeslagen Weergaveregel
Kaartnummer Ja, met bescherming Gemaskeerd, doorgaans eerste zes en laatste vier
Naam kaarthouder, vervaldatum Ja, met bescherming Gemaskeerd waar getoond
Beveiligingscode Nee Mag helemaal niet worden opgeslagen
Volledige magneetstrip of chipdata Nee Mag helemaal niet worden opgeslagen

Maskering, tokenisatie en synthetische data

Drie technieken worden samen genoemd en doen verschillend werk.

Maskering verbergt een deel van een waarde die nog volledig is opgeslagen. Ze vermindert wat een meekijker of een schermafbeelding kan onthullen, en is vereist voor weergave, maar vermindert het risico in de database zelf niet, omdat de onderliggende waarde er nog is.

Tokenisatie vervangt het kaartnummer door een referentie die door de betaalprovider wordt gehouden. Jouw systemen bewaren de referentie; de provider houdt de koppeling. Dit is een echte vermindering van blootstelling, omdat een gestolen database referenties oplevert die buiten de omgeving van de provider betekenisloos zijn. Het is ook de enige aanpak die herhaalde afboekingen mogelijk maakt zonder dat jouw systemen ooit het nummer vasthouden.

Synthetische data vervangt echte waarden door gegenereerde die aan dezelfde structurele regels voldoen. Niets hoeft te worden beschermd, omdat er niets echts aanwezig is. De beperking is getrouwheid: een gegenereerd nummer kan niet worden afgeschreven, kan niet in het systeem van een provider worden opgezocht en kan een klantspecifieke bug niet reproduceren. Dat maakt het de juiste standaard voor formuliertesten, belastingstests en demonstratieomgevingen, en het verkeerde gereedschap wanneer een probleem van een specifiek account afhangt.

Waarom is een gegenereerd nummer veiliger dan een gemaskeerd echt nummer?

Overweeg wat elke waarde voor een aanvaller waard is. Een gemaskeerd nummer is een echte referentie met een deel verborgen; als de volledige waarde ook elders in dezelfde organisatie bestaat — in een log, een back-up, een wachtrij — legt een datalek van een van die plekken een bruikbare kaart bloot. Een gegenereerd nummer is een reeks die nergens, op geen enkel moment, onder geen enkele configuratie naar iets verwijst.

Er is ook een subtieler voordeel. Een gegenereerde waarde kan niet per ongeluk worden gebruikt. Een gemaskeerd echt nummer wordt, als de maskering ooit door een debugwijziging of een export wordt opgeheven, weer een levende referentie zonder waarschuwing. Synthetische data heeft zo’n tweede staat niet. Elke kaart die de generator op deze site produceert is van deze soort: structureel geldig, consistent met de opmaakregels, en nooit aan iemand uitgegeven.

De eerlijke kanttekening is dat synthetische data nog steeds moet worden gelabeld. Een toekomstige beheerder die niet weet dat de waarden gegenereerd zijn, kan zich afvragen waarom een kaart niet kan worden afgeschreven, of erger, ze vervangen door echte om een test te laten slagen.

Voor ontwikkelaars: test en productie scheiden

De meeste blootstelling in de praktijk komt uit leidingwerk in plaats van uit beleid, dus het werk is grotendeels mechanisch.

Begin met referenties. Testsystemen horen testsleutels te bevatten, en productiesleutels horen in elke andere omgeving afwezig te zijn, inclusief de laptop van degene die debugt. Een configuratiecontrole bij het opstarten die weigert te starten wanneer de twee vermengd zijn, is de kleine moeite waard.

Kijk daarna naar hoe data tussen omgevingen beweegt. Een restore van een productieback-up naar staging is de meest voorkomende manier waarop echte kaarthoudergegevens ergens onverwachts terechtkomen; als een restore echt nodig is voor een prestatietest, moeten de waarden worden vervangen voordat het systeem bereikbaar is. De vervanging is veel eenvoudiger als de seedingstap in de repository leeft en opnieuw kan worden uitgevoerd, een idee dat wordt verkend in het artikel over een staging-database vullen met nepdata.

Controleer ten slotte wat de testomgeving wegschrijft. Logs, monitoringpayloads, foutrapporten en berichtenwachtrijen leggen allemaal fragmenten van verzoeken vast, en elk ervan kan een beveiligingscode of een ongemaskeerd nummer bevatten. Doorzoek de uitvoer van een volledige testrun op kaartvormige waarden; het resultaat is meestal informatiever dan welk beleidsdocument dan ook.

Compliante testdata verkrijgen

De pragmatische volgorde is gevoelige authenticatiegegevens uit elke omgeving verwijderen, tokeniseren waar naar een echt account moet worden verwezen, en al het overige genereren. De standaard zelf, gepubliceerd door de PCI Security Standards Council op pcisecuritystandards.org, is de gezaghebbende bron voor de actuele versie en de precieze formulering, en het is de moeite waard de secties over dataretentie en testomgevingen te lezen in plaats van op samenvattingen te vertrouwen.

Voor het synthetische deel produceert de kaartnummersgenerator op verzoek structureel geldige nummers, met bijpassende vervaldata en plaatsvervangende codes, en niets in de uitvoer verwijst naar een echt account. De checklist voor betaalformulieren beschrijft de stromen waarvoor die waarden moeten worden gebruikt.

Volgende stappen

Maak een lijst van elke plek waar echte kaartdata een niet-productiesysteem kan bereiken — back-ups, exports, debuglogs, wachtrijpayloads — en rangschik ze naar hoe makkelijk ze te verwijderen zijn. Vervang dan deze week de makkelijkste door gegenereerde data, en bevestig dat door de omgeving te doorzoeken op kaartvormige reeksen in plaats van te vragen of iemand ze heeft gekopieerd.

Verder lezen

Handleidingen over Generator voor valse creditcardnummers (testkaarten)