示例#1
0
def generate(key, message):
    blk_size = SHA1.block_size
    if (len(key) > blk_size):
        key = SHA1.digest(key)

    if (len(key) < blk_size):
        key = key + bytes([0x00] * (blk_size - len(key)))

    o_key_pad = xor_bytes(bytes([0x5c] * blk_size), key)
    i_key_pad = xor_bytes(bytes([0x36] * blk_size), key)

    return SHA1.digest(o_key_pad + SHA1.digest(i_key_pad + message))
示例#2
0
def main(insecure_delay=0.05, server_retries=10, num_of_threads=64):
    # Starting server
    server_start(insecure_delay)
    # File to attack
    attack_file = 'README.md'
    # Generate one signature and perform 1 dummy connection
    sig = bytearray(SHA1.digest(b''))
    sig = bytearray([0] * len(sig))
    # Brute-force each byte in the signature
    for j in range(len(sig)):
        test_connection_multithreaded(attack_file, sig, j, num_of_threads,
                                      server_retries)

    # Verify signature
    code, time, text = test_connection(attack_file, sig, 1)
    print(text)
示例#3
0
def main():
    # Perform keyed hash of original msg
    original_msg = b'comment1=cooking%20MCs;userdata=foo;comment2=%20like%20a%20pound%20of%20bacon'
    original_mac= encryption_oracle(original_msg)
    print('Original msg    = ', original_msg)
    print('Orignal msg MAC = ', bytes_hexstr(original_mac))
    print('Origianal msg verify passed = ', verify_mac(encryption_oracle, original_msg, original_mac))
    # Re-create SHA state from hash value
    print ('---------------')
    print ('Trying to forge')
    # Reverse SHA state
    h = reverse_SHA_state(original_mac)
    # Set string that we want to append
    forged_str=b';admin=true'
    # Try all key lengthes
    for keylen in range(1,100):
        forged_msg=original_msg + SHA1.padding(original_msg, len(original_msg) + keylen) + forged_str
        forged_str_len=len(forged_msg)+keylen
        forged_mac=SHA1.digest(forged_str,h[0],h[1],h[2],h[3],h[4], forged_str_len)
        if verify_mac(encryption_oracle, forged_msg, forged_mac):
            break;
    print('Forged msg     = ', forged_msg)
    print('Forged msg MAC = ', bytes_hexstr(forged_mac))
    print('Forged msg verify passed = ', verify_mac(encryption_oracle, forged_msg, forged_mac))