Skip to content

Commit 4d2d7b9

Browse files
committed
chore: consider worst cases
1 parent 772f605 commit 4d2d7b9

File tree

2 files changed

+40
-34
lines changed

2 files changed

+40
-34
lines changed

README.md

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -112,36 +112,36 @@ All commands share the Argon2id cost flags. For release mode we have:
112112
* 🖥️ **16 threads** (e.g. 16-core/64GB RAM desktop machine)
113113
* 🏭 **2048 threads** (e.g. 64×32-core/128GB RAM machines on some cloud provider)
114114

115-
| Bits | 16 threads 🖥️<br>(**systematic search**) | 2048 threads 🏭<br>(**random search**) | |
116-
|------|------------------------------------------|-----------------------------------------|-------------------|
117-
| | Worst-case time | Expected time | 99th percentile |
118-
| 1‑6 | 31 s | 30 s | 2 min 19 s |
119-
| 7 | 2 min 4 s | 30 s | 2 min 19 s |
120-
| 8 | 4 min 8 s | 30 s | 2 min 19 s |
121-
| 9 | 8 min 15 s | 30 s | 2 min 19 s |
122-
| 10 | 16 min 30 s | 31 s | 2 min 23 s |
123-
| 11 | 33 min 1 s | 35 s | 2 min 41 s |
124-
| 12 | 1 h 6 min | 47 s | 3 min 36 s |
125-
| 13 | 2 h 12 min | 1 min 17 s | 5 min 55 s |
126-
| 14 | 4 h 24 min | 2 min 17 s | 10 min 31 s |
127-
| 15 | 8 h 48 min | 4 min 17 s | 19 min 44 s |
128-
| 16 | 17 h 36 min | 8 min 20 s | 38 min 24 s |
129-
| 17 | 1 d 11 h | 16 min 19 s | 1 h 15 m |
130-
| 18 | 2 d 22 h | 32 min 20 s | 2 h 29 m |
131-
| 19 | 5 d 21 h | 1 h 4 m | 4 h 55 m |
132-
| 20 | 11 d 18 h | 2 h 8 m | 9 h 52 m |
133-
| 21 | 23 d 11 h | 4 h 16 m | 19 h 44 m |
134-
| 22 | 46 d 23 h | 8 h 32 m | 1 d 15 h |
135-
| 23 | 93 d 22 h | 17 h 4 m | 3 d 6 h |
136-
| 24 | 187 d 19 h | 1 d 10 h | 6 d 13 h |
137-
| 25 | 1 y 10 d | 2 d 20 h | 13 d 2 h |
138-
| 26 | 2 y 21 d | 5 d 16 h | 26 d 1 h |
139-
| 27 | 4 y 41 d | 11 d 9 h | 52 d 4 h |
140-
| 28 | 8 y 83 d | 22 d 18 h | 104 d 8 h |
141-
| 29 | 16 y 165 d | 45 d 12 h | 208 d 16 h |
142-
| 30 | 32 y 331 d | 91 d | 417 d 8 h |
143-
| 31 | 65 y 297 d | 182 d | 2 y 105 d |
144-
| 32 | 131 y 228 d | 364 d | 4 y 212 d |
115+
| Bits | 16 threads 🖥️<br>(**systematic search**) | 2048 threads 🏭<br>(**random search**) | | |
116+
|------|------------------------------------------|-----------------------------------------|-------------------|---------------------|
117+
| | Worst-case time | Expected time | 99th percentile | 99.9th percentile |
118+
| 1‑6 | 31 s | 30 s | 2 min 19 s | 3 min 27 s |
119+
| 7 | 2 min 4 s | 30 s | 2 min 19 s | 3 min 27 s |
120+
| 8 | 4 min 8 s | 30 s | 2 min 19 s | 3 min 27 s |
121+
| 9 | 8 min 15 s | 30 s | 2 min 19 s | 3 min 27 s |
122+
| 10 | 16 min 30 s | 31 s | 2 min 23 s | 3 min 33 s |
123+
| 11 | 33 min 1 s | 35 s | 2 min 41 s | 4 min 1 s |
124+
| 12 | 1 h 6 min | 47 s | 3 min 36 s | 5 min 24 s |
125+
| 13 | 2 h 12 min | 1 min 17 s | 5 min 55 s | 8 min 53 s |
126+
| 14 | 4 h 24 min | 2 min 17 s | 10 min 31 s | 15 min 47 s |
127+
| 15 | 8 h 48 min | 4 min 17 s | 19 min 44 s | 29 min 36 s |
128+
| 16 | 17 h 36 min | 8 min 20 s | 38 min 24 s | 57 min 36 s |
129+
| 17 | 1 d 11 h | 16 min 19 s | 1 h 15 m | 1 h 52 m |
130+
| 18 | 2 d 22 h | 32 min 20 s | 2 h 29 m | 3 h 43 m |
131+
| 19 | 5 d 21 h | 1 h 4 m | 4 h 55 m | 7 h 22 m |
132+
| 20 | 11 d 18 h | 2 h 8 m | 9 h 52 m | 14 h 48 m |
133+
| 21 | 23 d 11 h | 4 h 16 m | 19 h 44 m | 1 d 5 h |
134+
| 22 | 46 d 23 h | 8 h 32 m | 1 d 15 h | 2 d 11 h |
135+
| 23 | 93 d 22 h | 17 h 4 m | 3 d 6 h | 4 d 21 h |
136+
| 24 | 187 d 19 h | 1 d 10 h | 6 d 13 h | 9 d 18 h |
137+
| 25 | 1 y 10 d | 2 d 20 h | 13 d 2 h | 19 d 12 h |
138+
| 26 | 2 y 21 d | 5 d 16 h | 26 d 1 h | 39 d 1 h |
139+
| 27 | 4 y 41 d | 11 d 9 h | 52 d 4 h | 78 d 6 h |
140+
| 28 | 8 y 83 d | 22 d 18 h | 104 d 8 h | 156 d 12 h |
141+
| 29 | 16 y 165 d | 45 d 12 h | 208 d 16 h | 312 d 24 h |
142+
| 30 | 32 y 331 d | 91 d | 417 d 8 h | 1 y 261 d |
143+
| 31 | 65 y 297 d | 182 d | 2 y 105 d | 3 y 157 d |
144+
| 32 | 131 y 228 d | 364 d | 4 y 212 d | 6 y 318 d |
145145

