š SipHash Short-input PRF
š Quick Navigation
š Overview
SipHash is a family of cryptographic pseudorandom functions (PRFs) designed by Jean-Philippe Aumasson and Daniel J. Bernstein. It's optimized for short inputs and provides strong security guarantees while maintaining exceptional performance. SipHash is primarily used to protect hash tables against hash-flooding denial-of-service attacks.
⨠Key Features
High Performance
Extremely fast on short inputs (< 1KB)
DoS Protection
Designed to prevent hash-flooding attacks
Cryptographically Secure
Provides strong PRF security guarantees
Simple Design
Easy to implement correctly and efficiently
Constant Time
Resistant to timing attacks when properly implemented
Widely Adopted
Used in Rust, Python, Ruby, and many other systems
šÆ Common Use Cases
š”ļø Security Applications
- Hash table protection against DoS attacks
- Short message authentication (< 1KB)
- Network protocol header authentication
- Secure cache key generation
š¾ Data Structures
- Database indexing with DoS protection
- Consistent hashing for load balancing
- Bloom filters with security guarantees
- Secure hash maps and dictionaries
š§ Algorithm Details
š SipHash Variants
š Security Properties
PRF Security
Indistinguishable from random function
Collision Resistance
2^32 expected collisions for 8-byte output
Key Recovery
Computationally infeasible without side-channels
DoS Resistance
Prevents algorithmic complexity attacks
š§® Algorithm Structure
SipHash processes input in 8-byte blocks using ARX operations:
SipHash(k, m) = SipRound^d(vā, vā, vā, vā)
The internal state is initialized with the key and updated through compression and finalization rounds.
š» Implementation
SipHash is designed for ease of implementation while maintaining security. The following examples demonstrate various use cases.
Basic Usage
Hash Table Protection
Network Protocol Authentication
š Security Considerations
ā ļø Important Security Notes
- Always use random keys from a CSPRNG
- Never reuse keys across different contexts
- Implement constant-time comparison for authentication tags
- Rotate keys periodically in long-running applications
- SipHash is NOT suitable for password hashing
Secure Key Management
ā” Performance Analysis
Speed Benchmarks
| Input Size | SipHash-2-4 | SipHash-1-3 | Throughput |
|---|---|---|---|
| 8 bytes | 3.2 cycles/byte | 2.1 cycles/byte | 7.5 GB/s |
| 64 bytes | 1.8 cycles/byte | 1.2 cycles/byte | 13.3 GB/s |
| 256 bytes | 1.5 cycles/byte | 1.0 cycles/byte | 16.0 GB/s |
| 1024 bytes | 1.4 cycles/byte | 0.9 cycles/byte | 17.1 GB/s |
Performance Optimization
šÆ Use Cases and Examples
Secure Cache Implementation
Thread-safe cache with SipHash-protected keys to prevent cache poisoning attacks.
Consistent Hashing
Load balancing with consistent hashing protected against malicious key distribution.
DoS Attack Protection
Demonstration of how SipHash prevents hash-flooding attacks in hash tables.
āļø Comparison with Other Hash Functions
SipHash vs HMAC
| Aspect | SipHash | HMAC-SHA256 |
|---|---|---|
| Speed (short inputs) | ~7.5 GB/s | ~1.2 GB/s |
| Output Size | 8 bytes | 32 bytes |
| Key Size | 16 bytes | Any length |
| Primary Use | Hash tables, short MACs | General MAC |
| DoS Protection | Excellent | Good |
SipHash vs Non-Cryptographic Hashes
| Aspect | SipHash | CityHash | MurmurHash |
|---|---|---|---|
| Cryptographic Security | Yes | No | No |
| DoS Resistance | Yes | No | No |
| Speed | Fast | Faster | Faster |
| Key Required | Yes | No | Optional |
š Related Algorithms
š References
- SipHash: a fast short-input PRF - Original paper by Aumasson & Bernstein
- SipHash Paper (PDF) - Detailed algorithm description
- Security Analysis - Security properties and threat model
- Rust Implementation - Reference implementation in Rust std