ACER_112024 ACER_112024 ACER_112024

Python a kybernetická bezpečnosť – 18. časť

0

Túto a takisto pár nasledujúcich častí seriálu venujeme šifrovaniu. Samozrejme, zameriame sa na jeho využitie v rámci našich programov Python na riešenie úloh patriacich do oblasti kybernetickej bezpečnosti. Šifrovanie je podobne ako tunelovanie nástroj určený na ukrytie informácií, ktoré prenášame pri komunikácii medzi klientom a serverom, resp. medzi zariadením obete a zariadením útočníka. Okrem toho sa často používa na veľmi nekalý účel v rámci tzv. ransomvérových programov, ktoré obetiam zablokujú prístup k ich cenným údajom. Útočník prostredníctvom ransomvéru zašifruje vybrané údaje a žiada od obete výkupné za zaslanie dešifrovacieho kľúča. Šifrovanie je však užitočné aj z mnohých iných dôvodov, ako napr. pri zasielaní riadiacich údajov/povelov, na ukrytie užitočných údajov (payload), ukrytie šifrovacích kľúčov, resp. pomocných parametrov/atribútov používaných počas šifrovania.

S_1124 T TABS10 Advertisement

Šifrovanie

Téme šifrovania sme sa pomerne detailne venovali v rámci nášho seriálu Praktická kryptológia, preto tu spomenieme iba niekoľko základných faktov:

  1. V súčasnosti sú najrozšírenejšie tri typy šifrovania, a to symetrické, asymetrické a hybridné. Pri symetrickom šifrovaní používa jedna aj druhá strana rovnaký šifrovací kľúč. Šifry sú rýchle a môže nimi byť zašifrované veľké množstvo údajov. Asymetrické šifrovanie používa kľúčový pár (verejný a súkromný kľúč). Šifry sú pomalé a šifruje sa nimi zväčša malé množstvo údajov. Hybridné šifrovanie je kombinácia uvedených dvoch, pričom asymetrická šifra je použitá na ochranu kľúča symetrickej šifry.
  2. Symetrické šifry sa delia na prúdové (stream) a blokové (block). Prúdové šifrujú údaje ľubovoľnej dĺžky bajt po bajte. Blokové šifrujú ucelené bloky údajov pevne stanovenej dĺžky (napr. 128b = 16B, 256b = 32B...). V aplikačnej praxi sa blokové šifry používajú v tzv. operačných módoch, ktoré umožňujú šifrovať údaje ľubovoľných dĺžok, pričom niektoré módy efektívne menia blokové šifry na prúdové.
  3. Moderné šifrovanie často vyžaduje okrem zabezpečenia dôveryhodnosti (confidentiality) aj overovanie hodnovernosti (authenticity, integrity) údajov prenášaných komplexnou prenosovou sústavou. Práve na dosiahnutie autentickosti a integrity sa zaviedli moderné operačné módy blokových šifier, resp. používanie tzv. MAC/HMAC (Message Authentication Code/Hash-based MAC) funkcií. Zjednodušená schéma implementácie MAC, ktorý je označovaný aj ako Authentication Tag, je uvedená na obr. 1.

Obr. 1 Overenie hodnovernosti/integrity správ pomocou MAC

 

AES (Advanced Encryption Standard)

Ide o symetrickú šifru s pevnou dĺžkou bloku 16B, pričom šifrovacie kľúče môžu mať dĺžku 128b, 192b alebo 256b. AES je pomerne pevne zakotvený šifrovací štandard. Šifra je veľmi rýchla, bezpečná a z dôvodu šifrovania údajov ľubovoľnej dĺžky vie pracovať v nasledujúcich módoch:

ECB

Electronic CodeBook

Nezašifrovaný blok sa šifruje nezávisle od ostatných blokov.

CBC

Ciphertext Block Chaining

Nezašifrovaný blok sa spojí s predchádzajúcim zašifrovaným blokom pomocou funkcie XOR.

