Grupi i projektit: 23
Anëtarët: Festim BRAHA dhe Endrit SHAQIRI
Grupi i ushtrimeve: 2
Profesori: PHD.c Mërgim H. HOTI
Komunikimi ndërmjet serverit dhe klientëve me enkriptim të plotë për mesazhe(AES256) dhe authentication(SHA256)
* Shfaq klientët
* Dërgo mesazh te një klient specifik
* Dërgo mesazh për të gjithë klientët
* SHA256 për Authentication
* AES256 për mesazhe
Cka nevojitet:
* Python 3
Përdorimi:
* Fillimisht ekzekutohet serveri pastaj klienti
* Vendos HOST, PORT, Auth PASS, PASSPHRASE brenda programit të serverit.
* Vendos HOST-in e serverit, Portin brenda programit të klientit.
*
2. Klienti lexon dhe ruan çelësin publik të serverit nga file-i "serverPK.pem".
3. Klienti zgjedh një string të rastësishëm si çelës sekret të mundshëm dhe e enkripton atë çelës duke përdorur çelësin publik të serverit.
4. Klienti dërgon çelësin sekret të enkriptuar në server.
5. Me marrjen e çelësit të enkriptuar, serveri dekripton mesazhin duke përdorur çelësin e tij privat.
6. Serveri enkripton çelësin sekret me çelësin publik të klientit (i aksesueshëm për publikun) dhe dërgon mesazhin e enkriptuar te klienti. 7. Klienti dekripton mesazhin duke përdorur çelësin e tij privat dhe krahason plaintext-in me versionin e tij të çelësit sekret. Nëse janë të njëjta, procesi i vendosjes së çelësit është i suksesshëm. Përndryshe, përfundon lidhja.
8. Diagram i thjeshte: Client: Enkriptimi(celesi sekret, celesi publik i serverit) Client Server: Ciphertext Server: Dekriptimi(Ciphertext, Celesi privat i serverit) Server: Enkriptimi(Plaintext, celesi publik i klientit) Server Client: Ciphertext Client: Dekriptimi(Ciphertext, celesi privat i klientit) If Plaintext != secret key: klienti përfundon(terminates) lidhjen. 1. Dërguesi gjeneron disa bajt të rastësishëm me gjatësi 12.
2. Dërguesi krijon një cipher object duke përdorur çelësin e përbashkët sekret dhe random bytes. Cipher object është në modin CCM duke përdorur enkriptimin AES.
3. Dërguesi enkripton ato random bytes duke përdorur cipher object dhe të dhënat e enkriptuara do të përdoren si IV(Initial Vector) random.
4. Dërguesi krijon një cipher object tjeter duke përdorur IV-në e rastësishme dhe çelësin e përbashkët sekret. Cipher object është në modin CCM duke përdorur enkriptimin AES.
5. Dërguesi enkripton mesazhin dhe gjeneron një etiketë(tag) (që përdoret për të siguruar integritetin e të dhënave) duke përdorur cipher objektin.
6. Dërguesi dërgon IV të rastësishëm, mesazhin e enkriptuar dhe tag-un.
7. Sa herë që synohet të dërgohet një mesazh, do të gjenerohet një IV e rastësishme (që do të thotë një cipher object i ri).
8. Simple diagram: Random bytes = generate(12 bytes) Cipher = new AES(key=shared secret key, nonce=random bytes) Random IV = Cipher.encrypt(Random bytes) Another cipher2 = new AES(key=shared secret key, nonce=random IV) Ciphertext, tag = cipher2.encrypt_and_digest(plaintext) Message = ciphertext + b’@’ + random IV + b’@’ + tag Sender Receiver: Message 1. Marrësi nxjerr(extract) IV të rastësishme nga të dhënat e marra.
2. Marrësi krijon një cipher object me IV te rastësishëm dhe çelësin e përbashkët(shared secret key). Cipher object përdor modin CCM me enkriptim AES.
3. Marrësi dekripton dhe verifikon përmbajtjen dhe integritetin e të dhënave me cipher text-in dhe tagu-in.
4. Nëse komprometohet integriteti, lidhja përfundon.
5. Simple diagram: Ciphertext, random IV, tag = message.split(b’@’) Cipher = new AES(shared secret key, random IV) Plaintext = cipher.decrypt_and_verify(ciphertext, tag) If MAC check failed, receiver will terminate the connection