Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
007prateekd committed Nov 11, 2021
0 parents commit d9d14c8
Show file tree
Hide file tree
Showing 4 changed files with 127 additions and 0 deletions.
52 changes: 52 additions & 0 deletions Client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
import socket
from cryptography.fernet import Fernet
import time

user = "Alice"
server = "Bob"
key_AS = b"UFltX3Uf9qIQ6UyIElj3awsXWDHsC2QjZ8GObFMqzmQ="

## COMM. WITH KDC
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port_KDC, port_server = 11111, 22222
client.connect(("127.0.0.1", port_KDC))
# Step 1
client.send(user.encode())
enc = client.recv(1024)
print("Sending connection request to Authentication Server...")

# Step 2
fernet_1 = Fernet(key_AS)
(key_TGS, enc_2) = fernet_1.decrypt(enc).decode().split()
print("Ticket received from Authentication Server")
print(f"Ticket: {key_TGS}")
# Step 3
fernet_2 = Fernet(key_TGS)
nonce = int(time.time())
enc_1 = fernet_2.encrypt((server + ' ' + str(nonce)).encode())
enc = enc_1.decode() + ' ' + enc_2
client.send(enc.encode())
print(f"Sending Nonce: {nonce} to Ticket Granting Server...")
# Step 4
(enc_1, enc_2) = client.recv(1024).decode().split()
(server_tmp, key_session) = fernet_2.decrypt(enc_1.encode()).decode().split()
client.close()
print("Session Key received from Ticket Granting Server")
print(f"Session Key: {key_session}")
print()

## COMM. WITH SERVER
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("127.0.0.1", port_server))
# Step 5
print(f"Sending Nonce: {nonce} and Session Key to Server: {server}...")
fernet_3 = Fernet(key_session.encode())
enc_1 = fernet_3.encrypt(str(nonce).encode())
enc = enc_1.decode() + ' ' + enc_2
client.send(enc.encode())
# Step 6
enc = client.recv(1024)
nonce_new = fernet_3.decrypt(enc).decode()
print(f"New Nonce: {nonce_new} received from Server: {server}")
print(f"Connection Established Successfully")
client.close()
44 changes: 44 additions & 0 deletions KDC.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import socket
from cryptography.fernet import Fernet

key_AS = {}
key_TGS = {}
key_AS_TGS = b"nrpuhqpzDIPzn_QxHIOE4LpZNHi5AP8lRy_wfCTqN4s="
key_AS["Alice"] = b"UFltX3Uf9qIQ6UyIElj3awsXWDHsC2QjZ8GObFMqzmQ="
key_TGS["Bob"] = b"BgIFUaxnefMzR1FI_Sv-meLxCV4e5RI6zp-5Y_RlR6s="

kdc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
kdc.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
port = 11111
kdc.bind(("127.0.0.1", port))
kdc.listen(5)

while True:
# Step 1
c, addr = kdc.accept()
user = c.recv(1024).decode()
print(f"Connection request received from Client: {user}, Address: {addr}")
# Step 2
key_TGS[user] = Fernet.generate_key()
fernet_1 = Fernet(key_AS_TGS)
inner = fernet_1.encrypt((user + ' ' + key_TGS[user].decode()).encode())
fernet_2 = Fernet(key_AS[user])
outer = fernet_2.encrypt((key_TGS[user].decode() + ' ' + inner.decode()).encode())
c.send(outer)
print(f"Sending Ticket: {key_TGS[user]} to Client: {user}...")
# Step 3
(enc_1, enc_2) = c.recv(1024).decode().split()
print("Nonce received")
# Step 4
key_session = Fernet.generate_key()
fernet_3 = Fernet(key_TGS[user])
(server, nonce) = fernet_3.decrypt(enc_1.encode()).decode().split()
fernet_4 = Fernet(key_TGS[server])
(user, key_tmp) = fernet_1.decrypt(enc_2.encode()).decode().split()
enc_1 = fernet_3.encrypt((server + ' ' + key_session.decode()).encode())
enc_2 = fernet_4.encrypt((user + ' ' + key_session.decode()).encode())
enc = (enc_1.decode() + ' ' + enc_2.decode()).encode()
c.send(enc)
print(f"Sending Session Key: {key_session} to Client: {user}...")
c.close()
break
31 changes: 31 additions & 0 deletions Server.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import socket
from cryptography.fernet import Fernet

user = "Alice"
server = "Bob"
key_TGS = b"BgIFUaxnefMzR1FI_Sv-meLxCV4e5RI6zp-5Y_RlR6s="

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
port = 22222
server_socket.bind(("127.0.0.1", port))
server_socket.listen(5)

while True:
# Step 5
c, addr = server_socket.accept()
(enc_1, enc_2) = c.recv(1024).decode().split()
print(f"Connection request received from Client: {user}, Address: {addr}")
# Step 6
fernet_1 = Fernet(key_TGS)
(user_tmp, key_session) = fernet_1.decrypt(enc_2.encode()).split()
fernet_2 = Fernet(key_session)
nonce = fernet_2.decrypt(enc_1.encode()).decode()
nonce_new = str(int(nonce) - 1)
enc = fernet_2.encrypt(nonce_new.encode())
c.send(enc)
print(f"Nonce: {nonce} received from Client: {user_tmp}")
print(f"Session Key: {key_session} received from Client: {user_tmp}")
print(f"Sending new Nonce: {nonce_new} to Client: {user_tmp}...")
c.close()
break
Binary file added Working.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit d9d14c8

Please sign in to comment.