Onion Information
Rad s Python modulom pyca/cryptography - GASERI
Python u okviru svoje standardne biblioteke nudi kriptografske funkcije u modulu crypto, ali puno elegantniji za korištenje je modul cryptography (službeno web sjedište) razvijen od strane Python Cryptographic Authorityja
Onion Details
Page Clicks: 0
First Seen: 03/15/2024
Last Indexed: 09/18/2024
Onion Content
Rad s Python modulom pyca/cryptography - Python u okviru svoje standardne biblioteke nudi kriptografske funkcije u modulu crypto , ali puno elegantniji za korištenje je modul cryptography ( službeno web sjedište ) razvijen od strane Python Cryptographic Authorityja . Modul cryptopgraphy sastoji se od dva sloja: Kodiranje znakova - Znakovni nizovi u Pythonu (tip str ) dizajnirani su da slijede svakodnevno poimanje pojma teksta. Primjerice, znakovni niz "riječ" je u Pythonu duljine 5 znakova. To je novitet u Pythonu 3 . Želimo li znakovni niz spremiti u datoteku ili poslati putem mreže, vršimo pretvorbu u bajtovni niz (tip bytes ). Pritom se posljednji znak u znakovnom nizu kodira korištenjem 2 bajta pa je duljina dobivenog bajtovnog niza 6 znakova. Kodiranje znakova u obliku Base64 - Kodiranje u obliku Base64 dostupno je korištenjem modula base64 ( dokumentacija ) koji je dio standardne biblioteke: Zadatak - Usporedite duljinu: za znakovni niz "Energični, za sve vrste egzistencije sposobni pojedinac najveći je kapital i jedini temelj našeg narodnog kapitala, koji pada samo zato, jer rapidno pada kult moralni, fizički i intelektualni naših energija u pravcu što veće osobne i privatne inicijative." ( Matošev citat ). Simetrična kriptografija - Fernet ( dokumentacija ) je skup recepata za simetričnu enkripciju u modulu crytopgraphy . Ime Fernet dolazi od talijanskog likera popuarnog u Argentini . Inicijalizacija se izvodi na način: S tako inicijaliziranim modulom šifriranje se izvodi na način: Dešifriranje se vrši kodom: Šifrirajte poruku po želji ključem koji ćete generirati, a zatim pokušajte dešifrirati drugim ključem koji ćete generirati i objasnite zašto to možete ili ne možete učiniti. Fernetom je moguće šifrirati i dešifrirati korištenjem grupe ključeva. U tom slučaju će dešifriranje biti isprobano svakim od dostupnih ključeva. Primjerice, za dva ključa kod za inicijalizaciju je oblika: Šifriranje dvije poruke različitim ključevima vršimo na način: Dešifriranje: Simetrične ključeve moguće je dodatno zaštiti zaporkom, o čemu se više može naći u službenoj dokumentaciji . Asimetrična kriptografija - Modul cryptography podržava niz asimetričnih kriptografskih algoritama ( dokumentacija ), ali mi ćemo se ograničiti na korištenje RSA ( dokumentacija ). Stvaranje privatnog ključa veličine 2048 bita i zapis istog u formatu PKCS#8 vrši se na način: Stvaranje pripadnog javnog ključa i pretvorba u format PKCS#1 vrši se na način: Ključem možemo potpisivati i šifrirati. Potpisivanje vršimo tajnim ključem na način: Provjeru vršimo javnim ključem na način: Šifriranje vršimo javnim ključem na način: Dešifriranje vršimo tajnim ključem na način: Isprobajte potpisati nekoliko poruka i usporedite dobivene potpise pa zatim provjerite koliko je dugačka najduža poruka koju možete potpisati, ako ograničenje postoji. Isprobajte šifrirati nekoliko poruka i uvjerite se da su rezultati različiti, a zatim provjerite koliko je dugačka najduža poruka koju možete šifrirati, ako ograničenje postoji. Note - U nastavku ćemo, kao i dosad, šifrirati i dešifrirati unutar jednog procesa bez korištenja međuprocesne komunikacije (primjerice, putem socketa), obzirom da razdvajanje koda na dvije strane koje međusobno komuniciraju komplicira kod i odvlači fokus sa usvajanja načina korištenja kriptografskih algoritama. Međuprocesnu komunikaciju ćemo uvesti na kraju. Razmjena simetričnih ključeva korištenjem asimetričnog šifriranja - Jedna od tipičnih primjena asimetričnog šifriranja je razmjena ključeva za simetrično šifriranje. Ključ za simetrično šifriranje se bira na jednoj strani: Kako simetrični ključ korišten unutar jedne sesije korisnik ne mora pamtiti, bolje ga je slučajno generirati: Neka su sad spremljeni tajni ključ u varijabli private_key i javni ključ u varijabli public_key . Na strani koja je generirala simetrični ključ on se šifrira javnim ključem: Nakon primanja šifriranog ključa na drugoj strani on se dešifrira tajnim ključem na način: Autentificirano šifriranje - U situaciji kad je provedena razmjena ključeva mehanizmom opisanim iznad moguće je iskoristiti bilo koji od algoritama za šifriranje. Specijalno, ako za simetrično šifriranje želimo koristiti AES-GCM, onda ćemo to izvesti na način: Nakon razmjene ključeva i druga strana bi imala isti ključ. Dodatno nam treba broj koji se koristi samo jednom (engl. number used once, kraće nonce): Taj broj možemo razmijeniti na isti način kao ključeve. Šifriranje zatim vršimo na način: Posljednji parametar su podaci koji se šalju bez šifriranja za kojima nemamo potrebu pa ih postavljano na None . Dešifriranje se vrši na način: Autentifikacija poruka - Autentifikaciju poruka je moguće vršiti temeljeno na hashiranju ili temeljeno na šifriranju: Autentifikacija poruka temeljena na hashiranju - HMAC ( dokumentacija ) inicijaliziramo za svaku poruku na način: Poruka i hash šalju se drugoj strani koja ima ključ dobiven razmjenom ključeva opisanom iznad. Provjera poruke se vrši na način: Autentifikacija poruka temeljena na šifriranju - CMAC ( dokumentacija ) se također inicijalizira za svaku pojedinu poruku na način: Poruka i njen CMAC šalju se drugoj strani koja ima ključ dobiven razmjenom ključeva opisanom iznad. Provjera poruke se vrši na način: Iskoristite neki drugi algoritam umjesto AES-a, npr. TripleDES , Blowfish ili ChaCha20 . Dvofaktorska autentifikacija i jednokratne zaporke - Dvofaktorska autentifikacija uz standardnu zaporku koristi i jednokratnu zaporku koja se generira prilikom prijave i šalje korisniku drugim kanalom, primjerice e-mailom ili SMS-om. Dva su pristupa stvaranju jednokratnih zaporki: Jednokratne zaporke temeljene na HMAC-u - Inicijalizacija HOTP-a ( dokumentacija ) vrši se na način: Drugi parametar kod HOTP-a je broj znakova koje će generirane zaporke imati. Nakon inicijalizacije moguće je generirati niz jednokratnih zaporki: Generirane vrijednosti se tada šalju nekim kanalom kojem jedino korisnik koji se prijavljuje ima pristup. Prima se korisnikov unos i provjerava na način: Jednokratne zaporke temeljene na vremenu - Inicijalizacija TOTP-a ( dokumentacija ) vrši se na način: Drugi parametar kod TOTP-a je, kao i kod HOTP-a, broj znakova koje će generirane zaporke imati. Posljednji navedeni parametar je vremenski korak u sekundama, odnosno interval nakon kojeg će doći iduća jednokratna zaporka. Nakon inicijalizacije moguće je generirati niz jednokratnih zaporki navođenjem vremena: Generirana zaporka šalje se korisniku i od njega prima, a zatim se provjera vrši na način: Author: Vedran Miletić