|
Download QUICK_START.md from Snapkitty/topological-quantum-computer: direct link, hf CLI and curl.
- Browser
- Download file 6.87 kB
-
https://huggingface.co/Snapkitty/topological-quantum-computer/resolve/main/QUICK_START.md
- Command line
-
hf download hf://Snapkitty/topological-quantum-computer/QUICK_START.md
-
curl -L -o QUICK_START.md https://huggingface.co/Snapkitty/topological-quantum-computer/resolve/main/QUICK_START.md
6.87 kB
Quick Start Guide: SHA-520 Quantum Cryptanalysis
Installation
# 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
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)
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
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
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
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
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
# 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
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
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
# 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.