Skills Agentes

Agent Security Manager

Implementa mecanismos de seguridad integrales para protocolos de consenso distribuido.

Estrellas
69.4k

en todo el repo

Actividad
27

0–100, la ruta de este skill

Actualizado
hace 6 meses

último commit aquí

Commits
0

últimos 90 días

Contexto
4.9k tok

18 tok en reposo

Paquete
1 archivo

19 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add ruvnet/ruflo --skill agent-security-manager --agent claude-code

Se instala solo en este repositorio.

Qué hace

  • Implementa firmas de umbral (threshold signatures) y generación distribuida de claves (DKG) para proteger protocolos de consenso.
  • Genera y verifica pruebas de conocimiento cero (Schnorr, range proofs, bulletproofs) sin revelar datos sensibles.
  • Detecta ataques Byzantine, Sybil, Eclipse y DoS analizando mensajes contradictorios, patrones de colusión y anomalías de red.
  • Gestiona rotación segura de claves con período de transición y respaldo cifrado con recuperación por umbral.
  • Ejecuta pruebas de penetración simuladas (Byzantine, Sybil, Eclipse, DoS) y genera un reporte de seguridad.

Úsalo cuando

  • Cuando hay que asegurar un protocolo de consenso distribuido con criptografía de umbral o pruebas de conocimiento cero.
  • Cuando se necesita detectar y mitigar ataques Byzantine, Sybil, Eclipse o DoS en tiempo real.
  • Cuando hace falta gestionar generación, rotación y respaldo seguro de claves distribuidas.

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Implementa firmas de umbral para este protocolo de consenso
    • Detecta si hay un ataque Sybil en las solicitudes de unión al cluster
    • Rota las claves distribuidas del sistema con un período de transición

    SKILL.md

    En inglés

    name: security-manager type: security color: "#F44336" description: Implements comprehensive security mechanisms for distributed consensus protocols capabilities:

    • cryptographic_security
    • attack_detection
    • key_management
    • secure_communication
    • threat_mitigation priority: critical hooks: pre: | echo "🔐 Security Manager securing: $TASK"

      Initialize security protocols

      if [[ "$TASK" == "consensus" ]]; then echo "🛡️ Activating cryptographic verification" fi post: | echo "✅ Security protocols verified"

      Run security audit

      echo "🔍 Conducting post-operation security audit"

    Consensus Security Manager

    Implements comprehensive security mechanisms for distributed consensus protocols with advanced threat detection.

    Core Responsibilities

    1. Cryptographic Infrastructure: Deploy threshold cryptography and zero-knowledge proofs
    2. Attack Detection: Identify Byzantine, Sybil, Eclipse, and DoS attacks
    3. Key Management: Handle distributed key generation and rotation protocols
    4. Secure Communications: Ensure TLS 1.3 encryption and message authentication
    5. Threat Mitigation: Implement real-time security countermeasures

    Technical Implementation

    Threshold Signature System

    class ThresholdSignatureSystem {
      constructor(threshold, totalParties, curveType = 'secp256k1') {
        this.t = threshold; // Minimum signatures required
        this.n = totalParties; // Total number of parties
        this.curve = this.initializeCurve(curveType);
        this.masterPublicKey = null;
        this.privateKeyShares = new Map();
        this.publicKeyShares = new Map();
        this.polynomial = null;
      }
    
      // Distributed Key Generation (DKG) Protocol
      async generateDistributedKeys() {
        // Phase 1: Each party generates secret polynomial
        const secretPolynomial = this.generateSecretPolynomial();
        const commitments = this.generateCommitments(secretPolynomial);
        
        // Phase 2: Broadcast commitments
        await this.broadcastCommitments(commitments);
        
        // Phase 3: Share secret values
        const secretShares = this.generateSecretShares(secretPolynomial);
        await this.distributeSecretShares(secretShares);
        
        // Phase 4: Verify received shares
        const validShares = await this.verifyReceivedShares();
        
        // Phase 5: Combine to create master keys
        this.masterPublicKey = this.combineMasterPublicKey(validShares);
        
        return {
          masterPublicKey: this.masterPublicKey,
          privateKeyShare: this.privateKeyShares.get(this.nodeId),
          publicKeyShares: this.publicKeyShares
        };
      }
    
      // Threshold Signature Creation
      async createThresholdSignature(message, signatories) {
        if (signatories.length < this.t) {
          throw new Error('Insufficient signatories for threshold');
        }
    
        const partialSignatures = [];
        
        // Each signatory creates partial signature
        for (const signatory of signatories) {
          const partialSig = await this.createPartialSignature(message, signatory);
          partialSignatures.push({
            signatory: signatory,
            signature: partialSig,
            publicKeyShare: this.publicKeyShares.get(signatory)
          });
        }
    
        // Verify partial signatures
        const validPartials = partialSignatures.filter(ps => 
          this.verifyPartialSignature(message, ps.signature, ps.publicKeyShare)
        );
    
        if (validPartials.length < this.t) {
          throw new Error('Insufficient valid partial signatures');
        }
    
        // Combine partial signatures using Lagrange interpolation
        return this.combinePartialSignatures(message, validPartials.slice(0, this.t));
      }
    
      // Signature Verification
      verifyThresholdSignature(message, signature) {
        return this.curve.verify(message, signature, this.masterPublicKey);
      }
    
      // Lagrange Interpolation for Signature Combination
      combinePartialSignatures(message, partialSignatures) {
        const lambda = this.computeLagrangeCoefficients(
          partialSignatures.map(ps => ps.signatory)
        );
    
        let combinedSignature = this.curve.infinity();
        
        for (let i = 0; i < partialSignatures.length; i++) {
          const weighted = this.curve.multiply(
            partialSignatures[i].signature,
            lambda[i]
          );
          combinedSignature = this.curve.add(combinedSignature, weighted);
        }
    
        return combinedSignature;
      }
    }
    

    Zero-Knowledge Proof System

    class ZeroKnowledgeProofSystem {
      constructor() {
        this.curve = new EllipticCurve('secp256k1');
        this.hashFunction = 'sha256';
        this.proofCache = new Map();
      }
    
      // Prove knowledge of discrete logarithm (Schnorr proof)
      async proveDiscreteLog(secret, publicKey, challenge = null) {
        // Generate random nonce
        const nonce = this.generateSecureRandom();
        const commitment = this.curve.multiply(this.curve.generator, nonce);
        
        // Use provided challenge or generate Fiat-Shamir challenge
        const c = challenge || this.generateChallenge(commitment, publicKey);
        
        // Compute response
        const response = (nonce + c * secret) % this.curve.order;
        
        return {
          commitment: commitment,
          challenge: c,
          response: response
        };
      }
    
      // Verify discrete logarithm proof
      verifyDiscreteLogProof(proof, publicKey) {
        const { commitment, challenge, response } = proof;
        
        // Verify: g^response = commitment * publicKey^challenge
        const leftSide = this.curve.multiply(this.curve.generator, response);
        const rightSide = this.curve.add(
          commitment,
          this.curve.multiply(publicKey, challenge)
        );
        
        return this.curve.equals(leftSide, rightSide);
      }
    
      // Range proof for committed values
      async proveRange(value, commitment, min, max) {
        if (value < min || value > max) {
          throw new Error('Value outside specified range');
        }
    
        const bitLength = Math.ceil(Math.log2(max - min + 1));
        const bits = this.valueToBits(value - min, bitLength);
        
        const proofs = [];
        let currentCommitment = commitment;
        
        // Create proof for each bit
        for (let i = 0; i < bitLength; i++) {
          const bitProof = await this.proveBit(bits[i], currentCommitment);
          proofs.push(bitProof);
          
          // Update commitment for next bit
          currentCommitment = this.updateCommitmentForNextBit(currentCommitment, bits[i]);
        }
        
        return {
          bitProofs: proofs,
          range: { min, max },
          bitLength: bitLength
        };
      }
    
      // Bulletproof implementation for range proofs
      async createBulletproof(value, commitment, range) {
        const n = Math.ceil(Math.log2(range));
        const generators = this.generateBulletproofGenerators(n);
        
        // Inner product argument
        const innerProductProof = await this.createInnerProductProof(
          value, commitment, generators
        );
        
        return {
          type: 'bulletproof',
          commitment: commitment,
          proof: innerProductProof,
          generators: generators,
          range: range
        };
      }
    }
    

    Attack Detection System

    class ConsensusSecurityMonitor {
      constructor() {
        this.attackDetectors = new Map();
        this.behaviorAnalyzer = new BehaviorAnalyzer();
        this.reputationSystem = new ReputationSystem();
        this.alertSystem = new SecurityAlertSystem();
        this.forensicLogger = new ForensicLogger();
      }
    
      // Byzantine Attack Detection
      async detectByzantineAttacks(consensusRound) {
        const participants = consensusRound.participants;
        const messages = consensusRound.messages;
        
        const anomalies = [];
        
        // Detect contradictory messages from same node
        const contradictions = this.detectContradictoryMessages(messages);
        if (contradictions.length > 0) {
          anomalies.push({
            type: 'CONTRADICTORY_MESSAGES',
            severity: 'HIGH',
            details: contradictions
          });
        }
        
        // Detect timing-based attacks
        const timingAnomalies = this.detectTimingAnomalies(messages);
        if (timingAnomalies.length > 0) {
          anomalies.push({
            type: 'TIMING_ATTACK',
            severity: 'MEDIUM',
            details: timingAnomalies
          });
        }
        
        // Detect collusion patterns
        const collusionPatterns = await this.detectCollusion(participants, messages);
        if (collusionPatterns.length > 0) {
          anomalies.push({
            type: 'COLLUSION_DETECTED',
            severity: 'HIGH',
            details: collusionPatterns
          });
        }
        
        // Update reputation scores
        for (const participant of participants) {
          await this.reputationSystem.updateReputation(
            participant,
            anomalies.filter(a => a.details.includes(participant))
          );
        }
        
        return anomalies;
      }
    
      // Sybil Attack Prevention
      async preventSybilAttacks(nodeJoinRequest) {
        const identityVerifiers = [
          this.verifyProofOfWork(nodeJoinRequest),
          this.verifyStakeProof(nodeJoinRequest),
          this.verifyIdentityCredentials(nodeJoinRequest),
          this.checkReputationHistory(nodeJoinRequest)
        ];
        
        const verificationResults = await Promise.all(identityVerifiers);
        const passedVerifications = verificationResults.filter(r => r.valid);
        
        // Require multiple verification methods
        const requiredVerifications = 2;
        if (passedVerifications.length < requiredVerifications) {
          throw new SecurityError('Insufficient identity verification for node join');
        }
        
        // Additional checks for suspicious patterns
        const suspiciousPatterns = await this.detectSybilPatterns(nodeJoinRequest);
        if (suspiciousPatterns.length > 0) {
          await this.alertSystem.raiseSybilAlert(nodeJoinRequest, suspiciousPatterns);
          throw new SecurityError('Potential Sybil attack detected');
        }
        
        return true;
      }
    
      // Eclipse Attack Protection
      async protectAgainstEclipseAttacks(nodeId, connectionRequests) {
        const diversityMetrics = this.analyzePeerDiversity(connectionRequests);
        
        // Check for geographic diversity
        if (diversityMetrics.geographicEntropy < 2.0) {
          await this.enforceGeographicDiversity(nodeId, connectionRequests);
        }
        
        // Check for network diversity (ASNs)
        if (diversityMetrics.networkEntropy < 1.5) {
          await this.enforceNetworkDiversity(nodeId, connectionRequests);
        }
        
        // Limit connections from single source
        const maxConnectionsPerSource = 3;
        const groupedConnections = this.groupConnectionsBySource(connectionRequests);
        
        for (const [source, connections] of groupedConnections) {
          if (connections.length > maxConnectionsPerSource) {
            await this.alertSystem.raiseEclipseAlert(nodeId, source, connections);
            // Randomly select subset of connections
            const allowedConnections = this.randomlySelectConnections(
              connections, maxConnectionsPerSource
            );
            this.blockExcessConnections(
              connections.filter(c => !allowedConnections.includes(c))
            );
          }
        }
      }
    
      // DoS Attack Mitigation
      async mitigateDoSAttacks(incomingRequests) {
        const rateLimiter = new AdaptiveRateLimiter();
        const requestAnalyzer = new RequestPatternAnalyzer();
        
        // Analyze request patterns for anomalies
        const anomalousRequests = await requestAnalyzer.detectAnomalies(incomingRequests);
        
        if (anomalousRequests.length > 0) {
          // Implement progressive response strategies
          const mitigationStrategies = [
            this.applyRateLimiting(anomalousRequests),
            this.implementPriorityQueuing(incomingRequests),
            this.activateCircuitBreakers(anomalousRequests),
            this.deployTemporaryBlacklisting(anomalousRequests)
          ];
          
          await Promise.all(mitigationStrategies);
        }
        
        return this.filterLegitimateRequests(incomingRequests, anomalousRequests);
      }
    }
    

    Secure Key Management

    class SecureKeyManager {
      constructor() {
        this.keyStore = new EncryptedKeyStore();
        this.rotationScheduler = new KeyRotationScheduler();
        this.distributionProtocol = new SecureDistributionProtocol();
        this.backupSystem = new SecureBackupSystem();
      }
    
      // Distributed Key Generation
      async generateDistributedKey(participants, threshold) {
        const dkgProtocol = new DistributedKeyGeneration(threshold, participants.length);
        
        // Phase 1: Initialize DKG ceremony
        const ceremony = await dkgProtocol.initializeCeremony(participants);
        
        // Phase 2: Each participant contributes randomness
        const contributions = await this.collectContributions(participants, ceremony);
        
        // Phase 3: Verify contributions
        const validContributions = await this.verifyContributions(contributions);
        
        // Phase 4: Combine contributions to generate master key
        const masterKey = await dkgProtocol.combineMasterKey(validContributions);
        
        // Phase 5: Generate and distribute key shares
        const keyShares = await dkgProtocol.generateKeyShares(masterKey, participants);
        
        // Phase 6: Secure distribution of key shares
        await this.securelyDistributeShares(keyShares, participants);
        
        return {
          masterPublicKey: masterKey.publicKey,
          ceremony: ceremony,
          participants: participants
        };
      }
    
      // Key Rotation Protocol
      async rotateKeys(currentKeyId, participants) {
        // Generate new key using proactive secret sharing
        const newKey = await this.generateDistributedKey(participants, Math.floor(participants.length / 2) + 1);
        
        // Create transition period where both keys are valid
        const transitionPeriod = 24 * 60 * 60 * 1000; // 24 hours
        await this.scheduleKeyTransition(currentKeyId, newKey.masterPublicKey, transitionPeriod);
        
        // Notify all participants about key rotation
        await this.notifyKeyRotation(participants, newKey);
        
        // Gradually phase out old key
        setTimeout(async () => {
          await this.deactivateKey(currentKeyId);
        }, transitionPeriod);
        
        return newKey;
      }
    
      // Secure Key Backup and Recovery
      async backupKeyShares(keyShares, backupThreshold) {
        const backupShares = this.createBackupShares(keyShares, backupThreshold);
        
        // Encrypt backup shares with different passwords
        const encryptedBackups = await Promise.all(
          backupShares.map(async (share, index) => ({
            id: `backup_${index}`,
            encryptedShare: await this.encryptBackupShare(share, `password_${index}`),
            checksum: this.computeChecksum(share)
          }))
        );
        
        // Distribute backups to secure locations
        await this.distributeBackups(encryptedBackups);
        
        return encryptedBackups.map(backup => ({
          id: backup.id,
          checksum: backup.checksum
        }));
      }
    
      async recoverFromBackup(backupIds, passwords) {
        const backupShares = [];
        
        // Retrieve and decrypt backup shares
        for (let i = 0; i < backupIds.length; i++) {
          const encryptedBackup = await this.retrieveBackup(backupIds[i]);
          const decryptedShare = await this.decryptBackupShare(
            encryptedBackup.encryptedShare,
            passwords[i]
          );
          
          // Verify integrity
          const checksum = this.computeChecksum(decryptedShare);
          if (checksum !== encryptedBackup.checksum) {
            throw new Error(`Backup integrity check failed for ${backupIds[i]}`);
          }
          
          backupShares.push(decryptedShare);
        }
        
        // Reconstruct original key from backup shares
        return this.reconstructKeyFromBackup(backupShares);
      }
    }
    

    MCP Integration Hooks

    Security Monitoring Integration

    // Store security metrics in memory
    await this.mcpTools.memory_usage({
      action: 'store',
      key: `security_metrics_${Date.now()}`,
      value: JSON.stringify({
        attacksDetected: this.attacksDetected,
        reputationScores: Array.from(this.reputationSystem.scores.entries()),
        keyRotationEvents: this.keyRotationHistory
      }),
      namespace: 'consensus_security',
      ttl: 86400000 // 24 hours
    });
    
    // Performance monitoring for security operations
    await this.mcpTools.metrics_collect({
      components: [
        'signature_verification_time',
        'zkp_generation_time',
        'attack_detection_latency',
        'key_rotation_overhead'
      ]
    });
    

    Neural Pattern Learning for Security

    // Learn attack patterns
    await this.mcpTools.neural_patterns({
      action: 'learn',
      operation: 'attack_pattern_recognition',
      outcome: JSON.stringify({
        attackType: detectedAttack.type,
        patterns: detectedAttack.patterns,
        mitigation: appliedMitigation
      })
    });
    
    // Predict potential security threats
    const threatPrediction = await this.mcpTools.neural_predict({
      modelId: 'security_threat_model',
      input: JSON.stringify(currentSecurityMetrics)
    });
    

    Integration with Consensus Protocols

    Byzantine Consensus Security

    class ByzantineConsensusSecurityWrapper {
      constructor(byzantineCoordinator, securityManager) {
        this.consensus = byzantineCoordinator;
        this.security = securityManager;
      }
    
      async secureConsensusRound(proposal) {
        // Pre-consensus security checks
        await this.security.validateProposal(proposal);
        
        // Execute consensus with security monitoring
        const result = await this.executeSecureConsensus(proposal);
        
        // Post-consensus security analysis
        await this.security.analyzeConsensusRound(result);
        
        return result;
      }
    
      async executeSecureConsensus(proposal) {
        // Sign proposal with threshold signature
        const signedProposal = await this.security.thresholdSignature.sign(proposal);
        
        // Monitor consensus execution for attacks
        const monitor = this.security.startConsensusMonitoring();
        
        try {
          // Execute Byzantine consensus
          const result = await this.consensus.initiateConsensus(signedProposal);
          
          // Verify result integrity
          await this.security.verifyConsensusResult(result);
          
          return result;
        } finally {
          monitor.stop();
        }
      }
    }
    

    Security Testing and Validation

    Penetration Testing Framework

    class ConsensusPenetrationTester {
      constructor(securityManager) {
        this.security = securityManager;
        this.testScenarios = new Map();
        this.vulnerabilityDatabase = new VulnerabilityDatabase();
      }
    
      async runSecurityTests() {
        const testResults = [];
        
        // Test 1: Byzantine attack simulation
        testResults.push(await this.testByzantineAttack());
        
        // Test 2: Sybil attack simulation
        testResults.push(await this.testSybilAttack());
        
        // Test 3: Eclipse attack simulation
        testResults.push(await this.testEclipseAttack());
        
        // Test 4: DoS attack simulation
        testResults.push(await this.testDoSAttack());
        
        // Test 5: Cryptographic security tests
        testResults.push(await this.testCryptographicSecurity());
        
        return this.generateSecurityReport(testResults);
      }
    
      async testByzantineAttack() {
        // Simulate malicious nodes sending contradictory messages
        const maliciousNodes = this.createMaliciousNodes(3);
        const attack = new ByzantineAttackSimulator(maliciousNodes);
        
        const startTime = Date.now();
        const detectionTime = await this.security.detectByzantineAttacks(attack.execute());
        const endTime = Date.now();
        
        return {
          test: 'Byzantine Attack',
          detected: detectionTime !== null,
          detectionLatency: detectionTime ? endTime - startTime : null,
          mitigation: await this.security.mitigateByzantineAttack(attack)
        };
      }
    }
    

    This security manager provides comprehensive protection for distributed consensus protocols with enterprise-grade cryptographic security, advanced threat detection, and robust key management capabilities.

    Reproducido de ruvnet/ruflo bajo licencia MIT. Leer esta página en markdown.

    Archivos

    1 archivo en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Usa herramientas MCP (memory_usage, metrics_collect, neural_patterns, neural_predict) para monitorear y aprender patrones de ataque.

    Detalles

    Creador
    ruvnet
    Categoría
    Seguridad
    Licencia
    MIT
    Recursos incluidos
    Solo SKILL.md
    Repositorio
    ruvnet/ruflo
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de ruvnet/ruflo

    Este repo incluye 275 skills. Si instalas uno, normalmente ya tienes los demás.

    Inspecciona y audita genomas GEPA: carga y valida un genoma, renderiza el system prompt que compila, o clasifica los modos de fallo de una transcripción de ejecución.

    Costo de contexto al activarse
    833 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 4 días
    Permisos
    herramientas desarrollo

    Completion en modo razonamiento contra deepseek-reasoner (R1) de DeepSeek. Devuelve el chain-of-thought por separado de la respuesta final. Lee DEEPSEEK_API_KEY y degrada si falta o la API no responde.

    Costo de contexto al activarse
    627 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 4 días
    Permisos
    automatizacion

    Completion de un solo turno contra el modelo deepseek-chat de DeepSeek vía /v1/chat/completions. Lee DEEPSEEK_API_KEY y degrada con status:degraded si falta o la API no responde. Para tareas sin razonamiento.

    Costo de contexto al activarse
    566 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 4 días
    Permisos
    automatizacion

    Construye o reconstruye el índice de ADRs y su grafo de dependencias ejecutando scripts/import.mjs, en vez de cientos de llamadas MCP.

    Costo de contexto al activarse
    866 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 27 días
    herramientas desarrollo

    Muestra el estado de la integración AGNTCY/SLIM/CASA: si los paquetes están instalados, qué transporte está activo y si el enforcement de CASA está habilitado.

    Costo de contexto al activarse
    443 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 26 días
    devops infraestructura

    Ejecuta escaneos de seguridad completos sobre el código con las herramientas de seguridad de Ruflo, a profundidad quick, standard o deep.

    Costo de contexto al activarse
    298 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    seguridad