This document provides detailed information about the security features and considerations of the PQC-IIoT crate.
- Cryptographic Primitives
- Protocol Security
- Implementation Security
- Best Practices
- Threat Model
- Security Considerations
- NIST Round 3 finalist
- Security levels:
- Kyber512 (Level 1)
- Kyber768 (Level 3, recommended)
- Kyber1024 (Level 5)
- Based on Module-LWE
- Constant-time implementation
- Side-channel resistant
- NIST Round 3 finalist
- Security levels:
- LightSaber (Level 1)
- Saber (Level 3, recommended)
- FireSaber (Level 5)
- Based on Module-LWR
- Optimized for embedded systems
- Constant-time implementation
- Code-based KEM
- Security levels:
- Level 1 (experimental)
- Level 3 (experimental)
- Level 5 (experimental)
- For research purposes
- Not recommended for production use
- NIST Round 3 finalist
- Security levels:
- Falcon-512 (Level 1)
- Falcon-1024 (Level 5)
- Based on NTRU lattices
- Compact signatures
- Fast verification
- NIST Round 3 finalist
- Security levels:
- Dilithium2 (Level 2)
- Dilithium3 (Level 3, recommended)
- Dilithium5 (Level 5)
- Based on Module-LWE
- Balanced performance
- Robust implementation
- Post-quantum key exchange
- Message authentication
- Replay protection
- Topic validation
- Access control
- Post-quantum key exchange
- Message authentication
- Resource protection
- Path validation
- Access control
- Stack allocation where possible
- Zeroization of sensitive data
- Bounds checking
- No undefined behavior
- Constant-time operations
- Memory access patterns
- Branch-free code
- Cache timing protection
- Secure error reporting
- No information leakage
- Graceful failure
- Recovery mechanisms
-
Generation
// Use recommended security levels let kyber = Kyber::new(KyberSecurityLevel::Kyber768); let falcon = Falcon::new(FalconSecurityLevel::Falcon512);
-
Storage
// Store keys securely key_storage.store_public_key(&pk)?; key_storage.store_secret_key(&sk)?;
-
Rotation
// Configure key rotation kyber.with_key_rotation_interval(Duration::from_secs(3600));
-
MQTT
// Configure secure client let client = SecureMqttClient::new("localhost", 1883, "client_id")? .with_tls_config(tls_config)? .with_acl(acl_rules)?;
-
CoAP
// Configure secure client let client = SecureCoapClient::new()? .with_dtls_config(dtls_config)? .with_acl(acl_rules)?;
- Quantum computing attacks
- Classical cryptanalysis
- Side-channel attacks
- Fault injection
- Man-in-the-middle
- Replay attacks
- Denial of service
- Eavesdropping
- Memory corruption
- Timing attacks
- Power analysis
- Fault injection
- 32-bit processor
- 32KB RAM minimum
- 128KB Flash minimum
- Hardware RNG
- Key generation time
- Encryption/decryption time
- Signature/verification time
- Memory usage
-
Assessment
- Evaluate security requirements
- Choose appropriate algorithms
- Configure security levels
-
Implementation
- Follow best practices
- Enable security features
- Configure monitoring
-
Maintenance
- Regular updates
- Key rotation
- Security audits
- Monitor security advisories
- Evaluate impact
- Plan updates
- Test changes
- Review patches
- Test updates
- Deploy changes
- Verify security
- Detect incidents
- Assess impact
- Contain threat
- Recover systems
- Learn from incident