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
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
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