← Back to Skills Marketplace
dashbot-0001

Dashpass

by DashBot-0001 · GitHub ↗ · v0.8.1 · MIT-0
cross-platform ⚠ suspicious
175
Downloads
0
Stars
0
Active Installs
10
Versions
Install in OpenClaw
/install dashpass
Description
Encrypted credential vault on Dash Platform for AI agents. Store and retrieve API keys, tokens, and passwords — encrypted on-chain, decryptable only by you....
README (SKILL.md)

\x3C!-- Safety: this file is documentation only — no executable code -->

DashPass — Encrypted Credential Vault on Dash Platform

DashPass lets you store API keys, passwords, and other secrets encrypted on the Dash blockchain. Only someone with your private key can decrypt them — not the blockchain nodes, not your AI agent, not anyone else.

Your AI agent calls a CLI tool to store and retrieve credentials. Encryption happens locally before anything touches the network. The blockchain only ever sees ciphertext. Think of it as a password manager where the "cloud" is a decentralized blockchain.

Why DashPass Instead of a .env File

.env file DashPass
Where secrets live Plain-text file on one machine Encrypted on decentralized blockchain
Disk failure Secrets gone (unless backed up) Recoverable with your key
Encryption None AES-256-GCM per credential
Rotation tracking Manual Built-in version history
Expiry alerts None check --expiring-within 7d
Multi-machine Copy file around (risky) Any machine with your key

Quick Reference

CLI=skills/dashpass/scripts/dashpass-cli.mjs

# Store a credential
echo "sk-xxx" | node $CLI put --service anthropic-api --type api-key --level sensitive --label "Anthropic key" --value-stdin

# Retrieve a credential
node $CLI get --service anthropic-api --pipe

# Retrieve via mutual confirmation (2-of-2 Shamir shares)
node $CLI get --service anthropic-api --mutual

# List all credentials
node $CLI list

# Rotate to new value
echo "sk-NEW" | node $CLI rotate --service anthropic-api --value-stdin

# Check expiring credentials
node $CLI check --expiring-within 7d

# Vault status + credit balance
node $CLI status

# Delete a credential
node $CLI delete --service my-service

# Export as env vars (for eval)
eval $(node $CLI env --services anthropic-api,brave-search-api)

# Initialize Shamir 2-of-2 shares from CRITICAL_WIF
node $CLI init-shares

# Check share health
node $CLI share-status

Mutual Confirmation Protocol

DashPass supports a 2-of-2 mutual confirmation mode using Shamir Secret Sharing over GF(2^8). This upgrades the single-key Scheme C to require both Evo (main agent) and CC (execution agent) to agree before any credential can be decrypted.

How It Works

  1. init-shares: Splits the 32-byte private key derived from CRITICAL_WIF into two Shamir shares using a random degree-1 polynomial evaluated at x=1 (Share A) and x=2 (Share B).
  2. Share storage: Share A goes to ~/.dashpass/evo.share, Share B to ~/.dashpass/cc.share (both 0600 permissions).
  3. get --mutual: Reads both shares, combines via Lagrange interpolation to reconstruct the private key, derives the per-credential AES key (same ECDH+HKDF as Scheme C), decrypts, then zeroes all sensitive buffers.
  4. Audit trail: Every request/approval/denial/execution is logged to ~/.dashpass/audit.log in JSONL format. No key or share material is ever logged.

Security Properties

  • Information-theoretic: Neither share alone reveals any information about the key (each byte is independently split).
  • Backward-compatible: Without shares, get still works via Scheme C. With shares, get --mutual uses the new protocol.
  • Memory-safe: Private key bytes and AES keys are zeroed immediately after use via Buffer.fill(0).

Setup

# One-time: generate shares from CRITICAL_WIF
node $CLI init-shares

# Verify health
node $CLI share-status

Architecture

Encryption Flow (Scheme C)

CRITICAL_WIF
  │
  ▼
wifToPrivateKey()           ← Base58Check decode, extract 32-byte private key
  │
  ▼
ECDH self-sign (secp256k1)  ← computeSecret(getPublicKey()) → sharedSecret
  │
  ▼
HKDF-SHA256                 ← hkdfSync('sha256', sharedSecret, salt, 'dashpass-v1', 32)
  │
  ▼
AES-256-GCM                 ← per-credential encrypt/decrypt
  │
  ▼
Dash Platform               ← encryptedBlob + salt + nonce stored on-chain

Each credential gets a unique salt (32 bytes) and nonce (12 bytes), so even identical plaintext values produce different ciphertext.

