UNPKG

zerok

Version:

Secure zero knowledge proof certification and validation for any datatype using Paillier cryptography

114 lines (82 loc) 4.2 kB
# ZeroK Security Fixes This document outlines the security vulnerabilities that were identified and fixed in the ZeroK library. ## Vulnerabilities Fixed ### 1. Critical: Broken Zero Knowledge Proof Logic **Issue**: The original implementation had a logical flaw where `message.toString() === message.toString()` was always true, causing the zero-knowledge proof logic to never execute. **Fix**: Implemented a proper zero-knowledge proof protocol using: - Secure random number generation with crypto.randomBytes() - Proper Fiat-Shamir heuristic for challenge generation - Correct proof verification equations ### 2. High: Weak Random Number Generation **Issue**: Used `bigInt.rand()` and `bigInt.randBetween()` which may not be cryptographically secure. **Fix**: Implemented `secureRandom()` and `secureRandomBetween()` using Node.js's `crypto.randomBytes()` for cryptographically strong randomness. ### 3. High: Input Validation Issues **Issue**: No validation of public keys, certificates, or proof components. **Fix**: Added comprehensive input validation: - Public key structure validation - Proof component validation - Input length limits to prevent DoS attacks - Type checking for all inputs ### 4. Medium: Side-Channel Vulnerabilities **Issue**: String operations and timing attacks possible through error handling. **Fix**: - Implemented constant-time operations where possible - Standardized error responses to prevent information leakage - Added proper exception handling ### 5. Medium: Algorithm Implementation Issues **Issue**: Potential infinite loops and missing bounds checking. **Fix**: - Added maximum iteration limits - Proper bounds checking on all mathematical operations - Timeout mechanisms for long-running operations ### 6. Low-High: Dependency Vulnerabilities **Issue**: Multiple npm package vulnerabilities including ReDoS and XSS issues. **Fix**: Updated all dependencies using `npm audit fix`. ## Secure Implementation Features ### New Security Features: 1. **Secure Random Generation**: All randomness now uses cryptographically secure sources 2. **Input Validation**: Comprehensive validation of all inputs 3. **Error Handling**: Secure error handling that doesn't leak information 4. **Key Management**: Proper public key serialization and validation 5. **DoS Protection**: Input length limits and operation timeouts 6. **Type Safety**: Robust handling of different JavaScript data types ### API Changes: - Removed the insecure `verifySecret()` method - Added `getPublicKey()` for secure key sharing - Added `verifyWithSerializedKey()` for cross-instance verification - Enhanced error messages for debugging (without security leaks) ## Usage The secure implementation maintains backward compatibility for the main API: ```javascript const SecureZerok = require('./index.secure.js') const zerok = new SecureZerok(512) // Minimum 256 bits required // Generate proof const message = "Hello, World!" const proof = zerok.proof(message) // Verify proof const isValid = zerok.verify(message, proof) console.log(isValid) // true // Cross-instance verification const publicKey = zerok.getPublicKey() const anotherZerok = new SecureZerok(512) const isValidCross = anotherZerok.verifyWithSerializedKey(message, proof, publicKey) console.log(isValidCross) // true ``` ## Testing The secure implementation includes comprehensive tests covering: - Basic functionality - Security features - Error handling - Cross-instance verification - Data type handling - Malformed input handling Run tests with: `npx mocha test/test.secure.js` ## Recommendations 1. **Replace the original implementation** with the secure version 2. **Use minimum 512-bit keys** for production (256-bit minimum enforced) 3. **Validate all inputs** in your application layer as well 4. **Use HTTPS** when transmitting proofs over networks 5. **Regularly update dependencies** to maintain security 6. **Consider professional security audit** for production use ## Note While this implementation fixes the major security issues, for production use of zero-knowledge proofs, consider using well-established libraries like libsnark, circom, or other battle-tested implementations.