Back to list
igbuend

self-managed-cryptography

by igbuend

A repository of security related skills - like secure code review and pentesting - for Claude and other AI.

2🍴 1📅 Jan 24, 2026

SKILL.md


name: self-managed-cryptography description: Security pattern for systems that manage cryptographic keys themselves rather than delegating to an external service. Use when the application must store, retrieve, and manage cryptographic keys directly. Implementation of Cryptographic Key Management pattern. Covers key storage security, key derivation from passwords, limiting key exposure, and protecting key confidentiality and integrity throughout the lifecycle.

Self-Managed Cryptography Security Pattern

In this pattern, the system itself manages the cryptographic keys, including storage and retrieval when necessary. The system is responsible for ensuring the confidentiality and integrity of cryptographic keys throughout their lifetime.

Key Responsibilities

When using self-managed cryptography, the system must handle:

  • Key storage - Secure persistent storage of keys
  • Key retrieval - Secure access to stored keys when needed
  • Key distribution - Secure transmission of keys when required
  • Key revocation - Proper invalidation and destruction of keys

Core Components

RoleTypeResponsibility
ApplicationEntityInteracts with cryptographic library and manages keys
CryptographerCryptographic PrimitiveLibrary performing cryptographic operations
Key StorageStoragePersistently stores cryptographic key material

Note: The Application inherits the Entity role from the parent Cryptographic Key Management pattern.

Data Elements

  • keyConf: Configuration for key generation (e.g., key length) - optional
  • key: The actual cryptographic key material used by the Cryptographer
  • id: Identifier used to store and retrieve keys from Key Storage
  • input: Data on which cryptographic operation should be performed
  • output: Result of the cryptographic operation
  • config: Configuration for the cryptographic operation - optional

Actions

  • generate_key: Generate new cryptographic key according to configuration
  • store_key: Store the cryptographic key under given identifier in Key Storage
  • get_key: Retrieve key information from Key Storage
  • crypto_action: Perform cryptographic operation (encrypt, sign, etc.)

Pattern Flow

Key Generation and Storage

Application → [generate_key(keyConf)] → Cryptographer
Cryptographer → [key] → Application
Application → [store_key(id, key)] → Key Storage

The Application requests key generation from the Cryptographer, then stores the returned key in Key Storage with a chosen identifier.

Key Retrieval and Use

Application → [get_key(id)] → Key Storage
Key Storage → [key] → Application
Application → [crypto_action(input, key, config)] → Cryptographer
Cryptographer → [output] → Application

To use a stored key, the Application retrieves it from Key Storage, then provides it to the Cryptographer along with the input data.

Key Difference from Cryptography as a Service

AspectSelf-Managed CryptographyCryptography as a Service
Key possessionApplication holds actual key materialSystem holds only key identifiers
Key storageManaged by applicationManaged by external service
Key exposure riskHigher (keys in application memory)Lower (keys never exposed)
ControlFull control over keysDependent on service provider
ResponsibilityFull responsibility for key securityShared with service provider

Critical Security Considerations

Key Generation

Never implement custom key generation algorithms.

Generating good (random and unpredictable) cryptographic keys is complex. Always use the appropriate functions offered by the cryptographic library.

Key Derivation from Passwords

When deriving keys from user-provided passwords:

  • Always use a suitable key derivation function (KDF)
  • Use functions from the chosen cryptographic library
  • Never devise custom key derivation algorithms

Recommended KDFs:

FunctionNotes
Argon2Modern, recommended for new applications
scryptMemory-hard, good alternative
PBKDF2Use if FIPS-140 compliance is required

Verify that your cryptographic library uses up-to-date key derivation functions.

Key Storage Security

The Key Storage must protect cryptographic keys throughout their lifecycle:

Platform Security Features (Preferred):

  • Take advantage of OS and hardware security features when possible
  • Store keys in cryptographic modules (HSM, TPM) when available

When Platform Features Unavailable:

  • Limit physical access to storage medium (protected area)
  • Implement logical access controls (authentication, authorization)

Key Integrity Verification:

  • Use MACs or digital signatures computed from the key
  • Periodically verify integrity of all stored keys

Key Recovery:

  • Maintain key copies in physically separate locations
  • Enables restoration after unauthorized modifications

Key Confidentiality and Integrity in Transit

Both integrity and confidentiality of keys must be protected:

  • During transmission between entities
  • At rest in Key Storage

Exception: Confidentiality can be relaxed for public keys only (e.g., when verifying digital signatures).

Key Identifier (id) Protection

The identifier determines which key is used for cryptographic actions.

Risk: An attacker who can tamper with the id (e.g., change it to match a known key) can negate all security guarantees.

Required Protections:

  • Protect id from tampering during transmission over uncontrolled channels
  • Protect id from tampering when stored by Application

Limiting Key Exposure

Since the Application processes actual cryptographic keys, minimize exposure:

PracticeDescription
Minimize time in memoryLoad keys only when needed, clear immediately after
Zeroize memoryOverwrite key material before freeing memory
Avoid loggingNever log key material
Limit copiesMinimize the number of key copies in memory
Secure memoryUse secure memory allocation when available

Implementation Checklist

  • Key generation uses cryptographic library functions (no custom algorithms)
  • Password-derived keys use proper KDF (Argon2, scrypt, or PBKDF2)
  • Key Storage protects confidentiality and integrity
  • Platform security features utilized where available
  • Physical and logical access to storage restricted
  • Key integrity verified periodically (MACs/signatures)
  • Key backups maintained in separate locations
  • Keys protected during transmission
  • Key identifiers protected from tampering
  • Key exposure minimized (memory cleared after use)
  • Public key exception applied only where appropriate

When to Choose Self-Managed vs. As-a-Service

Choose Self-Managed Cryptography when:

  • Full control over keys is required
  • Offline operation is necessary
  • Regulatory requirements mandate key custody
  • Integration with external KMS is not feasible

Choose Cryptography as a Service when:

  • Reducing key exposure risk is priority
  • External expertise in key management is desired
  • Cloud-native deployment is standard
  • Audit and compliance features are needed out-of-box
  • Cryptographic Key Management (parent pattern)
  • Cryptography as a Service (alternative implementation)
  • Cryptographic Action (uses keys managed by this pattern)
  • Encryption (specific cryptographic action)
  • Digital Signature (specific cryptographic action)
  • Message Authentication Code (specific cryptographic action)

References

Score

Total Score

70/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

+10
人気

GitHub Stars 100以上

0/15
最近の活動

3ヶ月以内に更新がある

0/10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

0/5

Reviews

💬

Reviews coming soon