Beispiel #1
0
def rsa_demo(p: int, q: int, e: int, message: int):
    """Demo's encryption and decryption with the given arguments."""
    print("RSA")

    # find public key param n
    n = p * q
    print("Message:", message)
    print("Primes p & q:", p, q)
    print("Public key parameter n: ", n)
    print("Public key parameter e: ", e)

    # find phi(n) and private key parameter d
    phi_n = (p - 1) * (q - 1)
    d = cf.inverse_mod(e, phi_n)
    print("Phi(n):", phi_n)
    print("Private key parameter d:", d, "\n")

    # keys
    print("Public key n, e:", n, e)
    print("Private key n, d:", n, d, "\n")

    # create ciphetext c = m**e % n
    c = message**e % n
    print("Ciphertext:", c)

    # decrypt c to verify plaintext m
    m = c**d % n
    print("Decrypted plaintext:", m)
Beispiel #2
0
def paillier_demo(p: int, q: int, m: int, g: int, r: int):
    """Dems encryption and decryption with the given arguments."""

    print("Paillier")

    # find public key param n
    n = p * q
    print("Message m:", m)
    print("Primes p & q:", p, q)
    print("Public key parameter n:", n)
    print("Public key parameter g:", g)

    # find private key params (ƛ, μ)
    ƛ = cf.lcm(p - 1, q - 1)
    k = cf.L((g**ƛ) % (n**2), n)
    μ = cf.inverse_mod(k, n)
    print("Private key parameter ƛ:", ƛ)
    print("Pre-parameter k:", k)
    print("Private key parameter μ:", μ, "\n")

    # keys
    print("Public key (n, g):", n, g)
    print("Private key (ƛ, μ):", ƛ, μ, "\n")

    # find ciphertext c = g**m r**n mod n**2
    c = pow(g, m) * pow(r, n) % pow(n, 2)
    print("Ciphertext:", c)

    # decrpyt c to verify the plaintext m
    p = cf.L(pow(c, ƛ) pow(n, 2), n) * μ % n
    print("Decrypted plaintext:", p)

    return c
Beispiel #3
0
def generate_keys(p: int, q: int, e: int):
    """ Return a dict containing private and public key parameters."""

    n = p * q
    d = cf.inverse_mod(e, (p - 1) * (q - 1))
    phi_n = (p - 1) * (q - 1)

    return {"n": n, "e": e, "d": d, "phi_n": phi_n}
Beispiel #4
0
def sign(g: int, k: int, p: int, x: int, m: int):
    """ Return the signature parameters for a given messsage."""

    r = g**k % p
    k1 = cf.inverse_mod(k, p - 1)
    val = k1 * (m - (x * r))
    s = val % (p - 1)
    return {"r": r, "s": s}
Beispiel #5
0
def generate_keys(p: int, q: int, g: int):
    """ Return a dict containing private and public key parameters."""

    n = p * q
    ƛ = cf.lcm(p - 1, q - 1)
    k = cf.L((g**ƛ) % (n**2), n)
    μ = cf.inverse_mod(k, n)

    return {"n": n, "g": g, "ƛ": ƛ, "μ": μ}
def elgamal_demo(p: int, g: int, a: int, r: int, message: int):
    """Demo's encryption and decryption with the given arguments."""

    print("ElGamal")

    # find public key parameter y
    y = pow(g, a, p)
    print("Message:", message)
    print("Prime p:", p)
    print("Generator g:", g)
    print("Randomly chosen int r:", r)
    print("Public key parameter y:", y, "\n")

    # keys
    print("Public key y, g, p:", y, g, p)
    print("Private key a:", a, "\n")

    # find k
    k = pow(y, r, p)
    print("Parameter k:", k, "\n")

    # encrypt m to find c1 and c2
    print("\n==Encryption")
    start_time = time.time()
    c1 = pow(g, r, p)
    c2 = message * k % p
    print("\nTime to encrypt:", time.time() - start_time, "seconds")
    print("Ciphertext c1:", c1)
    print("Ciphertext c2:", c2, "\n")

    # decrypt c1 and c2 to derive k and k1
    print("\n==Decryption")
    start_time = time.time()
    d_k = pow(c1, a, p)
    k1 = cf.inverse_mod(k, p)
    print("Derived parameter k:", d_k)
    print("Parameter k1:", k1, "\n")

    # decrypt c1 and c2 to verify m
    m = k1 * c2 % p
    print("\nTime to decrypt:", time.time() - start_time, "seconds")
    print("Decrypted plaintext:", m, "\n")

    return c1, c2, g, a, p, r, y, m
