QaSa - Quantum-Safe Cryptography Module
QaSa (Quantum-Safe) is a robust post-quantum cryptography implementation, featuring NIST-selected algorithms CRYSTALS-Kyber and CRYSTALS-Dilithium for quantum-safe communications.
Features
- CRYSTALS-Kyber: Quantum-resistant key encapsulation mechanism (KEM)
- CRYSTALS-Dilithium: Quantum-resistant digital signature scheme
- SPHINCS+: Hash-based quantum-resistant digital signature scheme
- AES-GCM: Authenticated encryption with associated data
- Key Management: Secure storage and handling of cryptographic keys
- HSM Integration: Hardware Security Module support via PKCS#11
- WebAssembly Support: Browser and Node.js compatibility
- Python Bindings: Easy integration with Python applications
- Formal Verification: Mathematical verification of security properties
- Optimisations: Special optimisations for resource-constrained environments
- Memory Safety: Secure memory handling with automatic zeroisation
Installation
Add this to your Cargo.toml:
[]
= "0.0.5"
Optional Features
QaSa supports several optional features that can be enabled based on your needs:
[]
= { = "0.0.5", = ["simd", "python", "wasm"] }
Available features:
simd: Enable SIMD optimizations (enabled by default)python: Enable Python bindings via PyO3wasm: Enable WebAssembly supportformal-verification: Enable formal verification toolshardware-acceleration: Enable hardware acceleration when availablelean: Enable optimized implementations for constrained environments
Quick Start
Key Encapsulation (Kyber)
use ;
// Generate a new key pair
let keypair = generate?;
// Encapsulate a shared secret
let = keypair.encapsulate?;
// Decapsulate the shared secret
let decapsulated_secret = keypair.decapsulate?;
assert_eq!;
Digital Signatures (Dilithium)
use ;
// Generate a new signing key pair
let keypair = generate?;
// Sign a message
let message = b"Hello, quantum-safe world!";
let signature = keypair.sign?;
// Verify the signature
let is_valid = keypair.verify?;
assert!;
Digital Signatures (SPHINCS+)
use ;
// Generate a new signing key pair
let keypair = generate?;
// Sign a message
let message = b"Hello, quantum-safe world!";
let signature = keypair.sign?;
// Verify the signature
let is_valid = keypair.verify?;
assert!;
// For reduced signature size, use compression
let compressed = keypair.sign_compressed?;
let is_valid = keypair.verify_compressed?;
assert!;
Symmetric Encryption (AES-GCM)
use ;
let key = b"your-32-byte-key-here-for-aes256";
let plaintext = b"Secret message";
// Encrypt
let = encrypt?;
// Decrypt
let decrypted = decrypt?;
assert_eq!;
HSM Integration
use ;
// Configure HSM connection
let config = HsmConfig ;
// Generate key in HSM
let attributes = HsmKeyAttributes ;
// Generate key in HSM
let key_handle = generate_key_in_hsm?;
// Sign using HSM-protected key
let message = b"Sign this with HSM-protected key";
let signature = sign_with_hsm?;
WebAssembly Support
// In your Cargo.toml
// [dependencies]
// qasa = { version = "0.0.5", features = ["wasm"] }
// In your wasm module
use *;
// Configure WASM-specific options
let wasm_config = WasmConfig ;
// Initialize WASM environment
init_wasm?;
// Use WASM-optimized implementations
let key_pair = generate_optimized?;
Python Bindings
# First, install the Python package
# pip install qasa
# Initialize the module
# Generate a Kyber key pair
, =
# Encapsulate a shared secret
, =
# Decapsulate the shared secret
=
Formal Verification
use ;
// Create a formal verifier
let verifier = default;
// Verify constant-time implementation
let result = verifier.verify_kyber?;
// Check verification result
if result.verified else
Module Structure
- kyber: CRYSTALS-Kyber implementation for quantum-resistant key encapsulation
- dilithium: CRYSTALS-Dilithium implementation for quantum-resistant digital signatures
- sphincsplus: SPHINCS+ implementation for hash-based quantum-resistant digital signatures
- aes: AES-GCM implementation for symmetric encryption
- key_management: Secure key storage, rotation mechanisms, and HSM integration
- secure_memory: Memory protection utilities for sensitive data
- utils: Cryptographic utilities and helper functions
- simd: SIMD optimizations for various platforms including WebAssembly
- security: Formal verification tools and security properties
- ffi: Foreign function interfaces including Python bindings
Security Levels
Kyber Variants
- Kyber512 – NIST Level 1 (equivalent to AES-128)
- Kyber768 – NIST Level 3 (equivalent to AES-192)
- Kyber1024 – NIST Level 5 (equivalent to AES-256)
Dilithium Variants
- Dilithium2 – NIST Level 2
- Dilithium3 – NIST Level 3
- Dilithium5 – NIST Level 5
SPHINCS+ Variants
- Sphincs128f – NIST Level 1, optimized for speed
- Sphincs128s – NIST Level 1, optimized for size
- Sphincs192f – NIST Level 3, optimized for speed
- Sphincs192s – NIST Level 3, optimized for size
- Sphincs256f – NIST Level 5, optimized for speed
- Sphincs256s – NIST Level 5, optimized for size
Examples
The examples/ directory contains example usage:
quantum_signatures.rs: Example of using Dilithium for digital signaturessecure_communication.rs: End-to-end example of quantum-safe cryptographic operationssphincs_signatures.rs: Example of using SPHINCS+ for hash-based signatureshsm_operations.rs: Example of using Hardware Security Moduleswasm_crypto.rs: Example of WebAssembly integrationpython_bindings.py: Example of Python bindings usage
Run examples with:
Benchmarks
Performance benchmarks are available:
Documentation
- Getting Started - Quick start guide
- Security Review – Security analysis and review
- API Documentation - Detailed API reference
- Security Guide - Security best practices
- Threat Model - Comprehensive threat model
Security Considerations
This implementation follows NIST post-quantum cryptography standards. For security-related questions or vulnerabilities, please review our security policy.
Note: While this implementation has undergone formal verification for key security properties, we recommend a thorough security review before production use in critical applications.
Contributing
Contributions are welcome! Please read CONTRIBUTING.md for guidelines.
When implementing new cryptographic functionality:
- Place implementation code in the appropriate module directory
- Add public API functions to the module's
mod.rsfile - Document all public functions with doc comments
- Write comprehensive unit tests
- Add benchmarks for performance-critical operations
- Create example code demonstrating the functionality
- Add formal verification where appropriate
License
This project is licensed under the MIT License – see the LICENSE file for details.
Acknowledgments
- The NIST Post-Quantum Cryptography project
- The Open Quantum Safe project
- The Rust cryptography community