CTR

CounTeR

Zmení blokovú šifru na prúdovú. Bajt nezašifrovaného bloku sa spojí (XOR) s bajtom z Keystream, ktorý je generovaný zašifrovaním sekvencie Counter Blocks s ECB.

CFB

Cipher FeedBack

 

OpenPGP mode – variant CFB módu

Zmení blokovú šifru na prúdovú. Bajt nezašifrovaného bloku sa spojí (XOR) s bajtom z Keystream, ktorý je generovaný s využitím segmentov.

OFB

Output FeedBack

Zmení blokovú šifru na prúdovú. Bajt nezašifrovaného bloku sa spojí (XOR) s bajtom z Keystream, ktorý je generovaný rekurzívnym šifrovaním Initialization Vector (IV).

CCM, EAX, GCM, SIV, OCB – moderné operačné módy podporujúce overovanie autentickosti šifrovaných údajov.

 

PyCryptodome (https://www.pycryptodome.org)

Python dokáže riešiť šifrovanie prostredníctvom funkcií veľmi efektívneho balíka PyCryptodome (odnož knižnice PyCrypto – Python Cryptography Toolkit), ktorý si vieme ľahko doinštalovať pomocou príkazu pip install pycryptodome. Balík okrem iného obsahuje funkcie určené na realizáciu symetrického šifrovania pomocou algoritmu AES (konkrétne modul Crypto.Cipher.AES). Jednotlivé funkcie sú organizované do nasledujúcich podbalíkov (sub-packages):

Cipher

Šifrovanie a dešifrovanie údajov

Signature

Autentickosť zašifrovaných údajov

Hash

Tvorba hašov

PublicKey

Práca s verejnými kľúčmi

Protocol

Uľahčenie komunikácie

IO

Kódovanie

Random

Generovanie náhodných údajov

Util

Všeobecné nástroje

Nový objekt vytvoríme pomocou funkcie Crypto.Cipher.AES.new(). Jej parametrami sú šifrovací kľúč (key) a operačný mód (chaining mode). Medzi ďalšie argumenty patrí napr. iv (inicializačný vektor), nonce (náhodné číslo aplikovateľné v konkrétnych operačných módoch) a veľkostné parametre zašifrovaných, resp. dešifrovaných údajov.

Šifrovanie vykonávame pomocou funkcie encrypt(), dešifrovanie pomocou funkcie decrypt(). Obe funkcie musíme vykonať v prípade dlhších údajov viackrát. Konkrétne príklady použitia modulu AES vrátane opisu významu parametrov a kľúčových slov jeho funkcií možno nájsť priamo v definičnom súbore Crypto/Cipher/AES.py.

Šifrovanie údajov na zariadení obete

Je samozrejmé, že šikovný útočník nebude na cieľovom zariadení šifrovať systémové súbory, pretože by tým veľmi rýchlo znefunkčnil cieľový systém. Preto najskôr vyhľadá nesystémové súbory obsahujúce „citlivé“ údaje (napr. súbory MS Word, Excel, databázové súbory, obrázky, multimediálne súbory...) a systém nechá bežať bez povšimnutia. V prípade nájdenia a zašifrovania dostatočného množstva súborov obeť vyzve na zaplatenie výkupného. V minulosti sa, žiaľ, objavilo viacero prípadov, keď útočník ani po zaplatení výkupného obeti nevydal šifrovací kľúč, čím sa stali jej používateľské údaje nepoužiteľnými. Dešifrovanie údajov s využitím šifry AES je v súčasnosti stále časovo nesmierne náročná úloha. Šifra sa stále považuje za veľmi bezpečnú a bežnými zariadeniami neprelomiteľnú.

Zobrazit Galériu

Marek Sopko

Všetky autorove články

Pridať komentár

Mohlo by vás zaujímať

Mohlo by vás zaujímať