SNAPKITTYWEST's picture
push from SNAPKITTYWEST/topological-quantum-computer
d6f21bb verified
|
Raw History Blame Contribute Delete
6.87 kB
# Quick Start Guide: SHA-520 Quantum Cryptanalysis
## Installation
```bash
# Navigate to project directory
cd C:\Users\jessi\Desktop\topological-quantum-computer
# Add to Python path
export PYTHONPATH="${PYTHONPATH}:$(pwd)"
```
## Quick Examples
### SHA-520 Reference Implementation
```python
from python.classical import SHA520
# Create hasher with 80 rounds
hasher = SHA520(rounds=80)
# Hash data
digest = hasher.digest(b"hello world")
print(digest.hex()) # 520-bit (65-byte) hash
# Use reduced rounds for faster testing
hasher_4 = SHA520(rounds=4)
digest_4 = hasher_4.digest(b"test")
```
### Toy SHA-520 (Fast Testing)
```python
from python.classical import ToySHA520
# Create toy hasher: 4 rounds, 32-bit words, 128-bit output
toy = ToySHA520(rounds=4)
# Hash data
digest = toy.digest(b"test") # 16-byte (128-bit) hash
print(digest.hex())
```
### Classical Attacks
```python
from python.classical import measure_classical_complexity, brute_force_preimage
# Estimate complexity
complexity = measure_classical_complexity(rounds=80, target_bits=64)
print(f"Preimage trials: {complexity['preimage_trials']:.2e}")
print(f"Preimage time: {complexity['preimage_time_years']} years")
# Brute force preimage search
target = SHA520().digest(b"secret")
result, trials, elapsed = brute_force_preimage(target, SHA520().digest, max_trials=10000)
```
### Quantum Circuits
```python
from python.quantum import ReversibleSHA520, GroverSHA520
# Build reversible SHA-520 oracle
rev_sha = ReversibleSHA520(rounds=4, n_qubits_message=32)
oracle = rev_sha.build_oracle(b'\x00' * 64)
print(f"Oracle circuit: {oracle}")
print(f"Resources: {rev_sha.resource_estimate()}")
# Build Grover circuit
grover = GroverSHA520(rounds=4, target_hash=b'\x00' * 64, n_qubits_message=32)
circuit = grover.build_grover_preimage()
resources = grover.estimate_resources()
print(f"Grover iterations: {resources['grover_iterations']}")
print(f"Circuit depth: {resources['total_circuit_depth']}")
```
### Speedup Analysis
```python
from python.quantum import grover_speedup_vs_classical, estimate_resources
# Compare quantum vs classical
speedup = grover_speedup_vs_classical(target_bits=64, rounds=80)
print(f"Speedup: {speedup['speedup_factor']:.2e}x")
print(f"Grover time: {speedup['grover_time_sec']:.2e} sec")
print(f"Classical time: {speedup['classical_time_sec']:.2e} sec")
# Resource requirements
resources = estimate_resources(rounds=80, target_bits=64)
print(f"Logical qubits: {resources['total_logical_qubits']}")
print(f"Physical qubits (with error correction): {resources['total_logical_qubits']}")
```
### Simulators
```python
from python.simulators import TensorNetworkSimulator, estimate_circuit_resources
# Tensor network simulator
sim = TensorNetworkSimulator(n_qubits=8)
print(f"Created {sim.n_qubits}-qubit simulator")
# Qiskit resource estimation
resources = estimate_circuit_resources(rounds=4, target_bits=32)
print(f"Circuit depth: {resources['total_depth']}")
print(f"Gates: {resources['total_gates']}")
# Run with Qiskit (if installed)
try:
from python.simulators import run_grover_simulation
result = run_grover_simulation(rounds=4, target_bits=8, shots=1024)
print(f"Success rate: {result['success_rate']:.2%}")
except ImportError:
print("Qiskit not available")
```
## Module Organization
```
python/
β”œβ”€β”€ classical/
β”‚ β”œβ”€β”€ sha520_ref.py # SHA-520 hash function
β”‚ β”œβ”€β”€ classical_baselines.py # Classical attacks & complexity
β”‚ └── toy_permutations.py # Reduced-round testing
β”œβ”€β”€ quantum/
β”‚ β”œβ”€β”€ quantum_sha520.py # Reversible circuits
β”‚ └── grover_sha520.py # Grover's algorithm
└── simulators/
β”œβ”€β”€ tn_simulator.py # Tensor network MPS
└── qiskit_simulation.py # Qiskit wrapper
```
## Key Classes
| Class | Module | Purpose |
|-------|--------|---------|
| `SHA520` | classical.sha520_ref | Full SHA-520 hash (configurable rounds) |
| `ToySHA520` | classical.toy_permutations | Reduced-round toy version (4 rounds, 128-bit) |
| `ReversibleSHA520` | quantum.quantum_sha520 | Reversible quantum oracle |
| `GroverSHA520` | quantum.grover_sha520 | Grover's preimage search |
| `QuantumCircuit` | quantum.quantum_sha520 | Device-independent circuit abstraction |
| `TensorNetworkSimulator` | simulators.tn_simulator | MPS quantum simulator |
## Important Constants
- **SHA-520 digest size**: 65 bytes (520 bits)
- **SHA-520 block size**: 128 bytes (1024 bits)
- **Toy SHA-520 digest size**: 16 bytes (128 bits)
- **Grover optimal iterations**: Ο€/4 Γ— √(search space)
## Performance Notes
- **SHA-520-4** (4 rounds): ~10-100x faster than SHA-520-80
- **Toy SHA-520**: ~100x faster than full SHA-520
- **Quantum advantage**: Appears at ~48-bit search space
- **Resource scaling**: Circuit depth ∝ √(search space) for Grover
## Common Use Cases
### Test Quantum Attack Strategy
```python
# Use toy SHA-520 for fast iteration
toy = ToySHA520(rounds=4)
target = toy.digest(b"test_message")
# Estimate Grover resources
from python.quantum import estimate_resources
resources = estimate_resources(rounds=4, target_bits=16)
print(f"Qubits needed: {resources['total_logical_qubits']}")
```
### Analyze Speedup at Different Scales
```python
from python.quantum import grover_speedup_vs_classical
for bits in [16, 32, 48, 64]:
speedup = grover_speedup_vs_classical(target_bits=bits)
print(f"{bits}-bit: {speedup['speedup_factor']:.2e}x")
```
### Profile Classical Attack
```python
from python.classical import timing_benchmark
sha = SHA520(rounds=80)
benchmark = timing_benchmark(sha.digest, message_size=128, iterations=1000)
print(f"Throughput: {benchmark['throughput_mbps']:.1f} MB/s")
```
## Optional Dependencies
```bash
# For Qiskit integration
pip install qiskit qiskit-aer
# For better performance
pip install numpy scipy
```
## Reference Documentation
- SHA-520 spec: 520-bit output, configurable rounds
- Grover complexity: O(√N) queries for N-item search
- Physical qubits: ~1000Γ— logical qubits with surface code error correction
- Gate time assumptions: 100 ns (current NISQ baseline)
## Troubleshooting
**ImportError on quantum module**: Check relative imports in `quantum/grover_sha520.py`
**Qiskit warnings**: These are safe; Qiskit is optional. Resource estimates work without it.
**Memory issues on large simulations**: MPS simulator designed for ≀16 qubits; use resource estimates for larger systems.
**Unrealistic speedups**: Remember speedup scales with qubit count and error rates; current NISQ hardware would not achieve these advantages.