在rainbowtable中一个非常重要的指标是success rate,成功率,例如success rate为99.9%,也就是说你破解1000个密码时,有999个密码能破解成功。
 
Philippe Oechslin's paper on time-memory trade-off一文中,作者给出了单表和多表的success rate 公式,根据这个公式,可以用matlab计算出success rate,下面给出实验的代码
% 1 - (1 - 1 / N)^(m(1) + m(2) + m(3) + ... + m(t - 1))
% m(1) = m, m(i) = N * (1 - (1 - 1 / N) ^ m(i - 1))

function ret = calc_success_probability(N, t, m)
arr = zeros(1, t - 1);
arr(1) = m;
for i = 2 : t - 1
arr(i) = N * (1 - (1 - 1 / N) ^ arr(i - 1));
end;

exp = 0;
for i = 1 : t - 1
exp = exp + arr(i);
end;

ret = 1 - (1 - 1 / N) ^ exp;
 
函数参数:
N                  密钥空间
t                    链表长度
m                  链表个数
 
在matlab上运行得到:
>> calc_success_probability(80603140212, 2400, 40000000)
ans =
    0.6055
这是单表的成功率,再套入多表公式中,即可得出整个彩虹表的成功概率。