예제 #1
0
def challenge34():
    p = 197
    g = 3
    dh1 = DiffieHellman()
    dh2 = DiffieHellman()
    dh1._p = dh2._p = p
    dh1._g = dh2._g = g
    A = dh1.gen_pub()
    B = dh2.gen_pub()
    #dh2.gen_secret(A)
    dh2.gen_secret(p)
    #dh1.gen_secret(B)
    dh1.gen_secret(p)
    message = b'hello, MITM'
    key1 = hashlib.sha1(dh1.secret.to_bytes(64, 'big')).digest()[:16]
    iv1 = os.urandom(16)
    ct1 = set2.aes_cbc_encrypt(message, key1, iv1)
    key2 = hashlib.sha1(dh2.secret.to_bytes(64, 'big')).digest()[:16]
    iv2 = os.urandom(16)
    message2 = set2.aes_cbc_decrypt(ct1, key2, iv1)
    ct2 = set2.aes_cbc_encrypt(message2, key2, iv2)
    message3 = set2.aes_cbc_decrypt(ct2, key1, iv2)
    assert message == message3
    key3 = hashlib.sha1((0).to_bytes(64, 'big')).digest()[:16]
    message4 = set2.aes_cbc_decrypt(ct1, key3, iv1)
    assert message == message4
예제 #2
0
def challenge35():
    p = 197
    g = 3
    dh1 = DiffieHellman()
    dh2 = DiffieHellman()
    for fg in [1, p, p - 1]:
        dh1._p = dh2._p = p
        dh1._g = dh2._g = fg
        A = dh1.gen_pub()
        B = dh2.gen_pub()
        dh2.gen_secret(A)
        dh1.gen_secret(B)
        message = b'hello, MITM'
        key1 = hashlib.sha1(dh1.secret.to_bytes(64, 'big')).digest()[:16]
        iv1 = os.urandom(16)
        ct1 = set2.aes_cbc_encrypt(message, key1, iv1)
        key2 = hashlib.sha1(dh2.secret.to_bytes(64, 'big')).digest()[:16]
        iv2 = os.urandom(16)
        message2 = set2.aes_cbc_decrypt(ct1, key2, iv1)
        ct2 = set2.aes_cbc_encrypt(message2, key2, iv2)
        message3 = set2.aes_cbc_decrypt(ct2, key1, iv2)
        assert message == message3
        if fg == 1:
            s = 1
        elif fg == p:
            s = 0
        else:
            if A == p - 1 and B == p - 1:
                s = p - 1
            else:
                s = 1
        key3 = hashlib.sha1((s).to_bytes(64, 'big')).digest()[:16]
        message4 = set2.aes_cbc_decrypt(ct1, key3, iv1)
        assert message == message4
예제 #3
0
def test_challenge33():
    dh1 = DiffieHellman()
    dh2 = DiffieHellman()
    dh1._p = dh2._p = int(
        'ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024'
        'e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd'
        '3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec'
        '6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f'
        '24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361'
        'c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552'
        'bb9ed529077096966d670c354e4abc9804f1746c08ca237327fff'
        'fffffffffffff', 16)
    dh1._g = dh2._g = 2
    pub1 = dh1.gen_pub()
    pub2 = dh2.gen_pub()
    dh1.gen_secret(pub2)
    dh2.gen_secret(pub1)
    assert dh1.secret == dh2.secret