|
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 | |
| ```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. | |