Mutual Confirmation Flow (Shamir 2-of-2)

  INIT (one-time):
  ┌─────────────────────────────────────────┐
  │  CRITICAL_WIF → 32-byte private key     │
  │       │                                  │
  │       ▼                                  │
  │  For each byte i:                        │
  │    a0 = key[i], a1 = random              │
  │    f(x) = a0 ⊕ (a1 · x)   [GF(2^8)]   │
  │       │                                  │
  │  ┌────┴────┐                             │
  │  ▼         ▼                             │
  │ f(1)      f(2)                           │
  │ Share A   Share B                        │
  │ evo.share cc.share                       │
  │ (0600)    (0600)                         │
  └─────────────────────────────────────────┘

  DECRYPT (each request):
  ┌─────────────────────────────────────────┐
  │  1. CC: requestDecrypt(service, reason)  │
  │  2. Evo: approveDecrypt(request)         │
  │  3. combineShares(A, B)                  │
  │       │                                  │
  │       ▼                                  │
  │  Lagrange interpolation at x=0:          │
  │    key[i] = sA[i]·L1 ⊕ sB[i]·L2        │
  │    L1 = 2·inv(3), L2 = inv(3)           │
  │       │                                  │
  │       ▼                                  │
  │  Reconstructed private key               │
  │       │                                  │
  │       ▼                                  │
  │  ECDH + HKDF → AES key → decrypt        │
  │       │                                  │
  │       ▼                                  │
  │  Zero all buffers (privKey, aesKey,      │
  │  sharedSecret)                           │
  └─────────────────────────────────────────┘

Key design choices:

  • Split the raw private key, not derived AES keys. One pair of shares covers all credentials — no per-credential splitting needed.
  • GF(2^8) with irreducible polynomial 0x11d. Standard Rijndael/AES field. Byte-level operations, no bignum library required.
  • Precomputed Lagrange coefficients. L1 and L2 are constants (2-of-2 at x=1, x=2), computed once at module load.

Security Model

What This Protects Against

Threat Protection
Single share compromise Neither share alone reveals any information about the key (information-theoretic security in GF(2^8))
Unauthorized decryption Both shares must be present — a rogue process with access to only one share file cannot decrypt
Key material in memory All sensitive buffers (privKeyBytes, aesKey, sharedSecret) are zeroed with Buffer.fill(0) after use
Audit evasion Every request/approve/deny/execute is logged to ~/.dashpass/audit.log in JSONL format; no key material is ever logged
File permission escalation Share files are stored with 0600 permissions; directory is 0700
Corrupted shares init-shares performs a round-trip verification before declaring success

What This Does NOT Protect Against

Limitation Explanation
Same-machine attacker with root Both shares live on the same filesystem. A root-level attacker can read both. This is a same-machine deployment limitation.
JavaScript string immutability Hex-encoded share strings are JS immutable strings — they cannot be zeroed from memory. They persist until garbage collected.
Process memory dump If the process is memory-dumped during executeDecrypt, the reconstructed key is briefly in a Buffer. The window is minimized but not zero.
Share file backup/sync If ~/.dashpass/ is included in backups or cloud sync, shares may be replicated to less-secure locations.

Honest Assessment

The current deployment is same-machine 2-of-2: both Evo (main agent) and CC (execution agent) run on the same host. This means:

  • The security gain is procedural, not physical — it enforces a two-step confirmation workflow and audit trail, preventing a single code path from silently accessing credentials.
  • It is not equivalent to a true multi-party setup where shares are on different machines controlled by different entities.
  • The upgrade path to cross-machine deployment is straightforward: move cc.share to a separate host and replace readShareB() with a network request.

Troubleshooting

Share files missing or corrupted

# Check share health
node $CLI share-status

# If shares are missing or unhealthy, re-initialize:
rm -f ~/.dashpass/evo.share ~/.dashpass/cc.share
node $CLI init-shares

Note: Re-initializing creates new shares from CRITICAL_WIF. Existing encrypted credentials are unaffected — they are decrypted using the same private key derived from the same WIF.

Permission errors on share files

# Shares must be 0600, directory must be 0700
chmod 700 ~/.dashpass
chmod 600 ~/.dashpass/evo.share ~/.dashpass/cc.share

If init-shares reports success but share-status shows wrong permissions, check if a umask override is active.

get --mutual fails with decryption error

  1. Verify shares are healthy: node $CLI share-status — both must show Healthy: yes
  2. Verify WIF hasn't changed: If CRITICAL_WIF was rotated after init-shares, the shares are stale. Re-initialize.
  3. Check credential exists: node $CLI list — confirm the service name matches exactly.

Audit log growing large

The audit log at ~/.dashpass/audit.log is append-only JSONL. To rotate:

mv ~/.dashpass/audit.log ~/.dashpass/audit.log.$(date +%Y%m%d)
# New entries will create a fresh audit.log automatically

