agentsclimarketplace

Pci dss compliance

Skill yigityildiz0/universal-ai-skill-library/skills/common/pci-dss-compliance

531 searchable AI Agent Skills for Claude Code, OpenAI Codex, and OpenCode — EN/TR catalog, platform and risk notes, direct ZIPs, and curated bundles.

Install
npx -y skills add yigityildiz0/universal-ai-skill-library --skill pci-dss-compliance

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

3 things to look at

  • 18 days oldThe repository was created 18 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Implement PCI-DSS v4.0 requirements for payment card data security. Use when handling payment card data, preparing for PCI audits, securing payment systems.

SKILL.md

16.2 KB, as published. Nobody here has run it

PCI-DSS v4.0 Compliance

Implement PCI Data Security Standard v4.0 requirements for secure handling of payment card data.

When to Use This Skill

Use this skill when you need to:

  • Process payment card data
  • Prepare for PCI-DSS audit
  • Implement payment security controls
  • Secure cardholder data environments
  • Meet merchant compliance requirements
  • Document PCI controls

Trigger phrases: "PCI DSS", "PCI compliance", "payment security", "card data", "cardholder data", "payment processing"

What This Skill Does

PCI-DSS v4.0 Requirements

RequirementFocusControls
1Network SecurityFirewalls, network segmentation
2Secure ConfigurationsHardening, defaults removal
3Account Data ProtectionEncryption, key management
4Transmission SecurityTLS, encryption in transit
5Malware ProtectionAnti-malware, vulnerability management
6Secure DevelopmentSecure SDLC, code review
7Access RestrictionNeed-to-know, least privilege
8User IdentificationAuthentication, MFA
9Physical AccessPhysical security controls
10Logging & MonitoringAudit trails, monitoring
11Security TestingPenetration testing, scanning
12Security PoliciesPolicies, procedures, training

Instructions

Step 1: Cardholder Data Environment (CDE) Definition

from enum import Enum
from dataclasses import dataclass

class DataClassification(Enum):
    PAN = "primary_account_number"
    CVV = "card_verification_value"
    PIN = "personal_identification_number"
    TRACK_DATA = "magnetic_stripe_data"
    CARDHOLDER_NAME = "cardholder_name"
    EXPIRATION = "expiration_date"
    SERVICE_CODE = "service_code"

@dataclass
class CDEAsset:
    """Asset within the Cardholder Data Environment."""
    asset_id: str
    name: str
    type: str  # server, database, application, network
    data_elements: list[DataClassification]
    location: str
    owner: str
    segmented: bool

class CDEInventory:
    """Maintain inventory of CDE assets."""

    def __init__(self):
        self.assets: list[CDEAsset] = []

    def add_asset(self, asset: CDEAsset) -> None:
        """Add asset to CDE inventory."""
        self.assets.append(asset)

        audit_log.info(
            "cde_asset_added",
            asset_id=asset.asset_id,
            name=asset.name,
            data_elements=[d.value for d in asset.data_elements]
        )

    def generate_data_flow_diagram(self) -> dict:
        """Generate CDE data flow diagram."""
        return {
            "assets": [self._asset_to_dict(a) for a in self.assets],
            "data_flows": self._map_data_flows(),
            "network_segments": self._identify_segments(),
            "entry_points": self._identify_entry_points()
        }

Step 2: Requirement 3 - Protect Stored Account Data

from cryptography.fernet import Fernet
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
import hashlib

