Hard-coded secrets
Why it fails: Secrets embedded in code or configuration can be duplicated across repositories, builds, hosts, and environments.
Stronger design: Reference a protected secret or key service and grant only the workload access it requires.
Evidence: Secret reference, workload identity, access policy, deployment metadata, rotation record.
One key for multiple environments
Why it fails: Development, staging, and production become part of one shared trust boundary.
Stronger design: Use environment-specific key scope and ownership.
Evidence: Environment field, key ID, workload scope, access policy, inventory.
One certificate for unrelated services
Why it fails: Identity binding becomes vague and service trust is harder to reason about.
Stronger design: Use certificates that map clearly to the intended service or workload identity.
Evidence: Subject identity, relying systems, issuer, owner, environment.
Shared private signing key
Why it fails: Multiple publishers can create signatures under the same signer identity.
Stronger design: Give each signing identity narrow custody and an explicit publishing role.
Evidence: Signer ID, signing service, custody boundary, authorization, verification logs.
No certificate renewal owner
Why it fails: Expiration becomes an avoidable outage.
Stronger design: Assign certificate owner, renewal window, monitoring, rollout, and rollback.
Evidence: Owner, expiration date, renewal ticket, monitoring source, rollout state.
Trusting a retired CA
Why it fails: Old certificates may remain accepted long after the issuing trust domain should have ended.
Stronger design: Map dependencies, migrate valid identities, then remove obsolete trust anchors.
Evidence: Trust-store inventory, CA state, dependency map, closure evidence.
Deleting old keys too early
Why it fails: Retained data, backups, or historical signatures may still depend on the old key.
Stronger design: Retire only after dependency and retention closure.
Evidence: Data-version mapping, restore test, archival need, retirement approval.
Keeping old keys forever
Why it fails: Unnecessary historical key material expands exposure and operational complexity.
Stronger design: Retain only while there is a documented dependency or historical-validation need.
Evidence: Retention reason, dependent data, expiry date, retirement ticket.
Encryption assumed to solve authorization
Why it fails: Authorized users or workloads may still have more data access than policy allows.
Stronger design: Keep identity/access policy separate from encryption.
Evidence: Authorization policy, role mapping, data classification, key policy.
Hash treated as signer proof
Why it fails: Anyone with the same content can compute the same digest.
Stronger design: Use digital signatures or another authenticated publishing relationship when signer identity matters.
Evidence: Signer identity, verification trust, signed manifest, approval record.
Signature treated as confidentiality
Why it fails: Signed content can still be readable.
Stronger design: Use encryption for confidentiality and signatures for authenticity/integrity.
Evidence: Protection-goal mapping, encryption policy, signature policy.
Recovery bypass becomes normal access
Why it fails: Emergency privileges or key copies escape normal ownership and monitoring.
Stronger design: Use time-bounded recovery access, explicit approval, evidence, and cleanup.
Evidence: Recovery ticket, access window, operator identity, post-use review.