Scheme C still works without shares

Yes — this is by design. Without shares, get (without --mutual) decrypts directly using CRITICAL_WIF. Shares are optional and additive. You can set up mutual confirmation at any time without re-encrypting existing credentials.


When to Use DashPass

Activate this skill when the user or agent needs to:

  • Store an API key, token, password, or other secret
  • Retrieve a previously stored credential
  • Rotate / update an existing credential
  • Check which credentials are expiring
  • List all stored credentials
  • Delete a credential from the vault
  • Export credentials as environment variables
  • Check vault status or credit balance
  • Discuss credential management strategy
  • Compare DashPass with other secret storage approaches

Agent Behavior Rules

  1. Never log or display decrypted values unless the user explicitly asks. Use --pipe for programmatic access.
  2. Always use --value-stdin (pipe) for put and rotate. Never use --value with literal secrets — it leaks to shell history.
  3. Never hardcode WIF or Identity ID in scripts. They come from environment variables only.
  4. Wait 3-5 seconds between consecutive write operations (put, rotate, delete) to the same Identity. Platform nonce timing constraint.
  5. Check status first if any operation fails with credit or balance errors.
  6. Testnet only — do not attempt mainnet operations unless the user explicitly authorizes.
  7. Treat CRITICAL_WIF as radioactive — if it appears in conversation, immediately warn the user about exposure risk.

First-Time Setup

If the user has not used DashPass before, read the setup guide:

Read {baseDir}/setup.md

Detailed References

For full CLI command documentation (all parameters, examples, output formats):

Read {baseDir}/references/cli-commands.md

For encryption details, architecture diagrams, trust model, and security analysis:

Read {baseDir}/references/security-model.md

For troubleshooting common errors and known limitations:

Read {baseDir}/references/faq.md

For the prior security audit summary:

Read {baseDir}/references/security-analysis-summary.md

Command → Reference Map