class PANProtection:
    """PCI-DSS Requirement 3: Protect stored account data."""

    # 3.3: PANs must be rendered unreadable
    def mask_pan(self, pan: str) -> str:
        """Mask PAN for display - show only first 6 and last 4."""
        if len(pan) < 13:
            raise ValueError("Invalid PAN length")

        # PCI-DSS 3.4: Only first 6 and last 4 digits may be displayed
        return f"{pan[:6]}{'*' * (len(pan) - 10)}{pan[-4:]}"

    def encrypt_pan(self, pan: str, key_id: str) -> EncryptedPAN:
        """Encrypt PAN for storage."""
        # PCI-DSS 3.5: Strong cryptography required
        key = self.key_vault.get_key(key_id)

        fernet = Fernet(key.value)
        encrypted = fernet.encrypt(pan.encode())

        audit_log.info(
            "pan_encrypted",
            key_id=key_id,
            pan_last_four=pan[-4:]
        )

        return EncryptedPAN(
            ciphertext=encrypted,
            key_id=key_id,
            algorithm="AES-256"
        )

    def tokenize_pan(self, pan: str) -> str:
        """Tokenize PAN to remove from scope."""
        # Generate format-preserving token
        token = self.tokenization_service.tokenize(
            value=pan,
            format="numeric",
            length=len(pan)
        )

        audit_log.info(
            "pan_tokenized",
            pan_last_four=pan[-4:],
            token_last_four=token[-4:]
        )

        return token

    def hash_pan(self, pan: str) -> str:
        """One-way hash for PAN comparison (not for retrieval)."""
        # PCI-DSS allows keyed cryptographic hash
        return hashlib.sha256(
            (pan + self.hash_salt).encode()
        ).hexdigest()


class KeyManagement:
    """PCI-DSS 3.6: Cryptographic key management."""

    KEY_ROTATION_PERIOD_DAYS = 365
    KEY_TYPES = ["DEK", "KEK", "PIN_KEY"]

    def generate_key(self, key_type: str) -> CryptoKey:
        """Generate new cryptographic key."""
        if key_type not in self.KEY_TYPES:
            raise ValueError(f"Invalid key type: {key_type}")

        key = CryptoKey(
            id=f"KEY-{uuid.uuid4().hex[:12]}",
            type=key_type,
            algorithm="AES-256",
            created_at=datetime.utcnow(),
            expires_at=datetime.utcnow() + timedelta(days=self.KEY_ROTATION_PERIOD_DAYS),
            status="active"
        )

        # Store in HSM
        self.hsm.store_key(key)

        audit_log.info(
            "crypto_key_generated",
            key_id=key.id,
            key_type=key_type,
            expires_at=key.expires_at.isoformat()
        )

        return key

    def rotate_key(self, old_key_id: str) -> CryptoKey:
        """Rotate cryptographic key."""
        old_key = self.hsm.get_key(old_key_id)
        new_key = self.generate_key(old_key.type)

        # Re-encrypt data with new key
        self._reencrypt_data(old_key_id, new_key.id)

        # Retire old key
        old_key.status = "retired"
        self.hsm.update_key(old_key)

        audit_log.info(
            "crypto_key_rotated",
            old_key_id=old_key_id,
            new_key_id=new_key.id
        )

        return new_key

Step 3: Requirement 4 - Transmission Security

class TransmissionSecurity:
    """PCI-DSS Requirement 4: Protect cardholder data in transit."""

    # 4.2: Strong cryptography for transmission
    TLS_MINIMUM_VERSION = "TLS1.2"
    ALLOWED_CIPHER_SUITES = [
        "TLS_AES_256_GCM_SHA384",
        "TLS_CHACHA20_POLY1305_SHA256",
        "TLS_AES_128_GCM_SHA256",
    ]

    def validate_tls_config(self, endpoint: str) -> TLSValidationResult:
        """Validate TLS configuration for endpoint."""
        import ssl
        import socket

        context = ssl.create_default_context()
        context.minimum_version = ssl.TLSVersion.TLSv1_2

        try:
            with socket.create_connection((endpoint, 443)) as sock:
                with context.wrap_socket(sock, server_hostname=endpoint) as ssock:
                    version = ssock.version()
                    cipher = ssock.cipher()

                    return TLSValidationResult(
                        endpoint=endpoint,
                        valid=True,
                        tls_version=version,
                        cipher_suite=cipher[0],
                        certificate_valid=True
                    )
        except ssl.SSLError as e:
            return TLSValidationResult(
                endpoint=endpoint,
                valid=False,
                error=str(e)
            )

    def enforce_tls_policy(self) -> dict:
        """Define TLS enforcement policy."""
        return {
            "minimum_version": self.TLS_MINIMUM_VERSION,
            "allowed_ciphers": self.ALLOWED_CIPHER_SUITES,
            "certificate_requirements": {
                "minimum_key_size": 2048,
                "signature_algorithm": ["sha256", "sha384", "sha512"],
                "validity_period_days": 398
            },
            "hsts_enabled": True,
            "hsts_max_age": 31536000
        }

Step 4: Requirement 8 - Authentication

