@@ -147,37 +147,37 @@ The table below shows realistic scenarios:
147147 * 🖥️ ** 16 threads** (e.g. 16-core/64GB RAM desktop machine)
148148 * 🏭 ** 2048 threads** (e.g. 64×32-core/128GB RAM machines on some cloud provider)
149149
150- | Bits | 16 threads 🖥️<br >(** systematic search** ) | 2048 threads 🏭<br >(** systematic search** ) | 2048 threads 🏭<br >(** random search** ) | | |
151- | ------| ------------------------------------------| ---------------------------------------------| ----------------------------------------| -------------------| ---------------------|
152- | | Worst-case time | Worst-case time | Expected time | 99th percentile | 99.9th percentile |
153- | 1‑ 5 | 30 s | 30 s | 30 s | 2 min 19 s | 3 min 27 s |
154- | 6 | 1 min 0 s | 30 s | 30 s | 2 min 19 s | 3 min 27 s |
155- | 7 | 2 min 0 s | 30 s | 30 s | 2 min 19 s | 3 min 27 s |
156- | 8 | 4 min 8 s | 30 s | 30 s | 2 min 19 s | 3 min 27 s |
157- | 9 | 8 min 0 s | 30 s | 30 s | 2 min 19 s | 3 min 27 s |
158- | 10 | 16 min 30 s | 30 s | 31 s | 2 min 23 s | 3 min 33 s |
159- | 11 | 33 min 1 s | 30 s | 35 s | 2 min 41 s | 4 min 1 s |
160- | 12 | 1 h 6 min | 30 s | 47 s | 3 min 36 s | 5 min 24 s |
161- | 13 | 2 h 12 min | 1 min 0 s | 1 min 17 s | 5 min 55 s | 8 min 53 s |
162- | 14 | 4 h 24 min | 2 min 0 s | 2 min 17 s | 10 min 31 s | 15 min 47 s |
163- | 15 | 8 h 48 min | 4 min 0 s | 4 min 17 s | 19 min 44 s | 29 min 36 s |
164- | 16 | 17 h 36 min | 8 min 0 s | 8 min 20 s | 38 min 24 s | 57 min 36 s |
165- | 17 | 1 d 11 h | 16 min 0 s | 16 min 19 s | 1 h 15 m | 1 h 52 m |
166- | 18 | 2 d 22 h | 32 min 0 s | 32 min 20 s | 2 h 29 m | 3 h 43 m |
167- | 19 | 5 d 21 h | 1 h 4 m | 1 h 4 m | 4 h 55 m | 7 h 22 m |
168- | 20 | 11 d 9 h | 2 h 8 m | 2 h 8 m | 9 h 52 m | 14 h 48 m |
169- | 21 | 23 d 11 h | 4 h 16 m | 4 h 16 m | 19 h 44 m | 1 d 5 h |
170- | 22 | 46 d 23 h | 8 h 32 m | 8 h 32 m | 1 d 15 h | 2 d 11 h |
171- | 23 | 91 d 1 h | 17 h 4 m | 17 h 4 m | 3 d 6 h | 4 d 21 h |
172- | 24 | 182 d 1 h | 1 d 10 h | 1 d 10 h | 6 d 13 h | 9 d 18 h |
173- | 25 | 364 d 2 h | 2 d 20 h | 2 d 20 h | 13 d 2 h | 19 d 12 h |
174- | 26 | 728 d 4 h | 5 d 17 h | 5 d 17 h | 26 d 1 h | 39 d 1 h |
175- | 27 | 1456 d 8 h | 11 d 9 h | 11 d 9 h | 52 d 4 h | 78 d 6 h |
176- | 28 | 8 y 83 d | 22 d 18 h | 22 d 18 h | 104 d 8 h | 156 d 12 h |
177- | 29 | 16 y 165 d | 45 d 12 h | 45 d 12 h | 208 d 16 h | 312 d 24 h |
178- | 30 | 32 y 331 d | 91 d | 91 d | 417 d 8 h | 1 y 261 d |
179- | 31 | 65 y 297 d | 182 d | 182 d | 2 y 105 d | 3 y 157 d |
180- | 32 | 131 y 228 d | 364 d | 364 d | 4 y 212 d | 6 y 318 d |
150+ | Bits | 16 threads 🖥️<br >(** systematic search** ) | 2048 threads 🏭<br >(** systematic search** ) | 2048 threads 🏭<br >(** random search** ) | | |
151+ | ------| ------------------------------------------| ---------------------------------------------| ----------------------------------------| ----------------------- | -- ---------------------|
152+ | | Worst-case time | Worst-case time | Expected time | 99th percentile | 99.9th percentile |
153+ | 1- 5 | 30 s | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
154+ | 6 | 1 min 0 s | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
155+ | 7 | 2 min 0 s | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
156+ | 8 | 4 min 0 s | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
157+ | 9 | 8 min 0 s | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
158+ | 10 | 16 min 0 s | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
159+ | 11 | 32 min 0 s | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
160+ | 12 | 1 h 4 min | 30 s | 30 s | 2 min 18 s | 3 min 27 s |
161+ | 13 | 2 h 8 min | 1 min 0 s | 1 min 0 s | 4 min 36 s | 6 min 54 s |
162+ | 14 | 4 h 16 min | 2 min 0 s | 2 min 0 s | 9 min 13 s | 13 min 49 s |
163+ | 15 | 8 h 32 min | 4 min 0 s | 4 min 0 s | 18 min 25 s | 27 min 38 s |
164+ | 16 | 17 h 4 min | 8 min 0 s | 8 min 0 s | 36 min 50 s | 55 min 16 s |
165+ | 17 | 1 d 10 h | 16 min 0 s | 16 min 0 s | 1 h 14 min | 1 h 51 min |
166+ | 18 | 2 d 20 h | 32 min 0 s | 32 min 0 s | 2 h 27 min | 3 h 41 min |
167+ | 19 | 5 d 17 h | 1 h 4 min | 1 h 4 min | 4 h 55 min | 7 h 22 min |
168+ | 20 | 11 d 9 h | 2 h 8 min | 2 h 8 min | 9 h 49 min | 14 h 44 min |
169+ | 21 | 22 d 18 h | 4 h 16 min | 4 h 16 min | 19 h 39 min | 1 d 5 h |
170+ | 22 | 45 d 12 h | 8 h 32 min | 8 h 32 min | 1 d 15 h | 2 d 11 h |
171+ | 23 | 91 d 0 h | 17 h 4 min | 17 h 4 min | 3 d 7 h | 4 d 22 h |
172+ | 24 | 182 d 0 h | 1 d 10 h | 1 d 10 h | 6 d 13 h | 9 d 20 h |
173+ | 25 | 364 d 0 h | 2 d 20 h | 2 d 20 h | 13 d 2 h | 19 d 16 h |
174+ | 26 | 1 y 363 d | 5 d 17 h | 5 d 17 h | 26 d 5 h | 39 d 7 h |
175+ | 27 | 3 y 361 d | 11 d 9 h | 11 d 9 h | 52 d 10 h | 78 d 14 h |
176+ | 28 | 7 y 358 d | 22 d 18 h | 22 d 18 h | 104 d 19 h | 157 d 5 h |
177+ | 29 | 15 y 351 d | 45 d 12 h | 45 d 12 h | 209 d 14 h | 314 d 9 h |
178+ | 30 | 31 y 338 d | 91 d 1 h | 91 d 1 h | 1 y 54 d | 1 y 264 d |
179+ | 31 | 63 y 311 d | 182 d 1 h | 182 d 1 h | 2 y 108 d | 3 y 163 d |
180+ | 32 | 127 y 257 d | 364 d 2 h | 364 d 2 h | 4 y 217 d | 6 y 325 d |
181181
182182
183183## Understanding Random Search Variance
@@ -203,65 +203,66 @@ For planning purposes, consider the 99th percentile times shown in the table abo
203203
204204
205205### Real world example using the ` benchmark ` command
206+ The following is an ** example output** . Run this command on your own hardware to get accurate time estimates for your machine.
206207``` bash
207208$ cargo run --release -F alkali -- benchmark -i 1 -t 16
208209Using 16 threads for benchmark
209210Starting benchmark with 1 iterations across 16 threads...
210211
211212Benchmark results:
212213Threads: 16
213- Total time: 35.48s
214+ Total time: 29.63s
214215Total iterations: 16
215- Global average time per derivation: 2217.33ms
216- Global derivations per second: 0.45
217- Thread average time per derivation: 35.48s
216+ Global average time per derivation: 1851.87ms
217+ Global derivations per second: 0.54
218+ Thread average time per derivation: 29.63s
218219Thread derivations per second: 0.03
219220
220- Estimated time to brute-force one preimage/key pair :
221- Note: This benchmark uses 16 threads with systematic search
222- For comparison with random search percentiles, see README table
223-
224- bits │ systematic (worst) │ systematic (expected)
225- -----┼--------------------┼-------------------
226- 1 │ 35s │ 35s
227- 2 │ 35s │ 35s
228- 3 │ 35s │ 35s
229- 4 │ 35s │ 35s
230- 5 │ 35s │ 35s
231- 6 │ 1min 11s │ 35s
232- 7 │ 2min 22s │ 1min 11s
233- 8 │ 4min 44s │ 2min 22s
234- 9 │ 9min 28s │ 4min 44s
235- 10 │ 18min 55s │ 9min 28s
236- 11 │ 37min 51s │ 18min 55s
237- 12 │ 1h 16min │ 37min 51s
238- 13 │ 2h 31min │ 1h 16min
239- 14 │ 5h 3min │ 2h 31min
240- 15 │ 10h 5min │ 5h 3min
241- 16 │ 20h 11min │ 10h 5min
242- 17 │ 1d 16h │ 20h 11min
243- 18 │ 3d 9h │ 1d 16h
244- 19 │ 6d 17h │ 3d 9h
245- 20 │ 13d 11h │ 6d 17h
246- 21 │ 26d 22h │ 13d 11h
247- 22 │ 53d 20h │ 26d 22h
248- 23 │ 107d 15h │ 53d 20h
249- 24 │ 215d 7h │ 107d 15h
250- 25 │ 1y 66d │ 215d 7h
251- 26 │ 2y 131d │ 1y 66d
252- 27 │ 4y 262d │ 2y 131d
253- 28 │ 9y 159d │ 4y 262d
254- 29 │ 18y 319d │ 9y 159d
255- 30 │ 37y 273d │ 18y 319d
256- 31 │ 75y 181d │ 37y 273d
257- 32 │ 150y 362d │ 75y 181d
258-
259- Systematic search explanation:
260- • Worst-case: One thread gets unlucky and searches entire partition
261- • Expected case: Threads find target halfway through their partitions on average
262- • No variance: Deterministic partitioning means predictable bounds
263-
264- For random search with percentiles, see the README table comparing
265- systematic (16 threads) vs random search (2048 threads)
221+ Estimated time to brute-force with measured derivation time :
222+ Average derivation time: 29.63s
223+ Thread count: 16
224+
225+ bits │ systematic-16t │ systematic-16t │ random-16t │ random-16t │ random-16t
226+ │ (expected) │ (worst case) │ (expected)│ (99th %) │ (99.9th %)
227+ -----┼----------------┼----------------┼-----------┼-----------┼------------
228+ 1 │ 30s │ 30s │ 30s │ 2min 16s │ 3min 25s
229+ 2 │ 30s │ 30s │ 30s │ 2min 16s │ 3min 25s
230+ 3 │ 30s │ 30s │ 30s │ 2min 16s │ 3min 25s
231+ 4 │ 30s │ 30s │ 30s │ 2min 16s │ 3min 25s
232+ 5 │ 30s │ 30s │ 30s │ 2min 16s │ 3min 25s
233+ 6 │ 30s │ 59s │ 59s │ 4min 33s │ 6min 49s
234+ 7 │ 59s │ 1min 59s │ 1min 59s │ 9min 6s │ 13min 39s
235+ 8 │ 1min 59s │ 3min 57s │ 3min 57s │ 18min 12s │ 27min 17s
236+ 9 │ 3min 57s │ 7min 54s │ 7min 54s │ 36min 23s │ 54min 35s
237+ 10 │ 7min 54s │ 15min 48s │ 15min 48s │ 1h 13min │ 1h 49min
238+ 11 │ 15min 48s │ 31min 36s │ 31min 36s │ 2h 26min │ 3h 38min
239+ 12 │ 31min 36s │ 1h 3min │ 1h 3min │ 4h 51min │ 7h 17min
240+ 13 │ 1h 3min │ 2h 6min │ 2h 6min │ 9h 42min │ 14h 33min
241+ 14 │ 2h 6min │ 4h 13min │ 4h 13min │ 19h 24min │ 1d 5h
242+ 15 │ 4h 13min │ 8h 26min │ 8h 26min │ 1d 15h │ 2d 10h
243+ 16 │ 8h 26min │ 16h 51min │ 16h 51min │ 3d 6h │ 4d 20h
244+ 17 │ 16h 51min │ 1d 10h │ 1d 10h │ 6d 11h │ 9d 17h
245+ 18 │ 1d 10h │ 2d 19h │ 2d 19h │ 12d 23h │ 19d 10h
246+ 19 │ 2d 19h │ 5d 15h │ 5d 15h │ 25d 21h │ 38d 20h
247+ 20 │ 5d 15h │ 11d 6h │ 11d 6h │ 51d 18h │ 77d 15h
248+ 21 │ 11d 6h │ 22d 11h │ 22d 11h │ 103d 12h │ 155d 6h
249+ 22 │ 22d 11h │ 44d 23h │ 44d 23h │ 207d 0h │ 310d 12h
250+ 23 │ 44d 23h │ 89d 22h │ 89d 22h │ 1y 49d │ 1y 256d
251+ 24 │ 89d 22h │ 179d 19h │ 179d 19h │ 2y 98d │ 3y 147d
252+ 25 │ 179d 19h │ 359d 14h │ 359d 14h │ 4y 196d │ 6y 294d
253+ 26 │ 359d 14h │ 1y 354d │ 1y 354d │ 9y 27d │ 13y 223d
254+ 27 │ 1y 354d │ 3y 343d │ 3y 343d │ 18y 54d │ 27y 81d
255+ 28 │ 3y 343d │ 7y 322d │ 7y 322d │ 36y 108d │ 54y 162d
256+ 29 │ 7y 322d │ 15y 279d │ 15y 279d │ 72y 216d │ 108y 324d
257+ 30 │ 15y 279d │ 31y 192d │ 31y 192d │ 145y 67d │ 217y 283d
258+ 31 │ 31y 192d │ 63y 19d │ 63y 19d │ 290y 135d │ 435y 202d
259+ 32 │ 63y 19d │ 126y 38d │ 126y 38d │ 580y 269d │ 871y 39d
260+
261+ Explanation:
262+ • Systematic (expected): Average case with 16 threads, each searching half their partition
263+ • Systematic (worst): One thread searches entire partition of 2^(n-1) / 16 candidates
264+ • Random (expected): 16 threads with expected 2^(n-1) / 16 trials per thread
265+ • Random (99th %): 99% chance completion is faster than this
266+ • Random (99.9th %): 99.9% chance completion is faster than this
266267` ` `
267268---
0 commit comments