パスワードの解析にかかる年数を求めるプログラム

ネタ元のhttp://d.hatena.ne.jp/ryoko_komachi/20060409/1144591046
より

MD5は30000hash/sec

との事ですので
前回使用したプログラム*1を元に作ってみました。


#2006年現在 一般的なPCでmd5は30000/secくらい
def pwd_crack_time(n,onesec_cn)
byou_cn = onesec_cn
hun_cn = byou_cn * 60
zi_cn = hun_cn * 60
niti_cn = zi_cn * 24
nen_cn = niti_cn * 365

year = n / nen_cn
rest = n % nen_cn
day = rest / niti_cn
rest = rest % niti_cn
hour = rest / zi_cn
rest = rest % zi_cn
minute = rest / hun_cn
rest= rest % hun_cn
sec = rest / byou_cn

printf("Idioticalな方法で%d/secの速度で試行できると仮定して検索すると
%d年 %d日 %d時間 %d分 %d秒
で検索が完了します。\n\n",
onesec_cn,year,day,hour,minute,sec);

end

def pow(n,m)
t = n
if m<=0
return 1
end
m = m -1
for i in 1..m
t *= n
end
return t
end


def password_print(count)
n = 36
for i in 1..count
m = i
t = pow(n,m)
printf("%s : %s\n",i,t)
pwd_crack_time(t,30000)
end
end

password_print( 20 )

このプログラムの実行結果より以下に結論!
パスワードのIdoticな方法でのアタック時間
4文字までは1分以内で解けてしまう。
5文字までは1時間以内で解けてしまう。
6文字までは1日以内で解けてしまう。
7文字までは1ヶ月ほどで解けてしまう。
8文字までは3年以内に解けてしまう。
9文字までは100年とちょっとで解けてしまう。
10文字までは3864年とちょっとで解けてしまう。
11文字で139123年の月日がかかってしまう。やっと中国4000年の歴史より長くなってしまった・・・
これ以上長いパスワード長な割愛!!
以上。パスワードは10文字以上にしようねっていうのはこういう理由からだ。
だが、クラッカーは様々なアプローチからの予測アルゴリズムを使ってくるので一概にこの時間を信用してはいけない・・・と感じる。