Beispiel #7
0
def elgamal_demo(p: int, g: int, x: int, r: int, message: int):
    """Demo's encryption and decryption with the given arguments."""

    print("ElGamal")

    # find public key parameter y
    y = g**x % p
    print("Message:", message)
    print("Prime p:", p)
    print("Generator g:", g)
    print("Randomly chosen int r:", r)
    print("Public key parameter y:", y, "\n")

    # keys
    print("Public key y, g, p:", y, g, p)
    print("Private key x:", x, "\n")

    # find k
    k = y**r % p
    print("Parameter k:", k, "\n")

    # encrypt m to find c1 and c2
    c1 = g**r % p
    c2 = message * k % p
    print("Ciphertext c1:", c1)
    print("Ciphertext c2:", c2, "\n")

    # decrypt c1 and c2 to derive k and k1
    d_k = c1**x % p
    k1 = cf.inverse_mod(k, p)
    print("Derived parameter k:", d_k)
    print("Parameter k1:", k1, "\n")

    # decrypt c1 and c2 to verify m
    m = k1 * c2 % p
    print("Decrypted plaintext:", m, "\n")
Beispiel #8
0
def rsa_demo(p: int, q: int, e: int, message: int):
    """Demo's encryption and decryption with the given arguments."""
    print("RSA")

    # find public key param n
    n = p * q
    print("Message:", message)
    print("Primes p & q:", p, q)
    print("Public key parameter n: ", n)
    print("Public key parameter e: ", e)

    # find phi(n) and private key parameter d
    phi_n = (p - 1) * (q - 1)
    d = cf.inverse_mod(e, phi_n)
    print("Phi(n):", phi_n)
    print("Private key parameter d:", d, "\n")

    # keys
    print("Public key n, e:", n, e)
    print("Private key n, d:", n, d)

    # create ciphetext c = m**e % n
    print("\n==Encryption")
    start_time = time.time()
    c = pow(message, e, n)
    print("\nTime to encrypt:", time.time() - start_time, "seconds")
    print("Ciphertext:", c)

    # decrypt c to verify plaintext m
    print("\n==Decryption")
    start_time = time.time()
    m = pow(c, d, n)
    print("\nTime to decrypt:", time.time() - start_time, "seconds")
    print("Decrypted plaintext:", m)

    return c
Beispiel #9
0
import crypto_functions as cf

m = 5
x = 8
k = 9
p = 11
g = 2
r = g**k % p
k1 = cf.inverse_mod(k, p - 1)
val = k1 * (m - (x * r))

print(val)
    return ci21, ci22


cipher0_1, cipher0_2, g, a, p, r1, y1, m1 = elgamal_demo(1559, 55, 5, 9, 29)
cipher1_1, cipher1_2, g, a, p, r2, y2, m2 = elgamal_demo(1559, 55, 5, 9, 31)
cipher2_1, cipher2_2 = homomorphic(cipher0_1, cipher0_2, cipher1_1, cipher1_2,
                                   g, a)
print('ci1: ', cipher2_1)
print('ci2: ', cipher2_2)

print("\n==Decryption")
y = pow(g, a, p)
r = 9
k = pow(y, r, p)
start_time = time.time()
d_k = pow(cipher2_1, a, p)
xx = cf.inverse_mod(d_k, p)
#xx = pow(cipher2_1, (11 - a))
#print(xx)
mm = xx * cipher2_2 % p
#mm = (pow(cipher2_1, (209490258419118348130222483494418126789-a)) * cipher2_2) % p
print("\nTime to decrypt:", time.time() - start_time, "seconds")
m3 = m1 * m2 % p
print('\n Entschlüsselte multiplizierte Nachricht: ', mm,
      '\n Original multiplizierte Nachricht: ', m3)

#letters:
#k=s
#y=h
#r=y
#x=a
Beispiel #11
0
    dec3 = pow(ci3, d, n)
    print("\nTime to decrypt:", time.time() - start_time, "seconds")
    return dec3


#cipher1 = rsa_demo(7, 9, 5, int('110011', 2))
cipher1 = rsa_demo(209490258419118348130222483494418126789,
                   177205842835470845473200187961499093143,
                   320697230375185983296943967089956439199,
                   550304652486555850518304746550)
print('\n Cipher 1:', cipher1)
#cipher2 = rsa_demo(7, 9, 5, int('110101', 2))
cipher2 = rsa_demo(209490258419118348130222483494418126789,
                   177205842835470845473200187961499093143,
                   320697230375185983296943967089956439199,
                   22156276073203669139234564254)
print('\n Cipher 2:', cipher2)
cipher3 = rsa_demo(
    209490258419118348130222483494418126789,
    177205842835470845473200187961499093143,
    320697230375185983296943967089956439199,
    12192701804860537419905592943941808347725613386669159823700)
print('\n Cipher 3:', cipher3)
p = 209490258419118348130222483494418126789
q = 177205842835470845473200187961499093143
n = p * q
phi_n = (p - 1) * (q - 1)
e = 320697230375185983296943967089956439199
d = cf.inverse_mod(e, phi_n)
dec = homomorphic(cipher1, cipher2, e, d)
print('\n Decryption 3:', dec)