在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))
% 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 |
这是单表的成功率,再套入多表公式中,即可得出整个彩虹表的成功概率。
转载于:https://blog.51cto.com/zhengliang/200857