通过python查找的彩虹攻击失败。

时间:2013-06-27 18:08:24

标签: python-2.7 rainbowtable rainbowattack

我有一些关于作业的问题。要点是我必须对“汽车福祉”进行彩虹攻击。 使用生成器表,RainbowAttack.py脚本如下:

  1. 关键广播给汽车(在这种情况下是对手
  2. 汽车/前夕以挑战u回应。
  3. 然后密钥以包含MD5(s||u)
  4. 的哈希值响应
  5. Eve现在使用Rainbow-table破解s
  6. 我们使用MD5来哈希我们的响应和密钥 然后我们在哈希上使用我们的缩减函数并取前28位 f_i(x) = (f(x)+i) mod 2^28.

    我的哈希和恢复功能

    def f(s, i=0): 
    """Lowest 28 bits of (MD5(s||u) % i)"""  
    
       digest = '0x' + md5.new(str(s) + str(u)).hexdigest()
       result = hex((int(digest, 16) + i) % 2**BIT_SIZE)[:BIT_SIZE/4+2]
       return result
    

    无论如何,当我们运行我们的脚本时,我们收到响应,我们计算所有后继者并将它们与彩虹表中的终点进行比较,如果找到匹配,我们得到碰撞的起点,现在我们检查密钥是否是在从起点到终点的链条中,如果其中一个键与我们从fop得到的响应相同,我们知道前一个键是打开车门的秘密。

    目前我们只能在彩虹表的起始位置或结束位置找到钥匙,而不是在链中。 这是检查succsessors的循环的代码,并检查我们的任何后继者是否在rainbowtable中,如果他们是,我们检查我们的反应来自汽车fop是否在那里,如果我们有我们的钥匙。

    这可能是我们计算我们的后继者时引起的问题,因为缩减函数将与键上使用的函数不同(我将增加使得缩减函数对链中的所有键略有不同)

    def find_key(table, r):
    """Search for matching respons in Rainbow-table"""
        succ = [r]
        print r
        for i in xrange(1, CHAIN_LEN):
            succ.append(f(succ[i-1],i))
    
        for key, value in table.iteritems():
            if value in succ:
                print "\tCollition: %s -> %s" % (key, value)
                ss = key
    
                for i in xrange(0, CHAIN_LEN):
                    rs = f(ss, i)
                    if rs==r:
                        return ss
                ss = rs
    return -1
    

    rainbowtable和文件可以找到here (github)

    (derp.py(彩虹攻击)和table1.csv(将名称更改为table.csv))

0 个答案:

没有答案