Intent CLI Command Reference
Store a secret put {baseDir}/references/cli-commands.md
Retrieve a secret get {baseDir}/references/cli-commands.md
List credentials list {baseDir}/references/cli-commands.md
Rotate a credential rotate {baseDir}/references/cli-commands.md
Check expiring check {baseDir}/references/cli-commands.md
Vault status status {baseDir}/references/cli-commands.md
Delete credential delete {baseDir}/references/cli-commands.md
Export as env vars env {baseDir}/references/cli-commands.md
Init Shamir shares init-shares {baseDir}/scripts/mutual-confirm.mjs
Check share health share-status {baseDir}/scripts/mutual-confirm.mjs
Mutual decrypt get --mutual {baseDir}/scripts/mutual-confirm.mjs
How encryption works {baseDir}/references/security-model.md
Error troubleshooting {baseDir}/references/faq.md
First-time setup {baseDir}/setup.md
Usage Guidance
This skill implements what it says (a Dash-backed encrypted vault), but installing it means giving code access paths and/or an environment variable (CRITICAL_WIF) that is equivalent to a master key for all stored secrets. Before installing: 1) Review the included JS files yourself or have a trusted reviewer confirm there are no hidden network endpoints or exfiltration paths. 2) Do not export your production WIF into a long-lived environment variable on a machine where an autonomous agent can run; use a short-lived, tightly controlled process or hardware-backed key if possible. 3) Prefer initializing the mutual-confirmation 2-of-2 flow and keep one share offline or under human control for critical credentials. 4) Be cautious about running the npm install step for a dev-tag package — verify the exact package/version and install from a trusted registry. 5) Consider using DASHPASS_CACHE=none and a dedicated, isolated machine/user account for the vault to limit blast radius. If you cannot review the code or accept the risk of handing a master key to a skill that the agent can call autonomously, treat this as high-risk and do not install.
Capability Analysis
Type: OpenClaw Skill Name: dashpass Version: 0.8.1 The DashPass skill is a well-architected credential vault that stores encrypted secrets on the Dash Platform blockchain. It utilizes industry-standard cryptographic practices, including AES-256-GCM for authenticated encryption, HKDF-SHA256 for key derivation, and a Shamir 2-of-2 secret sharing protocol (implemented in `mutual-confirm.mjs`) to provide an additional layer of procedural security. The CLI tool (`dashpass-cli.mjs`) includes security-conscious features such as memory zeroing of private key buffers, restricted file permissions (0600) for local cache and share files, and a comprehensive audit logging system. No evidence of malicious intent, data exfiltration, or unauthorized execution was found; the code is transparent, highly documented, and aligns strictly with its stated purpose of secure secret management for AI agents.
Capability Tags
cryptorequires-walletcan-make-purchasesrequires-oauth-tokenrequires-sensitive-credentials
Capability Assessment
Purpose & Capability
Name/description match what the files and CLI implement: a Dash Platform-backed encrypted vault. Required binaries (node) and the Evo SDK are consistent with interacting with the Dash Platform and performing client-side crypto. Requesting a wallet WIF and an Identity ID is expected for this design.
Instruction Scope
The SKILL.md and included CLI instruct the agent to read process.env.CRITICAL_WIF and DASHPASS_IDENTITY_ID, create/read files under ~/.dashpass (shares, cache, audit.log), encrypt/decrypt locally, and emit secrets to stdout/`eval` (e.g., `env` and `--pipe`). Those behaviors are required for a vault, but they also make it trivial for an agent that can invoke the CLI to fetch plaintext secrets and/or export them into the environment or other processes. The docs claim human confirmation for critical operations, but that enforcement is implemented only via optional mutual-share flows — not automatically enforced.
Install Mechanism
There is no formal install spec; the skill is instruction-only but includes JS files that import @dashevo/evo-sdk. The README/FAQ tells users to run `npm install @dashevo/[email protected]`. Relying on a dev-tag npm package and requiring the user to install dependencies is a moderate operational risk (supply-chain/typo risk) and should be noted; however, there are no external arbitrary download URLs or extracted archives in the repository.
Credentials
The skill requires CRITICAL_WIF (the vault master private key) and DASHPASS_IDENTITY_ID — both directly relevant. However, CRITICAL_WIF is a high-impact secret: possession equals the ability to decrypt all stored credentials. The SKILL.md and code also reference additional optional env vars (DASHPASS_CONTRACT_ID, DASHPASS_CACHE) that are not listed in the declared requires.env. Requiring the master WIF is proportionate to the vault function but substantially raises the blast radius if given to a skill that can be invoked autonomously.
Persistence & Privilege
The skill does not request 'always: true', and model invocation is allowed (default). That is normal, but combined with the skill's need for the master WIF and the CLI behavior (writes share files, a cache, and an audit.log under ~/.dashpass), an agent that can invoke the skill autonomously could retrieve and exfiltrate secrets without further human action unless you configure mutual confirmation and keep the WIF out of persistent environments. The skill does not modify other skills or global agent config.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install dashpass
  3. After installation, invoke the skill by name or use /dashpass
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v0.8.1
Version 0.8.1 introduces mutual confirmation (2-of-2 key sharing) with Shamir Secret Sharing: - Added mutual confirmation protocol using 2-of-2 Shamir Secret Sharing for decryption of credentials. - New CLI commands: `init-shares`, `share-status`, and `get --mutual`. - Credentials can now require both Evo and CC agents to reconstruct the key and decrypt, improving security. - Full audit trail now logs each request/approval/denial in `~/.dashpass/audit.log`. - Share files use strict permissions and all sensitive key material is zeroed from memory after use.
v0.8.0
Restructured: SKILL.md split into modular references/ files (Minara pattern). 870-line monolith → 152-line core + cli-commands.md + security-model.md + faq.md + setup.md. Added version field.
v0.7.0
Docs: beginner-friendly SKILL.md (complete zero-to-first-use guide) + AI-to-AI reference guide. Fix: --pipe stdout clean.
v0.6.0
Fix: --pipe mode no longer pollutes stdout with SDK logs. Phase 2: dashpass-provider.sh for CC dispatch integration.
v0.5.1
Security: replaced realistic-looking WIF example with obvious placeholder
v0.5.0
Added AI collaboration section — calling all AIs to help iterate. Security review passed.
v0.4.0
Complete SKILL.md rewrite: 870-line beginner-friendly docs with step-by-step Getting Started, full CLI reference, FAQ, security model, architecture diagrams
v0.3.0
R1-R4: env var config, Getting Started guide, remove dotenv, metadata declares deps
v0.2.0
Fix: declare required env vars in metadata, remove dotenv dependency, parameterize IDENTITY_ID
v0.1.0
Initial release: AI-first credential management on Dash Platform
Metadata
Slug dashpass
Version 0.8.1
License MIT-0
All-time Installs 0
Active Installs 0
Total Versions 10
Frequently Asked Questions

What is Dashpass?

Encrypted credential vault on Dash Platform for AI agents. Store and retrieve API keys, tokens, and passwords — encrypted on-chain, decryptable only by you.... It is an AI Agent Skill for Claude Code / OpenClaw, with 175 downloads so far.

How do I install Dashpass?

Run "/install dashpass" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Dashpass free?

Yes, Dashpass is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Dashpass support?

Dashpass is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Dashpass?

It is built and maintained by DashBot-0001 (@dashbot-0001); the current version is v0.8.1.

💬 Comments