360 Secure SkillHub
360 安全技能中心

Backendenc

该 Skill 使用 Node.js 内置 crypto 模块,在本地实现 MK→KEK→DEK 分层密钥与按用户、频道隔离的加密服务;通过口令派生主密钥,并以 AES-256-GCM 包装密钥,声明不发起网络请求。需在服务重启后提供口令解锁。

anydefai
anydefai
热度 36.37
最近更新 2026-05-11 17:44:14
分类:安全依赖:代码执行 / 读写文件应用场景:数据处理 / 自动化脚本 / DevOps

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add backendenc
Metadata
name
backendenc
description
Backend Agent Data Encryption. High-security MK->KEK->DEK hierarchy for backend environments.

backendenc: Backend Security Toolkit

This skill provides mandatory encryption for OpenClaw agents running in Node.js/Backend environments. It operates in Local Manual Mode, using the Node.js built-in crypto module.

Context

Unlike the frontend version which uses Web Crypto, this version is designed for server-side execution, CLI tools, or background agents. It stores metadata in a persistent local file (or compatible storage provider).

Key Hierarchy

  1. Master Key (MK): Derived from your passphrase using crypto.pbkdf2.
    • Persistence: A unique "Salt" is stored in your configuration. As long as you remember your passphrase, the same Master Key will be generated across reboots.
  2. Key Encryption Key (KEK): Generated randomly and encrypted by your MK.
  3. Data Encryption Keys (DEKs): Scoped keys (e.g., memory, assets) encrypted by the KEK.

Security Disclosure

  • Zero Network: This skill does NOT perform any external network requests. All operations happen via the Node.js crypto module.
  • No Cleartext Keys: Keys are never stored in cleartext. They are always "wrapped" (encrypted) by a higher-level key using AES-256-GCM.
  • Passphrase Obligation: You must provide your passphrase to "unlock" the vault after هر server reboot.

Multi-User & Channel Isolation

Designed for high-concurrency backend environments:

  • Key Partitioning: All storage keys follow the ${userId}:${channelId}:key format.
  • Security: Ensures that even if the underlying storage file is compromised, keys for different users remain cryptographically separated.

Usage (Backend)

import { EncryptionService } from './encryption-service.js';

// Access context IDs
const { userId, channelId } = agent.context;

// Unlock for context
await EncryptionService.unlock(userId, channelId, 'passphrase');

// Scoped encryption
const encrypted = await EncryptionService.encrypt(userId, channelId, 'history', 'data');