146146
## Understanding Random Search Variance
147147

wskdf-cli/src/main.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -366,10 +366,10 @@ fn main() -> anyhow::Result<()> {
366366

367367
eprintln!("\nEstimated time to brute-force one preimage/key pair:");
368368
eprintln!(
369-
"{:>4} │ {:>18} │ {:>18} │ {:>18}",
370-
"bits", "systematic (worst)", "random (expected)", "random (99th %ile)"
369+
"{:>4} │ {:>18} │ {:>18} │ {:>18} │ {:>18}",
370+
"bits", "systematic (worst)", "random (expected)", "random (99th %ile)", "random (99.9th %ile)"
371371
);
372-
eprintln!("{:->4}-┼-{:->18}-┼-{:->18}-┼-{:->18}", "", "", "", "");
372+
eprintln!("{:->4}-┼-{:->18}-┼-{:->18}-┼-{:->18}-┼-{:->18}", "", "", "", "", "");
373373

374374
for bits in 1u8..=32 {
375375
// space = 2^(bits-1) because MSB is always 1
@@ -383,11 +383,13 @@ fn main() -> anyhow::Result<()> {
383383
let random_expected_work = (space / (2.0 * threads as f64)).max(1.0);
384384
let random_expected_secs = random_expected_work * thread_avg_time;
385385
let random_99th_secs = random_expected_secs * percentile_multiplier(0.99);
386+
let random_999th_secs = random_expected_secs * percentile_multiplier(0.999);
386387

387388
let systematic_human = pretty(systematic_secs);
388389
let random_human = pretty(random_expected_secs);
389390
let random_99th_human = pretty(random_99th_secs);
390-
eprintln!("{bits:>4} │ {systematic_human:>18} │ {random_human:>18} │ {random_99th_human:>18}");
391+
let random_999th_human = pretty(random_999th_secs);
392+
eprintln!("{bits:>4} │ {systematic_human:>18} │ {random_human:>18} │ {random_99th_human:>18} │ {random_999th_human:>18}");
391393
}
392394

393395
eprintln!("\nSearch strategy explanation:");
@@ -406,6 +408,10 @@ fn main() -> anyhow::Result<()> {
406408
"• 99th percentile: ~{:.1}× expected time",
407409
percentile_multiplier(0.99)
408410
);
411+
eprintln!(
412+
"• 99.9th percentile: ~{:.1}× expected time",
413+
percentile_multiplier(0.999)
414+
);
409415
}
410416
Commands::GenerateSalt { output } => {
411417
ensure_file_does_not_exists(&output, "output file already exists")?;

0 commit comments

Comments
 (0)