コード例 #1
0
 def createHashTablesecond(self):
     """
     eliminate as many keys as possible, brute force the remaining ones by calling tryencryption()
     """
     print "Testing..."
     nbTried = 0
     self.temp = CMEA()
     print "K4"
     for k4 in xrange(128):
         print k4
         for k5 in xrange(256):
             for (k6,k7) in self.possible67:
                 tpp = [self.calcpp(a,ta,k4,k5,k6,k7) for (a,ta) in self.tuples]
                 if [] in tpp:
                     continue
                 for (a,b,c,d) in [(a,b,c,d) for a in tpp[0] for b in tpp[1] for c in tpp[2] for d in tpp[3]]:
                     m = ((a-d)%256,(b-d)%256, (c-d)%256)
                     m = m[0]*256**2 + m[1]*256+m[2]
                     if m in self.startmap:
                         for k in self.startmap[m]:
                             nbTried = nbTried + 1
                             key = k[:3]
                             key.append((a-k[3])%256)
                             key.extend([k4,k5,k6,k7])
                             if self.trialencryption(key):
                                 print "key found: ",key
                                 print "this key may not be the exact same one, but it is equivalent..."
                                 print "keys tried: ", nbTried
                                 return True
コード例 #2
0
 def __init__(self):
     nbplaintext = 80
     self.p0 = [ [ True for i in range(256) ] for j in range(256) ]
     for i in range(256):
         for j in range(256):
             if(not ((j-i) % 256) in cavetable):
                 self.p0[i][j] = False
     
     self.CVI = CVInverse()
     self.p = None
     
     self.c = CMEA()
     self.texts = self.createPlaintexts(nbplaintext, self.c)
コード例 #3
0
                    # if one of the value if knwon (because the cave table invalidate one of the option) we can deduce the other value
                    posj = [tj, tj + 1]
                    posz = [(tj - c) % 256, (tj + 1 - c) % 256]
                    posj = [k for k in posj if (k - j) % 256 in cavetable]
                    posz = [k for k in posz if (k - z) % 256 in cavetable]
                    if len(posj) == 1:
                        self.known[j] = posj[0]
                    if len(posz) == 1:
                        self.known[z] = posz[0]

        return compteur


if __name__ == '__main__':
    d = Decrypter()
    d.setCrypter(CMEA())
    d.c.blocksize = 3
    d.c.createRandomKey()
    possibilities = d.findTzero()
    print "number of possible values for t0:", len(possibilities)

    for p in possibilities:
        # checks if the value for t0 is correct
        t = d.findPossibleOthers(p)
        if t != []:
            break

    d.getallconstraints(t[0][0])
    for i in range(10):
        print "number of Tbox output known at iteration ", i, " :", len(
            d.known)