Skip to content

Instantly share code, notes, and snippets.

# iancoleman/bruteforce_table.py Created Jan 12, 2018

number of tries to generate a specific key with a specific probability
 # Prints out a table of the number of tries to generate a specific key with a # specific probability # # More info at https://forum.safedev.org/t/secure-random-relocation/1321/41 # # It's messy but the maths is correct. import math def tidyNum(n): if n < 1000: return str(n) if n < 1000000: return str(round(n/1000)) + "K" if n < 1000000000: return str(round(n/1000000)) + "M" return str(round(n/1000000000)) + "B" # Initiate the results probabilities = [0.1, 0.5, 0.9, 0.99, 0.9999] probabilityHeading = [""] probabilityHeading.extend(probabilities) probabilityHeading.extend(["", ""]) rows = [ probabilityHeading, ["Prefix Length", "", "", "", "", "", "Sections", "Vaults"], ] # calculate the values for prefixLength in range(3,41): row = [prefixLength] for probability in probabilities: totalGuesses = round(math.log(1-probability) / math.log(1-1/(2**prefixLength))) tidyGuesses = tidyNum(totalGuesses) row.append(tidyGuesses) numSections = 2**prefixLength numVaults = numSections * 50 row.extend([tidyNum(numSections), tidyNum(numVaults)]) rows.append(row) # print the output to stdout rowFmt = "{:>13} | {:>8} {:>8} {:>6} {:>6} {:>6} | {:>6} {:>6}" print("Number of guesses to find a key matching a prefix\n") print(" "*13 + " | probability of generating a valid key |") for row in rows: print(rowFmt.format(*row))
to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.