chainLen = chainLenRCrack − 1
keySpace =
charSetLeni
=
charSetLenmaxPwLen + 1
−
charSetLenminPwLen
charSetLen − 1
tableWorkFactor =
chainLen ∙ chainCount
keySpace
totalWorkFactor = numTables ∙ tableWorkFactor
preWork =
chainLen ∙ (chainLen + 1)
2
bruteForcePoint ≲
keySpace
preWork ∙ numTables
expectedUniqueChains =
euc(
chainLen) ≈
euc(1) = chainCount
euc(
i) =
keySpace ∙
(
1 −
e
)
tableGenerationTime =
keySpace ∙ tableWorkFactor
stepSpeed
=
chainCount ∙ chainLen
stepSpeed
perfectTableSuccessRate ≈ 1 −
(
1 −
≈ 1 −
(
1 −
expectedUniqueChains
keySpace
imperfectTableSuccessRate ≈ 1 −
(
1 −
)
totalSuccessRate ≈ 1 −
(
1 −
tableSuccessRatei
)
≈
1 − (1 −
tableSuccessRate)
numTables
≈
1
chainLen ∙ (1 − (1 −
perfectTableSuccessRate)
)
−
perfectTableSuccessRate ≈ 1 −
(
1 −
chainCount ≈
expectedUniqueChains
1 −
expectedUniqueChains ∙ chainLen
2 ∙ keySpace
chainCount ≈
√
8 ∙ keySpace
numTables ∙ bruteForcePoint
+ 1
− 1
2
tableSuccessRate ≈ 1 − (1 −
totalSuccessRate)
minTables =
ceiling
(
log(1 − totalSuccessRate)
log(1 − maxTableSuccessRate)
)
maxTableSuccessRate > 0.859