Our organization has been asked to comply with PCI DSS.

As part of IT Department, we need to demonstrate that none of our IT infrastructure stores any carhdolder data nor sensitive authetication data. That is like 7 types of data (i.e PAN, cardholder name, service code, expiration date, full magnetic stripe, validation code, PIN) We have tried some tools that search files and helps us to identify PANs, but none of them identify patterns for the rest of the data types such as service code, full magnetic stripe or validation code which are sensitive data and according to PCI should not be stored whatsoever. How could we perform a similar scanning in a database?

What would be the best technical way to demonstrate we don't store any of that data?

  • 4
    You want to prove that something doesn't exist? Jul 2, 2015 at 19:54

3 Answers 3


As one comment above says, you're trying to prove a negative and that's quite difficult! Using tools which search for regular expressions are useful but they often return many false positives and are unable to search many file types. As a result, the use of a tool should be a single tool within your arsenal.

You can review what systems and application handle cardholder data and look at log files, error files, database tables and verify cardholder data is not present. If you used to have cardholder data, you could review the legacy storage locations and verify any purges have been successful and that backup media has been over-written or destroyed.

The PCI DSS scope states that the PAN is the defining factor for cardholder data. If you have a cardholder name or expiration date and no PAN, there's no issue.


The most common way to prove cardholder data isn't on a system is to use a tool to scan that system for cardholder data such as ccsrch.

Acording to the PCI DSS

Cardholder Data: At a minimum, cardholder data consists of the full PAN. 
Cardholder data may also appear in the form of the full PAN plus any of the following:
cardholder name, expiration date and/or service code See Sensitive Authentication Data
for additional data elements that may be transmitted or processed (but not stored) as
part of a payment transaction.

The key word here being PLUS any of the following: cardholder name, expiration date ect... If you can prove PANs don't exist then cardholder names and expiration dates aren't necessarily cardholder data. The CVV code should still never be stored ever, but proving that every 3 or 4 digit number is or isn't a CVV is impossible so this comes down to data flows and ensuring these things aren't stored. It would be best to ask your auditor how they'd like you to prove the non existence of cardholder data and on which systems they need proof for.

The Spider tool from Cornell used to be quite popular but I believe they charge for it now.

You can find a blog post with other options HERE (thanks google).

  • that tool only does PAN - the OP specifically says they have tools for PAN but not the rest of the data
    – schroeder
    Jul 2, 2015 at 22:37
  • 1
    ccsrch does search for track data as well. Edited answer to point out that if PANs aren't found then the rest of the data isn't cardholder data.
    – JekwA
    Jul 2, 2015 at 22:47
  • Cardholder data isn't the only kind of data that needs protection: pcisecuritystandards.org/pdfs/pci_fs_data_storage.pdf
    – schroeder
    Jul 2, 2015 at 22:55
  • 1
    Without the presence of a PAN it's impossible to know if someone's name and a date paired with it is CC data. It could be a service sign up, or termination date.
    – JekwA
    Jul 2, 2015 at 23:03

One of the items that the DSS requires is a diagram showing the flow of PCI data through the system and network. When I have been asked to prove this negative, I have shown the questioner the code architecture, which also shows the data objects, the paths they use, and where the data is stored/removed. I follow up with showing the systems that the data passes through and perform an examination for CC numbers on a statistically relevant sample (log files, both application and system).

As explained above, I am not proving a negative, but by going through these steps, and having the proper documentation available, the questioner seems to be more accepting of the fact that our processes do not require the storage of the PAN and that is implemented within code.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .