Beispiel #1
0
 def test_break_rng_stream_cipher(self):
     """Challenge 24"""
     seed_str = Crypto.gen_random_key(2)
     seed = ord(seed_str[0]) << 8 | ord(seed_str[1])
     mt_cipher = MT19937Cipher(seed)
     prefix = Crypto.gen_random_key(23)
     text = 'A'*14
     cipher = mt_cipher.encrypt(prefix + text)
     self.assertEquals(seed, Crypto.break_rng_stream_cipher(cipher, text))
Beispiel #2
0
 def test_break_rng_stream_cipher(self):
     """Challenge 24"""
     seed_str = Crypto.gen_random_key(2)
     seed = ord(seed_str[0]) << 8 | ord(seed_str[1])
     mt_cipher = MT19937Cipher(seed)
     prefix = Crypto.gen_random_key(23)
     text = 'A' * 14
     cipher = mt_cipher.encrypt(prefix + text)
     self.assertEquals(seed, Crypto.break_rng_stream_cipher(cipher, text))
Beispiel #3
0
 def test_break_if_iv_is_same_as_key(self):
     """Challenge 27"""
     key = Crypto.gen_random_key(16)
     iv = key
     oracle = lambda c: Crypto.decrypt_aes(c, key, AES.MODE_CBC, iv)
     cipher = Crypto.encrypt_aes("X" * 48, key, AES.MODE_CBC, iv)
     self.assertEquals(
         key, Crypto.extract_key_if_key_is_same_as_key(cipher, oracle))
Beispiel #4
0
 def test_break_if_iv_is_same_as_key(self):
     """Challenge 27"""
     key = Crypto.gen_random_key(16)
     iv = key
     oracle = lambda c: Crypto.decrypt_aes(c, key, AES.MODE_CBC, iv)
     cipher = Crypto.encrypt_aes("X"*48, key, AES.MODE_CBC, iv)
     self.assertEquals(key,
             Crypto.extract_key_if_key_is_same_as_key(cipher, oracle))
Beispiel #5
0
 def test_md4_length_extension(self):
     """Challenge 30"""
     orig_message = 'comment1=cooking%20MCs;userdata=foo;comment2=%20like' \
             '%20a%20pound%20of%20bacon'
     # this is not known to attacker.
     key = Crypto.gen_random_key(43)
     suffix = ';admin=true;'
     orig_hash = md4(key + orig_message)
     forged_message = MD4Hash.pad(key + orig_message) + suffix
     forged_hash = md4(forged_message)
     validate = lambda h: h == forged_hash
     self.assertTrue(extend_md4(orig_hash, orig_message, suffix, validate))
Beispiel #6
0
 def test_sha_length_extension(self):
     """Challenge 29"""
     orig_message = 'comment1=cooking%20MCs;userdata=foo;comment2=%20like' \
             '%20a%20pound%20of%20bacon'
     # this is not known to attacker.
     key = Crypto.gen_random_key(100)
     suffix = ';admin=true;'
     orig_sha = sha1(key + orig_message)
     forged_message = Sha1Hash.pad(key + orig_message) + suffix
     forged_sha = sha1(forged_message)
     validate = lambda sha: sha == forged_sha
     self.assertTrue(extend_sha1(orig_sha, orig_message, suffix, validate))
Beispiel #7
0
 def test_sha_length_extension(self):
     """Challenge 29"""
     orig_message = 'comment1=cooking%20MCs;userdata=foo;comment2=%20like' \
             '%20a%20pound%20of%20bacon'
     # this is not known to attacker.
     key = Crypto.gen_random_key(100)
     suffix = ';admin=true;'
     orig_sha = sha1(key + orig_message)
     forged_message = Sha1Hash.pad(key + orig_message) + suffix
     forged_sha = sha1(forged_message)
     validate = lambda sha: sha == forged_sha
     self.assertTrue(extend_sha1(orig_sha, orig_message, suffix, validate))
Beispiel #8
0
 def test_md4_length_extension(self):
     """Challenge 30"""
     orig_message = 'comment1=cooking%20MCs;userdata=foo;comment2=%20like' \
             '%20a%20pound%20of%20bacon'
     # this is not known to attacker.
     key = Crypto.gen_random_key(43)
     suffix = ';admin=true;'
     orig_hash = md4(key + orig_message)
     forged_message = MD4Hash.pad(key + orig_message) + suffix
     forged_hash = md4(forged_message)
     validate = lambda h: h == forged_hash
     self.assertTrue(extend_md4(orig_hash, orig_message, suffix, validate))
Beispiel #9
0
    def test_prefix_aes_ecb_decryption(self):
        """Challenge 14"""
        prefix = Crypto.gen_random_key(18)
        target = "This is the target"
        quote = lambda text: text
        oracle, _, _ = Crypto.generate_aes_oracle(prefix, target, AES.MODE_ECB,
                                                  quote)
        self.assertEqual(target, Crypto.decrypts_aes_ecb_byte_wise(oracle))

        target = "A" * 16
        oracle, _, _ = Crypto.generate_aes_oracle(prefix, target, AES.MODE_ECB,
                                                  quote)
        self.assertEqual(target, Crypto.decrypts_aes_ecb_byte_wise(oracle))
Beispiel #10
0
 def test_aes_ctr_encryption(self):
     """Challenge 18"""
     counter = Crypto.gen_aes_stream_counter_simple()
     key = "YELLOW SUBMARINE"
     cipher = base64.b64decode("L77na/nrFsKvynd6HzOoG7GHTLXsTVu9qvY/2syLX" +\
             "zhPweyyMTJULu/6/kXX0KSvoOLSFQ==")
     text = "Yo, VIP Let's kick it Ice, Ice, baby Ice, Ice, baby "
     self.assertEqual(text, Crypto.decrypt_aes(
         cipher, key, AES.MODE_CTR, counter=counter))
     # another test
     key = Crypto.gen_random_key(16)
     text = "Let there be light!"
     counter = Crypto.gen_aes_stream_counter_simple()
     cipher = Crypto.encrypt_aes(text, key, AES.MODE_CTR, counter=counter)
     counter = Crypto.gen_aes_stream_counter_simple()
     self.assertEqual(text, Crypto.decrypt_aes(
         cipher, key, AES.MODE_CTR, counter=counter))
Beispiel #11
0
 def test_aes_ctr_encryption(self):
     """Challenge 18"""
     counter = Crypto.gen_aes_stream_counter_simple()
     key = "YELLOW SUBMARINE"
     cipher = base64.b64decode("L77na/nrFsKvynd6HzOoG7GHTLXsTVu9qvY/2syLX" +\
             "zhPweyyMTJULu/6/kXX0KSvoOLSFQ==")
     text = "Yo, VIP Let's kick it Ice, Ice, baby Ice, Ice, baby "
     self.assertEqual(
         text, Crypto.decrypt_aes(cipher,
                                  key,
                                  AES.MODE_CTR,
                                  counter=counter))
     # another test
     key = Crypto.gen_random_key(16)
     text = "Let there be light!"
     counter = Crypto.gen_aes_stream_counter_simple()
     cipher = Crypto.encrypt_aes(text, key, AES.MODE_CTR, counter=counter)
     counter = Crypto.gen_aes_stream_counter_simple()
     self.assertEqual(
         text, Crypto.decrypt_aes(cipher,
                                  key,
                                  AES.MODE_CTR,
                                  counter=counter))