From secret-squirrel
Encrypt and decrypt skill trees using a YubiKey-derived symmetric key (HMAC-SHA1 + OpenSSL AES-256). Manages provisioning, encryption, decryption, and status of zero-trust protected skills.
How this skill is triggered — by the user, by Claude, or both
Slash command
/secret-squirrel:zero-trustThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are managing encrypted skills using a YubiKey HMAC-SHA1 challenge-response key and OpenSSL AES-256-CBC encryption.
You are managing encrypted skills using a YubiKey HMAC-SHA1 challenge-response key and OpenSSL AES-256-CBC encryption.
zero-trust-skill-key-v1) is sent to the YubiKeyopenssl enc -aes-256-cbc -pbkdf2SKILL.md.enc — plaintext SKILL.md only exists when unlockedThe SessionStart hook auto-decrypts if a YubiKey is present. The SessionEnd hook removes plaintext.
All encrypt/decrypt operations start with this:
# Convert challenge to hex and get HMAC response from YubiKey (touch required)
CHALLENGE_HEX=$(printf 'zero-trust-skill-key-v1' | xxd -p | tr -d '\n')
PASSPHRASE=$(ykchalresp -2 "$CHALLENGE_HEX" 2>/dev/null || ykman otp calculate 2 "$CHALLENGE_HEX" 2>/dev/null)
Tell the user to touch their YubiKey before running this.
Parse $ARGUMENTS to determine which operation to perform.
provisionProgram the HMAC-SHA1 secret onto a YubiKey's OTP slot 2. This is a one-time setup per YubiKey.
ykman infoykman -r '' otp info
First key:
# Generate a random 20-byte HMAC secret
SECRET=$(openssl rand -hex 20)
echo "SECRET: $SECRET"
echo "SAVE THIS — you need it to provision additional YubiKeys."
echo "Destroy it after all keys are programmed."
# Program onto slot 2 (user must touch YubiKey)
ykman -r '' otp chalresp --touch --force 2 $SECRET
Additional key:
ykman -r '' otp chalresp --touch --force 2 <hex-secret>
CHALLENGE_HEX=$(printf 'zero-trust-skill-key-v1' | xxd -p | tr -d '\n')
ykchalresp -2 "$CHALLENGE_HEX"
If this is an additional key, verify the response matches the first key's response
Tell the user: destroy the plaintext secret once all keys are provisioned. It now lives only on the YubiKey hardware.
encrypt <skill-name>Encrypt a skill's SKILL.md file.
skills/<skill-name>/SKILL.md in the secret-squirrel plugin directory.enc file alongside it)CHALLENGE_HEX=$(printf 'zero-trust-skill-key-v1' | xxd -p | tr -d '\n')
PASSPHRASE=$(ykchalresp -2 "$CHALLENGE_HEX")
openssl enc -aes-256-cbc -pbkdf2 -salt \
-in skills/<skill-name>/SKILL.md \
-out skills/<skill-name>/SKILL.md.enc \
-pass "pass:$PASSPHRASE"
openssl enc -aes-256-cbc -pbkdf2 -d \
-in skills/<skill-name>/SKILL.md.enc \
-pass "pass:$PASSPHRASE" \
| diff skills/<skill-name>/SKILL.md - > /dev/null
rm skills/<skill-name>/SKILL.md
.gitignore:echo 'skills/<skill-name>/SKILL.md' >> .gitignore
Print a summary confirming the skill is encrypted.
decrypt <skill-name>Manually decrypt a specific skill (the SessionStart hook does this automatically).
skills/<skill-name>/SKILL.md.encCHALLENGE_HEX=$(printf 'zero-trust-skill-key-v1' | xxd -p | tr -d '\n')
PASSPHRASE=$(ykchalresp -2 "$CHALLENGE_HEX")
openssl enc -aes-256-cbc -pbkdf2 -d \
-in skills/<skill-name>/SKILL.md.enc \
-out skills/<skill-name>/SKILL.md \
-pass "pass:$PASSPHRASE"
lockRemove all decrypted plaintext, leaving only .enc files:
<plugin-root>/scripts/zero-trust.sh lock
statusShow the lock/unlock state of all encrypted skills:
<plugin-root>/scripts/zero-trust.sh status
brew install ykman or apt install yubikey-managerbrew install ykpers (macOS) — provides ykchalresp, needed because macOS HID driver blocks ykman otp calculate.gitignore is updatedykchalresp or ykman otp commandzero-trust-skill-key-v1 — changing it would invalidate all encrypted filesykman -r '' otp ... for programming commands — the -r '' reader override avoids macOS HID conflictsnpx claudepluginhub jared-henry/claude-marketplace --plugin secret-squirrelAuto-discovers and provides access to cryptography skills for encryption, TLS/SSL, certificates, PKI, hashing, signing, and security best practices.
Validates encryption implementations, audits crypto algorithms, and verifies key management in codebases and configs. Activates for data security reviews.
Provides cryptography guidance on encryption (AES-256-GCM, ChaCha20), password hashing (Argon2id, bcrypt), signatures (Ed25519), TLS config, key management. Use for implementing or reviewing crypto.