基于时空折中算法的彩虹表(1)

单向散列函数的特点是对任意长度的输入很容易生成长度确定的杂凑值,但是其逆过程几乎是不可能的。即h=H(p)已知p求h是容易的,但是已知h求p是困难的。常见的单项散列函数有MD4, MD5, SHA,windows常用的单项散列函数是LM, NTLM。

单向散列函数的应用面是十分广泛的,这里讲述的一种应用是,在数据库中存储口令的时候,如果是直接存储明文,则数据库管理员们可以轻而易举地得到用户的用户名和口令,这无疑是危险的。所以,工程师们在建站的时候,常常使用MD5对明文口令进行加密,将得到的哈希值存在数据库中。以后如果用户登录,只需要对比用户输入口令的哈希值与存储在数据库中的值是否相同,就可以判断口令是否正确,避免了口令明文的直接出现。

偷取数据库中存储的用户名和哈希值通常是容易的。继而如何得到口令原文呢?

有两种最直接的思路:1. 对于每一个字符串都算出其哈希值,然后一一与偷取的值进行比较,比较过的都抛弃掉,直到找到成功对应的为止。这种方法需要海量的时间。2. 对于每一个字符串都计算出其哈希值,存储成字符串和哈希值一对一或者多对一的表,以后每次要查找,直接查已经存在的表就足够了。这种方法需要海量的空间。

Philippe Oechslin 在Making a Faster Cryptanalytic Time-Memory Trade-Off中提出了一种折中的算法。这种算法的一种实现即RainbowCrack。维基百科有这种解决方案的简要说明。

维基百科RainbowTables:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值