Python a kybernetická bezpečnosť – 18. časť
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.
Š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:
- 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.
- 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é.
- 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