Ejemplo n.º 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
Ejemplo n.º 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
Ejemplo n.º 3
0
class KeyExchange(object):
    def __init__(self):
        print("New KeyExchange, initializing Diffie-Hellman")
        self.dh = DiffieHellman(group=14)

    @expose
    def exchange_key(self, other_public_key):
        print("received a public key, calculating shared secret...")
        self.dh.make_shared_secret_and_key(other_public_key)
        print("shared secret key = ", self.dh.key)
        return self.dh.public_key
Ejemplo n.º 4
0
class KeyExchange(object):
    def __init__(self):
        print("New KeyExchange, initializing Diffie-Hellman")
        self.dh = DiffieHellman(group=14)

    def exchange_key(self, other_public_key):
        print("received a public key, calculating shared secret...")
        self.dh.make_shared_secret_and_key(other_public_key)
        print("setting new shared secret key.")
        global daemon
        daemon._pyroHmacKey = self.dh.key
        return self.dh.public_key
Ejemplo n.º 5
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
Ejemplo n.º 6
0
def test_shared_key(group: int):
    dh1 = DiffieHellman(group=group)
    dh2 = DiffieHellman(group=group)

    dh1_public = dh1.get_public_key()
    dh2_public = dh2.get_public_key()

    dh1_shared = dh1.generate_shared_key(dh2_public)
    dh2_shared = dh2.generate_shared_key(dh1_public)

    assert dh1_shared == dh2_shared
Ejemplo n.º 7
0
class State:
    def __init__(self):
        self.dh = DiffieHellman()

    def setup(self, secret_key, public_key):
        self.dh = DiffieHellman()
        self.kdf = KDF(secret_key, self.dh.shared(public_key))

    def update(self):
        return self.kdf.update()
Ejemplo n.º 8
0
from Pyro5.api import Proxy
from diffiehellman import DiffieHellman

dh = DiffieHellman(group=14)

with Proxy("PYRONAME:example.dh.keyexchange") as keyex:
    print("exchange public keys...")
    other_key = keyex.exchange_key(dh.public_key)
    print("got server public key, creating shared secret key...")
    dh.make_shared_secret_and_key(other_key)
    print("shared secret key = ", dh.key.hex())
    print("(check the server output to see the same shared private key)")
Ejemplo n.º 9
0
 def __init__(self):
     print("New KeyExchange, initializing Diffie-Hellman")
     self.dh = DiffieHellman(group=14)
Ejemplo n.º 10
0
 def __init__(self):
     print("New KeyExchange, initializing Diffie-Hellman")
     self.dh = DiffieHellman(group=14)
Ejemplo n.º 11
0
import Pyro4
import Pyro4.errors
from diffiehellman import DiffieHellman


dh = DiffieHellman(group=14)

with Pyro4.locateNS() as ns:
    uri = ns.lookup("example.dh.secretstuff")
    print(uri)

p = Pyro4.Proxy(uri)
try:
    p.process("hey")
    raise RuntimeError("this should not be reached")
except Pyro4.errors.PyroError as x:
    print("Error occured (expected!):", x)

with Pyro4.Proxy("PYRONAME:example.dh.keyexchange") as keyex:
    print("exchange public keys...")
    other_key = keyex.exchange_key(dh.public_key)
    print("got server public key, creating shared secret key...")
    dh.make_shared_secret_and_key(other_key)
    print("setting key on proxy.")
    p._pyroHmacKey = dh.key

print("Calling proxy again...")
result = p.process("hey")
print("Got reply:", result)
Ejemplo n.º 12
0
 def setup(self, secret_key, public_key):
     self.dh = DiffieHellman()
     self.kdf = KDF(secret_key, self.dh.shared(public_key))
Ejemplo n.º 13
0
 def __init__(self):
     self.dh = DiffieHellman()