class PCIAuthentication:
    """PCI-DSS Requirement 8: Identify users and authenticate access."""

    # 8.2: Authentication requirements
    MIN_PASSWORD_LENGTH = 12  # v4.0 increased from 7
    PASSWORD_COMPLEXITY = True
    PASSWORD_HISTORY = 4
    MAX_LOGIN_ATTEMPTS = 6
    LOCKOUT_DURATION = timedelta(minutes=30)
    MFA_REQUIRED_FOR_CDE = True

    def validate_password(self, password: str) -> PasswordValidationResult:
        """Validate password meets PCI requirements."""
        errors = []

        if len(password) < self.MIN_PASSWORD_LENGTH:
            errors.append(f"Password must be at least {self.MIN_PASSWORD_LENGTH} characters")

        if self.PASSWORD_COMPLEXITY:
            if not any(c.isupper() for c in password):
                errors.append("Password must contain uppercase letter")
            if not any(c.islower() for c in password):
                errors.append("Password must contain lowercase letter")
            if not any(c.isdigit() for c in password):
                errors.append("Password must contain digit")
            if not any(c in "!@#$%^&*()_+-=[]{}|;:,.<>?" for c in password):
                errors.append("Password must contain special character")

        return PasswordValidationResult(
            valid=len(errors) == 0,
            errors=errors
        )

    def enforce_mfa(self, user: User, access_type: str) -> MFARequirement:
        """Determine and enforce MFA requirements."""
        # 8.4: MFA required for all access to CDE
        requires_mfa = (
            access_type == "cde_access" or
            user.has_cde_access or
            user.is_admin
        )

        if requires_mfa and not user.mfa_enabled:
            audit_log.warning(
                "mfa_required_not_enabled",
                user_id=user.id,
                access_type=access_type
            )
            raise MFARequiredError("MFA must be enabled for CDE access")

        return MFARequirement(
            required=requires_mfa,
            methods=["totp", "hardware_token", "push_notification"]
        )

Step 5: Requirement 10 - Logging and Monitoring

class PCIAuditLogging:
    """PCI-DSS Requirement 10: Log and monitor access."""

    # 10.2: Audit events to log
    REQUIRED_EVENTS = [
        "user_access_cardholder_data",
        "actions_by_admin_or_root",
        "access_to_audit_trails",
        "invalid_logical_access_attempts",
        "use_of_identification_mechanisms",
        "initialization_of_audit_logs",
        "creation_deletion_system_objects"
    ]

    def log_cde_access(
        self,
        user_id: str,
        action: str,
        resource: str,
        data_elements: list[str],
        outcome: str
    ) -> None:
        """Log access to cardholder data environment."""
        # 10.3: Required audit trail entries
        entry = {
            "timestamp": datetime.utcnow().isoformat(),
            "user_id": user_id,
            "action": action,
            "resource": resource,
            "data_elements": data_elements,
            "outcome": outcome,
            "source_ip": get_client_ip(),
            "source_location": self._geolocate_ip(get_client_ip()),
            "device_id": get_device_id(),
        }

        # Write to immutable log
        self.audit_store.write(entry)

        # Real-time alerting for suspicious activity
        if outcome == "failure" or action in ["delete", "export"]:
            self._evaluate_alert(entry)

    def configure_log_retention(self) -> LogRetentionPolicy:
        """Configure log retention per PCI requirements."""
        # 10.7: Retain audit trail history for at least one year
        return LogRetentionPolicy(
            retention_period_days=365,
            immediately_available_days=90,  # 3 months immediately available
            archive_storage="encrypted_cold_storage",
            integrity_protection="digital_signatures"
        )

    def setup_log_monitoring(self) -> MonitoringConfig:
        """Configure log monitoring and alerting."""
        return MonitoringConfig(
            real_time_alerts=[
                Alert(
                    name="multiple_failed_logins",
                    condition="failed_login_count > 5 within 5 minutes",
                    severity="high"
                ),
                Alert(
                    name="admin_action_outside_hours",
                    condition="admin_action and not business_hours",
                    severity="medium"
                ),
                Alert(
                    name="bulk_data_access",
                    condition="records_accessed > 1000 in single session",
                    severity="high"
                ),
            ],
            daily_review=True,
            automated_analysis=True
        )

