chainLen = chainLenRCrack − 1
keySpace =
maxPwLen
i = minPwLen
charSetLen
i
=
charSetLen
maxPwLen + 1
charSetLen
minPwLen
charSetLen − 1
tableWorkFactor =
chainLenchainCount
keySpace
totalWorkFactor = numTablestableWorkFactor
preWork =
chainLen ∙ (chainLen + 1)
2
bruteForcePoint
keySpace
preWorknumTables
expectedUniqueChains = euc(chainLen) ≈
chainCount
tableWorkFactor
2
+ 1
euc(1) = chainCount
euc(i) = keySpace
(
1 − e
-euc(i − 1)
keySpace
)
tableGenerationTime =
keySpacetableWorkFactor
stepSpeed
=
chainCountchainLen
stepSpeed
perfectTableSuccessRate ≈ 1 −
(
1 −
uniqueChains
keySpace
)
chainLen
≈ 1 −
(
1 −
expectedUniqueChains
keySpace
)
chainLen
imperfectTableSuccessRate ≈ 1 −
chainLen
i = 1
(
1 −
euc(i)
keySpace
)
totalSuccessRate ≈ 1 −
numTables
i = 1
(
1 − tableSuccessRate
i
)
≈ 1 − (1 − tableSuccessRate)
numTables
1
tableWorkFactor
1
chainLen ∙ (1 − (1 − perfectTableSuccessRate)
1
chainLen
)
1
2
perfectTableSuccessRate ≈ 1 −
(
1 −
tableWorkFactor
chainLen ∙ (1 +
tableWorkFactor
2
)
)
chainLen
chainCount
expectedUniqueChains
1 −
expectedUniqueChainschainLen
2 ∙ keySpace
chainCount
8 ∙ keySpace
numTablesbruteForcePoint
+ 1
− 1
2
tableSuccessRate ≈ 1 − (1 − totalSuccessRate)
1
numTables
minTables = ceiling
(
log(1 − totalSuccessRate)
log(1 − maxTableSuccessRate)
)
maxTableSuccessRate > 0.859