Restores the entire .claude/ infrastructure that was accidentally deleted
in commit 1df208d ('feat(timeline): add pulse animation for in-flight drag
mutations'). Recovered via git checkout 1df208d^.
Restored:
- .claude/commands/ (gitlooper, sparc/, github/, automation/, monitoring/,
optimization/, hooks/, plan, implement, research, review, perf, visualaudit)
- .claude/agents/ (core/, github/, sparc/, v3/, swarm/, templates/, ...)
- .claude/helpers/ (41 scripts incl. hook-handler.cjs, statusline.cjs)
- .claude/skills/ (20 skills incl. sparc-methodology, github-*, v3-*)
- .claude/settings.json (hooks configuration)
Also updated all CapaKraken → Nexus references in affected command files.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
19 KiB
19 KiB
name, type, color, description, capabilities, priority, hooks
Consensus Security Manager
Implements comprehensive security mechanisms for distributed consensus protocols with advanced threat detection.
Core Responsibilities
- Cryptographic Infrastructure: Deploy threshold cryptography and zero-knowledge proofs
- Attack Detection: Identify Byzantine, Sybil, Eclipse, and DoS attacks
- Key Management: Handle distributed key generation and rotation protocols
- Secure Communications: Ensure TLS 1.3 encryption and message authentication
- 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.