Step 6: Requirement 11 - Security Testing

class PCISecurityTesting:
    """PCI-DSS Requirement 11: Regularly test security."""

    def schedule_vulnerability_scans(self) -> ScanSchedule:
        """Schedule vulnerability scans per PCI requirements."""
        # 11.3: Internal and external vulnerability scans
        return ScanSchedule(
            internal_scans={
                "frequency": "quarterly",
                "scope": "all_cde_systems",
                "passing_criteria": "no_high_or_critical_vulnerabilities"
            },
            external_scans={
                "frequency": "quarterly",
                "vendor": "PCI_ASV",  # Approved Scanning Vendor
                "scope": "external_facing_systems",
                "passing_criteria": "asv_compliant_scan"
            },
            after_significant_changes=True
        )

    def schedule_penetration_tests(self) -> PenTestSchedule:
        """Schedule penetration tests per PCI requirements."""
        # 11.4: Penetration testing
        return PenTestSchedule(
            frequency="annual",
            scope=[
                "Network layer testing",
                "Application layer testing",
                "Segmentation validation",
            ],
            methodology="industry_accepted",  # PTES, OWASP, etc.
            retesting_required_for_findings=True
        )

    def validate_segmentation(self) -> SegmentationTest:
        """Validate network segmentation."""
        # 11.4.5: Segmentation testing
        return SegmentationTest(
            frequency="at_least_annually",
            methodology=[
                "Port scanning from non-CDE to CDE",
                "Protocol analysis",
                "Firewall rule validation",
                "Data flow analysis"
            ],
            passing_criteria="no_unauthorized_access_paths"
        )

Documentation Requirements

Required Documents

  • CDE network diagram
  • Data flow diagram
  • Asset inventory
  • Security policies
  • Incident response plan
  • Change management procedures

Required Evidence

  • Vulnerability scan reports (quarterly)
  • Penetration test reports (annual)
  • Firewall rule reviews (semi-annual)
  • User access reviews (quarterly)
  • Log review evidence
  • Training records

Quality Checklist

  • CDE scope defined and documented
  • All 12 requirements addressed
  • Cardholder data encrypted
  • Strong cryptography implemented
  • MFA enabled for CDE access
  • Logging and monitoring active
  • Vulnerability scans passing
  • Penetration testing completed
  • Policies documented and approved

Related Skills

  • soc2-compliance - SOC 2 implementation
  • security-review - Security vulnerability review
  • dependency-security-audit - Dependency scanning

Version: 1.0.0 Last Updated: December 2025 Based on: AI Templates compliance_governance/compliance_frameworks/

Iterative Refinement Strategy

This skill is optimized for an iterative approach:

  1. Execute: Perform the core steps defined above.
  2. Review: Critically analyze the output (coverage, quality, completeness).
  3. Refine: If targets aren't met, repeat the specific implementation steps with improved context.
  4. Loop: Continue until the definition of done is satisfied.

Gives 0 of the 12 instructions most regulatory compliance skills give

Counted across 187 of the 188 authors here whose files we hold, read 2026-08-06

  • retain audit logs for at least 6 yearsin 10 of 187, across 8 files
  • remove or alter HIPAA identifiersin 9 of 187, across 4 files
  • document patient consent for publicationin 9 of 187, across 4 files
  • stamp files after creating or modifying themin 8 of 187, across 2 files
  • inspect detailed trust scores before modifying filesin 8 of 187, across 2 files
  • check root account mfa statusin 8 of 187, across 2 files
  • check for unused credentials over ninety days oldin 8 of 187, across 2 files
  • check iam users for mfa enforcementin 8 of 187, across 2 files
  • verify cloudtrail is enabled and loggingin 8 of 187, across 2 files
  • check s3 bucket access logging configurationin 8 of 187, across 2 files
  • read existing metadata before modifying filesin 8 of 187, across 2 files
  • run compliance audits using the specified regulationsin 8 of 187, across 2 files

Said here and by no other author read

  • Maintain cardholder data environment asset inventory
  • Mask primary account numbers showing only first six and last four digits
  • Encrypt primary account numbers for storage using strong cryptography
  • Rotate cryptographic keys at least annually
  • Require passwords to be at least twelve characters long
  • Log all access to cardholder data

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.